首页
社区
课程
招聘
[原创] CTF2017 秋 第二题解答
发表于: 2017-10-26 22:41 5429

[原创] CTF2017 秋 第二题解答

2017-10-26 22:41
5429

1、初步分析陷入迷茫

初步分析程序用全局变量dword_41B034保存了一个控制变量,控制变量初始值为2,当该值变为0时会输出“You get it!”


而程序在获取输入之后调用了2个函数,这两个函数在满足一堆条件下分别会对dword_41B034做减1操作,看似2次减一之后dword_41b034就能变成0

再看条件,两个函数的v0都用的输入的前4字节,v1都用的输入的5到8字节。



我们选出其中的2个方程


求差发现 12*(v1-v0)== 奇数,而输入无论如何都是整数,所以等式左边一直都是偶数,等式永远不会成立。理论上证明这一组方程无整数解,不用去穷举了。

2、发现玄机

发现函数在获取输入时存在栈溢出,输入16个字符程序出现崩溃,返回地址被输入的第13~16个字节覆盖,考虑直接ret到0x40102f位置,但优于规则限制输入字符只能是数字和字母,该方案行不通;而用shellcode的话很难构造出只含有数字和字母的shellcode。考虑到验证码唯一性、字符限制等综合条件,出题人的意图可能是在栈溢出后ret到预先设置好的代码,ret的地址是可以通过输入数字和字母字符构造出来的,用IDA浏览一下程序代码,不难发现一个看似符合条件的可疑块00413131,0x41对应字符A,0x31对应字符1,而0x00刚好是字符串结尾。由此猜测输入共15个字符,最后3个字符是"11A"


3、抽丝剥茧,柳岸花明

用输入11223344556611A作为输入测试,发现程序并没有崩溃,可见思路是正确的。

将输入字符标记为污点,使用污点传播提取出相关的指令如下图,我们假定输入的前4字符组成的int为a,5~8字节组成的int为b,9~12字节组成的int为c,标记出相关指令对应的表达式,推断表达式需满足的条件,构造满足条件的一个输入,让程序往下执行,再得到下一个条件,以此类推。

得到3个3元一次方程组

方程1和方程2求差,得到(a-b) = 0x02040f1a得到 a = 0xe8f508c8 – c -3*(a-b) =0x7a7fa298-3*0x2040f1a = 0x7473754a, 对应字符“Just”

得到 b = a - 0x02040f1a = 0x726f6630,对应字符“0for”

最后串起来得到对应输入字符串:Just0for0fun11A

解题过程的基本思想是用污点传播找出输入影响到的指令及跳转分支,根据验证码的唯一性去求分支的“取等”条件(往往也是随机输入对应的另外一条未走过的分支),构造出方程求解。但是到此为止还未弄清楚程序最后如何输出"You get it!" 为了剖析出题者的思路,我们Trace记录下程序处理正确验证码的过程,在通过层层验证之后,经过了一系列的条件跳转,设计者通过大量的跳转垃圾指令干扰分析,选出核心的16条指令如下所示


第1条call指令长度5字节,并将返回地址0x413835压入栈0x12ff4c的位置,而第16条指令call的一个Printf函数,刚好使用栈0x12ff4c中的值作为参数指针,也就是说会输出0x413835内存位置的字符串。

第2条指令pop eax是为了获得写入数据的内存地址,为了维持栈平衡有了第3条指令push eax,效果是此时eax存储的是要写入”You get it!”的内存地址;

第7,9,11,12条指令通过将一些立即数异或运算得到字符”You get it!”的编码,不直接使用待输出字符串是为了防止搜索;


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

收藏
免费 1
支持
分享
最新回复 (5)
雪    币: 11
活跃值: (12)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
学习了,过程写得很详细,也有很多自己的思考,点赞!!!。另外请教下,帖子中提到的污点传播和Trace记录使用的什么工具?谢谢
2017-10-28 20:29
0
雪    币: 570
活跃值: (180)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
3



照片记录谁

学习了,过程写得很详细,也有很多自己的思考,点赞!!!。另外请教下,帖子中提到的污点传播和Trace记录使用的什么工具?谢谢
Trace是用pin写的插件进行指令级插桩,然后解析Trace指令进行污点传播分析
2017-10-29 09:43
0
雪    币: 11
活跃值: (12)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
4
brichfire 照片记录谁 学习了,过程写得很详细,也有很多自己的思考,点赞!!!。另外请教下,帖子中提到的污点传播和Trace记录使用的什么工具?谢谢 Trace是用 ...
哦哦,基于pin开发的,多谢
2017-10-29 10:28
0
雪    币: 598
活跃值: (282)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
5
学习了
2017-10-30 18:44
0
雪    币: 8447
活跃值: (5041)
能力值: ( LV4,RANK:45 )
在线值:
发帖
回帖
粉丝
6
mark
2019-9-2 16:17
0
游客
登录 | 注册 方可回帖
返回
//