Actualmente estoy leyendo el libro El manual de Shellcoder de Wiley, y tengo un problema muy grave al implementar uno de los códigos de shell que generan shell del capítulo 3. El código es el siguiente:
Section .text
global _start
_start:
jmp short GotoCall
shellcode:
pop esi
xor eax, eax
mov byte [esi + 7], al
lea ebx, [esi]
mov long [esi + 8], ebx
mov long [esi + 12], eax
mov byte al, 0x0b
mov ebx, esi
lea ecx, [esi + 8]
lea edx, [esi + 12]
int 0x80
GotoCall:
Call shellcode
db ‘/bin/shJAAAAKKKK'
Para compilar (en una máquina de 32 bits), uso:
%código%
Pero cuando ejecuto el binario obtengo un segfault en shellcode + 3. Pasé por el ejecutable en IDA con poca suerte. Después de ejecutar
$nasm -f elf32 -o shellcode.o shellcode.asm
$ld -o shellcode shellcode.o
, el programa genera una infracción de segmentación de excepción con el código de error 11. Cambio el EIP para no ejecutar la instrucción y continúo, pero tan pronto como mov byte [esp+7],al
I nuevamente obtenga un error de seguridad.
- ¿Por qué el programa está fallando? Este es un texto ASCII plano, por lo que el desplazamiento debe ser correcto.
- Intenté usar otros registros también pero con poca suerte.
- Probé el exploit anterior en Fedora, Kali 2.0 y Ubuntu 14 y algunas variantes de Linux no tan populares (todas de 32 bits). Todos lanzan el mismo error. Deshabilité ASLR en todos ellos.
Me encantaría evitar esto. Gracias de antemano.