Hashcat 에서 조합 공격 수행하기

Kali LinuxBeginner
지금 연습하기

소개

이 실습에서는 강력하고 다재다능한 비밀번호 복구 도구인 Hashcat 을 사용하여 조합 공격 (combinator attack) 이라는 특정 비밀번호 크래킹 기법을 탐구합니다. 조합 공격은 두 개의 별도 단어 목록 (wordlist) 을 결합하여 비밀번호 후보를 생성하는 방법입니다. 예를 들어, 한 목록에 "password"가 있고 다른 목록에 "123"이 있다면, 이 공격은 "password123"이라는 조합을 테스트합니다.

이 접근 방식은 두 단어를 연결하거나 단어와 숫자 또는 기호 시퀀스를 연결하여 형성된 비밀번호에 특히 효과적입니다. 이 실습 전반에 걸쳐 단어 목록을 준비하고, 적절한 Hashcat 명령을 구성하고, 샘플 해시 (hash) 에 대한 공격을 실행하고, 결과를 확인하는 방법을 배우게 됩니다.

조합 공격 개념 이해하기

이 단계에서는 Hashcat 의 조합 공격 핵심 개념에 대해 배웁니다. 이 공격은 공격 모드 -a 1로 지정됩니다. 첫 번째 단어 목록에서 기본 단어를 가져와 두 번째 단어 목록의 단어를 뒤에 붙여 새로운 비밀번호 후보를 생성하는 방식으로 작동합니다. 이 과정은 두 목록의 모든 단어에 대해 반복됩니다.

예를 들어, 두 개의 목록이 있다고 가정해 봅시다.

  • wordlist1.txt: admin, user
  • wordlist2.txt: 123, !

조합 공격은 다음과 같은 후보를 생성합니다. admin123, admin!, user123, user!.

이 방법은 단일의 거대한 사전 파일 (dictionary file) 없이도 잠재적인 비밀번호 공간을 크게 확장합니다. Hashcat 의 도움말 메뉴에서 공격 모드를 확인하는 것부터 시작하겠습니다.

조합 공격에 대한 정보를 필터링하기 위해 다음 명령을 실행합니다.

hashcat --help | grep "Combinator"

출력에서 조합 공격과 해당 번호를 명시적으로 언급하는 줄을 보게 될 것입니다.

-a, --attack-mode         |      ## | Attack-mode
...
                          |      1 | Combinator
...

이는 조합 공격에 사용해야 할 올바른 플래그가 -a 1임을 확인시켜 줍니다.

공격에 사용할 두 개의 별도 단어 목록 생성하기

이 단계에서는 조합 공격에 사용할 두 개의 단어 목록을 생성합니다. 이 실습에서는 작고 사용자 정의된 두 개의 단어 목록을 만들 것입니다. 실제 시나리오에서는 이러한 목록이 훨씬 더 크고 더 일반적인 단어, 이름 및 패턴을 포함할 것입니다.

우리의 목표 비밀번호는 일반적인 단어와 숫자 시퀀스의 조합입니다. 단어 부분은 wordlist1.txt에, 숫자 부분은 wordlist2.txt에 배치할 것입니다.

먼저, 몇 가지 잠재적인 기본 단어를 포함하는 wordlist1.txt를 생성합니다. 줄 바꿈 (\n) 을 처리하기 위해 -e 플래그와 함께 echo 명령을 사용합니다.

echo -e "admin\nuser\npassword\nguest" > wordlist1.txt

다음으로, 몇 가지 일반적인 숫자 접미사를 포함하는 wordlist2.txt를 생성합니다.

echo -e "2024\n!@#\n123\nxyz" > wordlist2.txt

이제 cat 명령을 사용하여 두 파일의 내용을 확인하여 올바르게 생성되었는지 확인합니다.

첫 번째 단어 목록 확인:

cat wordlist1.txt

예상 출력:

admin
user
password
guest

두 번째 단어 목록 확인:

cat wordlist2.txt

예상 출력:

2024
!@#
123
xyz

이 두 개의 단어 목록을 통해 Hashcat 은 이제 password123이라는 후보 비밀번호를 형성할 수 있습니다.

두 개의 단어 목록으로 조합 공격 명령 구성하기

이 단계에서는 조합 공격을 위한 전체 Hashcat 명령을 구성합니다. 실행하기 전에 명령의 각 부분이 무엇을 하는지 이해하는 것이 중요합니다.

조합 공격의 일반적인 구문은 다음과 같습니다: hashcat [options] <hash-file> <wordlist1> <wordlist2>

우리가 사용할 명령의 세부 사항은 다음과 같습니다:

  • hashcat: 실행 가능한 프로그램입니다.
  • -m 0: 해시 유형을 지정합니다. 모드 0은 MD5 에 해당합니다.
  • -a 1: 공격 모드를 1로 설정하며, 이는 조합 공격입니다.
  • hash.txt: 우리가 크랙하려는 해시가 포함된 파일입니다. 이 파일은 실험실 설정 중에 생성되었습니다.
  • wordlist1.txt: 비밀번호 후보의 왼쪽 부분을 포함하는 첫 번째 단어 목록입니다.
  • wordlist2.txt: 비밀번호 후보의 오른쪽 부분을 포함하는 두 번째 단어 목록입니다.

전체 공격을 실행하기 전에 --show 플래그를 사용하는 것이 좋습니다. 이 플래그는 새로운 크랙 세션을 시작하지 않고 이미 크랙되어 potfile 에 저장된 해시를 표시하도록 Hashcat 에 지시합니다.

--show 플래그를 사용하여 명령을 실행하여 대상 해시가 아직 크랙되지 않았는지 확인해 봅시다:

hashcat -m 0 -a 1 hash.txt wordlist1.txt wordlist2.txt --show

이것이 처음 실행하는 것이므로 명령은 출력을 생성하지 않을 것이며, 이는 예상된 결과입니다. 이는 실제 공격을 진행할 준비가 되었음을 확인시켜 줍니다.

공격 실행 및 조합 결과 관찰

이제 --show 플래그 없이 조합 공격을 실행할 차례입니다. 이렇게 하면 크랙 프로세스가 시작됩니다. Hashcat 은 두 개의 단어 목록을 읽고, 이를 조합하고, 결과를 해싱한 다음, hash.txt의 대상 해시와 비교합니다.

터미널에서 다음 명령을 실행합니다:

hashcat -m 0 -a 1 hash.txt wordlist1.txt wordlist2.txt

Hashcat 이 초기화되고 상태 화면이 표시됩니다. 우리의 단어 목록이 매우 작기 때문에 프로세스는 거의 즉시 완료됩니다. 출력에는 해시가 크랙되었음이 표시됩니다.

다음과 유사한 출력을 볼 수 있습니다 (속도 및 시간과 같은 일부 세부 정보는 다를 수 있습니다):

hashcat (v6.2.6) starting

...

Session..........: hashcat
Status...........: Cracked
Hash.Name........: MD5
Hash.Target......: e10adc3949ba59abbe56e057f20f883e
Time.Started.....: ...
Time.Estimated...: 0 secs (0.00ms)
Guess.Base.......: File (wordlist1.txt), File (wordlist2.txt)
Guess.Queue......: 2/2 (100.00%)
Speed.#*.........: ... H/s (...)
Recovered........: 1/1 (100.00%) Digests
Progress.........: 16/16 (100.00%)
Rejected.........: 0/16 (0.00%)
Restore.Point....: 4/4 (100.00%)
Restore.Sub.#*...: 4/4 (100.00%)
Candidates.#*....: 16

Cracked Hashes: 1/1
e10adc3949ba59abbe56e057f20f883e:password123

...
All hashes have been recovered

Started: ...
Stopped: ...

e10adc3949ba59abbe56e057f20f883e:password123 줄은 원본 해시와 크랙된 평문 비밀번호를 명확하게 보여줍니다. 이는 우리의 공격이 성공했음을 확인시켜 줍니다.

조합된 비밀번호 결과에 대한 Potfile 검토

이 단계에서는 Hashcat potfile 을 검토합니다. potfile (hashcat.potfile) 은 Hashcat 이 성공적으로 크랙된 해시와 해당 비밀번호를 자동으로 저장하는 일반 텍스트 파일입니다. 이는 이미 해결된 해시를 다시 크랙하는 데 시간을 낭비하는 것을 방지하는 유용한 기능입니다.

기본적으로 potfile 은 ~/.local/share/hashcat/ 디렉토리에 있습니다.

cat 명령을 사용하여 potfile 의 내용을 보고 결과가 저장되었는지 확인합니다:

cat ~/.local/share/hashcat/hashcat.potfile

출력에는 해시와 크랙된 비밀번호가 콜론으로 구분되어 표시됩니다:

e10adc3949ba59abbe56e057f20f883e:password123

이는 공격이 성공했으며 결과가 이제 potfile 에 영구적으로 저장되었음을 확인시켜 줍니다. 동일한 공격을 다시 실행하면 Hashcat 은 전체 크랙 프로세스를 다시 실행하는 대신 이 파일에서 결과를 즉시 검색하기 위해 --show 플래그를 사용합니다.

요약

이 실습에서는 Hashcat 을 사용하여 조합 공격을 성공적으로 수행했습니다.

다음과 같은 내용을 배웠습니다:

  • Hashcat 에서 조합 공격 (-a 1) 의 개념 이해하기.
  • 비밀번호 후보의 기반으로 사용할 두 개의 별도 단어 목록 생성하기.
  • 공격 모드, 해시 유형 및 입력 파일을 지정하여 올바른 Hashcat 명령 구성하기.
  • 단어와 숫자 시퀀스를 조합하여 공격을 실행하고 MD5 해시를 성공적으로 크랙하기.
  • 성공적인 크랙 결과를 확인하기 위해 hashcat.potfile을 찾고 검토하기.

조합 공격은 특히 예측 가능한 연결 패턴을 따르는 비밀번호를 다룰 때 유용한 기본적인 비밀번호 크랙 기법입니다.