SQL 布尔型盲注入的原理
布尔型输入介绍:
布尔型注入,一般在测试中不会在页面显示数据库信息,只会提示对与错的内容。
代码的过程:get接收id参数-》id带入查询-》如果存在值返回id exists字符串信息。
例如:在某个系统登录页面输入账号密码时提示对与错,要是存在注入就是SQL盲注入,盲注入有两种方式:一种是布尔型忙注入,另外一种是延时注入。
判断盲注入:
输入SQL注入检测语句,判断返回页面是否一样,如果不一样可能存在SQL盲注入漏洞,例如使用:1‘and’1‘=’1 真 和 1‘and’1‘=’2 假 进行判断。
如果输入检测语句页面无变化可以使用延时语句进行检测:1‘and’1‘=’1 sleep(10)–+ ,sleep函数是MySQL延迟返回10的意思。如下图:
可以通过以上方式进行判断是否存在漏洞。
如dvwa靶场来演示该漏洞如下:
1’and 1=1–
1’and 1=2–
使用sleep函数:
让它sleep(10)-- ,结果是等待10秒
以上这样就是已经知道存在SQL注入漏洞了。
构造SQL语句:
布尔型盲注的SQL语句:select if(1=1,1,0) if() 函数是在MySQL判断。第一个参数表达式,如果条件成立会显示1,如果不成立显示0,还是使用真假进行判断,条件测试成立后可以将表达式替换成SQL语句进行SQL注入攻击。
判断例子如图:2大于1
布尔型盲注入获取数据库敏感信息:
通常在黑盒的环境下,通过构造SQL注入语句,根据页面的特征确定获取敏感信息,布尔型盲注入所需要用到的函数有:SUBSTRING()字符串截,第一个参数是字符串,第二个参数是开始截取,第三个是截取的长度。如图所示:
select database() 查询当前数据库。如图所示:
以上两种最终结合效果:
判断当前数据库,获取第一个字符,然后进行判断字符是否为d是的话为1,否则会0,语句结果如下
select * from users
where user_id
=1 and if(substring(database(),1,1)=‘d’,1,0)
黑盒情况下布尔型注入:
上面已经给大家讲解布尔型原理的,那在黑盒的模式下进行测试首先判断注入,在判断获取数据库的长度,在查询库名,最后在通过表查询字段。
布尔型盲注入查询长度:
查询库名的前提条件需要确定查询数据库的长度,在通弄个截取字符进行对比。
使用length()函数来获取当前库的长度。如图所示:获取到的长度为4
1’ and if(length(database())=4,1,0) 长度为4返回1 说明该长度是正确的,如图所示:可以使用=,<,>进行判断
1’ and if(length(database())>1,1,0)-- 结果:
1’ and if(length(database())>4,1,0)-- 结果:
最终测试出来长度为4
burp获取库名
判断语句格式如:
select * from users
where user_id
=1 and if(substring(database(),1,1)=‘d’,1,0)
可以利用抓包使用字典进行枚举的出库名。
操作如下:
开启burp,输入内容抓包枚举
给长度和字符添加变量
选择字典1 和 2添加好字典后就可以点右上方的攻击了
长度字典设置:
最后得到了dvwa库名了
总结:
这次带领大家了解了SQL盲注详细原理和实际利用,有喜欢的可以点个关注!
下次更新:实战盲注入使用buspsuite配合获取数据
**声明:**本作者:space invaders 所分享内容仅用于网安爱好者之间的技术讨论,禁止用于违法途径,所有渗透都需获取授权!否则需自行承担,本作者不承担相应的后果。