largebin attack
largebin attack(2.35)
利用手法
在2.35及更高版本,可以利用largebin attack来向目标地址写入一个很大的值(堆地址)。其核心在于将目标地址-0x20(glibc源码中会进行给目标地址+0x20的操作)写入largebin中的chunk的bk_next,之后再将unsortedbin中的堆块放进largebin中,那么这时也就会将这个unsortedbin中的堆块地址写入到目标地址。
例题
题目是一个菜单,delete函数中存在uaf漏洞
再点开edit函数,发现并不是修改堆块,而是往站上的buf读入,读入大小为book,book在bss上。
那么我们就可以通过largebin attack来修改book的值为一个大数,从而构造栈溢出。
接下来看largebin attack的过程(事先说明,free0是删掉第一个序号的chunk后编辑第二个序号的chunk的内容;free1是只进行free)
先申请一个大于0x420的堆块,再申请一个任意大小的堆块来隔离top chunk,随后再次申请一个大于0x420的堆块,但是这个堆块要小于第一个堆块,随后接着申请一个任意大小的堆块隔离top chunk。
然后将0号堆块free掉,它会进入unsortedbin中,接着申请一个大于该堆块(这里用0x460)的堆块,unsortedbin中的chunk就会进入largebin,现在就可以利用uaf漏洞来修改largebin中的堆块的bk_next,利用free0,先将2号堆块放进unsortedbin中,接着修改0号堆块,这里要注意由于伪代码是从bk位开始写入的,所以我们填入两个deedbeef就到了bk_next,将其改为book的地址-x20。
最后再add申请一个大于0x430的堆块,book的地址就会被修改了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Kong's blog!
评论
WalineGiscus


