hacktricks/pentesting-web/hacking-with-cookies
2024-02-11 02:07:06 +00:00
..
cookie-bomb.md Translated to Afrikaans 2024-02-11 02:07:06 +00:00
cookie-jar-overflow.md Translated to Afrikaans 2024-02-11 02:07:06 +00:00
cookie-tossing.md Translated to Afrikaans 2024-02-11 02:07:06 +00:00
README.md Translated to Afrikaans 2024-02-11 02:07:06 +00:00

Koekies Hack

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Vind kwesbaarhede wat die belangrikste is sodat jy hulle vinniger kan regstel. Intruder volg jou aanvalsoppervlak, voer proaktiewe dreigingsskanderings uit, vind probleme regoor jou hele tegnologie-stapel, van API's tot webtoepassings en wolkstelsels. Probeer dit vandag nog gratis.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Koekiekenmerke

Koekies kom met verskeie kenmerke wat hul gedrag in die gebruiker se blaaier beheer. Hier is 'n oorsig van hierdie kenmerke in 'n meer passiewe stem:

Verval en Maksimum-Ouderdom

Die vervaldatum van 'n koekie word bepaal deur die Expires-kenmerk. Omgekeerd bepaal die Max-age-kenmerk die tyd in sekondes tot 'n koekie uitgevee word. Kies eerder Max-age omdat dit meer moderne praktyke weerspieël.

Domein

Die gasheer wat 'n koekie ontvang, word deur die Domain-kenmerk gespesifiseer. Standaard word dit ingestel op die gasheer wat die koekie uitgereik het, sonder sy subdomeine. Wanneer die Domain-kenmerk egter eksplisiet ingestel is, sluit dit ook subdomeine in. Dit maak die spesifikasie van die Domain-kenmerk 'n minder beperkende opsie, wat nuttig is vir scenario's waar koekiedeling oor subdomeine nodig is. Byvoorbeeld, deur Domain=mozilla.org in te stel, is koekies toeganklik op sy subdomeine soos developer.mozilla.org.

Pad

'n Spesifieke URL-pad wat teenwoordig moet wees in die versoekte URL vir die Cookie-kop om gestuur te word, word aangedui deur die Path-kenmerk. Hierdie kenmerk beskou die /-karakter as 'n gidsafdeling en maak dit moontlik om ook in subgidse te pas.

Ordeningsreëls

Wanneer twee koekies dieselfde naam dra, word die een wat gekies word om gestuur te word, gebaseer op:

  • Die koekie wat die langste pad in die versoekte URL pas.
  • Die mees onlangs ingestelde koekie as die paaie identies is.

SameSite

  • Die SameSite-kenmerk bepaal of koekies gestuur word met versoekers wat afkomstig is van derdeparty-domeine. Dit bied drie instellings:
  • Streng: Beperk die koekie om gestuur te word met versoekers van derdeparty-webwerwe.
  • Laks: Laat die koekie toe om gestuur te word met GET-versoekers wat deur derdeparty-webwerwe geïnisieer word.
  • Geen: Maak dit moontlik dat die koekie vanaf enige derdeparty-domein gestuur word.

Onthou, by die konfigurering van koekies kan die begrip van hierdie kenmerke help om te verseker dat hulle soos verwag gedra in verskillende scenario's.

| **Versoekt

Koekies Voorvoegsels

Koekies met die voorvoegsel __Secure- moet saam met die secure vlag gestel word op bladsye wat deur HTTPS beveilig is.

Vir koekies met die voorvoegsel __Host- moet verskeie voorwaardes voldoen word:

  • Hulle moet gestel word met die secure vlag.
  • Hulle moet afkomstig wees van 'n bladsy wat deur HTTPS beveilig is.
  • Dit is verbode om 'n domein te spesifiseer vir hierdie koekies, wat voorkom dat hulle na subdomeine gestuur word.
  • Die pad vir hierdie koekies moet op / gestel word.

Dit is belangrik om daarop te let dat koekies met die voorvoegsel __Host- nie toegelaat word om na superdomeine of subdomeine gestuur te word nie. Hierdie beperking help om toepassingskoekies te isoleer. Daarom kan die gebruik van die __Host- voorvoegsel vir alle toepassingskoekies beskou word as 'n goeie praktyk om sekuriteit en isolasie te verbeter.

Koekie Aanvalle

As 'n aangepaste koekie sensitiewe data bevat, moet dit nagegaan word (veral as jy 'n CTF speel), aangesien dit vatbaar kan wees vir aanvalle.

Dekodering en Manipulasie van Koekies

Sensitiewe data wat in koekies ingebed is, moet altyd nagegaan word. Koekies wat in Base64 of soortgelyke formate gekodeer is, kan dikwels gedekodeer word. Hierdie kwesbaarheid stel aanvallers in staat om die inhoud van die koekie te verander en ander gebruikers na te boots deur hul gewysigde data terug in die koekie te kodeer.

Sessie-ontvoering

Hierdie aanval behels die steel van 'n gebruiker se koekie om ongemagtigde toegang tot hul rekening binne 'n toepassing te verkry. Deur die gesteelde koekie te gebruik, kan 'n aanvaller die legitieme gebruiker na-aap.

Sessie-Fiksasie

In hierdie scenario mislei 'n aanvaller 'n slagoffer om 'n spesifieke koekie te gebruik om in te teken. As die toepassing nie 'n nuwe koekie toewys by inteken nie, kan die aanvaller, wat die oorspronklike koekie besit, die slagoffer na-aap. Hierdie tegniek steun op die slagoffer wat inteken met 'n koekie wat deur die aanvaller voorsien word.

As jy 'n XSS in 'n subdomein gevind het of jy beheer 'n subdomein, lees:

{% content-ref url="cookie-tossing.md" %} cookie-tossing.md {% endcontent-ref %}

Sessie-Skenking

Hier oortuig die aanvaller die slagoffer om die aanvaller se sessie-koekie te gebruik. Die slagoffer, wat glo dat hulle in hul eie rekening ingeteken is, sal onbedoeld aksies uitvoer in die konteks van die aanvaller se rekening.

As jy 'n XSS in 'n subdomein gevind het of jy beheer 'n subdomein, lees:

{% content-ref url="cookie-tossing.md" %} cookie-tossing.md {% endcontent-ref %}

JWT Koekies

Klik op die vorige skakel om 'n bladsy te besoek wat moontlike foute in JWT verduidelik.

JSON Web Tokens (JWT) wat in koekies gebruik word, kan ook kwesbaarhede hê. Vir in-diepte inligting oor moontlike foute en hoe om dit uit te buit, word dit aanbeveel om die gekoppelde dokument oor die hak van JWT te raadpleeg.

Kruiswebversoekvervalsing (CSRF)

Hierdie aanval dwing 'n ingetekende gebruiker om ongewenste aksies op 'n webtoepassing uit te voer waarop hulle tans geïdentifiseer is. Aanvallers kan koekies uitbuit wat outomaties met elke versoek na die kwesbare webwerf gestuur word.

Leë Koekies

(Kyk na verdere besonderhede in die oorspronklike navorsing) Webblaaier laat die skepping van koekies sonder 'n naam toe, wat deur JavaScript gedemonstreer kan word as volg:

document.cookie = "a=v1"
document.cookie = "=test value;" // Setting an empty named cookie
document.cookie = "b=v2"

Die resultaat in die gestuurde koekie-kop is a=v1; toetswaarde; b=v2;. Verbasend genoeg maak dit die manipulasie van koekies moontlik as 'n leë naam koekie ingestel word, wat potensieel die beheer van ander koekies moontlik maak deur die leë koekie na 'n spesifieke waarde te stel:

function setCookie(name, value) {
document.cookie = `${name}=${value}`;
}

setCookie("", "a=b"); // Setting the empty cookie modifies another cookie's value

Dit lei daartoe dat die blaaier 'n koekie-kop stuur wat deur elke webbediener geïnterpreteer word as 'n koekie met die naam a en 'n waarde b.

Chrome-fout: Unicode-surrogaatkodepuntprobleem

In Chrome, as 'n Unicode-surrogaatkodepunt deel is van 'n gestelde koekie, word document.cookie beskadig en gee dit daarna 'n leë string terug:

document.cookie = "\ud800=meep";

Dit lei daartoe dat document.cookie 'n leë string uitvoer, wat dui op permanente korruptering.

Koekie Smuggling as gevolg van Parseringsprobleme

(Kyk na verdere besonderhede in die oorspronklike navorsing) Verskeie webbedieners, insluitend dié van Java (Jetty, TomCat, Undertow) en Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), hanteer koekiestrengs verkeerd as gevolg van verouderde RFC2965-ondersteuning. Hulle lees 'n dubbel-aangehaalde koekiewaarde as 'n enkele waarde, selfs as dit puntkommas bevat, wat normaalweg sleutel-waardepare moet skei:

RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";

Koekie-inspuitingskwesbaarhede

(Kyk vir verdere besonderhede in die oorspronklike navorsing) Die verkeerde ontleding van koekies deur bedieners, veral Undertow, Zope, en dié wat Python se http.cookie.SimpleCookie en http.cookie.BaseCookie gebruik, skep geleenthede vir koekie-inspuitingsaanvalle. Hierdie bedieners slaag nie daarin om die begin van nuwe koekies behoorlik af te baken nie, wat aanvallers in staat stel om koekies te vervals:

  • Undertow verwag 'n nuwe koekie onmiddellik na 'n aangehaalde waarde sonder 'n puntkomma.
  • Zope soek na 'n komma om die volgende koekie te ontleding.
  • Python se koekieklasse begin ontleding op 'n spasie karakter.

Hierdie kwesbaarheid is veral gevaarlik in webtoepassings wat staatmaak op koekie-gebaseerde CSRF-beskerming, aangesien dit aanvallers in staat stel om vervalste CSRF-token-koekies in te spuit, wat moontlik sekuriteitsmaatreëls kan omseil. Die probleem word vererger deur Python se hantering van duplikaat koekienommers, waar die laaste voorkoms voriges oorskryf. Dit wek ook kommer oor __Secure- en __Host- koekies in onveilige kontekste en kan lei tot omseiling van magtiging wanneer koekies aan agterste bedieners wat vatbaar is vir vervalsing, oorgedra word.

Ekstra kwesbare koekiekontroles

Basiese kontroles

  • Die koekie is elke keer dieselfde wanneer jy aanteken.
  • Teken uit en probeer om dieselfde koekie te gebruik.
  • Probeer om met 2 toestelle (of webblaaier) na dieselfde rekening te teken met dieselfde koekie.
  • Kyk of die koekie enige inligting bevat en probeer om dit te wysig.
  • Probeer om verskeie rekeninge te skep met byna dieselfde gebruikersnaam en kyk of jy ooreenkomste kan sien.
  • Kyk of die "onthou my" opsie, indien dit bestaan, om te sien hoe dit werk. As dit bestaan en kwesbaar kan wees, gebruik altyd die koekie van onthou my sonder enige ander koekie.
  • Kyk of die vorige koekie steeds werk nadat jy die wagwoord verander het.

Gevorderde koekie-aanvalle

As die koekie dieselfde bly (of byna dieselfde) wanneer jy aanteken, beteken dit waarskynlik dat die koekie verband hou met 'n veld van jou rekening (waarskynlik die gebruikersnaam). Dan kan jy:

  • Probeer om baie rekeninge met baie soortgelyke gebruikersname te skep en probeer raai hoe die algoritme werk.
  • Probeer om die gebruikersnaam bruteforce. As die koekie slegs as 'n verifikasiemetode vir jou gebruikersnaam stoor, kan jy 'n rekening skep met die gebruikersnaam "Bmin" en elke enkele bit van jou koekie bruteforce omdat een van die koekies wat jy sal probeer, die een sal wees wat aan "admin" behoort.
  • Probeer Padding Oracle (jy kan die inhoud van die koekie ontsluit). Gebruik padbuster.

Padding Oracle - Padbuster-voorbeelde

padbuster <URL/path/when/successfully/login/with/cookie> <COOKIE> <PAD[8-16]>
# When cookies and regular Base64
padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies auth=u7bvLewln6PJPSAbMb5pFfnCHSEd6olf

# If Base64 urlsafe or hex-lowercase or hex-uppercase --encoding parameter is needed, for example:
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2

Padbuster sal verskeie pogings doen en sal jou vra watter toestand die fouttoestand is (die een wat nie geldig is nie).

Dan sal dit begin om die koekie te ontsluit (dit kan verskeie minute neem)

As die aanval suksesvol uitgevoer is, kan jy probeer om 'n string van jou keuse te versleutel. Byvoorbeeld, as jy user=administrator wil versleutel.

padbuster http://web.com/index.php 1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== 8 -cookies thecookie=1dMjA5hfXh0jenxJQ0iW6QXKkzAGIWsiDAKV3UwJPT2lBP+zAD0D0w== -plaintext user=administrator

Hierdie uitvoering sal jou die koekie korrek versleutel en gekodeer gee met die string user=administrator binne-in.

CBC-MAC

Dalk kan 'n koekie 'n waarde hê en onderteken word met behulp van CBC. Dan is die integriteit van die waarde die handtekening wat geskep word deur CBC met dieselfde waarde te gebruik. Aangesien dit aanbeveel word om 'n nulvektor as IV te gebruik, kan hierdie tipe integriteitskontrole kwesbaar wees.

Die aanval

  1. Kry die handtekening van gebruikersnaam administ = t
  2. Kry die handtekening van gebruikersnaam rator\x00\x00\x00 XOR t = t'
  3. Stel in die koekie die waarde administrator+t' in (t' sal 'n geldige handtekening wees van (rator\x00\x00\x00 XOR t) XOR t = rator\x00\x00\x00

ECB

As die koekie versleutel word met behulp van ECB, kan dit kwesbaar wees.
Wanneer jy inteken, moet die koekie wat jy ontvang altyd dieselfde wees.

Hoe om op te spoor en aan te val:

Skep 2 gebruikers met byna dieselfde data (gebruikersnaam, wagwoord, e-pos, ens.) en probeer om 'n patroon binne die gegee koekie te ontdek.

Skep 'n gebruiker genaamd byvoorbeeld "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" en kyk of daar enige patroon in die koekie is (aangesien ECB met dieselfde sleutel elke blok versleutel, kan dieselfde versleutelde bytes voorkom as die gebruikersnaam versleutel word).

Daar behoort 'n patroon te wees (met die grootte van 'n gebruikte blok). So, deur te weet hoe 'n klomp "a" versleutel is, kan jy 'n gebruikersnaam skep: "a"*(grootte van die blok)+"admin". Dan kan jy die versleutelde patroon van 'n blok "a" uit die koekie verwyder. En jy sal die koekie van die gebruikersnaam "admin" hê.

Verwysings

Vind kwesbaarhede wat die belangrikste is sodat jy dit vinniger kan regmaak. Intruder volg jou aanvalsoppervlak, voer proaktiewe dreigingsskanderings uit, vind probleme regoor jou hele tegniese stapel, van API's tot webtoepassings en wolkstelsels. Probeer dit vandag gratis.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: