fixme1.py
Name: fixme1.py Description: Fix the syntax error in this Python script to print the flag. Download Python script Author: LT 'syreal' Jones Tags: Easy, General Skills, Beginner picoMini 2022, Python Challenge from: Beginner picoMini 2022 Files: fixme1.py Hints: 1. Indentation is very meaningful in Python 2. To view the file in the webshell, do: $ nano fixme1.py 3. To exit nano, press Ctrl and x and follow the on-screen prompts. 4. The str_xor function does not need to be reverse engineered for this challenge.
Theory
According to the description, to get the flag we have to fix a python code, should be easy since python tells you exactly what is wrong in the code with clarity, and even in what line it's happening, so it should be easy. Can't do anything else in theory, so let's pass on to there.
Solution
First let's download the code and run it to see what's wrong:
import random def str_xor(secret, key): #extend key to secret length new_key = key i = 0 while len(new_key) < len(secret): new_key = new_key + key[i] i = (i + 1) % len(key) return "".join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)]) flag_enc = chr(0x15) + chr(0x07) + chr(0x08) + chr(0x06) + chr(0x27) + chr(0x21) + chr(0x23) + chr(0x15) + chr(0x5a) + chr(0x07) + chr(0x00) + chr(0x46) + chr(0x0b) + chr(0x1a) + chr(0x5a) + chr(0x1d) + chr(0x1d) + chr(0x2a) + chr(0x06) + chr(0x1c) + chr(0x5a) + chr(0x5c) + chr(0x55) + chr(0x40) + chr(0x3a) + chr(0x5e) + chr(0x52) + chr(0x0c) + chr(0x01) + chr(0x42) + chr(0x57) + chr(0x59) + chr(0x0a) + chr(0x14) flag = str_xor(flag_enc, 'enkidu') print('That is correct! Here\'s your flag: ' + flag) File "main.py", line 19 print('That is correct! Here\'s your flag: ' + flag) ^ IndentationError: unexpected indent
So it seems that there is a wrong indentation in the last print statement that is not needed. We can just remove that space and run it normally:
import random def str_xor(secret, key): #extend key to secret length new_key = key i = 0 while len(new_key) < len(secret): new_key = new_key + key[i] i = (i + 1) % len(key) return "".join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)]) flag_enc = chr(0x15) + chr(0x07) + chr(0x08) + chr(0x06) + chr(0x27) + chr(0x21) + chr(0x23) + chr(0x15) + chr(0x5a) + chr(0x07) + chr(0x00) + chr(0x46) + chr(0x0b) + chr(0x1a) + chr(0x5a) + chr(0x1d) + chr(0x1d) + chr(0x2a) + chr(0x06) + chr(0x1c) + chr(0x5a) + chr(0x5c) + chr(0x55) + chr(0x40) + chr(0x3a) + chr(0x5e) + chr(0x52) + chr(0x0c) + chr(0x01) + chr(0x42) + chr(0x57) + chr(0x59) + chr(0x0a) + chr(0x14) flag = str_xor(flag_enc, 'enkidu') print('That is correct! Here\'s your flag: ' + flag) That is correct! Here's your flag: picoCTF{1nd3nt1ty_cr1515_09ee727a}
There we go! That's the flag.
I rated this level as "good"! :3
https://play.picoctf.org/practice/challenge/240