詳解SOAP協(xié)議下一系列安全漏洞的測(cè)試及利用
譯文在第一部分的文章中,我們討論了如何在一個(gè)WSDL文件中以關(guān)閉操作列表的方式來(lái)生成SOAP請(qǐng)求,以及怎樣將這套流程通過(guò)Ruby及Burp套件自動(dòng)加以執(zhí)行。此外,我們還介紹了WSDL文件內(nèi)容的解析方式。在本文中,我們將要對(duì)SOAP服務(wù)中的一系列安全漏洞進(jìn)行測(cè)試及利用。并不是所有的攻擊行為都針對(duì)SOAP,我們必須對(duì)這一情況具備清醒的認(rèn)識(shí)。
這一行的新手往往有種先入為主的觀念,認(rèn)為威脅網(wǎng)頁(yè)服務(wù)安全的各類(lèi)攻擊總帶有一些神秘色彩并且超難阻止。但實(shí)際情況是,網(wǎng)頁(yè)服務(wù)遭受的許多侵襲都源自與瀏覽器應(yīng)用程序安全缺陷相類(lèi)似的同一種漏洞。
舉例來(lái)說(shuō),大家會(huì)發(fā)現(xiàn)各類(lèi)認(rèn)證標(biāo)準(zhǔn)損壞及會(huì)話管理缺陷都包含在我們下面這份漏洞列表中。看起來(lái)眼熟吧?眼熟就對(duì)了,因?yàn)檫@正是我們?cè)仍虼蠹医榻B過(guò)的OWASP十大漏洞排名,而事實(shí)上這些問(wèn)題對(duì)網(wǎng)頁(yè)應(yīng)用程序及網(wǎng)頁(yè)服務(wù)都將構(gòu)成同等威脅。
我們?cè)诒疚闹写蛩阒v解并利用的漏洞類(lèi)型分別為:
1. SOAP 注入
2. SQL 注入
3. 默認(rèn)內(nèi)容
4. 破損的認(rèn)證及會(huì)話管理
SOAP 注入
雖然網(wǎng)頁(yè)服務(wù)方面的許多安全缺陷都有相似之處或者幾乎同樣為大眾所熟知,而且這些漏洞不僅被編纂成文供人們參考,甚至要將其真正利用起來(lái)也不需要什么高超的技術(shù)。但SOAP注入有所不同,它所指向的弱點(diǎn)不僅難于抵御,對(duì)攻擊者的水平也有相當(dāng)?shù)囊蟆?/p>
那么這種攻擊到底是如何發(fā)生的?服務(wù)器端的XML解析引擎從客戶端接收輸入信息,這里指的客戶端可以是瀏覽器、來(lái)自網(wǎng)頁(yè)應(yīng)用程序的數(shù)據(jù)、一部移動(dòng)設(shè)備或者是其它類(lèi)型的來(lái)源。如果不對(duì)輸入的信息進(jìn)行正確驗(yàn)證,接收的結(jié)果就很可能出現(xiàn)錯(cuò)誤,進(jìn)而為攻擊行為提供了便利。
基于上述情況,我們就從攻擊者的立場(chǎng)出發(fā),在不具備高超技術(shù)或是對(duì)SOAP請(qǐng)求服務(wù)器端處理方式的深入了解的前提下,一步步接近SOAP注入攻擊的真實(shí)流程。這要求我們首先準(zhǔn)備一些極度冗長(zhǎng)的錯(cuò)誤信息(聽(tīng)起來(lái)可能有點(diǎn)像安全配置失誤)。
請(qǐng)遵循下列要求:
請(qǐng)求顯示正常。我們?cè)诖税l(fā)出自己的姓名及密碼,如果請(qǐng)求接下來(lái)也同樣發(fā)送正常,則解析工作同樣會(huì)順利進(jìn)行。在此,我們能否被授予訪問(wèn)權(quán)限取決于初始時(shí)提交何種內(nèi)容的請(qǐng)求。
現(xiàn)在讓我們生成一個(gè)同樣的請(qǐng)求,但這一次省略掉
<lname></lname> |
標(biāo)簽。
根據(jù)下圖顯示的服務(wù)器響應(yīng)結(jié)果可以看出,我們應(yīng)該是已經(jīng)取得了某些突破:
這個(gè)錯(cuò)誤警告實(shí)際上向我們間接交代出了代碼!我們看到的這條故障提示的實(shí)際表意是如果缺少lname變量,那么代碼應(yīng)該利用登錄ID參數(shù)作為替代。現(xiàn)在的事態(tài)很有趣。在這種情況下,我們要做的是刻意省略lname標(biāo)簽以觸發(fā)故障提示("II"),進(jìn)而提取登錄ID標(biāo)簽。
這是我們創(chuàng)建的新請(qǐng)求:
好了,現(xiàn)在出現(xiàn)的提示信息如下:
這意味著我們需要利用已經(jīng)收集到的授權(quán)證書(shū)或信息啟動(dòng)執(zhí)行操作
(提交
<loginid>1</loginid> |
標(biāo)簽)。
此類(lèi)攻擊方式相對(duì)比較簡(jiǎn)單,利用到的是編寫(xiě)在背景中的、包含錯(cuò)誤信息的簡(jiǎn)陋解析引擎。如此一來(lái),我們提交的請(qǐng)求就會(huì)被作為來(lái)自管理員級(jí)別賬戶的操作被加以接收。#p#
SQL注入
在這部分內(nèi)容中,我們將用到在第一部分文章中創(chuàng)建的一些代碼。啟動(dòng)附有Ruby腳本的Burp,該腳本名稱為attack_soap.rb。
讓我們向WSDL文件發(fā)送一條請(qǐng)求,在Burp處實(shí)施攔截,生成請(qǐng)求然后將其進(jìn)行模糊處理及分析。打完收功。
正如第一部分文章中提到的,上述步驟會(huì)自動(dòng)生成一條要求關(guān)閉WSDL文件中操作及參數(shù)的SOAP請(qǐng)求。在attack_soap.rb腳本中,我們已經(jīng)編寫(xiě)了特殊的SOAP請(qǐng)求并傳遞至Burp代理。一旦該請(qǐng)求生成并被正確攔截,我們就能將在攻擊中讓其發(fā)揮作用。
通過(guò)對(duì)侵入活動(dòng)的定位,我們接下來(lái)需要編寫(xiě)打算插入的模糊字符串。
請(qǐng)注意,我們對(duì)101在插入點(diǎn)中進(jìn)行了滲透,因此我們的模糊字符串將取代整數(shù)"101"的位置。
現(xiàn)在要做的是選擇有效荷載。Fuzzdb是模糊字符串的上佳來(lái)源,我們可以從以下網(wǎng)絡(luò)中找到任何能在本教程的Burp有效荷載創(chuàng)建方面派上用場(chǎng)的內(nèi)容:http://code.google.com/p/fuzzdb/。
選擇預(yù)設(shè)的下拉列表;在下拉列表中添加選擇"fuzzing-full"荷載。
開(kāi)始攻擊,如下圖所示:
現(xiàn)在我們需要審查來(lái)自應(yīng)用程序的響應(yīng)信息。請(qǐng)注意,雖然多數(shù)的返回響應(yīng)都是總長(zhǎng)度為634的單字節(jié)內(nèi)容,但字符串"1 or 1=1--"返回的卻是總長(zhǎng)度為1662的單字節(jié)內(nèi)容。
這背后可能有什么玄機(jī),讓我們拭目以待。
應(yīng)用程序已經(jīng)通過(guò)回饋信用卡列表的形式響應(yīng)SQL語(yǔ)句!到此我們利用SOAP服務(wù)中的SQL注入漏洞計(jì)劃獲得了圓滿成功,掌聲鼓勵(lì)。#p#
默認(rèn)內(nèi)容尋獲
分析此類(lèi)漏洞的重點(diǎn)在于提醒各位讀者,正如傳統(tǒng)網(wǎng)頁(yè)應(yīng)用程序的默認(rèn)內(nèi)容暴露會(huì)引發(fā)安全威脅,服務(wù)器托管型網(wǎng)頁(yè)服務(wù)也具有同樣的特性。
作為攻擊者,大家應(yīng)該盡最大努力挖掘那些網(wǎng)頁(yè)開(kāi)發(fā)人員或管理員忘記刪除的任何隱藏或看似無(wú)用的內(nèi)容。一般來(lái)說(shuō)我們總能發(fā)現(xiàn)些沒(méi)有經(jīng)過(guò)正確測(cè)試或是包含關(guān)鍵性漏洞的代碼。此外,這類(lèi)文件還可能以某種文本文檔或Excel表格形式存儲(chǔ)起來(lái)的驗(yàn)證信息或其它敏感資源。
通常情況下,我們"至少"應(yīng)該運(yùn)行下列Google查詢內(nèi)容(這些內(nèi)容并不全面,大家還需要自己加以補(bǔ)充):
上述查詢所返回的全部文件都與我們提供的站點(diǎn)名稱相匹配。在大家使用SOAP時(shí),強(qiáng)烈建議各位將添加"filetype:wsdl"作為尋獲站點(diǎn)中額外wsdl文件的首選方案。
到這一步還不算完。SVNDigger會(huì)列出一份龐大的目錄,內(nèi)容涵蓋各類(lèi)可以用來(lái)尋獲默認(rèn)內(nèi)容的目錄及文件名稱。大家可以在http://www.mavitunasecurity.com/blog/svn-digger-better-lists-for-forced-browsing/處下載這份關(guān)鍵詞檢索表,不過(guò)我們通過(guò)intruder加載模糊列表的形式已經(jīng)達(dá)到了與使用SVNDigger檢索表相同的目的。
大家同樣可以選擇使用OWASP推薦的"DirBuster"工具,并以此種方式加載檢索表。
需要重申的是,暴露在外的默認(rèn)內(nèi)容可能會(huì)導(dǎo)致由敏感性數(shù)據(jù)外泄引發(fā)的各類(lèi)嚴(yán)重危害。大家在實(shí)踐這類(lèi)攻擊方式時(shí)務(wù)必謹(jǐn)慎再謹(jǐn)慎,否則可能會(huì)帶來(lái)災(zāi)難性的后果。
損壞的驗(yàn)證及會(huì)話管理缺陷
這種類(lèi)型的漏洞對(duì)于網(wǎng)頁(yè)服務(wù)的影響與對(duì)傳統(tǒng)網(wǎng)頁(yè)應(yīng)用程序的影響是相同的。事實(shí)上,隨著移動(dòng)設(shè)備的迅猛崛起,網(wǎng)頁(yè)服務(wù)也開(kāi)始對(duì)其提供支持。而且我們身邊遭遇此類(lèi)漏洞威脅的事例也在不斷增加。#p#
每條請(qǐng)求中用戶名及密碼的提交
以SOAP請(qǐng)求為例,該請(qǐng)求需要得到上級(jí)WSDL的基本授權(quán)。這種存在于應(yīng)用程序及用戶瀏覽器之間的授權(quán)標(biāo)準(zhǔn)具備如下交互過(guò)程:
1. 用戶提交驗(yàn)證信息
2. 應(yīng)用程序驗(yàn)證該信息,并發(fā)送一個(gè)cookie
3. 用戶瀏覽器存儲(chǔ)來(lái)自應(yīng)用程序的這個(gè)cookie值
4. 根據(jù)來(lái)自用戶瀏覽器的后續(xù)請(qǐng)求,該cookie會(huì)被再次發(fā)往應(yīng)用程序端
有了這種基本的流程概念,即使那些cookie是竊取來(lái)的,在其過(guò)期之前應(yīng)該還是可以奏效一段時(shí)間。但如果想要獲取更多信息以查看或修改密碼,攻擊者只能憑借自己的運(yùn)氣。
然而當(dāng)下太多的移動(dòng)應(yīng)用程序利用基本信息驗(yàn)證與網(wǎng)頁(yè)服務(wù)進(jìn)行交互,因此我們常常會(huì)發(fā)現(xiàn)有些移動(dòng)應(yīng)用會(huì)在每個(gè)發(fā)往網(wǎng)頁(yè)服務(wù)的請(qǐng)求中都夾帶驗(yàn)證信息!
如果用戶的手機(jī)處于開(kāi)機(jī)狀態(tài)并連入允許公開(kāi)訪問(wèn)的Wi-Fi網(wǎng)絡(luò),而網(wǎng)頁(yè)服務(wù)使用的又不是HTTPS協(xié)議,這就意味著整個(gè)傳輸過(guò)程利用的負(fù)載媒介相當(dāng)于純文本。讓我們探究一下破解基本驗(yàn)證信息到底有多容易。
將基本驗(yàn)證信息字符串發(fā)送至Burp解碼器
正如大家所見(jiàn),用戶名為guest,而密碼也為guest。在這里我再次強(qiáng)調(diào),移動(dòng)應(yīng)用程序中時(shí)刻充斥著這類(lèi)簡(jiǎn)單漏洞。
缺乏賬號(hào)鎖定機(jī)制
輸入一定次數(shù)的錯(cuò)誤口令后,賬號(hào)仍未轉(zhuǎn)為鎖定狀態(tài),這是當(dāng)前網(wǎng)頁(yè)服務(wù)中另一個(gè)很常見(jiàn)的缺陷。也就是說(shuō)攻擊者完全可以通過(guò)暴力破解的方式獲得用戶名與密碼的組合。此種不必要的失誤很有可能給服務(wù)賬號(hào)帶來(lái)極大的安全威脅,值得我們認(rèn)真對(duì)待。
密碼復(fù)雜性過(guò)低
當(dāng)大家在將上述安全隱患(例如缺乏賬號(hào)鎖定機(jī)制)納入解決日程時(shí),也別忘了同時(shí)提高密碼復(fù)雜性。一旦出于好記的目的而將密碼設(shè)置得過(guò)分簡(jiǎn)單,這就構(gòu)成了新的安全缺陷,未經(jīng)授權(quán)的惡意攻擊者也很快會(huì)趁虛而入。
總結(jié)
正如大家所看到的,已經(jīng)存在且盡人皆知的網(wǎng)頁(yè)應(yīng)用程序安全漏洞同樣肆虐于網(wǎng)頁(yè)服務(wù)領(lǐng)域。導(dǎo)致攻擊或滲透出現(xiàn)的前提在細(xì)節(jié)上可能各有不同,但本質(zhì)在根源上是相通的,即安全設(shè)計(jì)上的缺陷加之實(shí)際編碼中的疏漏。
希望本文能為用于識(shí)別及應(yīng)對(duì)網(wǎng)頁(yè)服務(wù)、尤其是SOAP網(wǎng)頁(yè)服務(wù)領(lǐng)域安全弱點(diǎn)的各類(lèi)技術(shù)提供一些啟示。
原文鏈接:http://resources.infosecinstitute.com/soap-attack-2/