首页
社区
课程
招聘
[原创]2019KCTF Q3 第4题:卧薪尝胆 Writeup
发表于: 2019-9-25 17:53 5975

[原创]2019KCTF Q3 第4题:卧薪尝胆 Writeup

2019-9-25 17:53
5975

这里可以看到在_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编辑 ,原因:
上传的附件:
收藏
免费 1
支持
分享
最新回复 (3)
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
图片丢失了,麻烦重新上传一下
2019-9-25 21:25
0
雪    币: 1122
活跃值: (84)
能力值: ( LV6,RANK:88 )
在线值:
发帖
回帖
粉丝
3
kanxue 图片丢失了,麻烦重新上传一下
已重新上传!
2019-9-25 23:48
0
雪    币: 219
活跃值: (38)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
学习学习
2019-9-27 10:20
0
游客
登录 | 注册 方可回帖
返回
//