n3rada/sapsxpg
GitHub: n3rada/sapsxpg
通过 RFC 连接 SAP 系统枚举 SM49/SM69 外部命令,提供交互式执行环境和 RCE PoC 自动生成能力。
Stars: 3 | Forks: 0
# 🏢 sapsxpg
简化在 SAP 服务器上使用 [`SXPG_CALL_SYSTEM`](https://help.sap.com/saphelp_scm700_ehp01/helpdata/EN/4d/947a7c2cdb6c14e10000000a15822b/content.htm?no_cache=true) 功能模块的过程,并提供日志记录。
`sapsxpg` 通过 RFC 连接到 SAP 系统,枚举在 `SM49`/`SM69` 中注册的可用外部 OS 命令,并提供一个交互式 shell 来执行它们。它还能自动检测远程操作系统,并可以生成与 [toboggan](https://github.com/n3rada/toboggan) 兼容的 RCE 概念验证脚本。
## ⚙️ 前置条件
[`NWRFCSDK`](https://support.sap.com/en/product/connectors/nwrfcsdk.html) 是 SAP 的专有软件。下载它需要 S-User 账号和特定权限。由于 SAP 拥有其知识产权,因此不能在本仓库中发布或包含该软件。
1. 访问 [SAP Support Portal](https://support.sap.com/en/product/connectors/nwrfcsdk.html)。
2. 下载适合您操作系统的版本。
3. 按照[安装指南](https://community.sap.com/t5/technology-blog-posts-by-members/connecting-python-with-sap-step-by-step-guide/ba-p/13452893)进行操作。
如果您已经将 `nwrfcsdk` 放置在系统中的某个位置,您可以找到并导出必需的环境变量:
```
NWRFCSDK_PATH=$(find /opt /home /usr/local /srv -type d -path "*/nwrfcsdk" -print -quit 2>/dev/null | head -1)
export SAPNWRFC_HOME=$NWRFCSDK_PATH
export LD_LIBRARY_PATH="$NWRFCSDK_PATH/lib:"
```
## 📦 安装
建议使用 [`uv`](https://docs.astral.sh/uv/),这是一个快速的 Python 包管理器,可以在隔离环境中安装工具。或者,使用 [`pipx`](https://pypa.github.io/pipx/) 或 `pip` 也可以。
### 使用 [uv](https://docs.astral.sh/uv/)(推荐)
[`uv tool install`](https://docs.astral.sh/uv/guides/tools/#installing-tools) 会持久化安装该工具并将其添加到您的 `PATH` 中,类似于 `pipx`:
```
uv tool install git+https://github.com/n3rada/sapsxpg.git --with pyrfc==3.3.1
```
安装后,可以直接使用 `sapsxpg`:
```
sapsxpg --help
```
以后若要升级:
```
uv tool upgrade sapsxpg
```
### 使用 pipx 或 pip
```
pipx install 'git+https://github.com/n3rada/sapsxpg.git'
pipx inject sapsxpg pyrfc==3.3.1
```
```
pip install 'git+https://github.com/n3rada/sapsxpg.git'
pip install pyrfc==3.3.1
```
## 🧸 用法
```
sapsxpg [options]
```
### ⚡ 快速入门
```
# 直接连接(默认系统编号 00,客户端 500)
sapsxpg sap-server.example.com SAPUSER 'P@ssw0rd!'
# 自定义客户端和系统编号
sapsxpg sap-server.example.com SAPUSER 'P@ssw0rd!' -c 100 -s 01
# 通过 Message Server 的负载均衡连接
sapsxpg sap-server.example.com SAPUSER 'P@ssw0rd!' -m msgserver -r PRD -g PUBLIC
```
### 🔗 连接模式
| 标志 | 描述 |
|------|-------------|
| `-c`, `--client` | SAP 客户端编号(默认:`500`) |
| `-s`, `--sysnr` | 用于直接连接的系统编号(默认:`00`) |
| `-m`, `--mshost` | 消息服务器主机名(负载均衡模式) |
| `-r`, `--r3name` | SAP 系统 ID,与 `-m` 一起使用时必需 |
| `-g`, `--group` | 登录组,与 `-m` 一起使用时必需 |
| `-t`, `--timeout` | 连接超时时间(秒)(默认:`30`) |
| `--no-trace` | 禁用 SAP RFC 跟踪日志 |
| `--os` | 强制 OS 过滤:`linux`、`windows`、`unix`、`all`、`anyos` |
### 🔍 交互式 Shell
连接后,`sapsxpg` 会将您带入一个带有 Tab 补全和命令历史记录的交互式 shell。该 shell 支持:
- **内置命令**:`ls`、`cat`、`ps`、`env`
- **SAP 注册的命令**:在 `SM49`/`SM69` 中注册的任何命令
- **帮助**:输入 `h`、`help` 或 `?` 以列出所有可用命令
该工具会自动检测远程 OS 并相应地过滤命令。结果会在本地缓存,以加快后续会话的速度。
## 🎯 RCE 概念验证
从任何允许执行的 SAP 命令生成兼容 [toboggan](https://github.com/n3rada/toboggan) 的 RCE 模块:
```
sapsxpg sap-server.example.com SAPUSER 'P@ssw0rd!' --rce-poc ZSH
```
这将生成一个 `poc_sap-server.example.com_ZSH.py` 文件。将其导入 toboggan 以获取完整的半交互式 shell:
```
toboggan poc_sap-server.example.com_ZSH.py
```
## ⚠️ 免责声明
**本工具仅供防御性安全研究、教育和经授权的渗透测试使用。** 在针对您不拥有的任何系统运行本软件之前,您必须获得**明确的书面授权**。
可接受的环境包括:
- 您控制的私人实验室环境(本地虚拟机、隔离网络)。
- 获得许可的学习平台(CTF、Hack The Box、OffSec 考试场景)。
- 拥有记录在案的客户同意书的正式渗透测试或红蓝对抗演练。
滥用本项目可能会面临法律诉讼。
## ⚖️ 法律声明
严禁在真实世界环境中未经授权使用本工具,或在未获得系统所有者明确许可的情况下针对系统使用本工具,这可能违反法律和道德标准。本工具的创建者和贡献者不对任何误用或造成的损害承担责任。
请负责任且合乎道德地使用。始终遵守法律并获得适当的授权。
标签:CISA项目, CTF学习, CVE验证, ERP安全, NWRFCSDK, PoC生成, Python安全工具, RCE PoC, SAP RF, SAP安全, SAP漏洞利用, SM49, SM69, SXPG_CALL_SYSTEM, toboggan, 企业安全, 内网渗透, 命令执行, 外部OS命令, 无线安全, 系统枚举, 编程工具, 网络资产管理, 远程代码执行, 逆向工具