소개
Hashcat은 강력하고 널리 사용되는 비밀번호 복구 도구입니다. 크래킹 세션을 실행할 때, Hashcat은 결과를 관리할 방법이 필요합니다. 어떤 비밀번호가 성공적으로 크래킹되었고, 어떤 것이 여전히 해결되지 않았는지 파악하는 것은 매우 중요합니다.
이 실습에서는 Hashcat의 출력을 관리하는 기본 사항을 배웁니다. 크래킹된 비밀번호를 자동으로 저장하는 hashcat.potfile에 대해 알아보고, 크래킹된 비밀번호를 표시하는 --show, 결과를 특정 파일로 저장하는 -o, 그리고 아직 크래킹되지 않은 해시를 식별하는 --left와 같은 명령줄 옵션 사용법을 익힙니다. 이러한 기능을 숙달하는 것은 효과적인 비밀번호 감사 및 복구 워크플로우를 위해 필수적입니다.
hashcat.potfile의 목적 이해하기
이 단계에서는 Hashcat의 핵심 구성 요소인 hashcat.potfile에 대해 알아봅니다. 향후 세션에서 동일한 해시를 다시 크래킹하는 것을 방지하기 위해, Hashcat은 성공적으로 크래킹된 모든 해시와 그에 대응하는 평문 비밀번호를 파일에 자동으로 저장합니다. 이 파일을 "potfile"이라고 합니다. 기본적으로 이름은 hashcat.potfile이며 ~/.local/share/hashcat/ 디렉토리에 위치합니다.
기본적인 사전 공격(dictionary attack)을 실행하여 몇 가지 해시를 크래킹해 보겠습니다. 이 과정에서 potfile이 생성됩니다. MD5 해시가 포함된 hashes.txt 파일과 잠재적인 비밀번호가 담긴 wordlist.txt 파일이 준비되어 있습니다.
다음 명령어를 실행하여 공격을 시작하세요:
hashcat -m 0 -a 0 hashes.txt wordlist.txt
명령어에 대한 설명은 다음과 같습니다:
-m 0: 해시 유형을 지정하며,0은 MD5를 의미합니다.-a 0: 공격 모드를 지정하며,0은 단순 사전 공격(straight dictionary attack)입니다.hashes.txt: 크래킹할 해시가 포함된 입력 파일입니다.wordlist.txt: 시도할 비밀번호가 포함된 사전 파일입니다.
Hashcat이 시작되는 것을 볼 수 있습니다. 사전 파일에 모든 해시에 대한 올바른 비밀번호가 포함되어 있으므로 프로세스는 빠르게 완료됩니다.
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: hashes.txt
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Base.......: File (wordlist.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: ... H/s (0.00ms) @ Accel:128 Loops:1 Thr:1 Vec:8
Recovered........: 4/4 (100.00%) Digests, 0/1 (0.00%) Salts
Progress.........: 5/5 (100.00%)
Rejected.........: 0/5 (0.00%)
Restore.Point....: 5/5 (100.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: password -> testing
Hardware.Mon.#1..: Temp: 46c Fan: 33%
...
Started: ...
Stopped: ...
출력 결과를 보면 4개의 해시가 모두 복구되었음을 알 수 있습니다. 즉, hashcat.potfile이 생성되었고 결과가 저장되었습니다.
potfile 내의 크래킹된 해시-비밀번호 쌍 확인하기
이 단계에서는 hashcat.potfile의 내용을 직접 확인해 봅니다. 이를 통해 Hashcat이 크래킹된 자격 증명을 어떻게 저장하는지 이해할 수 있습니다. 형식은 간단하고 효율적입니다. 각 줄에는 해시, 콜론 구분 기호, 그리고 크래킹된 평문 비밀번호가 포함되어 있습니다.
potfile의 내용을 보려면 cat 명령어를 사용하세요. 파일은 홈 폴더 내의 숨겨진 디렉토리에 있습니다.
cat ~/.local/share/hashcat/hashcat.potfile
이전 단계에서 성공적으로 크래킹된 해시-비밀번호 쌍이 출력됩니다.
5f4dcc3b5aa765d61d8327deb882cf99:password
e10adc3949ba59abbe56e057f20f883e:123456
d8578edf8458ce06fbc5bb76a58c5ca4:qwerty
f9664ea1803311b35f81d07d8c9e072d:lab
보시다시피, 이 파일에는 wordlist.txt의 비밀번호와 일치하는 hashes.txt의 4개 해시가 포함되어 있습니다. potfile을 직접 보는 것은 구조를 이해하는 데 유용하지만, 수천 개의 비밀번호가 크래킹되는 실제 상황에서는 내용이 너무 많아 읽기 어려울 수 있습니다. 다음 단계에서는 특정 작업의 결과를 더 효율적으로 확인하는 방법을 배웁니다.
'--show'를 사용하여 특정 해시 목록의 크래킹된 비밀번호 표시하기
이 단계에서는 결과를 확인하는 더 실용적인 방법을 배웁니다. 전체 potfile을 수동으로 읽는 대신, Hashcat의 --show 옵션을 사용할 수 있습니다. 이 명령어는 Hashcat에게 주어진 해시 목록을 potfile과 비교하여 해당 목록에서 크래킹된 해시만 표시하도록 지시합니다. 새로운 크래킹 작업을 수행하지는 않습니다.
이는 여러 세션의 결과가 섞여 있는 거대한 potfile을 뒤질 필요 없이, 특정 대상 목록에 대한 결과만 빠르게 확인하고 싶을 때 매우 유용합니다.
다음 명령어를 실행하여 hashes.txt 파일에서 크래킹된 해시를 표시하세요:
hashcat -m 0 --show hashes.txt
Hashcat은 즉시 potfile을 확인하고 깔끔하고 읽기 쉬운 형식으로 결과를 출력합니다.
5f4dcc3b5aa765d61d8327deb882cf99:password
e10adc3949ba59abbe56e057f20f883e:123456
d8578edf8458ce06fbc5bb76a58c5ca4:qwerty
f9664ea1803311b35f81d07d8c9e072d:lab
출력 결과는 깔끔하며 "hashes.txt에서 이미 크래킹된 해시는 무엇인가?"라는 질문에 직접적인 답을 줍니다. 이것이 특정 세션에서 크래킹된 비밀번호를 확인하는 권장 방법입니다.
'-o'를 사용하여 크래킹된 비밀번호를 전용 출력 파일로 저장하기
이 단계에서는 크래킹 결과를 별도의 파일로 저장하는 방법을 배웁니다. potfile은 Hashcat을 위한 훌륭한 내부 데이터베이스이지만, 보고서 작성이나 분석을 위해 깔끔한 출력 파일이 필요한 경우가 많습니다. 이는 -o (또는 --outfile) 옵션을 사용하여 수행할 수 있습니다.
공격 명령어에 -o를 추가하고 --show와 결합하면, Hashcat은 potfile에서 크래킹된 해시-비밀번호 쌍을 가져와 지정된 출력 파일에 기록합니다. 이는 해시가 이미 크래킹되어 potfile에 존재할 때, 해당 결과를 빠르게 추출하여 전용 파일로 저장하는 데 특히 유용합니다.
--show와 -o 옵션을 모두 사용하여 크래킹된 결과를 저장해 보겠습니다.
hashcat -a 0 -m 0 --show -o cracked.txt hashes.txt wordlist.txt
Hashcat은 즉시 potfile을 확인하고 모든 크래킹된 비밀번호 쌍을 cracked.txt에 기록합니다.
이제 새로 생성된 출력 파일의 내용을 확인해 봅시다.
cat cracked.txt
출력 결과는 크래킹된 쌍의 깔끔한 목록이 될 것입니다.
5f4dcc3b5aa765d61d8327deb882cf99:password
e10adc3949ba59abbe56e057f20f883e:123456
d8578edf8458ce06fbc5bb76a58c5ca4:qwerty
f9664ea1803311b35f81d07d8c9e072d:lab
이제 cracked.txt 파일은 메인 potfile과 별도로, 이 특정 공격의 성공적인 결과를 담은 휴대 가능한 기록이 되었습니다.
'--left'를 사용하여 크래킹되지 않은 해시 확인하기
이 단계에서는 크래킹되지 않은 해시를 식별하는 방법을 배웁니다. 이는 해결된 해시를 아는 것만큼이나 중요합니다. 이를 통해 후속 공격(예: 다른 단어장이나 공격 모드 사용)에서 노력을 집중할 수 있기 때문입니다. Hashcat은 이를 위해 --left 옵션을 제공합니다.
--left 플래그는 입력 목록 중에서 potfile에 존재하지 않는 해시를 표시합니다.
hashes.txt에서 아직 크래킹되지 않은 해시가 있는지 확인해 봅시다.
hashcat -m 0 --left hashes.txt
목록의 모든 해시가 크래킹되었으므로 출력은 비어 있을 것입니다(크래킹되지 않은 해시가 남아 있지 않음).
--left를 -o 옵션과 결합하여 남은 해시를 새 파일로 저장할 수도 있습니다. 이는 다음 크래킹 시도를 위한 작업 목록을 만드는 일반적인 관행입니다.
hashcat -m 0 --left -o uncracked.txt hashes.txt
이제 uncracked.txt 파일의 내용을 확인하세요.
cat uncracked.txt
모든 해시가 크래킹되었으므로 uncracked.txt 파일은 비어 있게 됩니다.
요약
이 실습에서는 Hashcat의 출력을 관리하고 해석하는 필수 기술을 배웠습니다. 이러한 기술은 효율적인 비밀번호 크래킹 워크플로우를 구성하는 데 기본이 됩니다.
배운 내용은 다음과 같습니다:
- 모든 크래킹된 비밀번호를 위한 자동 데이터베이스로서의
hashcat.potfile역할. hashcat --show를 사용하여 특정 해시 목록에서 크래킹된 비밀번호를 깔끔하게 표시하는 방법.-o옵션을 사용하여 보고 및 분석을 위해 크래킹된 비밀번호를 전용 출력 파일로 저장하는 방법.--left옵션을 사용하여 크래킹되지 않은 해시를 분리하고 향후 작업에 집중하는 방법.
이러한 출력 및 파일 관리 기능을 숙달함으로써, Hashcat을 사용하여 더욱 체계적이고 효율적이며 효과적인 비밀번호 복구 세션을 수행할 수 있습니다.



