본문 바로가기

리버싱/FTZ

해커스쿨 FTZ Level8 (리눅스 패스워드 크랙)

ID : level8

Password : break the world


힌트 : 



level9의 shadow 파일이 서버 어딘가에 숨어있다.

그 파일에 대해 알려진 것은 용량이 "2700"이라는 것 뿐이다.



문제를 풀기 전에 : 


/etc/passwd



모든 사용자의 정보가 담겨있는 파일이다.

필드는 다음과 같다.


 계정명 : 패스워드부분 : UID : GID : 코멘트 : 홈디렉토리 : 기본사용쉘


여기서 중요한 부분은 패스워드 부분인데 보면 x로 설정되어있는 것을 볼 수 있다. 패스워드 파일의 권한을 확인하면 다음과 같다.



모든 사용자가 이 파일을 읽을 수 있으므로 이 파일은 매우 취약할 수 있다. 

따라서 리눅스는 passwd의 가장 중요한 암호 필드는 특정한 경로에 파일을 만들어 관리자만 접근할 수 있도록 관리한다. 


/etc/shadow


사용자의 암호는 해쉬화되어 /etc/shadow 파일에 따로 저장된다.

필드값은 다음과 같다.

 사용자명 : $해쉬방법$salt$해쉬값:패스워드 파일 최종 수정일:패스워드 변경 최소일 : 최대일  : 만료경고기간 : 파기기간 : 계정만료기간 : 예약필드


이 해쉬값은 dictionary attack 이나 bruto forcing attack 으로 해독할 수 있다.



풀이 : 


1) 문제를 풀기 위해 먼저 파일 용량이 2700바이트인 파일을 찾는다.


 find / -size 2700c



2) 파일에 있는 내용을 확인한다.



3)  발견한 파일의 내용을 근거로 bruto forcing attack을 하여 암호를 추출해 내는 코드를 작성한다.



원래는 위와 같은 코드로 암호를 크랙할 수 있다. 하지만 해당 버전에서는 itertools 모듈이 설치되어 있지 않으므로 위의 코드를 실행하기는 설정할 것이 너무 많다.

따라서 암호가 5글자이고 소문자로만 이루어져있다고 가정하여 아래와 같은 코드를 작성하였다.



4) 코드를 실행한다. 


해당 코드를 attack.py라 작성하고 실행을 시키면 결과를 얻을 수 있다.

한 5분은 돌려야 결과를 얻을 수 있던 것으로 기억한다.



사용한 코드 : 


attack(해당버전).py


attack(2.2이상버전).py