hacktricks/pentesting-web/proxy-waf-protections-bypass.md

7.1 KiB

Bypass delle Protezioni Proxy / WAF

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

Altri modi per supportare HackTricks:

{% embed url="https://websec.nl/" %}

Bypass delle Regole ACL di Nginx con la Manipolazione del Percorso

Tecniche da questa ricerca.

Esempio di regola Nginx:

location = /admin {
deny all;
}

location = /admin/ {
deny all;
}

NodeJS - Express

Versione Nginx Caratteri di bypass Node.js
1.22.0 \xA0
1.21.6 \xA0
1.20.2 \xA0, \x09, \x0C
1.18.0 \xA0, \x09, \x0C
1.16.1 \xA0, \x09, \x0C

Flask

Versione Nginx Caratteri di bypass Flask
1.22.0 \x85, \xA0
1.21.6 \x85, \xA0
1.20.2 \x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B
1.18.0 \x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B
1.16.1 \x85, \xA0, \x1F, \x1E, \x1D, \x1C, \x0C, \x0B

Spring Boot

Versione Nginx Caratteri di bypass Spring Boot
1.22.0 ;
1.21.6 ;
1.20.2 \x09, ;
1.18.0 \x09, ;
1.16.1 \x09, ;

PHP-FPM

Configurazione Nginx FPM:

location = /admin.php {
deny all;
}

location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}

Nginx è configurato per bloccare l'accesso a /admin.php ma è possibile aggirare ciò accedendo a /admin.php/index.php.

Come prevenire

location ~* ^/admin {
deny all;
}

Ignorare le regole di Mod Security

Confusione del percorso

In questo post viene spiegato che ModSecurity v3 (fino alla versione 3.0.12) ha implementato in modo improprio la variabile REQUEST_FILENAME che avrebbe dovuto contenere il percorso accesso (fino all'inizio dei parametri). Questo perché eseguiva un URL decode per ottenere il percorso.
Pertanto, una richiesta come http://example.com/foo%3f';alert(1);foo= in ModSecurity supporrà che il percorso sia solo /foo perché %3f viene trasformato in ? terminando il percorso dell'URL, ma in realtà il percorso che il server riceverà sarà /foo%3f';alert(1);foo=.

Anche le variabili REQUEST_BASENAME e PATH_INFO sono state interessate da questo bug.

Qualcosa di simile è accaduto nella versione 2 di Mod Security che ha permesso di ignorare una protezione che impediva agli utenti di accedere a file con estensioni specifiche relative ai file di backup (come ad esempio .bak) semplicemente inviando il punto URL codificato in %2e, ad esempio: https://example.com/backup%2ebak.

Ignorare AWS WAF ACL

Intestazione malformata

Questa ricerca menziona che era possibile ignorare le regole di AWS WAF applicate sugli header HTTP inviando un header "malformato" che non veniva correttamente analizzato da AWS ma sì dal server backend.

Ad esempio, inviando la seguente richiesta con un'iniezione SQL nell'header X-Query:

GET / HTTP/1.1\r\n
Host: target.com\r\n
X-Query: Value\r\n
\t' or '1'='1' -- \r\n
Connection: close\r\n
\r\n

Era possibile aggirare AWS WAF perché non capiva che la riga successiva faceva parte del valore dell'intestazione mentre il server NODEJS lo faceva (questo è stato risolto).

Riferimenti

{% embed url="https://websec.nl/" %}

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

Altri modi per supportare HackTricks: