setodaNote

忘れる用のメモ書き for Cybersecurity

HTTP/HTTPS でサーバに接続してターミナルを操作したい

HTTP/HTTPS 越しに接続可能なサーバのターミナルを呼び出したい。

発端は、通信要件などで直接 nc で接続できないサーバに対して、どうにか Web ブラウザ経由で nc 接続ができないか考えたこと。

nc したいマシンにつながるマシンとして、Web サーバ(HTTP/HTTPS のみ通る)があったので、 そのサーバのターミナルをなんとか Web ブラウザから呼び出せられれば、そこを起点にして nc で接続できるのではと思いいたる。*1

図にするとこう。
                  _________          _________
                 /        /|        /        /|
 +----+         +--------+ |       +--------+ |
 | me |  HTTPS  |  Web   | |       | Target | |
 +----+ ------->|        | |  nc   |        | |
   / |          |  (sh)  | | ----->|        | |
  +--+          |        |/        |        |/
                +--------+         +--------+

そんなツールがないか探したところ、サーバ上で起動させておくことで Web ブラウザ経由でターミナルを操作できるツールがいくつか見つかった。 以下は試したなかで利用者目線で使いやすそうだったもの。特に WeTTY が操作性と構築の分かりやすさでよさそうだった。

Web からターミナルに接続できるツール

WeTTY = Web + TTY.

デフォルトの表示画面がシンプルで、操作面も特にくせがなく使いやすい。 Docker で立ち上げておいて SSH で自身 or 他の端末に飛ばすといった使い方が簡単でよさそう。 ここで挙げたなかでは最も更新頻度が高い。*2 *3

f:id:soji256:20210301031628p:plain
WeTTY = Web + TTY.

ƸӜƷ butterfly 3.0

探していて最初に見つけたツール。デフォルトの表示画面が少しパピヨン。操作性は wetty と同様に使いやすい。

f:id:soji256:20210301032114p:plain
ƸӜƷ butterfly 3.0

shellinabox

デフォルトの表示画面はシンプル。操作性は右クリックメニューなどが少し時代を感じるものの、支障をきたすほどではない。

f:id:soji256:20210301032547p:plain
shellinabox

その他

ここで挙げたもの以外は以下から。今回は端末からは HTTP/HTTPS でしか通信できないという要件があったので、 ブラウザでターミナルをエミュレートして SSH するものなどは検証から除外した。

更新履歴

  • 2021/03/01 新規作成
  • 2021/03/02 章構成を整理

*1:そうかこれが Webshell !!

*2:3つの中で唯一 MIT License なのでライセンス面でも気軽。

*3:picoCTF で導入されている Webshell も恐らくこれ。 https://twitter.com/picoctf/status/1178480022685982720