Bandit Wargame 풀이 기록입니다.
1. 문제 목표 및 접속 정보
목표
Git 저장소의 현재 파일이 아닌 커밋 이력(history) 을 확인하여,
이전 커밋에 남아 있는 다음 레벨 비밀번호를 찾아낸다.
접속 정보
- Host:
bandit.labs.overthewire.org - Port:
2220 - User:
bandit28 - Password:
Yz9IpL0sBcCeuG7m9uQFt8ZNpS4HZRcN
- Host:
ssh bandit28@bandit.labs.overthewire.org -p 2220
2. 풀이 과정
Git 저장소 클론
이전 레벨에서 이미 서버 내부에서 Git 작업이 막힐 수 있다는 걸 겪었기 때문에,
이번에는 처음부터 로컬 환경에서 Git 저장소를 클론했다.
git clone ssh://bandit28-git@bandit.labs.overthewire.org:2220/home/bandit28-git/repo
정상적으로 저장소가 받아졌다.
저장소 구조 확인
cd repo
ls
README repo
하위 디렉토리인 repo로 다시 이동했다.
cd repo
ls
README.md
README 확인
cat README.md
# Bandit Notes
Some notes for level29 of bandit.
## credentials
- username: bandit29
- password: xxxxxxxxxx
비밀번호가 마스킹되어 있다.
파일 자체에는 더 이상 힌트가 없어 보였다.
Git 커밋 이력 확인
파일이 아니라 Git 히스토리를 확인해야겠다고 판단했다.
git log
출력된 커밋 목록은 다음과 같았다.
commit b0354c7be30f500854c5fc971c57e9cbe632fef6
fix info leak
commit d0cf2ab7dd7ebc6075b59102a980155268f0fe8f
add missing data
commit bd6bc3a57f81518bb2ce63f5816607a754ba730d
initial commit of README.md
가장 위 커밋 메시지인 “fix info leak” 이 눈에 띄었다.
이전 커밋에 민감한 정보가 있었다는 의미로 보였다.
커밋 내용 확인
먼저 최신 커밋을 확인했다.
git show b0354c7be30f500854c5fc971c57e9cbe632fef6
이 커밋에서는 비밀번호가 xxxxxxxxxx로 가려진 걸 확인할 수 있었다.
다음으로 그 이전 커밋을 확인했다.
git show d0cf2ab7dd7ebc6075b59102a980155268f0fe8f
이 커밋의 diff에서 다음 레벨 비밀번호를 확인할 수 있었다.
- password: <TBD>
+ password: 4pT1t5DENaYuqnqvadYs1oE4QLCdjmJ7
3. Level [29] 비밀번호 (Flag) 획득
현재 파일에서는 가려져 있었지만,
Git 커밋 이력에 남아 있던 정보 유출을 확인하여 다음 레벨 비밀번호를 획득했다.
[4pT1t5DENaYuqnqvadYs1oE4QLCdjmJ7]
4. 핵심 명령어 및 개념
git log- Git 저장소의 커밋 이력을 확인하는 명령어
- 파일에 보이지 않는 정보가 남아 있을 수 있다
git show <commit>- 특정 커밋의 변경 내용(diff)을 확인
- 과거 커밋에 민감한 정보가 포함될 수 있음
- Git 히스토리와 정보 유출
- 현재 파일이 안전해 보여도
- 과거 커밋에 비밀번호, 토큰 등이 그대로 남아 있을 수 있다