/usr/bin/chmodなしでchmodを実行する方法は?

/usr/bin/chmodなしでchmodを実行する方法は?

今日、Unixのトレーナーは、ルートパスワードが学生に漏洩し、そのうちの1人が/usr/bin/chmod自分の実行権限を削除したという話を聞きました。この場合、回復しchmodて再実行可能にする方法は?外部ソースからインポートまたは再コンパイルする方が良い選択ではないと仮定すると、自分で復元できる巧妙なハッキングはありますかchmod

これはずっと前に起こり、現在の問題に対する解決策を探しているのではなく、Unixがそのような問題を解決するためにどのような解決策を提供したのか疑問に思います。

答え1

実行したいコマンドを渡すことで、ローダーを直接実行できます。

/lib/ld-linux.so /bin/chmod +x /bin/chmod

ローダーのパスは異なる場合があります。 64ビットシステムでは、chmodコンパイルされた方法に応じて正しいバージョンを選択する必要があります。/lib64/ld-linux-x86-64.so.2

答え2

このユーティリティはシステムコールchmodに依存します(参考資料を参照)。したがって、数行のCまたはラッパーを含む他の言語(ほとんど)を使用してこれを行うことができます。 CコンパイラとPerlインタプリタを持たない* nixシステムはほとんどありません。ほとんどのLinuxディストリビューションでは、後者が機能する必要があります。chmod()man 2 chmod

perl -e 'chmod 0755, "foobar.file"'

答え3

一部のシステムにはbusyboxこの機能がインストールされており、この場合は次のことを実行できます。

busybox chmod +x /bin/chmod

あなたがハッキングを要求したので、他のハッキングしか考えられません。

mv /bin/chmod /bin/chmod.orig
cp -a /bin/chown /bin/chmod

これで実行ファイルができましたが、実際には(つまり別のバイナリ)ファイル/bin/chmodです。chown今やるべきことは、元のバイナリで上書きするだけです。

dd if=/bin/chmod.orig of=/bin/chmod

+xフラグを保持するので、そのファイルに対して他のファイルから+xを盗むことができます。

もちろん、すべての代替バイナリ(ローダー、Perl、Python、gccなどを含む)がchmod -xedの場合、回復システムでそれを変更することが唯一のオプションかもしれません。

答え4

一番最初に私の心に捧げていくのは、

  • 別のソース(Webブック、CDなど)で実行し、そのソースでchmodを使用して権限を設定します。
  • 権限を変更する小さなCプログラムを作成します。
  • 権限を変更するには、Perlスクリプト(Ruby、PHP、Pythonなど)を作成します。

/usr/bin/chmod権限を変更するためにシステムコールを実行すると、さまざまな方法でそのシステムに自分自身を呼び出すことができます。

関連情報