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.