-
-
[原创]]CTF2019第六题---Repwn
-
发表于: 2019-3-18 17:53 3093
-
反编译程序,查看所有字符串,来到如下位置:
首先来看scanf接收输入后的第一个函数
这里会校验输入字符串的第9-20位,并且限制第21位为字符"H"。
接着来看接收输入后的第二个函数:
这个函数里会限制输入的长度为24个字符,然后通过一个计算后,将输入的后四位依次减去一个值,之后将该字符串进行拷贝(此处有溢出)。
看下计算函数的内容:
此处首先计算输入的前8位,并进行验证。
通过以上分析可知,关键在于输入字符串前8位的计算,
通过该处计算内容与验证条件可编写爆破脚本,对前八位进行爆破。由于直接爆破8位字符串难度较大,所以根据验证条件,将爆破分为两部分。
第一部分,通过
爆破字符串的后四位,我使用的是26位大小写字符加数字进行爆破,速度很快。
符合条件的后四位有:
使用任意一个,并根据前一个判断条件,使用相同的方法来爆破字符串的前四位。得出的结果有很多,都符合条件,随意取一个即可。
这样,便可获取到输入字符串的前21位。
接下来便是计算字符串的后三位,这里就用到了前面所说的溢出点,通过调试可知,字符串的后四位,即为可控的返回地址,这个返回地址的后两位已经由字符串的第21位“H”和上面对于字符串后四位的计算确定为“0xF0”。但是控制返回地址该跳往何处呢?
没什么思路的时候还是看看字符串吧,果然在字符串中发现了蛛丝马迹。。。。
有一处加密的字符串看起来很可疑,跳转过去。。。果然
这里发现了很多和算法相关的代码,查找源头
这里的函数地址正好为“0x00401BF0”,那么通过第一处字符串的后四位便可将程序跳转到这里。
至此,第一处算法的分析结束,第一处输入的字符串为"20101001X1Y0uN3tG00dHaCk"
过了第一关之后,对第二关的代码进行分析后,可知这里使用的是标准的DES算法,并且密钥也很明显。
分析关键验证处可知,校验的字符串为
提取前16位为“9DB084AC97041E30”,通过DES解密,获取明文
将前两关所得的结果以此输入,可得flag
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!