john custom rules

agnusdei·2025년 9월 9일
0

CTF

목록 보기
94/155

1. 파일 위치 및 기본 설정

1.1 주요 설정 파일 위치

# Ubuntu/Debian 기본 위치
/etc/john/john.conf
/usr/share/john/john.conf

# CentOS/RHEL 위치  
/etc/john/john.conf
/usr/local/etc/john/john.conf

# 소스 컴파일시 기본 위치
/usr/local/share/john/john.conf
./john.conf (실행 디렉토리)

# 커스텀 설정 파일 생성 (권장)
~/.john/john.local.conf
./john.local.conf

1.2 설정 파일 우선순위

1. ~/.john/john.local.conf (개인 설정)
2. ./john.local.conf (현재 디렉토리)
3. ./john.conf (현재 디렉토리)
4. $JOHN_CONF 환경변수 지정 파일
5. /etc/john/john.conf (시스템 설정)

1.3 설정 파일 구조 확인

# 현재 사용중인 설정 파일 확인
john --list=conf

# 맹글링 규칙 섹션 확인
john --list=rules

# 특정 규칙 세트 확인
john --list=rules:rulename

2. 맹글링 규칙 기본 문법

2.1 기본 규칙 구조

[List.Rules:RuleName]
# 주석 - 규칙 설명
: # 단일 규칙 (아무 변경 없음)
c # 첫글자 대문자
u # 모든 글자 대문자
l # 모든 글자 소문자

2.2 위치 지정자

# 위치 지정
^ # 맨 앞
$ # 맨 뒤
[0-9] # 특정 위치 (0부터 시작)

# 예시
^A # 맨 앞에 'A' 추가
$1 # 맨 뒤에 '1' 추가  
]1 # 두 번째 위치에 '1' 삽입

2.3 문자 조작 명령어

# 삽입 (Insert)
i[pos][char] # 특정 위치에 문자 삽입
^[char] # 맨 앞 삽입
$[char] # 맨 뒤 삽입

# 추가 (Append) - $ 사용
$[char] # 맨 뒤에 문자 추가

# 앞에 추가 (Prepend) - ^ 사용  
^[char] # 맨 앞에 문자 추가

# 삭제 (Delete)
D[pos] # 특정 위치 문자 삭제
[ # 첫 번째 문자 삭제
] # 마지막 문자 삭제

# 치환 (Substitute)
s[old][new] # 모든 old를 new로 치환
s[pos][new] # 특정 위치 문자를 new로 치환

3. 고급 맹글링 규칙

3.1 대소문자 변환

[List.Rules:CaseRules]
# 기본 대소문자 규칙
: # 원본 그대로
c # 첫글자만 대문자 (Capitalize)
C # 첫글자만 소문자, 나머지 대문자
t # 대소문자 토글 (Toggle)
TN # N번째 문자 토글 (T0, T1, T2...)
u # 모든 문자 대문자
l # 모든 문자 소문자

3.2 숫자 추가 규칙

[List.Rules:NumberRules]
# 연도 추가
$2$0$2$4 # 2024 추가
$2$0$2$3 # 2023 추가
$2$0$2$2 # 2022 추가
$1$9$9$0 # 1990 추가

# 일반적인 숫자
$1 # 1 추가
$1$2 # 12 추가
$1$2$3 # 123 추가
$0$1 # 01 추가

# 앞에 숫자 추가
^1 # 앞에 1 추가
^1^2^3 # 앞에 321 추가 (역순)

3.3 특수문자 규칙

[List.Rules:SpecialRules]
# 일반적인 특수문자
$! # 느낌표 추가
$@ # @ 추가
$# # # 추가
$$ # $ 추가 ($ 자체는 \$ 또는 $$로 표현)
$% # % 추가
$* # * 추가

# 복합 특수문자
$!$1 # !1 추가
$@$2$0$2$4 # @2024 추가

3.4 단어 변환 규칙

[List.Rules:WordPlay]
# 일반적인 문자 치환
sa@ # a를 @로 치환
se3 # e를 3으로 치환  
si1 # i를 1로 치환
so0 # o를 0으로 치환
ss$ # s를 $로 치환
st+ # t를 +로 치환

# 복합 치환
sa@se3 # a를 @로, e를 3으로
so0si1 # o를 0으로, i를 1로

4. 조건부 규칙 (Conditional Rules)

4.1 길이 조건

[List.Rules:LengthRules]
# 길이가 N 이상일 때만 적용
>4 $1 # 5글자 이상이면 1 추가
>6 $1$2 # 7글자 이상이면 12 추가
<8 ^A # 8글자 미만이면 앞에 A 추가

4.2 문자 존재 조건

[List.Rules:ConditionalRules]
# 특정 문자가 있을 때
/[aeiou] u # 모음이 있으면 모두 대문자로
/[0-9] c # 숫자가 있으면 첫글자 대문자
![0-9] $1 # 숫자가 없으면 1 추가

# 특정 위치에 특정 문자가 있을 때
%0a c # 첫 번째가 'a'면 첫글자 대문자
%1[0-9] ] # 두 번째가 숫자면 마지막 문자 삭제

4.3 복잡한 조건

[List.Rules:ComplexRules]
# 첫 글자가 소문자이고 길이가 6 이상일 때
%0[a-z] >5 c $1

# 마지막이 문자이고 숫자가 없을 때  
%r[a-z] ![0-9] $2$0$2$4

# 모음으로 시작하고 8글자 미만일 때
%0[aeiou] <8 ^P

5. 실전 맹글링 규칙 세트

5.1 한국어 환경 최적화 규칙

[List.Rules:Korean]
# 한국어 일반 패턴
: # 원본
c # Password -> Password
$! # password!
$1 # password1  
$2$0$2$4 # password2024
$1$2$3 # password123
^P # Ppassword

# 한국 기업 패턴
$@ # password@
$!$@ # password!@
$1$2$3$4 # password1234
c$1$2$3$4 # Password1234

5.2 글로벌 공통 패턴

[List.Rules:Global]
# 전세계 공통 패턴
$1 # +1
$1$2 # +12
$1$2$3 # +123
$0$1 # +01
$2$0$2$4 # +2024
$2$0$2$3 # +2023

# 대소문자 변형
c # Capitalize
c$1 # Capital+1
c$1$2$3 # Capital+123

5.3 기업 환경 특화 규칙

[List.Rules:Corporate]
# 기업용 패턴
: # 원본
c # 첫글자 대문자
c$2$0$2$4 # Company2024
c$! # Company!
$@$c$o$m # @com 추가
se3si1so0 # 문자 치환
c$1$2$3$4 # Company1234

# 계절 패턴  
$S$p$r$i$n$g # Spring 추가
$S$u$m$m$e$r # Summer 추가
$W$i$n$t$e$r # Winter 추가
$F$a$l$l # Fall 추가

6. 명령어 옵션 및 사용법

6.1 기본 실행 명령어

# 기본 사용법
john --rules=rulename hashfile.txt

# 여러 규칙 동시 적용
john --rules=rule1,rule2,rule3 hashfile.txt

# 모든 기본 규칙 사용
john --rules hashfile.txt

# 단일 패스워드로 맹글링 테스트
john --stdout --rules=rulename | head -20

6.2 고급 옵션

# 특정 단어리스트와 규칙 조합
john --wordlist=passwords.txt --rules=Korean hashfile.txt

# 맹글링 결과만 출력 (테스트용)
john --stdout --wordlist=base.txt --rules=Custom

# 진행상황 저장/복구
john --rules=Korean --session=mysession hashfile.txt
john --restore=mysession

# 포크 수 조정 (멀티코어 활용)
john --fork=8 --rules=Korean hashfile.txt

# 시간 제한 설정
john --max-run-time=3600 --rules=Korean hashfile.txt

6.3 성능 최적화 옵션

# 메모리 사용량 조정
john --mem-file-size=1024 --rules=Korean hashfile.txt

# 배치 크기 조정
john --batch-size=100000 --rules=Korean hashfile.txt

# 우선순위 설정
nice -n 19 john --rules=Korean hashfile.txt

7. 커스텀 규칙 작성 예시

7.1 완전한 커스텀 규칙 파일

# ~/.john/john.local.conf 또는 ./custom.conf

[List.Rules:MyCustomRules]
# 기본 패턴
:
c
u
l

# 숫자 패턴
$1
$1$2  
$1$2$3
$2$0$2$4
$2$0$2$3

# 특수문자 패턴
$!
$@
$#
$!$@
$@$!

# 복합 패턴
c$1
c$1$2$3
c$!
c$@$2$0$2$4

# 치환 패턴
sa@
se3
si1
so0
sa@se3
so0si1

# 조건부 패턴
>6 $1$2$3
<5 ^A
/[0-9] $!
![a-z] l$1

7.2 업계별 특화 규칙

[List.Rules:Finance]
# 금융업계 패턴
$B$a$n$k # Bank 추가
$2$0$2$4$! # 2024! 추가
c$F$i$n # 첫글자 대문자 + Fin
$M$o$n$e$y # Money 추가

[List.Rules:IT]  
# IT업계 패턴
$A$d$m$i$n # Admin 추가
$R$o$o$t # Root 추가
$1$2$7$.$0$.$0$.$1 # 127.0.0.1 패턴
$S$e$r$v$e$r # Server 추가

8. 주의사항 및 팁

8.1 성능 최적화 팁

# 1. 규칙 순서 최적화 (자주 사용되는 패턴을 앞에)
[List.Rules:Optimized]
: # 원본을 항상 첫 번째로
c # 가장 일반적인 변형
$1 # 간단한 숫자 추가
... # 복잡한 규칙은 뒤로

# 2. 불필요한 규칙 제거
# - 중복되는 결과를 만드는 규칙 제거
# - 확률이 극히 낮은 복잡한 규칙 제거

# 3. 조건부 규칙 활용
# - 특정 조건에서만 실행되도록 제한

8.2 보안 주의사항

# 1. 해시 파일 보안
chmod 600 hashfile.txt # 해시 파일 권한 제한
chown root:root hashfile.txt # 소유권 설정

# 2. 결과 파일 보안  
john --pot=secure.pot # pot 파일 위치 지정
chmod 600 john.pot # pot 파일 권한 제한

# 3. 로그 관리
john --log-stderr # 에러를 별도 로그로

8.3 실무 활용 팁

# 1. 단계적 접근
# 단순한 규칙부터 시작 -> 점진적으로 복잡화

# 2. 통계 기반 최적화
john --show hashfile.txt # 크랙된 패스워드 분석
# 패턴 분석 후 규칙 개선

# 3. 환경별 customization
# 회사별, 국가별, 업계별 특성 반영

# 4. 정기적인 규칙 업데이트
# 새로운 패스워드 트렌드 반영

8.4 문제 해결

# 규칙 문법 검증
john --test --rules=MyRules

# 메모리 사용량 확인
john --mem-usage --rules=MyRules

# 규칙 충돌 확인
john --list=rules:MyRules

# 디버그 모드
john --verbosity=5 --rules=MyRules hashfile.txt

9. 실제 사용 시나리오

9.1 시나리오 1: 기업 내부 감사

# 1단계: 기본 패턴 테스트
john --rules=Corporate hashfile.txt --session=corp1

# 2단계: 회사명 기반 패턴
echo "CompanyName" | john --stdin --rules=MyCustom hashfile.txt

# 3단계: 직원 정보 기반 (이름, 부서 등)
john --wordlist=employee_names.txt --rules=PersonalInfo hashfile.txt

9.2 시나리오 2: 일반적인 패스워드 크랙

# 1단계: 기본 사전과 간단한 규칙
john --wordlist=rockyou.txt --rules=Simple hashfile.txt

# 2단계: 확장된 규칙 적용
john --wordlist=common_passwords.txt --rules=Extended hashfile.txt

# 3단계: 언어별 특화 규칙  
john --wordlist=korean_words.txt --rules=Korean hashfile.txt
profile
DevSecOps ⚙️ + CTF🚩

0개의 댓글