Ucz się i ćwicz Hacking AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Ucz się i ćwicz Hacking GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
Aby zapobiec obejściom, Nginx wykonuje normalizację ścieżek przed jej sprawdzeniem. Jednak jeśli serwer zaplecza wykonuje inną normalizację (usuwając znaki, których Nginx nie usuwa), może być możliwe obejście tej obrony.
[**W tym poście**](https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/) wyjaśniono, że ModSecurity v3 (do 3.0.12) **nieprawidłowo zaimplementował zmienną `REQUEST_FILENAME`**, która miała zawierać dostępny path (do początku parametrów). Dzieje się tak, ponieważ wykonano dekodowanie URL, aby uzyskać path.\
Dlatego żądanie takie jak `http://example.com/foo%3f';alert(1);foo=` w mod security będzie zakładać, że path to tylko `/foo`, ponieważ `%3f` jest przekształcane w `?`, kończąc path URL, ale w rzeczywistości path, który otrzyma serwer, będzie `/foo%3f';alert(1);foo=`.
Coś podobnego miało miejsce w wersji 2 Mod Security, która pozwalała na obejście ochrony, która uniemożliwiała użytkownikom dostęp do plików z określonymi rozszerzeniami związanymi z plikami kopii zapasowej (takimi jak `.bak`), po prostu wysyłając kropkę zakodowaną w URL jako `%2e`, na przykład: `https://example.com/backup%2ebak`.
[To badanie](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) wspomina, że możliwe było obejście reguł AWS WAF stosowanych do nagłówków HTTP, wysyłając "nieprawidłowy" nagłówek, który nie był prawidłowo analizowany przez AWS, ale był przez serwer zaplecza.
Możliwe było ominięcie AWS WAF, ponieważ nie rozumiał, że następna linia jest częścią wartości nagłówka, podczas gdy serwer NODEJS to rozumiał (to zostało naprawione).
## Ogólne omijanie WAF
### Limity rozmiaru żądania
Zwykle WAF-y mają określony limit długości żądań do sprawdzenia, a jeśli żądanie POST/PUT/PATCH jest większe, WAF nie sprawdzi żądania.
* Dla AWS WAF, możesz [**sprawdzić dokumentację**](https://docs.aws.amazon.com/waf/latest/developerguide/limits.html)**:**
<tabledata-header-hidden><thead><tr><thwidth="687"></th><th></th></tr></thead><tbody><tr><td>Maksymalny rozmiar ciała żądania sieciowego, które może być sprawdzane dla ochrony Application Load Balancer i AWS AppSync</td><td>8 KB</td></tr><tr><td>Maksymalny rozmiar ciała żądania sieciowego, które może być sprawdzane dla ochrony CloudFront, API Gateway, Amazon Cognito, App Runner i Verified Access**</td><td>64 KB</td></tr></tbody></table>
* Z [**dokumentacji Azure**](https://learn.microsoft.com/en-us/azure/web-application-firewall/ag/application-gateway-waf-request-size-limits)**:**
Starsze zapory aplikacji internetowych z Core Rule Set 3.1 (lub niższym) pozwalają na wiadomości większe niż **128 KB** poprzez wyłączenie inspekcji ciała żądania, ale te wiadomości nie będą sprawdzane pod kątem podatności. W nowszych wersjach (Core Rule Set 3.2 lub nowszych) to samo można zrobić, wyłączając maksymalny limit ciała żądania. Gdy żądanie przekracza limit rozmiaru:
Jeśli **tryb zapobiegania**: Rejestruje i blokuje żądanie.\
Jeśli **tryb wykrywania**: Sprawdza do limitu, ignoruje resztę i rejestruje, jeśli `Content-Length` przekracza limit.
* Z [**Akamai**](https://community.akamai.com/customers/s/article/Can-WAF-inspect-all-arguments-and-values-in-request-body?language=en_US)**:**
Domyślnie WAF sprawdza tylko pierwsze 8KB żądania. Może zwiększyć limit do 128KB, dodając zaawansowane metadane.
* Z [**Cloudflare**](https://developers.cloudflare.com/ruleset-engine/rules-language/fields/#http-request-body-fields)**:**
W zależności od implementacji normalizacji Unicode (więcej informacji [tutaj](https://jlajara.gitlab.io/Bypass\_WAF\_Unicode)), znaki, które mają zgodność z Unicode, mogą być w stanie obejść WAF i wykonać zamierzony ładunek. Zgodne znaki można znaleźć [tutaj](https://www.compart.com/en/unicode).
#### Example <a href="#example" id="example"></a>
```bash
# under the NFKD normalization algorithm, the characters on the left translate
### IP Rotation <a href="#ip-rotation" id="ip-rotation"></a>
* [https://github.com/ustayready/fireprox](https://github.com/ustayready/fireprox): Generuj URL bramy API do użycia z ffuf
* [https://github.com/rootcathacking/catspin](https://github.com/rootcathacking/catspin): Podobne do fireprox
* [https://github.com/PortSwigger/ip-rotate](https://github.com/PortSwigger/ip-rotate): Wtyczka Burp Suite, która używa IP bramy API
* [https://github.com/fyoorer/ShadowClone](https://github.com/fyoorer/ShadowClone): Dynamically determined number of container instances are activated based on the input file size and split factor, with the input split into chunks for parallel execution, such as 100 instances processing 100 chunks from a 10,000-line input file with a split factor of 100 lines.
### Regex Bypasses
Różne techniki mogą być używane do omijania filtrów regex na zaporach. Przykłady obejmują naprzemienną wielkość liter, dodawanie łamań linii i kodowanie ładunków. Zasoby dotyczące różnych obejść można znaleźć na [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/README.md#filter-bypass-and-exotic-payloads) oraz [OWASP](https://cheatsheetseries.owasp.org/cheatsheets/XSS\_Filter\_Evasion\_Cheat\_Sheet.html). Przykłady poniżej zostały zaczerpnięte z [tego artykułu](https://medium.com/@allypetitt/5-ways-i-bypassed-your-web-application-firewall-waf-43852a43a1c2).
```bash
<sCrIpT>alert(XSS)</sCriPt>#changing the case of the tag
<<script>alert(XSS)</script>#prepending an additional "<"
<script>alert(XSS) // #removing the closing tag
<script>alert`XSS`</script>#using backticks instead of parenetheses
/?id=1+un/**/ion+sel/**/ect+1,2,3-- #using comments in SQL query to break up statement
new Function`alt\`6\``; #using backticks instead of parentheses
data:text/html;base64,PHN2Zy9vbmxvYWQ9YWxlcnQoMik+ #base64 encoding the javascript
%26%2397;lert(1) #using HTML encoding
<asrc="%0Aj%0Aa%0Av%0Aa%0As%0Ac%0Ar%0Ai%0Ap%0At%0A%3Aconfirm(XSS)">#Using Line Feed (LF) line breaks
<BODYonload!#$%&()*~+-_.,:;?@[/|\]^`=confirm()> # use any chars that aren't letters, numbers, or encapsulation chars between event handler and equal sign (only works on Gecko engine)
```
## Narzędzia
* [**nowafpls**](https://github.com/assetnote/nowafpls): Wtyczka Burp do dodawania niepotrzebnych danych do żądań w celu obejścia WAF-ów przez długość
Ucz się i ćwicz Hacking AWS:<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<imgsrc="/.gitbook/assets/arte.png"alt=""data-size="line">\
Ucz się i ćwicz Hacking GCP: <imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<imgsrc="/.gitbook/assets/grte.png"alt=""data-size="line">](https://training.hacktricks.xyz/courses/grte)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Dziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.