reDOS攻击

正则表达式回溯:

当涉及到正则表达式的回溯时,让我们来看一个具体的例子。

考虑以下正则表达式模式 a+b,其中 a+ 表示匹配一个或多个连续的字符 "a",b 表示匹配字符 "b"。

现在,假设有一个输入字符串为 "aaab",我们试图将这个字符串与模式进行匹配。以下是回溯的过程:

  1. 引擎开始尝试匹配 a+,它找到了第一个 "a"。

  2. 然后引擎尝试匹配更多的 "a",发现了两个额外的 "a"。

  3. 此时,引擎已经匹配了三个 "a",接下来它尝试匹配字符 "b"。

  4. 因为输入字符串中的下一个字符是 "b",引擎成功地匹配了 "b",整个匹配成功。

但是,如果我们考虑一个不匹配的场景,比如输入字符串为 "aaac"。在这种情况下,回溯过程如下:

  1. 引擎开始尝试匹配 a+,它找到了第一个 "a"。

  2. 然后引擎尝试匹配更多的 "a",发现了两个额外的 "a"。

  3. 此时,引擎已经匹配了三个 "a",接下来它尝试匹配字符 "b"。

  4. 由于输入字符串中的下一个字符是 "c",引擎无法匹配 "b"。

  5. 这意味着整个模式匹配失败。引擎开始回溯,尝试其他可能的匹配路径。

  6. 引擎回溯到第二个字符 "a",重新尝试匹配 a+

  7. 引擎再次找到了两个额外的 "a",然后尝试匹配字符 "b"。

  8. 由于输入字符串中的下一个字符仍然是 "c",引擎仍然无法匹配 "b"。

  9. 再次回溯,引擎继续尝试其他的匹配路径,但都失败了。

  10. 最终,整个模式匹配失败。

这个例子展示了当模式无法匹配输入时,正则表达式引擎会回溯到之前的位置,尝试其他可能的匹配路径。当处理复杂的正则表达式或大量数据时,回溯可能会导致性能下降

reDOS攻击简介:

Redos(正则表达式拒绝服务攻击)是一种针对使用正则表达式的应用程序的一种类型的拒绝服务攻击。

在正则表达式中,存在一些复杂的模式,称为“可回溯的”(Backtracking)。当使用这些模式来匹配字符串时,可能会导致回溯操作消耗大量的时间和计算资源。

攻击者可以构造特定的输入,使得正则表达式的回溯机制不断进行操作,耗尽大量的 CPU 时间和内存资源。这导致服务器无法处理其他正常的请求,造成拒绝服务。

计算(回溯)

根据NOSEC研究发表显示:计算机在处理正则表达式的时候可以说是非常愚蠢,虽然看上去它们有很强的计算能力。当你需要用x*y表达式对字符串xxxxxxxxxxxxxx进行匹配时,任何人都可以迅速告诉你无匹配结果,因为这个字符串不包含字符y。但是计算机的正则表达式引擎并不知道!它将执行以下操作

xxxxxxxxxxxxxx # 不匹配
xxxxxxxxxxxxxx # 回溯
xxxxxxxxxxxxx  # 不匹配
xxxxxxxxxxxxx  # 回溯
xxxxxxxxxxxx   # 不匹配
xxxxxxxxxxxx   # 回溯
xxxxxxxxxxx    # 不匹配
xxxxxxxxxxx    # 回溯>>很多很多步骤 xx             # 不匹配
x              # 回溯
x              # 不匹配# 无匹配结果你不会以为结束了吧?这只是第一步!现在,正则表达式引擎将从第二个x开始匹配,然后是第三个,然后是第四个,依此类推到第14个x。最终总步骤数为256。

它总共需要256步才能得出无匹配结果这一结论。计算机在这方面真的很蠢。

同样,如果你使用非贪婪匹配,x*?y表达式会从一个字母开始匹配,直到尝试过所有的可能,这和贪婪匹配一样愚蠢。

题目演示:

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-10-13 11:25:09
# @Last Modified by:   h1xa
# @Last Modified time: 2020-10-13 05:19:40

*/


error_reporting(0);
highlight_file(__FILE__);
include("flag.php");
if(isset($_POST['f'])){
    $f = (String)$_POST['f'];

    if(preg_match('/.+?ctfshow/is', $f)){
        die('bye!');
    }
    if(stripos($f,'36Dctfshow') === FALSE){
        die('bye!!');
    }

    echo $flag;

}

这里POST的字符串如果包含了ctfshow那就直接die了,但是后面stripos是

查找 "php" 在字符串中第一次出现的位置:

<?php
echo stripos("You love php, I love php too!","PHP");
?>

输出:9

后面必定得返回true才行,也就是说必须包含36Dctfshow,似乎进去了死局,但是别忘了我们是学习过reDOS攻击的,PHP 为了防止reDOS攻击,

在PHP的pcre扩展中, 提供了俩个设置项.

  1. 1. pcre.backtrack_limit //最大回溯数
  2. 2. pcre.recursion_limit //最大嵌套数

默认的backtarck_limit是100000(10万)

参考文献:深悉正则(pcre)最大回溯/递归限制 - 风雪之隅 (laruence.com)

这里我们就直接使得对面超过最大回溯,直接返回false就好了

脚本:

<?php
echo str_repeat('very', '250000').'36Dctfshow';

 接下来直接运行脚本post发过去就好了

主流预防reDOS攻击方法:

为了预防 Redos(正则表达式拒绝服务)攻击,可以采取以下措施:

  1. 避免使用可回溯的复杂正则表达式:尽量避免使用可回溯的模式,特别是包含量词的贪婪匹配(如使用 .* 或 .+)和嵌套组合的模式。优化正则表达式,使其更加精确和高效。

  2. 设置适当的时间限制:在处理正则表达式时,设置合适的时间限制,以防止一个匹配过程消耗过多的时间。可以使用 PHP 的 set_time_limit 函数来设置最大的执行时间。

  3. 对输入进行限制和过滤:对于接受用户输入的正则表达式,实施输入验证和过滤措施,限制输入的长度和字符类型,避免恶意构造的输入触发回溯操作。

  4. 限制匹配范围:根据应用需求,尽量缩小正则表达式的匹配范围。例如,指定具体的字符集和匹配模式,而不是使用更宽泛的通配符。

  5. 定期更新正则表达式引擎:保持正则表达式引擎的及时更新,以确保它们拥有最新的安全补丁和性能优化。

  6. 使用限制资源的匹配操作:在处理大量或复杂输入时,可以限制正则表达式引擎的处理资源,如匹配回溯深度、匹配重复次数、递归限制等。这可以通过配置正则表达式引擎或使用专门的 PCRE 库来实现。

  7. 审查和测试正则表达式:对使用的正则表达式进行审查和测试,特别关注复杂模式和可能导致回溯的部分。使用测试工具和输入集合来评估正则表达式的性能和安全性。

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

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

相关文章

中医师承出师考试

一.考试内容 1.临床实践技能考核 临床实践技能考核主要涉及基本操作和临床答辩。基本操作包括中医四诊、针灸、推拿、拔罐、常见急症针灸技术应用等中医临床技术。临床答辩则包括中医基本理论知识&#xff08;含中医经典有关内容&#xff09;、中药的功效、应用、用法用量、使…

P1914 小书童——凯撒密码

题目背景 某蒟蒻迷上了 “小书童”&#xff0c;有一天登陆时忘记密码了&#xff08;他没绑定邮箱 or 手机&#xff09;&#xff0c;于是便把问题抛给了神犇你。 题目描述 蒟蒻虽然忘记密码&#xff0c;但他还记得密码是由一个字符串组成。密码是由原文字符串&#xff08;由不…

蓝桥杯第十四届电子类单片机组程序设计

目录 前言 蓝桥杯大赛历届真题&#xff08;点击查看&#xff09; 一、第十四届比赛题目 1.比赛原题 2.题目解读 1&#xff09;任务要求 2&#xff09;注意事项 二、任务实现 1.NE555读取时机的问题 1&#xff09;缩短计数时间 2&#xff09;实时读取 2.温度传感器读…

Linux文件操作类命令 find

作用&#xff1a; 实时查询&#xff0c;条件很多&#xff0c;结合shell命令统一处理 格式 find 目录 条件 【shell命令】-name或-iname找具体文件名&#xff0c;-iname&#xff08;常用&#xff09;可以忽略大小写 例子find / -iname passwd找根目录下名字正正…

<网络安全>《35 网络攻防专业课<第一课 - 网络攻防准备>》

1 主要内容 认识黑客 认识端口 常见术语与命令 网络攻击流程 VMWare虚拟环境靶机搭建 2 认识黑客 2.1 白帽、灰帽和黑帽黑客 白帽黑客是指有能力破坏电脑安全但不具恶意目的黑客。 灰帽黑客是指对于伦理和法律态度不明的黑客。 黑帽黑客经常用于区别于一般&#xff08;正面…

问题:在额定电压500V以下的电路中,使用的各种用电设备,一般称为(_ _ _)用电设备 #媒体#媒体#媒体

问题&#xff1a;在额定电压500V以下的电路中,使用的各种用电设备,一般称为&#xff08;_ _ _)用电设备 参考答案如图所示

RPA岗位介绍 - RPA实施工程师

一、RPA实施工程师 1.1 岗位概述 专业负责RPA机器人流程开发、实施工作的工程师,主要职责是依据客户需求,对RPA机器人流程进行设计、开发和部署实施工作,并最终协助项目经理完成项目的交付验收。 1.2 岗位职责 1.在RPA机器人自动流程化项目实施中,负责了解现有的客户流程,…

【dofile版本】实证研究Stata代码命令汇总

一、引言 在现代社会科学研究领域&#xff0c;Stata已成为欧美地区最受欢迎的计量分析软件之一。然而&#xff0c;许多研究人员在使用上仍显生疏 为了帮助研究人员更好地利用Stata&#xff0c;整理了一套Stata实证命令汇总&#xff0c;覆盖了从数据的初步处理到高级统计分析的…

Mysql第一关之常规用法

简介 介绍Mysql常规概念&#xff0c;用法。包括DDL、DCL、DML、DQL&#xff0c;关键字、分组、连表、函数、排序、分页等。 一、 SQL DCMQ&#xff0c;分别代表DDL、DCL、DML、DQL。 模糊简记为DCMQ&#xff0c;看起来像一个消息队列。 D&#xff1a;Definition 定义语句 M…

VUE面试题和详解

这里是引用 当涉及Vue.js的面试题时&#xff0c;以下是一些常见的问题和答案&#xff0c;可以帮助你准备面试&#xff1a; 什么是Vue.js&#xff1f; Vue.js是一个开源的JavaScript框架&#xff0c;用于构建用户界面。它采用了MVVM&#xff08;Model-View-ViewModel&#xff09…

【Vue前端】vue使用笔记0基础到高手第2篇:Vue知识点介绍(附代码,已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论vue相关知识。Vue.js是前端三大新框架&#xff1a;Angular.js、React.js、Vue.js之一&#xff0c;Vue.js目前的使用和关注程度在三大框架中稍微胜出&#xff0c;并且它的热度还在递增。Vue.js是一个轻巧、高性能、可组件…

[ai笔记7] google浏览器ai学习提效定制优化+常用插件推荐

欢迎来到文思源想的ai空间&#xff0c;这是技术老兵重学ai以及成长思考的第7篇分享&#xff01; 工欲善其事必先利其器&#xff0c;为了ai学习的效能提升&#xff0c;放假期间对google浏览器做了一次系统整改&#xff0c;添加了一些配置和插件&#xff0c;这里既有一些显示、主…

在Visual Studio中搭建Dynamo Python开发环境,效率飞一般的增长

最近在学习Dynamo中Python Script的用法&#xff0c;发现这个东西用起来太不友好了&#xff0c;不支持自动缩进&#xff0c;不支持自动填充和提示。用过Visual Studio做二开的都知道&#xff0c;在引用了Revit api以后&#xff0c;就可以自动填充和提示了。 本来英语就不好&am…

Netty中的内置通信模式、Bootstrap和ChannelInitializer

内置通信传输模式 NIO:io.netty.channel.socket.nio 使用java.nio.channels包作为基础–基于选择器的方式Epoll:io.netty.channel.epoll由JNI驱动的epoll()和非阻塞IO.这个传输支持只有在Linux上可用的多种特性&#xff0c;如果SO_REUSEPORT&#xff0c;比NIO传输更快&#xf…

应对.[henderson@cock.li].mkp勒索病毒:数据恢复与预防措施

尊敬的读者&#xff1a; 在数字化时代&#xff0c;勒索病毒已成为企业和个人数据安全的威胁之一。本文将深入介绍[hendersoncock.li].mkp[hudsonLcock.li].mkp [myersairmail.cc].mkp勒索病毒的特点&#xff0c;提供被其加密的数据文件的恢复方法&#xff0c;并分享一些预防措…

设计模式--职责链模式(Chain of Responsibility Pattern)

职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它为请求创建了一个接收者对象的链。 这种模式给予请求的类型&#xff0c;对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在职责链模式中&#xff0…

代码随想录 Leetcode435. 无重叠区间

题目&#xff1a; 代码(首刷看解析 2024年2月17日&#xff09;&#xff1a; class Solution { private:const static bool cmp(vector<int>& a,vector<int>& b) {return a[0] < b[0];} public:int eraseOverlapIntervals(vector<vector<int>&…

学习Android的第十二天

目录 Android SeekBar&#xff1a;拖动条控件 SeekBar 属性 SeekBar 事件 SeekBar 定制 范例&#xff1a; 参考文档 Android RatingBar 星级评分条 RatingBar 属性 RatingBar 样式 RatingBar 事件 范例&#xff1a; 官方文档 Android ScrollView 滚动视图 Scroll…

MessageQueue --- RabbitMQ

MessageQueue --- RabbitMQ RabbitMQ IntroRabbitMQ 核心概念RabbitMQ 分发类型Dead letter (死信)保证消息的可靠传递 RabbitMQ Intro 2007年发布&#xff0c;是一个在AMQP&#xff08;高级消息队列协议&#xff09;基础上完成的&#xff0c;可复用的企业消息系统&#xff0c;…

java 宠物医院系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 java 宠物医院系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5.0&…