preg_replace

XCTF ics-05

a 夏天 提交于 2020-04-04 18:01:35
一.进入实验环境   1.进入后,发现只有一处点了有反应:      进去后啥也没有,右键查看源码,发现给了我们一个提示: page?index, 感觉应该和文件包含漏洞有关 。   我们用php的伪协议 php://filter来读取目标文件内容, 构造 ?page=php: // filter/read=convert.base64-encode/resource=index.php      这是经过base64编码后的,我们要对他解码并输出,   2.打开之后,我们查看关键的源码:   通过分析源码,我们首先要伪造一个xff为 127.0.0.1 去发起请求,这里有一个 preg_replace函数。   语法:mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])    特别说明:    /e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。   提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。   安全威胁分析:   通常subject参数是由客户端产生的

SQL注入-绕过过滤规则

安稳与你 提交于 2020-03-23 23:06:25
3 月,跳不动了?>>> 过滤规则产生的原因 前两篇举例了SQL注入Get请求/SQL注入Post请求的案例,都是因为程序要接收用户输入的变量或者URL传递的参数,并且参数或变量会被组成 SQL语句的一部分被执行。这些数据我们统称为外部数据,在安全领域有一条规则:一切外部数据是不可信任的。所以我们需要通过各种方式对数据进行检测和过滤。 扩展:PHP的过滤函数 preg_replace(mixed $pattern , mixed $replacement , mixed $subject) $pattern: 匹配的正则表达式 $replacement: 用于替换的字符串戒字符串数组 $subject: 要查找替换的目标字符串戒字符串数组 SQL关键字符过滤(and、or、 union、select等) 绕过过滤关键字的方法 #过滤注释/*、--、#,过滤空格,过滤select,union关键字 function blacklist($id) { $id= preg_replace('/[\/\*]/',"", $id); //strip out /* $id= preg_replace('/[--]/',"", $id); //Strip out --. $id= preg_replace('/[#]/',"", $id); //Strip out #. $id= preg

Ecshop如何解决Deprecated: preg_replace()报错

喜夏-厌秋 提交于 2020-03-02 04:26:35
今天安装Ecshop后,运行出现各种问题,其中 Deprecated: preg_replace() 之类的报错最多,下面贴出解决方案: 错误原因:   preg_replace() 函数中用到的修饰符 /e 在 PHP5.5.x 中已经被弃用了。    如果你的PHP版本恰好是PHP5.5.X,那你的ECSHOP肯定就会报类似下面这样的错误:    Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in...... 解决办法:    1. Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in \includes\cls_template.php on line 300        原有内容:       return preg_replace("/{([^\}\{ ]*)}/e", "\$this->select('\\1');", $source);     修改后内容:       return preg_replace_callback("/{([^\}\{ ]*)}/", function($r) {

PHP preg_replace()正则替换字符串

馋奶兔 提交于 2020-03-02 04:22:04
PHP preg_replace()正则替换,与Javascript 正则替换不同,PHP preg_replace() 默认就是替换所有符号匹配条件的元素。 用程序处理的数据并不总是预先以数据库思维设计的,或者说是无法用数据库的结构去存储的。 比如模版引擎解析模版、垃圾敏感信息过滤等等。 一般这种情况,我们用正则按我们的规则去匹配preg_match、替换preg_replace。 但一般的应用中,无非是些数据库CRUD,正则摆弄的机会很少。 根据前面说的,两种场景:统计分析,用匹配;处理用替换。 PHP preg_replace() 正则替换,与Javascript 正则替换不同,PHP preg_replace() 默认就是替换所有符号匹配条件的元素。 preg_replace (正则表达式, 替换成, 字符串, 最大替换次数【默认-1,无数次】, 替换次数) 大部分语言的正则表达式都是差不多的,不过也有细微的差异。 PHP 正则表达式 正则字符 正则解释 \ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配字符“n”。“\\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $

nagiosQL访问时报错PHP message: PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

与世无争的帅哥 提交于 2020-03-02 04:21:46
nagiosQL安装环境: CentOS release 6.4 (Final) php-5.5.4 nagiosql_320 nginx version: nginx/1.2.3 安装一切正常,当访问nagiosQL界面时会提示: PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 查看nginx日志提示: PHP message: PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead 解决方法: 由于方法preg_replace()为PHP 5.5.x 中废弃的特性,官方建议需要在代码中将preg_replace()替换为函数preg_replace_callback,可以问题解决。 (具体请见官方介绍: http://www.php.net/manual/zh/migration55.deprecated.php ) 此问题涉及到nagiosQL文件: /usr/local/nagios/nagiosql/libraries/pear/HTML/Template/IT.php

难搞的preg_replace

只愿长相守 提交于 2020-03-02 04:20:10
preg_replace -- 执行正则表达式的搜索和替换 说明 mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) 在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。 replacement 可以包含 \\n 形式或(自 PHP 4.0.4 起)$n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。 对替换模式在一个逆向引用后面紧接着一个数字时(即:紧接在一个匹配的模式后面的数字),不能使用熟悉的 \\1 符号来表示逆向引用。举例说 \\11,将会使 preg_replace() 搞不清楚是想要一个 \\1 的逆向引用后面跟着一个数字 1 还是一个 \\11 的逆向引用。本例中的解决方法是使用 \${1}1。这会形成一个隔离的 $1 逆向引用,而使另一个 1 只是单纯的文字。 //1.进行字符串的查找的替换 $str =

php正则替换函数-----preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )

江枫思渺然 提交于 2020-03-02 04:19:30
preg_replace — 执行一个正则表达式的搜索和替换 说明 mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) 搜索 subject 中匹配 pattern 的部分, 以 replacement 进行替换。 参数 pattern 要搜索的模式。可以使一个字符串或字符串数组。 可以使用一些 PCRE修饰符 。 replacement 用于替换的字符串或字符串数组。如果这个参数是一个字符串,并且 pattern 是一个数组,那么所有的模式都使用这个字符串进行替换。如果 pattern 和 replacement 都是数组,每个 pattern 使用 replacement 中对应的 元素进行替换。如果 replacement 中的元素比 pattern 中的少, 多出来的 pattern 使用空字符串进行替换。 replacement 中可以包含后向引用 \\ n 或 $ n ,语法上首选后者。 每个 这样的引用将被匹配到的第 n个捕获子组捕获到的文本替换。 n 可以是0-99, \\0 和 $0 代表完整的模式匹配文本。 捕获子组的序号计数方式为:代表捕获子组的左括号从左到右, 从1开始数。如果要在

PHP正则表达式替换函数preg_replace

冷暖自知 提交于 2020-02-28 20:03:56
preg_replace正则表达式替换函数对于我来说,现在非常喜欢它。不仅能准确、快速的处理字符串,还能让我从新审视正则表达式的重要性。正则表达式语言对于我来说,就像人类听不懂鸟语一样,想懂它却那么难以交流,看来是要好好的学习学习正则表达式语法啦。这里有30分钟 正则表达式入门 教程,多么想和他熟悉熟悉,懂他能给工作带来很大的方便,所以拿下正则表达式是迫在眉睫的事情。 preg_replace — 执行一个正则表达式的搜索和替换 mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) 说明:搜索subject中匹配pattern的部分, 以replacement进行替换。 preg_replace参数补充说明: 1、replacement 可以包含 \\n 形式或 $n 形式的逆向引用,首选使用后者。每个此种引用将被替换为与第 n 个被捕获的括号内的子模式所匹配的文本。n 可以从 0 到 99,其中 \\0 或 $0 指的是被整个模式所匹配的文本。对左圆括号从左到右计数(从 1 开始)以取得子模式的数目。 2、对替换模式在一个逆向引用后面紧接着一个数字时(如 \\11),不能使用 \\ 符号来表示逆向引用

漏洞复现篇——任意代码命令执行漏洞复现及防御

*爱你&永不变心* 提交于 2020-02-28 05:59:01
什么是代码执行: 当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能够控制这个字符串,将造成代码注入漏洞。 代码执行函数: 在php中:eval,assert,preg_replace(‘/*/e’, ' r e t = " 1 " ; ′ , ret = "\\1";', r e t = " 1 " ; ′ , data); 在asp中:eval, exevute,executeglobal 在jsp中:jsp中没有php中的eval函数,但是可以使用反射机制,使用基于反射机制的表达式引擎,如0GNL,SpEL,MVEL等 发现漏洞: 由于thinkphp存在代码执行漏洞,我们可以使用谷歌语法来搜索这类网站。 如:inurl:think.php 学习代码审计,自己找一些代码执行漏洞 实验环境: PHPstudy 火狐浏览器 模拟实验 直接执行——在www目录下创建2个php文件,分别写入简单的代码,url后加 ?data=phpinfo(); 即可 eval() 函数示例: <?php $data = $_GET [ 'data' ] ; eval ( "\$ret = $data ;" ) ; echo $ret ; ?> preg_replace() 函数示例: <?php $data = $_GET [ 'data' ] ; echo preg_replace

php函数preg_replace()

荒凉一梦 提交于 2020-02-20 17:08:09
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: 可选,为替换执行的次数。 PHP 的 preg_replace()函数存在一个安全问题:php5.5以上废除/e. /e 修正符使 preg_replace() 将 replacement 参数当作 PHP 代码(在适当的逆向引用替换完之后)。提示:要确保 replacement 构成一个合法的 PHP 代码字符串,否则 PHP 会在报告在包含 preg_replace() 的行中出现语法解析错误。 示例: preg_replace("/test/e",$_GET["h"],