OverTheWire - Natas 10 -> 11 (sin navegador)

Información


Las contraseñas cambian cada cierto tiempo, existe la posibilidad de que esta contraseña ya no sea válida

Username: natas11
Password: 1KFqoJXi6hRaPluAmk8ESDW4fSysRoIg
URL:      http://natas11.natas.labs.overthewire.org

Solución


Abrimos Postman y pegamos la URL.

Vamos a la pestaña Authorization y seleccionamos la opción Basic Auth.

Ingresamos las credenciales.

Hacemos click en el botón Send.

Vemos la respuesta y nos indica un código fuente.

Agregamos el nombre del archivo en la URL para verlo.

Al visitar el archivo vemos un montón de letras difíciles de leer, seleccionamos la pestaña Preview para ver todo más claro.

Observamos código PHP.

Copiamos y pegamos el código en un editor de código para mayor comodidad.

Vemos que nuestro objetivo es que showpassword valga yes.

Leyendo el código fuente línea por línea vemos que primero se crea un array con los valores:

"showpassword": "no"
"bgcolor": "#ffffff"

Se definen 3 funciones.

Después se almacena en una variable llamada data el resultado de la función loadData y se pasa como parámetro el array del inicio.

Primero verifica que exista una cookie con el nombre data.

Toma la cookie y le hace varias cosas.

Nuestro objetivo es modificar el array para que showpassword valga yes y como podemos observar se aplica un XOR para construir nuestra cookie.

Tenemos el $text que sería la cookie en base64 y también tenemos el $outText que sería el $defaultData pero nos falta la key, para obtener la clave podemos hacer un XOR de el $text y el $outText porque ya los conocemos.

Para obtener la cookie vamos a la pestaña Headers.

Eliminamos las partes innecesarias del código para enfocarnos en el proceso del XOR.

<?php

$defaultdata = array("showpassword" => "no", "bgcolor" => "#ffffff");
$cookie = "MGw7JCQ5OC04PT8jOSpqdmkgJ25nbCorKCEkIzlscm5oKC4qLSgubjY=";

function xor_encrypt($cookie, $defaultData)
{
    $key = $defaultData;
    $text = $cookie;
    $outText = '';

    // Iterate through each character
    for ($i = 0; $i < strlen($text); $i++) {
        $outText .= $text[$i] ^ $key[$i % strlen($key)];
    }

    return $outText;
}

echo xor_encrypt(base64_decode($cookie), json_encode($defaultdata));

?>

Al ejecutar este código obtenemos la clave secreta .

KNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLK

Ahora que tenemos la clave secreta podemos formar una cookie que nos permita obtener la contraseña del siguiente nivel. Esto será posible realizando un XOR de la clave con el array modificado para que el valor de showpassword valga yes.

Modificamos la misma función para formar una cookie.

<?php

$defaultdata = array("showpassword" => "yes", "bgcolor" => "#ffffff");
$secretKey = "KNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLK";

function xor_encrypt($secretKey, $defaultData)
{
    $key = $secretKey;
    $text = $defaultData;
    $outText = '';

    // Iterate through each character
    for ($i = 0; $i < strlen($text); $i++) {
        $outText .= $text[$i] ^ $key[$i % strlen($key)];
    }

    return $outText;
}

echo base64_encode(xor_encrypt($secretKey, json_encode($defaultdata)));

?>

Al ejecutarla obtenemos una nueva cookie.

MGw7JCQ5OC04PT8jOSpqdmk3LT9pYmouLC0nICQ8anZpbS4qLSguKmk2

Esta cookie no funcionará porque la clave secreta debe ser del mismo largo que el array. Como modificamos el array cambiando un no por un yes la clave secreta debe ser 1 caracter más larga, teniendo en cuenta que el patrón de la clave es KNHL y la última letra de nuestra clave es K debemos agregar una N al final.

Esta será nuestra nueva clave secreta:

$secretKey = "KNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKNHLKN";

Si modificamos el código y lo volvemos a correr obtenemos la siguiente cookie:

MGw7JCQ5OC04PT8jOSpqdmk3LT9pYmouLC0nICQ8anZpbS4qLSguKmkz

Volvemos a Postman y hacemos click en Cookies.

Hacemos click en data.

Pegamos nuestra cookie y hacemos click en el botón Save.

Enviamos la petición.

Y en la respuesta obtenemos la contraseña para el siguiente nivel.

Contraseña


YWqo0pjpcXzSIl5NMAVxg12QxeC1w9QG


Anterior

Siguiente

Powered by Soopr   •  Theme  Moonwalk