Regular expression Denial of Service - ReDoS
正则表达式拒绝服务 - ReDoS
正则表达式拒绝服务(ReDoS)
**正则表达式拒绝服务(ReDoS)**发生在有人利用正则表达式(一种在文本中搜索和匹配模式的方法)工作方式的弱点时。有时,当使用正则表达式时,它们可能变得非常缓慢,特别是当它们处理的文本片段变大时。这种缓慢可能会变得非常严重,即使文本大小略微增加,速度也会快速增长。攻击者可以利用这个问题使使用正则表达式的程序长时间停止正常工作。
问题的正则表达式天真算法
查看详情:https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
恶意正则表达式
恶意正则表达式模式是那些可能在精心制作的输入上卡住导致DoS的模式。恶意的正则表达式模式通常包含重复的分组和重复或在重复组内部重叠的交替。一些恶意模式的示例包括:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x},其中 x > 10
所有这些都对输入aaaaaaaaaaaaaaaaaaaaaaaa!
易受攻击。
ReDoS有效载荷
通过ReDoS进行字符串外泄
在CTF(或漏洞赏金)中,也许您控制了与敏感信息(标志)匹配的正则表达式。然后,如果正则表达式匹配,而不匹配时页面冻结(超时或更长的处理时间)可能会很有用。这样,您将能够逐个字符地外泄字符串:
在这篇文章中,您可以找到这个ReDoS规则:
^(?=<flag>)((.*)*)*salt$
示例:
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
在这篇解题报告中,您可以找到这个:
<flag>(((((((.*)*)*)*)*)*)*)!
在这篇解题报告中,他使用了:
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
ReDoS控制输入和正则表达式
以下是您控制输入和正则表达式的ReDoS示例:
工具
参考资料
最后更新于