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

This commit is contained in:
Translator 2024-11-05 18:07:43 +00:00
parent b3e512f14a
commit 06b2aa014f
5 changed files with 247 additions and 187 deletions

View file

@ -1,8 +1,8 @@
# APK decompilers
{% hint style="success" %}
Leer & oefen 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">\
Leer & oefen 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)
Leer & oefen 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">\
Leer & oefen 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,10 +14,8 @@ Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
</details>
{% endhint %}
{% endhint %}
**Vir verdere besonderhede oor elke hulpmiddel, kyk die oorspronklike pos van [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)**
**Vir verdere besonderhede oor elke hulpmiddel, kyk die oorspronklike pos van** [**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)
@ -27,9 +25,9 @@ As die baanbrekende GUI Java decompiler, **JD-Gui** laat jou toe om Java kode bi
**Jadx** bied 'n gebruikersvriendelike koppelvlak vir die dekompilering van Java kode uit Android toepassings. Dit word aanbeveel vir sy gebruiksgemak oor verskillende platforms.
- Om die GUI te begin, navigeer na die bin-gids en voer uit: `jadx-gui`
- Vir opdraglyn gebruik, decompileer 'n APK met: `jadx app.apk`
- Om 'n uitvoer gids te spesifiseer of dekompilering opsies aan te pas: `jadx app.apk -d <path to output dir> --no-res --no-src --no-imports`
* Om die GUI te begin, navigeer na die bin-gids en voer uit: `jadx-gui`
* Vir opdraglyn gebruik, decompileer 'n APK met: `jadx app.apk`
* Om 'n uitvoer gids te spesifiseer of dekompilering opsies aan te pas: `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)
@ -43,31 +41,48 @@ Met **Bytecode-Viewer**, kan jy APK lêers analiseer met behulp van verskeie dec
**Enjarify** vertaal Dalvik bytecode na Java bytecode, wat dit moontlik maak vir Java analise gereedskap om Android toepassings meer effektief te analiseer.
- Om Enjarify te gebruik, voer uit: `enjarify app.apk`
Dit genereer die Java bytecode ekwivalent van die verskafde APK.
* Om Enjarify te gebruik, voer uit: `enjarify app.apk` Dit genereer die Java bytecode ekwivalent van die verskafde APK.
### [CFR](https://github.com/leibnitz27/cfr)
**CFR** is in staat om moderne Java funksies te decompileer. Gebruik dit soos volg:
- Vir standaard dekompilering: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
- Vir groot JAR lêers, pas die JVM geheue toewysing aan: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* Vir standaard dekompilering: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
* Vir groot JAR lêers, pas die JVM geheue toewysing aan: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
**Fernflower**, 'n analitiese decompiler, vereis om van bron gebou te word. Nadat jy gebou het:
**Fernflower**, 'n analitiese decompiler, vereis om van bron te bou. Nadat jy gebou het:
- Decompileer 'n JAR lêer: `java -jar ./fernflower.jar "app.jar" "output_directory"`
Trek dan die `.java` lêers uit die gegenereerde JAR met `unzip`.
* Decompileer 'n JAR lêer: `java -jar ./fernflower.jar "app.jar" "output_directory"` Trek dan die `.java` lêers uit die gegenereerde JAR met `unzip`.
### [Krakatau](https://github.com/Storyyeller/Krakatau)
**Krakatau** bied gedetailleerde beheer oor dekompilering, veral vir die hantering van eksterne biblioteke.
- Gebruik Krakatau deur die standaard biblioteek pad en die JAR lêer wat gedekomplileer moet word, te spesifiseer: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
* Gebruik Krakatau deur die standaard biblioteek pad en die JAR lêer wat gedekomplileer moet word, te spesifiseer: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
### [procyon](https://github.com/mstrobel/procyon)
Vir eenvoudige dekompilering met **procyon**:
- Decompileer 'n JAR lêer na 'n spesifieke gids: `procyon -jar "app.jar" -o "output_directory"`
* Decompileer 'n JAR lêer na 'n spesifieke gids: `procyon -jar "app.jar" -o "output_directory"`
### [frida-DEXdump](https://github.com/hluwa/frida-dexdump)
Hierdie hulpmiddel kan gebruik word om die DEX van 'n lopende APK in geheue te dump. Dit help om statiese obfuskaasie te oorkom wat verwyder word terwyl die toepassing in geheue uitgevoer word.
{% hint style="success" %}
Leer & oefen 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">\
Leer & oefen 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>
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,12 +1,12 @@
# iOS Toetsomgewing
# iOS Testing Environment
{% hint style="success" %}
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Leer & oefen 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">\
Leer & oefen 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>Ondersteun HackTricks</summary>
<summary>Support HackTricks</summary>
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
@ -14,37 +14,36 @@ Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
</details>
{% endhint %}
{% endhint %}
## Apple Ontwikkelaar Program
## Apple Developer Program
'n **Provisioning identiteit** is 'n versameling van publieke en private sleutels wat aan 'n Apple ontwikkelaar rekening gekoppel is. Om **apps te teken** moet jy **99$/jaar** betaal om te registreer in die **Apple Ontwikkelaar Program** om jou provisioning identiteit te verkry. Sonder dit sal jy nie in staat wees om toepassings vanaf die bronkode op 'n fisiese toestel te loop nie. 'n Ander opsie om dit te doen is om 'n **gejailbreakte toestel** te gebruik.
'n **Provisioning identity** is 'n versameling van publieke en private sleutels wat aan 'n Apple ontwikkelaar rekening gekoppel is. Om **apps te teken** moet jy **99$/jaar** betaal om te registreer in die **Apple Developer Program** om jou provisioning identity te verkry. Sonder dit sal jy nie in staat wees om toepassings vanaf die bronkode op 'n fisiese toestel te loop nie. 'n Ander opsie om dit te doen is om 'n **jailbroken toestel** te gebruik.
Begin in Xcode 7.2 het Apple 'n opsie verskaf om 'n **gratis iOS ontwikkeling provisioning profiel** te skep wat jou toelaat om jou toepassing op 'n werklike iPhone te skryf en te toets. Gaan na _Xcode_ --> _Voorkeure_ --> _Rekeninge_ --> _+_ (Voeg nuwe Appli ID by jou geloofsbriewe) --> _Klik op die Apple ID wat geskep is_ --> _Bestuur Sertifikate_ --> _+_ (Apple Ontwikkeling) --> _Klaar_\
\_\_Dan, om jou toepassing op jou iPhone te laat loop moet jy eers **aangee dat die iPhone die rekenaar moet vertrou.** Dan kan jy probeer om die **toepassing op die mobiele toestel vanaf Xcode te laat loop,** maar 'n fout sal verskyn. Gaan dus na _Instellings_ --> _Algemeen_ --> _Profiele en Toestuurbestuur_ --> Kies die onbetroubare profiel en klik "**Vertrou**".
Begin in Xcode 7.2 het Apple 'n opsie verskaf om 'n **gratis iOS ontwikkeling provisioning profiel** te skep wat jou toelaat om jou toepassing op 'n werklike iPhone te skryf en te toets. Gaan na _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Voeg nuwe Appli ID by jou besonderhede) --> _Klik op die Apple ID wat geskep is_ --> _Bestuur Sertifikate_ --> _+_ (Apple Development) --> _Klaar_\
\_\_Dan, om jou toepassing op jou iPhone te laat loop moet jy eers **aangee dat die iPhone die rekenaar moet vertrou.** Dan kan jy probeer om die **toepassing op die mobiele toestel vanaf Xcode te laat loop,** maar 'n fout sal verskyn. Gaan dus na _Settings_ --> _General_ --> _Profiles and Device Management_ --> Kies die onbetroubare profiel en klik "**Vertrou**".
Let daarop dat **toepassings wat deur dieselfde teken sertifikaat geteken is, hulpbronne op 'n veilige manier kan deel, soos sleutelhouer items**.
Let daarop dat **toepassings wat deur dieselfde teken sertifikaat geteken is, hulpbronne op 'n veilige manier kan deel, soos sleutelsak items**.
Die provisioning profiele word binne die foon gestoor in **`/Library/MobileDevice/ProvisioningProfiles`**
## **Simulator**
{% hint style="info" %}
Let daarop dat 'n **simulator nie dieselfde is as 'n emulator** nie. Die simulator simuleer net die gedrag van die toestel en funksies, maar gebruik hulle nie werklik nie.
Let daarop dat 'n **simulator nie dieselfde is as 'n emulator**. Die simulator simuleer net die gedrag van die toestel en funksies, maar gebruik hulle nie werklik nie.
{% endhint %}
### **Simulator**
Die eerste ding wat jy moet weet is dat **om 'n pentest binne 'n simulator uit te voer baie meer beperk sal wees as om dit op 'n gejailbreakte toestel te doen**.
Die eerste ding wat jy moet weet is dat **om 'n pentest binne 'n simulator uit te voer baie meer beperk sal wees as om dit op 'n jailbroken toestel te doen**.
Al die gereedskap wat benodig word om 'n iOS app te bou en te ondersteun, is **slegs amptelik ondersteun op Mac OS**.\
Alle gereedskap wat benodig word om 'n iOS app te bou en te ondersteun, is **slegs amptelik ondersteun op Mac OS**.\
Apple se de facto gereedskap vir die skep/debugging/instrumentering van iOS toepassings is **Xcode**. Dit kan gebruik word om ander komponente soos **simulators** en verskillende **SDK** **weergawe** wat benodig word om jou app te bou en **te toets** af te laai.\
Dit word sterk aanbeveel om **Xcode** van die **amptelike app winkel** af te laai. Ander weergawes mag malware dra.
Die simulator lêers kan gevind word in `/Users/<username>/Library/Developer/CoreSimulator/Devices`
Om die simulator te open, hardloop Xcode, druk dan in die _Xcode tab_ --> _Open Ontwikkelaar gereedskap_ --> _Simulator_\
\_\_In die volgende beeld kan jy deur op "iPod touch \[...\]" te klik 'n ander toestel kies om op te toets:
Om die simulator te open, hardloop Xcode, druk dan op die _Xcode tab_ --> _Open Developer tools_ --> _Simulator_\
\_\_In die volgende beeld kan jy deur op "iPod touch \[...\]" te klik, 'n ander toestel kies om op te toets:
![](<../../.gitbook/assets/image (270).png>)
@ -52,7 +51,7 @@ Om die simulator te open, hardloop Xcode, druk dan in die _Xcode tab_ --> _Open
### Toepassings in die Simulator
Binne `/Users/<username>/Library/Developer/CoreSimulator/Devices` kan jy al die **geïnstalleerde simulators** vind. As jy toegang wil hê tot die lêers van 'n toepassing wat binne een van die emulators geskep is, kan dit moeilik wees om te weet **in watter een die app geïnstalleer is**. 'n Vinige manier om die **regte UID te vind** is om die app in die simulator te hardloop en die volgende uit te voer:
Binne `/Users/<username>/Library/Developer/CoreSimulator/Devices` kan jy al die **geïnstalleerde simulators** vind. As jy toegang wil hê tot die lêers van 'n toepassing wat binne een van die emulators geskep is, kan dit moeilik wees om te weet **in watter een die app geïnstalleer is**. 'n Vinige manier om die **regte UID te vind** is om die app in die simulator te laat loop en die volgende uit te voer:
```bash
xcrun simctl list | grep Booted
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
@ -67,46 +66,50 @@ And in this folder you can **find the package of the application.**
Corellium is the only publicly available iOS emulator. It is an enterprise SaaS solution with a per user license model and does not offer any trial license.
## Jailbeaking
## No Jailbreak needed
Apple vereis streng dat die kode wat op die iPhone loop, **onderteken moet wees deur 'n sertifikaat wat deur Apple uitgereik is**. **Jailbreaking** is die proses om aktief **soos beperkings te omseil** en ander sekuriteitsbeheermaatreëls wat deur die OS ingestel is. Daarom, sodra die toestel gejailbreak is, word die **integriteitskontrole** wat verantwoordelik is vir die nagaan van geïnstalleerde toepassings, gepatch sodat dit **omseil** word.
Check this blog post about how to pentest an iOS application in a **non jailbroken device**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
## Jailbreaking
Apple vereis streng dat die kode wat op die iPhone loop **onderteken moet wees deur 'n sertifikaat wat deur Apple uitgereik is**. **Jailbreaking** is die proses om aktief **soos beperkings te omseil** en ander sekuriteitsbeheermaatreëls wat deur die OS ingestel is. Daarom, sodra die toestel gejailbreak is, word die **integriteitskontrole** wat verantwoordelik is vir die kontrole van geïnstalleerde toepassings, reggestel sodat dit **omseil** word.
{% hint style="info" %}
Unlike Android, **you cannot switch to "Developer Mode"** in iOS to run unsigned/untrusted code on the device.
In teenstelling met Android, **kan jy nie na "Ontwikkelaarsmodus"** in iOS oorgaan om ongetekende/onbetroubare kode op die toestel te loop nie.
{% endhint %}
### Android Rooting vs. iOS Jailbreaking
While often compared, **rooting** on Android and **jailbreaking** on iOS are fundamentally different processes. Rooting Android devices might involve **installing the `su` binary** or **replacing the system with a rooted custom ROM**, which doesn't necessarily require exploits if the bootloader is unlocked. **Flashing custom ROMs** replaces the device's OS after unlocking the bootloader, sometimes requiring an exploit.
Terwyl dit dikwels vergelyk word, is **rooting** op Android en **jailbreaking** op iOS fundamenteel verskillende prosesse. Rooting Android-toestelle kan behels **om die `su` binaire te installeer** of **die stelsels met 'n ge-rootte pasgemaakte ROM te vervang**, wat nie noodwendig eksplosiewe benodig as die bootloader ontgrendel is nie. **Flashing pasgemaakte ROMs** vervang die toestel se OS na die ontgrendeling van die bootloader, wat soms 'n eksplosiewe benodig.
In contrast, iOS devices cannot flash custom ROMs due to the bootloader's restriction to only boot Apple-signed images. **Jailbreaking iOS** aims to bypass Apple's code signing protections to run unsigned code, a process complicated by Apple's continuous security enhancements.
In teenstelling hiermee kan iOS-toestelle nie pasgemaakte ROMs flits nie weens die bootloader se beperking om slegs Apple-ondertekende beelde te begin. **Jailbreaking iOS** het ten doel om Apple se kodeondertekening beskerming te omseil om ongetekende kode te laat loop, 'n proses wat bemoeilik word deur Apple se deurlopende sekuriteitsverbeterings.
### Jailbreaking Challenges
Jailbreaking iOS is increasingly difficult as Apple patches vulnerabilities quickly. **Downgrading iOS** is only possible for a limited time after a release, making jailbreaking a time-sensitive matter. Devices used for security testing should not be updated unless re-jailbreaking is guaranteed.
Jailbreaking iOS word al hoe moeiliker namate Apple kwesbaarhede vinnig regstel. **Downgrading iOS** is slegs vir 'n beperkte tyd moontlik na 'n vrystelling, wat jailbreaking 'n tydsensitive saak maak. Toestelle wat vir sekuriteitstoetsing gebruik word, moet nie opgedateer word nie, tensy her-jailbreaking gewaarborg word.
iOS updates are controlled by a **challenge-response mechanism** (SHSH blobs), allowing installation only for Apple-signed responses. This mechanism, known as a "signing window", limits the ability to store and later use OTA firmware packages. The [IPSW Downloads website](https://ipsw.me) is a resource for checking current signing windows.
iOS-opdaterings word beheer deur 'n **uitdaging-respons meganisme** (SHSH blobs), wat installasie slegs toelaat vir Apple-ondertekende antwoorde. Hierdie meganisme, bekend as 'n "onderteken venster", beperk die vermoë om OTA firmware-pakkette te stoor en later te gebruik. Die [IPSW Downloads website](https://ipsw.me) is 'n hulpbron om huidige onderteken vensters te kontroleer.
### Jailbreak Varieties
* **Tethered jailbreaks** require a computer connection for each reboot.
* **Semi-tethered jailbreaks** allow booting into non-jailbroken mode without a computer.
* **Semi-untethered jailbreaks** require manual re-jailbreaking without needing a computer.
* **Untethered jailbreaks** offer a permanent jailbreak solution without the need for re-application.
* **Tethered jailbreaks** vereis 'n rekenaarverbinding vir elke herbegin.
* **Semi-tethered jailbreaks** laat boot in nie-gejailbreakte modus toe sonder 'n rekenaar.
* **Semi-untethered jailbreaks** vereis handmatige her-jailbreaking sonder die behoefte aan 'n rekenaar.
* **Untethered jailbreaks** bied 'n permanente jailbreak-oplossing sonder die behoefte aan her-toepassing.
### Jailbreaking Tools and Resources
Jailbreaking tools vary by iOS version and device. Resources such as [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com), and [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) provide up-to-date information. Examples include:
Jailbreaking gereedskap verskil volgens iOS weergawe en toestel. Hulpbronne soos [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com), en [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) bied opdaterings inligting. Voorbeelde sluit in:
* [Checkra1n](https://checkra.in/) for A7-A11 chip devices.
* [Palera1n](https://palera.in/) for Checkm8 devices (A8-A11) on iOS 15.0-16.5.
* [Unc0ver](https://unc0ver.dev/) for iOS versions up to 14.8.
* [Checkra1n](https://checkra.in/) vir A7-A11 chip toestelle.
* [Palera1n](https://palera.in/) vir Checkm8 toestelle (A8-A11) op iOS 15.0-16.5.
* [Unc0ver](https://unc0ver.dev/) vir iOS weergawes tot 14.8.
Modifying your device carries risks, and jailbreaking should be approached with caution.
Die aanpassing van jou toestel dra risiko's, en jailbreaking moet met omsigtigheid benader word.
### Jailbreaking Benefits and Risks
Jailbreaking **verwyder OS-geïndikte sandboxing**, wat toepassings toelaat om toegang tot die hele lêerstelsel te verkry. Hierdie vryheid stel die installering van nie-goedgekeurde toepassings en toegang tot meer API's moontlik. egter, vir gewone gebruikers, is jailbreaking **nie aanbeveel** nie weens potensiële sekuriteitsrisiko's en toestel onstabiliteit.
Jailbreaking **verwyder OS-geplaasde sandboxing**, wat toelaat dat toepassings toegang tot die hele lêerstelsel het. Hierdie vryheid stel die installasie van nie-goedgekeurde toepassings en toegang tot meer API's in staat. Tog, vir gewone gebruikers, word jailbreaking **nie aanbeveel** weens potensiële sekuriteitsrisiko's en toestel onstabiliteit.
### **After Jailbreaking**
@ -118,8 +121,8 @@ Jailbreaking **verwyder OS-geïndikte sandboxing**, wat toepassings toelaat om t
**Verskeie toepassings sal probeer om te detecteer of die mobiele toestel gejailbreak is en in daardie geval sal die toepassing nie loop nie**
* Na jailbreaking 'n iOS **lêers en vouers word gewoonlik geïnstalleer**, hierdie kan gesoek word om te bepaal of die toestel gejailbreak is.
* In 'n gejailbreak toestel kry toepassings **lees/skryf toegang tot nuwe lêers** buite die sandbox
* Na jailbreaking is 'n iOS **lêers en vouers gewoonlik geïnstalleer**, hierdie kan gesoek word om te bepaal of die toestel gejailbreak is.
* In 'n gejailbreakte toestel kry toepassings **lees/skryf toegang tot nuwe lêers** buite die sandbox
* Sommige **API** **oproepen** sal **anders optree**
* Die teenwoordigheid van die **OpenSSH** diens
* Oproep van `/bin/sh` sal **1** teruggee in plaas van 0
@ -136,9 +139,10 @@ You can try to avoid this detections using **objection's** `ios jailbreak disabl
## 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" %}
Leer & oefen 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">\
Leer & oefen 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)
Leer & oefen 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">\
Leer & oefen 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>
@ -17,8 +17,8 @@ Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
Gebruik [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) om maklik te bou en **werkvloei** te **automate** wat deur die wêreld se **mees gevorderde** gemeenskap gereedskap aangedryf word.\
Kry Vandag Toegang:
Gebruik [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) om maklik te bou en **werkvloei te outomatiseer** wat deur die wêreld se **mees gevorderde** gemeenskap gereedskap aangedryf word.\
Kry Toegang Vandag:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
@ -34,7 +34,7 @@ Pentesting API's behels 'n gestruktureerde benadering tot die ontdekking van kwe
### **Oefen Laboratoriums**
* [**VAmPI**](https://github.com/erev0s/VAmPI): 'n Opsetlik kwesbare API vir praktiese oefening, wat die OWASP top 10 API kwesbaarhede dek.
* [**VAmPI**](https://github.com/erev0s/VAmPI): 'n Opzetlik kwesbare API vir praktiese oefening, wat die OWASP top 10 API kwesbaarhede dek.
### **Doeltreffende Truuks vir API Pentesting**
@ -44,9 +44,9 @@ Pentesting API's behels 'n gestruktureerde benadering tot die ontdekking van kwe
* **Eindpunt Ontdekking**: Gebruik API patrone om verborge eindpunte te ontdek. Gereedskap soos fuzzers kan hierdie proses outomatiseer.
* **Parameter Manipulasie**: Eksperimenteer met die toevoeging of vervanging van parameters in versoeke om toegang tot ongeoorloofde data of funksies te verkry.
* **HTTP Metode Toetsing**: Varieer versoekmetodes (GET, POST, PUT, DELETE, PATCH) om onverwagte gedrag of inligtingsontsluitings te ontdek.
* **Inhoud-Tipe Manipulasie**: Wissel tussen verskillende inhoudstipes (x-www-form-urlencoded, application/xml, application/json) om te toets vir ontledingsprobleme of kwesbaarhede.
* **Inhoud-Tipe Manipulasie**: Wissel tussen verskillende inhoud tipes (x-www-form-urlencoded, application/xml, application/json) om te toets vir ontledingsprobleme of kwesbaarhede.
* **Gevorderde Parameter Tegnieke**: Toets met onverwagte datatipe in JSON payloads of speel met XML data vir XXE inspuitings. Probeer ook parameter besoedeling en wildcard karakters vir breër toetsing.
* **Weergawe Toetsing**: Ou API weergawes mag meer kwesbaar wees vir aanvalle. Kyk altyd na en toets teen verskeie API weergawes.
* **Weergawe Toetsing**: Ou API weergawes mag meer kwesbaar wees vir aanvalle. Kyk altyd vir en toets teen verskeie API weergawes.
### **Gereedskap en Hulpbronne vir API Pentesting**
@ -57,15 +57,16 @@ 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
```
* Bykomende gereedskap soos **automatic-api-attack-tool**, **Astra**, en **restler-fuzzer** bied op maat gemaakte funksies vir API-sekuriteitstoetsing, wat wissel van aanvalsimulasie tot fuzzing en kwesbaarheidsskandering.
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Dit is 'n API-sekuriteitsgereedskap wat jou API oudit op grond van 'n OAS-lêer (die gereedskap is in rust geskryf).
* [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj is 'n opdraglyn hulpmiddel wat ontwerp is om te help met die oudit van **blootgestelde Swagger/OpenAPI definisie lêers** deur die geassosieerde API eindpunte vir swak outentisering te kontroleer. Dit bied ook opdrag sjablone vir handmatige kwesbaarheidstoetsing.
* Bykomende hulpmiddels soos **automatic-api-attack-tool**, **Astra**, en **restler-fuzzer** bied op maat gemaakte funksies vir API sekuriteitstoetsing, wat wissel van aanvalsimulasie tot fuzzing en kwesbaarheidsskandering.
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): Dit is 'n API sekuriteitshulpmiddel wat jou API oudit op grond van 'n OAS lêer (die hulpmiddel is in rust geskryf).
### **Leer- en Praktiese Hulpbronne**
* **OWASP API Sekuriteit Top 10**: Essensiële leesstof om algemene API-kwesbaarhede te verstaan ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
* **API Sekuriteitskontrolelys**: 'n Omvattende kontrolelys vir die beveiliging van API's ([GitHub skakel](https://github.com/shieldfy/API-Security-Checklist)).
* **Logger++ Filters**: Vir die jag op API-kwesbaarhede bied Logger++ nuttige filters ([GitHub skakel](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
* **API Eindpunte Lys**: 'n Gekureerde lys van potensiële API-eindpunte vir toetsdoeleindes ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
* **OWASP API Sekuriteit Top 10**: Essensiële leesstof om algemene API kwesbaarhede te verstaan ([OWASP Top 10](https://github.com/OWASP/API-Security/blob/master/2019/en/dist/owasp-api-security-top-10.pdf)).
* **API Sekuriteit Kontrolelys**: 'n Omvattende kontrolelys vir die beveiliging van API's ([GitHub skakel](https://github.com/shieldfy/API-Security-Checklist)).
* **Logger++ Filters**: Vir die jag op API kwesbaarhede, bied Logger++ nuttige filters ([GitHub skakel](https://github.com/bnematzadeh/LoggerPlusPlus-API-Filters)).
* **API Eindpunte Lys**: 'n Gekureerde lys van potensiële API eindpunte vir toetsdoeleindes ([GitHub gist](https://gist.github.com/yassineaboukir/8e12adefbd505ef704674ad6ad48743d)).
## Verwysings
@ -73,21 +74,21 @@ 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>
Gebruik [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) om maklik te bou en **werkvloei** te **automate** wat deur die wêreld se **mees gevorderde** gemeenskapsgereedskap aangedryf word.\
Gebruik [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) om maklik te bou en **werkvloei** te **automate** wat deur die wêreld se **mees gevorderde** gemeenskapshulpmiddels aangedryf word.\
Kry Toegang Vandag:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
{% hint style="success" %}
Leer & oefen AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Leer & oefen AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Opleiding AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Leer & oefen GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Opleiding GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Ondersteun HackTricks</summary>
* Kyk na die [**subskripsieplanne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,8 +1,8 @@
# CORS - Misconfigurasies & Omseiling
{% hint style="success" %}
Leer & oefen 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">\
Leer & oefen 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)
Leer & oefen 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">\
Leer & oefen 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,9 +21,9 @@ Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
## Wat is CORS?
Cross-Origin Resource Sharing (CORS) standaard **stel bedieners in staat om te definieer wie toegang tot hul bates kan hê** en **watter HTTP versoekmetodes toegelaat word** van eksterne bronne.
Cross-Origin Resource Sharing (CORS) standaard **stel bedieners in staat om te definieer wie toegang tot hul bates kan hê** en **watter HTTP-aanvraagmetodes toegelaat word** van eksterne bronne.
'n **Selfde-oorsprong** beleid vereis dat 'n **bediener wat** 'n hulpbron versoek en die bediener wat die **hulpbron** aanbied dieselfde protokol (bv. `http://`), domeinnaam (bv. `internal-web.com`), en **poort** (bv. 80) deel. Onder hierdie beleid is slegs webbladsye van dieselfde domein en poort toegelaat om toegang tot die hulpbronne te hê.
'n **Selfde-oorsprong** beleid vereis dat 'n **bediener wat** 'n hulpbron aan vra en die bediener wat die **hulpbron** aanbied dieselfde protokol (bv. `http://`), domeinnaam (bv. `internal-web.com`), en **poort** (bv. 80) deel. Onder hierdie beleid is slegs webbladsye van dieselfde domein en poort toegelaat om toegang tot die hulpbronne te hê.
Die toepassing van die selfde-oorsprong beleid in die konteks van `http://normal-website.com/example/example.html` word soos volg geïllustreer:
@ -42,13 +42,13 @@ Die toepassing van die selfde-oorsprong beleid in die konteks van `http://normal
Hierdie header kan **meervoudige oorspronge** toelaat, 'n **`null`** waarde, of 'n wildcard **`*`**. Tog, **geen blaaiers ondersteun meervoudige oorspronge**, en die gebruik van die wildcard `*` is onderhewig aan **beperkings**. (Die wildcard moet alleen gebruik word, en die gebruik daarvan saam met `Access-Control-Allow-Credentials: true` is nie toegelaat nie.)
Hierdie header word **uitgereik deur 'n bediener** in reaksie op 'n kruis-domein hulpbron versoek wat deur 'n webwerf geïnisieer is, met die blaaiers wat outomaties 'n `Origin` header byvoeg.
Hierdie header word **uitgereik deur 'n bediener** in reaksie op 'n kruis-domein hulpbron aanvraag wat deur 'n webwerf geïnisieer is, met die blaaier wat outomaties 'n `Origin` header byvoeg.
### `Access-Control-Allow-Credentials` Header
Deur **verstek**, kruis-oorsprong versoeke word gemaak sonder geloofsbriewe soos koekies of die Owerheid header. Tog, 'n kruis-domein bediener kan die lees van die antwoord toelaat wanneer geloofsbriewe gestuur word deur die `Access-Control-Allow-Credentials` header op **`true`** te stel.
Deur **verstek**, kruis-oorsprong versoeke word gemaak sonder geloofsbriewe soos koekies of die Owerheidsheader. Tog, 'n kruis-domein bediener kan die lees van die antwoord toelaat wanneer geloofsbriewe gestuur word deur die `Access-Control-Allow-Credentials` header op **`true`** te stel.
As dit op `true` gestel word, sal die blaaiers geloofsbriewe (koekies, owerheid headers, of TLS kliënt sertifikate) oordra.
As dit op `true` gestel word, sal die blaaiers geloofsbriewe (koekies, owerheidsheaders, of TLS kliënt sertifikate) oordra.
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
@ -79,11 +79,11 @@ xhr.send('<person><name>Arun</name></person>');
### Understanding Pre-flight Requests in Cross-Domain Communication
Wanneer 'n kruis-domein versoek onder spesifieke toestande geïnisieer word, soos om 'n **nie-standaard HTTP-metode** (enige iets anders as HEAD, GET, POST) te gebruik, nuwe **koppe** in te voer, of 'n spesiale **Content-Type kopwaarde** te gebruik, kan 'n pre-flight versoek vereis word. Hierdie voorlopige versoek, wat die **`OPTIONS`** metode benut, dien om die bediener in kennis te stel van die komende kruis-oorsprong versoek se bedoelings, insluitend die HTTP-metodes en koppe wat dit van plan is om te gebruik.
Wanneer 'n kruis-domein versoek onder spesifieke toestande geïnisieer word, soos om 'n **nie-standaard HTTP metode** (enige iets anders as HEAD, GET, POST) te gebruik, nuwe **koppe** in te voer, of 'n spesiale **Content-Type kop waarde** te gebruik, kan 'n pre-flight versoek vereis word. Hierdie voorlopige versoek, wat die **`OPTIONS`** metode benut, dien om die bediener in kennis te stel van die komende kruis-oorsprong versoek se bedoelings, insluitend die HTTP metodes en koppe wat dit van plan is om te gebruik.
Die **Cross-Origin Resource Sharing (CORS)** protokol vereis hierdie pre-flight kontrole om die haalbaarheid van die aangevraagde kruis-oorsprong operasie te bepaal deur die toegelate metodes, koppe, en die betroubaarheid van die oorsprong te verifieer. Vir 'n gedetailleerde begrip van watter toestande die behoefte aan 'n pre-flight versoek omseil, verwys na die omvattende gids wat deur [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests) verskaf word.
Dit is belangrik om op te let dat die **afwesigheid van 'n pre-flight versoek nie die vereiste vir die antwoord om magtigingskoppe te dra, ontken nie**. Sonder hierdie koppe is die blaaiers nie in staat om die antwoord van die kruis-oorsprong versoek te verwerk nie.
Dit is belangrik om op te let dat die **afwesigheid van 'n pre-flight versoek nie die vereiste vir die antwoord om magtigingskoppe te dra, ontken nie**. Sonder hierdie koppe is die blaaiers onbevoeg om die antwoord van die kruis-oorsprong versoek te verwerk.
Oorweeg die volgende illustrasie van 'n pre-flight versoek wat daarop gemik is om die `PUT` metode saam met 'n pasgemaakte kop genaamd `Special-Request-Header` te gebruik:
```
@ -104,22 +104,22 @@ Access-Control-Allow-Headers: Authorization
Access-Control-Allow-Credentials: true
Access-Control-Max-Age: 240
```
* **`Access-Control-Allow-Headers`**: Hierdie koptekst spesifiseer watter koptekste tydens die werklike versoek gebruik kan word. Dit word deur die bediener gestel om die toegelate koptekste in versoeke van die kliënt aan te dui.
* **`Access-Control-Expose-Headers`**: Deur hierdie koptekst informeer die bediener die kliënt oor watter koptekste as deel van die antwoord blootgestel kan word, benewens die eenvoudige antwoordkoptekste.
* **`Access-Control-Max-Age`**: Hierdie koptekst dui aan hoe lank die resultate van 'n pre-flight versoek gebuffer kan word. Die bediener stel die maksimum tyd, in sekondes, wat die inligting wat deur 'n pre-flight versoek teruggestuur word, hergebruik mag word.
* **`Access-Control-Request-Headers`**: Gebruik in pre-flight versoeke, word hierdie koptekst deur die kliënt gestel om die bediener te informeer oor watter HTTP-koptekste die kliënt in die werklike versoek wil gebruik.
* **`Access-Control-Request-Method`**: Hierdie koptekst, wat ook in pre-flight versoeke gebruik word, word deur die kliënt gestel om aan te dui watter HTTP-metode in die werklike versoek gebruik sal word.
* **`Origin`**: Hierdie koptekst word outomaties deur die blaaiers gestel en dui die oorsprong van die kruis-oorsprong versoek aan. Dit word deur die bediener gebruik om te beoordeel of die inkomende versoek toegelaat of geweier moet word op grond van die CORS-beleid.
* **`Access-Control-Allow-Headers`**: Hierdie kop is spesifiek oor watter koppe tydens die werklike versoek gebruik kan word. Dit word deur die bediener gestel om die toegelate koppe in versoeke van die kliënt aan te dui.
* **`Access-Control-Expose-Headers`**: Deur hierdie kop informeer die bediener die kliënt oor watter koppe as deel van die antwoord blootgestel kan word, benewens die eenvoudige antwoordkoppe.
* **`Access-Control-Max-Age`**: Hierdie kop dui aan hoe lank die resultate van 'n pre-flight versoek gebuffer kan word. Die bediener stel die maksimum tyd, in sekondes, wat die inligting wat deur 'n pre-flight versoek teruggestuur word, hergebruik mag word.
* **`Access-Control-Request-Headers`**: Gebruik in pre-flight versoeke, word hierdie kop deur die kliënt gestel om die bediener te informeer oor watter HTTP-koppe die kliënt in die werklike versoek wil gebruik.
* **`Access-Control-Request-Method`**: Hierdie kop, wat ook in pre-flight versoeke gebruik word, word deur die kliënt gestel om aan te dui watter HTTP-metode in die werklike versoek gebruik sal word.
* **`Origin`**: Hierdie kop word outomaties deur die blaaier gestel en dui die oorsprong van die kruis-oorsprong versoek aan. Dit word deur die bediener gebruik om te beoordeel of die inkomende versoek toegelaat of geweier moet word op grond van die CORS-beleid.
Let daarop dat gewoonlik (afhangende van die inhoudstipe en koptekste wat gestel is) in 'n **GET/POST versoek geen pre-flight versoek gestuur word** (die versoek word **direk** gestuur), maar as jy toegang wil hê tot die **koptekste/liggaam van die antwoord**, moet dit 'n _Access-Control-Allow-Origin_ koptekst bevat wat dit toelaat.\
Let daarop dat gewoonlik (afhangende van die inhouds tipe en koppe wat gestel is) in 'n **GET/POST versoek geen pre-flight versoek gestuur word** (die versoek word **direk** gestuur), maar as jy toegang wil hê tot die **koppe/liggaam van die antwoord**, moet dit 'n _Access-Control-Allow-Origin_ kop bevat wat dit toelaat.\
**Daarom beskerm CORS nie teen CSRF nie (maar dit kan nuttig wees).**
### **Plaaslike Netwerk Versoeke Pre-flight versoek**
1. **`Access-Control-Request-Local-Network`**: Hierdie koptekst is ingesluit in die kliënt se versoek om aan te dui dat die navraag op 'n plaaslike netwerkbron gemik is. Dit dien as 'n merk om die bediener te informeer dat die versoek van binne die plaaslike netwerk afkomstig is.
2. **`Access-Control-Allow-Local-Network`**: In reaksie gebruik bedieners hierdie koptekst om te kommunikeer dat die aangevraagde bron toegelaat word om met entiteite buite die plaaslike netwerk gedeel te word. Dit dien as 'n groen lig vir die deel van bronne oor verskillende netwerkgrense, terwyl dit beheerde toegang verseker terwyl sekuriteitsprotokolle gehandhaaf word.
1. **`Access-Control-Request-Local-Network`**: Hierdie kop is ingesluit in die kliënt se versoek om aan te dui dat die navraag op 'n plaaslike netwerkbron gemik is. Dit dien as 'n merk om die bediener te informeer dat die versoek van binne die plaaslike netwerk afkomstig is.
2. **`Access-Control-Allow-Local-Network`**: In reaksie gebruik bedieners hierdie kop om te kommunikeer dat die aangevraagde bron toegelaat word om met entiteite buite die plaaslike netwerk gedeel te word. Dit dien as 'n groen lig vir die deel van bronne oor verskillende netwerkgrense, terwyl dit beheerde toegang verseker terwyl sekuriteitsprotokolle gehandhaaf word.
'n **geldige antwoord wat die plaaslike netwerk versoek toelaat** moet ook in die antwoord die koptekst `Access-Controls-Allow-Local_network: true` hê :
'n **geldige antwoord wat die plaaslike netwerk versoek toelaat** moet ook in die antwoord die kop `Access-Controls-Allow-Local_network: true` hê :
```
HTTP/1.1 200 OK
...
@ -133,16 +133,25 @@ Content-Length: 0
{% hint style="warning" %}
Let daarop dat die linux **0.0.0.0** IP werk om **bypass** hierdie vereistes om toegang tot localhost te verkry, aangesien daardie IP-adres nie as "lokale" beskou word nie.
Dit is ook moontlik om die **Local Network vereistes te omseil** as jy die **publieke IP-adres van 'n lokale eindpunt** (soos die publieke IP van die router) gebruik. Want in verskeie gevalle, selfs al word die **publieke IP** benader, as dit **van die lokale netwerk** is, sal toegang toegestaan word.
Dit is ook moontlik om die **Local Network vereistes te bypass** as jy die **publieke IP-adres van 'n lokale eindpunt** (soos die publieke IP van die router) gebruik. Want in verskeie gevalle, selfs al word die **publieke IP** aangespreek, as dit **van die lokale netwerk** is, sal toegang toegestaan word.
{% endhint %}
### Wildcards
Let daarop dat selfs al lyk die volgende konfigurasie baie permissief:
```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.
## Exploitable misconfigurations
Daar is waargeneem dat die instelling van `Access-Control-Allow-Credentials` na **`true`** 'n voorvereiste is vir die meeste **werklike aanvalle**. Hierdie instelling laat die blaaier toe om kredensiale te stuur en die antwoord te lees, wat die aanval se doeltreffendheid verbeter. Sonder dit, verminder die voordeel van om 'n blaaiervraag te laat doen teenoor om dit self te doen, aangesien dit onmoontlik word om 'n gebruiker se koekies te benut.
Dit is waargeneem dat die instelling van `Access-Control-Allow-Credentials` na **`true`** 'n voorvereiste is vir die meeste **werklike aanvalle**. Hierdie instelling laat die blaaier toe om akrediteer te stuur en die antwoord te lees, wat die aanval se doeltreffendheid verbeter. Sonder dit, verminder die voordeel van om 'n blaaiertoestel 'n versoek te laat doen teenoor om dit self te doen, aangesien dit onmoontlik word om 'n gebruiker se koekies te benut.
### Exception: Exploiting Network Location as Authentication
Daar bestaan 'n uitsondering waar die slagoffer se netwerk ligging as 'n vorm van autentisering optree. Dit laat toe dat die slagoffer se blaaiers as 'n proxy gebruik word, wat IP-gebaseerde autentisering omseil om toegang tot intranet toepassings te verkry. Hierdie metode deel ooreenkomste in impak met DNS rebinding, maar is eenvoudiger om te benut.
Daar is 'n uitsondering waar die slagoffer se netwerk ligging as 'n vorm van verifikasie optree. Dit laat toe dat die slagoffer se blaaiers as 'n proxy gebruik word, wat IP-gebaseerde verifikasie om intranet toepassings te benader, omseil. Hierdie metode deel ooreenkomste in impak met DNS rebinding, maar is eenvoudiger om te benut.
### Reflection of `Origin` in `Access-Control-Allow-Origin`
@ -201,7 +210,7 @@ Regex patrone konsentreer tipies op alfanumeriese, kolletjie (.), en koppelteken
### From XSS inside a subdomain
Ontwikkelaars implementeer dikwels defensiewe meganismes om teen CORS eksploitatie te beskerm deur domeine wat toegelaat word om inligting aan te vra, te witlys. Ten spyte van hierdie voorsorgmaatreëls is die stelsel se sekuriteit nie foutloos nie. Die teenwoordigheid van selfs 'n enkele kwesbare subdomein binne die gewhitelist domeine kan die deur oopmaak vir CORS eksploitatie deur ander kwesbaarhede, soos XSS (Cross-Site Scripting), te benut.
Ontwikkelaars implementeer dikwels defensiewe meganismes om teen CORS eksploitatie te beskerm deur domeine wat toegelaat word om inligting aan te vra, te witlys. Ten spyte van hierdie voorsorgmaatreëls, is die stelsel se sekuriteit nie foutloos nie. Die teenwoordigheid van selfs 'n enkele kwesbare subdomein binne die gewhitelist domeine kan die deur oopmaak vir CORS eksploitatie deur ander kwesbaarhede, soos XSS (Cross-Site Scripting), te benut.
Om te illustreer, oorweeg die scenario waar 'n domein, `requester.com`, gewhitelist is om toegang te verkry tot hulpbronne van 'n ander domein, `provider.com`. Die bediener-kant konfigurasie mag iets soos hierdie lyk:
```javascript
@ -211,13 +220,42 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
// Unauthorized access
}
```
In hierdie opstelling is alle subdomeine van `requester.com` toegelaat om toegang te verkry. As 'n subdomein, sê `sub.requester.com`, egter gecompromitteer is met 'n XSS-kwesbaarheid, kan 'n aanvaller hierdie swakheid benut. Byvoorbeeld, 'n aanvaller met toegang tot `sub.requester.com` kan die XSS-kwesbaarheid gebruik om CORS-beleide te omseil en kwaadwillig toegang te verkry tot hulpbronne op `provider.com`.
In hierdie opstelling is alle subdomeine van `requester.com` toegelaat om toegang te verkry. As 'n subdomein, sê `sub.requester.com`, egter gecompromitteer is met 'n XSS kwesbaarheid, kan 'n aanvaller hierdie swakheid benut. Byvoorbeeld, 'n aanvaller met toegang tot `sub.requester.com` kan die XSS kwesbaarheid benut om CORS-beleide te omseil en kwaadwillig toegang te verkry tot hulpbronne op `provider.com`.
### **Bediener-kant kasbesmetting**
### **Spesiale Karakters**
PortSwigger se [URL validation bypass cheat sheet](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) het gevind dat sommige blaaiers vreemde karakters binne domeinnames ondersteun.
Chrome en Firefox ondersteun onderstrepies `_` wat regexes kan omseil wat geïmplementeer is om die `Origin` kop te valideer:
```
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 is selfs nog meer losser in die aanvaarding van spesiale karakters in die domeinnaam:
```
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
```
### **Bediener-kant kasbesoedeling**
[**Van hierdie navorsing**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
Dit is moontlik dat deur die benutting van bediener-kant kasbesmetting deur HTTP-koptekstinjeksie, 'n gestoor Cross-Site Scripting (XSS) kwesbaarheid geïnduseer kan word. Hierdie scenario ontvou wanneer 'n toepassing versuim om die `Origin`-koptekst vir onwettige karakters te saniteer, wat 'n kwesbaarheid skep, veral vir Internet Explorer en Edge gebruikers. Hierdie blaaiers behandel (0x0d) as 'n wettige HTTP-koptekstterminator, wat lei tot HTTP-koptekstinjeksie kwesbaarhede.
Dit is moontlik dat deur die benutting van bediener-kant kasbesoedeling deur HTTP-koptekstinjeksie, 'n gestoor Cross-Site Scripting (XSS) kwesbaarheid geïnduseer kan word. Hierdie scenario ontvou wanneer 'n toepassing versuim om die `Origin`-koptekst vir onwettige karakters te saniteer, wat 'n kwesbaarheid skep, veral vir Internet Explorer en Edge gebruikers. Hierdie blaaiers behandel (0x0d) as 'n wettige HTTP-koptekstterminator, wat lei tot HTTP-koptekstinjeksie kwesbaarhede.
Oorweeg die volgende versoek waar die `Origin`-koptekst gemanipuleer word:
```
@ -238,13 +276,13 @@ Vir verdere lees oor gestoor XSS-kwesbaarhede, sien [PortSwigger](https://portsw
### **Kliënt-kant kasbesmetting**
[**Uit hierdie navorsing**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
[**Van hierdie navorsing**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
In hierdie scenario word 'n voorbeeld van 'n webbladsy waargeneem wat die inhoud van 'n pasgemaakte HTTP-kop sonder behoorlike kodering reflekteer. Spesifiek reflekteer die webbladsy die inhoud wat ingesluit is in 'n `X-User-id` kop, wat kwaadwillige JavaScript kan insluit, soos gedemonstreer deur die voorbeeld waar die kop 'n SVG-beeldetiket bevat wat ontwerp is om JavaScript-kode op laai uit te voer.
In hierdie scenario word 'n voorbeeld van 'n webbladsy waargeneem wat die inhoud van 'n aangepaste HTTP-kop sonder behoorlike kodering reflekteer. Spesifiek reflekteer die webbladsy die inhoud wat ingesluit is in 'n `X-User-id` kop, wat kwaadwillige JavaScript kan insluit, soos gedemonstreer deur die voorbeeld waar die kop 'n SVG-beeldetiket bevat wat ontwerp is om JavaScript-kode op laai uit te voer.
Cross-Origin Resource Sharing (CORS) beleide laat die sending van pasgemaakte koppe toe. egter, sonder dat die antwoord direk deur die blaaier gerender word weens CORS-beperkings, mag die nut van so 'n inspuiting beperk lyk. Die kritieke punt ontstaan wanneer die blaaier se kasgedrag oorweeg word. As die `Vary: Origin` kop nie gespesifiseer is nie, word dit moontlik vir die kwaadwillige antwoord om deur die blaaier gestoor te word. Gevolglik kan hierdie gestoor antwoord direk gerender word wanneer na die URL genavigeer word, wat die behoefte aan direkte rendering tydens die aanvanklike versoek omseil. Hierdie meganisme verbeter die betroubaarheid van die aanval deur kliënt-kant kas te benut.
Cross-Origin Resource Sharing (CORS) beleide laat die sending van aangepaste koppe toe. egter, sonder dat die antwoord direk deur die blaaiers gerender word weens CORS-beperkings, mag die nut van so 'n inspuiting beperk lyk. Die kritieke punt ontstaan wanneer die blaaiers se kasgedrag oorweeg word. As die `Vary: Origin` kop nie gespesifiseer is nie, word dit moontlik vir die kwaadwillige antwoord om deur die blaaiers gestoor te word. Gevolglik kan hierdie gestoorde antwoord direk gerender word wanneer na die URL genavigeer word, wat die behoefte aan direkte rendering tydens die aanvanklike versoek omseil. Hierdie meganisme verbeter die betroubaarheid van die aanval deur kliënt-kant kas te benut.
Om hierdie aanval te illustreer, word 'n JavaScript-voorbeeld verskaf, ontwerp om in die omgewing van 'n webbladsy uitgevoer te word, soos deur 'n JSFiddle. Hierdie skrip voer 'n eenvoudige aksie uit: dit stuur 'n versoek na 'n gespesifiseerde URL met 'n pasgemaakte kop wat die kwaadwillige JavaScript bevat. Na suksesvolle voltooiing van die versoek, probeer dit om na die teiken-URL te navigeer, wat moontlik die uitvoering van die ingespuitte skrip kan aktiveer as die antwoord gestoor is sonder behoorlike hantering van die `Vary: Origin` kop.
Om hierdie aanval te illustreer, word 'n JavaScript-voorbeeld verskaf, wat ontwerp is om in die omgewing van 'n webbladsy uitgevoer te word, soos deur 'n JSFiddle. Hierdie skrip voer 'n eenvoudige aksie uit: dit stuur 'n versoek na 'n gespesifiseerde URL met 'n aangepaste kop wat die kwaadwillige JavaScript bevat. Na suksesvolle voltooiing van die versoek, probeer dit om na die teiken-URL te navigeer, wat moontlik die uitvoering van die ingespuite skrip kan aktiveer as die antwoord gestoor is sonder behoorlike hantering van die `Vary: Origin` kop.
Hier is 'n samegevatte uiteensetting van die JavaScript wat gebruik word om hierdie aanval uit te voer:
```html
@ -294,18 +332,18 @@ Jy kan **CORS kontroles** soos `e.origin === window.origin` **omseil deur 'n ifr
DNS rebinding via TTL is 'n tegniek wat gebruik word om sekere sekuriteitsmaatreëls te omseil deur DNS-rekords te manipuleer. Hier is hoe dit werk:
1. Die aanvaller skep 'n webblad en laat die slagoffer dit toegang.
2. Die aanvaller verander dan die DNS (IP) van hul eie domein om na die slagoffer se webblad te wys.
3. Die slagoffer se blaaier kas die DNS-antwoord, wat 'n TTL (Time to Live) waarde kan hê wat aandui hoe lank die DNS-rekord as geldig beskou moet word.
4. Wanneer die TTL verval, maak die slagoffer se blaaiers 'n nuwe DNS-versoek, wat die aanvaller in staat stel om JavaScript-kode op die slagoffer se bladsy uit te voer.
2. Die aanvaller verander dan die DNS (IP) van sy eie domein om na die slagoffer se webblad te wys.
3. Die slagoffer se blaier kas die DNS-antwoord, wat 'n TTL (Time to Live) waarde kan hê wat aandui hoe lank die DNS-rekord as geldig beskou moet word.
4. Wanneer die TTL verval, maak die slagoffer se blaier 'n nuwe DNS-versoek, wat die aanvaller in staat stel om JavaScript-kode op die slagoffer se bladsy uit te voer.
5. Deur beheer oor die IP van die slagoffer te handhaaf, kan die aanvaller inligting van die slagoffer versamel sonder om enige koekies na die slagoffer-bediener te stuur.
Dit is belangrik om te noem dat blaaiers kasmeganismes het wat onmiddellike misbruik van hierdie tegniek kan voorkom, selfs met lae TTL-waardes.
DNS rebinding kan nuttig wees om eksplisiete IP-kontroles wat deur die slagoffer uitgevoer word, te omseil of vir scenario's waar 'n gebruiker of bot op dieselfde bladsy vir 'n uitgebreide tyd bly, wat die kas toelaat om te verval.
DNS rebinding kan nuttig wees om eksplisiete IP-kontroles wat deur die slagoffer uitgevoer word, te omseil of vir scenario's waar 'n gebruiker of bot op dieselfde bladsy vir 'n uitgebreide tyd bly, wat die kas laat verval.
As jy 'n vinnige manier nodig het om DNS rebinding te misbruik, kan jy dienste soos [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html) gebruik.
Om jou eie DNS rebinding-bediener te laat loop, kan jy hulpmiddels soos **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)) gebruik. Dit behels om jou plaaslike poort 53/udp bloot te stel, 'n A-rekord wat daarna verwys (bv. ns.example.com) te skep, en 'n NS-rekord wat na die voorheen geskepte A-subdomein verwys (bv. ns.example.com). Enige subdomein van die ns.example.com subdomein sal dan deur jou gasheer opgelos word.
Om jou eie DNS rebinding-bediener te laat loop, kan jy hulpmiddels soos **DNSrebinder** ([https://github.com/mogwailabs/DNSrebinder](https://github.com/mogwailabs/DNSrebinder)) gebruik. Dit behels die blootstelling van jou plaaslike poort 53/udp, die skep van 'n A-rekord wat daarna wys (bv. ns.example.com), en die skep van 'n NS-rekord wat na die voorheen geskepte A-subdomein wys (bv. ns.example.com). Enige subdomein van die ns.example.com subdomein sal dan deur jou gasheer opgelos word.
Jy kan ook 'n publiek lopende bediener by [http://rebind.it/singularity.html](http://rebind.it/singularity.html) verken vir verdere begrip en eksperimentering.
@ -314,27 +352,27 @@ Jy kan ook 'n publiek lopende bediener by [http://rebind.it/singularity.html](ht
DNS rebinding via DNS cache flooding is 'n ander tegniek wat gebruik word om die kasmeganisme van blaaiers te omseil en 'n tweede DNS-versoek af te dwing. Hier is hoe dit werk:
1. Aanvanklik, wanneer die slagoffer 'n DNS-versoek maak, word dit beantwoord met die aanvaller se IP-adres.
2. Om die kasverdediging te omseil, benut die aanvaller 'n dienswerker. Die dienswerker oorstroom die DNS-kas, wat effektief die gekasde aanvaller-bediener naam verwyder.
3. Wanneer die slagoffer se blaaiers 'n tweede DNS-versoek maak, word dit nou beantwoord met die IP-adres 127.0.0.1, wat tipies na die localhost verwys.
2. Om die kasverdediging te omseil, benut die aanvaller 'n dienswerker. Die dienswerker oorstroom die DNS-kas, wat effektief die kas van die aanvaller se bediener naam verwyder.
3. Wanneer die slagoffer se blaier 'n tweede DNS-versoek maak, word dit nou beantwoord met die IP-adres 127.0.0.1, wat tipies na die localhost verwys.
Deur die DNS-kas met die dienswerker te oorstroom, kan die aanvaller die DNS-resolusieproses manipuleer en die slagoffer se blaaiers dwing om 'n tweede versoek te maak, hierdie keer wat na die aanvaller se gewenste IP-adres oplos.
Deur die DNS-kas met die dienswerker te oorstroom, kan die aanvaller die DNS-resolusieproses manipuleer en die slagoffer se blaier dwing om 'n tweede versoek te maak, hierdie keer wat na die aanvaller se gewenste IP-adres oplos.
### DNS Rebinding via **Cache**
Nog 'n manier om die kasverdediging te omseil, is deur verskeie IP-adresse vir dieselfde subdomein in die DNS-verskaffer te gebruik. Hier is hoe dit werk:
1. Die aanvaller stel twee A-rekords (of 'n enkele A-rekord met twee IPs) op vir dieselfde subdomein in die DNS-verskaffer.
2. Wanneer 'n blaaiers hierdie rekords nagaan, ontvang dit albei IP-adresse.
3. As die blaaiers besluit om die aanvaller se IP-adres eerste te gebruik, kan die aanvaller 'n las wat HTTP-versoeke na dieselfde domein uitvoer, bedien.
4. Maar, sodra die aanvaller die slagoffer se IP-adres bekom, stop hulle om op die slagoffer se blaaiers te antwoord.
5. Die slagoffer se blaaiers, wanneer dit besef dat die domein nie reageer nie, beweeg aan om die tweede gegewe IP-adres te gebruik.
6. Deur toegang tot die tweede IP-adres te verkry, omseil die blaaiers die Same Origin Policy (SOP), wat die aanvaller in staat stel om dit te misbruik en inligting te versamel en te ekfiltreer.
2. Wanneer 'n blaier vir hierdie rekords kyk, ontvang dit albei IP-adresse.
3. As die blaier besluit om die aanvaller se IP-adres eerste te gebruik, kan die aanvaller 'n las wat HTTP-versoeke na dieselfde domein uitvoer, bedien.
4. Maar, sodra die aanvaller die slagoffer se IP-adres verkry, stop hulle om op die slagoffer se blaier te antwoord.
5. Die slagoffer se blaier, wanneer dit besef dat die domein nie reageer nie, beweeg aan om die tweede gegewe IP-adres te gebruik.
6. Deur toegang te verkry tot die tweede IP-adres, omseil die blaier die Same Origin Policy (SOP), wat die aanvaller in staat stel om dit te misbruik en inligting te versamel en te ekfiltreer.
Hierdie tegniek benut die gedrag van blaaiers wanneer verskeie IP-adresse vir 'n domein verskaf word. Deur die antwoorde strategies te beheer en die blaaiers se keuse van IP-adres te manipuleer, kan 'n aanvaller die SOP misbruik en toegang tot inligting van die slagoffer verkry.
Hierdie tegniek benut die gedrag van blaaiers wanneer verskeie IP-adresse vir 'n domein verskaf word. Deur die antwoorde strategies te beheer en die blaier se keuse van IP-adres te manipuleer, kan 'n aanvaller die SOP misbruik en toegang tot inligting van die slagoffer verkry.
{% hint style="warning" %}
Let daarop dat om toegang tot localhost te verkry, jy moet probeer om **127.0.0.1** in Windows en **0.0.0.0** in Linux te herbind.\
Verskaffers soos godaddy of cloudflare het nie toegelaat dat ek die IP 0.0.0.0 gebruik nie, maar AWS route53 het my toegelaat om een A-rekord met 2 IPs te skep waarvan een "0.0.0.0" is.
Verskaffers soos godaddy of cloudflare het my nie toegelaat om die ip 0.0.0.0 te gebruik nie, maar AWS route53 het my toegelaat om een A-rekord met 2 IPs te skep waarvan een "0.0.0.0" is.
<img src="../.gitbook/assets/image (140).png" alt="" data-size="original">
{% endhint %}
@ -343,15 +381,15 @@ Vir meer inligting kan jy kyk na [https://unit42.paloaltonetworks.com/dns-rebind
### Ander Algemene Omseilings
* As **interne IP's nie toegelaat word nie**, mag hulle **vergeet om 0.0.0.0 te verbied** (werk op Linux en Mac)
* As **interne IP's nie toegelaat word nie**, antwoord met 'n **CNAME** na **localhost** (werk op Linux en Mac)
* As **interne IP's nie toegelaat word nie** as DNS-antwoorde, kan jy **CNAME's na interne dienste** soos www.corporate.internal antwoordgee.
* As **interne IPs nie toegelaat word nie**, mag hulle **vergeet om 0.0.0.0 te verbied** (werk op Linux en Mac)
* As **interne IPs nie toegelaat word nie**, antwoord met 'n **CNAME** na **localhost** (werk op Linux en Mac)
* As **interne IPs nie toegelaat word nie** as DNS-antwoorde, kan jy **CNAMEs na interne dienste** soos www.corporate.internal antwoordgee.
### DNS Rebidding Gewapend
Jy kan meer inligting oor die vorige omseilingstegnieke en hoe om die volgende hulpmiddel te gebruik in die praatjie [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) is 'n hulpmiddel om [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) aanvalle uit te voer. Dit sluit die nodige komponente in om die IP-adres van die aanvalbediener DNS-naam na die teiken masjien se IP-adres te herbind en om aanvalslas te bedien om kwesbare sagteware op die teiken masjien te benut.
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) is 'n hulpmiddel om [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) aanvalle uit te voer. Dit sluit die nodige komponente in om die IP-adres van die aanvalbediener se DNS-naam na die teikenmasjien se IP-adres te herbind en om aanvalslas te bedien om kwesbare sagteware op die teikenmasjien te benut.
### Werklike Beskerming teen DNS Rebinding
@ -388,8 +426,8 @@ Jy kan meer inligting oor die vorige omseilingstegnieke en hoe om die volgende h
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Leer & oefen 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">\
Leer & oefen 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)
Leer & oefen 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">\
Leer & oefen 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,16 +1,16 @@
# OAuth na rekening oorname
# OAuth to Account takeover
{% hint style="success" %}
Leer & oefen 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">\
Leer & oefen 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>
<summary>Ondersteun HackTricks</summary>
<summary>Support HackTricks</summary>
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* 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.
</details>
{% endhint %}
@ -19,35 +19,35 @@ Leer & oefen GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size=
{% embed url="https://websec.nl/" %}
## Basiese Inligting <a href="#d4a8" id="d4a8"></a>
## Basic Information <a href="#d4a8" id="d4a8"></a>
OAuth bied verskeie weergawes, met fundamentele insigte beskikbaar by [OAuth 2.0 dokumentasie](https://oauth.net/2/). Hierdie bespreking fokus hoofsaaklik op die algemeen gebruikte [OAuth 2.0 magtigingskode toekennings tipe](https://oauth.net/2/grant-types/authorization-code/), wat 'n **magtigingsraamwerk bied wat 'n toepassing in staat stel om toegang te verkry of aksies op 'n gebruiker se rekening in 'n ander toepassing uit te voer** (die magtigingsbediener).
OAuth bied verskeie weergawes, met fundamentele insigte beskikbaar by [OAuth 2.0 documentation](https://oauth.net/2/). Hierdie bespreking fokus hoofsaaklik op die algemeen gebruikte [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/), wat 'n **autorisering raamwerk bied wat 'n toepassing in staat stel om toegang te verkry of aksies op 'n gebruiker se rekening in 'n ander toepassing uit te voer** (die autoriseringsbediener).
Dink aan 'n hipotetiese webwerf _**https://example.com**_, ontwerp om **al jou sosiale media plasings te vertoon**, insluitend privaat ones. Om dit te bereik, word OAuth 2.0 gebruik. _https://example.com_ sal jou toestemming vra om **toegang tot jou sosiale media plasings** te verkry. Gevolglik sal 'n toestemmingskerm op _https://socialmedia.com_ verskyn, wat die **toestemmings wat aangevra word en die ontwikkelaar wat die versoek doen** uiteensit. Na jou magtiging, verkry _https://example.com_ die vermoë om **jou plasings namens jou te benader**.
Dink aan 'n hipotetiese webwerf _**https://example.com**_, ontwerp om **al jou sosiale media plasings te vertoon**, insluitend privaat ones. Om dit te bereik, word OAuth 2.0 gebruik. _https://example.com_ sal jou toestemming vra om **toegang tot jou sosiale media plasings** te verkry. Gevolglik sal 'n toestemming skerm verskyn op _https://socialmedia.com_, wat die **toestemmings wat aangevra word en die ontwikkelaar wat die aanvraag doen** uiteensit. Na jou toestemming, verkry _https://example.com_ die vermoë om **jou plasings namens jou te benader**.
Dit is noodsaaklik om die volgende komponente binne die OAuth 2.0 raamwerk te verstaan:
* **hulpbron eienaar**: Jy, as die **gebruiker/entiteit**, magtig toegang tot jou hulpbron, soos jou sosiale media rekening plasings.
* **hulpbron bediener**: Die **bediener wat geverifieerde versoeke bestuur** nadat die toepassing 'n `access token` namens die `hulpbron eienaar` verkry het, bv. **https://socialmedia.com**.
* **klient toepassing**: Die **toepassing wat magtiging soek** van die `hulpbron eienaar`, soos **https://example.com**.
* **magtigingsbediener**: Die **bediener wat `access tokens` uitreik** aan die `klient toepassing` na die suksesvolle verifikasie van die `hulpbron eienaar` en die verkryging van magtiging, bv. **https://socialmedia.com**.
* **resource owner**: Jy, as die **gebruiker/entiteit**, mag toegang tot jou hulpbron, soos jou sosiale media rekening plasings, goedkeur.
* **resource server**: Die **bediener wat geverifieerde versoeke bestuur** nadat die toepassing 'n `access token` namens die `resource owner` verkry het, bv. **https://socialmedia.com**.
* **client application**: Die **toepassing wat toestemming vra** van die `resource owner`, soos **https://example.com**.
* **authorization server**: Die **bediener wat `access tokens` uitreik** aan die `client application` na die suksesvolle verifikasie van die `resource owner` en die verkryging van toestemming, bv. **https://socialmedia.com**.
* **client\_id**: 'n Publieke, unieke identifiseerder vir die toepassing.
* **client\_secret:** 'n Vertroulike sleutel, bekend slegs aan die toepassing en die magtigingsbediener, wat gebruik word om `access_tokens` te genereer.
* **client\_secret:** 'n Vertroulike sleutel, bekend slegs aan die toepassing en die autoriseringsbediener, wat gebruik word om `access_tokens` te genereer.
* **response\_type**: 'n Waarde wat **die tipe token wat aangevra word** spesifiseer, soos `code`.
* **scope**: Die **vlak van toegang** wat die `klient toepassing` van die `hulpbron eienaar` aan vra.
* **redirect\_uri**: Die **URL waarnatoe die gebruiker herlei word na magtiging**. Dit moet gewoonlik ooreenstem met die vooraf geregistreerde herlei URL.
* **state**: 'n parameter om **data te handhaaf oor die gebruiker se herleiding na en van die magtigingsbediener**. Die uniekheid daarvan is krities om as 'n **CSRF beskermingsmeganisme** te dien.
* **grant\_type**: 'n parameter wat **die toekennings tipe en die tipe token wat teruggegee moet word** aandui.
* **code**: Die magtigingskode van die `magtigingsbediener`, wat saam met `client_id` en `client_secret` deur die klient toepassing gebruik word om 'n `access_token` te verkry.
* **access\_token**: Die **token wat die klient toepassing gebruik vir API versoeke** namens die `hulpbron eienaar`.
* **scope**: Die **vlak van toegang** wat die `client application` van die `resource owner` aan vra.
* **redirect\_uri**: Die **URL waarnatoe die gebruiker herlei word na toestemming**. Dit moet tipies ooreenstem met die vooraf geregistreerde herlei URL.
* **state**: 'n parameter om **data oor die gebruiker se herleiding na en van die autoriseringsbediener te handhaaf**. Die uniekheid daarvan is krities om as 'n **CSRF beskermingsmeganisme** te dien.
* **grant\_type**: 'n parameter wat **die grant type en die tipe token wat teruggegee moet word** aandui.
* **code**: Die autoriseringskode van die `authorization server`, wat saam met `client_id` en `client_secret` deur die kliënttoepassing gebruik word om 'n `access_token` te verkry.
* **access\_token**: Die **token wat die kliënttoepassing gebruik vir API versoeke** namens die `resource owner`.
* **refresh\_token**: Stel die toepassing in staat om **'n nuwe `access_token` te verkry sonder om die gebruiker weer te vra**.
### Stroom
### Flow
Die **werklike OAuth stroom** verloop soos volg:
Die **werklike OAuth vloei** verloop soos volg:
1. Jy navigeer na [https://example.com](https://example.com) en kies die “Integreer met Sosiale Media” knoppie.
2. Die webwerf stuur dan 'n versoek na [https://socialmedia.com](https://socialmedia.com) om jou magtiging te vra om https://example.com se toepassing toegang tot jou plasings te gee. Die versoek is gestruktureer as:
1. Jy navigeer na [https://example.com](https://example.com) en kies die “Integrate with Social Media” knoppie.
2. Die webwerf stuur dan 'n versoek na [https://socialmedia.com](https://socialmedia.com) om jou toestemming te vra om https://example.com se toepassing toegang tot jou plasings te gee. Die versoek is gestruktureer as:
```
https://socialmedia.com/auth
?response_type=code
@ -67,7 +67,7 @@ POST /oauth/access_token
Host: socialmedia.com
...{"client_id": "example_clientId", "client_secret": "example_clientSecret", "code": "uniqueCode123", "grant_type": "authorization_code"}
```
6. Laastens sluit die proses af wanneer https://example.com jou `access_token` gebruik om 'n API-oproep na Sosiale Media te maak om toegang te verkry
6. Laastens sluit die proses af wanneer https://example.com jou `access_token` gebruik om 'n API-oproep na Social Media te maak om toegang te verkry
## Kw vulnerabilities <a href="#id-323a" id="id-323a"></a>
@ -75,13 +75,13 @@ Host: socialmedia.com
Die `redirect_uri` is van kardinale belang vir sekuriteit in OAuth en OpenID implementasies, aangesien dit aandui waar sensitiewe data, soos magtigingskode, gestuur word na magtiging. As dit verkeerd geconfigureer is, kan dit aanvallers toelaat om hierdie versoeke na kwaadwillige bedieners te herlei, wat rekening oorname moontlik maak.
Eksploitasiemetodes verskil op grond van die magtigingsbediener se valideringslogika. Dit kan wissel van streng pad ooreenstemming tot die aanvaarding van enige URL binne die gespesifiseerde domein of subgids. Algemene eksploitasiemetodes sluit open redirects, pad traversering, die benutting van swak regexes, en HTML-inspuiting vir token-diefstal in.
Eksploitasiemetodes verskil op grond van die magtigingsbediener se valideringslogika. Dit kan wissel van strikte pad ooreenstemming tot die aanvaarding van enige URL binne die gespesifiseerde domein of subgids. Algemene eksploitasiemetodes sluit open redirects, pad traversering, die benutting van swak regexes, en HTML-inspuiting vir token-diefstal in.
Benewens `redirect_uri`, is ander OAuth en OpenID parameters soos `client_uri`, `policy_uri`, `tos_uri`, en `initiate_login_uri` ook kwesbaar vir herleidingaanvalle. Hierdie parameters is opsioneel en hul ondersteuning verskil oor bedieners.
Vir diegene wat 'n OpenID-bediener teiken, lys die ontdekking eindpunt (`**.well-known/openid-configuration**`) dikwels waardevolle konfigurasiedetails soos `registration_endpoint`, `request_uri_parameter_supported`, en "`require_request_uri_registration`. Hierdie besonderhede kan help om die registrasie-eindpunt en ander konfigurasiespesifieke van die bediener te identifiseer.
Vir diegene wat 'n OpenID-bediener teiken, lys die ontdekking eindpunt (`**.well-known/openid-configuration**`) dikwels waardevolle konfigurasiedetails soos `registration_endpoint`, `request_uri_parameter_supported`, en "`require_request_uri_registration`. Hierdie besonderhede kan help om die registrasie eindpunt en ander konfigurasiespesifieke van die bediener te identifiseer.
### XSS in redirect implementering <a href="#bda5" id="bda5"></a>
### XSS in redirect implementasie <a href="#bda5" id="bda5"></a>
Soos genoem in hierdie bug bounty verslag [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html) mag dit moontlik wees dat die redirect **URL in die antwoord** van die bediener weerkaats word nadat die gebruiker geverifieer is, wat **kwesbaar is vir XSS**. Moglike payload om te toets:
```
@ -89,24 +89,24 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
```
### CSRF - Onbehoorlike hantering van die staat parameter <a href="#bda5" id="bda5"></a>
In OAuth implementasies kan die misbruik of omissie van die **`state` parameter** die risiko van **Cross-Site Request Forgery (CSRF)** aanvalle aansienlik verhoog. Hierdie kwesbaarheid ontstaan wanneer die `state` parameter **nie gebruik word, as 'n statiese waarde gebruik word, of nie behoorlik geverifieer word nie**, wat dit aanvallers moontlik maak om CSRF beskermings te omseil.
In OAuth-implementasies kan die misbruik of weglating van die **`state` parameter** die risiko van **Cross-Site Request Forgery (CSRF)** aanvalle aansienlik verhoog. Hierdie kwesbaarheid ontstaan wanneer die `state` parameter **nie gebruik, as 'n statiese waarde gebruik, of nie behoorlik geverifieer** word nie, wat dit aanvallers moontlik maak om CSRF-beskermings te omseil.
Aanvallers kan dit benut deur die magtiging proses te onderskep om hul rekening met 'n slagoffer se rekening te koppel, wat kan lei tot potensiële **rekening oorname**. Dit is veral krities in toepassings waar OAuth gebruik word vir **authentikasie doeleindes**.
Werklike voorbeelde van hierdie kwesbaarheid is gedokumenteer in verskeie **CTF uitdagings** en **hacking platforms**, wat die praktiese implikasies daarvan uitlig. Die probleem strek ook tot integrasies met derdeparty dienste soos **Slack**, **Stripe**, en **PayPal**, waar aanvallers kennisgewings of betalings na hul rekeninge kan herlei.
Werklike voorbeelde van hierdie kwesbaarheid is gedokumenteer in verskeie **CTF uitdagings** en **hacking platforms**, wat die praktiese implikasies daarvan beklemtoon. Die probleem strek ook tot integrasies met derdeparty dienste soos **Slack**, **Stripe**, en **PayPal**, waar aanvallers kennisgewings of betalings na hul rekeninge kan herlei.
Behoorlike hantering en verifikasie van die **`state` parameter** is van kardinale belang om teen CSRF te beskerm en die OAuth vloei te beveilig.
Behoorlike hantering en verifikasie van die **`state` parameter** is van kardinale belang om teen CSRF te beskerm en die OAuth-stroom te beveilig.
### Voor Rekening Oorname <a href="#ebe4" id="ebe4"></a>
1. **Sonder E-pos Verifikasie by Rekening Skep**: Aanvallers kan proaktief 'n rekening skep met die slagoffer se e-pos. As die slagoffer later 'n derdeparty diens vir aanmelding gebruik, kan die toepassing per ongeluk hierdie derdeparty rekening aan die aanvaller se vooraf geskepte rekening koppel, wat lei tot ongemagtigde toegang.
2. **Misbruik van Los OAuth E-pos Verifikasie**: Aanvallers mag OAuth dienste misbruik wat nie e-posse verifieer nie deur met hul diens te registreer en dan die rekening e-pos na die slagoffer s'n te verander. Hierdie metode hou soortgelyke risiko's van ongemagtigde rekening toegang in, soortgelyk aan die eerste scenario, maar deur 'n ander aanvalsvector.
1. **Sonder E-pos Verifikasie by Rekening Skep**: Aanvallers kan proaktief 'n rekening skep met die slagoffer se e-pos. As die slagoffer later 'n derdeparty diens vir aanmelding gebruik, kan die toepassing per ongeluk hierdie derdeparty rekening aan die aanvaller se vooraf geskepte rekening koppel, wat lei tot ongeoorloofde toegang.
2. **Misbruik van Los OAuth E-pos Verifikasie**: Aanvallers mag OAuth dienste misbruik wat nie e-posse verifieer nie deur met hul diens te registreer en dan die rekening e-pos na die slagoffer s'n te verander. Hierdie metode hou soortgelyke risiko's van ongeoorloofde rekening toegang in, soortgelyk aan die eerste scenario, maar deur 'n ander aanvalsvector.
### Onthulling van Geheime <a href="#e177" id="e177"></a>
Identifisering en beskerming van geheime OAuth parameters is van kardinale belang. Terwyl die **`client_id`** veilig onthul kan word, hou die onthulling van die **`client_secret`** aansienlike risiko's in. As die `client_secret` gecompromitteer word, kan aanvallers die identiteit en vertroue van die toepassing benut om **gebruikers `access_tokens`** en private inligting te **steel**.
'n Algemene kwesbaarheid ontstaan wanneer toepassings per ongeluk die uitruil van die magtiging `code` vir 'n `access_token` aan die kliënt-kant hanteer eerder as die bediener-kant. Hierdie fout lei tot die blootstelling van die `client_secret`, wat dit aanvallers moontlik maak om `access_tokens` onder die dekmantel van die toepassing te genereer. Boonop, deur sosiale ingenieurswese, kan aanvallers voorregte verhoog deur addisionele skope by die OAuth magtiging te voeg, wat die toepassing se vertroude status verder benut.
'n Algemene kwesbaarheid ontstaan wanneer toepassings per ongeluk die uitruil van die magtiging `code` vir 'n `access_token` aan die kliëntkant hanteer eerder as die bedienerkant. Hierdie fout lei tot die blootstelling van die `client_secret`, wat aanvallers in staat stel om `access_tokens` onder die dekmantel van die toepassing te genereer. Boonop, deur sosiale ingenieurswese, kan aanvallers voorregte verhoog deur addisionele skope aan die OAuth-magtiging toe te voeg, wat die toepassing se vertroude status verder benut.
### Kliënt Geheim Bruteforce
@ -131,11 +131,11 @@ Gaan na die **blaaier geskiedenis en kyk of die toegangstoken daarin gestoor is*
### Everlasting Authorization Code
Die **autoriseringkode moet net vir 'n kort tydjie bestaan om die tydsvenster te beperk waarbinne 'n aanvaller dit kan steel en gebruik**.
Die **autorisasiecode moet net vir 'n kort tydjie bestaan om die tydsvenster te beperk waarbinne 'n aanvaller dit kan steel en gebruik**.
### Authorization/Refresh Token not bound to client
As jy die **autoriseringkode kan kry en dit met 'n ander kliënt kan gebruik, kan jy ander rekeninge oorneem**.
As jy die **autorisasiecode kan kry en dit met 'n ander kliënt kan gebruik, kan jy ander rekeninge oorneem**.
### Happy Paths, XSS, Iframes & Post Messages to leak code & state values
@ -143,7 +143,7 @@ As jy die **autoriseringkode kan kry en dit met 'n ander kliënt kan gebruik, ka
### AWS Cognito <a href="#bda5" id="bda5"></a>
In hierdie foutbounty verslag: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) kan jy sien dat die **token** wat **AWS Cognito** aan die gebruiker teruggee, **voldoende toestemmings kan hê om die gebruikersdata te oorskryf**. Daarom, as jy die **gebruikers e-pos vir 'n ander gebruikers e-pos kan verander**, mag jy in staat wees om **ander** rekeninge **oor te neem**.
In hierdie bug bounty verslag: [**https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/**](https://security.lauritz-holtmann.de/advisories/flickr-account-takeover/) kan jy sien dat die **token** wat **AWS Cognito** aan die gebruiker teruggee, **genoeg regte mag hê om die gebruikersdata te oorskryf**. Daarom, as jy die **gebruikers e-pos vir 'n ander gebruikers e-pos kan verander**, mag jy in staat wees om **ander** rekeninge oor te neem.
```bash
# Read info of the user
aws cognito-idp get-user --region us-east-1 --access-token eyJraWQiOiJPVj[...]
@ -166,48 +166,52 @@ For more detailed info about how to abuse AWS cognito check:
### Abusing other Apps tokens <a href="#bda5" id="bda5"></a>
Soos [**genoem in hierdie skrywe**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), OAuth vloei wat verwag om die **token** (en nie 'n kode nie) te ontvang, kan kwesbaar wees as hulle nie nagaan dat die token aan die app behoort nie.
Soos [**genoem in hierdie skrywe**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), OAuth-strome wat verwag om die **token** (en nie 'n kode nie) te ontvang, kan kwesbaar wees as hulle nie nagaan dat die token aan die app behoort nie.
Dit is omdat 'n **aanvaller** 'n **aansoek kan skep wat OAuth ondersteun en met Facebook kan aanmeld** (byvoorbeeld) in sy eie aansoek. Dan, sodra 'n slagoffer met Facebook in die **aanvaller se aansoek** aanmeld, kan die aanvaller die **OAuth token van die gebruiker wat aan sy aansoek gegee is, verkry en dit gebruik om in die slagoffer se OAuth aansoek aan te meld met die slagoffer se gebruiker token**.
Dit is omdat 'n **aanvaller** 'n **aansoek kan skep wat OAuth ondersteun en met Facebook kan aanmeld** (byvoorbeeld) in sy eie aansoek. Dan, sodra 'n slagoffer met Facebook in die **aanvaller se aansoek** aanmeld, kan die aanvaller die **OAuth-token van die gebruiker wat aan sy aansoek gegee is, verkry en dit gebruik om in die slagoffer se OAuth-aansoek aan te meld met die slagoffer se gebruikers-token**.
{% hint style="danger" %}
Daarom, as die aanvaller daarin slaag om die gebruiker toegang te gee tot sy eie OAuth aansoek, sal hy in staat wees om die slagoffer se rekening in aansoeke wat 'n token verwag en nie nagaan of die token aan hul app ID toegeken is nie, oor te neem.
Daarom, as die aanvaller daarin slaag om die gebruiker toegang te gee tot sy eie OAuth-aansoek, sal hy in staat wees om die slagoffer se rekening in aansoeke wat 'n token verwag en nie nagaan of die token aan hul app ID toegeken is nie, oor te neem.
{% endhint %}
### Two links & cookie <a href="#bda5" id="bda5"></a>
Volgens [**hierdie skrywe**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), was dit moontlik om 'n slagoffer 'n bladsy te laat oopmaak met 'n **returnUrl** wat na die aanvaller se gasheer wys. Hierdie inligting sou **in 'n koekie (RU)** gestoor word en in 'n **latere stap** sal die **prompt** die **gebruiker** vra of hy toegang wil gee tot daardie aanvaller se gasheer.
Om hierdie prompt te omseil, was dit moontlik om 'n tab te open om die **Oauth vloei** te begin wat hierdie RU koekie met die **returnUrl** sou stel, die tab te sluit voordat die prompt vertoon word, en 'n nuwe tab te open sonder daardie waarde. Dan, die **prompt sal nie oor die aanvaller se gasheer inligting gee nie**, maar die koekie sou daartoe gestel word, sodat die **token na die aanvaller se gasheer gestuur sal word** in die herleiding.
Om hierdie prompt te omseil, was dit moontlik om 'n tab te open om die **Oauth-stroom** te begin wat hierdie RU-koekie met die **returnUrl** sou stel, die tab te sluit voordat die prompt vertoon word, en 'n nuwe tab te open sonder daardie waarde. Dan, die **prompt sal nie oor die aanvaller se gasheer inligting gee nie**, maar die koekie sou na dit gestel word, sodat die **token na die aanvaller se gasheer gestuur sal word** in die herleiding.
### Prompt Interaction Bypass <a href="#bda5" id="bda5"></a>
Soos verduidelik in [**hierdie video**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), laat sommige OAuth implementasies toe om die **`prompt`** GET parameter as None (**`&prompt=none`**) aan te dui om **te voorkom dat gebruikers gevra word om die gegewe toegang in 'n prompt op die web te bevestig as hulle reeds in die platform aangemeld is**.
Soos verduidelik in [**hierdie video**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), laat sommige OAuth-implementasies toe om die **`prompt`** GET-parameter as None (**`&prompt=none`**) aan te dui om **te voorkom dat gebruikers gevra word om die gegewe toegang in 'n prompt op die web te bevestig as hulle reeds in die platform aangemeld is**.
### response\_mode
Soos [**verduidelik in hierdie video**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q), mag dit moontlik wees om die parameter **`response_mode`** aan te dui om aan te dui waar jy wil hê die kode in die finale URL verskaf moet word:
* `response_mode=query` -> Die kode word binne 'n GET parameter verskaf: `?code=2397rf3gu93f`
* `response_mode=fragment` -> Die kode word binne die URL fragment parameter verskaf `#code=2397rf3gu93f`
* `response_mode=form_post` -> Die kode word binne 'n POST vorm met 'n invoer genaamd `code` en die waarde verskaf
* `response_mode=web_message` -> Die kode word in 'n pos boodskap gestuur: `window.opener.postMessage({"code": "asdasdasd...`
* `response_mode=query` -> Die kode word binne 'n GET-parameter verskaf: `?code=2397rf3gu93f`
* `response_mode=fragment` -> Die kode word binne die URL-fragmentparameter verskaf `#code=2397rf3gu93f`
* `response_mode=form_post` -> Die kode word binne 'n POST-formulier met 'n invoer genaamd `code` en die waarde verskaf
* `response_mode=web_message` -> Die kode word in 'n posboodskap gestuur: `window.opener.postMessage({"code": "asdasdasd...`
### OAuth ROPC flow - 2 FA bypass <a href="#b440" id="b440"></a>
Volgens [**hierdie blogpos**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), is dit 'n OAuth-stroom wat toelaat om in OAuth aan te meld via **gebruikersnaam** en **wagwoord**. As tydens hierdie eenvoudige stroom 'n **token** met toegang tot al die aksies wat die gebruiker kan uitvoer, teruggestuur word, dan is dit moontlik om 2FA met daardie token te omseil.
### SSRFs parameters <a href="#bda5" id="bda5"></a>
[**Kyk na hierdie navorsing**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Vir verdere besonderhede van hierdie tegniek.**
[**Kyk hierdie navorsing**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Vir verdere besonderhede van hierdie tegniek.**
Dinamiese Kliënt Registrasie in OAuth dien as 'n minder voor die hand liggende maar kritieke vektor vir sekuriteits kwesbaarhede, spesifiek vir **Server-Side Request Forgery (SSRF)** aanvalle. Hierdie eindpunt laat OAuth bedieners toe om besonderhede oor kliënt aansoeke te ontvang, insluitend sensitiewe URL's wat uitgebuit kan word.
Dinamiese Kliëntregistrasie in OAuth dien as 'n minder voor die hand liggende maar kritieke vektor vir sekuriteitskwesbaarhede, spesifiek vir **Server-Side Request Forgery (SSRF)** aanvalle. Hierdie eindpunt laat OAuth-bedieners toe om besonderhede oor kliënttoepassings te ontvang, insluitend sensitiewe URL's wat misbruik kan word.
**Belangrike Punten:**
* **Dinamiese Kliënt Registrasie** word dikwels aan `/register` gekoppel en aanvaar besonderhede soos `client_name`, `client_secret`, `redirect_uris`, en URL's vir logo's of JSON Web Key Sets (JWKs) via POST versoeke.
* Hierdie funksie voldoen aan spesifikasies uiteengesit in **RFC7591** en **OpenID Connect Registrasie 1.0**, wat parameters insluit wat moontlik kwesbaar is vir SSRF.
* Die registrasie proses kan per ongeluk bedieners aan SSRF blootstel op verskeie maniere:
* **`logo_uri`**: 'n URL vir die kliënt aansoek se logo wat deur die bediener verkry kan word, wat SSRF kan ontketen of kan lei tot XSS as die URL verkeerd hanteer word.
* **`jwks_uri`**: 'n URL na die kliënt se JWK dokument, wat, as dit kwaadwillig saamgestel is, kan veroorsaak dat die bediener uitgaande versoeke na 'n aanvaller-beheerde bediener maak.
* **`sector_identifier_uri`**: Verwys na 'n JSON-array van `redirect_uris`, wat die bediener mag verkry, wat 'n SSRF geleentheid skep.
* **`request_uris`**: Lys toegelate versoek URI's vir die kliënt, wat uitgebuit kan word as die bediener hierdie URI's aan die begin van die outorisering proses verkry.
* **Dinamiese Kliëntregistrasie** word dikwels aan `/register` gekoppel en aanvaar besonderhede soos `client_name`, `client_secret`, `redirect_uris`, en URL's vir logo's of JSON Web Key Sets (JWKs) via POST-versoeke.
* Hierdie funksie voldoen aan spesifikasies uiteengesit in **RFC7591** en **OpenID Connect Registration 1.0**, wat parameters insluit wat moontlik kwesbaar is vir SSRF.
* Die registrasieproses kan per ongeluk bedieners aan SSRF blootstel op verskeie maniere:
* **`logo_uri`**: 'n URL vir die kliënttoepassing se logo wat deur die bediener opgevraag kan word, wat SSRF kan ontketen of kan lei tot XSS as die URL verkeerd hanteer word.
* **`jwks_uri`**: 'n URL na die kliënt se JWK-dokument, wat, as dit kwaadwillig saamgestel is, kan veroorsaak dat die bediener uitgaande versoeke na 'n aanvaller-beheerde bediener maak.
* **`sector_identifier_uri`**: Verwys na 'n JSON-array van `redirect_uris`, wat die bediener mag opvra, wat 'n SSRF-geleentheid skep.
* **`request_uris`**: Lys toegelate versoek URI's vir die kliënt, wat misbruik kan word as die bediener hierdie URI's aan die begin van die outorisering proses opvra.
**Eksploitasiestategie:**
@ -216,7 +220,7 @@ Dinamiese Kliënt Registrasie in OAuth dien as 'n minder voor die hand liggende
## OAuth providers Race Conditions
As die platform wat jy toets 'n OAuth verskaffer is [**lees dit om vir moontlike Race Conditions te toets**](race-condition.md).
As die platform wat jy toets 'n OAuth-verskaffer is [**lees dit om vir moontlike Race Conditions te toets**](race-condition.md).
## References
@ -228,16 +232,16 @@ As die platform wat jy toets 'n OAuth verskaffer is [**lees dit om vir moontlike
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Leer & oefen 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">\
Leer & oefen 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)
Leer & oefen 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">\
Leer & oefen 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>
* Kyk na die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord groep**](https://discord.gg/hRep4RUj7f) of die [**telegram groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel hacking truuks deur PRs in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Kyk die [**subskripsie planne**](https://github.com/sponsors/carlospolop)!
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Deel hacking truuks deur PR's in te dien na die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}