-
-
[原创]第二题 ctf2017_Fpc
-
发表于: 2017-10-27 23:24 3247
-
1. 清晰的程序结构
2. 得出等式:
5(x-y)+x=
0x8F503A42
13(x-y)+y=
0xEF503A42
17(x-y)+x=0xF3A94883
7(x-y)+y=
0x33A94883
3. 正常解解不开,就想到溢出,通过猜测高位的方式去遍历,10分钟内就能遍历完,发现无解。。。
4. 重新分析程序,发现存储缓存区溢出漏洞,可以自己调节堆栈,跳转到特定地址0x413131
因为这个地址只能是数字字母的ASCII十六进制数值,而且通过静态分析,看出0x413131这段代码开始出现了猫腻。。。
5. 然后程序就会跳转到0x413131执行,来到一片新“
天地
”
6. 这段代码开始就是真正的代码,但是加了花指令,好在不是很影响,直接单步分析即可
7. 单步分析,提取有用的代码
x = ecx = 38373635 y = ebx = 34333231 z = edx = 64636261 00413150 33C0 xor eax,eax eax="56781234abcd11A." 00413184 A3 34B04100 mov dword ptr ds:[0x41B034] eax 标志位清0 004131BA 58 pop eax 38373635 004131EB 8BC8 mov ecx,eax ecx = 38373635 0041321F 58 pop eax eax = 34333231 00413254 8BD8 mov ebx,eax ebx = 34333231 00413289 58 pop eax eax = 64636261 004132B5 8BD0 mov edx,eax edx = 64636261 004132AD 8BD0 mov edx,eax 004132E2 8BC1 mov eax,ecx 38373635 00413316 2BC3 sub eax,ebx 04040404 00413349 C1E0 02 shl eax,0x2 10101010 00413380 03C1 add eax,ecx 48474645 004133B5 03C2 add eax,edx ACAAA8A6 004133E9 2D E217F9EA sub eax,0xEAF917E2 判断1 、、、判断1如果不符合的话 00413B1E 58 pop eax 00413131 00413B4E 35 0E210100 xor eax,0x1210E 0040103F 回到bad 提示 00413B83 3305 34B04100 xor eax,dword ptr ds:[0x41B034] 00413BBB ^\FFE0 jmp eax ; ctf2017_.0040103F 、、、强制修改eax = EAF917E2,继续执行 00413455 03C1 add eax,ecx 38373635 00413489 2BC3 sub eax,ebx 04040404 004134BF 8BD8 mov ebx,eax 04040404 004134F3 D1E0 shl eax,1 08080808 00413525 03C3 add eax,ebx 0C0C0C0C 00413559 03C1 add eax,ecx 44434241 0041358F 8BC8 mov ecx,eax 44434241 004135C3 03C2 add eax,edx A8A6A4A2 004135F7 2D C808F5E8 sub eax,0xE8F508C8 判断2 、、、判断2如果不符合的话,(如果小于这个数字) 00413B1E 58 pop eax 00413131 00413B4E 35 0E210100 xor eax,0x1210E 00413B83 3305 34B04100 xor eax,dword ptr ds:[0x41B034] 00413BBB ^\FFE0 jmp eax ; ctf2017_.0040103F 、、、强制修改 eax = E8F508C8,继续执行 00413665 8BC1 mov eax,ecx 44434241 0041365D 8BC1 mov eax,ecx 004136A7 2BC2 sub eax,edx - 64636261=DFDFDFE0 004136D8 2D 683C0A0C sub eax,0xC0A3C68 判断3 、、、判断3如果不等的话 00413B1E 58 pop eax ; ctf2017_.00413131 、、、判断3强制修改后,继续执行 00413747 58 pop eax ; ctf2017_.00413131 00413777 35 01810000 xor eax,0x8101 0041B030 004137A9 8BF8 mov edi,eax ; ctf2017_.0041B030 004137E2 33C0 xor eax,eax ; ctf2017_.0041B030 00413817 AB stos dword ptr es:[edi] 00413830 E8 0C000000 call ctf2017_.00413841 0041385C 58 pop eax ; ctf2017_.00413835 、、、这个地址就是call 00413841下面的call 0041388E 50 push eax ; ctf2017_.00413835 004138BA 8BF8 mov edi,eax ; ctf2017_.00413835 004138B2 8BF8 mov edi,eax ; ctf2017_.00413835 004138E6 68 6909004E push 0x4E000969 0041391F 58 pop eax 4E000969 00413950 33C2 xor eax,edx xor 64636261 = 2A636B08, 00413983 AB stos dword ptr es:[edi] ,将eax中的4字节数据,写入到 413835地址中, 004139B5 35 3E0A0100 xor eax,0x10A3E 2A626136 004139EB AB stos dword ptr es:[edi] ,将eax中的4字节数据,写入到 413839中, 00413A1C 33C3 xor eax,ebx xor 04040404 = 2E666532 00413A4D 35 141E5122 xor eax,0x22511E14 ——22706A16 、、、、强制让eax = 22511E14 00413A82 AB stos dword ptr es:[edi],将eax中的4字节数据,写入到 41383D中, 00413AB6 35 2D646100 xor eax,0x61642D 判断4 ——217402 00413BBB - FFE0 jmp eax 最终结果,要让eax = 0040102F (因为这里是跳转到成功提示的push)
8. 根据判断2和判断3得出等式:
(x-y)<<1+(x-y)+x+z=E8F508C8 (x-y)<<1+(x-y)+x-z = C0A3C68
然后就能推倒出z=0x6E756630
9. 因为最终eax=0x40102F,所以带入z进行反推,得出x-y=0x2040F71
10. 得出下列等式:
z=0x6E756630 (x-y)<<2+x+z=EAF917E2 (x-y)<<1+(x-y)+x+z=E8F508C8
推导出:
x=0x7473754A
y=0x726F6630
11. 结合第7步中定义的x、y、z定义,还有用来调节堆栈的“11A”
得出结果Just0for0fun11A
(x-y)<<1+(x-y)+x+z=E8F508C8 (x-y)<<1+(x-y)+x-z = C0A3C68
然后就能推倒出z=0x6E756630
9. 因为最终eax=0x40102F,所以带入z进行反推,得出x-y=0x2040F71
10. 得出下列等式:
z=0x6E756630 (x-y)<<2+x+z=EAF917E2 (x-y)<<1+(x-y)+x+z=E8F508C8
推导出:
x=0x7473754A
y=0x726F6630
11. 结合第7步中定义的x、y、z定义,还有用来调节堆栈的“11A”
得出结果Just0for0fun11A
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
他的文章
- 2024KCTF_第九题 第一次接触-提交题目 1687
- [原创]KCTF2023 第十二题深入内核 3547
- [原创]KCTF2023 第八题AI核心地带 9840
- [原创]KCTF2023 第六题 至暗时刻 9620
- [原创]KCTF2023 第五题 争分夺秒 8548
看原图
赞赏
雪币:
留言: