# 终端过滤绕过测试

> 测试AI IDE中终端命令过滤、allowlist与blocklist的绕过问题。适用于评估 命令执行控制、Shell注入、参数校验缺陷，以及Agent终端安全边界是否可靠。

- Skill: `spindriftpapilio/skill` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add spindriftpapilio/skill`
- Raw SKILL.md: https://api.skillmd.com/api/skills/spindriftpapilio/skill/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: spindriftpapilio (https://skillmd.com/u/spindriftpapilio)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/spindriftpapilio/skill

---


# 终端过滤绕过测试

本skill重点讨论：AI IDE或编码Agent**虽然宣称限制了终端命令**，但这些限制是否真的有效。

很多产品只检查命令名看起来安全，却没有真正约束参数、换行、Shell展开、子命令或平台差异。

# 什么时候用

- 产品支持Agent直接运行终端命令
- 文档声称有allowlist、blocklist、审批过滤
- 已确认提示词注入、工具调用或任务执行能走到终端
- 需要判断能执行命令到底受不受控

# 重点测试事项

- 过滤器检查的是命令名、整行字符串，还是结构化语法
- 参数是否单独校验
- 换行、分号、管道、子命令、Shell展开是否会漏检
- Windows PowerShell、cmd、bash、zsh的处理是否一致
- 审批基于什么对象缓存：命令名、完整命令、路径、历史状态

# 常用绕过思路

## 1. 危险参数藏在允许命令里

例子：
- `find -exec`
- `tar --to-command`
- `git -c core.pager=...`

2. 结构拆分例子：
- 换行注入
- 命令拼接
- 多段解析不一致3. Shell特性例子：
- `$(...)`
- 反引号
- 变量展开
- 通配符与路径解析4. 平台差异例子：
- PowerShell参数与bash参数语义不同
- `cmd /c`、`powershell -Command`之类包装器导致边界失效

# 推荐流程

1. **先确认真实执行链。** 模型输出的命令是如何传给Shell的？
2. **识别过滤所在层。**
   是模型前、Shell前、Shell后，还是只做UI提示？
3. **从最小绕过开始。**
   先证明过滤器漏看了某一类结构，再讨论更深影响。
4. **区分能通过审批和能真正执行。**
   有些命令能显示通过，但实际被后端拦了；有些相反。
5. **按平台复核。**
   同一产品在PowerShell与bash下常常是两套问题。

# 证据重点

- 被批准时看到的命令
- 最终实际执行的命令
- 中间是否经过重写、拼接、包装
- 参数是否在审批后发生变化

# 与其他skill的衔接

- 前置常用是`提示词注入攻击链测试`
- 如果过滤绕过后能把数据发出去，可接`AI IDE数据外传测试`
- 如果绕过后能改写配置或形成持久化，可接`AI IDE代码执行面测试`或`MCP配置投毒测试`

# 可优先参阅的资料

- `references/allowlist-patterns.md`
- `references/bypass-payloads.md`
- `references/known-vulns.md`

# 输出表述建议

最终结论尽量写清楚：

- **过滤模型**：产品声称如何限制命令
- **真实缺陷**：漏了命令名、参数、结构还是Shell特性
- **最小绕过样例**：哪种形式能稳定通过
- **执行结果**：最终能做到什么
- **平台范围**：只影响某个Shell，还是通用问题


