新聞中心
寫在前面的話

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了水城免費(fèi)建站歡迎大家使用!
密碼學(xué)具有諸多優(yōu)點(diǎn),信息的保密性同樣離不開密碼學(xué),但是從歷史經(jīng)驗(yàn)來看,在保護(hù)應(yīng)用和數(shù)據(jù)安全方面我們絕對不能過分依賴于密碼學(xué)。在這篇文章中,安全教育培訓(xùn)專家SunilYadav將會討論一個案例,并介紹如何通過一個加密的Payload來發(fā)現(xiàn)并利用SQL注入漏洞。
請注意:我們在此不打算討論密碼學(xué)方面的問題(例如如何破解加密算法),我們討論的是應(yīng)用程序的安全缺陷,這方面問題是很多開發(fā)者最容易忽略的問題,而本文所描述的這個漏洞將允許我們通過一個加密的Payload來識別并利用程序中的SQL注入漏洞。
實(shí)際上,這個漏洞是我們在一次真實(shí)的滲透測試過程中所發(fā)現(xiàn)的。為了給大家進(jìn)行演示,我們在實(shí)驗(yàn)環(huán)境中對該漏洞進(jìn)行了復(fù)現(xiàn),接下來我們會討論整個測試過程的具體細(xì)節(jié)。
漏洞發(fā)現(xiàn)
近期,我們對一個電子商務(wù)應(yīng)用進(jìn)行了滲透測試。我們發(fā)現(xiàn),其中絕大多數(shù)的請求參數(shù)值都經(jīng)過了加密處理。當(dāng)請求參數(shù)值被加密之后,我們是很難對應(yīng)用進(jìn)行滲透測試/模糊測試的,除非我們能夠破解它所使用的加密算法。如果在時間有限的黑盒測試過程中遇到這樣的問題,那絕對是一個噩耗。
下面這張圖片顯示的就是這個測試項目中的訂單詳情頁面,其中的訂單ID(orderid)參數(shù)就是以加密形式發(fā)送的:
地址欄中的參數(shù)值“BDKfx3xNKsc=”是經(jīng)過加密的,雖然加密后的ID參數(shù)值為base64編碼格式,但這里不僅僅只采用了base64編碼。除此之外我們還發(fā)現(xiàn),如果我們登出了應(yīng)用,并使用相同的用戶賬號重新登錄,然后再次訪問相同的頁面。此時,這個經(jīng)過加密的參數(shù)值就變成了“nPBri1km2ic=”,具體如下圖所示:
由此可以看出,加密過程要么使用了一個隨機(jī)密鑰,要么就是加密密鑰中有一部分?jǐn)?shù)據(jù)是由會話ID構(gòu)成的。從表面上看,這個應(yīng)用是非常安全的,沒錯吧?但是我們都知道,這世界上沒有絕對安全的程序,所以我們?nèi)匀灰朕k法找出其中有可能存在的一些加密缺陷。
首先,我們嘗試在多個地方注入單引號(’)來測試系統(tǒng)是否能夠?qū)τ脩舻妮斎脒M(jìn)行有效驗(yàn)證。但是,由于這些輸入必須以加密格式提供給系統(tǒng),所以我們的請求參數(shù)被系統(tǒng)拒絕了。
接下來,我們注意到了該應(yīng)用的購物車分享功能。這個功能允許用戶將自己購物車?yán)锏纳唐贩窒斫o好友,當(dāng)用戶保存好購物車?yán)锏纳唐凡Ⅻc(diǎn)擊分享之后,系統(tǒng)會生成一個帶有隨機(jī)令牌的鏈接。通過訪問這個鏈接(URL),用戶就可以直接查看好友的購物車了。而且在保存購物車商品之前,用戶還需要給購物車命名。
由于這是一個使用頻率非常低的文本輸入域,所以我們的模糊測試打算從這里入手,并嘗試找出SQL注入漏洞或XSS漏洞,但這一次仍然一無所獲。不過,我們意識到了一件事情,那就是我們所發(fā)現(xiàn)的這個分享地址和購物車命名框也許會成為我們的突破口。在進(jìn)一步分析之后,我們發(fā)現(xiàn)購入車分享地址中所使用的令牌就是購物車名稱加密后所得到的密文。
雖然這個購物車分享功能并不會受到任何網(wǎng)絡(luò)攻擊的影響,但是我們卻能夠利用這個功能并根據(jù)輸入的信息(明文,即購物車名稱)來生成加密Payload(密文)。現(xiàn)在,我們就可以利用這個功能來生成一個攻擊Payload,并利用它來檢查應(yīng)用程序中可能存在的漏洞,例如SQL注入漏洞以及身份認(rèn)證繞過等等。為了檢測SQL注入漏洞,我們需要生成單引號(’)所對應(yīng)的加密值,具體如下圖所示:
這樣一來,對于那些只接受加密值作為輸入數(shù)據(jù)的文本域,我們就可以使用這種加密Payload來進(jìn)行模糊測試了。雖然尋找注入點(diǎn)的過程花費(fèi)了我們不少的時間,但最終我們還是找到了一個SQL注入漏洞。具體如下圖所示,我們在測試訂單物品(orderitem)頁面的IP參數(shù)時,系統(tǒng)返回了一個SQL錯誤信息:
從錯誤信息中可以看出,這個電子商務(wù)應(yīng)用生成了動態(tài)查詢語句,這里就有可能存在一個SQL注入漏洞,而我們可以利用這個漏洞從數(shù)據(jù)庫中提取出有價值的信息。在這里,我們準(zhǔn)備使用SQL UNION查詢語句來從數(shù)據(jù)庫中提取數(shù)據(jù),而UNION操作符可以合并兩條或多條select子句。
接下來,我們需要確定數(shù)據(jù)庫表中的列數(shù)。在進(jìn)行了一系列測試之后,我們從返回信息中得知了列數(shù)(30)。現(xiàn)在,我們就可以從數(shù)據(jù)庫中提取有效信息了。我們創(chuàng)建了一個加密Payload,具體如下所示:
通過上面這條SQL語句所生成的Payload(ID參數(shù)),我們得到了系統(tǒng)所使用的數(shù)據(jù)庫版本信息。
最后,我們還利用這個漏洞攻下了數(shù)據(jù)庫系統(tǒng),并拿到了后臺服務(wù)器的Shell。
總結(jié)
這個電子商務(wù)應(yīng)用程序使用了加密參數(shù)來實(shí)現(xiàn)安全保護(hù),這也是通過信息隱匿來實(shí)現(xiàn)安全性的一個例子,但是這種做法并不能保證軟件的安全。只有在密鑰得到有效保護(hù)的情況下,采用健壯加密算法進(jìn)行加密的數(shù)據(jù)才能夠真正地保證安全。實(shí)際上,密碼學(xué)以及信息加密手段已經(jīng)成為了我們防止隱私消息被竊聽或篡改的一種常用方法,但是由于系統(tǒng)在實(shí)現(xiàn)加密過程中的錯誤以及開發(fā)人員對加密手段的使用不當(dāng),往往會導(dǎo)致更加嚴(yán)重的安全漏洞出現(xiàn)。
本文標(biāo)題:如何使用加密的Payload來識別并利用SQL注入漏洞
新聞來源:http://m.fisionsoft.com.cn/article/djhjhep.html


咨詢
建站咨詢
