第一届 BMZCTF Writeup
misc
MISC_签到题
关注公众号即可获得flag
MISC_你猜猜flag
下载得到一个exe程序,分离得到一个zip压缩包。
拖入ida得到解压密码,解压后得到mdb文件,百度搜索到mdb爆破程序进行爆破,爆破后成功得到flag
Crypto
Xor
|
|
据说是原题,我是用爆破的方法做的。
|
|
Reverse
逆向_RE1
|
|
encrypt_jump好像没用 因为有个mod,所以我就没用逆向了,我是正向爆破的。
|
|
逆向_RE2
|
|
前面是简单的几个异或和倒序一下,后面是用Sbox做了个位置变换。
|
|
本来都做出来了,一直交不上,后来看到有两个人一起交了,我就很纳闷去交了一下,结果就交上了。
逆向_RE3
|
|
用JEB看一下的话还是比较容易的,直接拿出来改一下就能用。 这道题会不会有点太简单了?
pwn
pwn1
|
|
pwn2
|
|
pwn3
这道题值得说一下,我刚开始的时候连漏洞点都没找到,以为是什么新知识。
后来发现有很快就有二血了,就想了一下会不会是我有些地方没看出来。
就调试了一下,发现每执行一次,栈都会往下偏移1个字节,利用这个就可以进行栈溢出啦。
|
|
pwn4
只有单次的格式化字符串漏洞,而且是Partial RELRO。
观察发现可以溢出到canary,所以想到利用**__stack_chk_fail**来多次利用。
我这里修改了got表中的**__stack_chk_fail**,然后触发溢出,让他再回到main函数,这样可以多次利用printf来执行修改。
但是由于字节限制,所以每次只能写出两个字节,我刚开始的时候想用one_gadget,然后观察了一下各个会调用的函数,发现有个函数可以只修改两个字节来执行第三个one_gadget,然后本地打通了,但是靶机报错。
群里问了一下没人理我。
那么就只能想办法执行system了,正好结合了前段时间学到的IO_FILE的知识,发现程序退出的时候会执行**_IO_flush_all_lockp**,那我们可以利用这个函数来操作一下(这里不懂的可以看一下我之前写的那几篇里面有详细的介绍)
我这里找了stdin来getshell。
用于只能写入两字节,所以过程就繁琐了一些。
|
|
pwn5
感觉格式化字符串是不是出的有点多了?
这道题我稍微看了一下,和pwn4有些类似,区别就是这里要用%n复写flag字段,达成多次利用printf的目的,不过我这个肯定不是预期,我看他还有个leak函数,我这个却直接getshell了。
不过打比赛嘛..怎么方便怎么来,我直接用pwn4的改了一下。
呜呜,这里还收到了出题者的一个红包,[谢谢师傅!.jpg],感觉自己不是预期有点不好意思了都。
|
|
总结
感觉比赛的难度还可以再提升一些,但毕竟是第一次举办嘛…
也可能是面相新人的(就像我这种QAQ),所以才会出的比较容易。
希望第二届的时候难度可以提升一些,pwn的考察范围可以更广一些(heap!heap!heap!),还有就是群里管理员最好能理我一下嘛…我一个人好尬的。
对了,希望下次可以有个rank榜单,要不然连自己第几名都不知道呢。。
不过幸亏我会python,写了个简单的程序看排名,
|
|
根据这里面算出来的来看,我最后好像是第三?