(おそらく意図しない) バックドアがあると仮定します。
デフォルトの /etc/passwd
1990 年代初頭の Sun ワークステーションには、次のようなエントリが含まれていました:
games::0:0:games:/nopath:/bin/false
つまり、パスワードのない「games」という名前のアカウントです。どうやらこのアイデアを思いついた天才には想像力がなく、0 の uid と gid (つまり root と wheel) を割り当てたようです。ホームディレクトリは意味がなく、シェルは常に失敗して終了するプログラムに設定されていたため、通常は問題ありませんでした。さらに、ネットワークによるアクセスのデフォルト設定 (telnet、rlogin、rcp、ftp) は、0 の uid によるアクセスを防止するように設定されていました。適切に設定されたパスワード、ホーム ディレクトリ、およびシェルを含む、root 用の別の passwd エントリがありました。
つまり、ゲームとしてログインしようとすると、次のことが起こります:
- コンソールでゲームとしてログインすると、最初は成功しますが、その後
/bin/false
が生成されます。 シェル、すぐに終了します。 - telnet または rlogin を使用すると、ログインが完全に拒否されます。成功しても
/bin/false
シェルはすぐに終了します。 - FTP と scp はシェルを使用しませんが、uid 0 へのアクセスを拒否するように構成されているため、この方法でログインできませんでした。
- GUI ログインは、ウィンドウ マネージャ、クロック クライアント、ターミナルなどのデフォルトの GUI サービスを起動します。後者は、その子シェルがすぐに終了するため、すぐに終了します。したがって、時計を除いて空の画面が表示されます。 (これについては以下で詳しく説明します...)
- あなたが本当に持っていたなら root としてログインするには、コンソールからログインするか、最初にそのマシンで別のユーザーとして rlogin/telnet を実行し、次に
su root
する必要があります。 .どちらの方法でもルートpasswd
を使用します ゲームpasswd
ではなくエントリー エントリ、したがって、ルートが機能するように機能します。
そのため、GUI ログインを行わない限り、ゲーム アカウントは常に失敗するように見えました。その場合、現れたのは時計だけでした。ただし、背景を右クリックして、ユーザーが通常自分でカスタマイズする工場出荷時のプログラムのリストを含むルート メニューを取得できます。 (ゲーム アカウントではメニューのカスタマイズが機能しませんでした。正確な理由は覚えていません。) ターミナル ウィンドウをさらに表示しようとすると、すべて失敗します。パズルゲームがありました(そもそもアカウントの原動力だったのかもしれません)。別の選択肢は、ログアウトすることでした。そして、グラフィカルなデバッグ ツール dbxtool
がありました。 .
dbxtool
dbx
のグラフィカルフロントエンドでした 今日の gdb
に似たシンボリック デバッガ . uid がゼロであるため、システム上の任意のプロセスに接続して制御できましたが、Sun が提供するプログラムはシンボルなしでコンパイルされたため、これは役に立ちませんでした。シェルを起動できますが、これは SHELL
を使用します /bin/false
だった環境変数 .ただし、環境変数を変更することもできます!これは、次の方法でルート シェルを取得できることを意味します。
dbxtool
を開始 .setenv SHELL /bin/sh
setenv HOME /
!
でシェルを開始します stty sane
を実行します ほら、パスワードなしで root シェル!
したがって、ユーザーが無効なシェルから脱出できないと想定しないでください。
スクリプトの実行をバイパスすることはできません。これは、ログイン シェルです。 、ログインするたびに開始されます。 ログイン シェルとして 、終了するたびにログオフします。しかし、ログイン シェルの癖、バグ、矛盾を利用して脱出することはできます。
できることの 1 つは、メニューの任意のオプションを使用してシェルにエスケープすることです。メニューで vim
を開始できる場合 、 less
、 more
または他のいくつかのコマンドを使用すると、理論的には解放できます。システム管理者が熟練している場合、これらのコマンドは制限付きバージョンを使用し、機能しません。
同様のケースがあったウォーゲームのチャレンジを覚えています-シェルは、moreを使用して出力を単に出力するものを指していました コマンドを実行し、セッションを終了しました。ただし、さらに 組み込みのテキスト エディター (この場合は vi) を備えているため、接続元のターミナル ウィンドウのサイズを変更して、より多くの機能がアクティブになるようにし、それを使用してシェルをエスケープするだけで十分でした。
したがって、答えはスクリプトが何をするかによって異なります。 男をチェック 脆弱性を回避するために実行している各コマンドのページ。