26th hackingcamp ctf/Misc

26회 해킹캠프 CTF : md5 - [Misc]

Roronoa 2023. 2. 14. 22:24
반응형

문제 설명

[그림 1] 문제 정보

그림 1을 보면 HCAMP로 시작하는 임의 문자열에서 md5의 해시값이 058eaed9ece7e6c925f4de372975af27인 것을 찾으면 된다.

범위가 a-z,A-Z이므로 브루트 포스를 이용하여 문제를 해결할 수 있겠다고 생각을 하였다.

 

내 컴퓨터가 별로 좋지 않기 때문에 colab에서 진행을 하였다.

 

코드

import hashlib
import itertools

hash_value = '058eaed9ece7e6c925f4de372975af27'
alpha_lower_to_upper = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']


for len in range(1,6):
    for alpha in itertools.product(alpha_lower_to_upper, repeat=len):
        hash_1 = "HCAMP"
        hash_1 += "".join(alpha)
        binary = hash_1.encode("utf-8")
        enc = hashlib.md5()
        enc.update(binary)
        result = enc.hexdigest()
        #print(f"str = {hash_1}, hash = {result}")
        if hash_value == result:
            print(f"same_hash = {hash_1}")
            break
    if hash_value == result:
        break

[그림 2] 코드

파이썬의 itertools라는 라이브러리를 이용하였다. 파이썬 itertools 라이브러리는 조합, 순열 등 다양한 기능을 가지고 있다.

나는 product라는 함수를 사용하였고 이 함수는 데카르트곱을 리턴한다.

 

hash값과 같은 문자열을 만나게 되면 그 즉시 break를 하고 해당 문자열을 출력한다.

hash값과 같은 문자열이 HCAMPpoalA라고 출력이된다.

 

[그림 3] 걸린 시간

걸린시간은 대략 3분정도이다.

 

플래그

HCAMP{HCAMPpoalA}
반응형