-
-
[原创] 2016 HITCON CTF SleepyHolder
-
发表于:
2018-4-22 16:44
8530
-
[原创] 2016 HITCON CTF SleepyHolder
本来这周准备学习House Of Orange
, 但是这个牵扯知识点太多. 忽然发现还有一个fastbin_dup_consolidate
没有学习, 补一下.
1. MENU
2. Keep secret(New)
3.Wipe secret(Delete)
4. Renew secret(Update)
1. Keep Secret(New)
可以选择申请40, 4000, 40000
三种不同大小的堆块. 当申请大小超过top chunk size
, ptmalloc
会整合一些fastbin
中的free chunk
并入top chunk
, 如果还不够就mmap
一块新的chunk
,这个chunk
与原有的top chunk
之间采用单链表链接.
2. Wipe Secret(Delete)
free
对应的指针, 标志位置0
3. Renew Secret(Update)
不检查指针是否已释放, 造成Double Free
Double Free
Unlink
总体思路: Double Free
掉small secret
, 在small secret
中构造fake chunk
, 释放big secret
, big secret
会和fake chunk
合并, 过程中我们用unlink
来修改全局指针变量s_ptr
. 通过将其修改为free@got
, 修改free@got
为put@plt
, 泄露libc 地址
, 再将其修改为system
地址, free "/bin/sh"
时就等于执行了system("/bin/sh")
步骤一: Double Free
步骤二: Fake Chunk
小结: Unlink栗子
步骤三: 泄露
步骤四: system("/bin/sh")
对于read
函数, pwntools发送的时候最好不用sendline
, 尽量使用发送足量的字符来结束输入. 就像本题, 如果将add, delete, update
函数中p.send
改成p.sendline
, 那么会出错.
泄露libc base
地址:
Isaac
0x9A82
相关文件下载
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课