首页
社区
课程
招聘
[原创] 2016 HITCON CTF SleepyHolder
发表于: 2018-4-22 16:44 8530

[原创] 2016 HITCON CTF SleepyHolder

2018-4-22 16:44
8530

本来这周准备学习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 Freesmall secret, 在small secret 中构造fake chunk, 释放big secret, big secret会和fake chunk合并, 过程中我们用unlink来修改全局指针变量s_ptr. 通过将其修改为free@got, 修改free@gotput@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直播授课

收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
“unlink来修改全局指针变量s_ptr. 通过将其修改为free@got, 修改free@got为put@plt, 泄露libc 地址”
问一下这个泄露libc地址的过程。。。可以详述一下吗?
2019-10-27 16:46
0
游客
登录 | 注册 方可回帖
返回
//