¿Qué tipo de ataque se debe usar para pasar esta autenticación?

0

Practico Astalavista Wargames y Me encontré con este desafío. La pregunta es: Bob escribió un software, pero la verificación de la contraseña no parece funcionar. Debes encontrar una manera de acceder. Pudimos recuperar parte de la fuente:

typedef struct {char pass[5],valid;} password;

int main(){
    password s;
    s.valid=0;
    scanf("%s",s.pass);
    verifypass(s);
    //if password is correct the value of s.valid will change to 1
    if(s.valid==1)login();
    else printf("Wrong passwordn");
    system("Pause");
    return 0;
}

Enlace al archivo ejecutable original provisto en la pregunta . Tenga en cuenta que la pregunta no proporciona nada más aparte de esta parte del código y el archivo ejecutable.

Mi pensamiento inicial fue que esto debería hacerse usando ataques de desbordamiento de búfer, así como un enfoque común en mi máquina x64, trato de ingresar 1 para cambiar el bit válido a VERDADERO.

cuando ingrese este número de 1 "111111111111111111111111111111", el programa me permite ingresar la contraseña nuevamente, PERO no iniciar sesión. Si ingreso menos, se mostrará la contraseña incorrecta y saldría y si ingresara más se bloquearía.

¿Cómo puedo encontrar una solución a este desafío?

    
pregunta Erfan 21.02.2013 - 16:09
fuente

1 respuesta

2

Podrías atacar esto con un desbordamiento de búfer, pero no es necesario. Para que un exploit de desbordamiento de búfer funcione, deberá realizar un análisis dinámico en el exe, utilizando una herramienta como OllyDBG . A continuación, ejecutaría el programa y le pasaría cadenas demasiado largas hasta que se bloqueara. El tipo de bloqueo que está buscando es el control sobre eip . Normalmente, solo pasaría una cadena completa de AAAAAA y verificaría los registros de la CPU cuando el programa se bloquee, si ve eip 0x41414141 o similar, gana y está a solo unos pasos de romper el código.

Sin embargo, atacaría esto de una manera muy diferente. La contraseña se almacena en el archivo exe , pero está ofuscada: se genera al multiplicar y rotar una serie de valores como 0x55555556 y 0x66666667 . Luego compara su contraseña con el valor generado, y se bifurca de una forma u otra dependiendo de si coinciden. Todo lo que necesitas hacer es subvertir esta condición de bifurcación. Esto se puede lograr muy fácilmente con un editor hexadecimal.

Para una pista; el comando que desea editar reside en 0x4013b3 (_main+58) .

    
respondido por el lynks 21.02.2013 - 16:25
fuente

Lea otras preguntas en las etiquetas