一、Web Service 概述
WebService 是一种跨平台,跨语言的规范,用于不同平台,不同语言开发的应用之间的交互。即 JAVA 应用程序可以通过 websrvice 调用 PHP 或者 Python 等程序提供的服务。WebService 三要素:SOAP、WSDL、UDDI。
WebService 三要素:
SOAP(简单对象访问协议)
是基于 XML 的简易协议,可使应用程序在 HTTP 之上进行信息交换,是连接或 Web 服务或客户端和 Web 服务之间的接口。简单地说就是,SOAP 是用于访问网络服务的协议。
WSDL
用来描述如何访问具体的接口。告诉调用者应该怎么填写SOAP当中的XML文件里面的内容。服务端具体提供了什么服务,该怎么调用这个服务,该传递什么类型的参数。会返回什么类型的数据等等。
UDDI
用来管理,分发,查询 WebService。
二、SOAP 简述
SOAP 消息组成部分:所有的 SOAP 消息都使用 XML 编码,一条 SOAP 消息就是一个普通的 XML 文档,该文档包括下列元素。
1 2 3 4 5
| Envelope(信封)元素,必选,可把此 XML 文档标识为一条 SOAP 消息。 Header(报头)元素,可选,包含头部信息(包含了使消息在到达最终目的地之前,能够被路由到一个或多个中间节点的信息)。 Body(主体)元素,必选,包含所有的调用和响应信息。 Fault 元素,位于 Body 内,可选,提供有关处理此消息所发生错误的信息。 Attachment(附件)元素,可选,可通过添加一个或多个附件扩展 SOAP 消息。
|
SOAP 消息格式例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <?xml version="1.0"?> <soap:Envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
<soap:Header> ... </soap:Header>
<soap:Body> ... <soap:Fault> ... </soap:Fault> </soap:Body>
</soap:Envelope>
|
三、SOAP 接口漏洞
SOAP 型 Web Service 漏洞类型与 Web 漏洞类型区别不太,只是请求的 payload 构造需要满足一些格式要求,具体要看Web Service服务端代码编写情况。漏洞类型比如命令注入、SQL注入、XSS、XXE、XPath注入、DoS、逻辑漏洞、信息泄露……等等。
如下为一个员工资料查询功能,其中<wkno>string</wkno>
<dept>string</dept>
<memo>string</memo>
<status>string</status>
<sex>string</sex>
<agefilter>string</agefilter>
<name>string</name>
<token>string</token>
为用户输入的数据,可作为测试点进行漏洞测试。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| POST /Service1.asmx HTTP/1.1 Host: x.x.x.x Content-Type: text/xml; charset=utf-8 Content-Length: length SOAPAction: "http://x.x.x.x"
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <hr_ygzlcx xmlns="http://x.x.x.x"> <wkno>string</wkno> <dept>string</dept> <memo>string</memo> <status>string</status> <sex>string</sex> <agefilter>string</agefilter> <name>string</name> <token>string</token> </hr_ygzlcx> </soap:Body> </soap:Envelope>
|
例如在网页上发现存在 SOAP 接口,我们就可以对其输入点进行测试。
测试的时候我们会遇到 xxx?WSDL 页面,这时候我们就可以利用 Burp 插件 Wsdler 提取接口进行测试。
burp 商店安装 Wsdler 插件
找到 asmx?WSDL 页面,抓取数据包直接右键 Extensions 处提取接口
成功提取数据接口,接下来就可以进行漏洞测试
四、搜索 Web Service 服务
Google 指定搜索 Web Service 服务,如下所示,指定站点时可在前面添加 site:x.x.x.x
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| filetype:asmx inurl:(_vti_bin | api | webservice | ws ) inurl:dll?wsdl filetype:dll inurl:jws?wsdl inurl:asmx?wsdl inurl:aspx?wsdl inurl:ascx?wsdl inurl:ashx?wsdl inurl:dll?wsdl inurl:exe?wsdl inurl:php?wsdl inurl:pl?wsdl inurl:?wsdl filetype:jws filetype:asmx filetype:ascx filetype:aspx filetype:ashx filetype:dll filetype:exe filetype:php filetype:pl filetype:wsdl
|
五、小结
通过了解学习后发现,soap 接口测试与常规的测试区别不大,主要区别就是调用的接口使用 XML 格式,测试时需要构造相关表单进行测试。
六、参考文章
1 2 3 4 5 6 7
| https://www.anquanke.com/post/id/85410 https://skysec.top/2018/08/17/SOAP%E5%8F%8A%E7%9B%B8%E5%85%B3%E6%BC%8F%E6%B4%9E%E7%A0%94%E7%A9%B6/ http://emonsec.com/web/51995.html https://cloud.tencent.com/developer/article/1640199 https://www.cnblogs.com/UniqueColor/p/5788906.html https://mp.weixin.qq.com/s/UTClGLSvQ3rdUoGeRlvp4w https://blog.csdn.net/weixin_50464560/article/details/125022377
|