level8로 들어오자마자 어김없이 ls -al과 find / -group level8 2>/dev/null을 실행해보았다.
ls -al은 별 문제 없어보이고, find의 결과 중에 /etc/rc.d/found.txt라는 것이 보인다.
해당 파일의 내용을 보니 아래의 내용이 36번 반복해서 출력되었다.
level9:$1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.:11040:0:99999:7:-1:-1:134549524
어디서 많이 본 형태인데, 바로 /etc/passwd에 사용자들의 정보를 저장하는 형태와 같다. 하지만 /etc/passwd는 7개의 필드가 존재하는데, 위의 내용은 총 9개의 필드로 구성되어 있다. 실제 사용자의 패스워드를 저장하는 /etc/shadow 파일이 총 9개의 필드로 구성되어있는데, 위의 내용은 /etc/shadow에서 가져온 내용인 듯 하다. 9개의 필드는 각각 다음의 의미를 가진다.
- 사용자 이름
- 패스워드
- 패스워드 파일 최종 수정일
- 패스워드 변경 최소일
- 패스워드 변경 최대일
- 패스워드 만료 경고기간
- 패스워드 파기 기간
- 계정 만료 기간
- 예약 필드
그러니까 위의 내용 중 두 번째 필드에 있는 $1$vkY6sSlG$6RyUXtNMEVGsfY7Xf0wps.가 level9의 암호일 것이다. 문제는 패스워드를 무슨 방식으로 암호화 했느냐인데...
패스워드를 암호화 했을 때 위와 같은 형태로 표현되는 것을 해시(Hash)라고 한다. 해시의 형태는 다음과 같다.
$형식$SALT값$암호
형식이 $1이면 MD5, $5이면 SHA256, $6이면 SHA512 방식으로 암호화 된 해시값이라는 의미이다. 같은 방식으로 해시를 설정하면 동일한 암호에 대해서는 항상 같은 해시 값이 나오게 되는데, 이를 방지하기 위해서 랜덤한 값 SALT를 암호와 합쳐서 같은 값이 나오지 않도록 해준다. 그리고 SALT 이후의 값이 해시를 통해 나온 암호가 된다.
암호화 된 해시를 복호화 하기는 사실상 불가능이다. "a" 부터 "zzzzzzzzzzzzzzzz"까지 경우의 수가 너무나 많기 때문인데, "존 더 리퍼"라는 복호화 프로그램을 이용하면 손쉽게 복호화 할 수 있다. 해당 툴의 사용법은 구글링만 하면 나오기 때문에 설명은 생략하고, found.txt의 내용을 존 더 리퍼 툴에 넣어서 실행해보면 다음과 같은 결과가 나온다.
$ ./john ./shadow.txt
Loaded 1 password hash (FreeBSD MD5 [32/64 X2])
apple (level9)
guesses: 1 time: 0:00:00:00 100% (2) c/s: 13847 trying: alex - apple
level9의 암호가 "apple" 이라고 나왔다.
apple이라는 암호를 저렇게 길게 암호화 해도, 결국엔 뚫릴 수가 있기 때문에, 암호화 되었다고 해서 무조건 안전한 건 아닌 것 같다.
level 9로 고고~!
'Pwnable > FTZ' 카테고리의 다른 글
[ProjectH4C] [Write-up] 해커스쿨 FTZ Level 9 (0) | 2020.08.09 |
---|---|
[ProjectH4C] [Write-up] 해커스쿨 FTZ Level 7 (0) | 2020.08.08 |
[ProjectH4C] [Write-up] 해커스쿨 FTZ Level 6 (0) | 2020.08.04 |
[ProjectH4C] [Write-up] 해커스쿨 FTZ Level 5 (0) | 2020.08.04 |
[ProjectH4C] [Write-up] 해커스쿨 FTZ Level 4 (0) | 2020.08.03 |