CTF----PHP弱类型比较

CTF学习打卡-----入门级小白篇三

****开始我们今天的学习吧!!!!

PHP

php是一种弱类型语言,对数据的类型要求并不严格,可以让数据类型互相转换。

在php中有两种比较符号: 一种是 ==,另外一种是 ===,都是用来比较两个数值是否相等的操作符,但他们也是有区别的:


  1. == :弱等于。在比较前会先把两种字符串类型转成相同的再进行比较。简单的说,它不会比较变量类型,只比较值。至于怎么转换后续会再赘述。
  2. === :强等于。在比较前会先判断两种字符串类型是否相同再进行比较,如果类型不同直接返回不相等。既比较值也比较类型。

**当要比较的两种字符串的类型相同时,== 和 === 是相等的。

**PHP转换规则

  • 若一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再进行比较。若字符串以数字开头,则取开头数字作为转换结果,不能转换为数字的字符串(例如"aaa"是不能转换为数字的字符串,而"123"或"123aa"就是可以转换为数字的字符串)或null,则转换为0;例如:
 var_dump(12=="12")                                   // true
 var_dump(12=="12aa")                              //true
 var_dump( "admin"==0)								//true
 var_dump(false==""==0==NULL)						//true
  • 布尔值true和任意字符串都弱相等。例如:
 var_dump(true=="hyuf")                   //true
  • 数字和“e"开头加上数字的字符串(例如"1e123”)会当作科学计数法去比较;
  • 0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0;
  • 当字符串被当作一个数值来处理时,如果该字符串没有包含’.’,‘e’,'E’并且其数值在整形的范围之内,该字符串作为int来取值,其他所有情况下都被作为float来取值,并且字符串开始部分决定它的取值,开始部分为数字,则其值就是开始的数字,否则,其值为0。

攻防世界练习

1.simple_php

题目描述:小宁听说php是最好的语言,于是她简单学习之后写了几行php代码。

CTF----PHP弱类型比较_第1张图片题目场景如上图所示。

解析:

  1. 分析上述代码,这是一道关于PHP弱类型比较的题,有关知识点上面已经赘述。首先我们分析上述代码,意思是要通过get请求得到a 和 b 的值,如果$a==0 并且 a 为 真 时 得 到 f l a g 1 的 值 , 如 果 a 为真时得到flag1的值,如果 aflag1b 为数字时跳出循环,如果$b>1234时得到flag2的值。
  2. 首先对于a,我们可以直接给它传一个字符串"a",可以得到“a”==0 并且 $a为真。

CTF----PHP弱类型比较_第2张图片 3.对于b值,我们可以直接给它传一个“12345b”,这样既不是数字,并且在和1234比较的时候可直接转为12345。
CTF----PHP弱类型比较_第3张图片

结尾

今天的分享就到这吧,我们明天继续!!!!

你可能感兴趣的:(CTF,php)