IT’s Portfolio

[Python Challenge] Level 5 풀이 본문

Security Study/Wargame Explanation

[Python Challenge] Level 5 풀이

f1r3_r41n 2019. 11. 24. 16:04
728x90
반응형

http://pythonchallenge.com 

 

The Python Challenge

What people have said about us: "These sorts of things are in my opinion the best way to learn a language.", brberg at Media Cloisters "It's the best web site of the year so far.", Andy Todd at halfcooked "Addictive way to learn the ins and outs of Python.

www.pythonchallenge.com

 

Python Challenge Level 5 풀이.

pronounce it => 그것을 발음

 

이 단서 하나만으로는 문제를 풀기 힘들 것 같다.

페이지 소스를 봐보자.

"peak hell sounds familiar?" => "peak hell의 발음이 친숙한가?"

픽 헬..

픽헬..

모르겠다

 

이 외에 <peakhell src="banner.p"/>라는 링크가 보인다.

들어가보자.

이게 뭘까?

파일인 것 같은데 .p 파일 확장자를 찾아봤다.

Python Pickle File 이라고 한다.

peak hell.. pickle..

픽 헬.. 피클..

 

* 파이썬 피클 파일에 대한 내용은 여기를 클릭 *

 

banner.p를 가져와서 계속 문제를 풀어나가보겠다.

import urllib.request
import pickle

url = "http://www.pythonchallenge.com/pc/def/banner.p"
data = urllib.request.urlopen(url)

pfile = pickle.load(data)

print(pfile[0])
print(pfile[1])

결과:

굳이 pfile의 0번째 리스트와 1번째 리스트를 보지않아도 규칙을 알 수 있다.

문자와 숫자.

문자는 공백과 # 밖에 없다.

숫자는 개수를 뜻하는 듯하다.

 

스크립트를 짜보자.

import urllib.request
import pickle

url = "http://www.pythonchallenge.com/pc/def/banner.p"
data = urllib.request.urlopen(url)

pfile = pickle.load(data)

txt = open("checkfile.txt", "w")

data = ""

for i in range(0, len(pfile)):
    for j in range(0, len(pfile[i])):
        data += pfile[i][j][0]*pfile[i][j][1]
    data += "\n"

txt.write(data)

결과:

 

URL 정답값: channel

 

최신화

2022.10.24

import re, pickle
from get_html_source import get_html

url = "http://www.pythonchallenge.com/pc/def/peak.html"
A = get_html(url)

with open('source.txt', 'w+') as f:
    source = A.get_req().replace('\n', '')
    m = re.findall('<!--(.+?)-->', source)
    m2 = re.findall('[a-z]{6}.p', source)
    f.write(m[0].strip()+'\n'+m2[0].strip())
    A.change_url(url.replace('peak.html', m2[0]))

'''
peak hell sounds familiar ?
banner.p
'''

with open('banner.p', 'wt') as f:
    f.write(A.get_req())

with open('banner.p', 'rb') as f:
    pfile = pickle.load(f)

with open('source.txt', 'wt') as f:
    for i in range(len(pfile)):
        for j in range(len(pfile[i])):
            f.write(pfile[i][j][0]*pfile[i][j][1])
        f.write('\n')

 

Level 6으로 갈 수 있는 URL = http://www.pythonchallenge.com/pc/def/channel.html

728x90
반응형
Comments