-
-
[原创] 2016 HITCON CTF SleepyHolder
-
发表于:
2018-4-22 16:44
8886
-
[原创] 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
相关文件下载
[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!