Eval me 1

Catégorie: Programmation Difficulté: - Flag: CTFREI{ea5y_pr0gramm1ng}

Challenge

Description


Arriveras-tu à passer toutes les étapes de ce programme ?

Il est conseillé d'utiliser pwntools afin de résoudre ce challenge.

Connexion: nc vps.ctfrei.fr 5002

Solution

Le serveur nous envoie une série d'expressions mathématiques à résoudre, il faut donc créer un client TCP pour s'y connecter et y répondre en boucle.

Le challenge attend de nous que nous utilisions la fonction eval, ce que je déconseille impérativement (d'ailleurs la suite de ce challenge "Eval me 2" essaie de se jouer de ça pour nous tendre un piège)

Une recherche sur google permet de trouver des alternatives safe pour faire la même chose, comme cette réponse StackOverFlow (cimer chef)

import socket
import ast
import operator as op

# Evaluation safe d'une expression mathématiques
operators = {
  ast.Add: op.add, ast.Sub: op.sub, ast.Mult: op.mul,
  ast.Div: op.truediv, ast.Pow: op.pow, ast.BitXor: op.xor,
  ast.USub: op.neg
}

def eval_expr(expr):
  return eval_(ast.parse(expr, mode='eval').body)

def eval_(node):
  match node:
    case ast.Constant(value) if isinstance(value, int):
      return value  # integer
    case ast.BinOp(left, op, right):
      return operators[type(op)](eval_(left), eval_(right))
    case ast.UnaryOp(op, operand):  # e.g., -1
      return operators[type(op)](eval_(operand))
    case _:
      raise TypeError(node)
      
# Connexion au serveur
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('vps.ctfrei.fr', 5002))

while True:
  try:
    # Récupération et affichage du message du serveur
    data = client.recv(2048).strip().decode()
    print(data)
    
    # Récupération de l'expression à résoudre dans le message
    expr = data.split('\n\n')[-1]
    
    # Evaluation de l'expression
    answer = eval_expr(expr)
    
    # Envoie de la réponse
    client.send(f"{answer}\n".encode())
  except:
    # Quitte la boucle si une exception est levée
    break

Dernière mise à jour

Cet article vous a-t-il été utile ?