워게임/HackTheBox

[HackTheBox] Illumination - 포렌식 / git

SecurityMan 2022. 12. 8. 11:00

 

HackTheBox 에서 제공하는 쉬운 난이도의 포렌식 문제

 

git 과 관련된 문제인데 

 

이전에 Root Me 와 CTFlearn에도 비슷한 문제가 있어서 풀이한 적이 있다.

(Root Me : https://hackingstudypad.tistory.com/182)

(CTFlearn : https://hackingstudypad.tistory.com/261)

 

반응형

 

 

참고로 git은 소스코드의 변경사항을 추적하고

 

여러 사용자들간 작업을 조율하기 위한 버전관리 시스템이다.

 

신입 개발자가 코드를 수정했는데 비밀 토큰을 찾아내는것이 이번 문제의 목표이다.

 

 

문제에는 bot.js 파일과 config.json 파일이 주어진다.

 

bot.js 파일은 소스코드인것 같고, 안에 특이한 내용은 없다.

 

 

config.json 파일을 열어보면 이런 내용이다.

 

token 부분에 token 값 대신에 어떤 메모가 적혀있다.

 

보안 위험때문에 사용할때는 해당 부분을 토큰값으로 바꿔달라는 것이다.

 

저 부분을 알아내면 되는것 같다.

 

 

ls -al 명령어를 입력해보면 

 

아까는 보이지 않던 .git 폴더이 보인다.

 

리눅스에서 파일명 앞에 . 이 붙으면 숨김처리가 되어서 아까 보이지 않았던 것이다.

 

이 .git 폴더를 분석하면 뭔가 얻을 수 있을것 같다.

 

 

.git 폴더 안에는 이런 파일/폴더들이 있다.

 

 

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

 

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

 

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

 

 

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

 

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

 

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

 

 

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

 

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

 

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

 

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

 

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

 

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

 

edc5aabf933f6bb161ceca6cf7d0d2160ce333ec  commit 객체인 것을 확인할 수 있다.

 

 

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

 

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

 

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

 

 

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

 

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

 

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

 

 

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

 

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

 

그런데 아까 봤던 내용이랑 똑같은걸 볼 수 있다.

 

이미 수정이 된 버전이었던 것이다.

 

 

그럼 다시 돌아가서 이번엔 거슬러 올라가 본다.

 

이번엔 tree 대신에 parent 의 해시값을 이용할 것이다.

 

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

 

이런 내용을 볼 수 있다.

 

밑에 코멘트가 바뀐것을 볼 수 있는데,

 

보안 위험때문에 unique token 을 삭제했다고 나온다.

 

코멘트로 추측해보건데 이 시점에서 config.json 파일 역시 

 

아까 봤던것처럼 수정되어 있을것이다.

 

그럼 여기서 또 한번 다시 parent 객체의 해시값을 사용한다.

 

 

다시한번 parent 객체의 해시값을 사용해보면

 

다른 코멘트를 확인할 수 있는데 뭔가 토큰에 대한 언급이 없다.

 

여기서 이제 타고 내려가 본다.

 

 

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

 

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

 

blob객체인 config.json 이 보인다.

 

 

git cat-file -p <blob 객체의 해시값> 을 이용해

 

config.json 의 내용을 확인해 보면

 

아까랑 다르게 token 값이 적혀있는것을 볼 수 있다.

 

Base64 로 인코딩 되어있는 모습인데,

 

 

CyberChef(https://gchq.github.io/CyberChef) 에서 Base64 디코딩을 해주면

 

플래그를 찾을 수 있다.

반응형