Regular expression Denial of Service - ReDoS
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Ein Regular Expression Denial of Service (ReDoS) tritt auf, wenn jemand Schwächen in der Funktionsweise von regulären Ausdrücken (eine Methode zum Suchen und Abgleichen von Mustern in Text) ausnutzt. Manchmal, wenn reguläre Ausdrücke verwendet werden, können sie sehr langsam werden, insbesondere wenn das Stück Text, mit dem sie arbeiten, größer wird. Diese Langsamkeit kann so schlimm werden, dass sie mit selbst kleinen Erhöhungen der Textgröße sehr schnell zunimmt. Angreifer können dieses Problem nutzen, um ein Programm, das reguläre Ausdrücke verwendet, für lange Zeit daran zu hindern, richtig zu funktionieren.
Überprüfe die Details in https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Ein böses reguläres Ausdrucksmuster ist eines, das bei manipulierten Eingaben stecken bleibt und einen DoS verursacht. Böse Regex-Muster enthalten typischerweise Gruppierungen mit Wiederholungen und Wiederholungen oder Alternationen mit Überlappungen innerhalb der wiederholten Gruppe. Einige Beispiele für böse Muster sind:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} für x > 10
Alle diese sind anfällig für die Eingabe aaaaaaaaaaaaaaaaaaaaaaaa!
.
In einem CTF (oder Bug-Bounty) kontrollierst du vielleicht den Regex, mit dem eine sensible Information (das Flag) abgeglichen wird. Dann könnte es nützlich sein, die Seite einfrieren zu lassen (Timeout oder längere Verarbeitungszeit), wenn der Regex übereinstimmte und nicht, wenn er es nicht tat. Auf diese Weise kannst du die Zeichenkette Zeichen für Zeichen exfiltrieren:
In diesem Beitrag findest du diese ReDoS-Regel: ^(?=<flag>)((.*)*)*salt$
Beispiel: ^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
In diesem Bericht findest du diese: <flag>(((((((.*)*)*)*)*)*)*)!
In diesem Bericht verwendete er: ^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
Die folgenden sind ReDoS-Beispiele, bei denen du sowohl die Eingabe als auch den Regex kontrollierst:
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)