首页
社区
课程
招聘
[原创]CTF第二题 摸清出题人的思路,解题有方向
发表于: 2017-10-30 03:03 8234

[原创]CTF第二题 摸清出题人的思路,解题有方向

2017-10-30 03:03
8234

图片描述
图片描述
然后我尽然用暴力。然后没有结果。白白浪费了一天。
一定是第一天的题目纯洁了我的心灵。导致我忘记了,被出题人支配的恐惧。

显然暴力不仅无解还会,陷入一个死循环穷举5个62个字符长度,6个62个字符长度。7个62个字符长度,这是穷举已经变得不可能。没错我穷举了,来嘲笑我吧。

当输入4个字符的时候 ,我们不在讨论。
输入字12个字符的时候,程序会要求我重新输入,od跟随,表明程序会发生溢出。所以我定想程序很有可能时溢出到一段代码。
这里直接讨论输入12个字符
图片描述 !
图片描述

作者作为防守方,其实是有诸多限制。

但是这里却有一个溢出,如果溢出能直接溢出到“You Get it”,那么作者就玩完了,因为此时此题必定多解。如我所料。YouGetit地址是
图片描述
显然不是a-z,A-z,0-9,(0-9)字符,不符合比赛要求。其实程序可以直接溢出到这里,但是不能手动输入,但是复制粘贴亲测可用。

能出题的作者肯定是对自己题目有自信的,在作者脑中中题目绝对是唯一解的。并且由于作者是汇编写的程序,显然是为了对程序的流程有最大限度的控制。所以溢出绝对是这次的关键。

作则想溢出又不想多解,所以要明确两点。

所以对填充数据没有限制是造成多解的直接原因
显然直接溢出是不符合出题条件的。但是,毛主席说过没有条件,就创造条件,
我们可以加一段代码来限制填充的数据。

到这里答案就已经出来了。作者想溢出到一段代码,由这段代码检查溢出的填充数据,这样就保证了输入的唯一性。

现在留给我们的任务就是定位该溢出到什么位置。用IDA反汇编查看。

同时由于输入被限制在a-z,A-z,0-9,(0-9)字符之间因此溢出位置十分有限。0x40xxxx肯定不可能了因为0x40是@。所以从0x41xxxx开始找。IDA开始找。
图片描述
哈哈看地址0x00413131。这数据非常奇怪而且地址都是0x00403131都满足字符要求。

先溢出到这里试一试,现在只要随便输入12个字符末尾加上11A就好了。程序自然就会溢出到这里。
图片描述
一看果然是一条可执行的指令,一路F7。发现可以执行,显然是花指令。追踪代码提取关键。

最终提取到,三个公式。

将答案写到WinHex中,注意小端序
图片描述

提供一个计算线性方程的网站
http://www.yunsuanzi.com/cgi-bin/linear_system.py
图片描述

现在在来站在作者的角度,作者想不让人分析出来,同时又怕没一个人做出来。

因为作者完全能够将溢出点,溢出在这段异常数据的中间,试问。如果溢出点在这段程序中间,我们怎办。甚至作者将溢出点藏在别的位置,打散分开在代码中间,先执行代码变形,在跳到检查位置。或者是直接上硬编码。

作者真的是十分厚道,但是也确实够“阴”。这道题目真的很有意思。

今天其实看雪第三道题目已经接近尾声了。第三道题目和第二道题目虽然解法不一样但是思想其实是相同的。

之前直接发word,被退回来了,还好给推回来里面全是错误今天重写的时候才发现。这回换Markdown。顺便把之前的错误给改了。

 
 
 
 
 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 102
活跃值: (142)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
我是自从明白了溢出点在花指令里面就放弃了。。。这么多花指令里需要找出来一条可以通过的路线,何其艰难。。没想到作者竟然放在了头部。这也算是放水了吧。
2017-10-30 11:52
0
雪    币: 58
活跃值: (76)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
3
我觉得可能是看雪内部对题目有要求,放在中间。或者是藏在程序中,解题就变成了碰运气,拼人品,但是也不完全是碰运气,但是运气总是要那么一点的。
2017-10-30 12:05
0
雪    币: 312
活跃值: (123)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
“对于直接跳到,you  get  it  ,  但是不能手动输入  ”  这句有点出入哦,可见字符也是可以  ,详见  https://bbs.pediy.com/thread-222334-1.htm#point_1502723,只不过不满足作者的输入规则~
2017-10-30 12:42
0
雪    币: 51
活跃值: (11)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
我也跑了一晚啊,额,
2017-10-30 13:14
0
雪    币: 403
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我是直接单步跟踪的,没有搞出来,第一个伪验证就在里面转悠了
2017-11-1 19:56
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不错!
2017-11-1 22:00
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
你说我一个Java程序猿看这个,能看懂什么吗~~~不过,还是点赞啊,分析的很精彩~~~
2018-1-26 17:29
0
游客
登录 | 注册 方可回帖
返回
//