문제분석 & 풀이
level9 shadow 파일이 서버에 있으며 용량이 "2700"이라는 힌트를 줬다.
○ shadow 파일
/etc/passwd 파일에 있는 비밀번호를 암호화하여 저장한 파일이다. 패스워드를 암호화하고 보호하기 위해 만들었다.
용량 "2700"을 이용하기위해 위와 같이 명령어를 입력해서 파일을 검색했다.
검색결과가 아무것도 나오지 않아서 조금 당황했다.
무엇이 문제인지 감이 안잡혀서 find 명령어 -size 옵션에 대해 조사했다. 이후 새롭게 알아낸 사실은 size 옵션의 경우 파일의 사이즈 단위를 설정해 검색 할 수 있다는 것이다.
○ -size 옵션 파일 사이즈 단위
b (block)
c (byte)
k (Kbyte)
w (2byte word)
m (Mbyte)
g (Gbyte)
파일 사이즈를 이용해야 검색이 되나 싶어서, 위에 써있는 6가지의 단위를 1개씩 검색했다.
이 중 c(바이트) 단위로 검색했더니 위와 같이 4가지의 파일이 검색됐다.
검색된 파일 중 found.txt 파일이 있었는데, 딱 봐도 수상하게 보여서 접근했다.
found.txt에 접근하면, shadow 파일의 형태를 띈 내용이 출력된다.
힌트에서 shadow 파일이 숨겨져있다고 했었으니 그 파일이 found.txt가 맞는 것 같다.
내용을 자세히 보면 위와 같이 shadow 파일의 형태를 띄고 있고 level9 계정에 대한 정보가 기록됐다.
level9의 패스워드를 알아내기 위해 shadow 파일의 구조에 대해 알아볼 필요가 있다.
○ shadow 파일 구조
shadow 파일은 여러 개의 항목으로 나뉜다.
사진을 보면 ":" 가 여러 개 있는 것을 알 수 있는데, ":"을 기준으로 항목들이 나뉜다.
각각이 무엇을 의미하는지 알아보겠다.
1. 사용자계정 (level9)
2. 암호화된 패스워드 ($1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.)
3. 패스워드가 수정된 날짜 (11040)
4. 패스워드가 변경되기 전 최소사용기간. 단, 0이면 언제든지 바꿀수 있다는 의미이다. (0)
5. 패스워드 변경 전 최대사용기간 (7)
6. 패스워드 사용 만기일 전에 경고 메시지를 제공하는 일 수 (-1)
7. 로그인 접속 차단 일 수 (-1)
8. 로그인 사용을 금지하는 일 수 (134549524)
level9의 패스워드를 알아내야하므로 2번 암호화된 패스워드 부분이 가장 중요하다.
level9의 패스워드가 해시함수를 통해 암호화되어있다. 이를 분석하기 위해서는 패스워드 필드에 대한 형식을 알아야한다.
○ 패스워드 필드 형식
형식 : [$Hash 종류][$salt][$암호화 된 패스워드]
1. Hash 종류 : 어떤 해시함수를 이용하여 패스워드를 암호화했는지에 대한 내용이다.
2. salt : 패스워드가 동일한 경우에는 같은 해시함수를 사용하면 똑같은 값으로 암호화된다.
따라서 같은 결과값이 나오지 않도록 salt값을 패스워드와 합쳐서 암호화를 진행하는데, 이때 사용하는 salt 값에 대한 내용이다.
3. 암호화 된 패스워드 : salt값과 패스워드가 합쳐진 후 암호화된 값이다.
level9의 패스워드 필드를 토대로 분석을 진행해보자.
먼저, Hash 종류는 1이으로 MD5로 해싱됐다는 것을 알 수 있다.
salt값은 "vkY6sSlG", 암호화된 패스워드는 "6RyUXtNMEVGsfY7Xf0wps."이다.
이 정보들을 이용하여 원래의 패스워드를 구해보자.
패스워드를 구하는 방법은 대표적인 패스워드 크래킹 툴인 john the ripper를 이용하는 것이다.
level9의 shadow 파일의 내용을 크래킹하기 위해 john the ripper를 다운로드 받았다.
텍스트 파일을 열어서 shadow 파일의 내용을 입력한 후 pass.txt라는 파일로 저장했다.
이후 cmd를 열어서 john the ripper 폴더에 들어가서 john the ripper를 실행했다.
실행하면 위와 같이 level9의 패스워드가 나온다.