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