hacktricks/pentesting-web/hacking-with-cookies
2024-03-24 13:37:52 +00:00
..
cookie-bomb.md Translated to Swahili 2024-02-11 02:13:58 +00:00
cookie-jar-overflow.md Translated to Swahili 2024-02-11 02:13:58 +00:00
cookie-tossing.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-03-17 16:40:00 +00:00
README.md Translated ['forensics/basic-forensic-methodology/partitions-file-system 2024-03-24 13:37:52 +00:00

Kuvunja Vidakuzi

Jifunze kuhusu kuvunja AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!

Njia nyingine za kusaidia HackTricks:

Kikundi cha Usalama cha Kujitahidi

{% embed url="https://discord.gg/tryhardsecurity" %}


Sifa za Vidakuzi

Vidakuzi huja na sifa kadhaa ambazo hudhibiti tabia yao kwenye kivinjari cha mtumiaji. Hapa kuna muhtasari wa sifa hizi kwa sauti ya kupita:

Muda wa Kufunga na Max-Age

Tarehe ya kufungwa kwa kuki inadhibitiwa na sifa ya Expires. Kinyume chake, sifa ya Max-age inadefini muda kwa sekunde mpaka kuki ifutwe. Chagua Max-age kwani inaakisi mazoea ya kisasa zaidi.

Kikoa

Wenyeji wa kupokea kuki hufafanuliwa na sifa ya Domain. Kwa chaguo-msingi, hii imewekwa kwa mwenyeji aliyeitoa kuki, bila kujumuisha vikoa vyake vya sekondari. Walakini, wakati sifa ya Domain inawekwa wazi, inajumuisha pia vikoa vya sekondari. Hii hufanya ufafanuzi wa sifa ya Domain kuwa chaguo lisilokuwa na kizuizi, lenye manufaa kwa hali ambapo kugawana kuki kati ya vikoa vya sekondari ni muhimu. Kwa mfano, kuweka Domain=mozilla.org hufanya vidakuzi kupatikana kwenye vikoa vyake vya sekondari kama developer.mozilla.org.

Njia

Njia maalum ya URL ambayo lazima iwe wazi kwenye URL iliyotakiwa kwa kichwa cha Cookie kutumwa inaonyeshwa na sifa ya Path. Sifa hii inachukulia / kama kipambanua cha saraka, kuruhusu kupatikana kwa mechi katika vikaragosi vya sekondari pia.

Sheria za Uagizaji

Wakati vidakuzi viwili vinabeba jina moja, kile kinachochaguliwa kutumwa kinafuata:

  • Kuki inayolingana na njia ndefu zaidi kwenye URL iliyotakiwa.
  • Kuki iliyowekwa hivi karibuni zaidi ikiwa njia zinafanana.

SameSite

  • Sifa ya SameSite inadhibiti ikiwa vidakuzi vitatumwa kwenye maombi yanayotoka kwa vikoa vya tatu. Inatoa mipangilio mitatu:
  • Strict: Inazuia kuki kutotumwa kwenye maombi ya vikoa vya tatu.
  • Lax: Inaruhusu kuki kutumwa na maombi ya GET yaliyoanzishwa na tovuti za vikoa vya tatu.
  • None: Inaruhusu kuki kutumwa kutoka kwa kikoa chochote cha tatu.

Kumbuka, wakati wa kusanidi vidakuzi, kuelewa sifa hizi kunaweza kusaidia kuhakikisha vinajitokeza kama ilivyotarajiwa katika hali tofauti.

Aina ya Ombi Msimbo wa Mfano Vidakuzi Vinavyotumwa Wakati
Kiungo <a href="..."></a> NotSet*, Lax, None
Prerender <link rel="prerender" href=".."/> NotSet*, Lax, None
Fomu GET <form method="GET" action="..."> NotSet*, Lax, None
Fomu POST <form method="POST" action="..."> NotSet*, None
iframe <iframe src="..."></iframe> NotSet*, None
AJAX $.get("...") NotSet*, None
Picha <img src="..."> NetSet*, None

Meza kutoka Invicti na imebadilishwa kidogo.
Kuki yenye sifa ya SameSite itasaidia kupunguza mashambulizi ya CSRF ambapo kikao kilichosajiliwa kinahitajika.

*Tambua kwamba kutoka Chrome80 (feb/2019) tabia ya chaguo-msingi ya kuki bila sifa ya kuki samesite itakuwa lax (https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/).
Tambua kuwa kwa muda, baada ya kufanya mabadiliko haya, vidakuzi bila sera ya SameSite katika Chrome vitatibiwa kama None wakati wa kwanza 2 dakika na kisha kama Lax kwa maombi ya POST ya msingi wa juu wa tovuti.

Alama za Vidakuzi

HttpOnly

Hii inazuia mteja kupata kuki (Kupitia Javascript kwa mfano: document.cookie)

Kupitisha

  • Ikiwa ukurasa unatuma vidakuzi kama jibu la maombi (kwa mfano kwenye ukurasa wa PHPinfo), inawezekana kutumia XSS kutuma ombi kwa ukurasa huu na kuiba vidakuzi kutoka kwa jibu (angalia mfano katika https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/.
  • Hii inaweza Kupitishwa na maombi ya HTTP ya TRACE kama jibu kutoka kwa seva (ikiwa njia hii ya HTTP inapatikana) itaonyesha vidakuzi vilivyotumwa. Mbinu hii inaitwa Cross-Site Tracking.
  • Mbinu hii inaepukwa na vivinjari vya kisasa kwa kutokuruhusu kutuma ombi la TRACE kutoka JS. Walakini, baadhi ya njia za kupitisha hii zimepatikana katika programu maalum kama kutuma \r\nTRACE badala ya TRACE kwa IE6.0 SP2.
  • Njia nyingine ni kutumia udhaifu wa siku/zero wa vivinjari.
  • Inawezekana kuandika upya vidakuzi vya HttpOnly kwa kufanya shambulio la kujaza Jar ya Kuki:

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

Salama

Ombi litatuma kuki pekee kwenye ombi la HTTP ikiwa ombi linatumwa kupitia kituo salama (kawaida HTTPS).

Vielekezi vya Vidakuzi

Vidakuzi vilivyo na kipimo cha __Secure- vinahitajika kuwekwa pamoja na bendera ya salama kutoka kwenye kurasa zilizolindwa na HTTPS.

Kwa vidakuzi vilivyo na kipimo cha __Host-, hali kadhaa lazima zikutane:

  • Lazima viwekwe na bendera ya salama.
  • Lazima vitoke kutoka kwenye ukurasa uliolindwa na HTTPS.
  • Imezuiliwa kutaja kikoa, kuzuia usafirishaji wao kwa vikoa vya sekondari.
  • Njia kwa vidakuzi hivi lazima iwekwe kama /.

Ni muhimu kutambua kuwa vidakuzi vilivyo na kipimo cha __Host- hairuhusiwi kutumwa kwa vikoa vya juu au vikoa vya sekondari. Kizuizi hiki husaidia katika kuzingatia vidakuzi vya programu. Hivyo, kutumia kipimo cha __Host- kwa vidakuzi vyote vya programu kunaweza kuchukuliwa kama mazoea mazuri ya kuboresha usalama na kujitenga.

Kubadilisha Vidakuzi

Kwa hivyo, moja ya kinga ya vidakuzi vilivyo na kipimo cha __Host- ni kuzuia kubadilishwa kutoka kwa subdomains. Kuzuia kwa mfano mashambulizi ya Kutupa Vidakuzi. Katika mazungumzo Vidakuzi Vinavyovunjika: Kufunua Udhaifu wa Uadilifu wa Kikao cha Wavuti (karatasi) ilionyeshwa kuwa ilikuwa inawezekana kuweka vidakuzi vilivyo na kipimo cha __HOST- kutoka kwa subdomain, kwa kudanganya parser, kwa mfano, kuongeza "=" mwanzoni au mwanzoni na mwishoni...:

Au katika PHP ilikuwa inawezekana kuongeza herufi nyingine mwanzoni mwa jina la kuki ambazo zingebadilishwa na herufi za chini, kuruhusu kubadilisha vidakuzi vya __HOST-:

Mashambulizi ya Vidakuzi

Ikiwa kuki ya desturi ina data nyeti hakiki (haswa ikiwa unacheza CTF), kwani inaweza kuwa na udhaifu.

Kudecode na Kubadilisha Vidakuzi

Data nyeti iliyofichwa katika vidakuzi inapaswa daima kuchunguzwa kwa makini. Vidakuzi vilivyofichwa kwa Base64 au muundo kama huo mara nyingi vinaweza kudekodiwa. Udhaifu huu huruhusu wachomaji kubadilisha maudhui ya kuki na kujifanya kuwa watumiaji wengine kwa kuweka data yao iliyobadilishwa ndani ya kuki.

Udukuzi wa Kikao

Shambulio hili linahusisha kuiba kuki ya mtumiaji ili kupata ufikiaji usioruhusiwa kwenye akaunti yao ndani ya programu. Kwa kutumia kuki iliyoibiwa, mchomaji anaweza kujifanya kuwa mtumiaji halali.

Kufikia Kikao

Katika hali hii, mchomaji anadanganya mhanga kutumia kuki maalum kuingia. Ikiwa programu haipangi kuki mpya wakati wa kuingia, mchomaji, akiwa na kuki ya awali, anaweza kujifanya kuwa mhanga. Mbinu hii inategemea mhanga kuingia na kuki iliyotolewa na mchomaji.

Ikiwa umepata XSS katika subdomain au unadhibiti subdomain, soma:

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

Kutoa Kikao

Hapa, mchomaji anashawishi mhanga kutumia kuki ya kikao cha mchomaji. Mhanga, akiamini kuwa wameingia kwenye akaunti yao wenyewe, bila kukusudia watatekeleza vitendo katika muktadha wa akaunti ya mchomaji.

Ikiwa umepata XSS katika subdomain au unadhibiti subdomain, soma:

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

Vidakuzi vya JWT

Bonyeza kwenye kiungo kilichotangulia kupata ukurasa unaoelezea udhaifu unaowezekana katika JWT.

Vidakuzi vya JSON Web Tokens (JWT) vilivyotumika katika vidakuzi pia vinaweza kuwa na udhaifu. Kwa habari kamili juu ya udhaifu unaowezekana na jinsi ya kuzitumia, kupata hati iliyounganishwa kwenye udukuzi wa JWT inapendekezwa.

Udukuzi wa Ombi la Msalaba wa Tovuti (CSRF)

Shambulio hili lalazimisha mtumiaji aliyeingia kutekeleza vitendo visivyotakiwa kwenye programu ya wavuti ambayo kwa sasa wamehakikiwa. Wachomaji wanaweza kutumia vidakuzi ambavyo huletwa moja kwa moja na kila ombi kwa tovuti yenye udhaifu.

Vidakuzi Tupu

(Angalia maelezo zaidi katika utafiti wa awali) Vivinjari huruhusu uundaji wa vidakuzi bila jina, ambayo inaweza kuonyeshwa kupitia JavaScript kama ifuatavyo:

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

Matokeo katika kichwa cha kidakuzi kilichotumwa ni a=v1; thibitisha thamani; b=v2;. Kwa kushangaza, hii inaruhusu kubadilisha vidakuzi ikiwa kidakuzi cha jina tupu kimesetwa, ikidhibiti vidakuzi vingine kwa kuweka kidakuzi tupu kwa thamani maalum:

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

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

Hii inapelekea kivinjari kutuma kichwa cha cookie kinachotafsiriwa na kila seva ya wavuti kama cookie iliyoitwa a yenye thamani b.

Kosa la Chrome: Shida ya Kipengee cha Kanuni ya Surrogate ya Unicode

document.cookie = "\ud800=meep";

Hii inasababisha document.cookie kutoa matokeo ya herufi tupu, ikionyesha uharibifu wa kudumu.

( Angalia maelezo zaidi katika utafiti wa awali) Seva kadhaa za wavuti, ikiwa ni pamoja na zile za Java (Jetty, TomCat, Undertow) na Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), zinashughulikia vibaya herufi za cookie kutokana na msaada uliopitwa na wakati wa RFC2965. Huzisoma thamani za cookie zilizofungwa kwa alama mbili kama thamani moja hata kama ina pamoja na vipande vya nukta-kuu, ambavyo kawaida vinapaswa kutenganisha jozi za funguo-thamani:

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

Udhaifu wa Kuingiza Vidakuzi

(Angalia maelezo zaidi katika utafiti wa awali) Uchambuzi usio sahihi wa vidakuzi na seva, hasa Undertow, Zope, na wale wanaotumia http.cookie.SimpleCookie na http.cookie.BaseCookie ya Python, hutoa fursa za mashambulizi ya kuingiza vidakuzi. Seva hizi hazifanikiwi kufafanua kwa usahihi mwanzo wa vidakuzi vipya, kuruhusu wadukuzi kujifanya kuwa vidakuzi:

  • Undertow inatarajia kudukuliwa kwa kuki mpya mara moja baada ya thamani iliyonyooka bila ya mkato.
  • Zope inatafuta koma kuanza kuchambua kuki inayofuata.
  • Darasa za kuki za Python huanza kuchambua kwa herufi ya nafasi.

Udhaifu huu ni hatari hasa katika maombi ya wavuti yanayotegemea ulinzi wa CSRF kwa kutumia vidakuzi, kwani inaruhusu wadukuzi kuingiza vidakuzi bandia vya CSRF-token, ikipitisha hatua za usalama. Tatizo hili linazidishwa na jinsi Python inavyoshughulikia majina ya vidakuzi maradufu, ambapo tukio la mwisho linapuuza yale ya awali. Pia inaleta wasiwasi kwa vidakuzi vya __Secure- na __Host- katika muktadha usio salama na inaweza kusababisha upitishaji wa idhini wakati vidakuzi vinapitishwa kwa seva za nyuma zinazoweza kudukuliwa.

Ukaguzi wa Vidakuzi Vilivyozidi Kuwa Dhaifu

Uchunguzi wa Msingi

  • Kuki ni sawa kila wakati unapojisajili.
  • Tolea nje na jaribu kutumia kuki hiyo hiyo.
  • Jaribu kuingia kwa kutumia vifaa 2 (au vivinjari) kwenye akaunti moja kwa kutumia kuki hiyo hiyo.
  • Angalia kama kuki ina habari yoyote ndani yake na jaribu kuibadilisha.
  • Jaribu kuunda akaunti kadhaa zenye majina ya mtumiaji yanayofanana na uangalie kama unaweza kuona mfanano.
  • Angalia chaguo la "kumbuka" ikiwepo kuona jinsi inavyofanya kazi. Ikiwepo na inaweza kuwa dhaifu, tumia daima kuki ya kumbuka bila kuki nyingine yoyote.
  • Angalia kama kuki ya awali inafanya kazi hata baada ya kubadilisha nenosiri.

Mashambulizi ya Vidakuzi ya Juu

Ikiwa kuki inabaki sawa (au karibu) unapojisajili, hii inamaanisha labda kuki hiyo inahusiana na uga fulani wa akaunti yako (labda jina la mtumiaji). Kisha unaweza:

  • Jaribu kuunda akaunti nyingi zenye majina ya mtumiaji vinavyofanana sana na jaribu kudhan jinsi algorithm inavyofanya kazi.
  • Jaribu kuvunja nguvu jina la mtumiaji. Ikiwa kuki inahifadhi tu kama njia ya uthibitisho kwa jina lako la mtumiaji, basi unaweza kuunda akaunti na jina la mtumiaji "Bmin" na kuvunja nguvu kila biti ya kuki yako kwa sababu moja ya vidakuzi utakavyojaribu itakuwa inayomilikiwa na "admin".
  • Jaribu Padding Oracle (unaweza kufichua maudhui ya kuki). Tumia padbuster.

Oracle ya Padding - Mifano ya Padbuster

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 itafanya majaribio kadhaa na itakuuliza ni hali ipi ni hali ya kosa (ile ambayo si sahihi).

Kisha itaanza kufichua cookie (inaweza kuchukua dakika kadhaa)

Ikiwa shambulio limefanikiwa, basi unaweza jaribu kufichua string ya chaguo lako. Kwa mfano, ikiwa ungependa kuficha mtumiaji=msimamizi

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

Utekelezaji huu utakupa kidakuzi kilichofichwa na kikodishwa kwa usahihi na kificho cha herufi user=msimamizi ndani.

CBC-MAC

Labda kidakuzi kinaweza kuwa na thamani fulani na kinaweza kusainiwa kwa kutumia CBC. Kisha, uadilifu wa thamani ni saini iliyoumbwa kwa kutumia CBC na thamani ile ile. Kwa kuwa inapendekezwa kutumia IV kama vector ya sifuri, aina hii ya ukaguzi wa uadilifu inaweza kuwa hatarini.

Shambulio

  1. Pata saini ya jina la mtumiaji msimamizi = t
  2. Pata saini ya jina la mtumiaji rator\x00\x00\x00 XOR t = t'
  3. Weka katika kidakuzi thamani msimamizi+t' (t' itakuwa saini halali ya (rator\x00\x00\x00 XOR t) XOR t = rator\x00\x00\x00

ECB

Ikiwa kidakuzi kimefichwa kwa kutumia ECB kinaweza kuwa hatarini.
Unapojiingia, kidakuzi unachopokea lazima kiwe sawa daima.

Jinsi ya kugundua na kushambulia:

Unda watumiaji 2 wenye data karibu sawa (jina la mtumiaji, nenosiri, barua pepe, n.k.) na jaribu kugundua mchoro fulani ndani ya kidakuzi kilichopewa

Unda mtumiaji aitwaye kwa mfano "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" na angalia ikiwa kuna mchoro wowote katika kidakuzi (kwa kuwa ECB inakificha kwa kutumia ufunguo sawa kila bloku, herufi zilizofichwa zinaweza kuonekana ikiwa jina la mtumiaji limefichwa).

Inapaswa kuwepo mchoro (wenye saizi ya bloku iliyotumiwa). Kwa hivyo, ukijua jinsi "a" nyingi zilivyofichwa unaweza kuunda jina la mtumiaji: "a"*(saizi ya bloku)+"msimamizi". Kisha, unaweza kufuta mchoro uliofichwa wa bloku ya "a" kutoka kwa kidakuzi. Na utakuwa na kidakuzi cha jina la mtumiaji "msimamizi".

Marejeo

Kikundi cha Usalama cha Kujitahidi Kwa Bidii

{% embed url="https://discord.gg/tryhardsecurity" %}

Jifunze kuhusu kuvamia AWS kutoka mwanzo hadi kuwa shujaa na htARTE (HackTricks AWS Red Team Expert)!

Njia nyingine za kusaidia HackTricks: