bandit Write-up

Bandit Level 31 ~ 33

부산영롱 2023. 12. 13. 10:59

Bandit Level 31 → Level 32

역시나 동일한 git 문제이다.

이번에는 홈디렉토리에 .gitconfig 라는 파일이 있다. 내용을 보니 email 계정과 name이 적혀져있다.

아직까지는 무슨 힌트인지 알 수가 없다.

git을 불러오고 working directory에 있는 파일들의 내용을 확인해보았다.

이번 단계에서는 파일을 만들고 원격 저장소로 push 해야한다고 한다.

'README.md' 에 주어진 내용대로 파일을 생성하고 'add' 했더니 에러메시지가 발생했다.

아까 봤던 '.gitignore' 파일에 '*.txt'라는 내용이 적혀있었느데 이게 모든 .txt 파일을 무시한다는 내용이었다.

'.gitignore' 파일을 수정하여 '*.txt' 를 주석처리 한 뒤 다시 'add'를 하니 정상적으로 수행되었다.

commit을 수행한 뒤 원격 저장소 origin으로 push를 했는데 틀렸다고 한다.

진짜 뭐가 문제인지 한참을 뒤지고 뒤지다가 key.txt 파일 내용인 'May I come in?'에서 양쪽에 있는 작은따옴표를 제거하고 다시 push를 하니 그제서야 다음 패스워드를 얻을 수 있었다.


Bandit Level 32 → Level 33

이제 git 관련 문제는 끝이난 것 같다. 이제 다른 escape를 할 시간이라고 한다.

로그인을 하니 'WELCOME TO THE UPPERCASE SHELL' 이라는 문구와 함께 '>>' 프롬프트가 떨어졌다.

대문자 쉘에 온 것을 환영합니다? 간단한 명령어 몇 개를 입력해보니 무슨 의미인지 알 수 있었다.

모든 명령어를 대문자로 바꾸어서 입력되는 것을 볼 수 있다.

이 문제도 어떻게 해결해야하는지 도저히 감을 잡을 수가 없어서 다른 사람들 풀이를 참고했다.

'$0'를 입력해서 쉘을 얻고 'bash'로 우리가 이제까지 작업했던 bash 쉘로 돌아갈 수 있었다.

쉘 스크립트에서 '$'는 위치 파라미터를 뜻하며 '$0'은 실행된 스크립트의 메인구문(이름)을 뜻한다고 한다.

 

'$0'를 입력하여 빠져나온뒤 'echo $0'를 입력하면 sh가 출력되는 것을 보면 처음에 '$0'를 입력한 것이 'sh'를 입력한 것과 같은 의미인 듯 하다.

bash 쉘을 얻고 보면 현재 계정이 'bandit33'인 것을 알 수 있다. '/etc/passwd' 파일을 보면 'bandit32' 의 로그인 쉘이 'bandit33' 소유로 setuid가 설정된  uppershell 이라는 것을 알 수 있다.

패스워드는 간단하게 /etc/bandit_pass/bandit33 파일을 읽어서 얻을 수 있다

 

아무리 자료를 뒤져봐도 아직 정확하게 '$0'의 의미를 이해하지 못하겠다. 이 문제의 출제의도를 유추해보자면 exploit 후 쉘을 땄는데 제대로 된 쉘을 얻지 못했을 경우 bash 쉘까지 가는 방법을 알려주는게 아닐까 생각해본다.

 

bandit 끝!

'bandit Write-up' 카테고리의 다른 글

Bandit Level 26 ~ 30  (0) 2023.12.10
Bandit Level 21 ~ 25  (0) 2023.12.05
Bandit Level 16 ~ 20  (1) 2023.12.05
Bandit Level 11 ~ 15  (1) 2023.12.04
Bandit Level 6 ~ 10  (0) 2023.12.01