워게임/CTFlearn

[CTFlearn] Git Is Good - 포렌식

SecurityMan 2022. 9. 12. 11:00

 

CTFlearn의 스물한번째 문제

 

이번엔 git 과 관련된 포렌식 문제이다.

 

반응형

 

Root Me 에도 비슷한 문제가 있어서

 

예전에 포스팅 한 적이 있었다.

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

 

 

문제에서 주어지는것은 gitIsGood.zip 파일이다.

 

 

압축을 풀어보면 .git 디렉토리와 flag.txt 파일이 들어있다.

 

 

당연한거지만 flag.txt 파일은 가짜이다.

 

문제가 git이니 아마 원래 플래그 파일 내용을 다른것으로 바꿔놓은듯 하다.

 

 

문제는 .git 디렉토리에서 풀면 된다.

 

내부에 여러 파일과 폴더들이 있는데

 

 

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

 

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

 

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

 

 

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

 

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

 

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

 

 

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

 

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

 

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

 

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

 

blob 객체에는 commit된 파일의 사본,

 

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

 

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

 

 

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

 

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

 

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

 

맨 아래쪽에 보면 Edited files 라고 나오는데

 

개발자가 뭔가 수정을 한게 맞는것 같다.

 

 

git cat-file -p <tree 해시값> 하면  flag.txt 파일의 해시값을 찾을 수 있고

 

git cat-file -p <flag.txt 해시값>하면  flag.txt 파일의 내용을 볼 수 있다.

 

아까 봤던 flag{REDACTED} 가 나오는걸 보니 이건 마지막으로 수정된 버전인듯 하다.

 

 

이번엔 맨 처음했던 git cat-file -p d10f77c4e766705ab36c7f31dc47b0c5056666bb 에서

 

parent 의 해시값을 확인한 다음

 

git cat-file -p <parent 해시값> 을 입력해본다.

 

 

 

이번에도 tree의 해시값을 가져와서

 

git cat-file -p <tree 해시값> 해보면

 

해시값이 다른 또하나의 flag.txt 파일이 있는것을 확인할 수 있다.

 

 

마지막으로 git cat-file -p <flag.txt 파일 해시값> 해보면

 

수정되기 전 버전의 flag.txt 파일 내용을 확인할 수 있다.

반응형