高版本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。
tchache[0]处的加密运算过程:
0x64aace8fe^0x64aace8fe2a0=0x000064ac84230a5e
密钥^明文=密文
破解如下(让密文^密钥=明文)
注意:2.35版本,当堆从bin取出,fd所存数据最低1位会变00,所以偏移还要自己调试一番
变位 密文^密钥+偏移=明文