Google Cloud RunのクラウドでUbuntu 20.04.3デスクトップを実行しています。コンテナイメージをローカルで実行すると、bash端末を含むすべてのプロセスを実行できます。
ただし、noVNCを介して接続されたGoogle Cloud Runでは、Chrome以外の端末や他のプロセスを起動できません。だから私はいくつかの異なるブラウザベースの端末ソリューションを試してみましたが、これが私が見つけたものです。
Node.jsでSpawnを使用する
SpawnとReverse Shell Node.js Webサーバーを使用してターミナルコマンドを渡すことができます。たとえば、localhost:xxxx/exec?q=ls は、現在の作業ディレクトリにあるファイルを一覧表示します。コマンドを実行することもできます。
WebSSH2とシェリナボックス
どちらのソリューションも、SSHを使用してブラウザクライアントをSSHサーバーに接続します。ログインできますが、コマンドを実行すると、次の出力が表示されます。
root@localhost:~# ls
[1] stopped ls --color=auto
root@localhost:~# ls
ご覧のとおり、rootでSSHingを試しましたが、Node.jsのgenerateメソッドを使用してシェルコマンドを実行しない限り、まだコマンドを実行できません.
状況に応じてUbuntu、fluxbox、xvfbをローカルで実行し、noVNCを使用してブラウザを介してデスクトップにアクセスする方法は次のとおりです。ローカルでは、すべてがうまく動作します。ls
ホームフォルダから実行して、そこにどのファイルがあるかを確認できます。
Google Cloud Run で同じ画像を実行すると表示される様子です。このls
コマンドは次のように返しますstopped [1]
。
Node.jsリバースシェルの外観は次のとおりです。ここではls
、/usr/binフォルダで実行できることがわかります。これがファイルシステムに移動し、どの権限が設定されているかを確認し、Google Cloud Runで実行されているコンテナにコマンドを実行する唯一の方法です。
Node.jsリバースプロキシを使用してファイルに対する権限を軽減しても、WebSSH2またはshellinaboxを使用するときと同じようにコマンドをchmod -R 777 /usr
実行することはできません。ls
シェルコマンドとプロセスがルートとして実行されるのを防ぐことができるのは何ですか?