John the Ripper Potfile 에서 해시 크랙하기

Kali LinuxBeginner
지금 연습하기

소개

John the Ripper (JtR) 는 인기 있는 비밀번호 크래킹 도구입니다. 비밀번호를 성공적으로 크랙하면, 그 결과는 john.pot이라는 파일에 저장되며, 이는 종종 "potfile"이라고 불립니다. 이는 JtR 이 미래에 동일한 해시를 다시 크랙하려고 시간을 낭비하는 것을 방지합니다.

이 랩에서는 John the Ripper 에 의해 비밀번호 크래킹 시도가 부분적으로 완료된 시나리오에서 작업하게 됩니다. 여러분의 임무는 어떤 해시가 크랙되지 않았는지 식별하고, 그런 다음 다른 강력한 도구인 Hashcat 을 사용하여 나머지 해시들을 크랙하는 것입니다. 이 워크플로우는 침투 테스트 및 보안 감사에서 흔히 사용되며, 여러 도구를 사용하여 결과를 극대화합니다.

다음 내용을 배우게 됩니다:

  • JtR potfile 을 찾고 이해하기.
  • 명령줄 도구를 사용하여 해시 목록을 추출하고 비교하기.
  • Hashcat 을 사용하여 나머지 해시에 대한 사전 공격 (dictionary attack) 수행하기.

기존 John the Ripper Potfile 찾기

이 단계에서는 john.pot 파일을 찾아서 검사합니다. 이 파일은 John the Ripper 가 성공적으로 크랙한 해시와 해당 평문 비밀번호를 저장하기 위해 자동으로 생성됩니다. 이 파일의 기본 위치는 사용자의 홈 디렉토리에 있는 .john이라는 숨겨진 디렉토리 내입니다.

저희 랩 환경은 시뮬레이션된 이전 크래킹 세션의 john.pot 파일로 미리 구성되어 있습니다. 해당 내용을 살펴보겠습니다.

cat 명령을 사용하여 potfile 의 내용을 표시하십시오. 모든 작업은 기본 ~/project 디렉토리에서 수행되지만, potfile 은 /home/labex/.john/에 위치합니다.

cat ~/.john/john.pot

JtR 이 이미 찾은 해시와 해당 비밀번호를 보여주는 다음과 같은 출력을 보게 될 것입니다.

$1$abc$gqNud23o1vjR/pYd9gH7k/:password123
$1$def$H9g2s3kLd/fG1hJkLpQ9r/:labex
$1$ghi$aB4c5dE6fG7hI8jK9lM0n/:secret

JtR Potfile 형식 이해하기

이 단계에서는 john.pot 파일의 구조를 분석합니다. 이 형식을 이해하는 것은 데이터를 처리하는 데 매우 중요합니다.

이전 단계에서 보았듯이, potfile 의 각 줄은 특정 형식을 따릅니다:

HASH:PLAINTEXT_PASSWORD

파일의 첫 번째 줄을 분석해 보겠습니다:

$1$abc$gqNud23o1vjR/pYd9gH7k/:password123

  • $1$abc$gqNud23o1vjR/pYd9gH7k/: 이것은 크랙된 전체 해시 문자열입니다. 이 형식 ( $1$로 시작) 은 일반적인 구형 Linux 시스템에서 사용되는 MD5-crypt 해시임을 나타냅니다.
  • :: 콜론은 구분 기호로 사용되어 해시와 비밀번호를 분리합니다.
  • password123: 이것은 해당 해시에 대한 평문 비밀번호입니다.

우리의 목표는 원본 목록 (all_hashes.txt) 의 해시 중 어떤 것이 이 potfile 에 존재하지 않는지 알아내는 것입니다. 이를 위해 먼저 john.pot의 각 줄에서 해시 부분만 분리해야 합니다. 다음 단계에서 이 작업을 수행할 것입니다. 이 현재 단계는 개념적 이해를 위한 것이므로 실행할 명령은 없습니다.

JtR Potfile 에서 해시 추출하기

이 단계에서는 john.pot 파일에서 해시 값만 추출합니다. 파일의 각 줄에서 섹션을 잘라내는 표준 Linux 유틸리티인 cut 명령을 사용할 수 있습니다.

cut에게 콜론 (:) 을 구분 기호로 사용하고 첫 번째 필드 (-f1) 를 추출하도록 지시할 것입니다. 출력은 현재 디렉토리 (~/project) 에 cracked_hashes.txt라는 새 파일로 리디렉션됩니다.

터미널에서 다음 명령을 실행하십시오:

cut -d: -f1 ~/.john/john.pot > cracked_hashes.txt

이제 파일 내용을 보고 파일이 올바르게 생성되었는지 확인하십시오:

cat cracked_hashes.txt

출력에는 해시 문자열만 포함되어야 합니다:

$1$abc$gqNud23o1vjR/pYd9gH7k/
$1$def$H9g2s3kLd/fG1hJkLpQ9r/
$1$ghi$aB4c5dE6fG7hI8jK9lM0n/

Hashcat 공격을 위한 해시 재포맷

이 단계에서는 JtR 이 크랙하지 못한 해시를 식별합니다. 모든 원본 해시가 포함된 파일 (all_hashes.txt) 과 이미 크랙된 해시가 포함된 파일 (cracked_hashes.txt) 이 있습니다. 이 두 파일을 비교하여 크랙되지 않은 해시만 포함하는 새 목록을 만들 수 있습니다.

이를 위해 grep 명령을 사용할 것입니다. 사용할 플래그는 다음과 같습니다:

  • -v: 일치하지 않는 줄을 선택하여 일치를 반전시킵니다.
  • -F: 패턴을 정규 표현식이 아닌 고정 문자열로 처리합니다.
  • -f file: 지정된 파일에서 패턴을 가져옵니다.

이 명령은 cracked_hashes.txt에서 패턴을 읽고 all_hashes.txt에서 일치하는 줄을 제거하여 결과를 uncracked_hashes.txt에 저장합니다.

grep -v -F -f cracked_hashes.txt all_hashes.txt > uncracked_hashes.txt

이제 새 파일의 내용을 확인하십시오. potfile 에 없었던 세 개의 해시가 포함되어야 합니다.

cat uncracked_hashes.txt

다음과 같은 출력이 표시되어야 합니다:

user4:$1$jkl$oP1qR2sT3uV4wX5yZ6a7b/
user5:$1$mno$c8d9e0f1g2h3i4j5k6l7m/
user6:$1$pqr$n9o8p7q6r5s4t3u2v1w0x/

이 파일은 이제 Hashcat 과 함께 사용할 준비가 되었습니다.

JtR 이 놓친 해시에 대해 Hashcat 으로 크랙 시도하기

이 마지막 단계에서는 Hashcat 을 사용하여 나머지 해시를 공격합니다. Hashcat 은 GPU 를 활용하여 엄청난 성능 향상을 가져올 수 있는 매우 빠르고 다재다능한 비밀번호 크래커입니다.

Hashcat 을 사용한 사전 공격의 기본 구문은 hashcat -m <mode> <hash_file> <wordlist_file>입니다.

  • -m 500: 해시 유형을 지정합니다. 500은 우리가 작업 중인 해시 유형인 MD5-crypt 에 해당합니다.
  • --force: 이 옵션은 이 랩과 같은 가상화 또는 컨테이너화된 환경에서 경고를 우회하고 Hashcat 을 실행하도록 강제하는 데 자주 필요합니다.

이제 제공된 wordlist.txt를 사용하여 uncracked_hashes.txt 파일에 대해 Hashcat 을 실행합니다.

hashcat -m 500 --force uncracked_hashes.txt wordlist.txt

Hashcat 이 시작됩니다. 실행 중에 상태 정보가 표시됩니다. 사전이 작고 올바른 비밀번호를 포함하고 있으므로 프로세스는 매우 빠를 것입니다.

...
Session..........: hashcat
Status...........: Running
Hash.Name........: md5crypt, MD5 (Unix), Cisco-IOS $1$ (MD5)
Hash.Target......: uncracked_hashes.txt
...
Approaching final keyspace - workload adjusted.

Session..........: hashcat
Status...........: Cracked
...

Hashcat 이 완료되면 크랙된 비밀번호를 자체 potfile 에 저장합니다. 새로 크랙된 비밀번호를 보려면 --show 옵션을 사용할 수 있습니다.

hashcat -m 500 --force --show uncracked_hashes.txt

출력에는 해시와 새로 발견된 평문 비밀번호가 표시됩니다.

$1$jkl$oP1qR2sT3uV4wX5yZ6a7b/:dragon
$1$mno$c8d9e0f1g2h3i4j5k6l7m/:qwerty
$1$pqr$n9o8p7q6r5s4t3u2v1w0x/:sunshine

축하합니다! 한 크래킹 도구의 출력을 사용하여 다른 도구의 입력을 성공적으로 안내했습니다!

요약

이 랩에서는 다양한 비밀번호 크래킹 도구의 강점을 결합하는 실용적인 워크플로를 배웠습니다. 이전 크래킹 세션의 결과를 나타내는 기존 John the Ripper potfile 로 시작했습니다.

다음과 같은 작업을 성공적으로 수행했습니다:

  • john.pot 파일의 내용을 찾고 해석했습니다.
  • cut 명령을 사용하여 특정 데이터 필드를 추출했습니다.
  • grep 명령을 사용하여 두 목록을 비교하고 크랙되지 않은 해시를 분리했습니다.
  • 나머지 해시에 대해 Hashcat 사전 공격을 시작하고 성공적으로 크랙했습니다.

남은 작업을 식별하고 다른 도구로 전달하는 이 프로세스는 실제 보안 평가에서 매우 효율적인 전략으로, 더 많은 영역을 커버하고 성공 가능성을 높일 수 있습니다.