Usando (cat $ file; cat) para ejecutar un exploit BOF simple

2

Me estoy familiarizando con Desbordamientos de búfer (BOF) y estaba replicando un ataque simple descrito por Techorganic . Crean un programa en C simple llamado " classic ", que contiene una vulnerabilidad BOF obvia (cuando lee hasta 400 bytes en un búfer de 80 bytes de STDIN), y luego crea el búfer adecuado para explotarlo, y guárdelo en " in.txt ". A pesar de que sigue su curso sin problemas, una vez que se realizan todos los preparativos, ejecutan el programa con el siguiente comando:

user@pc$ (cat in.txt ; cat) | ./classic

Mi primer pensamiento fue "Holy Moly, ¿qué está pasando allí?", la idea original era simple, ejecuta classic e ingresa el búfer, mi intención era ejecutar como:

user@pc$ ./classic < in.txt

Al igual que cualquier otro mortal haría. Pero para mi sorpresa, su forma funciona, y la mía no.

La conclusión es: ¿qué hace la primera sintaxis y cuál es la diferencia clave que hizo que su solución funcionara y no la mía, a pesar de que son semánticamente iguales (o similares, al parecer)?

    
pregunta Fernando Pérez 06.04.2017 - 16:18
fuente

1 respuesta

0

El primer comando cat alimenta la entrada desde in.txt al estándar del programa. El segundo comando cat simplemente lee desde el stdin actual y lo alimenta al programa, proporcionando así al que ejecuta esta línea de comandos una forma de enviar sus propios datos desde el terminal al programa y de esta manera probablemente a algunos /bin/sh o similar ejecutado desde este programa.

Al contrario de esto, usar program < in.txt solo alimenta el in.txt al stdin del programa y después de que este stdin del programa se cierre. Esto significa que ninguna entrada del usuario desde el terminal se alimenta al programa y al shell que se ejecuta dentro de él.

    
respondido por el Steffen Ullrich 06.04.2017 - 16:24
fuente

Lea otras preguntas en las etiquetas