知识点:
万能密码‘=‘
一道登陆型的SQL注入题目,这种题目一般有四种题型:
1.在username中通过union联查select一个已知字符来与传递的password匹配完成登陆
2.使用万能密码登陆
3.通过SQL注入获取数据库中的账号密码然后登陆
4.通过SQL注入直接获取数据库中的flag
后台处理逻辑一般有两种:
1.同时使用两个字段值来查询数据库,错误回显一般是“用户名或密码错误”之类的统一报错
2.先使用username查询数据库得到password,再进行对比,错误回显一般是“用户名不存在”,“密码错误”之类的分开报错
首先直接试了一下万能密码
1‘ or ‘1‘=‘1
1 or 1 = 1
发现 or 被过滤了
换成大写,大小写混合都不行
还过滤了# -- select等
没有被过滤的有 ‘ =
猜解SQL语句
select xxx from xxx where username=‘‘ and password=‘‘
select ,,, from ,,, where username=‘xxx‘=‘ ‘and password=‘xxx‘=‘‘;这是一个永真的式子
方法二:
这里提一下另外一种解法,因为常用的or,||,union之类的关键词都被吃掉了的原因,这里使用的是异或字符^来进行确认的。
传入username=1\&password=^‘1,如果后台是第二种处理逻辑,那么SQL语句就会是:
select ??? from ??? where username=‘1\‘ and password=‘^‘1‘
通过转义符\转义username的第二个单引号,在SQL运算中,会先进行异或运算。此时username的值为1\‘ and password=,而这个字符串跟1相等,异或为0,所以最后的SQL语句为select ??? from ??? where username=0,而0会匹配所有第一个字符不为数字的字符串。
结果:
原文:https://www.cnblogs.com/liqik/p/10546132.html