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

猫の助けを借りてファイル権限を変更する
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がロードを試みて行を切り捨てる場合に備えて作成してみるのが怖いです(とにかくバイナリは消えました)。これは私の猫のいとこの仕事のようです。

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小さな魔法。

私の猫の友人を連れてくるのを手伝ってもらえますか?

答え1

現在の状況の特定のパラメータに応じて多くの可能性があります。以下の例では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プラグインを動的にロードできます。具体的には、次のことができます。インストールとロードctypes.sh、Bashに外部機能インターフェイスを提供すること、そして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可能なすべてのコマンドを取得できるようにすることです。

関連情報