
webhacking.kr - old-04 풀이
O_o22
·2022. 9. 5. 23:49
접속하면, 알수없는 값과 입력 가능한 제출란이 보인다.
view-source를 눌러보면,
위와 같은데 중간에 있는 부분이 핵심인 것 같다.
key 값이 chall4 와 같으면 solve(4)가 된다는 의미같다.
단 hash값이 나오는데, 이는 10000000 ~ 99999999 중 랜덤한 1개의 수와 salt_for_you를 합친 것이다.
그리고 chall4 값에 hash 값을 넣는다.
이후 sha1 를 이용해서 hash를 500번 해시 한다.
첫 페이지에서 아래와 같은 부분과 소스코드에서 겹치는 부분이 있다.
<tr><td colspan=3 style=background:silver;color:green;><b><?=$hash?>
즉 처음에 입력되있던 값은 500번 sha1을 한 hash 값이라는 것
입력한 값이 key로 사용된다.
즉 key 값을 입력하고, 그 값이 만약 chall4와 같다면 문제는 해결된다.
chall4 = (10000000~99999999 중 한 수)salt_for_you 인데, 이 값을 500번 sha1 했으니,
나온 결과물을 가지고 해시 하기 전의 값을 알아내면 된다.
여기까지 보았을 때 고민이 드는 것이, 레인보우 테이블을 만들면 될 것 같은데,
10000000 부터 99999999 경우의 수와 이를 각각 500번씩 수행해야 해서, 시간이 매우 오래걸릴 수도 있겠다는 생각이 들었다. 그래도 일단 해보았다.
역시 문제를 푸는데 싸지방 컴퓨터로 해서 그런지, gitpod이 튕겼다..
문제 푸는 환경이 싸지방이어서 pycharm을 이용해서 10000000 ~ 20000000 정도로 먼저 구하고, 얻어맞도록 사이트를 계속 새로고침 했다.
from hashlib import sha1
for cnt_i in range(10000000, 99999999):
case = str(cnt_i) + "salt_for_you"
for cnt_j in range(0, 500):
# sha1 함수 사용,
# encode('utf-8') : sha1 해쉬시 바이트 문자열이 필요
# hexdigest() : 결과를 16진수 문자열로 반환
hash = sha1(case.encode('utf-8')).hexdigest()
hashd = "b7384823a5c877499db9a08204bea3b1ae7d48f8"
if (hash == hashd):
print("found : ", hashd)
print("rand_num : ", cnt_i)
break
'네트워크, 웹 (Network & Web) > Wargame' 카테고리의 다른 글
webhacking.kr - old-06 풀이 (0) | 2022.10.03 |
---|---|
webhacking.kr - old-05 풀이 (0) | 2022.09.06 |
webhacking.kr - old-03 풀이 (0) | 2022.09.05 |
webhacking.kr - old-02 풀이 (0) | 2022.09.04 |
webhacking.kr - old-01 풀이 (0) | 2022.09.04 |