Nibbles 머신 클리어 화면 — Machine State는 Retired, Pwn Date 2026년 9월 15일
머신 개요
Hack The Box의 퇴역 머신 Nibbles다. 난이도 Easy, Linux. 열린 포트는 22와 80 두 개뿐이고, 웹에는 Hello world! 한 줄만 떠 있다.
이 머신에서 오래 붙잡힌 지점은 취약점 자체가 아니었다. 공격 대상 애플리케이션이 어디 있는지 찾는 첫 단계였다. 답은 첫 페이지 HTML 주석에 처음부터 적혀 있었다.
정찰 (Recon)
전체 포트를 먼저 훑었다.
$ nmap -p- -T4 --min-rate=1000 -Pn 10.129.15.216
Starting Nmap 7.99 ( https://nmap.org ) at 2026-09-02 19:30 +0900
Nmap scan report for 10.129.15.216
Host is up (0.33s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 70.14 seconds
열린 두 포트에 서비스·스크립트 스캔을 붙였다.
$ nmap -p 22,80 -sV -sC 10.129.15.216
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 c4:f8:ad:e8:f8:04:77:de:cf:15:0d:63:0a:18:7e:49 (RSA)
| 256 22:8f:b1:97:bf:0f:17:08:fc:7e:2c:8f:e9:77:3a:48 (ECDSA)
|_ 256 e6:ac:27:a3:b5:a9:f1:12:3c:34:a5:5d:5b:eb:3d:e9 (ED25519)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
SSH는 자격증명이 없으면 손댈 수 없다. 남는 건 80이다. 그런데 웹 루트에는 이것뿐이었다.
브라우저로 접속한 웹 루트 — Hello world! 한 줄만 표시된다
초기 침투 — 공격 대상 찾기
[막힌 곳 — 디렉터리 퍼징] Hello world 한 줄짜리 페이지라면 실제 애플리케이션은 다른 경로에 있다고 봤다. 그래서 디렉터리 퍼징을 먼저 생각했다.
결과는 빈손이었다. 나중에 답을 알고 나서야 이유가 보였다. 다음 단계에 필요한 경로 이름이 내가 쓴 워드리스트에 아예 없었다.
퍼징은 워드리스트에 있는 단어만 찾는다. 당연한 말인데, 못 찾았을 때 "여기엔 없다"로 결론 내리기 쉽다. 실제로는 "내 목록에 없다"가 맞다.
[막힌 곳 — Burp에 패킷이 안 잡힘] 포트 스캔에서 더 나올 게 없어 보여서 Burp Suite로 응답을 직접 보기로 했다.
그런데 아무리 새로고침해도 Burp에 요청이 안 잡혔다. 한참 헤매다 원인을 찾았다. 파이어폭스 프록시 설정을 안 해준 것이었다.
프록시를 잡고 나니 응답이 들어왔다. 다만 그때 화면에 떠 있던 건 응답의 윗부분이었다. 상태 줄과 헤더까지만 보이고, 스크롤을 내리지 않아 본문 아래쪽은 시야 밖이었다.
Burp에서 확인한 첫 응답 — 헤더와 Hello world! 본문까지만 보이고 그 아래 주석은 스크롤 밖에 있다
이 화면까지가 그때 내가 본 전부였다.
[막힌 곳 — 서버 버전 공개 취약점으로 오판] 그 화면에서 Server: Apache/2.4.18 (Ubuntu)를 확인했다. 버전이 노출됐으니 다음 단계는 이 버전의 공개 취약점을 찾는 문제라고 판단했다.
이게 방향 착오였다. 답은 같은 응답의 아래쪽에 있었다. 스크롤을 내리니 이런 주석이 있었다.
listening on [any] 4444 ...
connect to [10.10.14.18] from (UNKNOWN) [10.129.18.48] 58344
bash: cannot set terminal process group (1360): Inappropriate ioctl for device
bash: no job control in this shell
nibbler@Nibbles:/var/www/html/nibbleblog/content/private/plugins/my_image$ id
uid=1001(nibbler) gid=1001(nibbler) groups=1001(nibbler)
좌측 터미널에 리버스셸로 붙은 nibbler 계정, 우측 터미널에 PoC 실행 결과가 보인다
셸이 떨어진 위치가 플러그인 디렉터리 안이라는 점이 업로드 경로를 그대로 보여준다. 홈 디렉터리로 이동해 플래그를 확인했다.
nibbler@Nibbles:/home/nibbler$ cat user.txt
nibbler@Nibbles:/home/nibbler$ ls
personal
personal.zip
user.txt
nibbler@Nibbles:/home/nibbler$ cat user.txt
fdb20232************************
권한 상승 (Privilege Escalation)
권한 상승은 sudo 설정부터 봤다.
nibbler@Nibbles:/home/nibbler$ sudo -l
nibbler@Nibbles:/home/nibbler$ sudo -l
User nibbler may run the following commands on Nibbles:
(root) NOPASSWD: /home/nibbler/personal/stuff/monitor.sh
비밀번호 없이 root로 실행할 수 있는 스크립트가 지정돼 있다. 그런데 그 경로가 당장은 존재하지 않았다. 홈에 있던 것은 personal.zip이었다.