.. | ||
cookie-bomb.md | ||
cookie-jar-overflow.md | ||
cookie-tossing.md | ||
README.md |
Kuki za Kudukua
Jifunze kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)!
Njia nyingine za kusaidia HackTricks:
- Ikiwa unataka kuona kampuni yako ikitangazwa kwenye HackTricks au kupakua HackTricks kwa PDF Angalia MIPANGO YA KUJIUNGA!
- Pata bidhaa rasmi za PEASS & HackTricks
- Gundua Familia ya PEASS, mkusanyiko wetu wa NFTs ya kipekee
- Jiunge na 💬 Kikundi cha Discord au kikundi cha telegram au tufuate kwenye Twitter 🐦 @carlospolopm.
- Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa HackTricks na HackTricks Cloud github repos.
Vigezo vya Kuki
Kuki huja na vigezo kadhaa vinavyodhibiti tabia yao kwenye kivinjari cha mtumiaji. Hapa kuna muhtasari wa vigezo hivi kwa sauti ya kupita:
Inatamatika na Max-Age
Tarehe ya kumalizika ya kuki inadhibitiwa na sifa ya Inatamatika
. 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 Kikoa
. Kwa chaguo-msingi, hii imewekwa kwa mwenyeji aliyeitoa kuki, bila kujumuisha subdomains yake. Walakini, wakati sifa ya Kikoa
inawekwa wazi, inajumuisha pia subdomains. Hii hufanya ufafanuzi wa sifa ya Kikoa
kuwa chaguo lisilokuwa na kizuizi, lenye manufaa kwa hali ambapo kugawana kuki kati ya subdomains ni muhimu. Kwa mfano, kuweka Kikoa=mozilla.org
inafanya kuki zipatikane kwenye subdomains kama developer.mozilla.org
.
Njia
Njia maalum ya URL ambayo lazima iwe wazi kwenye URL iliyotakiwa kwa kichwa cha Kuki
kutumwa inaonyeshwa na sifa ya Njia
. Sifa hii inachukulia /
kama kipambanuzi cha saraka, kuruhusu kufanana katika vijisehemu pia.
Sheria za Kuagiza
Wakati kuki mbili zina jina sawa, ile inayochaguliwa kutumwa inategemea:
- Kuki inayofanana na njia ndefu zaidi kwenye URL iliyotakiwa.
- Kuki iliyowekwa hivi karibuni zaidi ikiwa njia ni sawa.
SameSite
- Sifa ya
SameSite
inaamua ikiwa kuki zinatumwa 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 unapoweka kuki, kuelewa vigezo hivi kunaweza kusaidia kuhakikisha zinajitokeza kama ilivyotarajiwa katika hali tofauti.
Aina ya Ombi | Mfano wa Kanuni | Kuki Zinazotumwa 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 |
Jedwali kutoka Invicti na kubadilishwa kidogo.
Kuki yenye sifa ya SameSite itasaidia kupunguza mashambulizi ya CSRF ambapo kikao kilichosajiliwa kinahitajika.
*Tambua kwamba kutoka Chrome80 (feb/2019) tabia ya msingi ya kuki bila sifa ya samesite ya kuki itakuwa lax (https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/).
Tambua kuwa kwa muda, baada ya kutumia mabadiliko haya, kuki bila sera ya SameSite katika Chrome zitashughulikiwa kama None wakati wa kwanza 2 dakika na kisha kama Lax kwa maombi ya POST ya juu ya kiwango cha juu cha tovuti.
Alama za Kuki
HttpOnly
Hii inazuia mteja kupata kuki (Kupitia Javascript kwa mfano: document.cookie
)
Kupitisha
- Ikiwa ukurasa unatuma kuki kama jibu la maombi (kwa mfano kwenye ukurasa wa PHPinfo), inawezekana kutumia XSS kupeleka ombi kwa ukurasa huu na kuiba kuki 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 kuki zilizotumwa. 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 yaTRACE
kwa IE6.0 SP2. - Njia nyingine ni kutumia mapungufu ya siku/zero ya vivinjari.
- Inawezekana kuandika upya kuki za HttpOnly kwa kufanya shambulio la kujaza Jar ya Kuki:
{% content-ref url="cookie-jar-overflow.md" %} cookie-jar-overflow.md {% endcontent-ref %}
- Inawezekana kutumia shambulio la Kuki Smuggling kudukua kuki hizi
Salama
Ombi litatuma kuki pekee kwenye ombi la HTTP ikiwa ombi linatumwa kupitia kituo salama (kawaida HTTPS).
Vielezi vya Kuki
Kuki zenye kielezi cha __Secure-
inahitajika kuwekwa pamoja na bendera ya salama
kutoka kwenye kurasa zilizolindwa na HTTPS.
Kwa kuki zenye kielezi cha __Host-
, masharti kadhaa lazima yatimizwe:
- Lazima ziwekwe na bendera ya
salama
. - Lazima zitoke kutoka kwenye ukurasa uliolindwa na HTTPS.
- Zimepigwa marufuku kutaja kikoa, kuzuia kutumwa kwao kwa subdomains.
- Njia kwa kuki hizi lazima iwekwe kwa
/
.
Ni muhimu kutambua kuwa kuki zenye kielezi cha __Host-
haziruhusiwi kutumwa kwa superdomains au subdomains. Kizuizi hiki husaidia katika kuzingatia kuki za programu. Hivyo, kutumia kielezi cha __Host-
kwa kuki zote za programu kunaweza kuchukuliwa kama mazoea mazuri ya kuboresha usalama na kujitenga.
Mashambulizi ya Vidakuzi
Ikiwa kuki ya desturi ina data nyeti ichunguze (hasa kama unashiriki katika CTF), kwani inaweza kuwa hatarini.
Kudecode na Kubadilisha Vidakuzi
Data nyeti iliyofichwa katika vidakuzi lazima ichunguzwe kwa umakini. Vidakuzi vilivyofichwa kwa Base64 au muundo sawa mara nyingi vinaweza kudecode. Udhaifu huu huruhusu wachomaji kubadilisha maudhui ya kuki na kujifanya kuwa watumiaji wengine kwa kuweka data yao iliyobadilishwa ndani ya kuki.
Utekaji wa Kikao
Mashambulizi haya yanahusisha kuiba kuki ya mtumiaji ili kupata ufikiaji usioidhinishwa kwenye akaunti yao ndani ya programu. Kwa kutumia kuki iliyoibiwa, mchomaji anaweza kujifanya kuwa mtumiaji halali.
Ufikiaji wa 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 kwa 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 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 unaoeleza dosari zinazowezekana katika JWT.
Vidakuzi vilivyotumia JSON Web Tokens (JWT) pia vinaweza kuwa na udhaifu. Kwa habari kamili kuhusu dosari zinazowezekana na jinsi ya kuzitumia, kupata hati iliyounganishwa kuhusu kuchomwa kwa JWT kunapendekezwa.
Udukuzi wa Ombi la Msalaba kwa Tovuti (CSRF)
Mashambulizi haya yanawalazimisha mtumiaji aliyeingia kutekeleza vitendo visivyotakiwa kwenye programu ya wavuti ambayo wamehakikiwa kwa sasa. Wachomaji wanaweza kutumia vidakuzi ambavyo huletwa moja kwa moja na kila ombi kwenye 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 udhibiti wa vidakuzi ikiwa kidakuzi cha jina tupu kimesetwa, hivyo kudhibiti 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.
Kupitisha Cookies Kutokana na Matatizo ya Upatanishi
( 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 ya cookie iliyofungwa mara mbili kama thamani moja hata kama ina pamoja na vipande vya nukta nyingi, ambavyo kawaida vinapaswa kutenganisha jozi za funguo-na-thamani:
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
Mapungufu ya Uvujaji wa Cookie
(Angalia maelezo zaidi katika utafiti wa awali) Uchambuzi usio sahihi wa cookies na seva, hasa Undertow, Zope, na wale wanaotumia http.cookie.SimpleCookie
na http.cookie.BaseCookie
ya Python, hutoa fursa za mashambulizi ya kuingiza cookie. Seva hizi hazitenganishi ipasavyo mwanzo wa cookies mpya, kuruhusu wadukuzi kughushi cookies:
- Undertow inatarajia cookie mpya mara moja baada ya thamani iliyonukuliwa bila punto-virgula.
- Zope inatafuta comma kuanza kuchambua cookie inayofuata.
- Darasa za cookie za Python huanza kuchambua kwenye herufi ya nafasi.
Mapungufu haya ni hatari hasa katika maombi ya wavuti yanayotegemea ulinzi wa CSRF kulingana na cookies, kwani inaruhusu wadukuzi kuingiza cookies za CSRF zilizoghushi, hivyo kupitisha hatua za usalama. Tatizo hili linazidishwa na jinsi Python inavyoshughulikia majina ya cookies yanayorudiwa, ambapo tukio la mwisho linapitisha yale ya awali. Pia inaleta wasiwasi kwa cookies za __Secure-
na __Host-
katika muktadha usio salama na inaweza kusababisha upitishaji wa idhini wakati cookies zinapitishwa kwa seva za nyuma zinazoweza kughushiwa.
Ukaguzi wa Ziada wa Cookies Zenye Mapungufu
Uchunguzi wa Msingi
- Cookie ni sawa kila wakati unapojiunga.
- Tolea nje na jaribu kutumia cookie hiyo hiyo.
- Jaribu kuingia kwa kutumia vifaa 2 (au vivinjari) kwenye akaunti moja kwa kutumia cookie hiyo hiyo.
- Angalia kama cookie ina habari yoyote ndani yake na jaribu kuibadilisha.
- Jaribu kuunda akaunti kadhaa zenye majina yanayofanana na uangalie kama unaweza kuona mfanano.
- Angalia chaguo la "kumbuka" ikiwepo kuona jinsi inavyofanya kazi. Ikiwepo na inaweza kuwa na mapungufu, tumia daima cookie ya kumbuka bila cookie nyingine yoyote.
- Angalia kama cookie ya awali inafanya kazi hata baada ya kubadilisha nenosiri.
Mashambulizi ya Cookies ya Juu
Ikiwa cookie inabaki sawa (au karibu) unapojiunga, hii inamaanisha labda cookie 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 bruteforce jina la mtumiaji. Ikiwa cookie inahifadhi tu kama njia ya uwakilishi kwa jina lako la mtumiaji, basi unaweza kuunda akaunti na jina la mtumiaji "Bmin" na bruteforce kila biti ya cookie yako kwa sababu moja ya cookies utakazozijaribu itakuwa ile inayomilikiwa na "admin".
- Jaribu Padding Oracle (unaweza kufichua maudhui ya cookie). Tumia padbuster.
Padding Oracle - 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 kuki iliyofichwa na kodishwa kwa usahihi na kifurushi user=msimamizi ndani yake.
CBC-MAC
Labda kuki inaweza kuwa na thamani fulani na inaweza 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 null, aina hii ya ukaguzi wa uadilifu inaweza kuwa hatarini.
Shambulio
- Pata saini ya jina la mtumiaji msimamizi = t
- Pata saini ya jina la mtumiaji rator\x00\x00\x00 XOR t = t'
- Weka thamani msimamizi+t' katika kuki (t' itakuwa saini halali ya (rator\x00\x00\x00 XOR t) XOR t = rator\x00\x00\x00
ECB
Ikiwa kuki imefichwa kwa kutumia ECB inaweza kuwa hatarini.
Unapojiingia, kuki unayopokea lazima iwe ile ile 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 kuki iliyotolewa
Unda mtumiaji aitwaye kwa mfano "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" na angalia ikiwa kuna mchoro wowote katika kuki (kwa kuwa ECB inafichua kwa kutumia ufunguo sawa kila kizuizi, herufi zilizofichwa sawa zinaweza kuonekana ikiwa jina la mtumiaji limefichwa).
Inapaswa kuwepo mchoro (ukiwa na ukubwa wa kizuizi kilichotumiwa). Kwa hivyo, ukiwa unajua jinsi "a" nyingi zilivyofichwa unaweza kuunda jina la mtumiaji: "a"*(ukubwa wa kizuizi)+"msimamizi". Kisha, unaweza kufuta mchoro uliofichwa wa kizuizi cha "a" kutoka kwenye kuki. Na utakuwa na kuki ya jina la mtumiaji "msimamizi".