首页 > 编程语言 >PHP中preg_replace函数解析

PHP中preg_replace函数解析

时间:2024-08-03 22:16:38浏览次数:15  
标签:匹配 preg phpinfo replace mixed 缓冲区 PHP

preg_replace — 执行一个正则表达式的搜索和替换
mixed preg_replace( mixed $pattern, mixed $replacement, mixed $subject)
搜索subject中匹配pattern的部分,以replacement进行替换。 

常见于CTF竞赛中web题目中

1、/g 表示该表达式将用来在输入字符串中查找所有可能的匹配,返回的结果可以是多个。如果不加/g最多只会匹配一个
2、/i 表示匹配的时候不区分大小写,这个跟其它语言的正则用法相同
3、/m 表示多行匹配。什么是多行匹配呢?就是匹配换行符两端的潜在匹配。影响正则中的^$符号
4、/s 与/m相对,单行模式匹配。
5、/e 可执行模式,此为PHP专有参数,例如preg_replace函数。
6、/x 忽略空白模式。

对一个正则表达式模式或部分模式 两边添加圆括号 将导致相关 匹配存储到一个临时缓冲区 中
,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,
最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的
一位或两位十进制数。

<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;

function complex($re, $str) {
   preg_replace( '/(' . $re . ')/ei','strtolower("\\1")', $str);
}


foreach($_GET as $re => $str) {
    echo complex($re, $str). "\n";
}

function getFlag(){
    @eval($_GET['cmd']);
}

#代码源于CTF题目“[BJDCTF2020]ZJCTF,不过如此”,部分解题过程。

其大致含义就是匹配出的任意内容,都用()包含起来,作为子字符串,存在缓冲区,\1是访问括号内的内容

对于该题可构造的部分payload:\S*=${phpinfo()}用来测试

实际为\S*=${getFlag()},其实为了利用/e来利用漏洞,使函数执行

对于payload中${}的解释,它这里其实是一个可变变量
我们输入了${phpinfo()},那么它呢因为被括号包裹了,就会存进缓冲区,而这里用到了/e,就相当于将第二个语句给执行了,就相当于eval(xx),第二个语句也就是\1,而\1的含义是${phpinfo()},他这个时候总的语句呢就是eval(${phpinfo()}),这玩意就相当于变量里面套变量,所以我们需要先执行里面的,也就是${phpinfo()} 中的 phpinfo() 会被当做变量先执行,执行后,即变成 ${1} (phpinfo()成功执行返回true)

标签:匹配,preg,phpinfo,replace,mixed,缓冲区,PHP
From: https://www.cnblogs.com/mindfulpath/p/18341208

相关文章

  • thinkphp连接Oracle
    1、连接准备(自行下载对应版本)PHP驱动扩展 :用于PHP连接OracleOracle即时客户端 :Oracle即时客户端,用于与Oracle通信,必须匹配Oracle版本VC运行库 :不一定安装,服务器中有运行库就不用安装 2、扩展安装php.ini中extension=oci8_12cextension=pdo_oci一般在配置文件中已存在......
  • 【PHP系列】变量覆盖
    环境搭建工具PHPStudyPHP7.3.4审计策略变量覆盖一、$$变量覆盖1.1$$简介1.2漏洞产生二、extract()变量覆盖2.1extract()2.2漏洞产生三、parse_str()变量覆盖3.1parse_str()3.2漏洞产生四、register_globals变量覆盖4.1......
  • 【PHP系列】PHP反序列化--字符逃逸
    概念了解字符逃逸前需要的补充知识点一知识点二字符逃逸—字符增加字符逃逸—字符减少概念在学PHP字符串逃逸之前先了解一下原理是什么,字符串逃逸的原理其实就是让字符串变成可以执行的序列化代码。在序列化和反序列化这个中间过程中,序列化字符增加或减少后,再去反序列化......
  • PHP8-快速脚本参考-全-
    PHP8快速脚本参考(全)原文:PHP8QuickScriptingReference协议:CCBY-NC-SA4.0一、使用PHP要开始用PHP开发,创建一个带有.php文件扩展名的纯文本文件,并在您选择的编辑器中打开它——例如,Notepad、jEdit、Dreamweaver、NetBeans或PHPEclipse。这个PHP文件可以包含任何......
  • 易优cms在phpstudy环境下,可以去除:/index.php?/guanyuwomen/ 中的index.php吗
    针对不同服务器、虚拟空间,运行PHP的环境也有所不同,目前主要分为:Nginx、apache、IIS以及其他服务器。下面分享如何去掉URL上的index.php字符,记得在管理后台清除缓存,对于一些ECS服务器可能要重启nginx等服务!【IIS服务器】可以移步,《iis怎么去掉index.php》【Nginx服务器】在......
  • php面对对象学习
    概念:类是抽象概念,包含各种属性和行为,比如说狗对象是具体概念,如:泰迪类的内容关键词对象定义时不需要加object类的定义类成员成员有三个成员变量,成员方法(函数),类常量类成员变量的声明和初始化类成员变量的访问访问语法$对象名->属性名,也可以当成数组通过pri......
  • 基于SpringBoot的智能购房推荐系统-09040(免费领源码)可做计算机毕业设计JAVA、PHP、爬
    Springboot智能购房推荐系统摘 要近年来随着我国经济的高速发展,房地产业也随之蓬勃发展,尤其是最近国家新出台的房改政策。鼓励居民购房,这对房产公司无疑是一个极好的发展势头。尤为重要的是,近几年随着信息技术和电子商务的快速发展,许多企业都开发了自己房产信息软件。智......
  • 基于Web的心理测试/基于PHP大学生心理健康网站/课程设计
    摘 要计算机网络与信息化管理相配合,可以有效地提高管理人员的工作效能和改进工作的质量。良好的心理测试可以使管理员工作得到更好的管理和应用,并有助于管理员更好地管理心理测试,并有助于解决一些心理不健康的用户。因此一套好的心理测试可以起到很大的效果。该管理系统......
  • 【Think PHP系列】安装
    安装过程中,有几点需要强调一下:一个是php.exe的路径,由于我使用的是phpstudy软件,可以在这里找,相信一定可以找到的。还有就是php版本问题了,提前了解thinkphp6.0需要支持的php版本。以下这两张照片就是复现过程中踩的坑,参考一下:参考......
  • PHP8中match表达式的强劲功能
    hp8中match表达式的强劲功能,让你写代码更加灵活PHP8是PHP语言的最新版本,带来了很多新功能和优化,其中一个最令人振奋的功能是新的match表达式。这个表达式与switch语句类似,但比switch语句更加强大和灵活,使开发人员写代码更加方便,而且代码清晰易读。在本文中,我们将深入研究match表......