Regular expression Denial of Service - ReDoS
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Regular Expression Denial of Service (ReDoS) se dešava kada neko iskoristi slabosti u načinu na koji regularni izrazi (način pretrage i usklađivanja obrazaca u tekstu) funkcionišu. Ponekad, kada se koriste regularni izrazi, mogu postati veoma spori, posebno ako deo teksta s kojim rade postane veći. Ova sporost može postati toliko loša da raste veoma brzo čak i sa malim povećanjima u veličini teksta. Napadači mogu iskoristiti ovaj problem da program koji koristi regularne izraze prestane da funkcioniše ispravno na duži vremenski period.
Check the details in https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Zli obrazac regularnog izraza je onaj koji može da se zaglavi na kreiranom unosu uzrokujući DoS. Zli regex obrasci obično sadrže grupisanje sa ponavljanjem i ponavljanje ili alternativu sa preklapanjem unutar ponovljene grupe. Neki primeri zlih obrazaca uključuju:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} za x > 10
Svi su ranjivi na unos aaaaaaaaaaaaaaaaaaaaaaaa!
.
U CTF-u (ili bug bounty) možda kontrolišete Regex sa kojim se usklađuje osetljiva informacija (zastava). Tada bi moglo biti korisno da stranica zamrzne (timeout ili duže vreme obrade) ako je Regex usklađen i ne ako nije. Na ovaj način ćete moći da izvučete string karakter po karakter:
U ovom postu možete pronaći ovu ReDoS pravilo: ^(?=<flag>)((.*)*)*salt$
Primer: ^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
U ovoj analizi možete pronaći ovo: <flag>(((((((.*)*)*)*)*)*)*)!
U ovoj analizi koristio je: ^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
Sledeći su ReDoS primeri gde kontrolišete i unos i regex:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)