Regular expression Denial of Service - ReDoS
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
正则表达式拒绝服务 (ReDoS) 是指有人利用正则表达式(用于搜索和匹配文本中的模式的一种方式)工作中的弱点。有时,当使用正则表达式时,它们可能会变得非常慢,尤其是当它们处理的文本变得更大时。这种缓慢可能会变得非常严重,甚至在文本大小稍微增加时就会迅速增长。攻击者可以利用这个问题使使用正则表达式的程序长时间无法正常工作。
查看详细信息 https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
恶意正则表达式模式是指那些在特制输入上卡住导致拒绝服务的模式。恶意正则表达式模式通常包含重复的分组和重复或交替的重叠在重复组内。一些恶意模式的示例包括:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} for x > 10
所有这些都对输入 aaaaaaaaaaaaaaaaaaaaaaaa!
易受攻击。
在 CTF(或漏洞赏金)中,也许你控制了与敏感信息(标志)匹配的正则表达式。然后,如果正则表达式匹配,使页面冻结(超时或更长处理时间)可能会很有用,而如果没有匹配则不冻结。这样你就可以逐字符外泄字符串:
在 这篇文章 中你可以找到这个 ReDoS 规则:^(?=<flag>)((.*)*)*salt$
示例:^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
在 这篇写作 中你可以找到这个:<flag>(((((((.*)*)*)*)*)*)*)!
在 这篇写作 中他使用了:^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
以下是ReDoS示例,其中你控制输入和正则表达式:
学习和实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习和实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)