Envío de datos binarios a gets()

Envío de datos binarios a gets()

Tengo un programa víctima (con una vulnerabilidad de desbordamiento del búfer): utiliza get() para escribir en un búfer de tamaño fijo.

Supongamos que pongo shellcode en un archivo SC. entonces corro

$ ./victim < SC
Input your data: 
$

La razón por la que el shellcode no parece funcionar es la siguiente: SC es redirigido a la víctima, inyecta el shellcode, hace que se genere un shell, pero el shell generado descubre que su entrada estándar está cerrada, por lo que sale inmediatamente.

Intenté expectla inyección, pero expectlas bombas aparecen después de que se genera el proyectil.

Parece que la única forma práctica es colocar el código de shell en el búfer de pegado de mi mouse para poder inyectarlo mientras conservo el teclado como dispositivo de entrada. Pero no tengo idea de cómo introducir datos binarios en mi búfer de pegado.

¿Alguna idea sobre cómo solucionar este problema?

Respuesta1

Una solución a este problema (que alguien encontró en el mismo contexto) está aquí: https://stackoverflow.com/questions/8509045/execve-bin-sh-0-0-in-a-pipe

Respuesta2

Podrías hacerlo con un script simple en el que imprimas tus caracteres especiales.

Por ejemplo, en Perl, puedes imprimir cualquier carácter especificando su código hexadecimal. Por ejemplo: perl -e 'print "\x54\x0A"'imprime una 'T' seguida de una nueva línea.

Luego podrá copiar el texto impreso, incluso si no es visible. Eso sí, tu terminal debe estar en modo raw.

información relacionada