TL;DR #
- Le contrat contient une fonction
Bienvenue_ - On utilise la suite d’outils de Foundry pour interagir avec le contrat
- On envoie
Galette,CidreetCtfà la fonctionBienvenue, la variablesolvedretourne désormaistrueet 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 :
GaletteCidreCtf
// 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}