高版本libc堆fd指针绕过

高版本glibc堆fd指针加密绕过

参考资料:[原创]glibc高版本堆题攻击之safe unlink-Pwn-看雪-安全社区|安全招聘|kanxue.com

堆指针加密是在2.32版本引进的,作用在tcache和fastbin。主要是对fd指针进行异或操作来使得不好利用UAF等需要fd指针的手法。

从一个例子了解这个保护机制bin

加密过程:当前被释放堆块fd指针地址>>12(就是3位)后,与当前fd指针应该指向的位置(在tchache中就是前一个堆块的fd指针地址)进行异或^操作,便完成加密。把加密内容放入fd指针。 ---

特别注意:第一个释放的堆块是与0进行异或,因为它前面没有堆。其fd所存的值便是密钥,可以破解各个堆的地址。

这里举一个例子,例题只释放2个堆入tcache。

image-20240602185025483

image-20240602184314087

tchache[0]处的加密运算过程:

0x64aace8fe^0x64aace8fe2a0=0x000064ac84230a5e
密钥^明文=密文

破解如下(让密文^密钥=明文)

img
注意:2.35版本,当堆从bin取出,fd所存数据最低1位会变00,所以偏移还要自己调试一番

变位 密文^密钥+偏移=明文

posted @ 2024-06-03 14:11  蟇窳瓨  阅读(37)  评论(0编辑  收藏  举报