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
可能なすべてのコマンドを取得できるようにすることです。