一、sql
盲注
在sql
注入过程中, sql
语句执行的选择后,选择的数据不能回显到前端页面。
类型:基于布尔的SQL
盲注、基于时间的SQL
盲注、基于报错的SQL
盲注。
Information_schema
数据库基本表说明:
schemata
表:提供了当前mysql实例中所有的数据库信息
tables
表:提供了关于数据库中的所有表的信息,
columns
表:提供表中所有列信息,即表明了表中所有列及每列的信息
任务描述:
注入流程:
1.根据提示加入id
参数在url
中,可以看到他不再像前面报错注入一样回显有效信息,而是一段you are in…
的字符串。如果输入正确提示you are in…
输入错误则会报错。同样我们加入单引号,可以看到报错了,报错信息中提示我们输入的id参数使用单引号闭合,我们后面加入注释符即可注释掉原本后面的SQL语句。
2.接着我们可以根据他是否报错来判断我们需查询的语句是否正确。http://localhost/sqli-labs-master/Less-5/?id=1'and left(version(),1)=5--+
可以看到数据库版本是大于等于5.0的
3.可以利用ascii
及substr
函数来判断substr所截取的字符串的ascii
码值为多少,得出当前的字母,可以利用二分法快一点,同时也可直接利用burpsuite
来爆破出当前值,当然也可以写脚本自己跑出来。http://localhost/sqli-labs-master/Less-5/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100--+
这里limit 0,1
意味着取第一张表,如果我们想爆破第二张表即可使用limit 1,1
,同时这里使用substr(str,start,length)
函数截取的是字符串的第一个字符,若想截取第二个字符即可使用substr(str,2,1)
依此类推。当我们取到第三张表,对其进行爆破时我们发现它的表名为users
。