diff --git a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md index 06bed3aca..a14b6dd96 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md +++ b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md @@ -2,15 +2,15 @@ {{#include ../../banners/hacktricks-training.md}} -## Taak, Agterstapel en Voorgrond Aktiwiteite +## Taak, Terug Stapel en Voorgrond Aktiwiteite -In Android is 'n **taak** basies 'n stel aktiwiteite waarmee gebruikers interaksie het om 'n spesifieke werk te voltooi, georganiseer binne 'n **agterstapel**. Hierdie stapel rangskik aktiwiteite op grond van wanneer hulle geopen is, met die mees onlangse aktiwiteit wat boaan vertoon word as die **voorgrond aktiwiteit**. Op enige oomblik is slegs hierdie aktiwiteit sigbaar op die skerm, wat dit deel van die **voorgrond taak** maak. +In Android is 'n **taak** basies 'n stel aktiwiteite waarmee gebruikers interaksie het om 'n spesifieke werk te voltooi, georganiseer binne 'n **terug stapel**. Hierdie stapel orden aktiwiteite gebaseer op wanneer hulle geopen is, met die mees onlangse aktiwiteit wat boaan vertoon word as die **voorgrond aktiwiteit**. Op enige oomblik is slegs hierdie aktiwiteit sigbaar op die skerm, wat dit deel van die **voorgrond taak** maak. -Hier is 'n vinnige oorsig van aktiwiteitsoorgange: +Hier is 'n vinnige uiteensetting van aktiwiteit oorgange: - **Aktiwiteit 1** begin as die enigste aktiwiteit in die voorgrond. -- Die bekendstelling van **Aktiwiteit 2** druk **Aktiwiteit 1** na die agterstapel, wat **Aktiwiteit 2** na die voorgrond bring. -- Die begin van **Aktiwiteit 3** skuif **Aktiwiteit 1** en **Aktiwiteit 2** verder terug in die stapel, met **Aktiwiteit 3** nou voor. +- Die bekendstelling van **Aktiwiteit 2** druk **Aktiwiteit 1** na die terug stapel, wat **Aktiwiteit 2** na die voorgrond bring. +- Die begin van **Aktiwiteit 3** beweeg **Aktiwiteit 1** en **Aktiwiteit 2** verder terug in die stapel, met **Aktiwiteit 3** nou voor. - Die sluiting van **Aktiwiteit 3** bring **Aktiwiteit 2** terug na die voorgrond, wat Android se gestroomlynde taak navigasiemeganisme demonstreer. ![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>) @@ -19,25 +19,31 @@ Hier is 'n vinnige oorsig van aktiwiteitsoorgange: ### Oorsig van Taak Affiniteit en Begin Modusse -In Android toepassings spesifiseer **taak affiniteit** 'n aktiwiteit se voorkeurtaak, wat tipies ooreenstem met die app se pakkie naam. Hierdie opstelling is noodsaaklik om 'n bewys-van-konsep (PoC) app te skep om die aanval te demonstreer. +In Android toepassings spesifiseer **taak affiniteit** 'n aktiwiteit se verkiesde taak, wat tipies ooreenstem met die app se pakketnaam. Hierdie opstelling is noodsaaklik om 'n bewys-van-konsep (PoC) app te skep om die aanval te demonstreer. ### Begin Modusse -Die `launchMode` attribuut rig die hantering van aktiwiteit instansies binne take. Die **singleTask** modus is van kardinale belang vir hierdie aanval, wat drie scenario's bepaal op grond van die bestaande aktiwiteit instansies en taak affiniteit ooreenkomste. Die uitbuiting hang af van die vermoë van 'n aanvaller se app om die teiken app se taak affiniteit na te boots, wat die Android stelsel mislei om die aanvaller se app in plaas van die bedoelde teiken te begin. +Die `launchMode` attribuut rig die hantering van aktiwiteit instansies binne take. Die **singleTask** modus is van kardinale belang vir hierdie aanval, wat drie scenario's bepaal gebaseer op die bestaande aktiwiteit instansies en taak affiniteit ooreenkomste. Die uitbuiting hang af van die vermoë van 'n aanvaller se app om die teiken app se taak affiniteit na te boots, wat die Android stelsel mislei om die aanvaller se app te begin in plaas van die bedoelde teiken. ### Gedetailleerde Aanval Stappe 1. **Kwaadwillige App Installasie**: Die slagoffer installeer die aanvaller se app op hul toestel. 2. **Begin Aktivering**: Die slagoffer open eers die kwaadwillige app, wat die toestel vir die aanval voorberei. 3. **Teiken App Begin Poging**: Die slagoffer probeer om die teiken app te open. -4. **Hijack Uitvoering**: As gevolg van die ooreenstemmende taak affiniteit, word die kwaadwillige app bekendgestel in plaas van die teiken app. +4. **Hijack Uitvoering**: Op 'n sekere punt probeer die app om die **singleTask** weergawe te open. Vanweë die ooreenstemmende taak affiniteit, word die kwaadwillige app begin in plaas van die teiken app. 5. **Bedrog**: Die kwaadwillige app bied 'n vals aanmeldskerm aan wat die teiken app naboots, wat die gebruiker mislei om sensitiewe inligting in te voer. +> [!TIP] +> Let daarop dat vir hierdie aanval om te werk, die kwesbare weergawe **nie na true geexporteer hoef te word nie** en dit hoef ook nie die Hoof aktiwiteit te wees nie. + Vir 'n praktiese implementering van hierdie aanval, verwys na die Taak Hijacking Strandhogg repository op GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg). ### Voorkoming Maatreëls -Om sulke aanvalle te voorkom, kan ontwikkelaars `taskAffinity` op 'n leë string stel en die `singleInstance` beginmodus kies, wat verseker dat hul app van ander geïsoleer is. Die aanpassing van die `onBackPressed()` funksie bied addisionele beskerming teen taak hijacking. +Om sulke aanvalle te voorkom, kan ontwikkelaars: +- Stel **`**taskAffinity`** van die **singleTask** weergawe op 'n leë string (`android:taskAffinity=""`) +- Kies die **`singleInstance`** beginmodus, wat verseker dat hul app van ander geïsoleer is. +- Pas die **`onBackPressed()`** funksie aan wat addisionele beskerming teen taak hijacking bied. ## **Verwysings** diff --git a/src/mobile-pentesting/android-app-pentesting/react-native-application.md b/src/mobile-pentesting/android-app-pentesting/react-native-application.md index 631821368..d4f49db53 100644 --- a/src/mobile-pentesting/android-app-pentesting/react-native-application.md +++ b/src/mobile-pentesting/android-app-pentesting/react-native-application.md @@ -6,23 +6,31 @@ Om te bevestig of die toepassing op die React Native raamwerk gebou is, volg hie 1. Hernoem die APK-lêer met 'n zip-uitbreiding en onttrek dit na 'n nuwe gids met die opdrag `cp com.example.apk example-apk.zip` en `unzip -qq example-apk.zip -d ReactNative`. -2. Navigeer na die nuut geskepte ReactNative-gids en vind die assets-gids. Binne hierdie gids behoort jy die lêer `index.android.bundle` te vind, wat die React JavaScript in 'n geminifiseerde formaat bevat. +2. Navigeer na die nuut geskepte ReactNative-gids en vind die assets-gids. Binne hierdie gids behoort jy die lêer `index.android.bundle` te vind, wat die React JavaScript in 'n geminimaliseerde formaat bevat. 3. Gebruik die opdrag `find . -print | grep -i ".bundle$"` om die JavaScript-lêer te soek. -Om die JavaScript-kode verder te analiseer, skep 'n lêer genaamd `index.html` in dieselfde gids met die volgende kode: +## Javascript Kode + +As jy die inhoud van die `index.android.bundle` nagaan en die JavaScript-kode van die toepassing vind (selfs al is dit geminimaliseer), kan jy **dit analiseer om sensitiewe inligting en kwesbaarhede te vind**. + +Aangesien die bundel eintlik al die JS-kode van die toepassing bevat, is dit moontlik om **dit in verskillende lêers te verdeel** (wat die omgekeerde ingenieurswese potensieel makliker maak) met behulp van die **tool [react-native-decompiler](https://github.com/numandev1/react-native-decompiler)**. + +### Webpack + +Om die JavaScript-kode verder te analiseer, kan jy die lêer op [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) oplaai of volg hierdie stappe: + +1. Skep 'n lêer genaamd `index.html` in dieselfde gids met die volgende kode: ```html ``` -U kan die lêer op [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) oplaai of volg hierdie stappe: +2. Maak die `index.html` lêer in Google Chrome oop. -1. Maak die `index.html` lêer in Google Chrome oop. +3. Maak die Ontwikkelaar Toolbar oop deur **Command+Option+J vir OS X** of **Control+Shift+J vir Windows** te druk. -2. Maak die Ontwikkelaar Toolbar oop deur **Command+Option+J vir OS X** of **Control+Shift+J vir Windows** te druk. +4. Klik op "Sources" in die Ontwikkelaar Toolbar. Jy behoort 'n JavaScript-lêer te sien wat in vouers en lêers verdeel is, wat die hoofpakket vorm. -3. Klik op "Sources" in die Ontwikkelaar Toolbar. U behoort 'n JavaScript-lêer te sien wat in vouers en lêers verdeel is, wat die hoofpakket vorm. - -As u 'n lêer genaamd `index.android.bundle.map` vind, sal u in staat wees om die bronkode in 'n ongeminifiseerde formaat te analiseer. Kaartlêers bevat bronkaarte, wat u toelaat om geminifiseerde identifiseerders te kaart. +As jy 'n lêer genaamd `index.android.bundle.map` vind, sal jy in staat wees om die bronkode in 'n ongeminifiseerde formaat te analiseer. Kaartlêers bevat bronkaarte, wat jou toelaat om geminifiseerde identifiseerders te kaart. Om sensitiewe akrediteerbare en eindpunte te soek, volg hierdie stappe: @@ -32,8 +40,42 @@ Om sensitiewe akrediteerbare en eindpunte te soek, volg hierdie stappe: 3. Dit was gelukkig dat sensitiewe hard-gecodeerde akrediteerbare in die JavaScript-kode gevind is tydens die rekonsiliasieproses. -## References +### Verander JS-kode en herbou + +In hierdie geval is dit maklik om die kode te verander. Jy moet net die app hernoem om die uitbreiding `.zip` te gebruik en dit uit te pak. Dan kan jy **die JS-kode binne hierdie pakket wysig en die app herbou**. Dit behoort genoeg te wees om jou in staat te stel om **kode in die app in te spuit** vir toetsdoeleindes. + +## Hermes bytecode + +As die pakket **Hermes bytecode** bevat, sal jy **nie toegang hê tot die Javascript-kode** van die app nie (selfs nie die geminifiseerde weergawe nie). + +Jy kan nagaan of die pakket Hermes bytecode bevat deur die volgende opdrag uit te voer: +```bash +file index.android.bundle +index.android.bundle: Hermes JavaScript bytecode, version 96 +``` +U kan egter die gereedskap **[hbctool](https://github.com/bongtrop/hbctool)**, **[hermes-dec](https://github.com/P1sec/hermes-dec)** of **[hermes_rs](https://github.com/Pilfer/hermes_rs)** gebruik om die **bytecode te ontbind** en ook om dit **na 'n pseudo JS-kode te dekompileer**. Om dit te doen, byvoorbeeld hierdie opdragte: +```bash +hbc-disassembler ./index.android.bundle /tmp/my_output_file.hasm +hbc-decompiler ./index.android.bundle /tmp/my_output_file.js +``` +### Verander kode en herbou + +Ideaal gesproke behoort jy in staat te wees om die gedissasembelde kode te wysig (om 'n vergelyking, of 'n waarde of wat ook al jy moet verander) en dan **die bytecode te herbou** en dan die app te herbou. + +Die hulpmiddel **[hbctool](https://github.com/bongtrop/hbctool)** ondersteun die dissasembler van die bundel en die herbou daarvan nadat die veranderinge aangebring is, maar dit **ondersteun slegs ou weergawes** van Hermes bytecode. + +Die hulpmiddel **[hermes-dec](https://github.com/P1sec/hermes-dec)** ondersteun nie die herbou van die bytecode nie. + +Die hulpmiddel **[hermes_rs](https://github.com/Pilfer/hermes_rs)** ondersteun die herbou van die bytecode, maar dit is eintlik 'n biblioteek en nie 'n CLI-hulpmiddel nie. + +## Dinamiese Analise + +Jy kan probeer om die app dinamies te analiseer deur Frida te gebruik om die ontwikkelaarmodus van die React-app in te skakel en **`react-native-debugger`** te gebruik om daaraan te koppel. Maar hiervoor het jy blykbaar die bronkode van die app nodig. Jy kan meer inligting hieroor vind in [https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/](https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/). + +## Verwysings - [https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7](https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7) +- [https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications](https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications) +- [https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf](https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/android-app-pentesting/tapjacking.md b/src/mobile-pentesting/android-app-pentesting/tapjacking.md index 888d13f95..5bc2d9052 100644 --- a/src/mobile-pentesting/android-app-pentesting/tapjacking.md +++ b/src/mobile-pentesting/android-app-pentesting/tapjacking.md @@ -2,15 +2,16 @@ {{#include ../../banners/hacktricks-training.md}} - ## **Basiese Inligting** **Tapjacking** is 'n aanval waar 'n **kwaadwillige** **toepassing** geloods word en **homself bo-op 'n slagoffer-toepassing posisioneer**. Sodra dit die slagoffer-toepassing sigbaar obscuur, is sy gebruikerskoppelvlak ontwerp om die gebruiker te mislei om met dit te interaksie, terwyl dit die interaksie aan die slagoffer-toepassing oorgedra.\ -In werklikheid, dit is **blind die gebruiker van die kennis dat hulle eintlik aksies op die slagoffer-toepassing uitvoer**. +In werklikheid, dit is **blindings die gebruiker om te weet dat hulle eintlik aksies op die slagoffer-toepassing uitvoer**. ### Opsporing -Om toepassings wat kwesbaar is vir hierdie aanval te spoor, moet jy soek na **geëksporteerde aktiwiteite** in die android-manifes (let daarop dat 'n aktiwiteit met 'n intent-filter outomaties geëksporteer word as standaard). Sodra jy die geëksporteerde aktiwiteite gevind het, **kontroleer of hulle enige toestemming vereis**. Dit is omdat die **kwaadwillige toepassing daardie toestemming ook nodig sal hê**. +Om toepassings wat kwesbaar is vir hierdie aanval te ontdek, moet jy soek na **geëxporteerde aktiwiteite** in die android-manifes (let daarop dat 'n aktiwiteit met 'n intent-filter outomaties geëxporteer word as standaard). Sodra jy die geëxporteerde aktiwiteite gevind het, **kyk of hulle enige toestemming vereis**. Dit is omdat die **kwaadwillige toepassing daardie toestemming ook nodig sal hê**. + +Jy kan ook die minimum SDK-weergawe van die toepassing nagaan, deur die waarde van **`android:minSdkVersion`** in die **`AndroidManifest.xml`**-lêer te kontroleer. As die waarde **laer as 30** is, is die toepassing kwesbaar vir Tapjacking. ### Beskerming @@ -20,7 +21,7 @@ Om toepassings wat kwesbaar is vir hierdie aanval te spoor, moet jy soek na **ge #### `filterTouchesWhenObscured` -As **`android:filterTouchesWhenObscured`** op **`true`** gestel is, sal die `View` nie aanrakinge ontvang wanneer die venster van die view deur 'n ander sigbare venster obscuur word nie. +As **`android:filterTouchesWhenObscured`** op **`true`** gestel is, sal die `View` nie aanrakinge ontvang wanneer die venster van die weergawe deur 'n ander sigbare venster obscuur word nie. #### **`setFilterTouchesWhenObscured`** @@ -44,7 +45,7 @@ Volg die **README-instruksies om dit te gebruik**. ### FloatingWindowApp -'n Voorbeeldprojek wat **FloatingWindowApp** implementeer, wat gebruik kan word om bo ander aktiwiteite te plaas om 'n clickjacking-aanval uit te voer, kan gevind word in [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (dit is 'n bietjie oud, goeie geluk met die bou van die apk). +'n Voorbeeldprojek wat **FloatingWindowApp** implementeer, wat gebruik kan word om bo ander aktiwiteite te plaas om 'n clickjacking-aanval uit te voer, kan gevind word in [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (bietjie oud, goeie geluk met die bou van die apk). ### Qark @@ -53,9 +54,9 @@ Volg die **README-instruksies om dit te gebruik**. Jy kan [**qark**](https://github.com/linkedin/qark) gebruik met die `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` parameters om 'n kwaadwillige toepassing te skep om moontlike **Tapjacking** kwesbaarhede te toets.\ -Die versagting is relatief eenvoudig aangesien die ontwikkelaar kan kies om nie aanraakgebeurtenisse te ontvang wanneer 'n weergawe deur 'n ander bedek is nie. Gebruik die [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security): +Die mitigasie is relatief eenvoudig aangesien die ontwikkelaar kan kies om nie aanraakgebeurtenisse te ontvang wanneer 'n weergawe deur 'n ander bedek is nie. Gebruik die [Android Developer’s Reference](https://developer.android.com/reference/android/view/View#security): -> Soms is dit noodsaaklik dat 'n toepassing in staat is om te verifieer dat 'n aksie uitgevoer word met die volle kennis en toestemming van die gebruiker, soos om 'n toestemming versoek toe te staan, 'n aankoop te doen of op 'n advertensie te klik. Ongelukkig kan 'n kwaadwillige toepassing probeer om die gebruiker te mislei om hierdie aksies uit te voer, sonder dat hulle daarvan bewus is, deur die beoogde doel van die weergawe te verberg. As 'n remedie bied die raamwerk 'n aanraakfiltrering-meganisme wat gebruik kan word om die sekuriteit van weergawes wat toegang tot sensitiewe funksionaliteit bied, te verbeter. +> Soms is dit noodsaaklik dat 'n toepassing in staat is om te verifieer dat 'n aksie uitgevoer word met die volle kennis en toestemming van die gebruiker, soos om 'n toestemming versoek toe te staan, 'n aankoop te doen of op 'n advertensie te klik. Ongelukkig kan 'n kwaadwillige toepassing probeer om die gebruiker te mislei om hierdie aksies uit te voer, sonder dat hulle daarvan bewus is, deur die beoogde doel van die weergawe te verberg. As 'n remedie bied die raamwerk 'n aanraakfiltermeganisme wat gebruik kan word om die sekuriteit van weergawes wat toegang tot sensitiewe funksionaliteit bied, te verbeter. > > Om aanraakfiltrering in te skakel, bel [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) of stel die android:filterTouchesWhenObscured uitleg eienskap op waar. Wanneer geaktiveer, sal die raamwerk aanrakings wat ontvang word wanneer die weergawe se venster deur 'n ander sigbare venster bedek is, verwerp. As gevolg hiervan sal die weergawe nie aanrakings ontvang wanneer 'n toast, dialoog of ander venster bo die weergawe se venster verskyn nie. diff --git a/theme/ht_searcher.js b/theme/ht_searcher.js index 1cee01a8c..52e150d9a 100644 --- a/theme/ht_searcher.js +++ b/theme/ht_searcher.js @@ -471,12 +471,13 @@ window.search = window.search || {}; showResults(true); } - fetch(path_to_root + 'searchindex.json') + var branch = lang === "en" ? "master" : lang + fetch(`https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.json`) .then(response => response.json()) .then(json => init(json)) .catch(error => { // Try to load searchindex.js if fetch failed var script = document.createElement('script'); - script.src = path_to_root + 'searchindex.js'; + script.src = `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.js`; script.onload = () => init(window.search); document.head.appendChild(script); }); diff --git a/theme/index.hbs b/theme/index.hbs index 166e177c4..70b70a68a 100644 --- a/theme/index.hbs +++ b/theme/index.hbs @@ -55,6 +55,7 @@