Les chatons ont la réponse – FCSC 2020 // SMIC1


c’est le SMIC ou le RSA ???

Pour commencer, on va quand même saluer le petit calembour entre le SMIC et le RSA, c’est le premier jeu de mots que vous verrez sur l’ensemble du challenge. Nous pouvons saluer l’imagination du créateur.

Théorie

Parfait pour se mettre en jambe, le RSA est un grand classique des CTF de part sa facilité de compréhension et sa complexité technique. Tout repose sur des propriétés mathématique à la fois simples et complexes, cet oxymore définie à lui seul pourquoi cet algorithme de chiffrement est toujours dans l’air du temps. Tout se joue sur la factorisation du modulus n, car s’il n’est pas assez grand, l’ensemble s’effondre.
Pour plus d’informations, je vous conseil la lecture de cet article Wikipedia .

C’est parti !

Lisons ce qui nous est demandé, nous devons produire le message chiffré “c” qui correspond aux informations données, d’ailleurs, quelles sont ces informations ?
nous avons en notre possession:

  • le “message” à chiffrer (m): 29092715682136811148741896992216382887663205723233009270907036164616385404410946789697601633832261873953783070225717396137755866976801871184236363551686364362312702985660271388900637527644505521559662128091418418029535347788018938016105431888876506254626085450904980887492319714444847439547681555866496873380
  • la clef publique (n): 115835143529011985466946897371659768942707075251385995517214050122410566973563965811168663559614636580713282451012293945169200873869218782362296940822448735543079113463384249819134147369806470560382457164633045830912243978622870542174381898756721599280783431283777436949655777218920351233463535926738440504017
  • l’exposant (e) : 65537 (ou 0x10001 en hexadecimal, je me souviens mieux de cette notation)

Si vous avez bien lu la page Wikipedia, vous avez trouvé que pour produire le message chiffré (c), il faut faire le calcul suivant:
c = m^e.mod(n)
Je suis désolé, je n’ai pas trouvé comment formater le texte pour produire de belles équations mathématique.

Exploit.py

Allons y, dans notre éditeur de texte préféré (gVim par exemple si vous êtes sous windows, ou encore l’excellent Visual Studio Code) nous allons créer l’exploit suivant:

m = 29092715682136811148741896992216382887663205723233009270907036164616385404410946789697601633832261873953783070225717396137755866976801871184236363551686364362312702985660271388900637527644505521559662128091418418029535347788018938016105431888876506254626085450904980887492319714444847439547681555866496873380

n = 115835143529011985466946897371659768942707075251385995517214050122410566973563965811168663559614636580713282451012293945169200873869218782362296940822448735543079113463384249819134147369806470560382457164633045830912243978622870542174381898756721599280783431283777436949655777218920351233463535926738440504017

e = 0x10001

try:
    c = pow(m,e,n)
    print("[*] Flag is : FCSC{%s}" % c)
except:
    print("[*] Sorry, better luck next time")



input()

En python, si vous passez trois arguments dans la méthode pow(), il va faire exactement ce dont nous avons besoin, pourquoi faire compliqué quand on peut faire simple ?
Nous avons ensuite un formatage de sortie de texte FCSC{%s} qui va récupérer la sortie contenue dans (c) et l’afficher sur notre écran.
Le code pour moi était le suivant:

FCSC{43038584369552603099759673610132404954603129182365447300530480398332322363741719021427218282885888340427764617212360258625034642827465292074914623418386094167402748099928035759712951543068670333972608099203444196434250100760907677561414593941829935308834430903916897564884969367373487895789351212840634163159}

la sortie de Exploit.py

Conclusion

Rien de particulier sur cet exercice, nous restons sur des propriétés mathématique de base, mais ayez confiance, le suivant sera plus ardu, mais parole de chaton, il restera réalisable !


Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.