Python Wrangling is a General Skills challenge worth 10 points.
Description
Python scripts are invoked kind of like programs in the Terminal... Can you run this Python script using this password to get the flag?
This puzzle provides a Python script ende.py
, a password in pw.txt
, and a ciphertext flag.txt.en
.
Solution
First, I read ende.py
and made sure it was not malicious. This script is basic. After reviewing the source code and getting an idea of how it worked, I was comfortable with running it on my machine:
import
sys
import
base64
from
cryptography.fernet import
Fernet
usage_msg =
"Usage: "+
sys.argv[0] +" (-e/-d) [file]"
help_msg =
usage_msg +
"\n"
+\
"Examples:\n"
+\
" To decrypt a file named 'pole.txt', do: "
+\
"'$ python "+
sys.argv[0] +" -d pole.txt'\n"
if
len(sys.argv) < 2
or
len(sys.argv) > 4:
print(usage_msg)
sys.exit(1)
if
sys.argv[1] ==
"-e":
if
len(sys.argv) < 4:
sim_sala_bim =
input("Please enter the password:")
else:
sim_sala_bim =
sys.argv[3]
ssb_b64 =
base64.b64encode(sim_sala_bim.encode())
c =
Fernet(ssb_b64)
with open(sys.argv[2], "rb") as f:
data =
f.read()
data_c =
c.encrypt(data)
sys.stdout.write(data_c.decode())
elif
sys.argv[1] ==
"-d":
if
len(sys.argv) < 4:
sim_sala_bim =
input("Please enter the password:")
else:
sim_sala_bim =
sys.argv[3]
ssb_b64 =
base64.b64encode(sim_sala_bim.encode())
c =
Fernet(ssb_b64)
with open(sys.argv[2], "r") as f:
data =
f.read()
data_c =
c.decrypt(data.encode())
sys.stdout.buffer.write(data_c)
elif
sys.argv[1] ==
"-h"
or
sys.argv[1] ==
"--help":
print(help_msg)
sys.exit(1)
else:
print("Unrecognized first argument: "+
sys.argv[1])
print("Please use '-e', '-d', or '-h'.")
Running this script with the provided password and ciphertext gives up the flag: