【WEB】[php] preg_match()绕过
CSDN CTF WEB详细 笔记 php]本文针对 Polar 靶场 WEB 简单狗黑子的 RCE,介绍四种绕过preg_match("/flag/", $a)的方法。一是转义绕过,用f\lag.php,shell 解析时忽略转义符还原为 flag.php;二是数组绕过,传入数组使preg_match因类型不匹配返回 false;三是类型混淆,字符串乘整数转为 0,避免匹配;四是回溯限制绕过,构
·
测试代码:
<?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");
原理:
- 数组作为参数:
preg_match()期望的参数是字符串,但传入的是数组["f\lag.php"]。 - 类型不匹配:PHP 会发出警告(
Warning: preg_match() expects parameter 2 to be string, array given),但表达式返回false。 - 条件判断:由于
preg_match()返回false,条件判断为false,因此执行else分支,输出 "正确"。
测试图片:


三.类型混淆绕过
$a="flag.php"*10;
原理:
- 如果右操作数是整数,PHP 会尝试将左操作数转换为数值类型(通常是 0),然后执行数值乘法。
- 由于
$a是整数0,PHP 会将其转换为字符串"0"进行匹配。字符串"0"中显然不包含f,因此匹配失败,返回0。
测试图片:

四.回溯限制次数绕过
默认回溯限制通常是 1000,000(100 万)
$a = str_repeat("a", 1000000) . "flag.php";
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)