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.