【SQL注入】盲注

盲注:在SQL注入过程中,SQL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特殊的方法进行判断或尝试的过程称为盲注。

SQL盲注分为两大类:基于布尔型的盲注,基于时间型的盲注

布尔型盲注

基于布尔型的盲注:主要是通过比较的手段来得到一个真假值(true 真 1 ,false 假 0),根据真价值来判断数据是什么样的。

示例:注入得到当前数据库名称

通过采用猜测的方法逐个字母确定,最终得到数据库的名字。

输入的sql语句:

vince' and ascii(substr(database(),1,1))=112#

vince是数据库中已经存在的username,ascii()是将查到的字母转换成ascii码。substr(database(),1,1)是取出string数据(此处是database())中的值,其中第二个参数是指从第几个位置开始取,第三个参数是指取几个,假如当前数据库名字是pikachu,取出来的就是p字母。p字母的ascii是112,通过与后面数字的比大小,应为是通过and连接,所以一假全假,若后面的判断为假,则查不出数据,若为真则可查出数据。从而可以判读该位置的字母是哪个,逐个确定,最终得到数据库名称。

注意:在确定该数据库名称前,最好先确定名称的长度,同意可以通过布尔型盲注的方式试出长度的大小,示例如下:

vince' and length(database())<5#

以此类推,可以查出所有的表,以及表中列字段等等数据

时间型盲注

存在一种网页,无论输入什么数据,页面回显都是同一种结果。

sleep()函数是sql中一种可以延时执行语句的函数。故可以以此来进行sql注入

payload:

' and sleep(5)#

若延迟反馈,则说明后台没有处理该数据,而是将其当作数据库语句来进行执行,则存在注入漏洞

但只有延迟效果并不能达到数据库内容。故可以通过配合if判断以及布尔型注入,来进行才解。payload:

vince' and  if (substr(database(),1,1)='a' , sleep(6),'bb')

若数据库第一个字母是a,则延迟执行6秒,若不是则返回bb

时间型盲注常用的函数:sleep(5),benchmark(100000,MD5(1)),benchmark是mysql的内置函数,是将MD5(1)执行100000次以达到延迟的效果。

如果sleep被防御了,就用benchmark,也可以通过改变大小写来进行躲避防御。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值