-
-
[原创]再谈SECCON secure_keymanager
-
发表于:
2017-12-17 21:32
4200
-
[原创]再谈SECCON secure_keymanager
t00ls上有一篇讲这道题的帖子:
https://www.t00ls.net/thread-43133-1-1.html
细细研究了一下这道题,并参考了多份来自复旦六星的writeup,这里表示感谢。
https://github.com/sixstars/ctf/tree/master/2017/seccon/secure_keymanager
不过根据我的动态调试,这题有个更为直接的思路。
因为题目中所给的libc中printf的LSB刚好为00,所以可以造出0x70的fastbin去重定向到GOT上。并且在GOT上的顺序也恰到好处,atoi在最后,中间有几个无关紧要的函数。
也就是说,三次free后,依次malloc最终拿回GOT上的chunk,修改atoi为printf,就可以了。
最终应该改成如下:
[0x602018] free@GLIBC_2.2.5 -> 0x7f0d103224f0 (free) ◂— push r13
[0x602020] puts@GLIBC_2.2.5 -> 0x7f0d1030d690 (puts) ◂— push r12
[0x602028] __stack_chk_fail@GLIBC_2.4 -> 0x4006c6 (__stack_chk_fail@plt+6) ◂— push 2
[0x602030] setbuf@GLIBC_2.2.5 -> 0x7f0d103146b0 (setbuf) ◂— mov edx, 0x2000
[0x602038] strchr@GLIBC_2.2.5 -> 0x7f0d10327ab0 (__strchr_sse2) ◂— movd xmm1, esi
[0x602040] printf@GLIBC_2.2.5 -> 0x7f0d102f3800 (printf) ◂— sub rsp, 0xd8
[0x602048] malloc_usable_size@GLIBC_2.2.5 -> 0x400706 (malloc_usable_size@plt+6) ◂— push 6
[0x602050] read@GLIBC_2.2.5 -> 0x7f0d10395220 (read) ◂— cmp dword ptr [rip + 0x2d2519], 0
[0x602058] __libc_start_main@GLIBC_2.2.5 -> 0x7f0d102be740 (__libc_start_main) ◂— push r14
[0x602060] strcmp@GLIBC_2.2.5 -> 0x4141410d1033d570
[0x602068] malloc@GLIBC_2.2.5 -> 0x4141414141414141 ('AAAAAAAA')
[0x602070] atoi@GLIBC_2.2.5 -> 0x4006f0 (printf@plt) ◂— jmp qword ptr [rip + 0x20194a]
那么这个题就变成printf的题目了,printf的利用留作习题。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!