Web網(wǎng)絡(luò)安全分析時(shí)間注入攻擊原理
SQL注入進(jìn)階
1.時(shí)間注入攻擊
時(shí)間注入攻擊的測(cè)試地址:http://127.0.0.1/sqli/time.php?id=1.
訪問該網(wǎng)站時(shí),頁(yè)面返回yes,在網(wǎng)址的后面加上一個(gè)單引號(hào),再次訪問,頁(yè)面返回no。這個(gè)結(jié)果與Boolean注入非常相似,這里介紹另一種注入方法——時(shí)間盲注。它與Boolean注入的不同之處在于,時(shí)間注入是利用sleep()或benchmark()等函數(shù)讓MySQL的執(zhí)行時(shí)間變長(zhǎng)。時(shí)間盲注多與IF(expr1,expr2,expr3)結(jié)合使用,次if語句含義是:如果expr1是TRUE,則IF()的返回值為expr2;否則返回值則為expr3.所以判斷數(shù)據(jù)庫(kù)庫(kù)名長(zhǎng)度的語句應(yīng)為:
' and if(length(database())>1,sleep(5),1)--+
上面這行語句的意思是,如果數(shù)據(jù)庫(kù)庫(kù)名長(zhǎng)度大于1,則MySQL查詢休眠5秒,否則查詢1。
而查詢1的結(jié)果,大約只有幾十毫秒,根據(jù)Burp Suite中頁(yè)面的響應(yīng)時(shí)間,可以判斷條件是否正確,結(jié)果如圖34所示。
圖34 利用時(shí)間盲注執(zhí)行sleep()
可以看出,頁(yè)面的響應(yīng)時(shí)間是5043毫秒,表明頁(yè)面成功執(zhí)行了sleep(5),所以長(zhǎng)度是大于1的,我們嘗試將判斷數(shù)據(jù)庫(kù)庫(kù)名語句中的長(zhǎng)度改為10,結(jié)果如圖35所示。
圖35 利用時(shí)間盲注判斷數(shù)據(jù)庫(kù)庫(kù)名長(zhǎng)度
可以看出,執(zhí)行的時(shí)間是16毫秒,表明該頁(yè)面沒有執(zhí)行sleep(5),而是執(zhí)行了select 1,所以數(shù)據(jù)庫(kù)的庫(kù)名長(zhǎng)度大于10是錯(cuò)誤的。通過多次測(cè)試,皆可以得到數(shù)據(jù)庫(kù)庫(kù)名的長(zhǎng)度。得出數(shù)據(jù)庫(kù)庫(kù)名長(zhǎng)度后,我們開始查詢數(shù)據(jù)庫(kù)庫(kù)名的第一位字母。查詢語句和Boolean盲注的類似,使用substr函數(shù),這時(shí)的語句應(yīng)修改為:
' and if(substr(database(),1,1)='t',sleep(5),1)--+
結(jié)果如圖36所示。
圖36 利用時(shí)間盲注獲取數(shù)據(jù)庫(kù)名
可以看出,程序延遲了5秒才返回,說明數(shù)據(jù)庫(kù)庫(kù)名的第一位字母是t,以此類推即可得出完整的數(shù)據(jù)庫(kù)的庫(kù)名、表名、字段名和具體數(shù)據(jù)。
我們也可以使用Burp進(jìn)行爆破,結(jié)果如圖37所示。
圖37 利用Burp爆破數(shù)據(jù)庫(kù)庫(kù)名
2.時(shí)間注入代碼分析
在時(shí)間注入頁(yè)面中,程序獲取GET參數(shù)ID,通過preg_match判斷參數(shù)ID中是否存在Union等危險(xiǎn)字符,然后將參數(shù)ID拼接到SQL語句中。從數(shù)據(jù)庫(kù)中查詢SQL語句,如果有結(jié)果,則返回yes,否則返回no。當(dāng)訪問該頁(yè)面時(shí),代碼根據(jù)數(shù)據(jù)庫(kù)查詢結(jié)果返回yes或no,而不是返回?cái)?shù)據(jù)庫(kù)中的任何數(shù)據(jù),所以在頁(yè)面上智慧顯示yes或no,和Boolean注入不同的是,此處沒有過濾sleep等字符,代碼如下所示。
<?php $con=mysqli_connect("localhost","root","root","test"); // 檢測(cè)連接 if (mysqli_connect_errno()) { echo "連接失敗: " . mysqli_connect_error(); } $id = @$_GET['id']; if(preg_match("/union/i",$id)) { exit("<htm><body>no</body></html>"); } $sql = "select * from users where `id`='".$id."'"; $result = mysqli_query($con,$sql); if(!$result) { exit("no"); } $row = mysqli_fetch_array($result); if ($row) { exit("<htm><body>yes</body></html>"); } else { exit("<htm><body>no</body></html>"); } ?>
此處仍然可以用Boolean盲注或其他注入方法,下面用時(shí)間注入演示。當(dāng)訪問id=1' and if(ord(substring(user(),1,1))=114,sleep(3),1)--+時(shí),執(zhí)行的SQL語句為:
select * from users where `id`='1' and if(ord(substring(user(),1,1))=114,sleep(3),1)--+
由于user()為root,root第一個(gè)字符‘r'的ASCII值是114,所以SQL語句中if條件成立,執(zhí)行sleep(3),頁(yè)面會(huì)延遲3秒,通過這種延遲即可判斷SQL語句的執(zhí)行結(jié)果。
以上就是Web網(wǎng)絡(luò)安全分析時(shí)間注入攻擊原理的詳細(xì)內(nèi)容,更多關(guān)于Web網(wǎng)絡(luò)安全時(shí)間注入攻擊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
防止利用系統(tǒng)漏洞輕輕松松繞過你的驗(yàn)證碼的方法
防止利用系統(tǒng)漏洞輕輕松松繞過你的驗(yàn)證碼的方法...2007-03-03網(wǎng)站存在啊D注入工具的SQL注入點(diǎn)的修復(fù)方法
我的網(wǎng)站還有我給老師做的單片機(jī)網(wǎng)站相繼被黑,從他那得知,他用的是“啊D注入工具”,先找我的網(wǎng)站是否存在可注入點(diǎn),如果有,進(jìn)行注入,能夠破解得到后臺(tái)密碼2012-12-12無線網(wǎng)攻擊工具進(jìn)攻方法及防范技巧小結(jié)
對(duì)無線網(wǎng)安全攻防有興趣的人應(yīng)該都需要一套工具,英特網(wǎng)上有很多免費(fèi)的工具。本文不求全面,但求能提供一些指導(dǎo)和建議。2008-02-02Web網(wǎng)絡(luò)安全漏洞分析XSS常用語句及編碼繞過詳解
這篇文章主要為大家介紹了Web網(wǎng)絡(luò)安全漏洞分析XSS常用語句及編碼繞過詳解,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2021-11-11網(wǎng)絡(luò)安全流量分析工具蟻劍詳細(xì)介紹
蟻劍(AntSword)是一款開源的跨平臺(tái)WebShell管理工具,它主要面向于合法授權(quán)的滲透測(cè)試安全人員以及進(jìn)行常規(guī)操作的網(wǎng)站管理員,蟻劍推崇模塊化的開發(fā)思想,遵循開源,就要開得漂亮的原則,致力于為不同層次的人群提供最簡(jiǎn)單易懂、方便直接的代碼展示及其修改說明2022-09-09一句話木馬的原理及利用分析(asp,aspx,php,jsp)
一句話木馬的原理及利用分析,大家在發(fā)現(xiàn)可疑情況下,需要注意檢查的地方。2011-02-02DDoS攻擊與CC攻擊網(wǎng)絡(luò)安全的兩大挑戰(zhàn)如何應(yīng)對(duì)防御
這篇文章主要為大家介紹了面對(duì)DDoS攻擊與CC攻擊網(wǎng)絡(luò)安全的兩大挑戰(zhàn)應(yīng)該如何應(yīng)對(duì),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2023-10-10網(wǎng)絡(luò)安全中流量加密實(shí)現(xiàn)工具冰蝎4.0介紹
冰蝎是一個(gè)動(dòng)態(tài)二進(jìn)制加密網(wǎng)站管理客戶端。在實(shí)戰(zhàn)中,第一代webshell管理工具"菜刀"的流量特征非常明顯,很容易就被安全設(shè)備檢測(cè)到?;诹髁考用艿膚ebshell變得越來越多,"冰蝎"在此應(yīng)運(yùn)而生2022-09-09