我正在尝试一些简单的缓冲区溢出,并且我可以控制我的 EIP,但它似乎仅限于一组严格的字符。
例如,我有一个执行以下操作的 python 脚本
buff = "A" * 128
buff += struct.pack("<L", 0x42424242)
sys.stdout.write(buff)
这会正确地将我的 EIP 覆盖为:0x42424242 例如,我可以将 0x42424242 的值更改为 0x42434445,它仍然可以工作。
但是一旦我输入一个地址,比如:0x804843b,我的 EIP 就会变成一个无效的地址,比如 0x000000
基本上我在这里输入的每个地址,而不是不能解析为字母字符的 0x42424242,我都会得到一个无效的 EIP 地址:
作品:
buff += struct.pack("<L", 0x42424242)
buff += struct.pack("<L", 0x45454545)
buff += struct.pack("<L", 0x41424344)
当像 AAAA EEEE ABCD 一样打印时,上述所有这些也会产生字母字符
不起作用:
buff += struct.pack("<L", 0x804843b)
打印时,这也显示了我们这样的字符:; </p>