1. 前言
翻历史记录,突然翻到了一个binwalk的RCE漏洞还没复现过,直接来试试吧。
2. 漏洞描述
1 | 从 2.1.2b 到 2.3.3 版本的 ReFirm Labs binwalk 中发现了一个路径遍历漏洞。通过制作恶意 PFS文件系统文件,当 binwalk 在提取模式(-e 选项)下运行时,攻击者可以让 binwalk 的 PFS 提取器在任意位置提取文件。远程代码执行可以通过构建一个 PFS 文件系统来实现,该文件系统在提取时会将恶意的 binwalk 模块提取到文件夹 .config/binwalk/plugins 中从而执行代码。该漏洞与程序文件src/binwalk/plugins/unpfs.py相关。此问题会影响从 2.1.2b 到 2.3.3 的binwalk。 |
影响产品
1 | Binwalk v2.1.2b-2.3.3 |
3. 漏洞复现
复现环境:
kali2021.4a binwalk 2.3.2
在漏洞复现的时候遇到了好多坑爹的问题,关于问题的原因和解决方法我也会写在帖子里,希望对大家能有帮助。
首先是从官方那里拿到了一个poc.zip
1 | https://github.com/ReFirmLabs/binwalk/pull/617 |
关于这个poc的利用,我一开始就碰到了问题,没办法输出。实际的原因是因为我对这个压缩的理解错误了。
我们先来看看这个poc
这里可以看到有三个../
,代表向上回溯了三级目录。至于为什么需要回溯三次,我们将poc修改为如下所示然后测试一波大家就明白了
我们把这个路径直接给去掉,然后直接上传到虚拟机,并将pfs
的后缀改为zip
注意:这里不能将pfs
的文件压缩为zip
文件,哪怕是压缩后我多一级../
的回溯目录都没办法成功将脚本放到binwalk的插件目录下,具体原因我也不清楚。但是直接修改后缀是可以使用的。
使用命令解包
1 | binwalk -e poc.zip |
这里-e
是必须的,为的是循环解包,将所有的东西提取出来,同时也是漏洞点
解包后在我们的桌面目录下生成了一个文件夹,打开后我们观察下释放的脚本所在的目录
大家可以看到,我们的malwalk.py
脚本的路径位置,如果我们想要将其释放到binwalk的插件目录下,必须要回溯三次才可以。这也是我们的poc为什么要那样写。
我们来看下正确写了poc路径之后的效果
可以看到,我们成功实现了poc的输出功能。同时也成功的将我们的脚本放入了binwalk的插件目录。
反弹shell:
既然能执行命令输出,那也就意味着我们可以反弹shell
这里修改脚本为反弹shell的脚本
1 | import binwalk.core.plugin |
这里将IP和port修改为自己的监听后,然后覆盖掉脚本后续的内容
但是大家这里注意下,我额外圈出来的地方。这里原来的数据是C1 00
,我们需要修改下这个数据。因为这个数据实际上是指我们的脚本长度,C1 00
长度不够,如果不修改长度的话,那我们的脚本就会只写入一半,导致最终无法执行。就像下图所示,脚本只写了一半。
修改脚本后我们开启监听再次测试
成功回弹shell,到此结束。
参考链接
1 | CVE-2022-4510:Binwalk 远程代码执行漏洞 |
发布时间: 2023-07-19
最后更新: 2023-07-21
本文标题: CVE-2022-4510-Binwalk_RCE
本文链接: https://foxcookie.github.io/2023/07/19/CVE-2022-4510-Binwalk_RCE/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!