이번 포스트에서는 Python Challenge의 Level 14 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : italy라는 회오리빵 사진과 바코드처럼 보이는 사진 한장이 출력되어 있다. 개발자 도구를 확인해보니 아래와 같이 "100*100 = (100+99+99+98)"이라는 힌트가 있다. 100*100은 가로와 세로의 길이라고 생각할 수 있고, 100+99+99+98에서 총 4개의 수가 나와 있으므로 사각형이라고 생각할 수 있다. 즉 100(외부)에서 1(내부)로 크기를 줄이면서 생긴 회오리형태라고 볼 수 있다. ## 문제 풀이 : 이미지를 다운로드해서 크기를 출력해보겠다. ### 공격 코드 : from PIL import Image img = Image..
이번 포스트에서는 Python Challenge의 Level 13 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : evil한테 전화하라고 한다. 개발자도구를 확인해보니 다음과 같은 phonebook.php라는 페이지가 존재한다. 해당 페이지를 조사해보면 될 것 같다. ## 문제 풀이 : phonebook.php에 접속해보겠다. XML faultCode 105가 뜬 것을 확인할 수 있다. 이는 xml-rpc 프로토콜을 통해서 호출할 수 있다. 파이썬 코드를 통해 해당 페이지를호출해보겠다. ### 공격 코드 : import xmlrpc.client as xc url = "http://www.pythonchallenge.com/pc/phonebook.php" serv..
이번 포스트에서는 Python Challenge의 Level 12 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 카드를 5군데로 나눈 그림이 한 장 출력되어 있다. 개발자 도구를 통해서 확인해본 결과, 사진의 이름이 evil1.jpg로 되어있는데, 이 말인 즉슨 evil2.jpg, evil3.jpg도 존재할 수 있다는 말이다. ## 문제 풀이 : evil2.jpg를 열어보면 다음과 같다. jpg가 아닌 gfx라고 되어있다. 파일의 확장자를 gfx로 바꾸면 바로 gfx 파일이 저장되었다. 또한 evil3.jpg를 확인해본 결과 다음과 같다. 더 이상의 evils가 없다고 한다. 혹시나 해서 evil4.jpg를 입력하고 확인해보았다. 사진이 출력되지 않는다. 그러..
이번 포스트에서는 Python Challenge의 Level 11 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 사진 한 장만 달려 있는 페이지다. 페이지의 제목을 확인해보면 odd와 even이 적혀있는데, 그림의 픽셀을 홀짝으로 나누면 되는 것으로 보인다. ## 문제 풀이 : 파이썬을 이용하여 그림의 픽셀을 홀짝 별로 나눠서 저장해보겠다. ### 공격 코드 : from PIL import Image with Image.open("cave.jpeg") as img: odd_img = Image.new("RGB", img.size) even_img = Image.new("RGB", img.size) for h in range(img.height): for w i..
이번 포스트에서는 Python Challenge의 Level 10 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 소 그림과 "len(a[30])=?"라는 식이 있다. 해당 식을 풀어내면 되는 것으로 보인다. ## 문제 풀이 : 개발자 도구를 확인해보면 다음과 같은 경로를 볼 수 있다. 해당 경로에 접속해보겠다. ### 공격문 : http://www.pythonchallenge.com/pc/return/sequence.txt ### 실행 결과 : 문제 화면에 나와 있는 리스트 a이다. 해당 리스트의 규칙을 찾아내면 30번째값을 알아낼 수 있을 것 같다. 실제 풀이한 결과, 해당 리스트는 다음과 같은 규칙을 가진다. 이 규칙을 활용하여 파이썬 자동화 코드를 작성하..
이번 포스트에서는 Python Challenge의 Level 9 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 나무 그림 하나가 출력된다. 개발자도구를 확인해보면 다음과 같은 주석 부분이 있다. 점을 연결하라는 제목이 있다. 즉 first+second를 연결하면 될 것 같다. ## 문제 풀이 : 파이썬의 PIL 라이브러리를 이용하여 first와 second 배열의 값들을 연결해보겠다. ### 공격 코드 : from PIL import Image, ImageDraw first = [146, 399, 163, 403, 170, 393, 169, 391, 166, 386, 170, 381, 170, 371, 170, 355, 169, 346, 167, 335, 17..
이번 포스트에서는 Python Challenge의 Level 8 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : missing link를 찾으면 될 것 같다. ## 문제 풀이 : 개발자 도구를 이용하여 페이지 소스를 확인해보면 다음과 같다. ### 실행 결과 : 중간에 "../return/good.html"이라는 링크가 보인다. 해당 링크로 접속해보겠다. ### 링크 : http://www.pythonchallenge.com/pc/return/good.html ### 실행 결과 : 사용자이름과 비밀번호를 입력하라는 창이 있다. 여기서 사용자이름과 비밀번호는 위에 페이지 소스의 주석 부분이다. 해당 주석 부분을 자세히 보면 공통적으로 앞에 "BZh91AY&SY"가..
이번 포스트에서는 Python Challenge의 Level 7 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 중간에 픽셀이 존재하는 사진 한 장이 출력되어 있다. 해당 문제는 포렌식으로 접근하면 될 것 같다. ## 문제 풀이 : 해당 이미지를 다운로드 하여 속성을 확인해보면 다음과 같다. ### 실행 결과 : 높이가 95인 것을 알 수 있다. 사진 속 픽셀은 중간 쯤에 있으니 대략 95 // 2에 위치한다고 볼 수 있다. 이어서 해당 픽셀의 RGB 값을 아스키코드로 출력해보도록 하겠다. ### 공격 코드 : from PIL import Image imgfile = Image.open("oxygen.png") for i in range(imgfile.size[..
이번 포스트에서는 Python Challenge의 Level 6 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 기부하라는 버튼이 있으며 개발자 도구를 이용하여 확인해보며 이라는 힌트를 얻을 수 있다. ## 문제 풀이 : channel.zip으로 접속해보겠다. ### 실행 결과 : zip 파일이 다운로드가 되었으며, 해당 파일을 압축해제하면 위와 같이 여러 텍스트 파일이 존재한다. readme.txt를 확인해보면 90052번부터 시작하며 정답이 zip 파일 안에 있다고 한다. 90052.txt 파일을 확인해보겠다. ### 실행 결과 : 위와 같이 Next nothing이 출력된 것을 확인할 수 있다. 그럼 파이썬 자동화 코드를 작성해서 최종 nothing을 알..
이번 포스트에서는 Python Challenge의 Level 5 문제에 대해 다루겠다. 문제를 클릭하면 다음과 같은 페이지가 출력된다. ## 문제 해석 : 사진 한 장과 "발음해봐라"는 문구가 나와 있다. 소스코드를 확인해보니 다음과 같다. "peak hell의 발음이 친숙하다?"라는 문구가 나와 있으며, banner.p라는 파일이 있다. ".p"라는 확장자를 통해 해당 파일은 파이썬의 피클파일인 것을 알 수 있다. ## 문제 풀이 : 먼저 해당 피클 파일을 실행해보겠다. ### 공격 코드 : import pickle from urllib.request import urlopen data = pickle.load(urlopen("http://www.pythonchallenge.com/pc/def/bann..