Loading... 学习堆利用也有一段时间了,基本上就是在和 fastbin 和 unsorted bin 打交道,最近这段时间 tcache 的题也做了一些。套路居多,想想还是应该总结一下。不会写的太详细,也可能无法写全。 ### Unsorted Bin 这大概是我接触的最早的 bin #### unlink 这是一个比较简单、比较模板化的利用,unlink 也可以在 small bin 上生效,但是碰到的大多都处在 unsorted bin 上,我就归结到这里了。常见于菜单题,一般都是会有一个数组存储了每一个堆块的地址的。unlink 能实现的是使一特定的指针指向其所在地址前三个机器字长处,以六十四位为例就是 `ptr = &ptr - 0x18` 而利用总体就是三步 1. 想办法布置 fake_chunk,然后 free 其上面或者下面的 chunk,触发 unlink 2. 此时获得了对堆块数组任意写的能力,在数组上写入 `free@got`,然后用编辑功能把 `free@got` 写成 `puts@plt` 等实现 leak。 3. 数组上写入某些参数可控的函数的 got 表地址(一般是 `atoi` 系列函数),写成 system 的地址,getshell。 这就算是典型的 unlink 了,比较经典的应该是 [hitcon2014_stkof](https://www.cjovi.icu/WP/buu-hitcon2014_stkof-wp.html),当然单单这样肯定很没意思,有一些题目会出现变种,比如 [4-ReeHY-main-100](https://adworld.xctf.org.cn/task/answer?type=pwn&number=2&grade=1&id=4839&page=2) 这题,开启了 full reload [WP](https://www.cjovi.icu/WP/xctf-4-reehy-main-100-wp.html)。 将 fd 和 bk 都指向自己所在的堆块头也是可以通过 unlink 检测不至报错的,一般这种伪造被认为是无意义的,但是有些时候能起到奇效,比如 [secret_of_my_heart](https://pwnable.tw/challenge/#15) 这题。 #### leak 这个问题我之前写过专门写过一篇文章[如何利用Unsorted Bin泄露Libc基地址](https://www.cjovi.icu/pwnreview/1089.html)分析,这其实算是一个小 trick,比较常用。 先写到这里,之后再更新。 最后修改:2021 年 07 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧