【学术探讨】万能密码原理剖析
「作者主页」:士别三日wyx
「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者
「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》
【万能密码】,顾名思义,就是可以 【登录任意网站】的账号和密码,这篇文章就跟大家探讨一下,万能密码究竟是如何实现登录的。
首先了解一下登录功能的逻辑。
我们平时登录账号时,如果是第一次登录,系统会提示我们注册账号,并将我们注册的账号和密码保存到数据库中。
当我们再次登录时,系统会将我们输入的账号和密码和数据库中的数据进行匹配,匹配成功能登录。这就意味着我们需要知道一个已经注册过并且正确的账号和密码才能进行登录。
那如果我不小心忘记了我的账号或者密码,或者我压根就不知道账号和密码,还有没有办法登录呢?答案是肯定的。
比如一个登录功能,后台的SQL语句基本都是下面这个样子
select * from user where username='user' and password='pass'
假如用户名是admin,我们就给用户名填上 admin '#,密码随便输入,比如123456,后台接收参数,拼接到SQL中会变成这样:
select * from user where username='admin'#' and password='123456'
由于 # 在SQL中是注释符,注释符后面的内容不起作用,所以真正执行的SQL大概是下面这样
select * from user where username='admin'
SQL只会在数据库中查询用户名,而不是同时查询用户名和密码,这就意味着,只要用户名正确,就可以登录成功。
也就是说万能密码并不是一个真正意义上的密码,而是一种拥有不同变体的格式。
由于参数可以用双引号包裹、单引号包裹、甚至不包裹,万能密码可以有三种形式:
- 数值型:
admin #
- 单引号字符串型:
admin'#
- 双引号字符串型:
admin"#
这实际上是利用了注释 #
的特性,由于--
也是SQL的注释,万能密码又多了三种形式:
- 数值型:
admin-- a
- 单引号字符串型:
admin'-- a
- 双引号字符串型:
admin"-- a
细心的同学可能注意到,--
后面还有一个空格,这个空格是必须要有的,因为SQL的语法格式规定--
和后面的注释内容必须间隔一个空格。
一些比较聪明的程序员,会在数据库中存储用户密码的MD5值,登录时先将密码MD5加密,再查数据库。
但这样也会存在问题,比如:
echo md5('240610708').PHP_EOL;
echo md5('s155964671a').PHP_EOL;var_dump(md5('240610708') == md5('s155964671a'));
输出:
0e462097431906509019562988736854
0e342768416822451524974117254469
bool(true)
这是因为0e开头是科学计数法的格式,也就是 0 乘以n的n次幂,你别管后面的n是几,和0相乘肯定都是0。即0e开头的值,运算结果都是0。
这就意味着,如果一个会员账户密码是 240610708 ,那么输入 s155964671a 也能登录成功。
类似的值还有:
QNKCDZO => 0e830400451993494058024219903391
240610708 => 0e462097431906509019562988736854
s878926199a => 0e545993274517709034328855841020
s155964671a => 0e342768416822451524974117254469
s214587387a => 0e848240448830537924465865611904
s214587387a => 0e848240448830537924465865611904
这里就简单列举这几种形式,如果你还知道其他形式,欢迎在评论区留言。
【学术探讨】万能密码原理剖析相关推荐
- SQL手工注入原理万能密码及默认密码登陆后台
SQL手工注入原理: 下面就是比较笨的方法了== 一个一个试 (* ̄rǒ ̄) 针对于.asp后缀网 + ?id_ 在后面加入下面代码,返回正确那就是无注入点,反正就是有注入点 一.什么是SQL ...
- sql注入之万能密码总结
万能密码 万能密码原理 原验证登陆语句: SELECT * FROM admin WHERE Username= '".$username."' AND Password= '&q ...
- [转] 深入探讨PageRank(二):PageRank原理剖析
深入探讨PageRank(二):PageRank原理剖析 关于PageRank的基础知识简介请参见博文:<深入探讨PageRank(一):PageRank算法原理入门>. http://b ...
- java 反序列化 ysoserial exploit/JRMPListener 原理剖析
目录 0 前言 1 payloads/JRMPClient 1.1 Externalizable 1.2 生成payload 1.3 gadget链分析 2 exploit/JRMPListener ...
- iPhone/Mac Objective-C内存管理教程和原理剖析
版权声明 此文版权归作者Vince Yuan (vince.yuan#gmail.com)所有.欢迎非营利性转载,转载时必须包含原始链接http://vinceyuan.cnblogs.com/,且必 ...
- 深入理解Go底层原理剖析 (送书)
互联网迅猛发展的数十年时间里,不断面领着各种新的场景与挑战,例如大数据.大规模集群计算.更复杂的网络环境.多核处理器引起对于高并发的需求,云计算,上千万行的服务器代码-- 那些成熟但上了年纪的语言没能 ...
- 『Go 语言底层原理剖析』文末送书
互联网迅猛发展的数十年时间里,不断面领着各种新的场景与挑战,例如大数据.大规模集群计算.更复杂的网络环境.多核处理器引起对于高并发的需求,云计算,上千万行的服务器代码-- 那些成熟但上了年纪的语言没能 ...
- qqsafe病毒 arp网站挂马 原理剖析-786ts.qqsafe-qqservicesyydswfhuw8ysjftwf.org(转载)
昨天小站被挂马了,每次打开都会自动弹出一个对话框,提示正准备安装...,然后就消失.查看页面的源文件会发现在代码的最后面被加上了9 ~0 ]* U9 N2 ^ <body>" z ...
- web安全—万能密码登录(跳过密码验证)
什么是万能密码登录呢,我们可以理解为绕过密码验证.通过构造语句来直接绕过登录的验证. 这里我们举dvwa的靶场为例子 我们打开靶场,看到一个登录页面,上面显示让我们输入用户密码,由于我们不知道他的账号 ...
最新文章
- 2022-2028年中国羽绒工业投资分析及前景预测报告
- 5.2 测试计划和估算
- python实体类dict to object
- PAT甲级1107 Social Clusters (30 分):[C++题解]并查集,爱好、人数
- Android中的广播Broadcast详解
- html5做咖啡网页素材,HTML5/CSS3咖啡品类切换动画
- VB SendMessage向其他程序窗口发送字符串消息实例
- Jsoncpp 使用方法大全
- 每日一题[LeetCode 315]计算右侧小于当前元素的个数
- POJ2356 Find a multiple 鸽巢原理
- 全网首发:解决JDK绘制位图字体的旋转位置错误
- Laravel5.8调试消息队列RabbitMQ
- 【Office插入eps】Word插入eps出错
- javascript 动态设置样式style
- 技术学校面试该说什么_我第一次现场技术面试后,香港专业教育学院学到了什么...
- 如何取消PPT中的动画效果
- 智能家居中控屏(一):产品介绍
- 基于大数据的舆情分析系统架构
- ZendStudio使用
- 信创办公--基于WPS的Word最佳实践系列(实现标题自动编号)
热门文章
- 阿里云windows ftp 200 Type set to A. 227 Entering Passive Mode
- html dom树结构,【EASYDOM系列教程】之DOM 树结构
- Dreamweaver第一天 - 网站前期企划篇 - 网站企划概念
- Mac日历如何设置不在通知中心显示共享日历信息?
- 完全背包问题状态转移方程解释
- 萌新求助:如何统计二进制文件中某个ASCII码的个数
- 【数论】【组合数】【快速幂】【乘法逆元】洛谷 P2265 路边的水沟
- 《C# 语言入门详解(刘铁锰) - 学习笔记 - Lambda表达 / Linq查询》
- CSS属性优先级顺序
- html 文档模板,html/template(模板)