Skip to content

주어진 shadow 크랙

힌트

    1. John the Ripper
    2. --format=crypt
  1. NordPass

    1. --wordlist
  2. 우리나라

1. 힌트 없이 크랙

1.1. shadow 분석

root:!:19886:0:99999:7:::
cju:$y$j9T$7zQyQ3FkZXAHdO3OaIIic.$9IEiwQHWhke1FnxET1YBRgNm4cmKiXCvHCPwBtj7yD8:19886:0:99999:7:::
victim1:$y$j9T$1MXwvOINz3y64UQhze4UG.$8rRuki/11CoMM8j28/1Elwtr7nlyBLd.SvauLKtQbfC:19977:0:99999:7:::
victim2:$y$j9T$tlF3l4f38xFyfDAIct9oV1$jhYQONgr/02UMHvg8E23j27UboZDCT0Lpew88dAIgB9:19977:0:99999:7:::
victim3:$y$j9T$L2cMOrHNFn9sOSU35rfkY/$vWDLAVoVfx6n6rrojYS6QJLGSuWx2y4CDD4g3Wz3C56:19977:0:99999:7:::
  • root의 암호는 없음.
  • $y$는 yescrypt 알고리즘을 의미

1.2. 힌트 회피

  • John the Ripper 대신 Hashcat 사용
    • Hashcat은 2024/09/24 기준 yescrypt를 지원하지 않음. (Github Issue)
    • John the Ripper를 대체할 수 없음
  • --wordlist 옵션 비사용
    • NordPass와 관련된 wordlist 비사용
    • 한국과 관련된 wordlist 비사용

1.3. 크랙 시도

1.3.1. 10분동안 기본적인 crack 시도

$ john --format=crypt shadow
...
1111    (cju)

cju_is_1111

  • cju = 1111
  • cju를 제외한 나머지 유저는 크랙 실패
1.3.2. Brute Force 시도 (incremental mode)
$ john --format=crypt -i shadow
...
  • 자고 일어나면 크랙될 것으로 예상
    • 6시간 후 크랙 실패 after_6_hours gpgpu 설정하면 더 빨라질 것으로 예상..

1.4. 결론

  • 힌트 없이는 힘들다.

2. 힌트를 사용

2.1. 힌트 분석

복사 결과
1
1111111
< 1 second
4,753
2
admin
< 1 second
4,196
3
123456
< 1 second
3,652
4
111111
< 1 second
2,449
5
12345
< 1 second
2,217
6
1q2w3e4r
< 1 second
2,114
7
P@ssw0rd
< 1 second
1,872
8
1q2w3e
< 1 second
1,785
9
1qaz2wsx
< 1 second
1,754
10
qwer1234
< 1 second
1,701
11
qpalzm123
3 hours
1,659
12
1q2w3e4r5t
< 1 second
1,608
13
UNKNOWN
17 minutes
1,568
14
pascal
< 1 second
1,480
15
12345678
< 1 second
1,450
16
qwe123
< 1 second
1,114
17
123123
< 1 second
995
18
1q2w3e4r!
2 seconds
954
19
*******
< 1 second
954
20
1q2w3e4r5t!
2 seconds
941

2.2. wordlist 생성

  • vscode의 정규표현식 replace를 사용하여 정리

    Find: ^[0-9]{1,2}\n(.*)\n.*\n.*
    Replace: $1
    

    vscode_regex_replace

변환 결과
1111111
admin
123456
111111
12345
1q2w3e4r
P@ssw0rd
1q2w3e
1qaz2wsx
qwer1234
qpalzm123
1q2w3e4r5t
UNKNOWN
pascal
12345678
qwe123
123123
1q2w3e4r!
*******
1q2w3e4r5t!
  • nordkrlist.lst로 저장

2.3. 크랙 시도

  • 생성한 wordlist를 사용하여 크랙

    $ john --format=crypt --wordlist=nordkrlist.lst shadow
    ...
    UNKNOWN         (victim1)
    *******         (victim3)
    1q2w3e4r5t!     (victim2)
    

    victim_passwords

    • victim1 = UNKNOWN
    • victim2 = 1q2w3e4r5t!
    • victim3 = *******

2.4. 결론

User Password
cju 1111
victim1 UNKNOWN
victim2 1q2w3e4r5t!
victim3 *******
  • 비밀번호 생성 시 사전에 없는 단어 사용
  • 패스워드 유출에 대비해 각 계정마다 다른 비밀번호 사용
  • 힌트를 적극적으로 활용