今日、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
権限を変更するためにシステムコールを実行すると、さまざまな方法でそのシステムに自分自身を呼び出すことができます。