Regular expression Denial of Service - ReDoS
Regular expression Denial of Service - ReDoS
Regular Expression Denial of Service (ReDoS)
'n Regular Expression Denial of Service (ReDoS) gebeur wanneer iemand voordeel trek uit swakhede in hoe regulêre uitdrukkings ( 'n manier om patrone in teks te soek en pas) werk. Soms, wanneer regulêre uitdrukkings gebruik word, kan hulle baie stadig word, veral as die stuk teks waarmee hulle werk, groter word. Hierdie stadigheid kan so erg word dat dit baie vinnig groei selfs met klein toenames in die teks grootte. Aanvallers kan hierdie probleem gebruik om 'n program wat regulêre uitdrukkings gebruik, lankal nie behoorlik werk nie.
Die Problematiese Regex Naïve Algoritme
Kyk na die besonderhede in https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
Bose Regexes
'n Bose regulêre uitdrukkingspatroon is een wat vassteek op gekonstrueerde insette en 'n DoS veroorsaak. Bose regex-patrone bevat tipies groepering met herhaling en herhaling of afwisseling met oorvleueling binne die herhaalde groep. 'n Paar voorbeelde van bose patrone sluit in:
(a+)+
([a-zA-Z]+)*
(a|aa)+
(a|a?)+
(.*a){x} vir x > 10
Al hierdie is vatbaar vir die inset aaaaaaaaaaaaaaaaaaaaaaaa!
.
ReDoS-lading
Teksuitvoer via ReDoS
In 'n CTF (of foutbeloning) beheer jy dalk die Regex waarmee 'n sensitiewe inligting (die vlag) ooreenstem. Dan kan dit nuttig wees om die bladsy te bevries (tyduitloop of langer verwerkingstyd) as die Regex ooreenstem en nie as dit nie doen nie. Op hierdie manier sal jy in staat wees om die teks karakter vir karakter uit te voer:
In hierdie pos kan jy hierdie ReDoS-reël vind:
^(?=<flag>)((.*)*)*salt$
Voorbeeld:
^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
In hierdie oplossing kan jy hierdie een vind:
<flag>(((((((.*)*)*)*)*)*)*)!
In hierdie oplossing het hy gebruik:
^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$
ReDoS Beheer van Inset en Regex
Die volgende is ReDoS voorbeelde waar jy beide die inset en die regex beheer:
Gereedskap
Verwysings
Last updated