PHP中preg_replace函数代码执行特性

首页 / 技术分享 / 正文

0x01 preg_replace函数描述

php中的preg_replace函数是用来执行一个正则表达式并实现字符串的搜索与替换,格式如下:

mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。
参数说明:
$pattern: 要搜索的模式,可以是字符串或一个字符串数组。
$replacement: 用于替换的字符串或字符串数组。
$subject: 要搜索替换的目标字符串或字符串数组。
$limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
$count: 可选,为替换执行的次数。


返回值
如果$subject是一个数组,preg_replace()返回一个数组,其他情况下返回一个字符串。
如果匹配被查找到,替换后的subject被返回,其他情况下返回没有改变的subject,如果发生错误,返回NULL
正则表达式
$pattern中指定的是要搜索的模式字符串,可以是一个字符串,还可以使用正则表达式,而正则表达式中存在修饰符,而这次特性涉及到的就是/e修饰符,/e修饰符是php独有的,它的用法是将preg_replace函数替换的字符串当作php代码执行。

0x02 影响版本

php版本:4.3.0 ~ 5.4.6

在5.4.6版本之后的php版本移除了/e修饰符

0x03 效果演示

首先测试一下正常使用,test被替换成了world
正常

再看一下使用/e修饰符,test被替换成phpinfo();并且执行
e

稍微修改一下即可得到一个简单的命令执行环境
请输入图片描述

打赏
评论区
头像
    头像
    Cc
    2020年12月06日 19:41
    回复

    宇神tql

      头像
      Y5neKO
      2020年12月08日 09:00
      回复

    头像
    pllrry
    2020年12月02日 10:52
    回复

    宇桑,yyds

      头像
      Y5neKO
      2020年12月03日 15:06
      回复

      哟西,你滴,大大滴良民

文章目录