PHP双等于缺陷引发的安全问题
来源:互联网 发布:麻将概率分析软件 编辑:程序博客网 时间:2024/05/18 10:05
导言:昨晚一哥们问渗透面试题目有什么经典的,因为前段时间看了法师的书,我对==和===号记忆很深刻,特别留意了下,就给他说了下在php==和===的问题。看他不太理解,我也正好写下这篇文章来总结下学习历程。
0x01
我们都知道php中有两种比较的符号 == 与 ===。 === 在进行比较的时候,会先判断类型是否相等,再比较 == 在进行比较的时候,会先将变量做类型转化
0x02
首先我们看下下面的比较
输出:
上面的代码可以说明==在判断时确实做了类型转换,那么转换规则如下:如果该字符串没有包含'.','e','E'并且其数值在整形的范围之内该字符串被当作int来取值。其他所有情况下都被作为float来取值,该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。
那么:
- a转换成了0, 0==0 ,为true
- 1a转换取开始值1, 1==1 ,为true
- a1转换取值为0, 0==1 ,为false
a1转换取值为0, 0==0 ,为true
至于最后一个比较,”0e123456”==”0e456789”相互比较的时候,会将0e这类字符串识别为科学技术法的数字,0的无论多少次方都是零,所以相等。
0x03 案例
我们假如在登陆验证的时候,取了数据库存储的MD5进行比较。
假设用户采用类似0e[0-9].的密码,我们输入一个密码,这个密码进行MD5加密后同样可以产生0e[0-9].这种形式的MD5,那么做==判断的时候,是否可以直接登陆?
如:
我们输入QNKCDZO
md5(QNKCDZO,32) =0e830400451993494058024219903391
成功登陆账号。当然,前提是这个原先密码设置的时候经过一次MD5加密后要也是0e[0-9].*的。除了我代码中的,还有240610708,s878926199a,s214587387a,s878926199a,s1091221200a,s1885207154a等
0x04 扩展
说明了几个安全问题
1、该网站在对密码采用了不完备的加密体制md5一次加密。
2、某些用户的密码可能会形同虚设。
3、当网站的交易记录产生了ID=0e462097431906509019562988这种 0e[0-9].形式时,攻击者可伪造任意 0e[0-9].的形式绕过为ID的判断对记录数据进行风险操作。类似的形式还有”603E-4234”== “272E-3063”。
阅读全文
0 0
- PHP双等于缺陷引发的安全问题
- PHP的strcmp函数引发的安全问题
- PHP的strcmp函数引发的安全问题
- 线程同步引发的安全问题
- PHP的安全问题
- PHP常见的安全问题
- PHP中is_numeric函数十六进制绕过BUG 容易引发安全问题
- PHP项目常见的安全问题
- 转阿彪 PHP常见的安全问题
- PHP项目常见的安全问题
- PHP上传文件的安全问题
- 由crossdomain.xml安全策略文件引发的一些列安全问题
- 释放文件到临时文件夹中所引发的安全问题
- PHP语言的一些缺陷
- 深入PHP中慎用双等于(==)的详解
- 微软确认Windows可能引发DoS的缺陷
- PHP安全问题
- PHP 安全问题
- 20171102-每日一练
- JDBC中的Statement和PreparedStatement的区别
- 使用IDA静态分析osloader.exe+Ntoskrnl.exe
- 关于Java和C#自带日期转换类的异常问题
- 输入本金和年份并算出利息本金和
- PHP双等于缺陷引发的安全问题
- Maven详解
- Java使用465端口发送邮件(绕过25端口限制)
- Unity3D-CDK兑换模拟
- 什么是Java的永久代(PermGen)内存泄漏
- 最新maven视频教程附全套软件文档源码 18课
- TensorFlow学习笔记(二):TensorFlow实现线性回归模型
- 剑指offer(算法和数据操作篇)
- codeforces 120F Spiders