首页
学习
活动
专区
圈层
工具
发布

PHP利用PCRE回溯次数限制绕过某些安全限制

这种时候,如何绕过 is_php() 函数来写入 webshell 呢? 这道题看似简单,深究其原理,还是值得写一篇文章的。...0x01 正则表达式是什么 正则表达式是一个可以被「有限状态自动机」接受的语言类。 「有限状态自动机」,其拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。...0x03 PHP 的 pcre.backtrack_limit 限制利用 PHP 为了防止正则表达式的拒绝服务攻击(reDOS),给 pcre 设定了一个回溯次数上限 pcre.backtracklimit...php if(preg_match('/UNION.+?SELECT/is', $input)) { die('SQL Injection'); } 这里涉及到了正则表达式的「非贪婪模式」。...所以,我们仍然可以通过发送大量 a,来使回溯次数超出 pcre.backtrack_limit 限制,进而绕过 WAF: ? 0x05 修复方法 那么,如何修复这个问题呢?

2.2K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    PHP中有关正则表达式的函数集锦

    当时初学PHP根本不知道PHP有专门抓包的工具,就像Simple_html_dom.php(在我的其他博文中有提到),之前根本就不知道有这东西,所以就自己废着劲去学习正则表达式,然后再学习PHP中正则表达式的函数是如何使用的...PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数。...])     preg_match ()函数在$content字符串中搜索与$pattern给出的正则表达式相匹配的内容。...二者与preg_match的功能类似,但函数返回的是一个布尔值,表明匹配成功与否。需要说明的是,POSIX扩展库函数的第一个参数接受的是正则 表达式字符串,即不需要使用分界符。...进行全局正则表达式匹配   1.preg_match_all()   与preg_match()函数类似。如果使用了第三个参数,将把所有可能的匹配结果放入。

    1.5K50

    PHP.步步为营 | 正则表达式详析 与 诸多运用实例

    PHP正则表达式(PCRE)定义 正则表达式是对字符串进行操作的一种逻辑公式, 就是用一些特定的字符组合成一个规则字符串,称之为正则匹配模式。...PHP中使用PCRE库函数进行正则匹配, 比如上例中的preg_match用于执行一个正则匹配, 常用来 判断一类字符模式是否存在。 ---- 2....正则表达式的基本语法 PCRE库函数中,正则匹配模式使用分隔符与元字符组成; 分隔符可以是非数字、非反斜线、非空格的任意字符。...通过正则表达式可以匹配一个模式, 得到更多的有用的数据。 关于表达式(.*?)的理解: 1、 ....php //\\2是一个后向引用的示例. 这会告诉pcre它必须匹配正则表达式中第二个圆括号(这里是([\w]+)) //匹配到的结果. 这里使用两个反斜线是因为这里使用了双引号.

    2.2K10

    正则表达式模式修正符简单测试

    正则表达式模式修正符: i 忽略大小写 m 多行视作一行 g 全局匹配 s .圆点匹配换行符,默认不包括换行 x 空白字符除了被转义的或在字符类中的以外完全被忽略,在未转义的字符类之外的 # 以及下一个换行符之间的所有字符...e preg_replace() 在替换字符串中对逆向引用作正常的替换 u 此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。...U : 正则表达式的特点:就是比较”贪婪“ .* .+ 所有字符都符合这个条件 <?...php $str="abCd efg"; preg_match("/c(.*)e/is", $str,$m); //s .圆点匹配换行符,默认不包括换行 //i 忽略大小写 //m 修改^开头的作用...,换行后也可以用 preg_match("/^e/", $str,$m);//有换行时,这样匹配不到 preg_match("/^e/m", $str,$m);//array(1) { [0]=> string

    81640

    PHPMailer 代码执行漏洞(CVE-2016-10033)分析(含通用POC)

    But please keep this copyright notice. */ return (boolean)preg_match...An older regex that doesn't need a recent PCRE return (boolean)preg_match(...FILTER_VALIDATE_EMAIL); } } 其他的地方我就不分析了,只分析上面这个函数,这个函数有这个特点 默认patternselect==‘auto’,它会自动选择一个方式对...的检查,目标PHP环境必须有以下两个条件: PHP版本小于5.2.0 PHP不支持正则表达式,即没有安装PCRE扩展(默认是安装的) 那么如果目标PHP环境不满足上述条件,是不是就绝对不会出现漏洞了呢?...如果想把漏洞变成一个可用的好漏洞,需要去绕过Email的正则,我们来分析一下: <?php preg_match( '/^(?!(?>(?1)"?(?>\\\[ -~]|[^"])"?(?

    2.5K20

    PHP正则表达式的模式修正符

    PHP在处理正则表达式的时候,在最后面可以加上诸如/i, /is, /s, /isU的选项,他们都代表什么含义呢? 其实他们是PHP正则表达式的模式修正符,用于对正则表达式的补充。...如preg_match('/\[TOC\]/i',$str) 这句话中的小写字母i,他跟在正则表达式后面,起的作用是匹配时忽略大小写 所以,上述正则表达式可以匹配诸如 [toc]、[ToC]、或者[TOC...U (PCRE_UNGREEDY) 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束,常用在采集程序上的正则表达式。本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上“?”才变得重复。...X (PCRE_EXTRA) 此修正符启用了一个PCRE中与Perl不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充。...e/U匹配abceadeddd中的abceade而不是abce,如果不加U修正,则匹配abceu(PCRE_UTF8)此修正符启用了一个PCRE中与Perl不兼容的额外功能。

    1.8K20

    正则表达式中的子组模式

    作者:西瓜玩偶(racnil070512 at hotmail dot com) 一、基础知识 在PCRE正则表达式中,我们可以利用圆括号定义一个子组,我们可以使用preg_match函数(其他函数的信息请参考...PHP官方API文档)的第三个参数捕获圆括号中匹配的内容: preg_match('#color\h*:\h*([A-Za-z]*)#', 'color: red', $matches); print_r...PCRE中的子组的功能其实非常强大,但是PHP官方的API文档并没有对齐作过多的介绍。下面的文章尝试对PCRE中的子组功能做一个初步的介绍。...=)就可以构造一个前向探测: '#\d*(?= mm)#' 这个正则表达式会匹配如'100 mm'这样的字符串。...注意子组正则表达式里面加了一个\d,因为不加它,当读入'100 mm'的时候,表达式还是会匹配到'10',这是因为'0 mm'不匹配' mm'。

    2.2K120

    正则表达式

    一、常用函数 preg_match preg_match_all preg_replace preg_replace_callback 二、 PCRE模式 1.分隔符 分隔符可以使任意非字母数字...\D 任意非十进制数字 \s 任意空白字符 \S 任意非空白字符 \w 任意单词字符 \W 任意非单词字符 锚 ^开始 $结束 4.模式修饰符 i 不区分大小写 S 当一个模式需要多次使用的时候...中国目前与14亿人口,也是最大的人口国度"; //匹配数字 preg_match("/[\d]+/",$str,$num); print_r($num); //子模式匹配 preg_match("/(...$num); print_r($num); //匹配所有 preg_match_all("/[\d]+/",$str,$num); print_r($num); //preg_replace — 执行一个正则表达式的搜索和替换...12/24/2001\n"; // 回调函数 function next_year($matches) { // 通常: $matches[0]是完成的匹配 // $matches[1]是第一个捕获子组的匹配

    58910

    maccms v8 80w 字符的 RCE 分析

    匹配一个字符a,并再次将控制权交给b,这样一个过程,被称之为回溯, 如此反复,最终得到匹配结果, 这个过程中一共发生了3次回溯。...pcre.jit "1" PHP_INI_ALL PHP 7.0.0 起可用 pcre.backtrack_limit:PCRE的最大回溯数限制 pcre.recursion_limit:PCRE的最大递归数限制.../is",$StrFiltValue)==1){ chkShow(); } if(preg_match("/".$ArrFiltReq."...——匹配所有字符,且只匹配一次 但是这句话中开起来非贪婪模式,导致这段正则不断回溯,如我定义一个文本为:UNION(panda)SELECT 其匹配过程大致如下: 首先匹配到UNION 进入子表达式检测...(以此类推) 最终由S匹配到S后,结束回溯 该过程动画如下: 所以在这里,我们就可以利用最大匹配的次数,来绕过preg_match("/".

    98530

    【PHP小课堂】PHP中PRGE正则函数的学习

    PHP中PRGE正则函数的学习 正则表达式的作用想必不用我多说了,大家在日常的开发中或多或少都会接触到。特别是对于一些登录(邮箱、手机号)以及网页爬虫来说,正则表达式就是神器一般的存在。...在 PHP 中,有两种处理正则表达式的函数,今天我们就来学习其中的一种。...PCRE 与 POSIX 前面说到,有两种处理正则的函数库,一个是 POSIX 为主的 ereg_xxx 这种函数,不过它们已经被淘汰了,并不是很推荐使用。...PCRE 的函数库对 perl 支持非常友好,同时,它也是支持 POSIX 扩展语法的正则表达式。具体的正则语法规则和模式修饰符相关的信息可以在文末的链接中查阅。...preg_match("///", $str); print_r(preg_last_error()); // Warning: preg_match(): Delimiter must not be

    82010

    posix,perl正则表达式区别

    1、正则表达式(Regular Expression,缩写为regexp,regex或regxp),又称正规表达式、正规表示式或常规表达式或正规化表示法或正规表示法,是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串...例如,在Perl中就内建了一个功能强大的在正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。...2、PHP同时使用两套正则表达式规则,一套是由电气和电子工程师协会(IEEE)制定的POSIX Extended 1003.2兼容正则(事实上PHP对此标准的支持并不完善),另一套来自PCRE(Perl...U(PCRE_UNGREEDY): 使“?”的默认匹配成为贪婪状态的。 X(PCRE_EXTRA): 模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充。...默认情况下,一个反斜线后面跟一个没有特殊意义的字母被当成该字母本身。 u(PCRE_UTF8): 模式字符串被当成UTF-8。

    1.8K20

    正则表达式详解

    正则表达历史   正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。...下面我们一起来看看: 模式修正符 -- 解说正则表达式模式中使用的修正符 说明   下面列出了当前在 PCRE 中可能使用的修正符。括号中是这些修正符的内部 PCRE 名。...X(PCRE_EXTRA)   此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式中的任何反斜线后面跟上一个没有特殊意义的字母导致一个错误,从而保留此组合以备将来扩充。...u(PCRE_UTF8)   此修正符启用了一个 PCRE 中与 Perl 不兼容的额外功能。模式字符串被当成 UTF-8。...[:lower:]] 任何小写字母 [[:punct:]] 任何标点符号 [[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F] 7.3 确定重复出现 到现在为止,你已经知道如何去匹配一个字母或数字

    2.1K10
    领券