DIR-820 CVE-2022-26258漏洞复现
字数 1163 2025-08-22 12:23:25
DIR-820 CVE-2022-26258漏洞分析与复现指南
漏洞概述
CVE-2022-26258是D-Link DIR-820路由器中的一个命令注入漏洞,存在于/lan.asp页面中,通过操纵"Device Name"参数可实现任意命令执行。该漏洞影响DIR820LA1_FW105B03及更早版本。
漏洞分析
漏洞位置
漏洞位于/lan.asp页面,具体与lan_device_name参数的处理有关:
lan_device_name的值被传入并拼接成paramStrparamStr通过copyDataToDataModelFormat函数返回- 最终提交给
get_set.ccp处理
后端处理机制
通过分析发现:
- 系统中不存在"get_set.cpp"文件,说明该URL由后端处理
- 使用
grep -r "get_set"命令发现四个二进制文件调用了相关功能 - 通过分析开机自启文件,确定
ncc2二进制是主要处理程序
关键函数分析
在ncc2二进制中:
- 程序首先进行fork子进程检测
- 设置信号量和信号处理函数
- 通过
ncc_load_hw_cfg设置PIN码 - 然后配置其他服务
重点分析_system函数(而非标准system函数),发现存在两条执行路径:
- 第一条路径:通过
a2参数,但分析发现不可控 - 第二条路径:
- 通过
getObj(0x60u, (int)v9)获取对象 - 需要绕过
hasInjectionString函数的过滤 - 过滤不完善,未过滤冒号和换行符
- 通过
过滤绕过
hasInjectionString函数的过滤存在缺陷:
- 未过滤
\n(换行符) - 未过滤
:(冒号) - 可使用
%0a(URL编码的换行符)绕过过滤
漏洞复现步骤
环境准备
-
使用FIRMAE模拟环境:
sudo ./run.sh -r DIR820L /path/to/DIR820LA1_FW105B03.bin -
模拟成功后,访问路由器Web界面(默认无密码,直接登录)
利用过程
-
访问
/lan.asp页面 -
修改"Device Name"参数为注入payload:
%0atelnetd -l /bin/sh%0a注意:必须直接在原始请求包上修改,不能通过重放修改后发送,否则会导致多次发送使服务崩溃
-
发送修改后的请求
-
等待约10秒让命令执行
-
使用telnet连接路由器:
telnet [路由器IP] -
成功获取shell
额外漏洞发现
通过分析tools_vct.asp页面发现类似漏洞:
- 该页面通过POST指令传入参数
- 处理逻辑与主漏洞类似
- 同样在
ncc2中处理 - 存在相同的命令注入风险
注意事项
- 该漏洞已被CNVD收录,提交前需确认是否已被报告
- 复现时需注意请求发送方式,避免服务崩溃
- 测试应在授权环境下进行,遵守法律法规
防护建议
- 升级到最新固件版本
- 在防火墙中限制对路由器管理界面的访问
- 设置强密码
- 禁用不必要的服务(如telnet)