首页
论坛
课程
招聘
[原创]CTF第二题 摸清出题人的思路,解题有方向
2017-10-30 03:03 4639

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

2017-10-30 03:03
4639
 

目录

看雪CTF第二题

全局搜索字符串定位关键,然后就被套路了

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

 

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

穷举到6个字符,甚至12字符来的灵感

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

站在作者角度思考

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

  1. 不能出过大的穷举
  2. 题目解还要唯一,
  3. 只能是a-z,A-z,0-9,(0-9)字符。
  4. 作者是懂汇编的,且程序是用汇编写的。因为3连call只能是人为设计的。
    图片描述

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

 

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

想溢出又不想多解,作者逃不掉思路

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

  1. 溢出会改变流程。(这点隐蔽性很高,加上一个诱饵,弄死一大片)
  2. 造成溢出的填充数据没有限制。(缺点,这点会造成多解)

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

 

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

 

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

快速定位溢出点

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

 

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

 

最终提取到,三个公式。

最终整理公式是。
(x-y)<<2 + x    + y + z = EAF917e2
(x-y)<<1 +(x-y) + x + z = 0e8f50c8
(x-y)<<1 +(x-y) + x – z = 0c0a3c68
整理以后德
5x-4y+z =   3942193122
4x-3y+z =   244254152
4x-3y-z =   201997416
解:
x1    =    1953723722.0000
x2    =    1919903280.0000
x3    =    1853187632.0000
HEX:
7473754A 
726F6630
6E756630

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

 

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

厚道作者面临的矛盾

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

  1. 作者是不想让我们太过容易发现溢出点的。所以作者加了花指令,让我们用IDA直接看不到这段代码。
  2. 作者也怕我们找不到溢出点,没意思。所以作者也不敢做的太过分,将溢出点放在段首部。

增加题目难度方法

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

 

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

出题人思路总结

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

  1. 开始以个十分复杂 或者 十分简单(貌似)的验证过程勾引你,浪费你的时间。(第三题对应的是前者,第二题,对应的是后者)
  2. 然后在一个很不齐眼的的地方悄悄个构造一个“漏洞”。
    (第二题,是一个缓冲区溢出。第三题,是一个逻辑漏洞)
  3. 想办法约束这个漏洞的利用方法。
    (第二题,完美的约束了漏洞利用方法。第三题,在MessageBox没有约束好,好可惜啊)。

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


[培训]12月3日2020京麒网络安全大会《物联网安全攻防实战》训练营,正在火热报名中!地点:北京 · 新云南皇冠假日酒店

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