Programación orientada al retorno sin int 0x80

7

Tengo un programa con un desbordamiento de búfer basado en la pila. Ejecuta PIE con ASLR y DEP, sin embargo, hay una sección de código ejecutable que se encuentra en una ubicación fija.

Sin embargo, esta región no contiene un int 0x80; gadget de ret Puedo controlar eax, ebx, ecx y edx. ¿Cómo puedo ejecutar syscalls arbitrarios para, por ejemplo, llamar a mprotect y leer en shellcode? Parece que cada syscall requiere un int 0x80, y no estoy seguro de cómo omitir esto.

Hay un gadget int 0x80 en el código relevante, sin embargo, sigue una instrucción jmp.

Por lo tanto, estoy buscando una manera de hacer syscalls sin 0x80, o una forma de hacer dos syscalls a la vez (para establecer protecciones de memoria, leer y ejecutar shellcode)

    
pregunta robertkin 21.03.2015 - 17:12
fuente

1 respuesta

2

int 0x80 es una forma muy antigua de hacer llamadas al sistema. No estoy seguro de si es compatible incluso más. Es posible que desee buscar instrucciones syscall / systenter en la imagen. Por supuesto, esto depende de qué hardware subyacente y sistema operativo esté utilizando. Si está utilizando un emulador de vm de hardware / hardware y un software más reciente que desde 1995, probablemente debería buscar instrucciones de syscall / sysenter.

Se utilizan Syscall / Sysenter (uno u otro se usa dependiendo de si el ejecutable es de 32 bits o 64 bits) para realizar llamadas al sistema. La configuración de registro para usar syscall e int 0x80 debe ser la misma. Debes poder encontrar syscall / sysenter fácilmente. la mayoría de las aplicaciones deben tener vdso.so asignado en su espacio de direcciones. Tal vez pueda utilizar este conocimiento para encontrar el gadget syscall ret. Consulte

enlace

no puedes hacer dos syscalls en el mismo núcleo al mismo tiempo.

    
respondido por el Raghu 23.03.2015 - 00:57
fuente

Lea otras preguntas en las etiquetas