首页
社区
课程
招聘
[原创]Pwnable.tw之BookWriter
发表于: 2018-5-11 17:39 5772

[原创]Pwnable.tw之BookWriter

2018-5-11 17:39
5772

    FSOPFILE Stream Oriented Programming的缩写, 进程内所有的_IO_FILE结构会使用_chain域相互连接成一个链表, 这个链表的头部由_IO_list_all维护.
    FSOP的核心思想就是劫持_IO_list_all的值来伪造链表和其中的_IO_FILE项, 但是单纯的伪造只是伪造了数据还需要某种方法进行触发.
     topchunk size小于申请大小, top chunk 加入unsorted bin中, 系统重新分配一块top chunk.
    首次加入unsorted binchunk块, 若再次使用此chunk, glibc会将其先加入对应small bin中, 再从small bin取出使用, 剩余的加入到unsorted bin中.
    unsorted_bin attack: 前提是控制Unsorted Bin chunkbk指针

0. Welcome

1. Menu

2. Add

3. View

4. Edit

5. Information

信息泄露

     通过观察发现authorhead_address相邻,输入0x40个字符即可将NULL填满, 使用Information打印Author,可打印出heap的地址, 即所谓信息泄露.

top chunk modify

长度错误

result01

1. leak memory

result02

2. 伪造

解析: 前面讲到有一个长度错误, 这个长度错误就是会将index 0的长度修改成一个地址, 这意味着我们可以输入很多的数据, 修改top chunk.

1.Unosrted Bin Attack: 修改_IO_list_allmain_arena+0x58

result03

2.伪造_IO_FILE绕过一些检查:

3.fake vtable

3. 触发

问题: 请问fake FILE是如何链入到进程中的?

这就要用到上面提到的0x61, 这个可不是随便写的一个值._chain_IO_FILE第十四个字段, 而0x61chunkunsorted bin进入small bin时, 正好将0x61写入这第十四个字段.

result04

在自己机器上试的同学, 除了将libc改成自己的外, 还要将泄露的地址与libc_base之间的偏移改为0x3c4b78

本人环境: Ubuntu 16.04.4 LTS

极目楚天舒
CTF-WiKi
wolfzhang
ret2forever
文件下载

 
 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2018-5-11 17:41 被baolongshou编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//