Shellcode segfaulting

0

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.

  1. ¿Por qué el programa está fallando? Este es un texto ASCII plano, por lo que el desplazamiento debe ser correcto.
  2. Intenté usar otros registros también pero con poca suerte.
  3. 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.

    
pregunta Vinay 28.11.2016 - 10:31
fuente

1 respuesta

2

El código de shell es auto-modificable y, por lo tanto, se supone que reside en la pila (o en otra región de escritura). Las siguientes instrucciones

mov byte [esi + 7], al
mov long [esi + 8], ebx
mov long [esi + 12], eax

están sobrescribiendo el JAAAAKKKK bytes al final, que reside en el segmento .text. Como el segmento .text no se puede escribir, su programa está lanzando un Segfault.

    
respondido por el rhodeo 28.11.2016 - 14:53
fuente

Lea otras preguntas en las etiquetas