首页
社区
课程
招聘
[原创]2019 Q2 第九题 绝地逃生(pwn) 分析
发表于: 2019-6-23 20:02 7394

[原创]2019 Q2 第九题 绝地逃生(pwn) 分析

2019-6-23 20:02
7394

实现几个基本功能

漏洞在free中:
启动若干个线程完成free工作:

线程函数:
由于是带原子锁的方式来访问并修改共享变量,这里并没有线程间的竞争漏洞。
漏洞点在于无论当前要free的idx是否小于MAX,idx都会+1。
最简单的情况:MAX=255,线程数=2。线程1访问完idx=255,发现idx>=MAX,于是退出了,然而此时idx+1=0,线程2再来访问时idx就变成了0了,于是从0到MAX又重新free了一圈。

调试发现,子线程是有自己的tcache的,子线程结束时,会把tcache中的chunk根据chunk的大小放到对应的fastbin或者unsorted bin中。所以leak libc很简单,在0处malloc一个0x90的chunk,free过后0被free了,但是指针并没被清零,于是可Leak libc。

MAX取255,线程数=2时,0-MIN的内存会被free一次,MIN-MAX之间的内存会被free两次,由于tcache加入fastbin时会有重复性检测,因此MIN不能取254,可以取253。

调试发现,malloc一个在fastbin范围内的内存时,如果tcache未满,则libc会把剩下的fastbin放入tcache中,那我们只需要伪造tcache chunk的fd就能让Malloc返回任意地址了。

让malloc返回__free_hook,填充为system,然后free一块内容为"/bin/sh\x00"的内存,拿到shell。

 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-6-26 13:39 被mratlatsn编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (1)
雪    币: 592
活跃值: (192)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你可以尝试干干封包  然后发出来 保证出来就是精华帖  哈哈
2019-6-26 13:10
0
游客
登录 | 注册 方可回帖
返回
//