如何与Web服务通讯和使用的服务描述描述语言?
2024-04-19
包括以下要素:
休息
REST( ),即 ,是Roy博士在2000年的博士论文中提出的一种软件架构风格,是一种针对网络应用的设计和开发方法,可以降低开发的复杂度,提高系统的可扩展性。
REST 是一组架构约束和原则。 满足这些约束和原则的应用程序或设计就是。 需要注意的是,REST 是一种设计风格,而不是标准。 REST 通常基于使用 HTTP、URI 和 XML(标准通用标记语言的子集)和 HTML(标准通用标记语言的应用程序)的现有广泛流行的协议和标准。
在三种主流的Web服务实现方案中,由于REST模式的Web服务比复杂的SOAP和XML-RPC要简单得多,因此越来越多的Web服务开始以REST风格来设计和实现。 例如,它提供了接近REST风格的Web服务用于图书搜索; 提供的Web 服务也是REST 风格。
WSDL
WSDL(Web)是Web服务描述语言,用于描述Web服务的公共接口。 这是一个基于 XML 的服务描述,描述如何通信和使用 Web 服务; 即描述了与目录中列出的Web服务交互时需要绑定的协议和信息格式。 抽象语言通常用于描述服务支持的操作和信息,使用时将实际的网络协议和信息格式与服务绑定。
WSDL 给出了基于 SOAP 的 Web 的基本定义。 WSDL基于XML语言,描述了与服务交互的基本元素,并解释了服务器接口、方法、参数和返回值。 WSDL是服务发布成功时自动生成的网站建设,无需编写。 在极少数情况下,WSDL 也可用于描述 Web。 SOAP 还基于 XML(标准通用标记语言的子集)和 XSD。 XML是SOAP的数据编码方法。
WADL
WADL(Web),即Web应用程序描述语言,是一种可由计算机处理的XML词汇表,用于表达基于HTTP的Web应用程序(例如服务)。 WADL 描述了 Web 服务及其连接提供的资源。 WADL试图简化基于HTTP架构的Web服务的重用。 它是一个与语言无关的平台,并试图在 Web 浏览器的基本使用之外推动应用程序重用。
WADL 于 2009 年 8 月 31 日由 Sun 提交给万维网联盟,但该联盟目前没有计划对其进行标准化,也没有得到广泛支持。 WADL是按照描述基于SOAP的RPC风格服务的XML词汇WSDL定义的,用于描述REST服务,同时WSDL也可以用来描述服务。
WADL 主要用于 REST 基础知识。
WADL 和 WSDL 的区别:
UDDI
UDDI(和),代表统一描述、发现和集成,是一种用于描述、发现和集成Web的技术。 它是Web协议栈的重要组成部分。 通过UDDI,企业可以根据自己的需要动态地查找和使用Web服务,也可以动态地将自己的Web服务发布到UDDI注册中心以供其他用户使用。
UDDI 是核心Web 服务标准之一。 它通过SOAP传输消息,并使用Web服务描述语言来描述Web服务及其接口使用。
SOAP Web 服务体系结构
如图所示,Web服务提供者通过SOAP动态地将其Web服务发布到UDDI注册中心,由WSDL文件描述。 Web服务消费者首先通过SOAP向UDDI注册中心请求WSDL文件,并将其解析回服务提供者。 提供方法后,与提供者建立 XML 格式的 HTTP 通信:
WSDL 文档结构
WSDL文档结构如下,以本地WSDL文档为例:
标签说明:
:所有WSDL文档的根元素是;
:数据类型(标签)定义的容器,定义了一些标签结构供参考;
:通信消息数据结构的抽象类型定义。 参考文献中定义的标签;
:服务中支持的操作的抽象描述,描述访问入口的请求消息和响应消息对;
:某种访问入口点类型支持的操作的抽象集合。 这些操作可以由一个或多个服务接入点支持;
:特定端口类型的特定协议和数据格式规范的绑定;
:相关服务接入点的集合
端口:定义为协议/数据格式绑定和特定Web访问地址组合的单个服务访问点;
那么我们一般如何读取WSDL文件呢? ——WSDL文档是从下到上阅读的。
首先看最下面的标签,检查端口标签的属性值,然后利用该值找到上面的标签:
可以通过标签获取具体的协议等信息,然后查看type属性:
通过查找对应的type属性小程序开发,可以获得可操作的方法、参数、返回值等:
通过以下标签的属性php开发webservice,可以向上搜索获取具体的数据参数:
2. 编写Web程序
让我们简单地看一下如何用每种语言编写 Web 程序。
Java版本
编写一个接口类,其中声明了两个方法。 注意接口必须用@修饰:
编写一个接口实现类,重写并实现两个方法。 在@修饰中,指定端点接口为com..以及服务名称:
package com.mi1k7ea;
import javax.jws.WebService;
@WebService(endpointInterface = "com.mi1k7ea.ICalculator", serviceName = "Calcutator")
public class CalculatorImpl implements ICalculator {
@Override
public int add(int a, int b) {
return a + b;
}
@Override
public String concat(String a, String b) {
return a + b;
}
}
编写一个Web服务器,通过.()函数向指定地址发布Web服务:
import com.mi1k7ea.CalculatorImpl;
import javax.xml.ws.Endpoint;
public class WebService {
public static void main(String[] args) {
System.out.println("[*]Start Web Service...");
CalculatorImpl calculator = new CalculatorImpl();
String address = "http://127.0.0.1:8081/calculator";
Endpoint.publish(address, calculator);
System.out.println("[*]Web Service is working...");
}
}
运行服务访问:
3. 搜索 Web 服务黑客
filetype:asmx inurl:(_vti_bin | api | webservice | ws )
allinurl: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
通过代理流量过滤
可以通过在代理工具(例如此工具)中设置过滤规则来过滤 Web 请求。 例如,“.dll?wsdl”、“.ashx?wsdl”、“.exe?wsdl”、“.php?wsdl”等。
4. Web 渗透测试
Web服务只是一些封装好的接口。 Web 服务的渗透测试与常规 API 渗透测试相同。 不过,可以使用安全工具来辅助,包括但不限于以下工具:
面向服务架构
WS-
扎普
WSDL
这里我们主要讲一下如何使用这两个工具和//来渗透Web服务。
+
网上的资料都是说使用NG Pro+组合进行Web渗透测试,不过现在NG Pro试用版的下载已经改名了。
下载链接:
整个流程如图所示:
实际上NG Pro是作为Web的测试工具,Burp作为代理,利用NG Pro本身构建的数据包来监控Web的流量数据包。 可以篡改相应的数据包参数来实现渗透测试。
这是一个当地的例子。
首先设置Burp代理,在File->->中设置Burp代理服务器地址:
然后新建一个安全测试任务,选择WSDL相关的API模块定义:
填写目标Web的WSDL地址。 这里我们以之前写的Demo为例:
点击下一步。 当WSDL解析完成后php开发webservice,会自动生成一系列的安全测试用例。 默认选择安全测试用例。 单击 ,然后运行测试用例:
扫描完成后,会给出扫描总结报告,并提供PDF版本的详细报告供审核:
此时Burp已经监听到了大量的安全测试用例数据包。 只需要将相应的数据包放入并修改参数值即可继续渗透测试或发送到数据库进行渗透测试:
接下来是针对常见API接口安全的渗透测试,套路相同。
+
当使用没有安全测试用例扫描功能的系统时,也可以用来生成相应格式的消息供Burp进行手动渗透测试。
以Pro为例,之前的设置操作都是一样的,只是没有安全测试用例扫描功能。
设置Burp代理,新建一个SOAP项目,填写WSDL地址并完成解析,下图左侧的所有Web服务和方法都会显示出来。 可以单独填写参数值来发送相应的请求消息并获取结果并将其回显到界面:
这里Burp监听消息只需要修改参数值,无需构造XML格式:
接下来是针对常见API接口安全的渗透测试,套路相同。
插入
是的,可以直接在BApp中下载安装。 虽然比之前的方法简单,但是有时候生成的请求会出现问题,无法成功发送包裹。 这种情况下就需要使用前面的方法了。
安装成功后,右键选择WSDL即可直接使用:
WSDL解析完成后,您可以在栏中看到解析出的对应的Web服务和方法以及对应的请求参数示例。 可以直接修改对应的参数值来进行渗透测试:
5. Web漏洞案例
SOAP类型的Web漏洞和Web漏洞没有什么区别,只是请求的结构需要满足一些格式要求。 细节仍然取决于 Web 服务器代码的编写方式。 如命令注入、SQL注入、XSS、XXE、注入、DoS、逻辑漏洞、信息泄露……等。
这里我们以DVWS射击场为例,演示几种SOAP类型Web请求的利用。