过去,我曾设法溢出我自己和其他人的易受攻击的程序,但仅限于 32 位环境。每次我在 64 位机器上尝试简单的堆栈粉碎时,都会遇到问题。我试图写入的地址总是包含空字节。
昨天一个问题的一个简单例子;我试图覆盖 GOT 以使以后的调用printf()
成为调用system()
我需要的所有地址(ASLR 关闭,DEP 开启)。
当我试图用 heapland(低内存地址)值覆盖 stackland 指针(高内存地址)时,我陷入了困境。
0x7fffffff_ff480a90 -> 0x00000000_0068a9a0
我的溢出以 结束\xa0\xa9\x68
,它带有空终止符,使指针看起来像;
0x7fffffff_0068a9a0
这不好,我看了好几个小时,想不出办法。就像我说的我已经多次遇到这个空字节问题。我一直认为这只是其中之一,但它似乎完全不可能破解 64 位系统,因为地址经常包含空字节。
我只是不走运吗?我错过了一些明显的东西吗?我还没有听到有人用 32 对 64 来谈论这个问题。