Rust fixme 2 writeup

Descripción

The Rust saga continues? I ask you, can I borrow that, pleeeeeaaaasseeeee? Download the Rust code here.

Rust fixme 2 solución

Nos descargaremos el archivo y obtendremos un ‘.tar.gz’. Tendremos que descomprimirlo con el siguiente comando:

tar -xvzf fixme2.tar.gz

Esto nos devolverá una carpeta llamada fixme2.

En este writeup nos saltaremos la instalación de cargo, el compilador de rust, dado que se vio en el writeup Rust fixme 1.

Esta vez, al comilar el proyecto con ‘cargo build’, nos devolverá dos errores:

Este error sucede porque la cadena de caracteres dentro del programa a la que se está llamando ha sido marcada para que no se pueda modificar (esto se hace con ‘&’):

Ahora vamos a analizar el código:

nano src/main.rs

La función declarada que causa el error tiene un comentario:

fn decrypt(encrypted_buffer:Vec<u8>, borrowed_string: &String){ // How do we pass values to a function that we want to change?

En este caso, tenemos dos opciones, o borramos el ‘&’ del String o cambiamos su tipo por ‘&mut String’. Esta segunda opción permitirá modificar la variable para que otras funciones que la usen se la encuentren modificada. Dado que la descripción del CTF nos dice que necesita tomar prestado algo, usaremos este procedimiento. Al volver a ejecutar cargo build obtendremos otro error:

Con lo cual, modificamos esta variable para que sea mutable, tanto en su definición, como en su llamada en la función:

let mut party_foul = String::from("Using memory unsafe languages is a: "); // Is this variable changeable?
decrypt(encrypted_buffer, &mut party_foul); // Is this the correct way to pass a value to a function so that it can be change

Esto nos devolverá la flag:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *