盲注总结

盲注可以分为两类,适用情况如下:

  • 布尔盲注 :页面无回显位,无报错,且只返回两种结果,True和False
  • 时间盲注 :页面无回显位,无报错,且一直只有一种返回结果

    布尔盲注

布尔盲注就是通过对获得的数据进行截取每一位,然后用ascii码来进行比对,因为页面有两种返回状态,如果比对正确,则返回页面的True状态,重复循环,可得到完整数据

相关常用函数

  • substr(string,start,length) string为字符串;start为起始位置;length为长度。[相同函数有,mid(),substring()]
  • ascii() 返回字符的ASCII码值
  • length() 返回字符串的长度

布尔盲注过程

  1. 判断字符型还是数字型
  2. 判断数据库个数
  3. 判断第一个数据库名的长度
  4. 判断数据库的第一个字符,循环此步,获得完整数据库名
  5. 获得数据表,字段值方法同获得数据库名字的方法

示例

判断数据库长度

逐位判断数据库名

逐位判断数据表名

同理可获得其中字段值和数据

时间盲注

时间盲注和布尔盲注相同,依然是需要逐位判断,但由于页面只有一种返回结果,随意需要引入 sleep() 函数,若是结果正确,则让mysql休眠几秒钟,依次来判断每一位的结果是否猜测正确

相关函数

  • if(expr,v1,v2) 如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。
  • sleep(n) 让 mysql 休眠 n 秒钟

时间盲注过程

过程和布尔盲注相同

注入示例语句
判断数据库长度

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(length(database())=9,sleep(5),1) --+

逐位判断数据库名

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(ascii(substr(database(),1,1))>114,sleep(5),1) --+

逐位判断数据表名字

http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1))>100,sleep(5),1) --+

同理可获得其中的字段值和数据

盲注中的一些等价函数

ascii() ==> hex()、bin()

sleep() ==> benchmark()

concat_ws() ==> group_concat()、concat()

substr() ==> substring()、mid()