-
-
[原创]Pwnable.tw之BookWriter
-
发表于: 2018-5-11 17:39 5772
-
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
文件下载
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
- [原创]C++ static关键字引发的思考 10848
- [原创]Windows 之 CRT的检测内存泄露 16560
- [讨论] <<程序员的自我修养 -- 链接、装载与库>> 书籍相关问题 32311
- [原创] Kamnira Adware分析 4463