preg_replace漏洞e模式函数执行

关于PHP函数preg_replace \e 模式函数执行漏洞

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。

函数的几种匹配模式:

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

关于\\1这个东西:

反向引用

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

​ 这里我自己的理解是,只要一个正则表达式被一个一个括号包围,那么它就将被存放到一个临时缓冲区中,并且,如果存在多个正则表达式被括号包围,那么,就会从左到右依次存放在这个临时缓冲区中,另外,这个临时缓冲区是从1号开始的,也就是说,在正则表达式中,\1有着自己的含义,也就是访问这个缓冲区的第一个表达式,而两个\也是因为一个\要对另一个\进行转义。

​ 那么,看如下代码:

<?php
function test($str){}
echo preg_replace("/s*(.*)s*/ies", "\\1", $_GET["h"]);
show_source(__FILE__);
?> 

​ 那么,当传入的h的值为:

?h=${phpinfo()}

​ 随后,成功执行了phpinfo()函数:

在这里插入图片描述

关于可变变量:

​ 这里就不多说了,关于这方面的内容可以去看PHP的文档:

https://www.php.net/manual/zh/language.variables.variable.php

我们输入了 p h p i n f o ( ) ,那么它呢因为被括号包裹了,就会存进缓冲区,此时他是符合那个过滤函数的,所以要更替为第二个语句,而这里用到了 / e ,就相当于将第二个语句给执行了,就相当于 e v a l ( x x ) ,第二个语句也就是 1 ,而 1 的含义是 {phpinfo()},那么它呢因为被括号包裹了,就会存进缓冲区,此时他是符合那个过滤函数的,所以要更替为第二个语句,而这里用到了/e,就相当于将第二个语句给执行了,就相当于eval(xx),第二个语句也就是\\\\1,而\\\\1的含义是 phpinfo(),那么它呢因为被括号包裹了,就会存进缓冲区,此时他是符合那个过滤函数的,所以要更替为第二个语句,而这里用到了/e,就相当于将第二个语句给执行了,就相当于eval(xx),第二个语句也就是1,而1的含义是{phpinfo()},他这个时候总的语句呢就是eval( p h p i n f o ( ) ) , 这玩意就相当于变量里面套变量,所以我们需要先执行里面的,也就是 {phpinfo()}),这玩意就相当于变量里面套变量,所以我们需要先执行里面的,也就是 phpinfo()),这玩意就相当于变量里面套变量,所以我们需要先执行里面的,也就是{phpinfo()}
中的 phpinfo() 会被当做变量先执行,执行后,即变成 1 ( p h p i n f o ( ) 成功执行返回 t r u e ) ,此时我们呢再执行这个 e v a l {1} (phpinfo()成功执行返回true),此时我们呢再执行这个eval 1(phpinfo()成功执行返回true),此时我们呢再执行这个eval{1},这玩意能正常执行出来,由于我们没有给1赋值,他会给个警告,但是没问题,不影响我们的语句,所以这个时候我们的rce就实现了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/732250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“删边“的并查集------反向并查集

目录 1.题目2.思路3.代码 默认大家都会并查集了 1.题目 小美认为&#xff0c;在人际交往中&#xff0c;但是随着时间的流逝&#xff0c;朋友的关系也是会慢慢变淡的&#xff0c;最终朋友关系就淡忘了。 现在初始有一些朋友关系&#xff0c;存在一些事件会导致两个人淡忘了他们…

如何系统地去学python

学习Python是一个非常有用的技能&#xff0c;无论您是想成为一名软件工程师、数据科学家还是想自动化日常任务&#xff0c;Python都是一个非常强大且流行的编程语言。但是&#xff0c;对于初学者来说&#xff0c;学习Python可能会感到有些困难和混乱。因此&#xff0c;本文将分…

Offer必备算法12_链表_五道力扣题详解(由易到难)

目录 ①力扣2. 两数相加 解析代码 ②力扣24. 两两交换链表中的节点 解析代码 ③力扣143. 重排链表 解析代码 ④力扣23. 合并 K 个升序链表 解析代码1&#xff08;小根堆优化&#xff09; 解析代码2&#xff08;递归_归并&#xff09; ⑤力扣25. K 个一组翻转链表 解…

MongoDB开启事务

MongoDB开启事务 配置单节点。到路径C:\Program Files\MongoDB\Server\4.0\bin 使用记事本以管理员权限打开文件mongod.cfg添加如下配置&#xff1a; replication:replSetName: rs02. 重启MongoDB服务 3. 重启后执行命令 rs.initiate()

使用`pyautogui`和`tkinter` 获取鼠标光标的位置

这段代码是一个简单的Python程序&#xff0c;使用pyautogui和tkinter库创建了一个窗口应用程序&#xff0c;用于获取鼠标光标的位置。 让我们逐行解释代码的功能&#xff1a; 1. #!/usr/bin/python3&#xff1a;这是一个Shebang行&#xff0c;用于指定脚本使用的解释器。 2.…

【蓝牙协议栈】【经典蓝牙】【BLE蓝牙】蓝牙协议规范(射频、基带链路控制、链路管理)

目录 1. 蓝牙协议规范&#xff08;射频、基带链路控制、链路管理&#xff09; 1.1 射频协议 1.2 基带与链路控制协议 1.3 链路管理器 1. 蓝牙协议规范&#xff08;射频、基带链路控制、链路管理&#xff09; 蓝牙协议是蓝牙设备间交换信息所应该遵守的规则。与开放系…

wifi连接上后是怎么提供网络的?

干了六个月的网络协议栈&#xff0c;又回到了wifi老本行&#xff0c;所以我最近又开始研读 Android wifi fwk的源码了 之前还在干wifi的时候就思考过一个问题&#xff0c;wifi区别于蓝牙的一个很明显的点是&#xff0c;wifi可以提供 access to Internet 所以我想看看wifi连接成…

vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载

文章目录 导文文章重点内容效果展示&#xff1a;代码展示这些方法适用于哪些场景 总结 导文 vue2 div滚动条下拉到底部时触发事件(懒加载) 超级简易版本的懒加载 文章重点 内容效果展示&#xff1a; 当div拉到底部的时候&#xff1a; 编辑器返回&#xff1a; 代码展示 在…

substr函数踩坑

##hive和impala的substr函数比对 ###在hive中substr函数使用 select substr(name,0,5) from bd_test; 结果&#xff1a;12345 select substr(name,1,5) from bd_test; 结果&#xff1a;12345 ###impala中substr函数使用 select substr(name,0,5) from bd_test; 结果&#xff…

JAVA后端开发面试基础知识(十)——设计模式

创建型模式 创建型模式的作用就是创建对象&#xff0c;说到创建一个对象&#xff0c;最熟悉的就是 new 一个对象&#xff0c;然后 set 相关属性。但是&#xff0c;在很多场景下&#xff0c;我们需要给客户端提供更加友好的创建对象的方式&#xff0c;尤其是那种我们定义了类&am…

BJFU|计算机网络缩写对照表

之前有过这个题型&#xff0c;但23年没考&#xff0c;所以按需准备 A ACK (ACKnowledgement) 确认 ADSL (Asymmetric Digital Subscriber Line) 非对称数字用户线 API (Applicatin Programming Interface) 应用编程接口 ARP (Address Resolution Protocol) 地址解析协议 ARQ (…

Git - Protocol

4.1 Git on the Server - The Protocols 至此&#xff0c;你应该可以完成大部分日常工作&#xff0c;而这些工作都需要用到 Git。不过&#xff0c;要在 Git 上进行任何协作&#xff0c;你都需要一个远程 Git 仓库。虽然从技术上讲&#xff0c;你可以推送改动到个人仓库&#xf…

银河麒麟服务器操作系统V10【vnc配置多用户登录】

1.添加多用户&#xff08;规划kingbase使用5901窗口&#xff0c;root使用5903&#xff09;&#xff1b; adduser kingbase 2.配置文件&#xff1b; cp -rp /lib/systemd/system/vncserver.service /etc/systemd/system/vncserver:1.servicecp -rp /lib/systemd/system/vncse…

【黑马程序员】Python初始

初始Python Python应用场景 什么是编程语言 安装Python开发环境 Python官网 选择Download 选择对应的Python版本和所要下载的操作系统 下载后直接下一步下一步即可安装成功 测试安装效果 重命名python命令让其使用Python3 echo alias python"python3" >…

编程笔记 Golang基础 046 mssql数据库连接与操作

编程笔记 Golang基础 046 mssql数据库连接与操作 一、连接与操作二、全局连接三、数据库连接字符串四、应用示例小结 数据库操作是现代软件系统不可或缺的一部分&#xff0c;对软件的功能实现、性能优化、数据安全等方面起着至关重要的作用。Go语言中连接和操作Microsoft SQL S…

知名比特币质押协议项目Babylon确认参加2024年在香港数码港举办的Hack.Summit()2024区块链开发者大会。

知名比特币质押协议项目Babylon确认参加2024年在香港数码港举办的Hack.Summit()2024区块链开发者大会。作为比特币生态的领军项目&#xff0c;Babylon积极参与全球区块链领域的交流与合作&#xff0c;此次出席大会将为其提供一个展示项目进展、交流技术与创新思路的重要平台。B…

2402. 2-SAT 问题(tarjan,2-SAT模板题)

活动 - AcWing 给定 n 个还未赋值的布尔变量 x1∼xn。 现在有 m 个条件&#xff0c;每个条件的形式为 “xi 为 0/1 或 xj 为 0/1 至少有一项成立”&#xff0c;例如 “x1 为 1 或 x3 为 0”、“x8 为 0 或 x4 为 0” 等。 现在&#xff0c;请你对这 n 个布尔变量进行赋值&am…

acwing算法提高之数据结构--树状数组

目录 1 专题介绍2 训练 1 专题介绍 本专题用来汇总使用树状数组算法求解的题目。 应用场景&#xff1a;给你长度为n的数组nums&#xff0c;可以改变第i个数的大小&#xff0c;求数组下标区间[left, right]内的前缀和。要求时间复杂度不超过 O ( l o g N ) O(logN) O(logN)。 …

使用 MySQL 实现 Java 版的 hashCode 函数

前提 MySQL 数据库的编码需要设置为 utf8 或 utf8mb4&#xff0c;因为下面给出的代码是以用 utf8 编码储存数据为前提的。 MySQL Function drop function if exists utf8_unicode; create function utf8_unicode(str varchar(1)) returns bigint begindeclare num_utf8 bigi…

【GB28181】SIP协议实践之Windows下VS2019编译eXosip、osip,测试(附工程源码,一键打开编译)

引言 SIP开源库或者GB28181,这里选择了osip和eXosip,但是这两个库的编译使用有些麻烦,源码下来之后编译会出现很多问题,网上也没有找到完整的编译介绍,只能一步一步的找办法解决,以下帮大家整理编译过程。 如果不想编译,可以跳转文章末尾链接直接下载相应工程直接编译即…