测试代码: 

<?php

$a="flag.php";

if(preg_match("/flag/",$a)){
	echo "错误";
}
else{
	echo"正确";
}
?>

测试图片:

题目:

Polar靶场WEB简单狗黑子的RCE 

 一.转义绕过

$a="f\lag.php";

转义原理

  • 在 shell 中,反斜杠\用于转义特殊字符。
  • f\lag.php → 解析为flag.php(文件名中的转义被忽略)。

 测试图片:

二.数组绕过

$a=["flag.php"];
$a=array("f\lag.php");

 原理:

  1. 数组作为参数preg_match()期望的参数是字符串,但传入的是数组["f\lag.php"]
  2. 类型不匹配:PHP 会发出警告(Warning: preg_match() expects parameter 2 to be string, array given),但表达式返回false
  3. 条件判断:由于preg_match()返回false,条件判断为false,因此执行else分支,输出 "正确"。

 测试图片:

 三.类型混淆绕过

$a="flag.php"*10;

原理: 

  1. 如果右操作数是整数,PHP 会尝试将左操作数转换为数值类型(通常是 0),然后执行数值乘法。
  2. 由于 $a 是整数 0,PHP 会将其转换为字符串 "0" 进行匹配。字符串 "0" 中显然不包含 f,因此匹配失败,返回 0

  测试图片:

四.回溯限制次数绕过

默认回溯限制通常是 1000,000(100 万)

$a = str_repeat("a", 1000000) . "flag.php";

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐