ld.so privesc exploit example
環境の準備
以下のセクションでは、環境を準備するために使用するファイルのコードを見つけることができます
同じフォルダ内にこれらのファイルを作成してください
ライブラリをコンパイルします:
gcc -shared -o libcustom.so -fPIC libcustom.c
libcustom.so
を/usr/lib
にコピーします:sudo cp libcustom.so /usr/lib
(root権限)実行ファイルをコンパイルします:
gcc sharedvuln.c -o sharedvuln -lcustom
環境をチェック
libcustom.so_が/usr/lib_からロードされていることと、バイナリを実行できることを確認してください。
エクスプロイト
このシナリオでは、誰かが_/etc/ld.so.conf/_ 内のファイルに脆弱なエントリを作成したと仮定します。
脆弱なフォルダは /home/ubuntu/lib です(書き込み可能なアクセス権があります)。 以下のコードをダウンロードしてコンパイル してください。そのパス内で:
作成した悪意のある libcustom ライブラリが誤設定されたパス内にある ため、再起動を待つか、root ユーザーが ldconfig
を実行するのを待つ必要があります(sudo としてこのバイナリを実行できる場合や、suid ビットが設定されている場合は、自分で実行できます)。
これが行われたら、sharevuln
実行ファイルが libcustom.so
ライブラリをどこからロードしているかを再確認してください:
以下のように、/home/ubuntu/lib
からロードしています。そして、ユーザーが実行すると、シェルが実行されます:
この例では権限昇格は行っていませんが、実行されるコマンドを変更し、rootまたは他の特権ユーザーが脆弱なバイナリを実行するのを待つことで、権限を昇格させることができます。
その他の誤設定 - 同じ脆弱性
前の例では、管理者が/etc/ld.so.conf.d/
内の設定ファイルに非特権フォルダを設定するという誤設定を行いました。
しかし、/etc/ld.so.conf.d
内の設定ファイルに書き込み権限がある場合、/etc/ld.so.conf.d
フォルダや/etc/ld.so.conf
ファイルに同じ脆弱性を設定し、それを利用することができます。
Exploit 2
ldconfig
に対してsudo権限を持っているとします。
ldconfig
にどこからconfファイルを読み込むかを指示できるので、任意のフォルダをldconfig
に読み込ませることを利用できます。
では、"/tmp"を読み込むために必要なファイルとフォルダを作成しましょう。
前のエクスプロイトで示されたように、/tmp
内に悪意のあるライブラリを作成します。
そして最後に、パスをロードして、バイナリがどこからライブラリをロードしているかを確認しましょう:
ldconfig
に対するsudo権限を持っている場合、同じ脆弱性を悪用できることがわかります。
suidビットが設定されているldconfig
を悪用する信頼性の高い方法は見つかりませんでした。次のエラーが表示されます:/sbin/ldconfig.real: 一時キャッシュファイル /etc/ld.so.cache~ を作成できません: 許可が拒否されました
参考文献
HTBのDab machine
Last updated