PHP pwn 学习 (2)-A.4 漏洞挖掘

从上面的分析来看,内存分配与释放均需要一个参数,但Ghidra没有识别出来,将参数添加后发现,先前发现的可能的溢出漏洞实际上并不存在,hacker_entry的最后一个字段实际上是一个不定长数组,在实际分配内存时会根据传入的字符串长度确定chunk大小。

那么,这道题的漏洞点又在何处?需要注意zif_displayHackerzif_addHacker函数,在memcpy之后,有一个在字符串尾部添加\0的操作,这实际上是off by null。

由于freed chunk将链表指针放在chunk首部,chunk与chunk之间没有任何分隔,因此off by null有机会修改链表指针的值。将该指针的值修改为一个chunk A内部的地址,这样可以通过chunk A的重写完全覆盖chunk A后面的chunk B的链表指针。本题的so文件没有使用FULL RELRO安全保护,因此可以完成覆盖GOT表的操作,后面的内容就不用多说了。

上一篇:机器学习入门【经典的CIFAR10分类】


下一篇:vue和微信小程序的区别、比较