Skip to main content

BreizhCTF 2023 | Blockchain 101

·275 words·2 mins
WiZee
Author
WiZee
Infosec student @ ESNA
Table of Contents
BreizhCTF 2023 - Blockchain - This article is part of a series.
Part 1: This Article

TL;DR
#

  • Le contrat contient une fonction Bienvenue_
  • On utilise la suite d’outils de Foundry pour interagir avec le contrat
  • On envoie Galette, Cidre et Ctf à la fonction Bienvenue, la variable solved retourne désormais true et permet d’obtenir le flag

Informations du challenge
#

Auteur MK
Catégorie Blockchain
Description Nous vous souhaitons la bienvenue au breizhCTF et dans l’univers de la blockchain. Pour le résoudre, vous devrez modifier la valeur de la variable solved pour la mettre à true.
Difficulté Très facile
Fichier(s) blockchain101.sol
Points ?
Résolutions ?/117
Sources https://github.com/BreizhCTF/breizhctf-2023/tree/main/challenges/blockchain/breizh_blockchain
URL http://localhost/

Résolution du challenge
#

Pour réaliser ce challenge, nous allons utiliser la suite d’outils de Foundry.

En observant le contrat, on comprend qu’il va falloir envoyer trois chaînes de caractères à la fonction Bienvenue_, à savoir :

  • Galette
  • Cidre
  • Ctf
// SPDX-License-Identifier: UNLICENSED
pragma solidity 0.8.19;

contract Bienvenue{

    bool public solved = false;

    function Bienvenue_(string memory G, string memory C1, string memory C2) public{
        require(keccak256(abi.encodePacked((G))) == keccak256(abi.encodePacked(("Galette")))); //Vérifie l'égalité entre G et "Galette"
        require(keccak256(abi.encodePacked((C1))) == keccak256(abi.encodePacked(("Cidre")))); //Vérifie l'égalité entre C1 et "Cidre"
        require(keccak256(abi.encodePacked((C2))) == keccak256(abi.encodePacked(("Ctf")))); //Vérifie l'égalité entre C2 et "Ctf"

        solved = true;
    }

}

On commence par définir quelques variables d’environnement afin de simplifier leur usage dans nos futures commandes.

export PK="66d2a6c5515c787d552173bcd6e56999390d9a816f6cafda0a395a668972e671"
export RPC="http://localhost/blockchain"
export TARGET="0x153CA2f9509bA2927ec55eac4D32640349F8e0E6"

On envoie donc les trois chaînes de caractères à la fonction Bienvenue_.

cast send $TARGET --private-key $PK -r $RPC "Bienvenue_(string,string,string)" "Galette" "Cidre" "Ctf"
...            
status               1 (success)
...

On vérifie si les trois conditions sont validées.

cast call $TARGET -r $RPC "solved()(bool)"
true

La variable solved étant passée à true, on peut maintenant retourner sur la page du challenge pour récupérer le flag.

BZHCTF{HellO_wOrld}

Reply by Email
BreizhCTF 2023 - Blockchain - This article is part of a series.
Part 1: This Article