-
-
[原创]2019 Q2 第九题 绝地逃生(pwn) 分析
-
发表于:
2019-6-23 20:02
7395
-
[原创]2019 Q2 第九题 绝地逃生(pwn) 分析
实现几个基本功能
漏洞在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。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2019-6-26 13:39
被mratlatsn编辑
,原因: