El programa sale después de ejecutar la instrucción int 0x80 cuando se ejecuta shellcode

3

En la escuela me asignaron una tarea para realizar un desbordamiento de búfer, que ejecutaría un código de shell y abriría un nuevo shell. Después de un poco de juguetear, el desbordamiento del búfer tuvo éxito, y cuando ejecuté el exploit en GDB dice que el programa está ejecutando / bin / dash, y luego el programa que estaba explotando salió normalmente, dejándome sin shell.

Cuando se ejecuta el programa de prueba para el exploit, se ejecuta bien y me da un shell como se supone. Cuando trato de usar el Shellcode para explotar realmente otro programa que funciona bien, no tengo fallas, pero tampoco genera una nueva shell. He intentado modificar el código shell para que ejecute los archivos que he compilado yo mismo, aunque solo lo he probado con algunos sencillos que imprimen el nombre de host, y esto funciona bien. Si agregué system("/bin/sh"); a un archivo de este tipo, todavía no genera una shell como deseo.

Cuando paso por el Shellcode con GDB, veo que el programa vulnerable que estoy explotando se cierra justo después de ejecutar la instrucción int 0x80 . Mi pregunta aquí es doble: ¿Por qué sale aquí, y qué puedo hacer para evitarlo, lo que genera un nuevo shell que puedo usar?

Aquí está el código de shell que utilizo:

"\x6a\x0b" // push byte +0xb
"\x58" // pop eax
"\x99" // cdq
"\x52" // push edx
\x68\x2f\x2f\x73\x68" // push dword 0x68732f2f (hs//)
"\x90" //nop
"\x90" //nop
"\x68\x2f\x62\x69\x6e" // push dword 0x6e69922f (nib/)
"\x89\xe3" // mov ebx, esp
"\x31\xc9" // xor ecx, ecx
"\xcd\x80" // int 0x80 
"\x90" //nop
"\x90" //nop
"\x90" //nop
"\xeb\xfb"; //jmp -4

El código de shell que uso se puede encontrar aquí , por lo que el crédito para esto va a ipv.

    
pregunta Psyberion 28.11.2014 - 17:01
fuente

3 respuestas

6

Si está ejecutando esto desde la línea de comandos, y está usando el < para alimentar el shellcode desde un archivo, el shell terminará inmediatamente cuando llegue al final de la entrada. Si desea que permanezca en el teclado interactivo, haga lo siguiente:

  

cat shellcode.hex - | ./vulnerable_program

El - es estándar (entrada de teclado en este caso), por lo que puede escribir lo que desee después de eso.

    
respondido por el lintile 14.04.2016 - 21:11
fuente
1

Dado que / bin / sh es en realidad otro proceso, gdb no puede depurar ese proceso ramificado. Pero no suena como que realmente necesitas depurar / bin / sh ya que solo estás ejecutando shellcode. Ver que su exploit puede hacer que comience otro proceso debería indicar que su exploit tuvo éxito. También puede consultar esta publicación: enlace

    
respondido por el user1786575 04.12.2014 - 16:26
fuente
1

Utilice el código de shell que vuelve a abrir las entradas. Por ejemplo, esta versión modificada de 58 bytes del código de Marco Ivaldi hace este truco:

"\x83\xc4\x10\x31\xc0\x31\xdb\xb0\x06\xcd\x80\x53\x68/tty\x68/dev\x89\xe3\x31\xc9\x66\xb9\x12\x27\xb0\x05\xcd\x80\x31\xc0\x50\x68//sh\x68/bin\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"

Puede encontrar más información aquí .

    
respondido por el Aralox 30.03.2017 - 07:54
fuente

Lea otras preguntas en las etiquetas