在上一次讲解了lesson -1的sql基本注入,我们在注入的时候,它会返回错误信息
但是盲注不会:什么是盲注:我理解的盲注是,web页面并不会返回错误信息,需要自己添加一些命令来让浏览器进行一些显而易见的行为,如果发生了这些行为,我们可以认为这次是报错(或者不报错,基于自己的设定)。
通常使用if 函数来搞事情
if函数原理是当表达式1为True时,返回值为表达式二,否则返回表达式三。
基于布尔值的盲注
方法一
http://127.0.0.1/sqli/Less-8/?id=1' and length(database())==10 --+
如果使用这样的呃话,我们输入的id值明明是一个正确的值,但是它会返回一个空操作.那么就说明这是一个注入点.
方法二,加上sleep更加直观,也是在布尔值的基础上,使用睡一下的功能.
sqli-labs lesson-8 提示了是单引号的错误,但是我们是用 ?id=1 还是?id=1’ 判断,页面返回的结果是一样的:
我也不知道错没错,就是不显示咯
无法判断出是否错误,就需要用盲注
题目8提示了,是布尔类型的盲注
输入命令:
if(length(database())<3,1,sleep(3))
如果数据库名的长度小于3是不正确的,那么就直接睡3s
测试一下:
闭合了单引号,这次是不用睡的.
没有闭合单引号,加载时间会很长
果然,就说明这里面存在注入点,经过不懈努力的手工注入,当if(length(database())==8,1,sleep(3)) 的时候,时间没有改变,可以判断出数据库的字符长度就是8
基于时间的盲注
lesson-9 我们把第八题的命令放上去,发现不可以用:
试试让 它在错误的时候睡一下:
http://127.0.0.1/sqli/Less-9/?id=1' and if(length(database())<4,1,sleep(2)) --+
MySQL注入什么的还是直接sqlmap吧.掌握原理,然后会实用工具
加油.
sqlmap的使用
基于布尔的盲注:
sqlmap.py -u "http://127.0.0.1/sqli/Less-9/?id=1" --technique B --dbs --batch
基于时间的盲注(很慢):
sqlmap.py -u "http://127.0.0.1/sqli/Less-9/?id=1" --technique T --dbs --batch
当然也可以不用指定technique,但是这样会很慢,因为默认 使用各种注入算法.
–technique 参数一览表
B Boolean-based blind 基于布尔的盲注
E Error-based 报错注入
U Union query-based Union 查询注入
S Stacked queries 堆叠注入
T Time-based blind 基于时间的盲注
Q Inline queries 内联查询注入