做为一枚纯正的甲方安全人员,代码审计是必备技能点。在实际工作中,代码审计无论是在安全测试中所占的投入比重,亦或是在发现产品/项目安全漏洞中的比例,都比黑盒渗透要大的多。因此,博主特意开辟了该代码审计系列博文,结合了博主在某厂实际工作中的工作经历和厂内大牛前辈们的经验,稍加提炼而成。
在正式开始专项之前,先简单介绍下“代码审计渗透测试”这个自创的新词:
一般来讲,Web安全测试主要分为黑盒测试
和白盒测试
:黑盒测试
是指测试人员不清楚Web具体的架构和实现,通过模拟一个或多个攻击角色进行渗透测试,发现潜在的安全漏洞和风险,它不会泄露系统源码。白盒测试
则需要开发人员提供相关的设计文档、源码、使用手册、业务逻辑等信息,对源代码直接进行安全分析,来寻找安全漏洞和可能存在的风险,它主要用于公司内部进行深度安全测试。代码审计是白盒测试常用的一种方法。代码审计渗透测试
则是将黑盒渗透测试的思路用于代码审计的一种方法,博主将从漏洞介绍、漏洞原理、测试思路和测试方法四个方面来阐述TOP N的Web安全漏洞的代码审计渗透测试。
Redos攻击原理与检测防御
同名博客发表于菊厂3ms
Regular expression Denial of Service (ReDoS)是一种利用程序实现时采用了不安全的正则表达式,从而构造特定输入引起DOS拒绝服务的一种攻击手段。
在正式讨论ReDos之前,先来介绍一下预备知识。
Regex与DFA、NFA
不想看原理可以直接跳过去看例子,部分人可秒懂
正则表达式,又称规则表达式,英文名为Regular Expression,在代码中常简写为regex、regexp或RE,是计算机科学的一个概念。
正则表通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。
DFA 引擎在线性时状态下执行,因为它们不要求回溯(并因此它们永远不测试相同的字符两次)。
DFA 引擎还可以确保匹配最长的可能的字符串。
但是,因为 DFA 引擎只包含有限的状态,所以它不能匹配具有反向引用的模式;并且因为它不构造显示扩展,所以它不可以捕获子表达式。