成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

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

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

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

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

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

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

安裝 JRuby

$ sudo apt-get install jruby

安裝 Savon 及 Buby gems

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

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

 #p#

一行一行逐步講解

第1至2行:

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

第 5行:

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

第 8至9行:

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

第 11至 12行:

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

第 13至 18行:

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

第 19至21行:

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

第 23 至24行:

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

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

在第24行中我們將一對(duì)對(duì)象拆分為兩個(gè)相互獨(dú)立的個(gè)體,分別名為menu_item_caption以及message_info。

第 26 至 31行:

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

第33行:

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

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

" 在Burp中點(diǎn)擊enumerate wsdl / 菜單選項(xiàng)。

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

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

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

腳本運(yùn)行實(shí)例:

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

 

下一步是對(duì)WSDL提出請(qǐng)求,并利用Burp攔截該請(qǐng)求。舉例來(lái)說(shuō):

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

點(diǎn)擊 "enumerate wsdl"選項(xiàng)進(jìn)入如下界面:

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

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

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

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

 #p#

第 3行:

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

$ sudo jruby -S gem install nokogiri

第 24至27行:

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

第 28至29行:

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

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

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

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

第 30至34行:

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

第 36至38行:

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

第 39至 41行:

如下圖所示,我們結(jié)束循環(huán)語(yǔ)句,返回wsdl_hasl_element的hash對(duì)象并關(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ù)將實(shí)例化,而rhost的賦值(也就是一條完整的URL)將作為輸入信息被接收。第44至46行意在根據(jù)客戶端的具體設(shè)置情況正確調(diào)整我們自己創(chuàng)建的SOAP客戶端。

第 47至48行:

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

第 49至53行:

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

第 54至56行:

我們?cè)诖藙?chuàng)建了一條動(dòng)態(tài)請(qǐng)求。每樣操作都隨著各項(xiàng)參數(shù)被傳遞至客戶端請(qǐng)求當(dāng)中。

第 57至61行:

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

第 67至70行:

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

第 78行:

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

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

這里我們點(diǎn)擊form SOAP request選項(xiàng)

此處共計(jì)創(chuàng)建了四條SOAP請(qǐng)求(因?yàn)槲覀児灿兴姆N可用操作)。

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

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

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

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

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

2019-04-10 11:06:54

前端HTMLCSS

2009-06-09 14:40:01

Javascript表單驗(yàn)證

2025-01-22 08:01:53

2009-06-12 10:34:40

Java Date

2009-06-11 15:25:39

Java隨機(jī)數(shù)

2013-07-08 15:45:04

Python

2025-04-24 00:10:00

RAGAI人工智能

2013-04-08 15:42:38

Backbone.js入門

2009-06-12 10:08:05

StaticJava

2013-09-24 10:07:19

Ruby項(xiàng)目

2009-06-15 13:32:18

Java applet插件

2018-11-15 14:52:15

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

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)用

2010-03-11 11:29:51

喬布斯

2009-07-14 13:49:28

Swing組件AWT

2020-10-12 00:41:52

Python變量

2020-10-11 23:45:55

Python解釋器

2020-10-13 09:54:38

內(nèi)存技術(shù)數(shù)據(jù)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 欧美日韩一区二区三区视频 | 欧美www在线 | 91精品中文字幕一区二区三区 | 一区二区三区四区视频 | 色约约视频 | 91av在线影院 | 国产精品成人国产乱一区 | 日本亚洲欧美 | 国产精品久久久亚洲 | 欧美狠狠操 | 九色porny自拍视频 | 神马久久av | 成人国产精品久久久 | www.啪啪.com| 久久成| 91精品久久久久久久久久 | 日本一二区视频 | 国产精品av久久久久久久久久 | 亚洲国产精品久久久久婷婷老年 | www.9191| 在线观看成人 | 成人福利影院 | 午夜视频精品 | 久久久久久成人 | 黄色在线网站 | 成人精品一区二区 | 日韩精品一区二区不卡 | 韩日av片| 久久99精品久久久久久青青日本 | 国产精品区二区三区日本 | 成人中文字幕在线 | 看一级黄色毛片 | 国产电影一区二区 | 精品久久久久久久久久久久久久久久久 | 亚洲国产成人在线视频 | 男人天堂999 | 欧美精品一区二区三区四区 | 美女在线视频一区二区三区 | 亚洲精品中文字幕中文字幕 | 婷婷丁香在线视频 | 一区二区免费视频 |