sqli-labs 5-8关

第五关

当我们输入一个可以查询到的id时,会显示you are in…,当把id设置为10000时,什么都不显示,通过加单引号,根据报错信息,可以看到是单引号包括的字符型,因为信息不会回显到浏览器上,所以可以尝试一下,利用报错信息,来获取我们想要的信息。
常用的函数有这两个:

extractvalue(XML_document,XPath_string)
从目标XML中返回包含所查询值的字符串,该方法只能爆出32位。

updatexml(XML_document,XPath_string,new_value)
改变文档中符合条件的值
这两个函数都是和XML相关的,因为我们的XPath语句是肯定错误的,所以会告诉我们XPath里哪里不符合语法规范,这样就拿到了数据信息。

首先可以查询一下当前使用的是哪个数据库

http://localhost/Less-5/?id=3' union select 1,extractvalue(1,concat(0x7e,(select database()),0x7e ) )--+

less-5.png
返回结果是security数据库

查询该数据库下都有哪些字段

http://localhost/Less-5/?id=3' union select 1,extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_schema = database() limit 0,1),0x7e ) )--+

会返回第一个字段’id’
后面就可以尝试去获取了。

第六关

第六关和第五关的区别就是,第六关使用的是双引号包括id字段,改单引号为双引号即可。

第七关

这关显示就两个状态:
You are in… Use outfile… 正确状态
You have an error in your SQL syntax 错误状态
显然不能再使用5,6关的根据sql错误信息注入了。
当加入单引号会报错,加入双引号不会报错,说明id被单引号包括,因为单引号里可以有双引号,我们使用单引号与注释进行闭合,但是不行的,说明除了单引号外还有其他符号,经实验还有两个)),这样就可以实现闭合,在后面加上我们的sql语句。
接下来就要进行布尔盲注了,其意思就是根据这两种状态去测试我们查询的信息正确与否。
构造一个测试:

http://localhost/Less-7/?id=12')) and left(database(),1)='s'--+

查看返回数据的数据库第一个字母是否为’s’,当然这个数据库是security,结果为真,显示的自然是正确状态,可以接着测试第二个,第三个字母。
测试方法有以下几种:
使用大于号二分法测试,迅速锁定字母;
使用brpsuite暴力破解;社区版的只有单线程,而且我尝试破解了一下,返回的大小值都相同,但查看response发现是不同的,难道是社区版的问题?
疑问:database()和select database()的区别

第八关

单引号无返回,双引号有返回,说明是单引号包括的,单引号和注释可以正确返回,就可以直接用第七关的方法,逐个去验证了。

欢迎关注公众号,一起交流

公众号二维码.jpg

你可能感兴趣的:(sql注入)