# Proxy / WAF Koruma Aşma {{#include ../banners/hacktricks-training.md}} ## Yolu Manipüle Ederek Nginx ACL Kurallarını Aşma Teknikler [bu araştırmadan](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies). Nginx kural örneği: ```plaintext location = /admin { deny all; } location = /admin/ { deny all; } ``` Nginx, atlatmaları önlemek için kontrol etmeden önce yol normalizasyonu yapar. Ancak, arka uç sunucusu farklı bir normalizasyon gerçekleştirirse (nginx'in kaldırmadığı karakterleri kaldırma gibi), bu savunmayı aşmak mümkün olabilir. ### **NodeJS - Express** | Nginx Versiyonu | **Node.js Atlatma Karakterleri** | | --------------- | --------------------------------- | | 1.22.0 | `\xA0` | | 1.21.6 | `\xA0` | | 1.20.2 | `\xA0`, `\x09`, `\x0C` | | 1.18.0 | `\xA0`, `\x09`, `\x0C` | | 1.16.1 | `\xA0`, `\x09`, `\x0C` | ### **Flask** | Nginx Versiyonu | **Flask Atlatma Karakterleri** | | --------------- | --------------------------------------------------------------- | | 1.22.0 | `\x85`, `\xA0` | | 1.21.6 | `\x85`, `\xA0` | | 1.20.2 | `\x85`, `\xA0`, `\x1F`, `\x1E`, `\x1D`, `\x1C`, `\x0C`, `\x0B` | | 1.18.0 | `\x85`, `\xA0`, `\x1F`, `\x1E`, `\x1D`, `\x1C`, `\x0C`, `\x0B` | | 1.16.1 | `\x85`, `\xA0`, `\x1F`, `\x1E`, `\x1D`, `\x1C`, `\x0C`, `\x0B` | ### **Spring Boot** | Nginx Versiyonu | **Spring Boot Atlatma Karakterleri** | | --------------- | ------------------------------------ | | 1.22.0 | `;` | | 1.21.6 | `;` | | 1.20.2 | `\x09`, `;` | | 1.18.0 | `\x09`, `;` | | 1.16.1 | `\x09`, `;` | ### **PHP-FPM** Nginx FPM yapılandırması: ```plaintext location = /admin.php { deny all; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; } ``` Nginx, `/admin.php` erişimini engelleyecek şekilde yapılandırılmıştır, ancak bu, `/admin.php/index.php` adresine erişerek aşılabilir. ### Nasıl önlenir ```plaintext location ~* ^/admin { deny all; } ``` ## Mod Security Kurallarını Bypass Etme ### Yol Karışıklığı [**Bu yazıda**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/) ModSecurity v3'ün (3.0.12'ye kadar) **`REQUEST_FILENAME`** değişkenini yanlış bir şekilde uyguladığı açıklanmaktadır; bu değişken erişilen yolu (parametrelerin başlangıcına kadar) içermesi gerekiyordu. Bunun nedeni, yolu almak için bir URL çözümlemesi yapmasıdır.\ Bu nedenle, mod güvenlikte `http://example.com/foo%3f';alert(1);foo=` gibi bir istek, yolun sadece `/foo` olduğunu varsayacaktır çünkü `%3f` `?`'ya dönüştürülerek URL yolunu sonlandırır, ancak aslında sunucunun alacağı yol `/foo%3f';alert(1);foo=` olacaktır. `REQUEST_BASENAME` ve `PATH_INFO` değişkenleri de bu hatadan etkilenmiştir. Mod Security'nin 2. versiyonunda benzer bir durum meydana gelmiş ve yedek dosyalarla ilgili belirli uzantılara sahip dosyalara erişimi engelleyen bir korumayı aşmayı mümkün kılmıştır (örneğin `.bak` gibi) sadece noktanın `%2e` olarak URL kodlanarak gönderilmesiyle, örneğin: `https://example.com/backup%2ebak`. ## AWS WAF ACL'yi Bypass Etme ### Bozuk Başlık [Bu araştırma](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies), AWS'nin düzgün bir şekilde ayrıştırmadığı ancak arka uç sunucusu tarafından ayrıştırılan "bozuk" bir başlık göndererek AWS WAF kurallarını aşmanın mümkün olduğunu belirtmektedir. Örneğin, X-Query başlığında bir SQL enjeksiyonu ile aşağıdaki isteği göndermek: ```http GET / HTTP/1.1\r\n Host: target.com\r\n X-Query: Value\r\n \t' or '1'='1' -- \r\n Connection: close\r\n \r\n ``` AWS WAF'ı atlatmak mümkündü çünkü bir sonraki satırın başlığın değeri olduğunu anlamıyordu, oysa NODEJS sunucusu bunu anlıyordu (bu düzeltildi). ## Genel WAF atlatmaları ### İstek Boyutu Sınırları Genellikle WAF'ların kontrol edeceği belirli bir istek uzunluğu sınırı vardır ve eğer bir POST/PUT/PATCH isteği bu sınırı aşarsa, WAF isteği kontrol etmez. - AWS WAF için, [**belgelere göz atabilirsiniz**](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)**:**
Application Load Balancer ve AWS AppSync korumaları için incelenebilecek maksimum web istek gövde boyutu | 8 KB |
CloudFront, API Gateway, Amazon Cognito, App Runner ve Verified Access korumaları için incelenebilecek maksimum web istek gövde boyutu** | 64 KB |