[ webhacking.kr ] old-04
포스트
취소

[ webhacking.kr ] old-04

문제 분석


image-20230704123635915

비밀번호를 알아내면 문제를 풀 수 있을 거 같다.


image-20230704123711432

소스코드를 보면 10000000에서 99999999 사이의 임의의 수와 문자열 “salt_for_you”을 합치고 sha1으로 500번 암호화 하고 있다.

해시값을 보고 랜덤값을 알아내면 문제를 해결할 수 있다.



문제 풀이


sha1은 수학적으로 취약점이 발견되었으나 그것을 이용해서 문제를 해결하긴 어렵다.

따라서 실제로 500번 해시를 한 리스트를 만들고서 해시값을 대조해서 찾는 방법을 사용해야 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
import hashlib

def sha1_500(text):
    for i in range(500):
        text = hashlib.sha1(text.encode()).hexdigest()
    return text

if __name__ == "__main__":
    f = open("dict.txt",'w')

    for i in range(10000000,20000000):
        text = str(i) + "salt_for_you"
        f.write(str(i) + ":" + sha1_500(text) + "\n")
        print(str(i) + ":" + sha1_500(text))

위의 소스코드와 같이 리스트를 만들 수 있다.

여기서 10000000부터 99999999까지 전부 찾기에는 시간이 오래 걸리므로 1/10만 구해서 시간을 아낄 수 있다.


image-20230704124226288

리스트가 만들어지면 메모장 같은 편집 프로그램에서는 양이 많아 감당할 수 없으므로 grep등의 방법을 이용해서 검색해야한다.

몇 번 시도하다 보면 하나씩 걸리는게 있을 것이다.


image-20230704124526288

이 숫자 뒤에 “salt_for_you”를 붙여서 답을 제출하면 문제를 풀 수 있다.