首页
社区
课程
招聘
[原创]看雪.TSRC 2017CTF秋季赛第二题WP
发表于: 2017-10-27 13:30 2955

[原创]看雪.TSRC 2017CTF秋季赛第二题WP

2017-10-27 13:30
2955

IDA一加载就看到main函数了,流程也很简单,先是打印信息,再要求输入key,后面有两个检验函数,都通过则打印成功信息。
检验算法整理如下,v0v1分别为输入的第一、第二个双字。:

这也太简单了,可能有问题。先不管,直接z3求解,秒出无解结果。
后来仔细看了下前后两对式子后面的常数,在字母数字组合中基本是无解的,更不用说同时满足两组。

在输入函数里,并未对输入长度作限制,可导致栈溢出。

输入与返回地址之间偏移0x0c字节。key输入12字节后就会覆盖返回地址。询问了组织方,输入不能有不可见或其它特殊字符,而且由于输入格式是%s,所以输入字符会附加一个字节的\x00,所以不能直接返回到正确的消息打印流程。
又尝试搜索代码区,希望能找到可以利用的gadget,结果是让人失望的。

现在情况是明显的流程是错误的,题目可能又对出现多解的ROP作了防范。那程序本身肯定有一处是正确流程的开始,而且其地址的低三字节应该都是数字或字母(因为地址0x0040xxxx没有符合条件的,所以返回地址的低三字节全要改写,高字节原是\x00,覆写为附加的\x00,保持不变)。

此时,要简单分析下代码区的函数分布。sub_4010e0sub_413d42之间,有大段的00填充及非正常代码。

sub_4010e0函数到40112A结束。后面是5个90及0x4800个00填充。接一个'C3 ret',后面一条指令实际上就是sub esp,10,再后面两条条件跳转jo jno这是花指令常用的方式了,静态向后看了看,非常大片的花指令,每过一段跳转之后会接一条正常的指令,能看出在取输入。果断停止静态分析。看了下分析过的花指令,感觉ida不太好去除。

直接上OD,输入9876543210ab11A,在00413131下断,单步跟踪,跳转直接略过(关键的比较跳转除外),很快就能把关键算法的指令弄出来。

整理成公式就是:

同样z3求解(后来发现直接计算器就能算出来,2333),代码如下:


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//