如何與Web服務(wù)通訊和使用的服務(wù)描述描述語(yǔ)言?
2024-04-19
包括以下要素:
休息
REST( ),即 ,是Roy博士在2000年的博士論文中提出的一種軟件架構(gòu)風(fēng)格,是一種針對(duì)網(wǎng)絡(luò)應(yīng)用的設(shè)計(jì)和開(kāi)發(fā)方法,可以降低開(kāi)發(fā)的復(fù)雜度,提高系統(tǒng)的可擴(kuò)展性。
REST 是一組架構(gòu)約束和原則。 滿足這些約束和原則的應(yīng)用程序或設(shè)計(jì)就是。 需要注意的是,REST 是一種設(shè)計(jì)風(fēng)格,而不是標(biāo)準(zhǔn)。 REST 通常基于使用 HTTP、URI 和 XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)和 HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的應(yīng)用程序)的現(xiàn)有廣泛流行的協(xié)議和標(biāo)準(zhǔn)。
在三種主流的Web服務(wù)實(shí)現(xiàn)方案中,由于REST模式的Web服務(wù)比復(fù)雜的SOAP和XML-RPC要簡(jiǎn)單得多,因此越來(lái)越多的Web服務(wù)開(kāi)始以REST風(fēng)格來(lái)設(shè)計(jì)和實(shí)現(xiàn)。 例如,它提供了接近REST風(fēng)格的Web服務(wù)用于圖書(shū)搜索; 提供的Web 服務(wù)也是REST 風(fēng)格。
WSDL
WSDL(Web)是Web服務(wù)描述語(yǔ)言,用于描述Web服務(wù)的公共接口。 這是一個(gè)基于 XML 的服務(wù)描述,描述如何通信和使用 Web 服務(wù); 即描述了與目錄中列出的Web服務(wù)交互時(shí)需要綁定的協(xié)議和信息格式。 抽象語(yǔ)言通常用于描述服務(wù)支持的操作和信息,使用時(shí)將實(shí)際的網(wǎng)絡(luò)協(xié)議和信息格式與服務(wù)綁定。
WSDL 給出了基于 SOAP 的 Web 的基本定義。 WSDL基于XML語(yǔ)言,描述了與服務(wù)交互的基本元素,并解釋了服務(wù)器接口、方法、參數(shù)和返回值。 WSDL是服務(wù)發(fā)布成功時(shí)自動(dòng)生成的網(wǎng)站建設(shè),無(wú)需編寫(xiě)。 在極少數(shù)情況下,WSDL 也可用于描述 Web。 SOAP 還基于 XML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集)和 XSD。 XML是SOAP的數(shù)據(jù)編碼方法。
WADL
WADL(Web),即Web應(yīng)用程序描述語(yǔ)言,是一種可由計(jì)算機(jī)處理的XML詞匯表,用于表達(dá)基于HTTP的Web應(yīng)用程序(例如服務(wù))。 WADL 描述了 Web 服務(wù)及其連接提供的資源。 WADL試圖簡(jiǎn)化基于HTTP架構(gòu)的Web服務(wù)的重用。 它是一個(gè)與語(yǔ)言無(wú)關(guān)的平臺(tái),并試圖在 Web 瀏覽器的基本使用之外推動(dòng)應(yīng)用程序重用。
WADL 于 2009 年 8 月 31 日由 Sun 提交給萬(wàn)維網(wǎng)聯(lián)盟,但該聯(lián)盟目前沒(méi)有計(jì)劃對(duì)其進(jìn)行標(biāo)準(zhǔn)化,也沒(méi)有得到廣泛支持。 WADL是按照描述基于SOAP的RPC風(fēng)格服務(wù)的XML詞匯WSDL定義的,用于描述REST服務(wù),同時(shí)WSDL也可以用來(lái)描述服務(wù)。
WADL 主要用于 REST 基礎(chǔ)知識(shí)。
WADL 和 WSDL 的區(qū)別:
UDDI
UDDI(和),代表統(tǒng)一描述、發(fā)現(xiàn)和集成,是一種用于描述、發(fā)現(xiàn)和集成Web的技術(shù)。 它是Web協(xié)議棧的重要組成部分。 通過(guò)UDDI,企業(yè)可以根據(jù)自己的需要?jiǎng)討B(tài)地查找和使用Web服務(wù),也可以動(dòng)態(tài)地將自己的Web服務(wù)發(fā)布到UDDI注冊(cè)中心以供其他用戶使用。
UDDI 是核心Web 服務(wù)標(biāo)準(zhǔn)之一。 它通過(guò)SOAP傳輸消息,并使用Web服務(wù)描述語(yǔ)言來(lái)描述Web服務(wù)及其接口使用。
SOAP Web 服務(wù)體系結(jié)構(gòu)
如圖所示,Web服務(wù)提供者通過(guò)SOAP動(dòng)態(tài)地將其Web服務(wù)發(fā)布到UDDI注冊(cè)中心,由WSDL文件描述。 Web服務(wù)消費(fèi)者首先通過(guò)SOAP向UDDI注冊(cè)中心請(qǐng)求WSDL文件,并將其解析回服務(wù)提供者。 提供方法后,與提供者建立 XML 格式的 HTTP 通信:
WSDL 文檔結(jié)構(gòu)
WSDL文檔結(jié)構(gòu)如下,以本地WSDL文檔為例:
標(biāo)簽說(shuō)明:
:所有WSDL文檔的根元素是;
:數(shù)據(jù)類型(標(biāo)簽)定義的容器,定義了一些標(biāo)簽結(jié)構(gòu)供參考;
:通信消息數(shù)據(jù)結(jié)構(gòu)的抽象類型定義。 參考文獻(xiàn)中定義的標(biāo)簽;
:服務(wù)中支持的操作的抽象描述,描述訪問(wèn)入口的請(qǐng)求消息和響應(yīng)消息對(duì);
:某種訪問(wèn)入口點(diǎn)類型支持的操作的抽象集合。 這些操作可以由一個(gè)或多個(gè)服務(wù)接入點(diǎn)支持;
:特定端口類型的特定協(xié)議和數(shù)據(jù)格式規(guī)范的綁定;
:相關(guān)服務(wù)接入點(diǎn)的集合
端口:定義為協(xié)議/數(shù)據(jù)格式綁定和特定Web訪問(wèn)地址組合的單個(gè)服務(wù)訪問(wèn)點(diǎn);
那么我們一般如何讀取WSDL文件呢? ——WSDL文檔是從下到上閱讀的。
首先看最下面的標(biāo)簽,檢查端口標(biāo)簽的屬性值,然后利用該值找到上面的標(biāo)簽:
可以通過(guò)標(biāo)簽獲取具體的協(xié)議等信息,然后查看type屬性:
通過(guò)查找對(duì)應(yīng)的type屬性小程序開(kāi)發(fā),可以獲得可操作的方法、參數(shù)、返回值等:
通過(guò)以下標(biāo)簽的屬性php開(kāi)發(fā)webservice,可以向上搜索獲取具體的數(shù)據(jù)參數(shù):
2. 編寫(xiě)Web程序
讓我們簡(jiǎn)單地看一下如何用每種語(yǔ)言編寫(xiě) Web 程序。
Java版本
編寫(xiě)一個(gè)接口類,其中聲明了兩個(gè)方法。 注意接口必須用@修飾:
編寫(xiě)一個(gè)接口實(shí)現(xiàn)類,重寫(xiě)并實(shí)現(xiàn)兩個(gè)方法。 在@修飾中,指定端點(diǎn)接口為com..以及服務(wù)名稱:
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;
}
}
編寫(xiě)一個(gè)Web服務(wù)器,通過(guò).()函數(shù)向指定地址發(fā)布We??b服務(wù):
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...");
}
}
運(yùn)行服務(wù)訪問(wèn):
3. 搜索 Web 服務(wù)黑客
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
通過(guò)代理流量過(guò)濾
可以通過(guò)在代理工具(例如此工具)中設(shè)置過(guò)濾規(guī)則來(lái)過(guò)濾 Web 請(qǐng)求。 例如,“.dll?wsdl”、“.ashx?wsdl”、“.exe?wsdl”、“.php?wsdl”等。
4. Web 滲透測(cè)試
Web服務(wù)只是一些封裝好的接口。 Web 服務(wù)的滲透測(cè)試與常規(guī) API 滲透測(cè)試相同。 不過(guò),可以使用安全工具來(lái)輔助,包括但不限于以下工具:
面向服務(wù)架構(gòu)
WS-
扎普
WSDL
這里我們主要講一下如何使用這兩個(gè)工具和//來(lái)滲透Web服務(wù)。
+
網(wǎng)上的資料都是說(shuō)使用NG Pro+組合進(jìn)行Web滲透測(cè)試,不過(guò)現(xiàn)在NG Pro試用版的下載已經(jīng)改名了。
下載鏈接:
整個(gè)流程如圖所示:
實(shí)際上NG Pro是作為Web的測(cè)試工具,Burp作為代理,利用NG Pro本身構(gòu)建的數(shù)據(jù)包來(lái)監(jiān)控Web的流量數(shù)據(jù)包。 可以篡改相應(yīng)的數(shù)據(jù)包參數(shù)來(lái)實(shí)現(xiàn)滲透測(cè)試。
這是一個(gè)當(dāng)?shù)氐睦印?/p>
首先設(shè)置Burp代理,在File->->中設(shè)置Burp代理服務(wù)器地址:
然后新建一個(gè)安全測(cè)試任務(wù),選擇WSDL相關(guān)的API模塊定義:
填寫(xiě)目標(biāo)Web的WSDL地址。 這里我們以之前寫(xiě)的Demo為例:
點(diǎn)擊下一步。 當(dāng)WSDL解析完成后php開(kāi)發(fā)webservice,會(huì)自動(dòng)生成一系列的安全測(cè)試用例。 默認(rèn)選擇安全測(cè)試用例。 單擊 ,然后運(yùn)行測(cè)試用例:
掃描完成后,會(huì)給出掃描總結(jié)報(bào)告,并提供PDF版本的詳細(xì)報(bào)告供審核:
此時(shí)Burp已經(jīng)監(jiān)聽(tīng)到了大量的安全測(cè)試用例數(shù)據(jù)包。 只需要將相應(yīng)的數(shù)據(jù)包放入并修改參數(shù)值即可繼續(xù)滲透測(cè)試或發(fā)送到數(shù)據(jù)庫(kù)進(jìn)行滲透測(cè)試:
接下來(lái)是針對(duì)常見(jiàn)API接口安全的滲透測(cè)試,套路相同。
+
當(dāng)使用沒(méi)有安全測(cè)試用例掃描功能的系統(tǒng)時(shí),也可以用來(lái)生成相應(yīng)格式的消息供Burp進(jìn)行手動(dòng)滲透測(cè)試。
以Pro為例,之前的設(shè)置操作都是一樣的,只是沒(méi)有安全測(cè)試用例掃描功能。
設(shè)置Burp代理,新建一個(gè)SOAP項(xiàng)目,填寫(xiě)WSDL地址并完成解析,下圖左側(cè)的所有Web服務(wù)和方法都會(huì)顯示出來(lái)。 可以單獨(dú)填寫(xiě)參數(shù)值來(lái)發(fā)送相應(yīng)的請(qǐng)求消息并獲取結(jié)果并將其回顯到界面:
這里Burp監(jiān)聽(tīng)消息只需要修改參數(shù)值,無(wú)需構(gòu)造XML格式:
接下來(lái)是針對(duì)常見(jiàn)API接口安全的滲透測(cè)試,套路相同。
插入
是的,可以直接在BApp中下載安裝。 雖然比之前的方法簡(jiǎn)單,但是有時(shí)候生成的請(qǐng)求會(huì)出現(xiàn)問(wèn)題,無(wú)法成功發(fā)送包裹。 這種情況下就需要使用前面的方法了。
安裝成功后,右鍵選擇WSDL即可直接使用:
WSDL解析完成后,您可以在欄中看到解析出的對(duì)應(yīng)的Web服務(wù)和方法以及對(duì)應(yīng)的請(qǐng)求參數(shù)示例。 可以直接修改對(duì)應(yīng)的參數(shù)值來(lái)進(jìn)行滲透測(cè)試:
5. Web漏洞案例
SOAP類型的Web漏洞和Web漏洞沒(méi)有什么區(qū)別,只是請(qǐng)求的結(jié)構(gòu)需要滿足一些格式要求。 細(xì)節(jié)仍然取決于 Web 服務(wù)器代碼的編寫(xiě)方式。 如命令注入、SQL注入、XSS、XXE、注入、DoS、邏輯漏洞、信息泄露……等。
這里我們以DVWS射擊場(chǎng)為例,演示幾種SOAP類型Web請(qǐng)求的利用。