Domanda Privilege escalation Vulnversity TryHackMe

TheWorm91

Helper
31 Marzo 2022
428
49
204
317
Sto facendo questa esercitazione su TryHackMe: https://tryhackme.com/room/vulnversity
Non ho chiaro l'ultimo passaggio (privilege escalation) dopo aver caricato la reverse shell per prendere il controllo del web server.
Sono riuscito a ottenere il flag finale seguendo questo walkthrough ma non ho ben capito alcuni concetti dei passaggi.

find / -user root -perm -4000 -exec ls -ldb {} \;
Tramite questo comando trovo tutti i file con il bit SUID settato, tra cui /bin/systemctl dal quale procedere con l'escalation.
Adesso arrivo al mio dubbio, cos'è precisamente questo bit SUID? Ho sempre visto i permessi dei file rwx qui invece sono rws cosa vuole significare nello specifico?

Questo codice (che non ho ben chiaro al 100%) mi fa ottenere il flag che viene copiato in /tmp/output/ :
TF=$(mktemp).service echo '[Service] Type=oneshot ExecStart=/bin/sh -c "cat /root/root.txt > /tmp/output" [Install] WantedBy=multi-user.target' > $TF /bin/systemctl link $TF /bin/systemctl enable --now $TF
Riesco a ottenere il flag solo facendo cat /tmp/output/ ma non posso accedere a root/root.txt in quanto non risulto user root (facendo whoami ritorna www-data)

grazie per le risposte
 
Ultima modifica:
Adesso arrivo al mio dubbio, cos'è precisamente questo bit SUID? Ho sempre visto i permessi dei file rwx qui invece sono rws cosa vuole significare nello specifico?
Il SUID bit è un particolare privilegio di esecuzione che imposta l'EID (effective id) a quello dell'owner del binario anzichè a quello di chi lo esegue.
Quando tu esegui un programma, in generale il contesto d'esecuzione è quello dell'utente che lo sta eseguendo.
Se quel programma invece ha il SUID abilitato, il contesto d'esecuzione cambia e quel particolare programma, una volta eseguito, girerà con i privilegi del suo owner.

Ciò significa che se un utente esegue un programma il cui owner è root, se il suid è abilitato sul quel programma, sta eseguendo il processo come se fosse root.
Non so se sono stato chiaro, ti linko la spiegazione di Wikipedia che forse è più chiara:

Lo stesso discorso vale anche per il SGID, che funziona allo stesso modo del SUID ma anzichè tenere in considerazione l'owner del file, tiene in considerazione il gruppo a cui il file è associato
 
Quanto tu esegui un programma, il generale il contesto d'esecuzione è quello dell'utente che lo sta eseguendo.
Se quel programma invece ha il SUID abilitato, il contesto d'esecuzione cambia e quel particolare programma, una volta eseguito, girerà con i privilegi del suo owner.

Ciò significa che se un utente esegue un programma il cui owner è root, se il suid è abilitato sul quel programma, sta eseguendo il processo come se fosse root,.
Questo adesso mi è chiaro, era proprio quello che mi mancava, grazie.
Non riesco comunque a diventare root e non so cosa mi sfugge.
La guida mi dice:
If you do want to get access as a root, change the command that will be executed to "chmod +s /bin/bash" After this execute "bash -p" in the terminal. Use "whoami" to check if you are root. If so, have fun.
Peccato che se faccio "chmod +s /bin/bash" mi da permission denied , non mi fa modificare i permessi e di conseguenza non riesco a diventare root.
 
Questo adesso mi è chiaro, era proprio quello che mi mancava, grazie.
Non riesco comunque a diventare root e non so cosa mi sfugge.
La guida mi dice:
If you do want to get access as a root, change the command that will be executed to "chmod +s /bin/bash" After this execute "bash -p" in the terminal. Use "whoami" to check if you are root. If so, have fun.
Peccato che se faccio "chmod +s /bin/bash" mi da permission denied , non mi fa modificare i permessi e di conseguenza non riesco a diventare root.
mmm non ricordo bene il motivo, ma impostare /bin/bash con il setuid abilitato non funziona più nelle nuove architetture (mi pare che di default adesso l'effective uid venga droppato). Per arginare il problema visto che comunque puoi eseguire codice come utente root potresti o iniettarti delle chiavi SSH e quindi accedere così, o aggiungere un utente al gruppo sudoers oppure ancora aggiungere un nuovo utente con privilegi di root dentro /etc/passwd o ancora compilarti un binario che spawni una shell ma che mantenga il setuid
C:
// gcc -o /tmp/rootshell /tmp/rootshell.c
// chmod u+s /tmp/rootshell
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
execlp("/bin/id", "id", NULL);
}