php特性刷题
php特性
Web89

数组绕过原理:preg_match()只能处理字符串,当传入的subject是数组时会返回false intval()用于获取变量的整数值。也可用于进制的转化
PHP 是一门弱类型语言不必向 PHP 声明该变量的数据类型。PHP 会根据变量的值,自动把变量转换为正确的数据类型。
Web90
字符绕过:intval()而言,如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值。如果字符串第一个是‘-’,则从第二个开始算起。如果参数是符点数,则返回他取整之后的值。
int intval ( mixed $var [, int $base = 10 ] )
参数说明:
$var:要转换成 integer 的数量值。
$base:转化所使用的进制。
如果 base 是 0,通过检测 var 的格式来决定使用的进制:
如果字符串包括了 “0x” (或 “0X”) 的前缀,使用 16 进制 (hex);否则,如果字符串以 “0” 开始,使用 8 进制(octal);否则,将使用 10 进制 (decimal)。
Web91

一个正则判断
去看就完事了正则表达式全解析+正则表达式例子详解
m是多行匹配,i是忽略大小写
匹配变量中多行开头到结尾要有php
匹配变量中一行行开头到结尾要有php
Web92

关于intval()函数的用法看web90
这道题意思是num这个变量转化为八进制是4476,还是考intval的用法
Web93

相比上一题多了匹配正则 不能出现字母 断了16进制(0x) 8进制(0)不受影响,进制绕过
Web94

strpos() 函数返回字符串在另一字符串中第一次出现的位置。如果存在,返回数字,如果没有找到该字符串,则返回false.所以num值中要出现0,算一个比较函数
第三个判断就限制了八进制 如果num==010574 strpos()返回字符串第一次出现的位置就是0,第三个判断就满足了就绕不过了
浮点绕过
Web95

Intval()函数会将输入的数前的“空格”和“+”(有且仅有)可当成输入的数为正数,一个绕过方法
Web96

Highlight_file可带路径,所以变量可以是路径
Web97

MD5是一种散列函数,是哈希算法的一种,可以将任意长度的输入,通过散列算法变换成128位的散列值
MD5加密有4种绕过方式1、0e绕过1、数组绕过1、MD5碰撞1、MD5SQL注入
这道题需要用到===强比较(判断内容的基础上,还会判断类型是否相同),所以不能用0e弱比较绕过,用数组绕过
由于md5函数无法处理数组,会返回null,所以md5加密后的结果是下面这样
null === null 满足条件就可以绕过了

Web98

用到了?三元运算符 即前面表达式为真,则执行:前的,反之执行:后的
“=&“的一个说明
$a = $b; //把$b赋值给$a,如果赋值之后,$b改变了,$a不变
$a =&$b; //把$b的地址传递给$a,这时候,$a和$b都指向内存中的同一块地址,所以如果赋值后,$b改变,$a也会改变
如果$_GET有东西传参进去就 将$_GET方法变成$_POST方法
思路:随便传一个get值,不能是flag=flag就行,并传post值HTTP_FLAG=flag 在判断highlight_file时就能通过

Web99

array_push() 函数向数组尾部插入一个或多个元素。
array_push(array,value1,value2…)
$a=array(“a”=>”red”,”b”=>”green”);
array_push($a,”blue”,”yellow”); 两种使用方式
如果数组
file_put_contents() 函数把一个字符串写入文件中。如果成功,该函数将返回写入文件中的字符数。如果失败,则返回 False。
in_array — 检查数组中是否存在某个值{
in_array(mixed $needle, array $haystack, bool $strict = false): bool
大海捞针,在大海(haystack)中搜索针( needle),如果没有设置 strict 则使用宽松的比较。 }36-846的随机写入数字 有一个概率问题 到底会有什么会在allow数组中 1的可能性是最大的
这道题是弱比较类型所以 字符串类型绕过1.php==1
通过post传参写入 rce
然后访问2.php就行

Web100

is_numeric — 检测变量是否为数字或数字字符串
如果
value是数字或数字字符串, 返回**true**;否则返回**false**。
这里是个大坑 因为赋值运算优先于逻辑判断,且赋值运算逻辑为true 所以这个$v0与后面的$v2$v3无关
还有$v2中不能出现; 考虑PHP语句最后一句可不加;直接闭合

正常RCE
ctfshow{2d6dd5c50x2d8c980x2d4c3e0x2da10e0x2dc6b39863b5e2}
0x2d=”-”
ctfshow{2d6dd5c5-8c98-4c3e-a10e-c6b39863b5e2}
web101
考点:PHP 反射机制ReflectionPHP: ReflectionClass - Manual
ReflectionClass 类报告了一个类的有关信息。

这样可以echo出asd类中的属性及其方法

注意这次的flag值少了一位,自己猜一下
Web102

substr() 函数返回字符串的一部分。substr(string,start,length)
call_user_func — 把第一个参数作为回调函数调用
匹配变量中多行开头到结尾要有php
匹配变量中一行行开头到结尾要有php