PHP89

关键字解释
highlight_file() 函数对文件进行 PHP 语法高亮显示。语法通过使用 HTML 标签进行高亮。
preg_match 函数用于执行一个正则表达式匹配。
注:返回 的匹配次数。 它的值将是 0 次(不匹配)或 1 次,因为 preg_match() 在第一次匹配后 将会停止搜索
intval() 函数用于获取变量的整数值。
如:你输入的是1000.0 最后它获取的是1000而不是1000.0。
当我们理解这些关键字后很容易就能看出来解题思路
1、 通过get传参num来传入数据
2、 当传入传入数据后isset判断有数据,将传进来的参数赋值给 $num
3、 接下来就是preg_match 的正则判断了不能输入【0-9】也无法输入小数点
4、 不过当了解过数组绕过这个知识点的时候就大概有了解题方法了
数组绕过:
当你传入的参数为数组类型的,则会返回null这样就绕过了正则验证
5、 而intval会获取数组中的整数值
/?num[]=1
php90

关键字上方已经解释过了就不解释了
直接开始解题吧
1、 还是老规矩num传参判断是否由数据赋值给$num
2、 但是第一个if判断不能为 4476 第二个判断需要 == 4476这里就学到了
判断相等有两个符号
1. == 只判断数值是否相等,不管变量类型是什么
2. === 要求数值,和类型都要相等
3、 这样我们就知道第一个if判断值和数据类型。那么如何让他不为4476的整数型呐?
4、 下面我们可以看到第二个if判断使用intval() 这个是取整数值 这样就简单了我们使用浮点数不就绕过了嘛
/?num=4476.0
PHP91

这题新知识点
1. PHP中preg_match()正则匹配
2. ^:开始匹配 $:匹配结束
3. /i: 表示匹配的时候不区分大小写;
4. m: 表示换行匹配,指就是匹配换行符两端的潜在匹配
5. 了解这些后我们可以看到两个if判断第一个存在多行匹配,第二个不存在
6. 我们要做的是输入的数据可以满足第一个if条件但是不满足第二个if条件可以使用
/?cmd=php%0a123
%0a(表示换行)
PHP92

这题就更简单了
1、 第一个if判断 == 值判断值是否相等
2、 第二个if判断 == 取整数值判断是否相等
3、 我们要做到第一个if判断不成立第二个判断成立,那该怎么办?
4、 这里我们不能使用 4476.0 这个因为==判断 这个是成立的这里需要使用 4476.1 这样第一个就不成立第二个取整数中值后还是成立
/?num=4476.1
PHP93

这题就更简单了
1、 三个if判断 发现比上题多出了一个 正则判断
2、 但是当我们使用上题的解题思路发现我们传参的值根本不会经过中间if判断哈哈
3、 所以Simple
/?num=4476.1
PHP94

新知识点
strpos() 函数查找字符串在另一字符串中第一次出现的位置(区分大小写
返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。
注释: 字符串位)置从 0 开始,不是从 1 开始。
2、 这里是!strpos() 那么就是如果没有找到为false !就是反的 为 true 所以需要有 0
3、 但是仔细观察这里判断都是 === 判断数据类型 这样你好像就可以使用 4476.0了吧
/?num = 4476.0
PHP95

1、 这里由过滤了 " . "的存在意味我们不能使用4476. 了
2、 我们需要不等于 4476 并且不能存在 . 又要存在 0 最后还要是整数 4476
3、 这里我们要了解下 intval 了
● 如果字符串包括了 "0x" (或 "0X") 的前缀,使用 16 进制 (hex);否则,
● 如果字符串以 "0" 开始,使用 8 进制(octal);否则,
● 将使用 10 进制 (decimal)。
4、 这样我们就知道还可以使用进制 进制转换后我们发现 八进制符合这个
5、 但是我们发现使用八进制还是无法成功这是因为 intval()取整数值是如果最左侧为0那么就为0了不过我们可以加个 “+”号来使它认识你为正数
/?num= +010574
PHP96

这题考点
需要你输入的值为 flag.php 但是又不能== flag.php
1、 这里我们可以使用 ./来表示当前目录或者使用绝对路径来绕过
2、 因为他是 == 而不是 === 所以还是可以绕过的
/?u=./flag.php
PHP97

这题考点
1、 你输入的两个值不能相当
2、 但是md5加密后有需要相等
使用数组绕过第一个并且完成
a[]=1&b[]=2