HeroCTF (v3) - HeroRPG (Forensic)


Temps de lecture : 2 minutes, 45 secondes | 286 vues
write-up cybersécurité ctf heroctf forensic

Write-up HeroCTF - Forensic - HeroRPG

Le challenge

CTF : HeroCTF (version 3)

Nom du challenge : HeroRPG (75 points)

Consigne :

This RPG game wasn't well designed, and I am pretty sure there is no way to win... Or is it ?

To run the game, go to the Hero/www folder and run sudo python3 -m http.server 80. The game is available through your browser : http://localhost:80

You can move around with the arrow keys, interact with enter, and open your inventory with X.

The game : https://drive.google.com/file/d/1VXezRNMVesUn4xNrWyi7sMNwXnL7cySR/view?usp=sharing

Format : Hero{}

Author : Log_s



Write-up

Une fois le serveur web Python lancé, on se retrouve avec un jeu jouable (avec les flèches du clavier) dans notre navigateur et on commence une "New game". On arrive sur cette magnifique map :

game1

En parcourant un peu le jeu, on remarque qu'une autre map est disponible avec un mob à l'entrée.

Il nous demande de trouver une perle d'or pour accéder au FlagLand. OK, on sait qu'on va devoir trouver le moyen de trouver cette perle :

game4

On ouvre le coffre présent sur la map, on sait jamais !

game3

Je suis donc ensuite retourné voir notre douanier afin de lui donner sa perle. Manque de bol, elle nous vole notre perle...... Pas très sympa. On trouve également une pièce dans la maison présente sur la map mais aucun objet ne réagit.

On fait maintenant un tour d'horizon des fichiers du jeu. Après tout, c'est un challenge de forensic :

root@kali:~/Desktop/Challenge/RPG/www# tree -L 2
.
├── audio
│   ├── bgm
│   ├── bgs
│   ├── me
│   └── se
├── data
│   ├── Actors.json
│   ├── Animations.json
│   ├── Armors.json
│   ├── Classes.json
│   ├── CommonEvents.json
│   ├── Enemies.json
│   ├── Items.json
│   ├── Map001.json
│   ├── Map002.json
│   ├── Map003.json
│   ├── MapInfos.json
│   ├── Skills.json
│   ├── States.json
│   ├── System.json
│   ├── Tilesets.json
│   ├── Troops.json
│   └── Weapons.json
├── fonts
│   ├── gamefont.css
│   └── mplus-1m-regular.ttf
├── icon
│   └── icon.png
├── img
│   ├── animations
│   ├── battlebacks1
│   ├── battlebacks2
│   ├── characters
│   ├── enemies
│   ├── faces
│   ├── parallaxes
│   ├── sv_actors
│   ├── sv_enemies
│   ├── system
│   ├── tilesets
│   ├── titles1
│   └── titles2
├── index.html
├── js
│   ├── libs
│   ├── main.js
│   ├── plugins
│   ├── plugins.js
│   ├── rpg_core.js
│   ├── rpg_managers.js
│   ├── rpg_objects.js
│   ├── rpg_scenes.js
│   ├── rpg_sprites.js
│   └── rpg_windows.js
└── package.json

En épluchant les fichiers .json, on se rend compte qu'on a des fichiers de données qui servent pour les différentes map du jeu. On suppose que l'on doit accéder à la map n°2.

On voit ensuite que le jeu est codé en Javascript et après avoir fouillé dans le fichier rpg_managers.js, on trouve un bout de code intéressant :

js

On change ensuite le fichier de données appelé lors du démarrage du jeu :

DataManager.loadMapData = function(mapId) {
    if (mapId > 0) {
        var filename = 'Map002.json'.format(mapId.padZero(3));
        this._mapLoader = ResourceHandler.createLoader('data/' + filename, this.loadDataFile.bind(this, '$dataMap', filename));
        this.loadDataFile('$dataMap', filename);
    } else {
        this.makeEmptyMap();
    }
};

En redémarrant le jeu après un effacement du cache du navigateur, on tombe désormais sur une map complètement vide. Surprise, tout en bas de la map, le flag est écrit :

win

Merci Log_s pour ce chall très fun !

Ajouter un commentaire


Commentaires




Tue, 27 Jul 2021 08:54:21 - Par wrBEIRqX : 555



Tue, 27 Jul 2021 08:53:52 - Par wrBEIRqX : 555



Tue, 27 Jul 2021 08:53:29 - Par wrBEIRqX : 555



Sun, 25 Jul 2021 21:54:41 - Par gvDIgrDT : 555



Sun, 25 Jul 2021 21:54:11 - Par gvDIgrDT : 555


Article précédent Article suivant