¿Cómo explotar este fragmento de código? (cadena de formato en printf?) [cerrado]

2

Entonces, este fragmento de código es vulnerable a la cadena de formato vuln (creo) en la función printf() . Lee un archivo en /tmp/file , así que he intentado escribir diferentes modificadores / cadenas en ese archivo y ver qué pasa pero no tengo nada interesante. Cuando escribo unas pocas líneas que contienen %x %x %x %x %s puedo ver que a veces el salto de línea no está allí y en realidad obtengo una línea que contiene 2 líneas.

También puedo insertar un b AAA al principio de la línea, por ejemplo, si hago c y lo mismo para %code% y %code% y luego copio / pego esto unas cuantas veces, el resultado es:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

int main(int arc, char **argv)
{

    int fd;
    fd = open("/tmp/file",O_RDONLY);

    if (fd < 0)
    {
        printf("Cannot open file\n");
        exit(1);
    }

    int nb_lus;
    char line[20];
    while ((nb_lus = read(fd,line,20)) > 0)
    {
        line[nb_lus-1] = '
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

int main(int arc, char **argv)
{

    int fd;
    fd = open("/tmp/file",O_RDONLY);

    if (fd < 0)
    {
        printf("Cannot open file\n");
        exit(1);
    }

    int nb_lus;
    char line[20];
    while ((nb_lus = read(fd,line,20)) > 0)
    {
        line[nb_lus-1] = '%pre%';
        printf("%s",line);
    }

    close(fd);
    system("/bin/rm /tmp/file");
    return 0;

}
AAAA %pre% bbbbb %pre%cccccc%pre% AAAA
'; printf("%s",line); } close(fd); system("/bin/rm /tmp/file"); return 0; }
AAAA %pre% bbbbb %pre%cccccc%pre% AAAA

El objetivo de la explotación es leer un archivo en un directorio protegido, pero no tengo idea de cómo lo haría con esta vulnerabilidad. Cualquier consejo es bienvenido, gracias.

%pre%     
pregunta user3916237 19.11.2015 - 17:30
fuente

1 respuesta

1

Según tengo entendido, usted controla el archivo de entrada /tmp/file y esta parte del programa se ejecuta con privilegios para leer un archivo protegido. Tu objetivo es leer el archivo protegido.

No pude ver ningún problema en este código. La cadena de formato no está controlada por la entrada y los saltos de línea faltantes que vio fueron porque el último carácter de cada 20 bytes se está reemplazando con un printf (que detiene a /tmp/file de leer más allá del búfer).

Sin embargo, como sugirió @MikeOunsworth, todo lo que tienes que hacer es hacer que %code% sea un enlace simbólico al archivo protegido y obtendrás el contenido (con cada 20 bytes reemplazados, por supuesto).

    
respondido por el billc.cn 19.11.2015 - 18:44
fuente

Lea otras preguntas en las etiquetas