Level Goal
Logging in to bandit26 from bandit25 should be fairly easy… The shell for user bandit26 is not /bin/bash, but something else. Find out what it is, how it works and how to break out of it.
Commands you may need to solve this level
ssh, cat, more, vi, ls, id, pwd
0. 풀이에 필요한 개념
- 로그인 전과 후의 파일 접근 권한
- more 프로그램의 개념 및 실행 조건
- vi 상에서 파일 여는 방법
- ssh의 i 옵션
-접속하는 쉘 지정방법
1. bandit25로 로그인 한다
uNG9O58gUE7snukf3bvZ0rxhtnjzSGzG #bandit25 암호
2. 문제를 풀기위해 현재 home 디렉토리의 파일 목록과 파일 내용을 확인한다.
bandit25@bandit:~$ ls -l
total 4
-r-------- 1 bandit25 bandit25 1679 Oct 16 2018 bandit26.sshkey
bandit25@bandit:~$ cat bandit26.sshkey
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEApis2AuoooEqeYWamtwX2k5z9uU1Afl2F8VyXQqbv/LTrIwdW
...
IZdtF5HXs2S5CADTwniUS5mX1HO9l5gUkk+h0cH5JnPtsMCnAUM+BRY=
-----END RSA PRIVATE KEY-----
현재 사용자 홈디렉터리(~)에서 ls -l 명령어로 존재하는 파일 및 속성을 확인한 결과이다. 소유자 그리고 소유그룹은 bandit25 이며 파일타입은 일반파일(-) 로 확인되며 소유자만이 읽기(r)가 가능하고 그룹 및 공개는 읽기(r), 쓰기(w) 그리고 실행(x)권한이 없는 파일 bandit26.sshkey가 존재한다.
해당파일을 cat 명령어로 해당 파일의 내용을 확인한 결과 RSA PRIVATE KEY로 확인되었다.
2. bandit26.sshkey 파일을 이용하여 ssh 접속 시도
bandit25@bandit:~$ ssh -i bandit26.sshkey bandit26@localhost
Could not create directory '/home/bandit25/.ssh'.
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:98UL0ZWr85496EtCRkKlo20X3OPnyPSB5tB5RPbhczc.
Are you sure you want to continue connecting (yes/no)? yes
_ _ _ _ ___ __
| | | (_) | |__ \ / /
| |__ __ _ _ __ __| |_| |_ ) / /_
| '_ \ / _` | '_ \ / _` | | __| / / '_ \
| |_) | (_| | | | | (_| | | |_ / /| (_) |
|_.__/ \__,_|_| |_|\__,_|_|\__|____\___/
Connection to localhost closed.
bandit26.sshkey를 이용해 ssh로 bandit26으로 접속을 시도한다. 문자열 bandit26을 출력하고 연결이 끊어진다. 로그인을 사용하기위한 쉘은 존재하지 않는것 같다.
ssh의 i 옵션은 공공키 인증에 필요한 private key를 사용하기위한 옵션이다.
3. 사용자 계정 로그인 쉘 확인
bandit25@bandit:~$ cat /etc/passwd | grep bandit26
bandit26:x:11026:11026:bandit level 26:/home/bandit26:/usr/bin/showtext
cat 명령어로 사용자별 사용의 정보가 담겨있는 /etc/passwd 에서 grep 명령어로 bandit26이 사용하는 로그인계정을 검색한 결과 사용자 계정 로그인 쉘 부분을 확인한 결과 /usr/bin/showtext를 사용한다.
4. showtext 내용 확인
bandit25@bandit:/home/bandit26$ cat /usr/bin/showtext
#!/bin/sh
export TERM=linux
more ~/text.txt
exit 0
접속 후의 과정에서 more가 실행이 되고 exit 0으로 종료가 되는 코드이다. 접속 프로그램(putty) 창을 줄임으로서 more 프로그램을 실행 시킬 수 있다.
bandit26로 ssh 접속을시도 하게 되면 more는 bandit26의 권한으로 실행되어 text.txt에 참조하는 것임으로 파일접근이 가능하다. bandit25에서 임의로 showtext 실행시 text.txt를 못찾는다. 실행하는 사용자는 bandit25이기때문에 해당 home에서 text.txt를 찾지 못한다.
5. v를 입력하여 vi 프로그램 실행
bandit25@bandit:~$ man more
v Start up an editor at current line. The editor is
taken from the environment variable VISUAL if defined,
or EDITOR if VISUAL is not defined, or defaults to vi
if neither VISUAL nor EDITOR is defined.
more 프로그램이 실행중일때 v 커맨드를 입력하면 현재 줄부터 에디터(vi)를 실행하게 된다.
현재 bandit26으로 로그인중인 상태로 vi가 실행이 되고있다.
6. vi에서 파일 불러와서 수정하기
:e /etc/bandit_pass/bandit26 #edit file
-r-------- 1 bandit26 bandit26 33 Oct 16 2018 /etc/bandit_pass/bandit26 #permission
vi에서 ":"를 눌러 커맨드모드로 진입한다. 그후 e 옵션으로 에디터 상에서 bandit26 암호파일을 연다. 현재 bandit26의 권한으로 실행중이기 때문에 bandit26의 암호파일에 접근할수 있다.
7. bandit26 로그인 비밀번호
5czgV9L3Xx8JPOyRbXh6lQbmIOWvPT6Z #bandit26 password
vi에서 해당위치의 파일을 편집하려고 열면 위와같은 문자열을 발견할 수 있다.
8. 쉘 지정
:set shell=/bin/bash
vi 환경에서 커맨드 e를 이용하여 다음과 같이 shell을 bash 쉘로 지정해주고 엔터를 누르면 적용이된다.
9. 쉘 실행
:shell #type shell
bandit26@bandit:~$ #bandit26 shell
vi의 커맨드 shell을 입력하면 bandit26으로 접속이 된다
10. 정리
처음 bandit25의 shell로 접속한 상태이며 ssh를 통해 bandit26에 접속을한다. 접속중에는 more 를 실행하다 vi를 실행해 vi로 bandit26의 로그인 비밀번호를 알아내고 실행 shell 값을 재지정한다. 그리고 vi에서 shell을 실행하면 bandit26의 쉘로 접속하게 된다.