私は終わりました。OverTheWire Bandit Warゲーム、レベル18。
これは驚くべきことです。以下はこのレベルの説明です。
次のレベルのパスワードはファイルに保存されます。閲覧ファイルホームディレクトリにあります。誰が修正したのが残念です。.bashrcSSHを使用してログインするとログアウトします。
シェルに購入をスキップさせる方法を考えています.bashrc
。しかし、解決策が見つかるまでは、単にサーバーへのSFTP接続を開始したいという誘惑があります。私はそれがうまくいくとは思わなかった。しかし、そうでした。理由を知りたいです。 SFTPがSSHを介して実行されると思いました。
明らかに、期待どおりにサーバーにSSHで接続すると、サーバーから追い出されます。
答え1
Bashに関する一般情報
Bashのスタートアップファイルのデザインはかなり奇妙です。 Bashは、.bashrc
関連していない2つの状況でロードされます。
- 対話型シェルの場合、そうでない場合ログインシェル(として呼び出されない限り
sh
)。だからこそ.bash_profile
一般負荷.bashrc
。 バッシュがあるときいいえInteractiveはログインシェルでも、asへの呼び出しでもありませんが、
sh
実行するコマンドが提供され、設定されていない-c
かSHLVL
、1以下で、次のいずれかがtrueです。- 標準入力がソケットの場合。実際、これはbashが呼び出されると主に発生します。
rshd
つまり実行中ですrsh remotehost.example.com somecommand
。 コンパイル時に有効になっている場合(Debianやその派生製品などの一部のディストリビューションでは)、
SSH_CLIENT
環境変数の1つが定義されます。SSH2_CLIENT
実際、これはsshd
Internet Explorerでbashを呼び出すことを意味しますssh remotehost.example.com somecommand
。
Bashのコンパイル方法がわからない場合は、バイナリに次の文字列が含まれていることを確認して、このオプションが設定されていることを確認できますSSH_CLIENT
。strings /bin/bash | grep SSH_CLIENT
- 標準入力がソケットの場合。実際、これはbashが呼び出されると主に発生します。
SSHに関する一般情報
SSHプロトコルを介してコマンドを実行すると、コマンドは文字列として接続を介して渡されます。この文字列はリモートシェルによって実行されます。を実行すると、ssh example.com somecommand
リモートユーザーのログインシェルがあると/bin/bash
SSHサーバーが起動します/bin/bash -c somecommand
。ログインシェルをバイパスする方法はありません。これにより、次の制限付きログインシェルが可能になります。ファイルのコピーのみ許可一般的なコマンド実行の代わりに。
1つの例外があります。 SSH プロトコルを使用すると、クライアントは特定のサブシステムを要求できます。クライアントがこのsftp
サブシステムを要求すると、デフォルトでOpenSSHサーバーは/usr/lib/openssh/sftp-server
ユーザーのログインシェル(場所は異なる場合があります)を介してこのプログラムを呼び出します。ただし、有線経由で内部SFTPサーバーを実行するように構成することもできます。
Subsystem sftp internal-sftp
sshd_config
ファイルから。内部SFTPサーバーの場合、この場合にのみユーザーのログインシェルがバイパスされます。
この挑戦のために
OverTheWire Bandit 18.bashrc
用含まれています
…
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
…
echo 'Byebye !'
exit 0
したがって、bashを非対話型にするすべてのタスクを実行して、このレベルを解決できます。
見つかったとおり、SFTPが機能します。
しかし、それも動作します。そのまま。対話型ログイン中にCtrl + Cをタイムリーに押しても機能します。 bash が中断されるため、完全には実行されません。 Bashは起動に巨視的な時間がかかるため、信頼できませんが、実際には実行できます。ssh [email protected] cat readme
echo 'cat readme' | ssh [email protected]
.bashrc
答え2
.bashrc
シェルを起動したときにのみ実行されます。
Subsystem internal-sftp
サーバーファイルにコマンドを提供して、SFTPプロトコル用のシェルを起動しないようにSSHサーバーを設定できます sshd_config
。
推測: OverTheWire Bandit 戦争ゲームが実際に構成される方法は調整ではなく、このような可能性が高いです。.bashrc
そうしないと、同じ制限によってサーバーコマンドssh
もブロックされます。sftp
答え3
sftpは同じ資格情報を使用しますが、リモートシステムで対話型シェルを実行しません。
たとえば、管理者はsftpユーザーがsshを実行するのを防ぐことができます。SSHの代わりにSFTPのみを使用するようにユーザーを制限する方法