Regular expression Denial of Service - ReDoS
Regular expression Denial of Service - ReDoS
Regular Expression Denial of Service (ReDoS)
Regular Expression Denial of Service (ReDoS) występuje, gdy ktoś wykorzystuje słabości w działaniu wyrażeń regularnych (sposobu wyszukiwania i dopasowywania wzorców w tekście). Czasami, gdy używane są wyrażenia regularne, mogą stać się bardzo wolne, zwłaszcza jeśli fragment tekstu, z którym pracują, staje się większy. Ta wolność może być tak duża, że rośnie bardzo szybko nawet przy niewielkim zwiększeniu rozmiaru tekstu. Atakujący mogą wykorzystać ten problem, aby sprawić, że program korzystający z wyrażeń regularnych przestanie działać poprawnie przez długi czas.
Problematyczny algorytm naiwny dla wyrażeń regularnych
Sprawdź szczegóły na stronie https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Złośliwe wyrażenia regularne
Złośliwy wzorzec wyrażenia regularnego to taki, który może utknąć na spreparowanym wejściu, powodując DoS. Złośliwe wzorce wyrażeń regularnych zwykle zawierają grupowanie z powtórzeniem oraz powtórzenie lub alternację z zachodzeniem na siebie wewnątrz powtarzanej grupy. Przykłady złośliwych wzorców to:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} dla x > 10
Wszystkie te wzorce są podatne na wejście aaaaaaaaaaaaaaaaaaaaaaaa!
.
Payloady ReDoS
Wyciek ciągu znaków za pomocą ReDoS
W CTF (lub bug bounty) być może masz kontrolę nad wyrażeniem regularnym, z którym dopasowane jest wrażliwe informacje (flaga). W takim przypadku może być przydatne zatrzymanie strony (przekroczenie czasu lub dłuższy czas przetwarzania), jeśli wyrażenie regularne zostanie dopasowane, a nie jeśli nie zostanie. W ten sposób będziesz mógł wyciekać ciąg znaków po jednym znaku:
W tym poście znajdziesz tę regułę ReDoS:
^(?=<flag>)((.*)*)*salt$
Przykład:
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
W tym rozwiązaniu znajdziesz to:
<flag>(((((((.*)*)*)*)*)*)*)!
W tym rozwiązaniu użył:
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
Kontrolowanie wejścia i wyrażenia regularnego w ReDoS
Poniżej znajdują się przykłady ReDoS, w których kontrolujesz zarówno wejście, jak i wyrażenie regularne:
Narzędzia
Odwołania
Last updated