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

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

 更新時(shí)間:2021年11月02日 15:10:05   作者:Phanton03167  
這篇文章主要為打擊介紹了Web網(wǎng)絡(luò)安全分析時(shí)間注入攻擊的原理詳解,在學(xué)習(xí)網(wǎng)絡(luò)安全的同學(xué)可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步

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)文章

最新評(píng)論