본문 바로가기

Wargame/Bandit

[ Docker ] Bandit Wargame 만들기 - 30번 문제 ( 31 / 33 )

1. Bandit30 목표

There is a git repository at ssh://bandit30-git@localhost/home/bandit30-git/repo via the port 2220. The password for the user bandit30-git is the same as for the user bandit30.

Clone the repository and find the password for the next level.

Commands you may need to solve this level
git

 

2. Bandit30 구현

# 비밀번호 root 입력 접속
ssh -oStrictHostKeyChecking=no root@localhost -p 2220

useradd bandit31 && echo -e "fb5S2xb7bRyFmAvQYQGEqsbhVyJqhnDy\nfb5S2xb7bRyFmAvQYQGEqsbhVyJqhnDy" | passwd bandit31

chmod 755 /home/bandit31

chown root:root /home/bandit31

chown -R root:root /home/bandit31/.[!.]*

echo fb5S2xb7bRyFmAvQYQGEqsbhVyJqhnDy > /etc/bandit_pass/bandit31

chown bandit31:bandit31 /etc/bandit_pass/bandit31

chmod 400 /etc/bandit_pass/bandit31

useradd bandit30-git && echo -e "qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL\nqp30ex3VLz5MDG1n91YowTv4Q8l7CDZL" | passwd bandit30-git

chmod 750 /home/bandit30-git

mkdir -p /home/bandit30-git/repo

chmod 775 /home/bandit30-git/repo

git init --bare /home/bandit30-git/repo

chown -R bandit30-git:bandit30-git /home/bandit30-git/repo

chsh -s /usr/bin/git-shell bandit30-git

TMP_DIR=$(mktemp -d)

cd $TMP_DIR

# qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL
# 패스워드 입력
GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no' git clone ssh://bandit30-git@localhost:2220/home/bandit30-git/repo

cd $TMP_DIR/repo

cat <<'README' > $TMP_DIR/repo/README.md
just an empty file... muahaha
README

chmod 664 $TMP_DIR/repo/README.md

chown bandit30:bandit30 $TMP_DIR/repo/README.md

git config user.email "noone@overthewire.org"

git config user.name "Ben Dover"

git add $TMP_DIR/repo/README.md

git commit -m "initial commit of README.md"

git tag passwd

# git hash-object를 통해 HEAR-DOC을 통해
# 생성된 파일 정보를 저장하고 해당 SHA-1 해쉬 정보를 출력
# 출력된 해쉬정보를 git tag secret 명령어를 통해 매칭
git tag secret $(git hash-object -w --stdin <<EOF
fb5S2xb7bRyFmAvQYQGEqsbhVyJqhnDy
EOF
)

# find .git/objects -type f 명령어를 치면 커밋혹은 hash-object를 통해
# 저장한 blob 객체파일들을 확인할 수 있음
# .git/objects/84/368f3a7ee06ac993ed579e34b8bd144afad351
# 와 같은 형식으로 저장되는데 이러한 참조 객체가 많아질 경우 용량이 많아지기 때문에
# .idx, .pack 형식으로 참조 정보들을 압축할 수 있음
# a 옵션 : 모든 객체를 패킹
# d 옵션 : 패킹 후 불필요한 loose objects를 삭제
# 대체 명령어 git gc 로도 가능
git repack -a -d

# qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL
# 패스워드 입력
GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no' git push --all

# qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL
# 패스워드 입력
# 태그 정보 푸시
GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no' git push --tags


3. Bandit30 문제풀의

# bandit30 로 설정한 패스워드를 입력하여 접속한다.
# qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL
ssh -oStrictHostKeyChecking=no bandit30@localhost -p 2220

TMP_DIR=$(mktemp -d)

cd $TMP_DIR

# qp30ex3VLz5MDG1n91YowTv4Q8l7CDZL
# 패스워드 입력
GIT_SSH_COMMAND='ssh -o StrictHostKeyChecking=no' git clone ssh://bandit30-git@localhost:2220/home/bandit30-git/repo .

# 태그가 참조하는 객체의 형식 확인
git tag | xargs -I {} sh -c 'echo "{} - $(git cat-file -t {})"'

# 패스워드 확인
git tag | xargs -I {} git show {} | awk '{if (length($0) == 32) print $0}' | uniq