[overthewire] Bandit Level 25 → Level 26

moon_security·2025년 3월 23일

[OverTheWire] Bandit

목록 보기
27/32

문제 목표!

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.

bandit26은 지금까지 저희가 사용했던 bash 쉘이 아닌 다른 쉘을 사용하나 봅니다.
일단 로그인해서 살펴봐야 겠군요!
같이 풀어볼까요?

문제 풀이!

먼저 bandit26이 어느 쉘을 쓰는지 알아야 합니다.
bandit25로 로그인하여 아래와 같은 명령어를 입력해 볼까요?

bandit25@bandit:~$ grep bandit26 /etc/passwd
bandit26:x:11026:11026:bandit level 26:/home/bandit26:/usr/bin/showtext

/bin/bash가 아닌 /usr/bin/showtext를 사용하는 것을 발견했습니다.
여기서 위의 코드를 짤막하게 해석해 볼까요?

📌 /etc/passwd
사용자 계정 정보가 담긴 파일!
7개의 필드가 콜론(:)으로 나뉘어 있는데 자세한 내용은 아래와 같습니다.
1. 사용자 이름(bandit26)
-> 로그인할 때 쓰는 계정
2. 비밀번호(x)
-> 비밀번호는 /etc/shadow에 암호화되어 저장됨
3. UID(11026)
-> 사용자 ID
4. GID(11026)
-> 그룹 ID
5. 설명(bandit level 26)
-> 사용자에 대한 설명
6. 홈 디렉토리(/home/bandit26)
->
7. 로그인 쉘(/usr/bin/showtext)
-> 로그인할 때 실행되는 프로그램으로 보통은 /bin/bash가 설정되어 있음

bandit26으로 로그인 했을 때 실행되는 /usr/bin/showtext 파일이 궁금해지네요!
어떤 파일인지 읽어봅시다.

bandit25@bandit:~$ cat /usr/bin/showtext
#!/bin/sh

export TERM=linux

exec more ~/text.txt
exit 0

이 스크립트에서 우리가 봐야할 것은 exec more ~/text.txt입니다.
파일 내용을 확인하는 명령어인 more로 홈 디렉토리의 text.txt를 읽는다...
별 거 아닌 것처럼 보이지요?
하지만 more 명령어에는 엄청난 비밀이 숨겨져 있답니다.
바로 우회하여 '쉘'을 실행시킬 수 있는 것이죠!!
여기서 포인트는 more로 명령어를 파일 내용을 확인하기 위해서는
터미널 창의 크기를 잘 조절해야 한답니다.
아래 실습을 확인해볼까요?

ssh -i bandit26.sshkey bandit26@localhost -p 2220

위 명령어를 사용하여 bandit26으로 접속을 했습니다.

하단에 --more-- 보이시지요?
여기서 이제 vi 편집기 환경을 열기 위해 v를 눌러줍니다.

그러면 위와 같은 화면이 나올텐데요!
:set shell=/bin/sh
:shell
을 실행하면 놀랍게도 사용자가 bandit26인 쉘이 열립니다!!

$ id
uid=11026(bandit26) gid=11026(bandit26) groups=11026(bandit26)

이를 활용하여 bandit26의 비밀번호를 얻을 수 있겠네요!

$ cat /etc/bandit_pass/bandit26
s0773xxkk0MXfdqOfPRVr9L3jJBUOgCZ

짜잔! 비밀번호 획득 완료!!

profile
모의해킹 & 보안 공부 기록 블로그

0개의 댓글