본문 바로가기

Bandit

Bandit Level 26 -> Level 27 (Escape Sequence)

해당 게시글은 bandit wargame에 대한 스포일러(방향성/힌트/정답)를 제공할 수 있습니다. 

 

 

bandit level 26에서는 

제한된 쉘 환경을 우회하여 비밀번호를 획득하여야 합니다. 

 

터미널 창이 충분히 커서 모든 텍스트가 한 번에 출력되면

more는 즉시 종료되고 뒤이어 프로세스가 종료되면서 SSH 세션이 닫힙니다.

 

vi, more, less, man와 같은 유닉스 유틸리티에 구현된 쉘 이스케이프(Shell Escape) 기능을 호출하면,

부모 프로세스의 제어권을 Suspend시키고 주소 공간을 복제하여 하위 쉘 프로세스를 실행하여 제어권을 획득합니다. 

 

터미널 창의 세로 길이를 5행 이하로 축소하여 more가 출력을 멈추고 사용자의 입력을 기다리는 상태를 유지하게 만듭니다.

more가 대기 상태일 때, v 키를 눌러 현재 보고 있는 파일을 vi 편집기로 열 수 있습니다. 

 

 

 

 

:set shell=/bin/bash
:shell

 

 

vi는 편집 도중 쉘 명령을 실행할 수 있는 기능을 제공합니다.

set 명령어로 편집기 내부의 Shell Variable를 /bin/bash로 하이재킹하여 escape 시 호출될 Interpreter를 사용자 의도에 따라 재설정합니다. 해당 명령어가 없으면 :shell 명령 시 시스템의 기본값(제한된 쉘)이 다시 호출되어 escape에 실패합니다. 

 

이후 정의된 쉘을 기동하여 interactive session을 획득합니다. 

 

화면과 같이 bandit@bandit:~$가 나오면 정상적인 interactive session이 활성화된 것입니다. 

 

 

ls -l bandit27-do를 통해 bandit27-do 파일이 bandit27의 권한으로 실행되는 Setuid 파일이라는 사실을 파악했다면,

RUID는 bandit26이지만 Setuid 파일을 통해 일시적으로 EUID를 bandit27로 상승시켜 

cat /etc/bandit_pass/bandit27 명령을 수행시키면 비밀번호가 출력됩니다. 

더보기

Escape Sequence의 보편성

- vi뿐만 아니라 nmap, tcpdump, gdb 등 외부 명령 실행 기능을 지원하는 수많은 관리 도구들이 잠재적인 권한 상승 경로가 될 수 있다. 

'Bandit' 카테고리의 다른 글

Bandit Level 28 -> Level 29  (0) 2026.01.19
Bandit Level 27 -> Level 28  (0) 2026.01.19
Bandit Level 25 -> Level 26  (0) 2026.01.13
Bandit Level 24 -> Level 25  (0) 2026.01.13
Bandit Level 23 -> Level 24  (1) 2026.01.13