0x00 前言
补充一下Web Service以及SOAP型这块资料。 0x01 Web Service基础 Web Service简介Web Service是一个平台独立的、低耦合的、自包含的、基于可编程的Web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的交互操作的应用程序。
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。 Web Service的本质,就是通过网络调用其他网站的资源。Web Service架构的基本思想,就是尽量把非核心功能交给其他人去做,自己全力开发核心功能。
更简单地说,Web Service是一种跨编程语言、跨操作系统平台的远程调用技术。
Web Service基本原理Web Service通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议规定的。
Web Service服务器端首先要通过一个WSDL文件来说明自己有什么服务可以对外调用。WSDL就像是一个说明书,用于描述Web Service及其方法、参数和返回值。WSDL文件保存在Web服务器上,通过一个URL地址就可以访问到它。客户端要调用一个Web Service服务之前,要知道该服务的WSDL文件的地址。Web Service服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。
Web Service交互的过程就是,Web Service遵循SOAP协议通过XML封装数据,然后由HTTP协议来传输数据。
Java版编写接口类ICalculator,其中声明两个方法,注意接口要用@WebService修饰:
package com.mi1k7ea;import javax.jws.WebService;@WebServicepublic interface ICalculator { int add(int a, int b); String concat(String a, String b);}编写接口实现类CalculatorImpl,其中重写实现两个方法,在@WebService修饰中指定端点接口为com.mi1k7ea.ICalculator且服务名为Calcutator:
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 Service服务端,通过Endpoint.publish()函数来发布指定地址上的Web Service服务:
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("
其实就是SoapUI NG Pro作为Web Service的测试工具,Burp作为代理、监听SoapUI NG Pro用自己构造的payload报文打Web Service的流量报文,其中可以篡改对应的报文参数实现渗透测试。
这里本地以ReadyAPI为例。
先设置Burp代理,在File->references->roxy中设置Burp代理服务器地址: