Story of CowHacker

PicoCTF 3번 문제 ( Python Wrangling ) _1편 본문

공부/PicoCTF

PicoCTF 3번 문제 ( Python Wrangling ) _1편

Cow_Hacker 2021. 11. 8. 22:33
728x90

안녕하세요 CowHacker입니다.

 

 

 

 

Pico CTF 3번 문제를 풀어 볼 것이다.

 

 

 

 

 

 

 

파이썬 언쟁이라..

이번 문제... 말로 싸우나 보다.

 

 

 

 

 

복호환줄 알았는데 철자가 다르다!

 

 

파이썬 스크립트는 프로그램처럼 동작한다? 터미널에서?

할 수 있냐 너는 이 패스워드로 파이썬 스크립트를 사용해 flag를 얻을 수 있냐?

 

머 대충 패스워드 사용해서 파이선 스크립트에 있는 flag 가꼬 오라는 말 같다.

 

 

 

 

 

일단 3개 하이퍼링크가 걸린 건 다 눌러 설치했다.

 

 

 

 

 

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'.")

첫 번째 파이썬 스크립트를 열어 봤다.

 

 

 

바로 실행시키니 cryptography 모듈이 없단다.

 

 

 

 

 

 

그럼 다운해주면 된다.

 

 

 

 

 

흠.. 역시 코드 좀 보고 와야 할 거 같다.

 

 

 

 

 

 

sys.argv [0]! 이건 터미널에서 작업해야 한다.

아!~ 그래서 문제에서 터미널에서 프로그램처럼 파이썬이 동작한다고 했나...

 

sys.argv가 머냐!

 

 

 

칼리로 옮겨 왔다.

 

 

 

 

 

 

자 이제 가져온 py파일을 실행해본다.

당연히 안된다.

 

 

 

 

맨 위에 저 구문을 넣어 줘야 리눅스에서 파이썬이 실행된다.

 

 

 

 

 

 

자 실행하면 아까 윈도우에서 실행한 값과 비슷하다.

 

 

 

 

 

 

 

if문을 보면 sys.argv의 길이가 2보다 작거나 4보다 크면,

print문 usage msg라는 녀석을 보여주라는 말이다.

 

그리고 usage msg의 변수 값을 보면 중간에 sys.argv [0]에 영향을 주는 걸 볼 수 있다.

 

 

 

 

계속 코드를 분석해본다.

 

이번에는 sys.argv [1]의 값이 -e 이면

패스워드 입력하라니 무슨 파일을 열어 쓴다니 외니 라는 작업을 하는 거 같아 보인다.

 

 

 

 

 

 

역시 실행됐다.

 

 

 

 

 

자 분명 아까 구글에 검색해본 sys.argv란 녀석은 입력값에 대한 걸 읽어 준다 했다.

실행할 때 들어가는 입력값./ende.py에 -e라는 입력값을 줌으로써 위에서 봤던 if문이 실행됐다.

 

 

 

 

자 패스워드를 적어준다.

 

 

 

 

 

범위를 넘어섰다고 한다. 이리 쉬울 리 없지..

다시 코드를 보겠다.

 

 

-h를 써봐야겠다.

 

 

 

다음에 오겠다.

 

저희 안 되겠어서 도

간 게 아니다.

728x90
Comments