亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Web安全解析Boolean注入攻擊原理的示例分析

發布時間:2021-11-02 15:43:03 來源:億速云 閱讀:143 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“Web安全解析Boolean注入攻擊原理的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Web安全解析Boolean注入攻擊原理的示例分析”這篇文章吧。

1. Boolean注入攻擊

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

訪問該網站時,頁面返回yes,如圖19所示。

Web安全解析Boolean注入攻擊原理的示例分析

圖19 訪問id=1時頁面的結果

在URL后添加一個單引號,再次訪問,發現返回結果由yes變成no,如圖20所示。

Web安全解析Boolean注入攻擊原理的示例分析 

圖20 訪問id=1'時頁面的結果

訪問id=1' and 1=1%23,id=1' and 1=2%23,發現返回的結果分別是yes和no,更愛ID的值,返現返回的仍然是yes或者no,由此可判斷,頁面只返回yes或no,而沒有返回數據庫中的數據,所以此處不可使用Union注入。

此處可以嘗試利用Boolean注入,Boolean注入是指構造SQL判斷語句,通過查看頁面的返回結果來推測哪些SQL判斷條件是成立的,以此獲取數據庫中的數據。我們先判斷數據庫名的長度,語句如下所示。

因為查詢語句前面有單引號,所以和源碼中的SQL語句拼接后會多出一個單引號,因此需要注釋符來注釋。

http請求中+會被替換為空格與--組合成為注釋符,空格也可用%20來代替,--%20效果等同。

由于#是用來指導瀏覽器動作的,對服務器端完全無用,所以,HTTP請求中不包括#。在第一個#后面出現的任何字符,都會被瀏覽器解讀為位置標識符。這意味著,這些字符都不會被發送到服務器端。所以如果想用#注釋符,就要將#轉換為%23。

故上面的語句還可寫為:

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

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

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

Web安全解析Boolean注入攻擊原理的示例分析 

圖21 判斷數據庫庫名的長度(1)

Web安全解析Boolean注入攻擊原理的示例分析 

圖22 判斷數據庫庫名的長度(2)

Web安全解析Boolean注入攻擊原理的示例分析 

圖23 判斷數據庫庫名的長度(3)

以上幾個語句的意思是,數據庫庫名的長度大于等于3,結果為yes;數據庫庫名的唱的大于等于4,結果為no。結合以上幾個語句,可以判斷出數據庫的長度為3。

接著,使用逐字符判斷的方式獲取數據庫庫民。數據庫庫名的范圍一般在a~z、0~9之內,可能還有一些特殊字符,這里的字母不區分大小寫。逐字符判斷的SQL語句為:

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

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

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

Web安全解析Boolean注入攻擊原理的示例分析 

圖24 利用Burp爆破數據庫的庫名(1)

Web安全解析Boolean注入攻擊原理的示例分析 

圖25 利用Burp爆破數據庫的庫名(2)

其實還可以使用ASCII碼的字符進行查詢,t的ASCII碼是116,而在MySQL中,ASCII轉換的函數為ord(),則逐字符判斷的SQL語句應該為如下所示。

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

從Union注入和Burp的爆破結果中我們知道,數據庫名是'test'。

查詢表名、字段名的語句也應粘貼在database()的位置,從Union注入中已經知道數據庫'test'的第一個表名是emails,第一個字母應當是e,判斷語句如下所示。

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

以此類推,就可以查詢出所有的表名和字段名,如圖27所示,利用Burp爆破的結果如圖28所示。

2. Boolean注入代碼分析

在Boolean注入頁面中程先獲取GET參數ID,通過pre_match判斷其中是否存在union/sleep/benchmark等危險字符。然后將參數ID拼接到SQL語句,從數據庫中查詢,如果有結果,則返回yes,否則返回no。當訪問該頁面時,代碼根據數據庫查詢結果返回yes或no,而不返回數據庫中的任何數據,所以頁面上智慧顯示yes或no,代碼如下所示。

<?php
$con=mysqli_connect("localhost","root","root","test");
// 檢測連接
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");
}
?>

當訪問id=1' or 1=1%23時,數據庫執行的語句為select * from users where ‘id'=‘1' or 1=1#,由于or 1=1是永真條件,所以此頁面可定會返回yes。當訪問id=1' and 1=2%23時,數據庫執行的語句為select * from users where ‘id'=‘1' and 1=2#,由于and1=2是永假條件,所以此時頁面肯定會返回no。

以上是“Web安全解析Boolean注入攻擊原理的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北辰区| 泰兴市| 石屏县| 曲水县| 额尔古纳市| 南安市| 阜新市| 冀州市| 乌苏市| 申扎县| 马龙县| 金塔县| 电白县| 霍州市| 南充市| 扎鲁特旗| 阿瓦提县| 松滋市| 拉萨市| 东平县| 黎平县| 清徐县| 海林市| 东安县| 类乌齐县| 紫云| 黄骅市| 隆回县| 绥宁县| 洱源县| 澄迈县| 吉木乃县| 石泉县| 隆子县| 临洮县| 临泽县| 工布江达县| 伽师县| 亚东县| 勃利县| 西城区|