能否理解并利用SQL首注是區(qū)分一般攻擊者和專業(yè)攻擊者的一個(gè)標(biāo)準(zhǔn)。面對(duì)嚴(yán)密禁用詳細(xì)錯(cuò)誤消息的防御,大多數(shù)新手會(huì)轉(zhuǎn)向下一目標(biāo)。但攻破SQL盲注漏洞并非絕無可能,我們可借助很多技術(shù)。它們?cè)试S攻擊者利用時(shí)間、響應(yīng)和非主流通道(比如DNS)來提取數(shù)據(jù)。以SQL查詢方式提問一個(gè)返回TRUE或FALSE的簡單問題并重復(fù)進(jìn)行上千次,數(shù)據(jù)庫王國的大門便通常不容易發(fā)現(xiàn)SQL盲注漏洞的原因是它們隱藏在暗處。一旦發(fā)現(xiàn)漏洞后,我們就會(huì)有們能支持多種多樣的數(shù)據(jù)庫。大量的漏洞可用。要明確什么時(shí)候應(yīng)選擇基于響應(yīng)而非時(shí)間的利用和什么時(shí)候使用重量級(jí)的非主流通道工具,這些細(xì)節(jié)可節(jié)省不少時(shí)間。考慮清楚大多數(shù)SQL盲注漏洞的自動(dòng)化程度后,不管是新手還是專家,都會(huì)有大量的工具可用。它們中有些是圖形化界面,有些是命令行,它有了SQL注入和SQL盲注的基礎(chǔ)知識(shí)之后,現(xiàn)在轉(zhuǎn)向進(jìn)一步利用漏洞:識(shí)別并利用一個(gè)不錯(cuò)的注入點(diǎn)之后,如何快速發(fā)現(xiàn)注入并修復(fù)漏洞。
快速解決防SQL注入方案
1.尋找并確認(rèn)SQL盲注
.無效數(shù)據(jù)將返回通用錯(cuò)誤頁面而非詳細(xì)錯(cuò)誤,這時(shí)可通過包含副作用(比如時(shí)間延遲)來確認(rèn)SQL注入,還可以拆分與平衡參數(shù)。如果數(shù)字字段為5,就提交3+2或6-1;如果字符串參數(shù)中包含“MadBod”,就提交'Mad'l'Bod'。現(xiàn)該目標(biāo)。.請(qǐng)思考漏洞的屬性:能否強(qiáng)制產(chǎn)生錯(cuò)誤以及能否控制無錯(cuò)誤頁面的內(nèi)容?·可通過在SQL中提問某一位是1還是0來推斷單個(gè)信息位,有很多推斷技術(shù)可用于實(shí)現(xiàn)該目標(biāo)2.使用基于時(shí)間的技術(shù)SLEEPO類型函數(shù)或運(yùn)行時(shí)間很長的查詢來引入延遲。.可使用逐位方法或二分搜索方法提取數(shù)據(jù)并利用延遲裝示數(shù)據(jù)的值,可使用明確的,通常在SQLServer和Oracle上采用以時(shí)間作為推斷的方法,不過這在MySQL上不大可靠,該機(jī)制很可能會(huì)失效。.使用時(shí)間作為推斷方法在本質(zhì)上是不可靠的,但卻可以通過增加超時(shí)或借助其他技巧來進(jìn)行改進(jìn)。
3.使用基于響應(yīng)的技術(shù)
·可使用逐位方法或二分搜索方法提取數(shù)據(jù)并利用響應(yīng)內(nèi)容表示數(shù)據(jù)的值。一般來說,現(xiàn)有查詢中都包含一條插入子句,它能夠根據(jù)推斷的值來保持查詢不變或返回空結(jié)果,基于響應(yīng)的技術(shù)可成功用于多種多樣的數(shù)據(jù)庫。某些情況下,一個(gè)請(qǐng)求可返回多個(gè)信息位。4.使用非主流通道,帶外通信的優(yōu)點(diǎn)是:可以以塊而非位的方式來提取數(shù)據(jù),并且在速度上有明顯改進(jìn)。最常用的通道是DNS.攻擊者說服數(shù)據(jù)庫執(zhí)行一次名稱查找,該查找包含一個(gè)由攻擊者控制的域名并在域名前添加了一些要提取的數(shù)據(jù)。當(dāng)請(qǐng)求到達(dá)DNS名稱服務(wù)器后,攻擊者就可以查看數(shù)據(jù)。其他通道還包括HTTP和SMTP。不同數(shù)據(jù)庫支持不同的非主流通道,支持非主流通道的工具的數(shù)量明顯要比支持推斷技術(shù)的少。
5.自動(dòng)利用SQL盲注
Absinthe的威力在于支持?jǐn)?shù)據(jù)庫映射,并且能利用基于錯(cuò)誤和響應(yīng)的推斷利用來對(duì)很多流行的數(shù)據(jù)庫(不管是商業(yè)的還是開源的)進(jìn)行檢索。方便的GUI為攻擊者帶來了很好的體驗(yàn),但缺少特征簽名支持限制了其效能。BSQLHacker是另一款圖形化工具,它使用基于時(shí)間及響應(yīng)的推斷技術(shù)和標(biāo)準(zhǔn)錯(cuò)誤來從所提問的數(shù)據(jù)庫中提取數(shù)據(jù)。雖然它仍處于測(cè)試階段,不是很穩(wěn)定,但該工具前景很好且提供了很多欺詐機(jī)會(huì)。SQLBrute是一款命令行工具,它針對(duì)希望使用基于時(shí)間或響應(yīng)的推斷來利用某個(gè)固定漏洞的用戶。Sqlmap將漏洞的發(fā)現(xiàn)和利用結(jié)合在一款強(qiáng)大的工具中,它既支持基于時(shí)間的推斷方法,也支持基于響應(yīng)的推斷方法,另外還支持ICMP通道方法。該工具的成長速度很快,開發(fā)也很活躍。如果想要對(duì)網(wǎng)站進(jìn)行全面的SQL注入防護(hù)和檢測(cè)的話可以像國內(nèi)的網(wǎng)站安全公司尋求服務(wù),國內(nèi)像SINESAFE,鷹盾安全,綠盟,啟明星辰,等等。
Sqlninja有很多特性,它支持使用基于DNS的非主流通道來執(zhí)行遠(yuǎn)程命令。首先上傳一個(gè)自定義的二進(jìn)制封裝器(wrApper),然后通過上傳的封裝器來執(zhí)行命令。封裝器捕獲所有來自命令的輸出并初始化一個(gè)DNS請(qǐng)求序列,請(qǐng)求中包含了編碼后的輸出。