猫の助けを借りてファイルの権限を変更する


55
root@system:~# less myfile
-bash: /bin/less: Input/output error

ルートファイルシステムが死んでいます。しかし、私の猫はまだ生きています(私の記憶の中で):

root@system:~# cat > /tmp/somefile
C^d
root@system:~#

彼はちょっと寂しいけど、彼の友達は皆なくなった。

root@system:~# mount
-bash: /bin/mount: Input/output error
root@system:~# dmesg
-bash: /bin/dmesg: Input/output error
root@system:~# less
-bash: /bin/less: Input/output error
root@system:~# chmod
-bash: /bin/chmod: Input/output error

システムはまだ実行中であり、その目的を果たしています。これに対する唯一の正気な対応は、システムをダウンさせてルートドライブを交換することです。残念ながら、これには多くの時間とお金がかかるため、選択肢ではありません。また、それは私の猫を殺し、それは私を悲しませます。

私は彼に彼のいつもの友人をドナーから連れてくることを考えました。sshがそれをロードして行を切断しようとする場合に備えて、私はそれらをscpしようとはしません(バイナリはとにかくなくなっています)。これは私の猫のいとこの仕事のように聞こえます:

root@system:~# netcat -l 1234 > /tmp/less
-bash: netcat: command not found

あいにく彼はもういなくなった。

今、私は彼を復活させる儀式を実行するために私の猫をだまそうとすることができます:

cat > netcat < /dev/tcp/localhost/9999

そして、その種の作業。彼はほとんど生きている:

root@system:/tmp# /tmp/netcat
-bash: /tmp/netcat: Permission denied

彼はただ人生の小さな火花を必要としています。+x私が現時点で暗唱できない小さな魔法の呪文。

猫の友達を連れ戻すのを手伝ってもらえますか?


3
/lib/ld-linux.so.2 ./netcat(またはシステムの同等の)実行して何かを実行できますか?
マイケル・ホーマー

4
また、これはどのオペレーティングシステムですか?vfatまたはNTFSファイルシステムがマウントされていますか?ネットワークファイルシステム?内容を消去できるパーティションは?そこにある任意の実行権限を持つアクセス可能なファイルは?
マイケルホーマー

3
「また、それは私の猫を殺すでしょう、そしてそれは私を悲しませます。」–私はいつも「これの制作中に子供は傷つけられなかった」ということわざはただのことわざだと思っていましたが、まあ…
rugk

7
私は完全にすべてのこれらの猫のアナロジーのためにこれをupvoteしなければならなかった...😂
rugk

2
かわいそうな猫、私は彼が大丈夫であることを願っています:(

回答:


37

いくつかの可能性がありますが、すべて現在の状況の正確なパラメーターに依存します。該当する場合、以下の例ではLinuxを想定していますが、ほとんどの場合、他のプラットフォームにも同様の機能が存在します。

  • ダイナミックローダーを使用して実行可能ファイルを実行できる場合があります。cat動的にリンクされていると仮定すると、プラットフォームの同等のもの/lib/ld-linux.so.2もメモリ内にある可能性が高いため、バイナリの実行に使用できます。

    $ /lib64/ld-linux-x86-64.so.2 ./chmod
    chmod: missing operand
    

    これらが複数ある可能性があり(32ビットと64ビットの可能性が高い)、複数のコピーが使用可能であるか、解決が必要なシンボリックリンクが存在する可能性があります。それらのいずれかが動作する可能性があります。

  • マウントされたvfatまたはNTFSファイルシステム、またはすべてのファイルを777として扱う別のシステムがある場合、そこに実行可能ファイルを作成できます。

    $ cat > /mnt/windows/chmod < /dev/tcp/localhost/9999
  • マウントされたネットワークファイルシステムがある場合、ローカルで書き込み可能ではない場合でも、リモートシステム上にファイルを作成し、それらを通常どおり使用できます。
  • まだほとんど動作しているドライブに、内容を気にしないマウントされたパーティションがある場合、必要な実行可能ファイルを含む同じファイルシステムタイプの新しいイメージで内容を置き換えることができます- catこれで問題ないはずです人々が通常使用する役割ddであり、ネットワークを介して画像を提供できます。

    $ cat > /dev/sdb1 < ...

    これはもっともらしいですが、そのパーティションのメモリに何が残っているかによっては動作しない場所がたくさんあります。

  • 書き込み可能なファイルシステムで実行許可を持つアクセス可能なファイルがある場合はそのファイルにアクセスしてcat >、選択したバイナリで内容を置き換えることができます。

    $ cat > ~/test.py < ...
  • Bashはまだ実行中なので、chmodを公開するプロセスにBashプラグインを動的にロードできます。特に、Bashへの外部関数インターフェースを提供するをインストールしてロードするctypes.shことができますdlcall chmod ./netcat 511
  • foo.so構築したダイナミックライブラリファイルを持ち込み、catそれを代わりにロードして、LD_PRELOAD任意のコードを実行できます。

    $ LD_PRELOAD=./hack.so cat /dev/null

    たとえば、傍受する場合open

    int open(const char *path, int flags, ...) {
        chmod(path, 0755);
        return -1;
    }
    

    必要なことは何でもできます。

私の提案は、静的にリンクされたbusybox実行可能ファイルを最初のアイテム(または実際には唯一のアイテム)として持ち込むことです。


3
「静的リンクbusybox」について:sashこの種のユースケース用に特別に設計されており、ピンチでより簡単に利用できる場合があることに注意してください(たとえば、事前にインストールして、システムがまたは、代わりにペットを捨てて代わりにたくさんの牛を買うことができると思います)。
ケビン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.