一、什么是万能账号密码
1、万能账号
【数值型万能账号】
【单引号字符型万能密码】
【双引号字符型万能密码】
1.1 万能账号的使用
2、万能密码
【数值型万能密码】
【单引号字符串型万能密码】
【双引号字符串型万能密码】
2.1 万能密码的使用
三、万能账号密码原理剖析一个网络安全意识淡薄的网站,其登录功能的SQL语句大概是下面这个样子 select * from user where username='user' and password='pass' 1、万能账号原理当我们在登录界面输入 【万能账号】比如 a’ or true # 以后,后端会将我们输入的参数拼接到SQL中,然后去数据库中查询账号和密码,SQL语句大概是下面这样
由于 # 在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中大概是下面这样
注释后面的内容不生效,真正执行的SQL大概是下面这样 select * from user where username='a' or true SQL语句恒成立,从而登录成功
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中,大概是下面这样
由于 # 在SQL中是注释符,注释符后面的内容不起作用,所以真正执行的SQL大概是下面这样 select * from user where username='admin' SQL只会在数据库中查询用户名,而不是同时查询用户名和密码,这就意味着,只要用户名正确,就可以登录成功 3.1 注释符除了 # ,-- 在SQL中也是注释符,SQL的语法格式规定 --后面必须使用空格来间隔后面的注释内容,所以需要将 --写作 -- a,后面的 a 可以是任意数字或者字母 简单来件就是 admin’ – a 等价于 admin' # 总结
来源:blog.csdn.net/wangyuxiang946/article/details/120604024 |
|