看雪CTF第二题
全局搜索字符串定位关键,然后就被套路了
然后我尽然用暴力。然后没有结果。白白浪费了一天。
一定是第一天的题目纯洁了我的心灵。导致我忘记了,被出题人支配的恐惧。
显然暴力不仅无解还会,陷入一个死循环穷举5个62个字符长度,6个62个字符长度。7个62个字符长度,这是穷举已经变得不可能。没错我穷举了,来嘲笑我吧。
穷举到6个字符,甚至12字符来的灵感
当输入4个字符的时候 ,我们不在讨论。
输入字12个字符的时候,程序会要求我重新输入,od跟随,表明程序会发生溢出。所以我定想程序很有可能时溢出到一段代码。
这里直接讨论输入12个字符
!
站在作者角度思考
作者作为防守方,其实是有诸多限制。
- 不能出过大的穷举
- 题目解还要唯一,
- 只能是a-z,A-z,0-9,(0-9)字符。
- 作者是懂汇编的,且程序是用汇编写的。因为3连call只能是人为设计的。
但是这里却有一个溢出,如果溢出能直接溢出到“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。发现可以执行,显然是花指令。追踪代码提取关键。
最终提取到,三个公式。
最终整理公式是。
(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
厚道作者面临的矛盾
现在在来站在作者的角度,作者想不让人分析出来,同时又怕没一个人做出来。
- 作者是不想让我们太过容易发现溢出点的。所以作者加了花指令,让我们用IDA直接看不到这段代码。
- 作者也怕我们找不到溢出点,没意思。所以作者也不敢做的太过分,将溢出点放在段首部。
增加题目难度方法
因为作者完全能够将溢出点,溢出在这段异常数据的中间,试问。如果溢出点在这段程序中间,我们怎办。甚至作者将溢出点藏在别的位置,打散分开在代码中间,先执行代码变形,在跳到检查位置。或者是直接上硬编码。
作者真的是十分厚道,但是也确实够“阴”。这道题目真的很有意思。
出题人思路总结
今天其实看雪第三道题目已经接近尾声了。第三道题目和第二道题目虽然解法不一样但是思想其实是相同的。
- 开始以个十分复杂 或者 十分简单(貌似)的验证过程勾引你,浪费你的时间。(第三题对应的是前者,第二题,对应的是后者)
- 然后在一个很不齐眼的的地方悄悄个构造一个“漏洞”。
(第二题,是一个缓冲区溢出。第三题,是一个逻辑漏洞)
- 想办法约束这个漏洞的利用方法。
(第二题,完美的约束了漏洞利用方法。第三题,在MessageBox没有约束好,好可惜啊)。
之前直接发word,被退回来了,还好给推回来里面全是错误今天重写的时候才发现。这回换Markdown。顺便把之前的错误给改了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工
作,每周日13:00-18:00直播授课