WEB/webhacking.kr (old)

webhacking.kr 4번

hongjw 2020. 2. 23. 19:29

challenge 4번 첫화면

view-soure 클릭 !

php 코드

sleep(지연시간) : 입력된 초만큼 php코드의 실행을 지연시키는 함수

$_SESSION['세션 변수이름'] : 세션이 생성되고 나면 세션 변수를 $_SESSION 배열에 등록할 수 있고, 생성된 변수는 $_SESSION['세션 변수이름']으로 접근할 수 있다.

rand(최소값, 최대값) : 난수 생성기

 

코드를 해석해보면, 'chall4'라는 세션이 존재하고 'chall4'세션 값이 $_POST['key']와 같으면 문제가 해결된다.

값이 같지않으면 $hash는 10000000~99999999사이의 값 중 하나에 "salt_for_you"를 더한 값으로 설정된다.

$hash는 'chall4'세션값이 되고, sha1해시로 500번 암호화한다.

그리고 그 500번 암호화된 값이 출력된 값이다. 

 

따라서 출력된 값을 500번 복호화한 후, Password에 입력하면 문제가 해결될 것이다.

여기서 우린 레인보우 테이블을 생각할 수 있다. (・ิω・ิ)

레인보우 테이블이란 해시함수를 사용하여 변환 가능한 모든 해시 값을 저장시켜 놓은 표이다. 보통 해시함수를 이용하여 저장된 비밀번호로 부터 원래의 비밀번호를 추출해 내는데 사용된다.

 

문제를 풀기 위해 레인보우 테이블을 만들어야 하는데, 10000000~99999999의 값을 다 만드는 것은 시간도 오래걸리고 용량도 많이 차지하기때문에 10000000~20000000까지만 만들고, 문제를 새로고침해서 암호값을 찾았다.

다음은 레인보우를 만들기 위한 파이썬 코드이다.

import hashlib

Done = False
filename = "파일경로/ch_4.txt"

f = open(filename,'w')
for i in range(10000000,20000000):
	key = str(i)+"salt_for_you"

	for j in range(0,500):
		key = hashlib.sha1(key.encode()).hexdigest()

	prt = str(i)+"->"+key+"\n"
	f.write(prt)
	print(str(i)+"Done")
	
f.close()

print("Finish")

코드를 실행하면, ch_4.txt 파일에 암호값이 생성된다.

문제에 나온 암호값을 ch_4.txt에서 찾아서 입력하면 해결 !!ㅎㅅㅎ

 

 

참고

>> https://m.blog.naver.com/PostView.nhn?blogId=diceworld&logNo=220252714995&proxyReferer=https%3A%2F%2Fwww.google.com%2F

>> http://tcpschool.com/php/php_cookieSession_session

>> https://ko.wikipedia.org/wiki/%EB%A0%88%EC%9D%B8%EB%B3%B4_%ED%85%8C%EC%9D%B4%EB%B8%94

'WEB > webhacking.kr (old)' 카테고리의 다른 글

webhacking.kr 44번  (0) 2020.03.19
webhacking.kr 40번  (0) 2020.03.19
webhacking.kr 61번  (0) 2020.02.19
webhacking.kr 59번  (0) 2020.02.18
webhacking.kr 58번  (0) 2020.02.18