Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
userland-exec — Userland exec PoC to be used as attack vector technique | Kitploit
Herramientas/GitHubGitHub/hardenedlinux/userland-exec
ExploitationIDS/IPS EvasionPost-ExploitationBinary AnalysisRed Teaming
GitHubhardenedlinux/userland-exec

userland-exec

Userland exec PoC to be used as attack vector technique

Ver Repositorio
14614hace 4 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Userland Exec

Userland exec reemplaza la imagen del proceso existente dentro del espacio de direcciones actual por una nueva. Imita el comportamiento de la llamada al sistema execve, pero las estructuras del proceso que describen la imagen del proceso permanecen sin cambios. En otras palabras, el nombre del proceso reportado por las utilidades del sistema conservará el nombre del proceso anterior.

Esta técnica se puede utilizar para lograr sigilo después de obtener ejecución arbitraria de código. También se puede utilizar para ejecutar binarios almacenados en particiones noexec.

El primer userland exec fue creado por grugq. Este repositorio está fuertemente inspirado en la librería Mettle de Rapid7, que incluye una descripción completa en su blog de la técnica.

Inicialmente, gran parte del código de este repositorio imitaba a la librería Mettle, pero desde entonces se ha extendido para incluir complejidad adicional y así evadir la verificación de SELinux.

Evasión de la verificación de SELinux

SELinux incluye la verificación execmem, que garantiza:

  • Una página que alguna vez fue escribible no puede convertirse en ejecutable (es decir, cambiar PROT_WRITE a PROT_EXEC usando mprotect está prohibido).
  • Ninguna página puede ser escribible y ejecutable al mismo tiempo (política W ^ X).

Evadiendo mprotect

Para evadir mprotect, es necesario crear un archivo temporal. Esto se puede lograr usando memfd_create combinado con munmap y mmap, evitando así por completo la llamada al sistema mprotect.

Evadiendo W ^ X

El ejemplo elf_debugger.c demuestra que cualquier ELF contiene una región PT_LOAD que es a la vez ejecutable y escribible. Esta región es necesaria para cargar la información del programa durante la ejecución. Para solucionar esto, se creó la implementación bypass_wx.c. Este diseño:

  • Marca una página como ejecutable.
  • Ante intentos de escritura en esta página, activa una señal SIGSEGV.
  • Intercepta la señal y cambia dinámicamente la protección de la página de PROT_EXEC a PROT_WRITE.

Pruebas

Compilación y uso

Esta sección describe cómo compilar para máquinas Android y x86. Asegúrate de tener libelf instalado antes de continuar.

x86

Compilación

root@kitploit:~
mkdir build && cd build
cmake ..
make

Uso

root@kitploit:~
desktop % strace ./uexec hello others args here 2>&1 | grep exec
execve("./uexec", ["./uexec", "hello", "others", "args", "here"], 0x7ffc34ec02f0 /* 54 vars */) = 0
desktop % strace bash -c ./hello 2>&1 | grep exec
execve("/usr/bin/bash", ["bash", "-c", "./hello"], 0x7ffebecc3130 /* 54 vars */) = 0
newfstatat(AT_FDCWD, "/desktop/userland-exec/build", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
newfstatat(AT_FDCWD, "/desktop/userland-exec", {st_mode=S_IFDIR|0755, st_size=4096, ...}, 0) = 0
execve("./hello", ["./hello"], 0x5fb22658e2a0 /* 54 vars */) = 0

Compilación de depuración

root@kitploit:~
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make

Android

Compilación

root@kitploit:~
mkdir build && cd build
cmake -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \
      -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-30 ..
make

Uso

root@kitploit:~
desktop % adb push uexec hello /data/local/tmp
uexec: 1 file pushed, 0 skipped. 113.9 MB/s (22912 bytes in 0.000s)
hello: 1 file pushed, 0 skipped. 184.9 MB/s (6936 bytes in 0.000s)
2 files pushed, 0 skipped. 0.3 MB/s (29848 bytes in 0.090s)

desktop % adb shell
dm3q:/ $ cd /data/local/tmp
dm3q:/data/local/tmp $ chmod +x uexec
dm3q:/data/local/tmp $ ./hello
Hello World
dm3q:/data/local/tmp $ ./uexec hello
Hello World
dm3q:/data/local/tmp $

Solución de problemas

En CentOS, la librería libc puede presentar un comportamiento inusual. Para solucionar este problema, se ha proporcionado un sencillo programa "Hello, World" escrito en ensamblador, hello_nolibc.s. Este ejemplo junto con el cmake demuestra cómo compilar y ejecutar un programa sin enlazar con libc.

Si tu CMAKE es superior a 4.0, puedes añadir en la compilación -DCMAKE_POLICY_VERSION_MINIMUM=3.5.

Licencia

Este repositorio utiliza la Licencia GPL-3.0.

Descargar herramienta
SOArquitecturaResultado
Ubuntu 24.04x86_64Éxito
Archlinux 6.12.4x86_64Éxito
CentOSx86_64Éxito
Raspberry Pi OSarm64Éxito
S23 Android 14arm64Éxito