欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Web網(wǎng)絡安全分析時間注入攻擊原理

 更新時間:2021年11月02日 15:10:05   作者:Phanton03167  
這篇文章主要為打擊介紹了Web網(wǎng)絡安全分析時間注入攻擊的原理詳解,在學習網(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)絡安全時間注入攻擊的資料請關注腳本之家其它相關文章!

相關文章

最新評論