Challenge example
Source code
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import json
import os
FLAG = ?
KEY = ?
def encryptFlag():
data = {"flag": FLAG}
plaintext = json.dumps(data).encode()
padded = pad(plaintext, 16)
iv = os.urandom(16)
cipher = AES.new(KEY, AES.MODE_CBC, iv)
try:
encrypted = iv + cipher.encrypt(padded)
print(f"Here is your token : {encrypted.hex()}")
except ValueError as e:
print({"error": str(e)})
return
def checkToken():
token = input("Token : ")
token = bytes.fromhex(token)
iv = token[:16]
token = token[16:]
cipher = AES.new(KEY, AES.MODE_CBC, iv)
try:
plaintext = cipher.decrypt(token)
unpadded = unpad(plaintext, 16)
data = json.loads(unpadded)
except ValueError as e:
print({"error": str(e)})
return
if data["flag"] == FLAG:
print("Token is valid")
print("Welcome !")
encryptFlag()
checkToken()Exploitation
Vulnerability detection
POC
Full exploitation
Using Libraries
Exercice
Last updated