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
etCtf
à la fonctionBienvenue
, la variablesolved
retourne désormaistrue
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}