-
-
[原创]2019KCTF Q3 第4题:卧薪尝胆 Writeup
-
发表于:
2019-9-25 17:53
5974
-
[原创]2019KCTF Q3 第4题:卧薪尝胆 Writeup
这里可以看到在_IO_do_write函数中,在调试的时候 发现f->_IO_write_ptr - f->_IO_write_base = 0 ,也就是说不会打印出任何信息。 所以我们需要修改_IO_write_base并且小于_IO_write_ptr,那么size不会等于0,以达到泄露的目的
new_do_write 源码:
目标函数是
_IO_SYSWRITE, 为了顺利到达这里, 我们需要让_flags标志满足上述的一些条件
_flags标志的一些宏:
由于在编辑时我们索引输入为‘-6’,就可以修改stdout,那么我们payload的构造如下,如此便能泄露libc基址
fake_IO_FILE:
fake_vtable:
3.哪些函数会触发
_IO_flush_all_lockp?
①libc执行abort函数时 ②程序执行exit函数时 ③程序从main函数返回时
来看一下exit函数的栈回溯:
一道给了libc的菜单题,没有show功能,在程序一开始有个类似于初始化的函数
具体是进行了malloc_hook和free_hook的替换,目的就是让我们无法修改malloc_hook或者free_hook来劫持流程
checksec一下:全保护
1.在edit时对输入的索引没有检查为负数的情况
2.在edit的时候存在off by null
先来熟悉一下_IO_2_1_stdout的结构和虚函数表_IO_file_jumps的结构:
本题需要用的指针均已在红框内标识,下面讲一下泄露原理
puts函数的调用链:puts-->
_IO_puts->_IO_new_file_xsputn->_IO_new_file_overflow->_IO_do_write->_IO_new_file_write
_IO_new_file_overflow 源码:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-9-25 23:47
被binarymen编辑
,原因: