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

Web安全解析Boolean注入攻擊原理

 更新時(shí)間:2021年11月02日 14:34:34   作者:Phanton03167  
這篇文章主要為大家介紹了Web安全解析Boolean注入攻擊原理的講解,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪

1. Boolean注入攻擊

Boolean注入攻擊的測(cè)試地址:http://127.0.0.1/sqli/boolean.php?id=1。

訪問(wèn)該網(wǎng)站時(shí),頁(yè)面返回yes,如圖19所示。

圖19 訪問(wèn)id=1時(shí)頁(yè)面的結(jié)果

在URL后添加一個(gè)單引號(hào),再次訪問(wèn),發(fā)現(xiàn)返回結(jié)果由yes變成no,如圖20所示。

 

圖20 訪問(wèn)id=1'時(shí)頁(yè)面的結(jié)果

訪問(wèn)id=1' and 1=1%23,id=1' and 1=2%23,發(fā)現(xiàn)返回的結(jié)果分別是yes和no,更愛(ài)ID的值,返現(xiàn)返回的仍然是yes或者no,由此可判斷,頁(yè)面只返回yes或no,而沒(méi)有返回?cái)?shù)據(jù)庫(kù)中的數(shù)據(jù),所以此處不可使用Union注入。

此處可以嘗試?yán)肂oolean注入,Boolean注入是指構(gòu)造SQL判斷語(yǔ)句,通過(guò)查看頁(yè)面的返回結(jié)果來(lái)推測(cè)哪些SQL判斷條件是成立的,以此獲取數(shù)據(jù)庫(kù)中的數(shù)據(jù)。我們先判斷數(shù)據(jù)庫(kù)名的長(zhǎng)度,語(yǔ)句如下所示。

' and length(database())>=1--+

因?yàn)椴樵?xún)語(yǔ)句前面有單引號(hào),所以和源碼中的SQL語(yǔ)句拼接后會(huì)多出一個(gè)單引號(hào),因此需要注釋符來(lái)注釋。

http請(qǐng)求中+會(huì)被替換為空格與--組合成為注釋符,空格也可用%20來(lái)代替,--%20效果等同。

由于#是用來(lái)指導(dǎo)瀏覽器動(dòng)作的,對(duì)服務(wù)器端完全無(wú)用,所以,HTTP請(qǐng)求中不包括#。在第一個(gè)#后面出現(xiàn)的任何字符,都會(huì)被瀏覽器解讀為位置標(biāo)識(shí)符。這意味著,這些字符都不會(huì)被發(fā)送到服務(wù)器端。所以如果想用#注釋符,就要將#轉(zhuǎn)換為%23。

故上面的語(yǔ)句還可寫(xiě)為:

' and length(database())>=1--%20

' and length(database())>=1%23

1的位置上可以是任意數(shù)字,如' and length(database())>=3--+和' and length(database())>=4--+,我們可以構(gòu)造這樣的語(yǔ)句,然后觀察也免得返回結(jié)果,如圖21~23所示。

 

圖21 判斷數(shù)據(jù)庫(kù)庫(kù)名的長(zhǎng)度(1)

 

圖22 判斷數(shù)據(jù)庫(kù)庫(kù)名的長(zhǎng)度(2)

 

圖23 判斷數(shù)據(jù)庫(kù)庫(kù)名的長(zhǎng)度(3)

以上幾個(gè)語(yǔ)句的意思是,數(shù)據(jù)庫(kù)庫(kù)名的長(zhǎng)度大于等于3,結(jié)果為yes;數(shù)據(jù)庫(kù)庫(kù)名的唱的大于等于4,結(jié)果為no。結(jié)合以上幾個(gè)語(yǔ)句,可以判斷出數(shù)據(jù)庫(kù)的長(zhǎng)度為3。

接著,使用逐字符判斷的方式獲取數(shù)據(jù)庫(kù)庫(kù)民。數(shù)據(jù)庫(kù)庫(kù)名的范圍一般在a~z、0~9之內(nèi),可能還有一些特殊字符,這里的字母不區(qū)分大小寫(xiě)。逐字符判斷的SQL語(yǔ)句為:

' and substr(database(),1,1)='t'--+

substr是截取的意思,其意思是截取database()的值,從第一個(gè)字符開(kāi)始,每次只返回一個(gè)。

substr的用法和limit的有區(qū)別,需要注意。limit是從0開(kāi)始排序,而substr是從1開(kāi)始排序。可以使用Burp的爆破功能爆破每個(gè)位置的字符值,如圖24所示,爆破結(jié)果如圖25所示。

 

圖24 利用Burp爆破數(shù)據(jù)庫(kù)的庫(kù)名(1)

 

圖25 利用Burp爆破數(shù)據(jù)庫(kù)的庫(kù)名(2)

其實(shí)還可以使用ASCII碼的字符進(jìn)行查詢(xún),t的ASCII碼是116,而在MySQL中,ASCII轉(zhuǎn)換的函數(shù)為ord(),則逐字符判斷的SQL語(yǔ)句應(yīng)該為如下所示。

' and ord(substr(database(),1,1))=116--+

從Union注入和Burp的爆破結(jié)果中我們知道,數(shù)據(jù)庫(kù)名是'test'。

查詢(xún)表名、字段名的語(yǔ)句也應(yīng)粘貼在database()的位置,從Union注入中已經(jīng)知道數(shù)據(jù)庫(kù)'test'的第一個(gè)表名是emails,第一個(gè)字母應(yīng)當(dāng)是e,判斷語(yǔ)句如下所示。

' and substr((select table_name from information_schema.tables where table_schema='test' limit 0,1),1,1)='e'--+

以此類(lèi)推,就可以查詢(xún)出所有的表名和字段名,如圖27所示,利用Burp爆破的結(jié)果如圖28所示。

2. Boolean注入代碼分析

在Boolean注入頁(yè)面中程先獲取GET參數(shù)ID,通過(guò)pre_match判斷其中是否存在union/sleep/benchmark等危險(xiǎn)字符。然后將參數(shù)ID拼接到SQL語(yǔ)句,從數(shù)據(jù)庫(kù)中查詢(xún),如果有結(jié)果,則返回yes,否則返回no。當(dāng)訪問(wèn)該頁(yè)面時(shí),代碼根據(jù)數(shù)據(jù)庫(kù)查詢(xún)結(jié)果返回yes或no,而不返回?cái)?shù)據(jù)庫(kù)中的任何數(shù)據(jù),所以頁(yè)面上智慧顯示yes或no,代碼如下所示。

<?php
$con=mysqli_connect("localhost","root","root","test");
// 檢測(cè)連接
if (mysqli_connect_errno())
{
    echo "連接失敗: " . mysqli_connect_error();
}
$id = @$_GET['id'];
if(preg_match("/union|sleep|benchmark/i",$id))
{
    exit("no");
}
$sql = "select * from users where `id`='".$id."'";
$result = mysqli_query($con,$sql);
if(!$result)
{
    exit("no");
}
$row = mysqli_fetch_array($result);

if ($row) {
	exit("yes");
}else{
	exit("no");
}
?>

當(dāng)訪問(wèn)id=1' or 1=1%23時(shí),數(shù)據(jù)庫(kù)執(zhí)行的語(yǔ)句為select * from users where ‘id'=‘1' or 1=1#,由于or 1=1是永真條件,所以此頁(yè)面可定會(huì)返回yes。當(dāng)訪問(wèn)id=1' and 1=2%23時(shí),數(shù)據(jù)庫(kù)執(zhí)行的語(yǔ)句為select * from users where ‘id'=‘1' and 1=2#,由于and1=2是永假條件,所以此時(shí)頁(yè)面肯定會(huì)返回no。

以上就是Web安全解析Boolean注入攻擊原理的詳細(xì)內(nèi)容,更多關(guān)于Web安全Boolean注入攻擊的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論