命令注入漏洞CVE-2022-26258复现

VSole2023-07-24 09:33:55
一
漏洞信息

◆CVE编号:CVE-2022-26258

◆漏洞描述:D-Link DIR-820L 1.05B03 was discovered to contain remote command execution (RCE) vulnerability via HTTP POST to get set ccp.

◆设备型号:D-Link DIR-820L

◆固件版本:1.05B03

◆厂商官网:http://www.dlink.com.cn/

◆固件地址:http://www.dlinktw.com.tw/techsupport/download.ashx?file=2663

◆测试环境:Ubuntu 18.04

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

二
固件分析

2.1 固件解包

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

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:

grep -r "get_set"

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

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函数的功能是拼接字符串并执行。

三
漏洞复现

3.1 根据CVE信息的复现

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

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:

四
复现总结


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

漏洞路由
本作品采用《CC 协议》,转载必须注明作者和本文链接
近日,Forescout Vedere Labs在OT/IoT路由器和开源软件组件中发现了21个新的漏洞,突出了关键基础设施中的新风险。
本报告试图以观察者的视角剖析2021年网络安全领域新增漏洞情况以及演变趋势,希望为各行业及相关企事业单位的网络安全建设提供参考和帮助。
漏洞及渗透练习平台 数据库注入练习平台 花式扫描器 信息搜集工具 WEB工具 windows域渗透工具 漏洞利用及攻击框架 漏洞POC&EXP 中间人攻击及钓鱼 密码pj 二进制及代码分析工具 EXP编写框架及工具 隐写相关工具 各类安全资料 各类CTF资源 各类编程资源 Python
攻击者可在无需认证的情况下,通过构造特殊的请求,触发反序列化,从而执行任意代码,接管运行ForgeRock AM的服务器。本文从漏洞挖掘的角度分析其中的技术细节,也将公开一些其他的反序列化点。
随着互联网的迅速发展,网络安全问题日益严峻。黑客攻击和网络漏洞成为让人头痛的问题。为了保护自己的网络安全,安全专家不仅需要了解网络安全原理,还需要熟悉网络渗透工具的使用。Python作为一种简单易学且功能强大的编程语言,被广泛应用于网络安全领域。本文将推荐python渗透工具。
浅谈路由漏洞挖掘
2022-03-16 06:11:53
一个月内,从路由漏洞挖掘零基础到混了三个CVE,在此分享我一些漏洞挖掘思路。
被xuanxuan老师种草了~,"一定要摸真实的设备"这句话余音绕梁,终于狠下心买了一个二手的RV110W,
NetGear公司已公布了最新的路由器固件以解决上述问题,上述设备的应用非常广泛,在全球范围内都有较大数量规模的用户,NetGear敦促广大受影响的设备用户立即按照官方建议对固件更新,以缓解安全风险。
Bleeping Computer 网站消息,基于 Mirai 的 DDoS 恶意软件僵尸网络 IZ1H9 近期又开始活跃了,为 D-Link、Zyxel、TP-Link、TOTOLINK 等 Linux 路由器“添加”了 13 个新有效载荷。
在过去的2020年至2021年,路由漏洞数量正在显著增加。漏洞数量已经超过1000个,这一数量超过了过去十年间路由漏洞总量。
VSole
网络安全专家