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 |