sqli-labs-master-Advanced injections解析

目录

lesson 21 base64加密,单引号,cookie注入

lesson 22  base64加密,双引号,cookie注入

lesson 23  过滤注释符

lesson 24  二次注入

lesson 25  过滤or和and,单引号

lesson 25a  过滤or和and,双引号

lesson 26  过滤空格,注释,and,or,/,\,- 

lesson 26a  多过滤,盲注

lesson 27  union,select过滤大小写绕过

lesson 27a  union,select过滤大小写绕过

lesson 28  union,select过滤双写绕过

lesson 28a  union,select过滤双写绕过

lesson 29  单引号闭合绕过waf

lesson 30  双引号闭合绕过waf

lesson 31  双引号括号闭合绕过waf

lesson 32  单引号宽字节注入

lesson 33  单引号宽字节注入

lesson 34  post宽字节注入

lesson 35  数字型宽字节注入

lesson 36  单引号宽字节注入

lesson 37  post宽字节注入


lesson 21 base64加密,单引号,cookie注入

从题目名称来看那么就很显而易见了,同样是cookie注入,不过有了base64的加密

同样的,先输入用户名和密码,admin和admin,然后用burpsuite抓包看一下

将这串代码复制到decoder中解密就是admin=,所以将%3D去除再加引号看看能否触发报错,YWRtaW4n即为admin' 的base64编码

通过上图报错信息我们可以得知语句的闭合方式为单引号和括号,那么就可以利用与20关相似的语句来继续实验了,只不过都得转换成base64编码的形式

同样的先判断列数,构造语句uname=admin') order by 4 #,并将等号后面全部用base64编码

经过判断得出共有三列,然后判断回显点uname=vegetable') union select 1,2,3 #,与上一关一样,输入数据库中没有的名字,让后面的union select语句得以执行

接下来的本来不想演示的,但是这是一篇新的文章,还是先搞一下好了,看一下当前数据库,直接将database()与任意一个数字替换即可,以2为例

然后查看security数据库中的表

然后查看users表中的字段

最后查值

OK,到这里就终于结束了,其实就是第一关的东西

lesson 22  base64加密,双引号,cookie注入

这一关和上衣管大同小异,只不过这一关不是单引号了,而是双引号了

因此,不在过多赘述

lesson 23  过滤注释符

加单引号即报错

但是无论如何无法成功,经过尝试,发现无法使用注释符将之后的代码注释掉,因此只能在加一个引号将之后的引号闭合

接下来的就大同小异了,不在浪费时间

lesson 24  二次注入

本关为二次排序注入,是一种存储型的注入,将能导致sql注入的语句先存到数据库中,然后在此调用时,就会触发sql注入

所以,我们需要构造一些特殊的用户名,然后在更新用户名时将语句闭合,从而成功做到免密修改密码,以admin为例,我们先注册一个账户,注册名为admin’ #,密码为123456

注册成功后我们去数据库看看

接下来,我们使用该账号进行登录,如图所示设置

修改完成后,去数据库查看,发现admin的密码被改为了刚才设置的密码,那么究竟是为什么呢?

因为我们刚才修改的并不是admin‘ #的密码,而是admin的密码,‘ 和 # 分别闭合和注释语句,从而完成了对admin密码的修改,看下面的语句,引号与之前的单引号闭合,而#注释掉了之后的引号

update users set password = '11111' where username = 'admin '# ' 

lesson 25  过滤or和and,单引号

 本关过滤了or与and,比如我们输入order by会这样,直接将or去除了

那么试试双写会怎么样呢?不管怎么说,order算是回来了,好像有效

根据order by 3和4一个正常回显一个报错判断有三列

然后使用联合查询即可,遇到有or和and的地方双写即可绕过,查看回显位置

查看数据库中的表

然后查看users表中的字段名,在查值,与21关的语句大同小异

lesson 25a  过滤or和and,双引号

这一关和上一关没有什么差别了,只不过是换成了双引号闭合,把时间留到后面

lesson 26  过滤空格,注释,and,or,/,\,- 

这该过滤的都过滤了,不知道怎么办才好,直接报错注入吧,简单粗暴

获取数据库名称

获取表名

?id=-1'||updatexml(1,concat(1,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),0)||'1'='1''

获取字段

?id=-1'||updatexml(1,concat(1,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_name='users'))),1)||'1'='1''

就这样吧,方法就是如此了

lesson 26a  多过滤,盲注

把这一关当作上一关来做的话,会发现没有报错信息,因此无法直接粗暴的使用报错注入

那么关键点就在于如何在注释符被过滤的情况下闭合语句

先添加单引号,页面出现异常,有报错信息,添加两个单引号 1' ' 页面正常,说明为字符型注入,确定是否有小括号,输入 )' '( 页面回显正常,说明小括号也是有的

然后通过编码和布尔盲注来解决这个问题,一想到盲注我就头疼,我暂且放弃这道题了······

lesson 27  union,select过滤大小写绕过

加单引号根据报错信息判断属于字符型注入,用单引号闭合

使用%0a代替空格,用大小写来绕过

?id=0'%0aUNion%0aSElect%0a1,2,3%0aand%0a'1'='1

接下来就是一样的了,将之前用过的语句复制过来往下走就ok了

lesson 27a  union,select过滤大小写绕过

这一关就和上一关没什么区别了,只是闭合方式不一样

lesson 28  union,select过滤双写绕过

可以去看源代码,源代码union,select过滤并没有区分大小写,并且是将union select作为整体过滤,那就把他们当作整体双写好了

单引号括号闭合,用%0a替换空格就好,所用语句与之前差不多

lesson 28a  union,select过滤双写绕过

这一关不需要绕过空格,同样双写union select绕过

lesson 29  单引号闭合绕过waf

世界上最好的防火墙?但是这一关用第一关的payload都可以做,为证清白,特意贴张图

去看看代码会发现,需要在···login.php?id=1这个url上操作

加单引号不行,被阻止了,这真防火啊···

但是可以···login.php?id=1&id=1' 来触发报错

那么就可以按照这个思路继续走下去了,这个利用的是http参数污染,输入多个同名参数,服务器仅取其中一个进行处理,在waf中仅对其中一个参数做了检测,另一个参数就正常处理了,再往后就是正常的联合查询注入了

lesson 30  双引号闭合绕过waf

按照攻克一关轻取三关的逻辑,这一关和上一关应该是一样的,测试发现猜想没错,这次只是换了双引号闭合方式

lesson 31  双引号括号闭合绕过waf

一起来看看这关又是什么牛马,按照前面的思路,先试探闭合方式才是紧要的

这还有什么好说的,谜底就在谜面上,双引号括号呗!没有问题哈

 

lesson 32  单引号宽字节注入

呕吼,新的挑战来喽

当我们加单引号时,页面好心的提示我们它在单引号前加了转义符号 \

这一关就是全新的内容了,也就是宽字节注入

服务器传入数据库的数据如果是宽字节,也就是类似GBK等编码时,可以加一个16进制字节,让其与转义符号 \ 组合形成一个不认识的汉字,从而绕过转义符

我们单独输入单引号,在前面加转义符是 \' ,也就是上图中的内容,而如果输入 %df ',在前面加转义符就是 \%df ' ,\%df 可以被编码为一个汉字,所以就变成了 字 ' ,也就是

\%df '   ————》 � '

所以我们试一下

之后在使用联合查询即可

···?id=1%df' union select 1,2,3--+

···?id=-1%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema = database()--+ 

在这里,表名需要转换成16进制编码,否则会报错

···?id=-1%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name = 0x7573657273 --+

接下来的就是一样的了···

lesson 33  单引号宽字节注入

还记得那句话吗,一关过,过三关

这一关和上一关解法完全一样,没有差别

lesson 34  post宽字节注入

虽然他搞了个框,但还是掩盖不了他是宽字节的事实

借助burpsuite试探一下

然后就是一样的操作了

lesson 35  数字型宽字节注入

这一关就更简单了,数字型注入,只需要把表名列名等换成16进制就好了,与之前一样 

lesson 36  单引号宽字节注入

这一关和32关一毛一样

lesson 37  post宽字节注入

这个···和34关一样,好了,宽字节全篇完

本篇内容也结束了

 

 

 

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值