首页
社区
课程
招聘
[原创]CTF2017下半年第二题writeup
发表于: 2017-10-28 11:50 4115

[原创]CTF2017下半年第二题writeup

2017-10-28 11:50
4115

看雪 2017 下半年 TSRC CTF 第二题 writeup

这道题坑了好久。。。。。。好不容易找到突破点后,发现作者的思路奇特,居然还有这种操作。

拿到题目后,乍一看就是输入后经过两个函数认证,满足两个二元一次方程组即可;但是这个方程组根本没有解,突破口不在这里,如果在这里解这两个二元一次方程组的话,就正好落入了作者的陷阱中(我就是- -!)。

然后在长时间的挣扎后,又在群里看大家奇特的思路,确实发现了 pwn 的味道,而突破口恰恰在这里,通过输入合适的字符串,控制 RETURN,然后跳转到目标位置进行执行;而因为本来的 RETURN 的值为 0x0040101C,通过这里可以推断出 flag 是 15 位的,同时 flag 必须是数字和字母,RETURN 的值就有了限制,即每一个 byte 都必须大于 0x20,小于 0x7F。

可是要跳到哪里执行呢?尝试了很多满足数字和字母的 push ebp 的位置,发现都不正确,然后重新翻了一下 IDA,发现了其中有一片 IDA 未还原出的代码,很有可能作者将认证函数写在这里,然后混淆后的,再看其地址 0x00413131,也满足要求,那就跳过去执行试试。

一大片 jo jno jmp 跳转,然后将输入的值放入了 ebx ecx edx 中,然后做 一系列运算,最后与 0xEAF917E2 进行 sub 运算,再 jz 跳转。很明显的认证函数,跟到这里,算是过了作者的知识点。

后面的步骤就是跟代码然后列方程,可以列出 3 个 三元一次方程,求解即可:

Time: 2017.10.28


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 53
活跃值: (234)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
每一个  byte  都必须大于  0x30吧,只能是数字和字母,最小是0
2017-10-28 12:12
0
雪    币: 28
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
是的,哈哈
2017-10-28 12:29
0
雪    币: 0
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
我是陷入陷阱直接爬不出的那种
2017-10-28 12:41
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错!
2017-10-28 22:26
0
雪    币: 256
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
求下群号啊!
2017-10-29 16:54
0
雪    币: 28
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
官方群啊-  -!。。
2017-10-30 13:43
0
雪    币: 4
活跃值: (12)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
8
可以可以
2017-11-8 14:25
0
游客
登录 | 注册 方可回帖
返回
//