글 작성자: 근삼이

WEB Level 7

level7은 들어가자마자 눈이 즐겁습니다.


페이지의 동작을 확인하기 위해서, 전체 페이지의 가운데에 위치한 YES버튼을 눌러보았더니, “Fail.. Your too slow" 라는 메시지만, 뜨고 반응이 없습니다. 페이지의 소스를 확인해 보니, 주석으로 <!-- Hint : Faster and Faster --> 라는 힌트가 있었습니다. 정황으로 보아, 저 YES라는 버튼을 최대한 빨리 눌러야 하는 것으로 보입니다.



프록시 툴로, 페이지를 요청할 때, 아쉽지만, 아이유와 윤아의 사진, 개행<br> 들을 모두 제거하고, 페이지와 YES버튼의 구조만 남겨두고, 요청하여 YES버튼을 재빨리 눌러보았지만, 아무리 해보아도 해결이 안되는 것으로 보아, 더 빠른 반응을 요구하거나, 서버에서 페이지를 제공한 시점으로 부터의 응답시간을 체크하는 것으로 판단이 되어서 다른 방법을 시도해 보기로 하였습니다.



브라우저의 콘솔 기능입니다. 최근 나오는 대부분의 브라우저에는 UI는 조금씩 다르지만, 위와 같은 개발자 도구들이 자체적으로 내장되어 나옵니다. 대부분 <F12>키를 통해서 바로 개발자 도구를 호출 할 수 있습니다. (Chrome, Firefox, Internet Explorer 등등에서 확인했습니다.) 개발자 도구에서는 대양한 기능들을 제공하며, 브라우저 차제에서 지원하는 도구이니 만큼, 그 성능이나 UI가 상당히 다양하고 직관적으로 구성되어 있어서 그 기능들을 알아놓으면 굉장히 다양하게 이용할 수 있습니다.


브라우저WindowsLinuxMac
크롬(Chrome)Ctrl + Shift + JCtrl + Shift + JCmd + Option + J
파이어폭스(FireFox)Ctrl + Shift + KCtrl + Shift + KCmd + Option + K
사파리(Safari)Ctrl + Alt + C-Cmd + Option + C
인터넷 익스플로러(Internet Explorer11)F12--

개발자 도구 콘솔창 단축키


여러 가지 기능들 중에서도 이번에 활용할 기능은 콘솔기능입니다. 개발자는 콘솔을 이용해 자바스크립트를 실행해 볼 수도 있고, 실제로 페이지 요청도 할 수 있습니다. 

요청 정보를 분석해서, YES버튼을 클릭할 때 서버에 요청하는 페이지의 경로인 http://suninatas.com/Part_one/web07/web07.asp를 브라우저에 입력하고, 콘솔에서 document.frm.submit();이라는 스크립트를 실행시켜서 YES버튼을 누르는 것 같은 효과를 줄 수 있습니다. 

단번에 성공하지는 않지만, 위쪽 화살표로document.frm.submit(); 스크립트를 계속 불러와 반복적으로 값을 전달해 주면, 곧 Congratulation! 이라는 메시지와 함께 level7의 AUTH KEY를 받을 수 있습니다. 

하지만, 역시나 이번 방법도 100%의 확률이 아니었습니다. 저는 좀 더 빠르고 정확한 방법으로 요청을 해서, 이 문제를 해결해 보고 싶었습니다. 


그래서 파이썬 코드를 작성해서 페이지 요청직후, YES버튼을 누른 효과와 같은 정보를 즉시 전달해보도록 하였습니다. 결과는 성공이었습니다. 아래는 100% 확률로 문제를 해결할 수 있는 코드입니다.

(쿠키정보는 자신의 현재 상태에 맞게 변경하여 적용하여야 합니다.)


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests
 
URL1="http://suninatas.com/Part_one/web07/web07.asp"
URL2="http://suninatas.com/Part_one/web07/web07_1.asp"
 
session1=requests.Session()
cookie={
    "ASPSESSIONIDQSAQARDT":"HDINHHNDFFMIMMMGMPKJKFEH"
    }
 
while True:
    req1=session1.get(URL1, cookies=cookie)
    req2=session1.get(URL2, cookies=cookie)
    
    if (req2.text.find("Your too slow"== -1) :
        index1=req2.text.find("Authkey")
        print ("\n\n")
        print (req2.text[ index1 : index1 + 18 ])
        input("\n\nPress any KEY to exit.....\n")
        exit (0)
    else :
        print ("Fail... Requests Again!")
cs


반응형