Web網(wǎng)絡安全分析時間注入攻擊原理
SQL注入進階
1.時間注入攻擊
時間注入攻擊的測試地址:http://127.0.0.1/sqli/time.php?id=1.
訪問該網(wǎng)站時,頁面返回yes,在網(wǎng)址的后面加上一個單引號,再次訪問,頁面返回no。這個結果與Boolean注入非常相似,這里介紹另一種注入方法——時間盲注。它與Boolean注入的不同之處在于,時間注入是利用sleep()或benchmark()等函數(shù)讓MySQL的執(zhí)行時間變長。時間盲注多與IF(expr1,expr2,expr3)結合使用,次if語句含義是:如果expr1是TRUE,則IF()的返回值為expr2;否則返回值則為expr3.所以判斷數(shù)據(jù)庫庫名長度的語句應為:
' and if(length(database())>1,sleep(5),1)--+
上面這行語句的意思是,如果數(shù)據(jù)庫庫名長度大于1,則MySQL查詢休眠5秒,否則查詢1。
而查詢1的結果,大約只有幾十毫秒,根據(jù)Burp Suite中頁面的響應時間,可以判斷條件是否正確,結果如圖34所示。
圖34 利用時間盲注執(zhí)行sleep()
可以看出,頁面的響應時間是5043毫秒,表明頁面成功執(zhí)行了sleep(5),所以長度是大于1的,我們嘗試將判斷數(shù)據(jù)庫庫名語句中的長度改為10,結果如圖35所示。
圖35 利用時間盲注判斷數(shù)據(jù)庫庫名長度
可以看出,執(zhí)行的時間是16毫秒,表明該頁面沒有執(zhí)行sleep(5),而是執(zhí)行了select 1,所以數(shù)據(jù)庫的庫名長度大于10是錯誤的。通過多次測試,皆可以得到數(shù)據(jù)庫庫名的長度。得出數(shù)據(jù)庫庫名長度后,我們開始查詢數(shù)據(jù)庫庫名的第一位字母。查詢語句和Boolean盲注的類似,使用substr函數(shù),這時的語句應修改為:
' and if(substr(database(),1,1)='t',sleep(5),1)--+
結果如圖36所示。
圖36 利用時間盲注獲取數(shù)據(jù)庫名
可以看出,程序延遲了5秒才返回,說明數(shù)據(jù)庫庫名的第一位字母是t,以此類推即可得出完整的數(shù)據(jù)庫的庫名、表名、字段名和具體數(shù)據(jù)。
我們也可以使用Burp進行爆破,結果如圖37所示。
圖37 利用Burp爆破數(shù)據(jù)庫庫名
2.時間注入代碼分析
在時間注入頁面中,程序獲取GET參數(shù)ID,通過preg_match判斷參數(shù)ID中是否存在Union等危險字符,然后將參數(shù)ID拼接到SQL語句中。從數(shù)據(jù)庫中查詢SQL語句,如果有結果,則返回yes,否則返回no。當訪問該頁面時,代碼根據(jù)數(shù)據(jù)庫查詢結果返回yes或no,而不是返回數(shù)據(jù)庫中的任何數(shù)據(jù),所以在頁面上智慧顯示yes或no,和Boolean注入不同的是,此處沒有過濾sleep等字符,代碼如下所示。
<?php $con=mysqli_connect("localhost","root","root","test"); // 檢測連接 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盲注或其他注入方法,下面用時間注入演示。當訪問id=1' and if(ord(substring(user(),1,1))=114,sleep(3),1)--+時,執(zhí)行的SQL語句為:
select * from users where `id`='1' and if(ord(substring(user(),1,1))=114,sleep(3),1)--+
由于user()為root,root第一個字符‘r'的ASCII值是114,所以SQL語句中if條件成立,執(zhí)行sleep(3),頁面會延遲3秒,通過這種延遲即可判斷SQL語句的執(zhí)行結果。
以上就是Web網(wǎng)絡安全分析時間注入攻擊原理的詳細內(nèi)容,更多關于Web網(wǎng)絡安全時間注入攻擊的資料請關注腳本之家其它相關文章!
相關文章
Web網(wǎng)絡安全漏洞分析XSS常用語句及編碼繞過詳解
這篇文章主要為大家介紹了Web網(wǎng)絡安全漏洞分析XSS常用語句及編碼繞過詳解,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步早日升職加薪2021-11-11一句話木馬的原理及利用分析(asp,aspx,php,jsp)
一句話木馬的原理及利用分析,大家在發(fā)現(xiàn)可疑情況下,需要注意檢查的地方。2011-02-02DDoS攻擊與CC攻擊網(wǎng)絡安全的兩大挑戰(zhàn)如何應對防御
這篇文章主要為大家介紹了面對DDoS攻擊與CC攻擊網(wǎng)絡安全的兩大挑戰(zhàn)應該如何應對,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步2023-10-10網(wǎng)絡安全中流量加密實現(xiàn)工具冰蝎4.0介紹
冰蝎是一個動態(tài)二進制加密網(wǎng)站管理客戶端。在實戰(zhàn)中,第一代webshell管理工具"菜刀"的流量特征非常明顯,很容易就被安全設備檢測到?;诹髁考用艿膚ebshell變得越來越多,"冰蝎"在此應運而生2022-09-09