找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

5025

积分

1

好友

696

主题
发表于 5 天前 | 查看: 18| 回复: 0

“Nothing happens without a cause.” --斯宾诺莎 (Baruch Spinoza)

曾经有个眼神清澈的年轻人在酒店房间浏览网页,看着看着,他心跳加速、面红耳赤。突然间,他看到一个令他困惑的东西——一条链接的末尾赫然挂着 ?WSDL。这是什么?难道是建站者想宣告“我(W)是(S)大(D)佬(L)”吗?为了解开谜团,这位青年开始翻阅资料……

多读书多看报少吃零食多睡觉

一、扒一扒WSDL的底

WSDL(Web Services Description Language,Web服务描述语言)是一种基于 XML 的语言,用于描述网络服务的具体功能。 它的主要目的是告诉外界:

“我这里提供了一个服务。”
“这个服务可以通过什么方式访问(地址、协议)。”
“这个服务里有哪些可以调用的方法(函数)。”
“调用这些方法需要传入什么参数,参数是什么类型。”
“调用成功后,它会返回什么样的数据。”

文字叙述有点抽象,我们找个实际的网站看看。可以用类似下面的语法进行搜索:

QUAKE:body:"<wsdl:" AND title:"WebService Web 服务"

正常打开的界面通常如下所示(这也是一个特征,.NET 架构的 WebService 页面大多长这样):

.NET WebService服务发现页面

然后访问 http://yoururl?wsdl,就可以看到其 WSDL 的 XML 描述了:

WSDL XML文档结构示例

打开后会看到大量 XML 标签,它们的主要含义如下:

  1. types: 定义参数和返回值的数据类型(比如字符串、整数、或是自定义的复杂对象)。
  2. messages: 说明每个功能需要什么输入(参数)和会产生什么输出(返回值)。
  3. portType: 说明服务提供哪些大类功能(操作)。
  4. binding: 说明服务使用的通信协议(如 SOAP over HTTP)。
  5. service: 如何连接到服务。

在任何资料里寻找 WSDL 都会发现它和 SOAP 密不可分,它们俩的关系就像初恋的大学生,火热、清澈、难舍难分~

比喻WSDL与SOAP紧密关系的卡通插画

它们具体是如何协作的呢?我们用一个例子来说明。假设有个服务器发布了一个 WSDL,提供查询“开房次数”的功能:

<!-- 示例:WSDL中定义的查询开房次数记录操作 -->
<wsdl:operation name="getkaifanglog">
  <wsdl:input message="tns:getkaifanglogRequest"/>
  <wsdl:output message="tns:getkaifanglogResponse"/>
</wsdl:operation>

这时候,一个叫小美的女孩看到了这个 WSDL,想查询男朋友小帅的开房记录,于是她根据 WSDL 的描述构造了对应的 SOAP 请求:

<soap:Envelope xmlns:soap="...">
  <soap:Body>
    <getkaifanglog xmlns="http://example.com/xxx">
      <name>小帅</name>
    </getkaifanglog>
  </soap:Body>
</soap:Envelope>

服务器查询到小帅的开房记录后,用 SOAP 响应的形式告诉了小美:

<soap:Envelope xmlns:soap="...">
  <soap:Body>
    <getkaifanglogResponse xmlns="http://example.com/kaifanglog">
      <number>2,147,483,647</number>
    </getkaifanglogResponse>
  </soap:Body>
</soap:Envelope>

小美伤心欲绝,从此发誓要远离渣男,并留下了下面这张关系图。

WSDL与SOAP在客户端与服务器间的协作流程图

总结一下:WSDL 是一份基于 XML 的详细说明书,它告诉客户端如何与一个 SOAP Web 服务进行交互,包括服务地址、可用方法和参数格式。

二、WSDL相关的一些漏洞利用

既然 WSDL 暴露了服务的交互方式,攻击者就可以利用它来寻找潜在的漏洞入口。以下是基于内网靶场环境的一些基础测试示例。

1. 信息泄露(用户枚举)

既然 WSDL 描述了可调用的方法,攻击者就可以尝试调用那些可能返回敏感信息的方法,例如查询用户信息的接口:

SOAP请求导致的用户信息泄露示例

2. 常见Web漏洞如XXE、SQL注入

SOAP消息本质是XML,因此可能存在XXE(XML外部实体注入)漏洞:

SOAP消息中的XXE漏洞利用示例

同样,如果后端对参数处理不当,也可能存在SQL注入:

SOAP接口中的SQL注入漏洞示例

3. 高效测试工具推荐:Wsdler

在安全测试中,手动解析和构造SOAP请求比较繁琐。这里推荐一个Burp Suite商店自带的扩展——Wsdler,下载和使用都非常方便。

Burp Suite BApp商店中的Wsdler插件页面

安装后,在Burp中捕获到WSDL请求或找到WSDL地址时,右键菜单选择“扩展” -> “Wsdler” -> “解析WSDL”即可。

在Burp Suite中使用Wsdler插件解析WSDL

插件会自动解析WSDL文件,并生成所有可调用的SOAP请求模板,显示在Target站点地图或一个独立标签页中。

Wsdler解析后生成的SOAP请求列表

这样,测试人员就可以快速地将这些请求发送到Repeater模块进行手动测试和漏洞挖掘。(注意:在非授权测试环境下,务必做好授权和隔离措施。

强调安全测试注意事项的趣味图片

三、防御建议

  1. 访问控制:在生产环境中,考虑禁用或严格限制对 ?wsdl 页面的访问(例如,仅允许内网特定IP或管理用户访问)。
  2. 安全解析:在服务端使用严格的XML解析器,并禁用DTD和外部实体解析(例如,设置 resolve_entities=False)。
  3. 输入校验:对所有来自SOAP请求的输入参数进行严格的校验、过滤和净化,采用白名单策略。
  4. 防SQL注入:使用参数化查询(预编译语句)来避免SQL注入风险。
  5. 权限管理:对SOAP服务实施严格的身份验证和基于角色的访问控制(RBAC),确保用户只能访问其权限范围内的操作。



上一篇:Claude Code隐藏功能“电子宠物”完全解析:玩法、技术实现与源码细节
下一篇:开源模式新变局:从AI提示词到Claude Code被迫开源事件分析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 21:48 , Processed in 0.757482 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表