自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Web服務(wù)攻擊第一部分 簡單對象訪問協(xié)議(SOAP)

譯文
安全 應(yīng)用安全
一般說來,Web服務(wù)在人們心目中一直是那種難以精確定義、解釋及運用的小眾工具。這實際上是種誤解,我也很想通過一些技術(shù)及代碼實例來消除此種誤解。在本文當(dāng)中,我們將專門討論SOAP。當(dāng)然類似JSON及REST也都是比較流行的重要標準,但在這里我們姑且將重點集中在SOAP身上。

【51CTO.com 獨家譯稿】一般說來,Web服務(wù)在人們心目中一直是那種難以精確定義、解釋及運用的小眾工具。這實際上是種誤解,詳情點擊此處查看我也很想通過一些技術(shù)及代碼實例來消除此種誤解。在本文當(dāng)中,我們將專門討論SOAP。當(dāng)然類似JSON及REST也都是比較流行的重要標準,但在這里我們姑且將重點集中在SOAP身上。

簡單對象訪問協(xié)議或簡稱SOAP,是利用XML架構(gòu)進行信息(且主要通過HTTP協(xié)議實現(xiàn))交互的一套機制。Web服務(wù)協(xié)議則是一套相對輕量級的通信機制,在API連接驅(qū)動方面功效卓著,常見于移動設(shè)備應(yīng)用程序當(dāng)中。

要在閱讀本指導(dǎo)文章的同時嘗試當(dāng)中涉及的各項操作,大家需要預(yù)先安裝Jruby、Buby、Savon、Nokogiri gems以及通過下載或購買獲得PortSwigger出品的Burp套件。整個討論過程的基本思路是通過深入挖掘并在一定程度上拓展Burp的某些功能,使得攻擊SOAP的流程更易于掌握。

如上所述,SOAP信息通信建立在XML架構(gòu)的基礎(chǔ)之上。這種XML架構(gòu)可以被定義為WSDL或是"Web服務(wù)描述語言"類文件。這種信息描述方式為針對數(shù)據(jù)的攻擊制定及請求形成提供了可資利用的寶貴空間。

SOAP的執(zhí)行及其參數(shù)是頗具價值的信息單位,并且能夠從WSDL中提取得出。類似獲取電子郵件地址之類的操作可以經(jīng)由類似"profileid=1000"這種參數(shù)及賦值實現(xiàn)。創(chuàng)建這一請求、更改profileid的賦值并將其發(fā)送至目標處即能夠使我們得到其它用戶的電子郵箱地址。

現(xiàn)在我們可以通過在XML標簽內(nèi)部查驗響應(yīng)及獲取數(shù)據(jù)中大值的方式對WSDL進行手動列舉,但怎樣才能在不創(chuàng)建可重復(fù)代碼的前提下快速且無縫地達成上述目標呢?

安裝 JRuby

$ sudo apt-get install jruby

安裝 Savon 及 Buby gems

$ sudo jruby -S gem install buby
$ sudo jruby -S gem install savon

現(xiàn)在我們需要編寫一些代碼。Savon gem是一款Ruby / JRuby函數(shù)庫,允許我們創(chuàng)建一套SOAP客戶端并使其與Web服務(wù)進行交互。首先建立一個名為attack_soap.rb的文件(單擊此處獲取代碼),接著輸入以下代碼:

 #p#

一行一行逐步講解

第1至2行:

這一條是我們的腳本指令,基本上表達的意思是"使用這些函數(shù)庫"。

第 5行:

接下來我們需要輸入代碼以獲得連入Burp套件及運行工具及代碼的權(quán)限。在這里,我們定義一套標準的CustomMenuItem。第33行演示了如何將其導(dǎo)入并發(fā)揮作用。

第 8至9行:

這里我們創(chuàng)建了一種名為enum_wsdl的函數(shù)。該函數(shù)在第27行被調(diào)用并導(dǎo)入一個URL(rhost對象)。在第9行中大家會看到我們引入了Savon客戶端實例并將其賦值與rhost相關(guān)聯(lián)。

第 11至 12行:

這兩行的內(nèi)容都是可選值。第10行為一套用戶名及密碼都為"guest"的賬號提供了授權(quán)。第11行則將此信息發(fā)送到我們的Burp代理實例中。

第 13至 18行:

第13行確保了之前建立的client.wsdl以及client.wsdl.soap_actions被正確調(diào)用。第14行為我們提供了非常美觀的紫色*標識以及內(nèi)容為"可用操作列表:"的狀態(tài)欄。第15至17行用來重申soap_actions中的數(shù)組,并將每項操作"放入"控制臺;而在第17行中,我們?yōu)檎麄€循環(huán)語句畫上句號。

第 19至21行:

我們還得為執(zhí)行出現(xiàn)錯誤的情況做出補救措施,一旦出問題,第19行的指令能幫我們妥善解決。在第20行的描述中,我們會在遇到錯誤時向屏幕輸出一個紅色的 - 標記以示警告。第21行則用于結(jié)束整套enum_wsdl函數(shù)。

第 23 至24行:

我們在第23行中定義了名為menu_item_clicked的函數(shù)。這一點至關(guān)重要,因為Burp會調(diào)用此函數(shù)并遵循特殊的命名規(guī)范。而在第33行中,我們設(shè)定了在單擊菜單選項(指那些可用項)時,該函數(shù)正式執(zhí)行調(diào)用操作。

這里談到的一切,總結(jié)起來意味著CustomMenuItem這個類必須具備一組名為menu_item_clicked的函數(shù)。請注意這里我們向其傳遞的是*參數(shù)(復(fù)數(shù)),這意味著該函數(shù)能夠同時接收到多個對象。

在第24行中我們將一對對象拆分為兩個相互獨立的個體,分別名為menu_item_caption以及message_info。

第 26 至 31行:

這一對象實際上是一個信息組。每條信息都具有與之關(guān)聯(lián)的特定值。當(dāng)我們循環(huán)訪問該組時,通過第26行的指令,我們能夠同時訪問到這些數(shù)值。在第27行中我們借助獲取itm對象(此對象確實是一條信息)并訪問與之關(guān)聯(lián)的url值的方式達到上述目的。我們調(diào)用enum_wsdl函數(shù)并向其傳遞剛剛獲得的url值。最后,第28、29及30行用于關(guān)閉循環(huán)、函數(shù)及message_info類。

第33行:

最后還有同樣重要的一點--我們需要創(chuàng)建菜單選項。我們采取調(diào)用Burp(即&burp指令)中的注冊菜單選項函數(shù)的辦法。我們將在"enumerate wsdl"中可見的菜單選項名稱調(diào)出,如此一來該類就可以查找menu_item_clicked函數(shù)了。

整個工作流程總結(jié)如下:

" 在Burp中點擊enumerate wsdl / 菜單選項。

" CustomMenuItem.menu_item_clicked 被調(diào)用并傳遞至兩個對象處。

" 在 menu_item_clicked當(dāng)中, enum_wsdl 函數(shù)被調(diào)用。

" 我們解析WSDL以獲取可行操作列表并將其輸出至控制臺。#p#

腳本運行實例:

$ jruby -S buby -i -B ~/Desktop/burp/burp.jar -r ~/Desktop/attack_soap.rb

 

下一步是對WSDL提出請求,并利用Burp攔截該請求。舉例來說:

攔截發(fā)往http://192.168.1.149/WebGoat/services/WSDLScanning?WSDL的請求

點擊 "enumerate wsdl"選項進入如下界面:

現(xiàn)在我們已經(jīng)得到了一份標明所有可用操作的詳細列表!

但這還不是終點。我們需要把它當(dāng)成跳板、繼續(xù)高歌猛進。將一些編寫好的代碼提交進去,以提取出可用的參數(shù)及賦值。這樣我們就可以利用這些值來創(chuàng)建請求。

現(xiàn)在一定要注意,下列代碼無法解析全部WSDL內(nèi)容、也不能"自動"創(chuàng)建正確的請求。事實上它應(yīng)該被作為一種小規(guī)模示例,向大家演示正確代碼的效果并提供SOAP請求的可視化直觀表現(xiàn)。

現(xiàn)在,我們需要重新審視自己剛剛編寫出來的代碼,并適當(dāng)加以補充。下列截圖是代碼庫的前半部分。

 #p#

第 3行:

我們將利用到Nokogiri函數(shù)庫。因此,我們得先進行安裝。大家務(wù)必確保在運行腳本之前執(zhí)行了下列指令:

$ sudo jruby -S gem install nokogiri

第 24至27行:

在第24行,我們創(chuàng)建了parse_wsdl函數(shù)。該函數(shù)中包括wsdl XML。第25行中的實例及空白hash被命名為wsdl_element_hash。第26行創(chuàng)建了一個doc對象,由wsdl負責(zé)解析并且易于尋獲。最后,第27行以<wsdl:message>及</wsdl:message>為標簽搜索符合的XML內(nèi)容。

第 28至29行:

我們對test_m1及test_m2進行了實例化,這樣它們就能在循環(huán)之外仍被調(diào)用(接下來的幾行代碼非常重要)。這種處理方式的最終目的是通過一項SOAP操作返回作為密鑰的hash及參數(shù)的實際賦值。

正如大家看到的,在下圖中,某項操作請求中有一條參數(shù)名為"id"。我們要執(zhí)行能夠獲取實名、登錄賬號等等信息的操作,就先要利用這類操作所調(diào)用的參數(shù)發(fā)出SOAP請求。

從理論層面來說,我們創(chuàng)建的hash應(yīng)該如下所示:

{
'getFirstName => 'id',
'getLoginCount => 'id',
'getCreditCard' => 'id',
'getLastName' =>  'id'
}

第 30至34行:

XML/WSDL文檔中那些包含<wsdl:message>標簽的部分之前已經(jīng)被解析(由第27行指令實現(xiàn))為數(shù)組類結(jié)構(gòu)。該對象隨即被賦予msg的標簽。在第30行中,我們開始循環(huán)訪問msg數(shù)組。第31及32行則是將SOAP操作"請求"(自我們創(chuàng)建該請求時起)與參數(shù)/類型進行匹配組合。第33及34行負責(zé)剔出相匹配的數(shù)據(jù)(也就是那些與31及32行中的內(nèi)容相符的數(shù)據(jù)),當(dāng)然沒有相符內(nèi)容的情況除外。在這種情況下,test_m1及test_m2將被設(shè)置為"nil"(即'空')。

第 36至38行:

提供完整性檢查,如果test_m1與test_m2回饋的內(nèi)容非"空",就意味著我們已經(jīng)成功地將XML內(nèi)容與想要獲取的信息表達式相匹配,此時將SOAP操作及其參數(shù)導(dǎo)入wsdl_element_hash即可。

第 39至 41行:

如下圖所示,我們結(jié)束循環(huán)語句,返回wsdl_hasl_element的hash對象并關(guān)閉parse_wsdl函數(shù)。

$ jruby -S buby -i -B ~/Desktop/burp/burp.jar -r ~/Desktop/attack_soap.rb

第 43至46行:

由form_request所調(diào)用的函數(shù)將實例化,而rhost的賦值(也就是一條完整的URL)將作為輸入信息被接收。第44至46行意在根據(jù)客戶端的具體設(shè)置情況正確調(diào)整我們自己創(chuàng)建的SOAP客戶端。

第 47至48行:

第47行創(chuàng)建一個名為wsdl的對象,這是一條以純XML形式構(gòu)成的WSDL。第48行將該XML對象傳遞至parse_wsdl函數(shù)。

第 49至53行:

在第49行中,我們對每一條由WSDL中獲取的可用soap操作進行循環(huán)訪問。第50行則是創(chuàng)建一套條件性設(shè)置。如果我們的hash,由parse_wsdl函數(shù)所創(chuàng)建,中具備soap_action(itm)操作,則需要生成一條請求。在第51至56行中,我們生成該請求。第52及53行用于提供必要的輸入信息。因此getCreditCard指令變?yōu)?get_gredit_card這種新形式,id也變?yōu)?id。這一點非常重要,因為這是Savon gem 請求所強制要求的形式。

第 54至56行:

我們在此創(chuàng)建了一條動態(tài)請求。每樣操作都隨著各項參數(shù)被傳遞至客戶端請求當(dāng)中。

第 57至61行:

關(guān)閉上述循環(huán)以及form_request參數(shù)。

第 67至70行:

我們建立了一條根據(jù)菜單選項點擊情況觸發(fā)的條件語句。如果"enumerate wsdl"被選中,我們就會轉(zhuǎn)向enum_wsdl函數(shù)。而如果是"form SOAP request"被選中,觸發(fā)的則是form_request函數(shù)。

第 78行:

在此我們添加另一條自定義菜單選項,名為"form SOAP request",而一旦該選項被選中,不僅會觸發(fā)WSDL解析,還將自動創(chuàng)建一條SOAP語法并將其發(fā)送至我們的攔截代理端以備進一步攻擊時使用。#p#

那么當(dāng)我們一切就緒后,效果究竟如何呢?

這里我們點擊form SOAP request選項

此處共計創(chuàng)建了四條SOAP請求(因為我們共有四種可用操作)。

根據(jù)對"getCreditCardRequest" wsdl:message的深入分析,可以看到我們已經(jīng)成功獲取到一些可憐蟲的信用卡號碼。

那么以此為基礎(chǔ),我們能夠?qū)?chuàng)建的SOAP請求進行積極掃描,并通過進一步處理及中繼器的幫助加以調(diào)整。以往那看似無懈可擊的壁壘如今瞬間崩潰殆盡,有了SOAP請求自動解析工具,破解信用卡號碼已如探囊取物。大成功!

原文鏈接:http://resources.infosecinstitute.com/soap-attack-1/

 【51CTO.com獨家譯稿,非經(jīng)授權(quán)謝絕轉(zhuǎn)載!合作媒體轉(zhuǎn)載請注明原文出處及出處!】

責(zé)任編輯:佟健 來源: 51CTO.com
相關(guān)推薦

2019-04-10 11:06:54

前端HTMLCSS

2025-01-22 08:01:53

2009-06-09 14:40:01

Javascript表單驗證

2009-06-11 15:25:39

Java隨機數(shù)

2009-06-12 10:34:40

Java Date

2025-04-24 00:10:00

RAGAI人工智能

2013-07-08 15:45:04

Python

2009-06-12 10:08:05

StaticJava

2013-04-08 15:42:38

Backbone.js入門

2018-11-15 14:52:15

Spark數(shù)據(jù)機器學(xué)習(xí)

2013-09-24 10:07:19

Ruby項目

2009-06-15 13:32:18

Java applet插件

2013-11-14 16:18:05

AndroidAudioAudioTrack

2020-10-10 14:36:10

Python

2018-12-19 09:03:04

物聯(lián)網(wǎng)供應(yīng)鏈物聯(lián)網(wǎng)應(yīng)用

2009-07-14 13:49:28

Swing組件AWT

2010-03-11 11:29:51

喬布斯

2020-10-12 00:41:52

Python變量

2024-05-15 08:12:11

SignalJavaScriptPromises

2020-10-11 23:45:55

Python解釋器
點贊
收藏

51CTO技術(shù)棧公眾號