티스토리 뷰

728x90
반응형

 

 

 

 

우선 힌트를 보면 level9 계정의 비밀번호가 담긴 shadow 파일에 대한 힌트를 주고 있는 것 같은데요.

힌트에 나온 대로 파일의 용량을 기준으로 한번 검색해보았습니다.

 

명령어는 아래와 같습니다 

find / -group level8 -size 2700c 2> /dev/null

그럼 위와 같이 파일 한 개가 찾아지는 것을 볼 수 있습니다.

 

잠깐 명령어에 대해 설명하고 넘어가자면, -group 옵션은 파일의 그룹 소유자를 지정할 수 있게 해줍니다.

(처음에는 -user level8 옵션으로 검색해보았지만 결과가 나오지 않아 -group 옵션을 사용했습니다.)

 

그리고 -size 옵션에 대한 정리를 해보겠습니다.

find 명령의 -size 옵션은 파일 크기를 기준으로 검색할 수 있게 해주는데요.

# find / -size +N => N 이상 크기의 파일을 검색한다.
# find / -size -N => N 이하 크기의 파일을 검색한다.
# find / -size N => N 크기의 파일을 검색한다.
# 사이즈 단위
# b : 블록 단위
# c : byte
# k : kbyte
# w : 2byte word

힌트에서는 그냥 2700의 크기라고 표현하였지만 일반적으로 생각할 수 있는 크기는 바이트 단위겠죠.

그래서 2700c 로 해서 검색했습니다.

 

이제 찾은 파일을 cat 명령으로 출력해보겠습니다.

위와 같이 같은 내용이 반복되는 걸 볼 수 있습니다.

결론적으로 level9의 shadow 파일의 내용이 담겼다는 걸 알 수 있습니다.

 

잠시 linux 의 shadow 파일 형식에 대해 review 를 해보겠습니다.

linux shadow 파일은 1:2:3:4:5:6:7:8:9 형태입니다.

1 - 사용자명
2 - 패스워드를 암호화시킨 방식
  $1 : md5
  $2 : Blowfish
  $5 : SHA-256
  $6 : SHA-512
  (비어 있을 경우 로그인에 필요한 패스워드가 없다는 의미)
  (:*: 라고 되어 있을 경우 계정을 막아둠을 의미)
3 - 1970년 1월 1일부터 패스워드가 수정된 날짜의 일수를 계산한 값
4 - 패스워드가 변경되기 전 최소 사용 기간(일수)
  (0이면 언제든지 바꿀 수 있다는 의미임.)
5 - 패스워드 변경 전 최대사용기간(일수)
  (99999는 오랫동안 패스워드를 바꾸지 않았다는 것을 의미함)
6 - 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일수
7 - 로그인 접속차단 일 수
8 - 로그인 사용을 금지하는 일 수 (월/일/연도)
9 - 예약필드로 사용되지 않음.

그렇기에 level9 의 shadow 파일 기준으로 말하자면, md5 hash 값이기 때문에 바로 복호화는 불가능해서 bruteforce가 필요하다는 것이겠습니다.

 

bruteforce 는 linux hash cracking에 가장 보편적으로 사용하는 john the ripper를 사용해보았습니다.

https://www.openwall.com/john/

 

John the Ripper password cracker

John the Ripper password cracker John the Ripper is an Open Source password security auditing and password recovery tool available for many operating systems. John the Ripper jumbo supports hundreds of hash and cipher types, including for: user passwords o

www.openwall.com

위 도구를 사용하기 위해서 준비물로 unshadowed 파일이 필요하기 때문에 임시로 unshadowed.txt 라는 파일을 만들고, 해당 파일 내용으로 아래와 같이 넣어주었습니다.

# unshadowed.txt 파일 내용
level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:0:0:level9/home/level9:/bin/bash

그리고 아래 명령어를 실행해보았습니다.

john --format=md5crypt-long --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt
root> john --format=md5crypt-long --wordlist=/usr/share/wordlists/rockyou.txt unshadowed.txt
Using default input encoding: UTF-8
Loaded 1 password hash (md5crypt-long, crypt(3) $1$ (and variants) [MD5 32/64])
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
apple            (level9)
1g 0:00:00:00 DONE (2021-11-17 12:27) 14.28g/s 10285p/s 10285c/s 10285C/s bambam..marissa
Use the "--show" option to display all of the cracked passwords reliably
Session completed

사전(Dictionary) 기반으로 bruteforce 했봤을 때 결과를 보면 level9의 비밀번호가 apple 인 걸 알 수 있습니다.

이제 로그인을 해보면 아래와 같이 잘 로그인 되는 것을 알 수 있습니다.

 

 - 끝 -

728x90
반응형
댓글