LoginSignup
0
0

More than 5 years have passed since last update.

WebSocketCat(wscat) の代替としての StreamRelay.NET.exe

Last updated at Posted at 2017-11-15

「-RemoteProxy」オプションにある「WebSocket」スキームを指定する事で、「Remote」と呼称する側の相手をWebSocket-APIとする事ができる


相手

WebSocketでリモートシェルを作ったので、それを相手とする

ws://192.0.2.1:9999/shellでWebSocket-APIが待機しているものとする


WebSocket へのアップグレード

「-RemoteProxy」オプションの「WebSocket」スキームを使う事で、「Remote」と呼称する相手に対して、WebSocketへのアップグレードを依頼するHTTPリクエスト・メッセージを送ることができる

StreamRelay.NET.exe -LocalPort 0 -RemotePort 9999 -RemoteHost 192.0.2.1 -RemoteProxy WebSocket://192.0.2.1:9999/shell?Origin=http://192.0.2.1:9999/^&Sec-WebSocket-Key=AAAAAAAAAAA%3d

こんな感じで、「Local」と呼称する側(コンソール)と、「Remote」と呼称する側(ws://192.0.2.1:9999/shell)とWebSocketプロトコルで会話する事ができる。
ただし、これでは、WebSocketへのアップグレードだけで、WebSocketプロトコル内部で用いるWebSocketデータグラム(リクエストはマスクする等)は、自分で作る必要がある。


WebSocketデータグラムも符号化

次は、

StreamRelay.NET.exe -LocalPort 0 -RemotePort 9999 -RemoteHost 192.0.2.1 -RemoteProxy WebSocket://192.0.2.1:9999/shell?Origin=http://192.0.2.1:9999/^&Sec-WebSocket-Key=AAAAAAAAAAAA -RemoteProxy netstream:///?WebSocketEncode=text%26mask%3d00000000 -RemoteProxy netstream:///?WebSocketDecode

とすると、WebSocketプロトコルへアップグレード後、WebSocketデータグラムの符号化(送信時は、テキストモード、マスクを実施)と、符号化解除(受信時はテキストモード)を実施する。

maskは「00 00 00 00」だけど、ここで、
mask%26"乱数アルゴリズム名" とか(例:mask%26random)乱数プラグインの指定をする事で、任意の乱数アルゴリズムを指定できる

下記の文字コードの話を考えると、textモードより、binモードの方が適切かもしれない

この符号化は、Plugin.BaseFilterStream.dllに実装しているので、これをプラグインとして読み込む必要がある


WebSocketの文字コード

WebSocket-APIが、特に何もしていなければ、シェル側とコンソール側で同じ文字コードを使っていれば、上記で問題はない。

しかし、WebSocketは文字コードが UTF-8なので、WebSocket-APIが文字コードをUTF-8に変換しているなどの場合、そして、コンソールの文字コードがUTF-8でない場合、文字コード変換が必要になってくる。

StreamRelay.NET.exe -LocalPort 0 -RemotePort 9999 -RemoteHost 192.0.2.1 -RemoteProxy WebSocket://192.0.2.1:9999/shell?Origin=http://192.0.2.1:9999/^&Sec-WebSocket-Key=AAAAAAAAAAAA -RemoteProxy netstream:///?WebSocketEncode=text%26mask=00000000 -RemoteProxy netstream:///?WebSocketDecode -LocalCharset Shift_JIS -RemoteCharset UTF-8

とすると、「Local」と呼称する側の文字コードは「Shift-JIS」で、「Remote」と呼称する側のWebSocket-APIに対しては文字コードUTF-8に変換する。という事ができる。


Sec-WebSocket-Key

「Sec-WebSocket-Key=AAAAAAAAAAAA」を「Sec-WebSocket-Key-Auto="乱数オプション"」にする事で、Sec-WebSocket-Keyを適当な乱数にする事ができる

例えば、
「Sec-WebSocket-Key-Auto=6-7%2cCryptoRandom」とすると、アルゴリズムCryptoRandomで、バイト数=6~7の範囲の乱数となる


乱数の指定方法

乱数アルゴリズムの試用ツールとしてのStreamRelay.NET.exe


目次へ戻る

目次というか最初の一歩

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0