2021年8月21日~2021年9月4日まで開催されたsetodNoteCTF(https://ctf.setodanote.net/)のPwn問題で、ブラウザ経由でコマンドを実行する環境を提供された。
Linuxのターミナル画面をブラウザで実行できることもあり、CTFの問題より実装が気になってしまった。
ブラウザ上でShellを実行できるメリットとしては、問題を解くにあたりteratermやsshで接続しなくて済むため、初心者が躓きにくくなると考える。
CTFにおけるPwn問題の実行環境をブラウザ上で提供したい。問題提供者、回答者双方の負担や障壁が少なくなる。
ブラウザ上でターミナル風の表示となるのは以下のサイトを参考にした。(HTML+JS:textareaタグを使ってブラウザをターミナル風に装う)
見た目と、入力した感じは、上記サイトで再現できたので、あとはどのように実装するか考えた。
処理部分はEnterキー押下時に、コマンド部分をjsで切り出して、XHRで通信し、処理結果を画面に表示させる実装とする。
その際、入力されたコマンドを認識するようjsで調整したり、表示する際の見え方等を調整したりした。
実装した結果は以下の通り
通常のShellのようにlsコマンドやcatコマンドを実行できることが確認できた。
実装に関しては、入力してEnterキーを入力した際、XHRで通信し、その結果を表示する実装としている。
ここまでWebShellをターミナル風に実行できる環境を構築、実行してみた。
ただ、この状態だと、すべての子安堵が実行可能なので、いたずらがいくらでも可能なので、サービスを監視し、定期的にリスタートするcronや実行制限をかけたりと考慮することはいくつかある。
もう少し手を加えてよりセキュアな実行環境を構築していく。