当前位置:   article > 正文

Hadoop 任意文件写入-其实感觉并不是任意文件写入【CVE-2022-26612】

cve-2022-26612

Hadoop 任意文件写入【CVE-2022-26612】

来源

https://securitylab.github.com/advisories/GHSL-2022-012_Apache_Hadoop/

这个洞吧,你以为很厉害吧其实在我目前掌握的情况来看啥也不是,说要有hadoop环境吧,后来发现根本不需要,还浪费我好多时间在windows上安装hadoop踩坑。
大概的一是就是将hadoopFileUtil.java这个类的unTar函数在调用unTarUsingJava函数对tar包进行解压的时候如果tar包中的文件是个软链接,那么将可能导致目录穿越从而使得这个软链接链接到任意的位置。当然看到这里的函数命名为使用Java解压,那么肯定还有使用命令解压的,当然这不是我们的讨论重点。而最终的核心逻辑则是在unpackEntries这个函数中,下面我们一起来看看这个过程,这里我首先写了一个简单的利用脚本
在这里插入图片描述
毫无疑问,你需要一些依赖
在这里插入图片描述
注意到这里使用的版本是3.2.0,当然其实用不了这么多依赖的,最主要的是hdfs的依赖,我也懒得删了。然后我么来看看最新的补丁长啥样
在这里插入图片描述
很明显原始的存在漏洞的代码为途中红色区域,这段代码首先调用isSymbolicLink函数判断entry是否为符号链接,如果是的话则调用createSymbolicLink函数创建一个符号链接,该函数有两个参数,第一个参数为要创建的符号链接的位置,第二个为符号链接指向的文件,看看这两参数怎么赋值的,分别为FileSystems.getDefault().getPath(outputDir.getPath(), entry.getName())FileSystems.getDefault().getPath(entry.getLinkName()) 这里面有三个重点的参数一个是outputDir.getPath一个是entry.getName另一个是entry.getLinkName很明显第一个是获取unTar传入的目标路径,第二是是获取tar包中软链接文件的文件名,第三个是获取软链接指向的文件名。这三个参数都有被控制的可能,主要看目标代码怎么写了。当然第一个参数一般不会有程序员写的让你可控的,那么能做手脚的就只剩下第二个和第三个参数了,如果我们需要将软链接创建到启动目录里面去,那么就要控制第二个参数,但是在windows环境中文件名是不能出现/类的特殊字符的,所以这条路也就被堵死了。那么就只能想办法搞定第三个参数,当然这个参数是可控的。我们只需要在创建软链接的时候使用相对路径就可以了
在这里插入图片描述
所以利用的方式也就很明显了,首先我们按照上面的方式创建一个软链接,然后使用打包工具将这个软链接打包为一个tar包,然后调用FileUtil.java#unTar函数对该tar包进行解压就好了。在对软链接进行打包的时候不要使用linux命令打包,遇到了坑,可以选用7zip,打包的时候注意选择压缩格式以及勾选保存符号链接复选框,不然是会失败的哦。
在这里插入图片描述

所以看到这里你还觉得这个漏洞很有用吗?

当然具体的调用过程,可以自己用IDEA调试一下,这里注意IDEA要使用管理员权限启动,不然是不能创建符号链接的。
当然,如果你的windows没有hadoop环境,在执行测试样例的时候可能会报错,但并不影响最终的结果,如果你想完美无缺,你必须安装hadoop并配置环境变量

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/592773
推荐阅读
相关标签
  

闽ICP备14008679号