[HTB Soulmate write up]

Linux boot to root machine

Alt text

เริ่มด้วยการ nmap เพื่อสแกนดู port ที่เปิดอยู่ทั้งหมด

┌──(kali㉿kali)-[~/Downloads/HTB/Soulmate]
└─$ nmap -sC -sV -T5 10.10.11.86
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-15 09:17 +07
Nmap scan report for 10.10.11.86
Host is up (0.038s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_  256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://soulmate.htb/
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 21.54 seconds

ให้ไปเพิ่ม host ที่ /etc/hosts

10.10.11.86     soulmate.htb

จากนั้นเข้าไปดูที่หน้าเว็บผ่าน url http://soulmate.htb/ Alt text ใช้ dirsearch สำหรับการ enum เพื่อดู path ต่างๆของ web

┌──(kali㉿kali)-[~/Downloads/HTB/Soulmate]
└─$ dirsearch -u http://soulmate.htb/                              
/usr/lib/python3/dist-packages/dirsearch/dirsearch.py:23: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import DistributionNotFound, VersionConflict

  _|. _ _  _  _  _ _|_    v0.4.3                                                                                                                                                    
 (_||| _) (/_(_|| (_| )                                                                                                                                                             
                                                                                                                                                                                    
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11460

Output File: /home/kali/Downloads/HTB/Soulmate/reports/http_soulmate.htb/__25-09-15_09-29-43.txt

Target: http://soulmate.htb/

[09:29:43] Starting:                                                                                                                                                                
[09:30:01] 301 -  178B  - /assets  ->  http://soulmate.htb/assets/          
[09:30:01] 403 -  564B  - /assets/                                          
[09:30:05] 302 -    0B  - /dashboard.php  ->  /login                        
[09:30:11] 200 -    8KB - /login.php                                        
[09:30:11] 302 -    0B  - /logout.php  ->  login.php                        
[09:30:20] 302 -    0B  - /profile.php  ->  /login                          
[09:30:21] 200 -   11KB - /register.php                                     
                                                                             
Task Completed

จากนั้นเข้าไปทำการ register Alt text หลังจาก register เสร็จก็ทำการ login เข้าไป Alt text หลังจากเข้ามาในเว็บจะมีแค่ฟังก์ชันสำหรับ update profile ซึ่งผมลองทำอะไรหลายๆอย่างกับหน้านี้แล้วแต่ก็ใช้ไม่ได้ทั้ง XSS, Upload webshell, SQL Injection Alt text ผมเลยจะลอง enum ต่อโดยการใช้ ffuf เพื่อหา subdomain อื่นๆของ web นี้

┌──(kali㉿kali)-[~/Downloads/HTB/Soulmate]
└─$ ffuf -u http://soulmate.htb/ -H "Host: FUZZ.soulmate.htb" -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -fs 154

        /'___\  /'___\           /'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://soulmate.htb/
 :: Wordlist         : FUZZ: /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt
 :: Header           : Host: FUZZ.soulmate.htb
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response size: 154
________________________________________________

ftp                     [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 139ms]
:: Progress: [114442/114442] :: Job [1/1] :: 1265 req/sec :: Duration: [0:01:48] :: Errors: 0 ::

เพิ่ม ftp.soulmate.htb เข้าไปที่ /etc/hosts

10.10.11.86     soulmate.htb ftp.soulmate.htb

จากนั้นเข้าไปดูที่หน้าเว็บ http://ftp.soulmate.htb/ Alt text ซึ่งสำหรับหน้านี้ผมก็ลอง SQL Injection ดูแล้วก็ไม่ได้ ผมเลยลองหาช่องโหว่ที่เกี่ยว bypass login ของ crushFTP ดูเผื่อเจอ Alt text แล้วก็ไปเจออันนึงที่ดูน่าจะใช่ซึ่งก็คือ CVE-2025-31161 มันก็คือช่องโหว่ที่สามารถทำให้ผู้โจมตีใช้สิทธิ์ของ crushadmin (เป็น default user admin ของ crushFTP) ในการทำอะไรต่างๆได้ด้วยสิทธิ์ระดับสูง ซึ่งผมก็ได้นำ CVE นี้ไปหา exploit ก็ไปเจอมาอันนึง CVE-2025-31161 ซึ่ง exploit นี้มันจะทำการใช้สิทธิ์ของ crushadmin ในการไปสร้าง user ใหม่ที่มีสิทธิ์เป็น admin ในระบบได้ Alt text จากนั้นก็ทำการ login เข้าไปด้วย username กับ password ที่เราพึ่งสร้างมา และทำการเข้าไปที่หน้า admin > User management Alt text จะเห็นว่า user ben มี folder webProd อยู่เลยลองกดเข้าไปดูไฟล์ข้างใน Alt text จากรูปนี้ทำให้เรารู้ว่า user ben เป็นคนจัดการเกี่ยวกับ web ที่เราเข้าไปดูตอนแรกซึ่งหากเราเข้าไปที่ user ben และทำการ upload webshell ขึ้นไปได้เราก็น่าจะเข้าไปในเครื่องได้ ดังนั้นผมเลยทำการเปลี่ยน password ของ user ben เป็น 1234 และกด save Alt text ทำการออกจากระบบและ login เข้าไปใหม่ด้วย user ben และ password 1234 จากนั้นกดเข้าไปที่ folder webProd Alt text กด Add file และทำการ upload webshell ลงไป Alt text Alt text ในเครื่องเราให้ทำการเปิด listening ไว้ที่ port 9001

┌──(kali㉿kali)-[~/Downloads/HTB/Soulmate]
└─$ nc -lvnp 9001               
listening on [any] 9001 ...

กลับไปที่ web http://soulmate.htb และเข้าไปที่ path http://soulmate.htb/php-reverse-shell.php เพื่อ trigger ตัว reverse shell Alt text จากนั้นกลัมาดูที่เครื่องเราที่ได้ทำการเปิด listening ไว้ Alt text ทำการ deploy linpeas.sh มาที่เครื่องเหยื่อไปไว้ที่ path /tmp และทำการ run จะเจอสิ่งที่น่าสงสัยอยู่ 2 จุด อย่างแรกคือ password ของ admin ของ web soulmate.htb แต่ก็ไม่ได้มีอะไร Alt text อีกอันคือ port ที่เครื่องนี้ทำการเปิดอยู่ซึ่งมันเยอะกว่าปกติแสดงว่ามันต้องมีการใช้ service บางอย่าง Alt text และในเครื่องนี้มี user แค่ ben และ root ดังนั้นเราต้องหา password ของ ben ให้ได้ก่อน Alt text

ผมเลยใช้คำสั่ง grep -rE '\bben\b' . เพื่อหาไฟล์ที่มีคำว่า ben จาก path ที่อยู่ปัจจุบันและ subfolder ทั้งหมด (ซึ่งมันเยอะมากครับบอกเลยว่าหาตาแตก 😅) แต่ก็เจอจริงๆ Alt text ได้ user flag แล้วววว Alt text

จากนั้นผมลองใช้ sudo -l ดูก็ปรากฎว่า user ben ไม่สามารถรัน sudo ในเครื่องนี้ได้เลย ซึ่งจากผลลัพธ์ของ linpeas.sh ก่อนหน้านี้ที่เราเห็น port เปิดเยอะๆมันมี port ที่ผมไม่คุ้นและน่าสงสัยอยู่ก็คือ port 4369 และ 2222 แต่ผมลอง ssh tunneling ไปที่ port 4369 ด้วยคำสั่ง ssh -L 4369:localhost:4369 ben@10.10.11.86 และเข้าไปที่ url http://127.0.0.1:4369/ แล้วแต่ก็ไม่เจออะไร ต่อมาทำแบบเดียวกันกับ port 2222 Alt text ปรากฎว่าเจอ version และชื่อของ service ผมเลยลองนำไป search หาช่องโหว่ดู Alt text แล้วก็เจอจริงๆด้วย ซึ่งช่องโหว่ของตัวนี้ก็คือ CVE-2025-32433 มันเป็นช่องโหว่ของ SSH server ที่มาจาก library SSH ของ Erlang/OTP ทำให้ผู้โจมตีที่ยังไม่ผ่านการยืนยันตัวตนสามารถทำ RCE ได้นั่นเอง แต่เรายังไม่รู้ว่า Erlang/OTP SSH รันด้วยสิทธิ์ของใครถ้าหากรันด้วยสิทธิ์ของ root ข้อนี้ก็จบแต่หากรันด้วยสิทธิ์ของ ben ก็ต้องทำต่อ อยากรู้ก็ต้องลองครับ ผมเลยทำการโหลดหา exploit มา CVE-2025-32433-Erlang-OTP-SSH-RCE-PoC จากนั้นทำการ deploy มาที่เครื่องเหยื่อ และใช้คำสั่ง (ให้ทำการเปิด listening ไว้ที่เครื่องเราก่อนด้วย) Alt text

อย่าลืมใส่ port เป็น 2222 ด้วยนะ

กลับไปที่เครื่องเราที่ทำการเปิด listening ไว้ Alt text ปรากฎว่ามันรันด้วยสิทธิ์ root จึงทำให้เราได้ shell มาด้วยสิทธิ์ของ root ด้วย ก็เลยทำให้ได้ root flag แล้ววววว 🥳

ก็จบไปอีกหนึ่ง easy machine นะครับข้อนี้ผมว่าเน้นการ enum เป็นหลักถ้าติดนานๆก็ตรงที่หา password ของ ben นี่แหละก็ไว้เจอกันใหม่ blog หน้าครับ

[RELATED POSTS]