漏洞信息
漏洞厂商:D-Link
影响产品及版本:DI-7400G+
影响对象类型:路由器
漏洞URL:
漏洞分析
设备通过 HTTP 参数和 NVRAM 设置值拼接 shell 命令并调用
jhl_system()
,存在典型的命令注入漏洞,攻击者可在满足一定条件下执行任意系统命令。
-
将
jhttpd
程序拖入ida中进行逆向分析
sub_478D28
函数如下,addr
参数可以get
控制(httpd_get_parm
就是get
方式取参数),并且被设置在了nvram
中的ac_mng_srv_host
项中。
该函数其对应url
接口为mng_platform.asp
-
sub_4A12DC
函数中,获取ac_mng_srv_host
项的值,然后会传递到system
函数中作为参数执行命令,此前未经过滤,产生命令注入漏洞。
该函数对应的url
接口wayos_ac_server.asp
,即访问这个url
界面即可执行对应函数,从而触发漏洞 -
结合
sub_478D28
和sub_4A12DC
函数反汇编内容,命令执行逻辑如下:v13 = nvram_get("proxy_ac_status"); v14 = nvram_get("ac_server_enable"); if (v13 && strcmp(v13,"1")==0 && v14 && strcmp(v14,"1")==0) { snprintf(v45, 1024, "proxy_client \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" \"%s\" &", ac_mng_srv_host, proxy_http_srvport, lan_ipaddr, acserver_http_port, "proxy_ac_port", "proxy_ac_msg", "proxy_ac_pid" ); jhl_system(v45); }
必要条件:
- HTTP 请求必须包含
opt=proxy
; - NVRAM 中两个关键值均为
"1"
:proxy_ac_status == "1"
ac_server_enable == "1"
ac_mng_srv_host
等其他 NVRAM 值可被植入 payload,未做过滤。
攻击者通过接口写入 payload(如ac_mng_srv_host=evil"; echo hello > /tmp/poc.txt; #
),然后访问对应接口触发proxy_client
执行。
漏洞验证
-
使用FirmAE进行固件仿真
sudo ./run.sh -d di ../fmwares/DI_7400G+-19.12.25A1.trx
-
使用默认用户名/密码登录
默认用户名/密码:admin/admin
-
NVRAM 中的配置项ac_server_enable写入值"1",开启(启用)AC 服务开关,从而满足触发漏洞利用的前置条件之一
-
植入 payload 并触发执行
POC:
https://github.com/xyh4ck/iot_poc.git
执行效果: