专栏首页字节脉搏实验室PHP_PCRE回溯次数限制绕过某些安全限制

PHP_PCRE回溯次数限制绕过某些安全限制

因为最近在回顾有关于正则方面的知识,所以突然想起来了这个知识点,整理一篇。 PHP的PCRE库使用的正则引擎是NFA,不同于根据正则一步步匹配确定下一个转移状态的DFA,NFA会在正则表达式匹配不上时进行回溯,尝试其他的状态。 举一个简单的例子。

preg_match('/<\?.*[(`;?>].*/', $code);

当我们传入变量值如下时

$code='<? phpinfo();//abcde'

通过gif图可以看到回溯了8次(刷红代表回溯) 那么这个回溯我们可以进行怎样的利用呢? 显而易见的,如果回溯次数过多,很有可能会导致DOS攻击。

PHP也早就考虑到了这一点所以给pcre设定了一个回溯上限pcre.backtrack_limit, 可以通过var_dump(ini_get('pcre.backtrack_limit'));查询,回溯上限为1000000。

那么如果我们的回溯次数超过了上限会返回什么呢?

通过这个方法我们可以绕过一些正则匹配的机制。 比如说防SQL的WAF

<?php
if(preg_match('/UNION.+?SELECT/is', $input)) {
    die('sql');
}

这里如果输入

$input='UNION/*aaa*/SELECT'

正则匹配的回溯次数也会随着a的数量而增加从而突破pcre.backtrack_limit的限制,进而绕过WAF。

那么如何避免自己的正则被绕过呢?搭配preg_match写判断条件的时候使用全等号===即可。

本文分享自微信公众号 - 字节脉搏实验室(zijiemaiboshiyanshi),作者:叶子

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 智能合约安全审计之路-返回值检查漏洞

    描述:未检查低级别调用的返回值,在solidity中的低级别调用与其他函数调用不同,如果调用中发生了异常并不会将异常传递,而只是返回true或false。因此程...

    字节脉搏实验室
  • 浅谈SSRF(服务器请求伪造)

    SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF...

    字节脉搏实验室
  • Docker常用命令

    集装箱 ———————-容器实例 from镜像模板(下图最左边的)

    字节脉搏实验室
  • ubuntu+Django+python

    众所周知,Django中如果使用的是python3,其官方默认使用的mysqldb是不能用的,原因:额,就是还没开发出来呗。然而,天无绝人之路,我们还可以使用m...

    py3study
  • 批量检测SQL注入工具

    0×01 前言 SQL注入,这个类型的漏洞我真的学了好久好久好久好久,即是我刚刚开始接触安全就学习的第一种漏洞,也是一个迄今为止还在学习的漏洞类型,只...

    奶糖味的代言
  • P2P网贷合规检查实操要点

    网贷行业期盼已久的全国性合规检查标准终于出台——《关于开展 P2P 网络借贷机构合规检查工作的通知》(以下简称《检查通知》)已下发至各省市网贷整治办,通知要求2...

    用户1310347
  • MacOS没有管理员账号的解决办法

    重启电脑,启动时按住command+s,进入单一用户模式 输入 mount -uw /,然后回车 输入 rm /var/db/.AppleSetupDone...

    飞奔去旅行
  • 本地&远程访问一个EJB | 从开发角度看应用架构4

    魏新宇
  • python 图片,字节的相互转换

    py3study
  • 两项基于网络的“黑客”技术

    两项基于网络的“黑客”技术 软件开发和测试中网络环境迁移和数据分析 1   导读 关于智能路由器的这两项技术的介绍,想想还是搞个比较有噱头的标题才能吸引人进来细...

    用户1170933

扫码关注云+社区

领取腾讯云代金券