Proxy / WAF Protections Bypass
Last updated
Last updated
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Tegnieke uit hierdie navorsing.
Nginx reël voorbeeld:
In orde om omseilings te voorkom, voer Nginx padnormalisering uit voordat dit dit nagaan. As die agtergrondbediener egter 'n ander normalisering uitvoer (wat karakters verwyder wat Nginx nie verwyder nie), kan dit moontlik wees om hierdie verdediging te omseil.
Nginx Weergawe
Node.js Omseil Karakters
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
Nginx Weergawe
Flask Omseil Karakters
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
Nginx Weergawe
Spring Boot Omseil Karakters
1.22.0
;
1.21.6
;
1.20.2
\x09
, ;
1.18.0
\x09
, ;
1.16.1
\x09
, ;
Nginx FPM konfigurasie:
Nginx is geconfigureer om toegang tot /admin.php
te blokkeer, maar dit is moontlik om dit te omseil deur toegang te verkry tot /admin.php/index.php
.
In hierdie pos word verduidelik dat ModSecurity v3 (tot 3.0.12), die REQUEST_FILENAME
veranderlike onvanpas geïmplementeer het wat veronderstel was om die toeganklike pad (tot die begin van die parameters) te bevat. Dit is omdat dit 'n URL-dekodeer uitgevoer het om die pad te verkry.
Daarom sal 'n versoek soos http://example.com/foo%3f';alert(1);foo=
in mod security veronderstel dat die pad net /foo
is omdat %3f
in ?
omgeskakel word wat die URL-pad beëindig, maar eintlik sal die pad wat 'n bediener ontvang /foo%3f';alert(1);foo=
wees.
Die veranderlikes REQUEST_BASENAME
en PATH_INFO
was ook deur hierdie fout geraak.
Iets soortgelyks het in weergawe 2 van Mod Security gebeur wat 'n beskerming toegelaat het wat verhoed het dat gebruikers toegang tot lêers met spesifieke uitbreidings wat met rugsteunlêers verband hou (soos .bak
) verkry, eenvoudig deur die punt URL-gecodeer in %2e
te stuur, byvoorbeeld: https://example.com/backup%2ebak
.
Hierdie navorsing noem dat dit moontlik was om AWS WAF-reëls wat op HTTP-koppe toegepas is, te omseil deur 'n "swak gevormde" kop te stuur wat nie behoorlik deur AWS ontleed is nie, maar wel deur die agtergrondbediener.
Byvoorbeeld, deur die volgende versoek met 'n SQL-inspuiting in die kop X-Query te stuur:
Dit was moontlik om AWS WAF te omseil omdat dit nie verstaan het dat die volgende lyn deel is van die waarde van die kop nie, terwyl die NODEJS-bediener dit wel gedoen het (dit is reggestel).
Gewoonlik het WAFs 'n sekere lengtebeperking van versoeke om te kontroleer, en as 'n POST/PUT/PATCH-versoek daarbo is, sal die WAF die versoek nie kontroleer nie.
Vir AWS WAF kan jy die dokumentasie nagaan:
Maximale grootte van 'n webversoekliggaam wat ondersoek kan word vir Application Load Balancer en AWS AppSync beskermings
8 KB
Maximale grootte van 'n webversoekliggaam wat ondersoek kan word vir CloudFront, API Gateway, Amazon Cognito, App Runner, en Verified Access beskermings**
64 KB
Van Azure dokumentasie:
Ou Web-toepassing-vuurmure met Core Rule Set 3.1 (of laer) laat boodskappe groter as 128 KB toe deur versoekliggaamondersoek af te skakel, maar hierdie boodskappe sal nie op kwesbaarhede nagegaan word nie. Vir nuwer weergawes (Core Rule Set 3.2 of nuwer) kan dieselfde gedoen word deur die maksimum versoekliggaamlimiet te deaktiveer. Wanneer 'n versoek die groottegrens oorskry:
As voorkoming modus: Teken die versoek aan en blokkeer dit.
As ontdekking modus: Ondersoek tot die limiet, ignoreer die res, en teken aan as die Content-Length
die limiet oorskry.
Van Akamai:
Standaard ondersoek die WAF slegs die eerste 8KB van 'n versoek. Dit kan die limiet verhoog tot 128KB deur Gevorderde Metadata by te voeg.
Van Cloudflare:
Tot 128KB.
Afhangende van die implementering van Unicode normalisering (meer inligting hier), mag karakters wat Unicode kompatibiliteit deel, in staat wees om die WAF te omseil en as die bedoelde las te voer. Kompatible karakters kan hier gevind word.
Soos genoem in hierdie blogpos, om WAFs te omseil wat in staat is om 'n konteks van die gebruiker se invoer te handhaaf, kan ons die WAF tegnieke misbruik om werklik die gebruiker se invoer te normaliseer.
Byvoorbeeld, in die pos word genoem dat Akamai 'n gebruiker se invoer 10 keer URL-decodeer. Daarom sal iets soos <input/%2525252525252525253e/onfocus
deur Akamai gesien word as <input/>/onfocus
wat miskien dink dat dit reg is aangesien die etiket gesluit is. egter, solank die toepassing nie die invoer 10 keer URL-decodeer nie, sal die slagoffer iets soos <input/%25252525252525253e/onfocus
sien wat nog steeds geldig is vir 'n XSS-aanval.
Daarom laat dit toe om payloads in geënkodeerde komponente te verberg wat die WAF sal decodeer en interpreteer terwyl die slagoffer nie.
Boonop kan dit nie net met URL-geënkodeerde payloads gedoen word nie, maar ook met ander kodering soos unicode, hex, octal...
In die pos word die volgende finale omseilings voorgestel:
Akamai:akamai.com/?x=<x/%u003e/tabindex=1 autofocus/onfocus=x=self;x['ale'%2b'rt'](999)>
Imperva:imperva.com/?x=<x/\x3e/tabindex=1 style=transition:0.1s autofocus/onfocus="a=document;b=a.defaultView;b.ontransitionend=b['aler'%2b't'];style.opacity=0;Object.prototype.toString=x=>999">
AWS/Cloudfront:docs.aws.amazon.com/?x=<x/%26%23x3e;/tabindex=1 autofocus/onfocus=alert(999)>
Cloudflare:cloudflare.com/?x=<x tabindex=1 autofocus/onfocus="style.transition='0.1s';style.opacity=0;self.ontransitionend=alert;Object.prototype.toString=x=>999">
Daar word ook genoem dat, afhangende van hoe sommige WAFs die konteks van die gebruiker se invoer verstaan, dit moontlik mag wees om dit te misbruik. Die voorgestelde voorbeeld in die blog is dat Akamai toelaat het om enigiets tussen /*
en */
te plaas (potensieel omdat dit algemeen as kommentaar gebruik word). Daarom sal 'n SQL-inspuiting soos /*'or sleep(5)-- -*/
nie opgemerk word nie en sal geldig wees aangesien /*
die beginstring van die inspuiting is en */
gecomment is.
Hierdie tipe konteksprobleme kan ook gebruik word om ander kwesbaarhede as die een wat verwag word om deur die WAF uitgebuit te word, te misbruik (bv. dit kan ook gebruik word om 'n XSS aan te val).
https://github.com/ustayready/fireprox: Genereer 'n API-gateway URL om saam met ffuf te gebruik
https://github.com/rootcathacking/catspin: Soortgelyk aan fireprox
https://github.com/PortSwigger/ip-rotate: Burp Suite-inprop wat API-gateway IP's gebruik
https://github.com/fyoorer/ShadowClone: 'n Dinamies bepaalde aantal houerinstansies word geaktiveer op grond van die invoer lêergrootte en splitsingsfaktor, met die invoer in stukke gesplitst vir parallelle uitvoering, soos 100 instansies wat 100 stukke van 'n 10,000-lyn invoer lêer met 'n splitsingsfaktor van 100 lyne verwerk.
Verskillende tegnieke kan gebruik word om die regex filters op die firewalls te omseil. Voorbeelde sluit in: alternatiewe geval, die toevoeging van reëls breek, en die kodering van payloads. Hulpbronne vir die verskillende omseilings kan gevind word by PayloadsAllTheThings en OWASP. Die voorbeelde hieronder is uit hierdie artikel geneem.
nowafpls: Burp-inprop om rommeldata aan versoeke toe te voeg om WAFs deur lengte te omseil
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)