워게임/Root Me

[Root Me] Insecure Code Management - 웹해킹/ Directory Listing / git

SecurityMan 2022. 6. 25. 11:00

 

20점짜리 웹해킹 문제

 

 

이 문제는 깃(git)과 관련된 문제이다.

 

git은 소스코드의 변경사항을 추적하고 여러 사용자들간 작업을 조율하기 위한 버전관리 시스템이다.

 

문제의 목표는 admin 계정의 비밀번호를 알아내는 것이다.

 

 

문제페이지에 접속하면 이렇게 로그인 창만 덩그러니 있다.

 

당연히 그냥 로그인이 안되고, 비밀번호를 알아야만 로그인 할 수 있다.

 

 

개발자가 Git을 사용해서 웹을 개발할 경우,

 

각종 설정파일들이 .git 폴더 내에 저장이 된다.

 

만약 이 .git 디렉토리에 대한 접근 권한을 제대로 설정하지 않으면

 

위에서 보이는것처럼 URL 맨 뒤에 .git/ 이라고 입력했을때 

 

Directory Listing 취약점이 발생한다.

 

디렉토리 리스팅 취약점은 서버 내의 모든 디렉토리와 파일 목록을 공격자가 볼 수 있어

 

웹 서버의 구조를 파악하는데 사용된다.

 

 

조금 더 편하게 보기 위해 .git 폴더 전체를 리눅스 환경으로 옮겨본다.

 

wget 명령에 -r 옵션(recursive) 을 줘서 .git/ 디렉터리 아래에 있는 모든 파일들을 칼리 리눅스로 가져올 수 있다.

 

 

 

가장 먼저 cat HEAD 로 HEAD 파일의 내용을 확인한다.

 

HEAD는 가장 최근 커밋을 가리키고 있는 것이다.

 

refs/heads/master 라는 결과가 출력된다.

 

 

이번엔 cat refs/heads/master 를 이용해서 

 

커밋의 디렉토리 트리를 저장하는 해시값을 확인한다.

 

c0b4661c888bd1ca0f12a3c080e4d2597382277b 라는 값이 나오는 것을 볼 수 있다.

 

 

이번엔 git cat-file -t <해시값> 명령어를 사용해서 

 

해당 해시값이 어떤 타입의 객체인지 확인한다. 

 

commit 객체에는 commit의 디렉토리 트리 개체 해시, 부모 commit, 작성자, 날짜 및 메세지 정보가 저장되고

 

tree 객체에는 commit에 대한 트렉토리 목록이,

 

blob 객체에는 commit된 파일의 사본(실제 소스코드),

 

tag 객체에는 태그가 지정된 객체와 관련 태그 이름에 대한 정보가 저장된다.

 

c0b4661c888bd1ca0f12a3c080e4d2597382277bcommit 객체인 것을 확인할 수 있다.

 

 

git cat-file -p <해시값> 명령어로 p 옵션을 주면

 

commit 객체의 세부 내용을 확인할 수 있다.

 

여기서 살펴볼 것은 tree 객체이다.

 

맨 아래쪽에 밑줄 쳐둔 sha256도 기억해둔다.

 

 

git cat-file -p <tree 객체의 해시값> 이라고 명령어를 치면

 

commit에 대한 디렉토리 목록을 확인할 수 있다.

 

그 중 blob 객체인 config.php 가 있는것을 확인할 수 있다.

 

 

git cat-file -p <blob 객체의 해시값> 을 해주면

 

config.php 의 내용을 확인할 수 있다.

 

해당 내용을 보면 admin의 비밀번호가 해시값으로 저장되어 있는것이 보인다.

 

비밀번호를 해시하는데 사용한 알고리즘은 앞에서 봤던 sha256 알고리즘이다.

 

 

해당 해시값은 레인보우 테이블을 이용해서 온라인으로 decrypt가 가능하다.

(https://md5hashing.net/hash/sha256)

 

비밀번호를 제출하면 점수를 획득할 수 있다.

반응형