首页
论坛
课程
招聘
[原创]看雪.TSRC 2017CTF秋季赛第二题 ctf2017_Fpc
2017-10-26 23:09 1612

[原创]看雪.TSRC 2017CTF秋季赛第二题 ctf2017_Fpc

2017-10-26 23:09
1612
 

这个题,很有意思。被题目引向了错误的方向,写一下整个思考过程。

错误方向


 

首先是main函数很奇怪,没有传递参数的过程。

 

然后找到是get_input函数在搞事情,get_input把输入读入了栈里面,而不是在堆中分配内存。

 

这样函数退出后,输入还是在栈里面。在这里发现如果输入超过12个字符(包括字符串末尾的'0'),就会覆盖函数的返回地址,一开始以为这既然是逆向题,应该不会用这个漏洞吧。再往下看check_one函数和check_two函数,实际上12个字符的最后4个会被覆盖,只有前8个有效。check_one函数和check_two函数都是把8个字节当成两个整数做计算。

 

本来以为按照这个算一下就行了,然而,check_onecheck_two不能同时满足。以为自己算的不对,搞了很久。

正确方向


 

后来发现,在check_one函数和print函数中间有一大段指令,不知道是干什么的。

想到之前有一个栈溢出漏洞,先跳转到这来执行一下,正好这个地址0x00413131对应的字符串是11A,末尾还有个0。

 

输入的字符串是123456789abc11A
跳转后发现这里好像真的是有文章的,很多跳转指令中间藏着一些pop, mov, sub, add等指令。核心指令如下:

.text:004131BA pop     eax                  ;前面四个字节,1234 -> 0x34333231
.text:004131EB mov     ecx, eax
.text:0041321F pop     eax                  ;中间四个字节,5678 -> 0x38373635
.text:00413254 mov     ebx, eax
.text:00413289 pop     eax                  ;最后四个字节, 9abc -> 0x63626139
.text:004132B5 mov     edx, eax
.text:004132AD mov     edx, eax
.text:004132E2 mov     eax, ecx
.text:00413316 sub     eax, ebx
.text:00413349 shl     eax, 2
.text:00413380 add     eax, ecx
.text:004133B5 add     eax, edx
.text:004133E9 sub     eax, 0EAF917E2h      ;关键,令 eax = 0xEAF917E2
.text:00413455 add     eax, ecx
.text:00413489 sub     eax, ebx
.text:004134BF mov     ebx, eax
.text:004134F3 shl     eax, 1
.text:00413525 add     eax, ebx
.text:00413559 add     eax, ecx
.text:0041358F mov     ecx, eax
.text:004135C3 add     eax, edx
.text:004135F7 sub     eax, 0E8F508C8h      ;关键,令 eax = 0xE8F508C8
.text:00413665 mov     eax, ecx
.text:0041365D mov     eax, ecx
.text:004136A7 sub     eax, edx
.text:004136D8 sub     eax, 0C0A3C68h       ;很明显了

分析上面汇编代码,这是一个三元一次方程组,以A, B, C代表输入字符串的前、中、后四个字节表示的整数。这个方程组是

(A - B) << 2 + A + C            = 0xEAF917E2
(A - B) << 1 + (A - B) + A + C  = 0xE8F508C8
(A - B) << 1 + (A - B) + A - C  = 0xC0A3C68

最后解得

A = 0x7473754A
B = 0x726f6630
C = 0x6E756630

变成字符串为Just0for0fun,加上跳转地址,最终的flagJust0for0fun11A


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

收藏
点赞0
打赏
分享
最新回复 (1)
雪    币: 528
活跃值: 活跃值 (319)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
叶小北 活跃值 2017-10-28 16:26
2
0
666666666666
游客
登录 | 注册 方可回帖
返回