Rust fixme1 writeup


Rust fixme1 について

自分の復習も兼ねて、この問題の writeup (解説) を書きます。
問題はこちらです。
まだチュートリアル段階の問題なので、コメントに従えば解ける内容になっています。

Writeup

問題文は以下の通りです。

Rust fixme1

この問題は、問題文の冒頭に赤色ハッチングで示されているとおり、 picoCTF 内の webshell を使って解くことはできません。
自分で Rust の環境を構築し、フラグを探す必要があります。
私は WSL 上で Microsoft 公式の Devcontainer を利用して解いています。

問題をダウンロードして展開すると、以下のようなファイル構成になっています。

fixme1
├─ Cargo.toml
├─ Cargo.lock
└─ src
    └─ main.rs

Cargo.toml は Rust プロジェクトの設定ファイルで、Cargo.lock は依存関係のバージョンを固定するためのファイルです。
今回の問題には関係がありません。
src/main.rs が Rust のソースコード本体で、このファイル内のエラーを修正するとフラグを取得できます。

ファイル内の Rust コードを見て修正しても良いですし、cargo run コマンドを実行してエラー内容を確認しても良いでしょう。

エラーの修正

エラーの修正は以下の通りです。

    if res.is_err() {
        return; // How do we return in rust?
    }
    println!(
        "{:?}", // How do we print out a variable in the println function? 
        String::from_utf8_lossy(&decrypted_buffer)
    );

2つ目は {} で表示させることもできます。
違いは、 {} が通常表示、 {:?} がデバッグ表示です。

これでフラグ picoCTF{4r3_y0u_4_ru$t4c30n_n0w?} を取得できます。