
INFORMATION GATHERING
NMAP - TCP PORT SCANNING
- 개방된 TCP 포트 : 22, 80
➜ recon nmap -p- -sC -sV -Pn -n 10.129.229.66 -oN 10.129.229.66_TCP
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-26 17:55 KST
Nmap scan report for 10.129.229.66
Host is up (0.083s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_ 256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open http nginx
|_http-title: Did not follow redirect to http://2million.htb/
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 90.61 secondsNMAP - UDP PORT SCANNING
- 개방된 UDP 포트 없음
PORT 80
/invite 경로로 접근하면 /js/inviteapi.min.js 파일이 서버로부터 반환된다.

응답값의 자바스크립트 코드는 난독화(패킹) 되어있는데,
이는 개발자 도구의 console.log 함수를 이용하면 쉽게 원본 코드를 확인할 수 있다.

초대코드를 생성하는 함수로 추측되는 makeInviteCode 함수의 코드 블럭을 살펴보면
/api/vi/invite/how/to/generate API 호출 경로가 있다.

이 경로로 접근하여 API를 호출하면 ROT13 인코딩 된 데이터를 반환한다.
이를 다시 디코딩하여 값을 확인해보니 실제 초대코드 발급 API 경로(/api/v1/invite/generate)였다.

다시 초대코드 발급 API를 호출하여 인코딩된 값을 확인 후 디코딩하여 초대코드 정보를 획득했다.
이전 과정에서 획득한 초대코드 값을 이용하여 계정 등록 및 접속에 성공했다.

이후 추가적으로 활용 가능한 API 엔드포인트가 있는지 정보를 수집했다.
최초 URL로만 접근하면 401 권한없음 응답이 발생했다.
현재 로그인에 성공한 상태이므로, 세션 값을 요청에 함께 전달하였으며 정상적으로 응답을 받을 수 있었다.
디렉토리 열거 도구(gobuster)를 통해 /api/v1 경로가 존재하는 것을 확인했다.
curl 명령어를 이용하여 해당 경로로 요청을 보내봤고, 이 과정에서 API 엔드포인트 정보들을 수집했다.

수집한 정보를 바탕으로 단계적으로 API 호출을 시도했으며,
일반 사용자 계정을 관리자 계정으로 등록하는데 성공했다.
이어서, 실제로 일반사용자 계정이 관리자 계정으로 등록되었는지 (권한상승 되었는지) 확인하기 위해
/api/v1/admin/vpn/generate API 호출을 시도했다. 정상적으로 호출 가능했다.

INITIAL ACCESS
이 때, /api/v1/admin/vpn/generate API 호출에 사용되는 username 파라미터에 RCE가 가능하였다.
이를 이용하여 대상 호스트와의 리버스쉘 연결에 성공했다. (대상 호스트 계정(www-data)의 쉘 획득 성공)

대상 호스트로의 초기침투 성공 후 /var/www/html 경로의 .env 파일에서
평문으로 저장된 DB 계정정보를 획득할 수 있었다.

대상 호스트에서는 3306 포트에서 MariaDB가 운영되고 있었으며 접속도 가능했다.
www-data@2million:~/html$ mysql -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 164059
Server version: 10.6.12-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>그러나 활용 가능한 유용한 정보는 확인되지 않았다.

LATERAL MOVEMENT
획득한 계정정보로 SSH 접속도 시도해봤으며 이 과정에서 admin 계정으로 원격 접속에 성공했다.
POST EXPLOIT
admin 계정으로 접속에 성공한 후 루트 계정으로의 권한 상승을 위해 정보를 수집했다.
이 과정에서 /var/mail/admin 파일을 발견했으며 Overlay FS / FUSE 관련 CVE를 찾아보니 권한상승 CVE가 존재했다.
대상 호스트는 해당 CVE에 취약한 OS 버전(Linux 5.11 ~ 6.1.8)이었기 때문에 익스를 시도했다.
admin@2million:~/html$ uname -a
Linux 2million 5.15.70-051570-generic #202209231339 SMP Fri Sep 23 13:45:37 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[ . . . ]
admin@2million:~/html$ cat /proc/version
Linux version 5.15.70-051570-generic (kernel@sita) (gcc (Ubuntu 11.2.0-19ubuntu1) 11.2.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #202209231339 SMP Fri Sep 23 13:45:37 UTC 2022CVE-2023-0386 EXPLOIT PoC Code를 이용하여 익스플로잇을 진행하였으며 권한상승에 성공했다.
