이번 포스트에서는 Python Challenge의 Level 12 문제에 대해 다루겠다.
문제를 클릭하면 다음과 같은 페이지가 출력된다.
## 문제 해석 :
카드를 5군데로 나눈 그림이 한 장 출력되어 있다. 개발자 도구를 통해서 확인해본 결과, 사진의 이름이 evil1.jpg로 되어있는데, 이 말인 즉슨 evil2.jpg, evil3.jpg도 존재할 수 있다는 말이다.
## 문제 풀이 :
evil2.jpg를 열어보면 다음과 같다.
jpg가 아닌 gfx라고 되어있다. 파일의 확장자를 gfx로 바꾸면 바로 gfx 파일이 저장되었다.
또한 evil3.jpg를 확인해본 결과 다음과 같다.
더 이상의 evils가 없다고 한다. 혹시나 해서 evil4.jpg를 입력하고 확인해보았다.
사진이 출력되지 않는다. 그러나 다음과 같이 curl 명령어를 활용해서 다운로드 해보았더니 아래와 같은 결과가 나왔다.
Bert가 evil이고 다시 돌아가라는 문구다. 해당 레벨에서 상관이 없는 것 같아서 다시 evil2로 돌아가보겠다.
evil2.gfx 파일을 Hex 에디터로 열어보면 다음과 같다.
헤더에는 이상한 문자들이 들어가 있다. 문제 그림에 나와있는 5개로 나누는 것이 힌트다. 헤더 부분을 5바이트 씩으로 나누면 각각 JFIF(jpeg), PNG, GIF, PNG, JFIF(jpeg)가 나온다. 즉 5개의 파일을 하나의 파일로 합쳐진 것임을 알 수 있다.
따라서 파이썬 코드를 통해 evil2.gfx 파일을 5바이트 단위로 나눠서 저장해보겠다.
### 공격 코드 :
with open("evil2.gfx", "rb") as f:
data = f.read()
for i in range(5):
with open(str(i)+".png", "wb") as img:
img.write(data[0+i::5])
### 실행 결과 :
그림 속의 글자들을 조합하면 "disproportional"라는 단어가 나온다.
### 최종 공격문 : http://www.pythonchallenge.com/pc/return/disproportional.html
### 실행 결과 :
Level 13로 넘어간 것을 확인할 수 있다.
'Wargame > Python Challenge' 카테고리의 다른 글
Python Challenge (Level 14) (0) | 2022.09.10 |
---|---|
Python Challenge (Level 13) (0) | 2022.09.08 |
Python Challenge (Level 11) (0) | 2022.09.06 |
Python Challenge (Level 10) (0) | 2022.08.28 |
Python Challenge (Level 9) (0) | 2022.08.27 |