【WEB】[php] preg_match()绕过

测试代码: 

<?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";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值