-
-
命令注入漏洞CVE-2021-45382复现(学习记录)
-
发表于:
2023-7-30 19:11
14043
-
命令注入漏洞CVE-2021-45382复现(学习记录)
这个漏洞影响的版本较多:DIR-810L、DIR-820L、DIR-826L、DIR-830L、DIR-836L。很好奇这个漏洞怎么做到没有被及时发现,影响到这么多个版本的。同时也希望通过分析发现新的命令注入可能存在的漏洞点。
使用binwalk解包,获取固件文件系统:
查看一下启动文件:
查看一下二进制文件,发现存在telnet、telnetd和wget可用于漏洞验证:
在漏洞描述中详细的说明漏洞存在于ncc2文件中的DDNS函数中,直接在文件系统中查找ncc2文件:
将sbin/ncc文件拿到IDA中分析,直接查找ddns函数,定位到关键函数并在doCheck函数中找到漏洞点:
上述代码含义为:判断ccp_act的值是否为doCheck,若为doCheck则调用doCheck函数检查参数。
查找get_entry_value_by_name
和__system
函数的实现:
上述代码含义是:通过get_entry_value_by_name
获取ddnsHostName、ddnsUsername、ddnsPassword的值并将其传入到__system
中拼接执行。在这个过程中并没有对从前端输入的数据进行过滤或者检查,因此导致了命令注入漏洞。ddnsHostName、ddnsUsername、ddnsPassword的值是通过ddns_check.ccp传入。综上可知大概的payload如下:
使用FirmAE模拟固件:
默认密码为空,直接登录即可。
登录后,抓包改包验证漏洞:
复现成功,取得shell:
这个命令执行漏洞没有后台页面存在,是直接POST 数据到ddns_check.ccp交给后端处理,处理好之后将结果返回给用户。因而比较隐蔽不容易被发现,需要通过逆向ncc2文件才能发现其端倪。感觉很奇怪,为什么要留一个不提供用户接口的ddns_check功能,虽然在www文件夹下发现了一个DynamicDNS.html页面,并且ddns看命名也像是和动态dns有关,但是设置动态dns默认是关闭的并且文件中也没有向URL:/ddns_check.ccp提交数据的代码。因此怀疑本漏洞所在功能是某个版本遗留功能。
D-Link_DIR-830LA1命令执行漏洞(CVE-2021-45382) | 凉生霜气清,月上灯火明 (foxcookie.github.io)
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)