꿈이 너무 많은 한 대학생의 공간

Webhacking.kr(old) 4번 문제풀이 본문

정보보안 공부/Webhacking.kr(old)

Webhacking.kr(old) 4번 문제풀이

청울울청 2020. 5. 2. 22:35

제가 SQL 공격에 약해서 앞 문제를 건너뛰었습니다.

조금 더 공부를 하고 포스팅하겠습니다...

 

이번 문제는 암호와 관련되어 있습니다.

새로고침을 해보니 회색 칸 내부는 계속 바뀌는거 보니 일정한 값은 아닌가 보네요.

password 내부에 값을 전송하면 될 것 같습니다.

소스를 확인해보면 대충 알고리즘은 10000000 부터 99999999 의 수를 랜덤으로 뽑고 그 뒤에 salt_for_you 문자열을 붙여 암호화 전 문장을 만든 후 500번 해쉬화를 반복해 패스워드로 지정하는 것 같습니다.

 

생각보다 단순한 알고리즘이니 파이썬으로 쉽게 복호화 알고리즘을 만들 수 있습니다.

import hashlib

for i in range(10000000, 100000000):
	password = str(i) + 'salt_for_you'
    	for i in range(0, 500):
    		password = sha1(password.encode('utf-8')).hexdigest()
    		if(password == "f69662b906053f3b1cbce828e00f8a4cf3b6b546"): 
    			# password 와 비교하는 문자열에는 
    			# 아까 회색 박스 안에서 봤던 암호화된 문자열을 입력하면 됩니다
    			print(i + ' : ' + password)
    			exit(0)

(작성 중 갑자기 파이썬 모듈 불러오기 중 오류가 나서 실제로 동작해본 코드는 아니지만, 알고리즘은 맞을 겁니다)

 

저는 아까 실수로 새로고침을 눌러서 위의 스크린샷의 암호화된 문장과 코드블럭의 암호화된 문장이 다르니 참고해주세요. 암호화된 문장은 모든 사용자마다 모두 다릅니다!

 

저걸 돌리면 답이 나옵니다. i의 값을 10000000 부터 100000000 까지 반복하고, 해쉬 암호화를 500번 반복하니 100000000 - 10000000 = 90000000 X 500 = 45000000000‬ 번의 연산을 반복해야 하네요.

저같은 경우는 약 25분 걸려서 찾아냈습니다. 

그렇게 나온 숫자(i의 값) 과 salt_for_you 를 패스워드 input 칸에 넣으면 해결할 수 있습니다.

Comments