php弱类型比较(松散比较) 上

简介: php弱类型比较(松散比较)

前言


php有八种类型

标量类型:整数型integer,浮点型float,字符串类型string,布尔类型boolen

复合类型:对象 object,数组array

特殊类型:空null,资源resource


我们要知道php是一种弱类型的语言,它不同于C/Go/java等。


那么首先,说一下php中两个比较符号。


18cdca8600ce8ce56f36da4f95f71173_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


在这里要说明一下,==在这里是判断两边的值是否相等,等号两边为相同的值的时候,直接判断值是否相等,如果类型不一样,则先转换为相同的类型,再判断转换后的值是否相等。


(若是等号两边是数值和字符串比较,则字符串会转换为数值,字符串转为数值这里很有意思了,大家可以用var_dump去尝试一下不同的类型转换)

(比如像这样多尝试尝试)


a9dd2c5c6e9c2ef74e9b2a0c1836cab4_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


其中为什么第11行为true呢,这里是php中的hash缺陷,如果hash值是以0e开头的,进行比较时候会变成0乘以10的多少次方,结果还是为0


(ps:如果MD5运算后为0e开头的字符串,是不是可以绕过强制(string)转换后的MD5比较呢)


提醒:0,"0",null,false,array()都是为空。


===,则是判断的是否全等,不仅要值相等,而且类型也要一致。


9d251ac2b8815e78b190eb431d1208eb_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


而在有些语言中(比如Go),要比较的两个变量类型须相等并且Go没有隐式类型转换,要比较的两个变量必须类型完全一样,类型别名都也不行。


这里便可以先从一个简单的题目入手(题目来自攻防世界)。


a997c129a9c2b559ebf02c21e4f89b75_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png



is_numeric() 函数


用于检测变量是否为数字或数字字符串(感觉说明这个函数,大家就没有生词了)。


然后就是一个很简单的弱类型比较了,大家随便输一下符合两个逻辑的就行了。


cef8824ed7f0ef8820f75b642738c706_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png




有了这些准备以后,我们可以进阶的再看一个题目(题目来自于BUUCTF)。


我们迈过第一关以后会看到这个页面,F12得到了提示。


3bcc5c54482d10b22e9a62493cc90aa1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png




$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.


知识补充


md5( string $str   [, bool $raw_output = false  ] ) : string

计算字符串的 MD5 散列值,md5函数告诉我们我们传入的参数应该是string类型的,但如果我们传入一个数组,它不会报错,也不会解析其值,导致两个数组的中无论什么值MD5都相同(出同样的错误是不是也是一样的呢)。


be2ff5b850cb9464e49d5ed8bbbf5afd_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


然后我们便可以传入两个数组来进行绕过了。



00b448eccd6db0586c7f4d50e1f72218_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


到了第三关,便和第二关大同小异了。


如果我们遇到强制类型转换比如再传参的参数前面有一个(string)类型转换,那怎么办,那边要用的MD5强碰撞了(记得以前看过一个cissp的题目讲的也是碰撞出MD5,也解释MD5的不安全性)。


这里我们大多可能要用一下工具(fastcoll


讲完了MD5我们再将另一个,sha(题目来自于bugku,web29各种绕过)。


35a526068018f83f2e7e4c2e73631605_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


知识补充


sha1( string $str   [, bool $raw_output = false  ] ) : string

——计算字符串的 sha1 散列值,测试sha1()函数和md5()函数"殊途同归"。


1d519da3de0264273856bf47493d321c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


这里还有很多可以利用的函数,比如 json_decode() {传入json形式的数据,类Python中的字典},不可否认的是任何函数的绕过都需要相关的逻辑判断。


{json_decode()把接送格式的字符串解码成了数组,而通过相应的逻辑判断我们便可的绕过}


c37d3f5d985b0c954f614d73d025e0e5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


下面我们会介绍与弱类型相呼应的php函数。



相关文章
|
SQL 安全 PHP
PHP代码审计笔记--弱类型存在的安全问题
0x01 前言   PHP 是一门弱类型语言,不必向 PHP 声明该变量的数据类型,PHP 会根据变量的值,自动把变量转换为正确的数据类型。   弱类型比较,是一个比较蛋疼的问题,如左侧为字符串,右侧为一个整数,只不过左侧与右侧内容完全相等。
1350 0
|
SQL PHP 数据库
另类PHP安全漏洞:利用弱类型和对象注入进行SQLi
本文讲的是另类PHP安全漏洞:利用弱类型和对象注入进行SQLi,最近,我在一个目标中寻找漏洞时,遇到了一个正在运行Expression Engine(一个CMS平台)的主机。
1331 0
|
1月前
|
安全 关系型数据库 MySQL
PHP与MySQL交互:从入门到实践
【9月更文挑战第20天】在数字时代的浪潮中,掌握PHP与MySQL的互动成为了开发动态网站和应用程序的关键。本文将通过简明的语言和实例,引导你理解PHP如何与MySQL数据库进行对话,开启你的编程之旅。我们将从连接数据库开始,逐步深入到执行查询、处理结果,以及应对常见的挑战。无论你是初学者还是希望提升技能的开发者,这篇文章都将为你提供实用的知识和技巧。让我们一起探索PHP与MySQL交互的世界,解锁数据的力量!
|
1月前
|
NoSQL 关系型数据库 MySQL
不是 PHP 不行了,而是 MySQL 数据库扛不住啊
【9月更文挑战第8天】这段内容讨论了MySQL在某些场景下面临的挑战及其原因,并指出这些问题不能完全归咎于MySQL本身。高并发读写压力、数据量增长以及复杂查询和事务处理都可能导致性能瓶颈。然而,应用程序设计不合理、系统架构不佳以及其他数据库选择和优化策略不足也是重要因素。综合考虑这些方面才能有效解决性能问题,而MySQL通过不断改进和优化,仍然是许多应用场景中的可靠选择。
103 9
|
2月前
|
存储 SQL 关系型数据库
PHP与MySQL交互的奥秘
【8月更文挑战第29天】在编程的世界里,PHP和MySQL就像是一对默契的舞伴,共同演绎着数据的交响曲。本文将带你探索它们之间的互动,从连接数据库到执行查询,再到处理结果,每一步都充满了节奏与和谐。我们将一起走进这段代码的旅程,感受数据流动的魅力。
|
7天前
|
SQL 关系型数据库 MySQL
PHP与MySQL协同工作的艺术:开发高效动态网站
在这个后端技术迅速迭代的时代,PHP和MySQL的组合仍然是创建动态网站和应用的主流选择之一。本文将带领读者深入理解PHP后端逻辑与MySQL数据库之间的协同工作方式,包括数据的检索、插入、更新和删除操作。文章将通过一系列实用的示例和最佳实践,揭示如何充分利用这两种技术的优势,构建高效、安全且易于维护的动态网站。
|
2月前
|
SQL 关系型数据库 MySQL
PHP与MySQL交互之基础教程
【8月更文挑战第31天】 在数字世界中,数据是推动一切的核心力量。本文将引导你探索PHP与MySQL的协同工作,通过实际代码示例,展示如何建立连接、执行查询以及处理结果集。无论你是初学者还是希望巩固知识的开发者,这篇文章都将为你提供宝贵的实践知识。
|
3月前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
57 3