Skip to content

Making Baking Pancakes


Description

Write Up: Tyron
Créateur: Dylan (elbee3779)
Difficulté: easy
Points: 250
Format du flag: pctf{flag}

Enoncé

  • Français: Combien de couches y a-t-il sur vos crêpes ?
  • English: How many layers are on your pancakes?

Solution détaillée

On a un serveur à contacter à chal.pctf.competitivecyber.club:9001

Lorsqu'on le contacte, il nous renvoie une chaine encodée plein de fois en base64.

On doit décoder la chaine jusqu'à qu'on ne puisse plus et renvoyer le résultat.

Voici mon script pour résoudre :

import sys
import re

from pwn import remote, context
from base64 import b64decode

host = "chal.pctf.competitivecyber.club"
port = 9001

conn = remote(host, port)

encoded_string_rule = r'(?<=Challenge:\s).+'
level_number_rule = r'\((?P<level>\d.*)/1000\) >>'

def decode_b64(encoded):
    while True:
        try: 
            int(encoded, 16)
            break
        except:
            try:
                encoded = b64decode(encoded)
            except:
                encoded = b64decode(encoded[:-2]) #parfois on recoit une chaine encodée où à la fin on un truc ajouté qui n'a rien à voir avec de la base64

    return encoded

for i in range(1000):

    resp = conn.recvuntilS('>>')

    if "pctf" in resp:
        print(resp)

    encoded = re.search(encoded_string_rule, resp).group()
    level = re.search(level_number_rule, resp).group('level')


    decoded = decode_b64(encoded)

    res = decoded+b'|'+level.encode() 
    print(res)

    conn.sendline(res)


conn.interactive()

Finalement le flag : pctf{store_bought..._fa82370}


Retex

C'est un challenge de scripting basique mais c'est toujours sympa car je peux appliquer mes connaissances en regex et ... en scripting.