이번 포스트에서는 Python Challenge의 Level 17 문제에 대해 다루겠다.
문제를 클릭하면 다음과 같은 페이지가 출력된다.
## 문제 해석 :
화면 좌측 하단에 보면 Level 4에 나왔던 사진이 다시 나온 것을 확인할 수 있다.
Level 4에 들어가서 쿠키를 확인해보면 다음과 같이 파라미터를 busynothing을 쓰라고 한다.
파라미터만 busynothing으로 바꾼 다음에 레벨 4와 같은 방식으로 공격하면 되는 것으로 보인다.
## 문제 풀이 :
파이썬을 통해 자동화 코드를 작성해보겠다.
### 공격 코드 :
from urllib.request import urlopen
from urllib.parse import unquote_to_bytes
import bz2
import re
url = "http://www.pythonchallenge.com/pc/def/linkedlist.php?"
busynothing = '12345'
info = ''
while 1:
h = urlopen(
'http://www.pythonchallenge.com/pc/def/linkedlist.php?busynothing='+busynothing)
raw = h.read().decode("utf-8")
cookie = h.getheader("Set-Cookie")
info += re.search('info=(.*?);', cookie).group(1) # 쿠키의 info란을 확인하여 그 값을 info 변수에 추가
print(raw)
match = re.search('the next busynothing is (\d+)', raw)
if match == None: # while문 탈출
break
else:
busynothing = match.group(1)
res = unquote_to_bytes(info.replace("+", " "))
print(bz2.decompress(res).decode())
### 실행 결과 :
마지막 문구에 26일을 기억하냐고 한다. 여기에 나온 26일은 Level 16번에 나온 문제에 관한 내용이다.
여기서 아버지는 모차르트의 아버지인 레오폴트(Leopold)이다. 또한 Leopold에 전화하라고 하는데, 전화하는 법은 Level 13에 나와있다.
romance라는 단어가 출력된 것을 확인할 수 있다.
### 공격 코드 :
import xmlrpc.client as xc
url = "http://www.pythonchallenge.com/pc/phonebook.php"
serv = xc.ServerProxy(url)
print(serv.phone("Leopold"))
### 실행 결과 :
stuff/violin.php로 접속하라고 한다.
### 공격문 : http://www.pythonchallenge.com/pc/stuff/violin.php
### 실행 결과 :
모차르트 아버지의 사진이 출력되며, 제목을 보면 뭘 원하냐고 한다. 여기서 방금 전에 얻어낸 "the flowers are on their way"를 전해줘야 한다.
다음과 같이 쿠키의 info 값을 변경하면 된다.
### 실행 결과 :
balloons라는 단어가 바로 다음 레벨로 가는 열쇠다.
### 최종 공격문 : http://www.pythonchallenge.com/pc/stuff/balloons.html
### 실행 결과 :
Level 18로 넘어간 것을 확인할 수 있다.
'Wargame > Python Challenge' 카테고리의 다른 글
Python Challenge (Level 19) (0) | 2022.09.18 |
---|---|
Python Challenge (Level 18) (0) | 2022.09.17 |
Python Challenge (Level 16) (0) | 2022.09.15 |
Python Challenge (Level 15) (0) | 2022.09.11 |
Python Challenge (Level 14) (0) | 2022.09.10 |