LD_PRELOAD
関数のオーバーライドによるIFSの悪用と権限昇格について読んでいます。これらは 2 つの完全に異なる質問ですが、一緒に投稿することにしました。問題がないことを願っています。これらは両方とも非常に古いものですが、権限のエスカレーションにまだ使用できると言われているので、ぜひ調べてみたいと思います. しかし、私はいくつかの問題に遭遇しました。
それでは、SUID ファイル /tmp/suid を作成することから始めましょう。
#include <unistd.h>
int main() {
system("/bin/date");
}
これは を呼び出します/bin/date
。内部のフィールドセパレーターを変更し、ファイルをだまして、現在保持している特権で別の何かを実行させることができるという考えです。これは、 binという名前の新しいファイルに、攻撃者がカスタムの場所に配置した悪意のあるコードを含めることによって実行できます (または実行できますか?) 。次に、$PATH
変数を変更して、悪意のある偽のバイナリが配置されているカスタム パス内で場所が最初に検索されるようにします。次に、内部フィールドセパレーターを「/」に変更すると/bin/date
、プログラムを実行する代わりに/tmp/fakepath/bin
引数 date を使用して実行され、特権エスカレーションがトリガーされる可能性があります。
dankalia.com に記載されている方法を試してみると、失敗します。/bin/date
代わりに実行されます。コンソールに入力するだけでbin date
、悪意のあるバイナリが開始されますが、.xml を介して呼び出された場合は開始されません/tmp/suid
。
脆弱性にはパッチが適用されており、単に IFS 変数を無視しているだけだと思っていましたが、stackoverflow の投稿に興味を持ちました。( C: IFS System() の脆弱性)。これが機能するかどうか、および私が間違っていることを誰かが確認できますか? ありがとう。
についてはLD_PRELOAD
、かなりシンプルにします。
define _GNU_SOURCE
#include <stdio.h>
int puts(const char *str) {
printf("lel");
}
次のコマンド ラインを使用してコンパイルします。
gcc –Wall –fPIC –shared –o puts.so puts.c –ldl
puts
次に、プリロードのトリックで関数をオーバーライドします。
LD_PRELOAD=./puts.so ./vuln_program_that_uses_puts
これは非常にうまく機能します。ただし、SUID ファイルを処理する場合や特権昇格について話している場合、これは起こりません。LD_PRELOAD
SUID ファイルでは適切に機能しませんが、それには正当な理由があります。「できるけど難しい」とよく言われます。アイデア?
事前に感謝し、長い質問をして申し訳ありません.