일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 순전파
- 소프트맥스 함수
- 역전파
- sgd
- flag
- Apache2
- picoCTF
- 백준
- 책
- FastAPI
- 리뷰
- 코딩
- 설치
- PHP
- PostgreSQL
- 신경망
- 오차역전파법
- Python
- C언어
- Python Challenge
- PICO CTF
- AdaGrad
- 딥러닝
- 아파치
- 기울기
- CTF
- 파이썬
- HTML
- 신경망 학습
- 우분투
- Today
- Total
Story of CowHacker
PicoCTF 3번 문제 ( Python Wrangling ) _1편 본문
안녕하세요 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를 써봐야겠다.
다음에 오겠다.
도 저희 안 되겠어서 도
망 간 게 아니다.
'공부 > PicoCTF' 카테고리의 다른 글
PicoCTF 5번 문제 ( information ) (0) | 2021.11.17 |
---|---|
PicoCTF 4번 문제 ( Wave a flag ) (0) | 2021.11.13 |
PicoCTF 3번 문제 ( Python Wrangling ) _2편 (2) | 2021.11.09 |
PicoCTF 2번 문제 ( Mod 26 ) (2) | 2021.11.03 |
PicoCTF 1번 문제 ( Obedient Cat ) (2) | 2021.11.03 |