Bandit Wargame 풀이 기록입니다.
1. 문제 목표 및 접속 정보
- 목표다음 레벨 비밀번호를 확인한다.
- 제한된 쉘 환경에서 벗어나 정상적인 쉘로 전환한 뒤,
- 접속 정보
- Host:
bandit.labs.overthewire.org - Port:
2220 - User:
bandit32 - Password:
3O9RfhqyAlVBEZpVb6LYStshZoqoSx5K
- Host:
ssh bandit32@bandit.labs.overthewire.org -p 2220
2. 풀이 과정
접속 직후 이상한 쉘 환경
로그인하자마자 평소와 다른 쉘이 나타났다.
ls, cat 같은 기본 명령어들이 제대로 동작하지 않았다.
일반적인 bash 환경이 아니라,
의도적으로 기능이 제한된 쉘에 들어와 있다는 느낌을 받았다.
문제 원인 파악
이 레벨은 파일이나 권한 문제가 아니라,
현재 실행 중인 쉘 자체가 제한되어 있는 상황이라는 판단이 들었다.
여기서 중요한 점은,
쉘 역시 하나의 프로그램이라는 사실이다.
해결의 실마리
리눅스 쉘 검색을 했는데
echo : 기본 출력, 자동 개행
printf : 기본 출력, 자동 개행 X
$$ : 쉘 프로세스 번호(PID)
$? : 최근에 실행된 명령어, 함수, 스크립트 자식의 종료 상태
$! : 최근에 실행한 백그라운드 명령의 PID
$- : 현재 옵션 플래그
$_ : 지난 명령의 맞미ㅏㄱ 인자로 설정된 특수 변수
$0 : 스크립트 파일의 이름으로 확장됨
$# : 스크립트에 전달되는 인자들의 수
$* : 스크립트에 전달된 모든 인자들 출력
$@ : 스크립트에 전달된 모든 인자들 출력
$1, $2, .. : 스크립트로 전달된 인자들(args[0], args[1], ..)
출처:http://m.blog.naver.com/hj_kim97/222586947801
다음과 같은 쉘 스크립트 문법이 잘 정리가 돼있는 블로그를 발견했다.
제한 쉘 탈출
아래 명령어를 입력했다.
왜냐하면!
쉘도 실행 파일이라는 걸 아느냐?
제한된 쉘이니 $0을 통해 재실행을 시키는 것이다 그러면 제한이 걸려있던게 풀리면서 정상적인 bash쉘로 전환이 가능해진다.
- 제한된
sh환경 ❌ $0→shsh실행 → 새 쉘 생성- 제한 해제
$0
이후 프롬프트가 바뀌면서,
정상적인 bash 쉘로 전환된 것을 확인할 수 있었다.
비밀번호 확인
정상 쉘로 진입한 뒤,
다음 레벨 비밀번호를 확인했다.
cat /etc/bandit_pass/bandit33
tQdtbs5D5i2vJwkO8mEyYEyTL8izoeJ0
3. Level [33] 비밀번호 (Flag) 획득
제한된 쉘 환경에서 $0을 이용해
정상 쉘을 실행한 뒤 비밀번호를 획득했다.
[tQdtbs5D5i2vJwkO8mEyYEyTL8izoeJ0]
4. 핵심 명령어 및 개념
$0- 현재 실행 중인 쉘의 이름을 나타내는 변수
- 명령어처럼 실행하면 해당 쉘을 다시 실행한다
- 제한 쉘 (restricted shell)
- 일부 명령어 실행이 제한된 쉘 환경
- 다른 쉘을 실행할 수 있다면 탈출 가능하다
- 쉘은 프로그램이다
- 로그인 쉘이 전부가 아니다
- 쉘 위에서 다른 쉘을 실행할 수 있다
한 줄 정리
제한된 환경에 있다고 해서
항상 제한된 건 아니다.
쉘 자체를 이해하면, 탈출 방법이 보인다.