기술/picoCTF

[picoCTF] Python Wrangling

s-bot 2022. 3. 12. 01:10

 

General Skills Category

 

 

들어가니 python script 파일, password 파일, flag 파일 세 개를 다운로드할 수 있었습니다

 

 

 

 

 

en이 아마 encrypt 약자로 뭔가 암호화되어 있다고 생각하여 먼저 python 코드를 살펴봤습니다

 

간단하게 생각해 보고 (1)~(5)로 중간중간 주석을 달았습니다!

 

 

import sys
import base64
from cryptography.fernet import Fernet



usage_msg = "Usage: "+ sys.argv[0] +" (-e/-d) [file]" #(1) 사용법
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": #(2) encrypt option
    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": #(3) decrypt option
    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": #(4) help option
    print(help_msg)
    sys.exit(1)


else:
    print("Unrecognized first argument: "+ sys.argv[1]) #(5) 비정상 option
    print("Please use '-e', '-d', or '-h'.")

 

 

일단 python script의 사용법 (1) 부분을 참고하면 txt 파일만 encrypt와 decrypt가 되니 flag.txt.en 파일 확장자를 flag.txt로 변경했습니다

 

열어보니 이렇게 접근하는 것이 맞는 느낌이 듭니다! 

 

 

 

 

pw.txt 파일에 있는 password를 복사하고 python script의 decrypt (3) 부분을 따라갔습니다

 

예상대로 암호화된 평문이 CTF flag였네요

 

 

C:\Users\user\Downloads>python ende.py -d flag.txt

Please enter the password:pw.txt 내용 입력

picoCTF{~~~}