Me gustaría probar algunos códigos de shell y quiero deshabilitar las protecciones de Linux.
Sé que podría compilar usando banderas, pero sé que existe otra forma de deshabilitar estas protecciones en general, simplemente no puedo recordar. ¿Me puedes ayudar?
Para ampliar lo que ha dicho vonbrand (correctamente, +1), la protección de la pila de Linux tiene dos partes.
Apilar canarios
Los canarios de pila son la característica forzada por el compilador a la que se refiere vonbrand. Estos no se pueden deshabilitar sin una recompilación.
Para demostrarte esto a ti mismo y ver cómo funcionan, toma el siguiente código:
Ahora compile that (
gcc -fstack-protector -masm=intel -S test.c
) en algo gnu, ya que estaría encantado de ensamblar y leer la salida. El punto importante es que al salir de lamybadfunction
función, hay este pequeño fragmento de código:Como puedes adivinar, eso es tomar una cookie de pila
[ebp-12]
y compararla con el valor engs:20
. No coincide? Luego llama a una función__stack_chk_fail
en glibc que mata su programa allí mismo.Hay formas de evitar esto en términos de escribir exploits, pero la forma más fácil en términos de construir un caso de prueba de shellcode es compilar su programa
-fno-stack-protector
.Páginas no ejecutables
Hay algunas otras consideraciones sobre los sistemas Linux modernos. Si toma el código auxiliar de prueba de shellcode habitual:
GCC / Linux moderno asignará la
.rodata
sección del archivo PE de solo lectura sin permisos de ejecución. Debe desactivarlo, lo que se puede hacer utilizando el ejemplo de código de esta publicación de blog . Idea básica: se usamprotect
para agregar los permisos que desea a las páginas en las que residen los datos del shellcode.Pilas no ejecutables
Si va a probar un escenario de explotación tradicional, por ejemplo, mi código incorrecto anterior, con su código de shell, entonces también debe asegurarse de que la pila sea ejecutable para los casos simples. El formato de archivo PE contiene un campo para determinar si la pila es ejecutable; puede consultar y controlar esto con execstack . Para habilitar una pila ejecutable, ejecute
Esto se puede hacer en programas arbitrarios sin necesidad de una recompilación, pero no deshabilitará automáticamente los canarios de pila, ya que se compilan en la compilación.
Bonificación adicional: aslr:
Para desactivarlo,
echo 0 > /proc/sys/kernel/randomize_va_space
.¿Acabas de decirle a alguien cómo explotar mi precioso pingüino?
No. Cualquier exploit debe funcionar alrededor de los canarios de stack (muy poco trivial) y encontrar un programa con
execstack
set, o establecerlo (lo que significa que ya puede ejecutar comandos arbitrarios de todos modos) o usar técnicas más difíciles, como return to libc / return programación orientadafuente
Puede deshabilitar algunas protecciones (detección de aplastamiento de la pila y hacer que la pila sea ejecutable) con estas opciones.
También puede desactivar ASLR (aleatorización del diseño del espacio de direcciones) con Bash con el comando:
fuente