-
-
[原创]Pwnable.tw之BookWriter
-
发表于: 2018-5-11 17:39 6151
-
FSOP是FILE Stream Oriented Programming的缩写, 进程内所有的_IO_FILE结构会使用_chain域相互连接成一个链表, 这个链表的头部由_IO_list_all维护.
FSOP的核心思想就是劫持_IO_list_all的值来伪造链表和其中的_IO_FILE项, 但是单纯的伪造只是伪造了数据还需要某种方法进行触发.
topchunk size小于申请大小, top chunk 加入unsorted bin中, 系统重新分配一块top chunk.
首次加入unsorted bin的chunk块, 若再次使用此chunk, glibc会将其先加入对应small bin中, 再从small bin取出使用, 剩余的加入到unsorted bin中.
unsorted_bin attack: 前提是控制Unsorted Bin chunk的bk指针
0. Welcome
1. Menu
2. Add
3. View
4. Edit
5. Information
信息泄露
通过观察发现author和head_address相邻,输入0x40个字符即可将NULL填满, 使用Information打印Author,可打印出heap的地址, 即所谓信息泄露.
top chunk modify
长度错误

1. leak memory

2. 伪造
解析: 前面讲到有一个长度错误, 这个长度错误就是会将index 0的长度修改成一个地址, 这意味着我们可以输入很多的数据, 修改top chunk.
1.Unosrted Bin Attack: 修改_IO_list_all为main_arena+0x58

2.伪造_IO_FILE绕过一些检查:
3.fake vtable
3. 触发
问题: 请问fake FILE是如何链入到进程中的?
这就要用到上面提到的0x61, 这个可不是随便写的一个值._chain是_IO_FILE第十四个字段, 而0x61chunk从unsorted bin进入small bin时, 正好将0x61写入这第十四个字段.

在自己机器上试的同学, 除了将libc改成自己的外, 还要将泄露的地址与libc_base之间的偏移改为0x3c4b78
本人环境: Ubuntu 16.04.4 LTS
极目楚天舒
CTF-WiKi
wolfzhang
ret2forever
文件下载
[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!