GNU/Linux >> Linux の 問題 >  >> Linux

/etc/passwd で指定されたコマンド/スクリプトをバイパスする

(おそらく意図しない) バックドアがあると仮定します。

デフォルトの /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 だった環境変数 .ただし、環境変数を変更することもできます!これは、次の方法でルート シェルを取得できることを意味します。

<オール>
  • パスワードなしで GUI からゲームとしてログインします。
  • 右クリックしてルート メニューを表示します。
  • dbxtool を開始 .
  • setenv SHELL /bin/sh
  • (オプション) setenv HOME /
  • ! でシェルを開始します
  • 端末が設定されていないため、stty sane を実行します
  • ほら、パスワードなしで root シェル!

    したがって、ユーザーが無効なシェルから脱出できないと想定しないでください。


    スクリプトの実行をバイパスすることはできません。これは、ログイン シェルです。 、ログインするたびに開始されます。 ログイン シェルとして 、終了するたびにログオフします。しかし、ログイン シェルの癖、バグ、矛盾を利用して脱出することはできます。

    できることの 1 つは、メニューの任意のオプションを使用してシェルにエスケープすることです。メニューで vim を開始できる場合 、 lessmore または他のいくつかのコマンドを使用すると、理論的には解放できます。システム管理者が熟練している場合、これらのコマンドは制限付きバージョンを使用し、機能しません。


    同様のケースがあったウォーゲームのチャレンジを覚えています-シェルは、moreを使用して出力を単に出力するものを指していました コマンドを実行し、セッションを終了しました。ただし、さらに 組み込みのテキスト エディター (この場合は vi) を備えているため、接続元のターミナル ウィンドウのサイズを変更して、より多くの機能がアクティブになるようにし、それを使用してシェルをエスケープするだけで十分でした。

    したがって、答えはスクリプトが何をするかによって異なります。 をチェック 脆弱性を回避するために実行している各コマンドのページ。


    Linux
    1. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

    2. 〜/ .profile、〜/ .bashrc、〜/ .bash_profile、〜/ .gnomerc、/ etc / bash_bashrc、/ etc / screenrcの違い…?

    3. 最初のBashスクリプトを作成すると、Cdコマンドを「固定」できませんか?

    1. mysqlユーザーが/etc/ passwdにbashシェルを持っているのはなぜですか?

    2. シェルスクリプト内から passwd コマンドを使用する

    3. Linux の /etc/init.d と /etc/rcX.d ディレクトリの間の接続は何ですか?

    1. 自動的に供給されるシェルスクリプトを/etc/ profileに書き込む方法は?

    2. $の意味は?シェルスクリプトでは?

    3. grpck コマンド – /etc/group および /etc/gshadow ファイル内の破損したエントリまたは重複したエントリを削除します。