Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
assless-chaps — NT 해시 데이터베이스를 사용하여 MSCHAPv2 챌린지/응답을 빠르게 크랙합니다. | Kitploit
도구/GitHubGitHub/sensepost/assless-chaps
Password CrackingWi-Fi AuditingHash AnalysisCryptographyPenetration Testing
GitHubsensepost/assless-chaps

assless-chaps

NT 해시 데이터베이스를 사용하여 MSCHAPv2 챌린지/응답을 빠르게 크랙합니다.

저장소 보기
1411951개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

assless-chaps

MSCHAPv2/NTLMv1 challenge/response를 NT 해시 데이터베이스를 사용하여 빠르게 크랙합니다

소개

Assless CHAPs는 MSCHAPv2/NTLMv1 교환에서 challenge와 response(예: WiFi EAP WPE 공격)가 있을 때 사용된 NT 해시를 효율적으로 복구하는 방법입니다.

NT 해시 데이터베이스가 필요하며, 기존 목록에서 생성하거나 hashcat을 단어 목록 및 규칙과 함께 사용하여 만드는 방법은 아래에 설명되어 있습니다. SecLists의 샘플 데이터베이스가 포함되어 있습니다. bunzip을 해야 합니다.

기법

MSCHAPv2 교환에서는 일반 텍스트 비밀번호를 "크랙"할 필요가 없으며, 사용된 NThash만 있으면 됩니다.

MSCHAPv2는 NThash를 세 부분으로 나누고, 각 부분을 다른 키로 사용하여 동일한 challenge(피어 및 인증자 challenge에서 파생됨)를 DES 암호화합니다. NThash는 두 개의 7바이트 키와 하나의 2바이트 키로 분할됩니다. 즉, 마지막 키는 필요한 길이의 키를 만들기 위해 NULL로 패딩됩니다. DES 연산의 효율성과 65,535의 키 공간 덕분에 이를 빠르게 무차별 대입할 수 있습니다. 이 두 바이트를 찾으면 데이터베이스에서 해당 두 바이트로 끝나는 모든 NThash를 조회할 수 있습니다. 이렇게 하면 확인할 가능한 해시 집합이 훨씬 작아집니다.

이는 레인보우 테이블과 유사한 공간 대 시간 트레이드오프 형태입니다. 또한 해시 슈킹의 한 형태입니다.

발표

이 내용은 Defcon 29의 RF Hacking Village에서 처음 발표되었습니다. 슬라이드는 이 저장소에 포함되어 있습니다.

속도

세 가지 샘플 challenge/response와 세 가지 다른 단어 목록(작은 개인 목록, rockyou, Have I Been Pwned 목록)에 대한 비교입니다. Macbook Pro 2016에서 수행했습니다. Hashcat은 이 해시 슈킹 커널과 내장 GPU 2개를 사용하며, 순수 커널(최적화 커널은 아직 없음)을 사용합니다. Hash3은 최악의 성능을 시뮬레이션하기 위해 목록에 없습니다. hashcat이 첫 실행 시 사전 캐시를 구축하는 시간은 포함하지 않았습니다.

Hash1

작은 해시 목록:

root@kitploit:~
hashcat 0.50s user 0.27s system 55% cpu 1.405 total (8597.8 kH/s)
assless 0.05s user 0.00s system 294% cpu 0.018 total

Rockyou 해시 목록:

root@kitploit:~
hashcat 2.67s user 0.51s system 93% cpu 3.413 total
assless 0.05s user 0.01s system 281% cpu 0.021 total

HIBP 해시 목록:

root@kitploit:~
hashcat 59.97s user 11.72s system 136% cpu 52.603 total (5620.6 kH/s)
assless 0.05s user 0.00s system 292% cpu 0.018 total

Hash 2

작은 해시 목록:

root@kitploit:~
hashcat 0.51s user 0.27s system 55% cpu 1.409 total (8704.7 kH/s)
assless 0.03s user 0.00s system 248% cpu 0.012 total

Rockyou 해시 목록:

root@kitploit:~
hashcat 2.20s user 0.46s system 110% cpu 2.409 total (5798.4 kH/s)
assless 0.03s user 0.00s system 231% cpu 0.015 total

HIBP 해시 목록:

root@kitploit:~
hashcat 65.37s user 12.74s system 135% cpu 57.712 total (5768.7 kH/s)
assless 0.03s user 0.00s system 249% cpu 0.013 total

Hash 3

Hash 3은 어떤 해시 목록에도 없어 최악의 조회 성능을 시뮬레이션합니다.

작은 해시 목록:

root@kitploit:~
hashcat 0.67s user 0.34s system 66% cpu 1.526 total (7550.1 kH/s)
assless 0.02s user 0.00s system 211% cpu 0.012 total

Rockyou 해시 목록:

root@kitploit:~
hashcat 2.71s user 0.52s system 94% cpu 3.415 total (5685.4 kH/s)
assless 0.02s user 0.01s system 181% cpu 0.014 total

HIBP 해시 목록:

root@kitploit:~
hashcat 125.19s user 27.62s system 139% cpu 1:49.75 total (5634.9 kH/s)
assless 0.06s user 0.03s system 115% cpu 0.075 total

설치

Rust 버전은 SQLite 3.6.8 이상이 필요합니다.

Python 버전은 python3, sqlite3, pycryptodome이 필요합니다.

데이터베이스 생성 유틸리티는 python3와 sqlite3 CLI가 필요합니다.

컴파일

Rust 버전에만 해당됩니다. cargo가 필요합니다.

cargo가 설치된 상태에서 assless-chaps-rs 디렉토리로 이동하여 다음 명령어로 빌드하세요: cargo build --release

결과 바이너리는 target/release/ 디렉토리에 있습니다.

사용법

Assless는 challenge, response 및 NThash 데이터베이스가 필요합니다. 선택적으로 Python 버전은 번들된 최적화된 2바이트 조회 파일을 사용할 수 있습니다. 가장 간단한 사용법은 다음과 같습니다:

./assless-chaps <Challenge> <Response> <hashes.db>

예를 들어:

./assless-chaps 5d79b2a85966d347 556fdda5f67d2b746ca3315fd8b93adcab5c792790a92e87 rockyou.db

출력은 다음과 같아야 합니다:

root@kitploit:~
[-] Two byte lookup file not provided, will brute force instead.
[+] Found in 22636 tries: 586c
[-] Found 222 hashes ending in 586c
[+] Found hash: 8846f7eaee8fb1
[-] Found after 186 hashes.
[+] Found hash: 17ad06bdd830b7
[+] Full hash: 8846f7eaee8fb117ad06bdd830b7586c

최종 전체 해시 8846f7eaee8fb117ad06bdd830b7586c는 password의 NT 해시입니다.

2바이트 조회 - Python 전용

대규모 비밀번호 코퍼스에서 가장 많이 나타나는 65,535개의 가능한 2바이트 값을 정렬한 목록을 만드는 데 시간을 투자했습니다. 이 파일은 twobytes로 포함되어 있습니다. assless의 네 번째 인수로 전달하면 됩니다.

이렇게 하면 일반적으로 몇 번의 DES 라운드를 절약할 수 있지만 속도 차이는 크지 않습니다. 여러 해시를 처리하는 경우에 도움이 될 수 있습니다.

python3 assless-chaps.py 5d79b2a85966d347 556fdda5f67d2b746ca3315fd8b93adcab5c792790a92e87 rockyou.db twobytes

root@kitploit:~
[+] Found in 65533 tries: 586c
[-] Found 222 hashes ending in 586c
[+] Found hash: 8846f7eaee8fb1
[-] Found after 186 hashes.
[+] Found hash: 17ad06bdd830b7
[+] Full hash: 8846f7eaee8fb117ad06bdd830b7586c

나만의 해시 사전 만들기

mksqlitedb.py 파일은 CSV 해시 파일을 데이터베이스로 변환하는 데 도움이 됩니다.

python3 mksqlitedb.py <database name> <csv file>

CSV 파일에는 세 개의 열이 필요합니다:

  • 해시의 마지막 2바이트 (마지막 4개의 ASCII 문자)
  • 첫 7바이트 (처음 14개의 ASCII 문자)
  • 두 번째 7바이트 (15-29번째 ASCII 문자)

예를 들어 해시 8846f7eaee8fb117ad06bdd830b7586c는 다음과 같이 변환됩니다:

586c,8846f7eaee8fb1,17ad06bdd830b7

이를 위한 정규식 변환 예시는 다음과 같습니다: echo 8846f7eaee8fb117ad06bdd830b7586c | sed "s/^\(.\{14\}\)\(.\{14\}\)\(.\{4\}\)$/\3,\1,\2/"

기존 해시 목록(예: Have I Been Pwned 목록)을 사용하거나 hashcat과 원하는 단어 목록/규칙 조합을 사용하여 직접 생성할 수 있습니다.

Have I Been Pwned 사용하기

HIBP 비밀번호 목록은 이미 NT 해시로 다운로드 가능하며, 파일에서 개수만 제거하고 CSV 형식으로 변환하여 데이터베이스에 가져오면 됩니다.

표준 Unix 유틸리티 sed를 사용하여 다음과 같이 수행할 수 있습니다:

sed "s/^\(.\{14\}\)\(.\{14\}\)\(.\{4\}\):.*/\3,\1,\2/" pwned-passwords-ntlm-ordered-by-hash.txt > hibp.csv

이후 mksqlitedb.py hibp.db hibp.csv를 사용하여 가져올 수 있습니다.

단어 목록을 해시 목록으로 변환하기

일반 단어 목록을 nthash의 해시 목록으로 변환하려면 대규모 단어 목록을 빠르게 처리할 수 있는 nthasher를 사용할 수 있습니다. 결과 해시는 위에서 설명한 대로 필요한 CSV 형식으로 변환해야 합니다.

필요한 CSV 형식으로 직접 해시를 출력하는 훨씬 느린 nthasher가 이 저장소에 포함되어 있으며, 다음과 같이 간단히 실행할 수 있습니다:

python3 nthash-from-clear.py <wordlist> > hashlist.csv

규칙을 사용하여 단어 목록을 확장하려면 hashcat 사용에 관한 다음 섹션을 참조하세요.

hashcat을 사용하여 단어 목록과 규칙으로 해시 CSV 파일 생성하기

모드 1000 OpenCL 모듈을 약간 수정하여 크랙 후보와 일치하는 해시만 출력하는 대신 모든 해시를 출력하도록 해야 합니다. 기본적으로 필요한 CSV 형식으로 해시를 생성합니다.

  • hashcat의 OpenCL 디렉토리로 변경: cd hashcat/OpenCL
  • 패치 적용: patch < m01000_a0-pure.cl.patch
  • 크랙 불가능한 NT 해시를 포함한 파일 준비: echo 11111111111111111111111111111111 > impossible_hash
  • 평소대로 크랙하되 potfile을 비활성화하고 출력을 파일로 리디렉션: hashcat -m1000 impossible_hash rockyou.txt -r best64.rule --potfile-disable --quiet > rockyou.csv
  • 해시 데이터베이스 생성: python3 mksqlitedb.py rockyou.db rockyou.csv

디스크 공간 및 파일 크기에 관한 참고 사항

SQLite 데이터베이스는 일반적으로 생성에 사용된 CSV 파일보다 61% 더 큽니다. 또한 파일 크기에 따라 데이터베이스 생성에 시간이 걸릴 수 있습니다. 이에 따라 파일 시스템 요구 사항을 준비하세요.

다음은 rockyou 사전을 사용한 예입니다:

  • 기본 rockyou 사전 129M
  • hashcat 생성 rockyou.csv 462M
  • 결과 SQLite 데이터베이스 rockyou.db 746M
  • BZip2 최대 압축 rockyou.db.bz2 339M

각 해시를 동적으로 변환 및 삽입하여 중간 CSV 파일을 생략하면 공간을 절약할 수 있습니다.

NTLMv1 SSP

NTLMv1은 SSP를 사용하지 않는 한 정확히 동일한 방식으로 작동합니다. LM 응답이 0으로 끝나는 경우 SSP가 사용 중임을 알 수 있습니다. 포함된 ntlm-ssp.py를 사용하여 assless에 필요한 서버 challenge를 생성할 수 있습니다.

다음과 같이 실행합니다: python3 ntlm-ssp.py <lm response> <challenge>

예를 들어 hashcat 예제 해시에서 NTLMv1-SSP challenge response 예제를 사용하는 경우: u4-netntlm::kNS:338d08f8e26de93300000000000000000000000000000000:9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41:cb8086049ec4736c

다음과 같이 LM과 challenge를 전달합니다:

python3 ntlm-ssp.py 338d08f8e26de93300000000000000000000000000000000 cb8086049ec4736c

그러면 다음과 같은 응답을 얻습니다:

The server challenge is: 724edf24aea0d68b

이후 assless-chaps로 평소와 같이 크랙할 수 있습니다:

./assless-chaps 724edf24aea0d68b 9526fb8c23a90751cdd619b6cea564742e1e4bf33006ba41 hashes.db

도구 다운로드