26th hackingcamp ctf/Misc
26회 해킹캠프 CTF : md5 - [Misc]
Roronoa
2023. 2. 14. 22:24
반응형
문제 설명
그림 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
파이썬의 itertools라는 라이브러리를 이용하였다. 파이썬 itertools 라이브러리는 조합, 순열 등 다양한 기능을 가지고 있다.
나는 product라는 함수를 사용하였고 이 함수는 데카르트곱을 리턴한다.
hash값과 같은 문자열을 만나게 되면 그 즉시 break를 하고 해당 문자열을 출력한다.
hash값과 같은 문자열이 HCAMPpoalA라고 출력이된다.
걸린시간은 대략 3분정도이다.
플래그
HCAMP{HCAMPpoalA}
반응형