
ถอดรหัส DevHub: เจาะระบบจากช่องโหว่สู่การควบคุมเบ็ดเสร็จ
DevHub คือชื่อของเครื่องจำลองในสนามฝึก HackTheBox ที่ถูกจัดอยู่ในระดับความยากปานกลาง แต่เต็มไปด้วยบทเรียนอันล้ำค่าสำหรับผู้ที่ต้องการทำความเข้าใจกระบวนการเจาะระบบ
ด้วยการผสมผสานช่องโหว่หลายรูปแบบ ตั้งแต่การค้นพบข้อมูลที่ซ่อนอยู่ ไปจนถึงการใช้ประโยชน์จากเครื่องมือพัฒนาที่ถูกเปิดเผย และการยกระดับสิทธิ์ผ่านการตั้งค่าที่ไม่รัดกุม การเดินทางสู่การควบคุม DevHub จึงเป็นการผจญภัยที่น่าสนใจและให้ความรู้มากมาย
บทความนี้จะพาทุกคนไปสำรวจเส้นทางนี้อย่างละเอียด ราวกับว่ากำลังลงมือเจาะระบบจริงด้วยตัวเอง
สำรวจเบื้องต้น: เปิดประตูสู่ช่องโหว่
การสำรวจเครือข่ายเริ่มต้นด้วยการสแกนพอร์ต พบว่า DevHub เปิดพอร์ต 22 (SSH), 80 (HTTP) และ 8080 (HTTP) พอร์ต 80 แสดงหน้าเว็บ Apache มาตรฐาน แต่จุดน่าสนใจอยู่ที่พอร์ต 8080 ซึ่งเป็นที่ตั้งของเว็บแอปพลิเคชัน “DevHub”
การตรวจสอบซอร์สโค้ดของหน้าเว็บ DevHub อย่างละเอียด คือกุญแจสำคัญ ในคอมเมนต์ HTML บรรทัดหนึ่ง มีข้อความที่บ่งชี้ถึง <!-- devhub.htb/inspector --> ซึ่งชวนให้สงสัยว่าอาจเป็นเครื่องมือพัฒนาบางอย่างที่ถูกเปิดเผย
เมื่อลองเข้าถึง URL /inspector ก็พบกับหน้าจอของ “MCP Inspector” จริงๆ สิ่งนี้เองคือจุดเริ่มต้นของช่องโหว่ เพราะหน้า Inspector นี้ดูเหมือนจะสามารถประมวลผลคำสั่งบางอย่างได้
สร้างจุดเริ่มต้น: เข้าถึงผู้ใช้งานด้วย Server-Side Template Injection
เมื่อพบ MCP Inspector ขั้นตอนต่อไปคือการทดสอบการทำงาน ลองใส่คำสั่งง่ายๆ อย่าง {{7*7}} ผลลัพธ์ที่ได้คือ 49
ซึ่งเป็นสัญญาณชัดเจนของช่องโหว่ Server-Side Template Injection (SSTI) หมายความว่าเซิร์ฟเวอร์กำลังประมวลผลข้อมูลที่ใส่เข้าไปในฐานะแม่แบบ ด้วยเอ็นจิ้น Jinja2
ช่องโหว่ SSTI สามารถถูกใช้เพื่อเรียกใช้คำสั่งระบบได้ โดยการสร้างเพย์โหลดที่ซับซ้อนขึ้น เพื่อเข้าถึงโมดูลของ Python เช่น os และใช้ฟังก์ชัน popen เพื่อรันคำสั่งเชลล์ จากนั้นจึงตั้งค่าเครื่องมือฟังการเชื่อมต่อ (Netcat listener) บนเครื่องของเรา
และส่งเพย์โหลดที่ออกแบบมาเพื่อสร้าง reverse shell กลับมายังเครื่องของเราได้สำเร็จ ทำให้สามารถเข้าถึงระบบในฐานะผู้ใช้งาน devhub และค้นพบไฟล์ user.txt เพื่อเก็บ User Flag ได้อย่างง่ายดาย
ยกระดับสิทธิ์: คว้าอำนาจสูงสุดด้วย npm
เมื่อได้สิทธิ์ผู้ใช้งานเบื้องต้น การยกระดับสิทธิ์สู่ root คือเป้าหมายต่อไป การตรวจสอบด้วยคำสั่ง sudo -l เปิดเผยว่าผู้ใช้งาน devhub สามารถรัน /usr/bin/npm ด้วยสิทธิ์ root ได้โดยไม่ต้องใส่รหัสผ่าน นี่คือช่องโหว่สำคัญในการยกระดับสิทธิ์
npm หรือ Node Package Manager เป็นเครื่องมือสำหรับจัดการแพ็กเกจของ Node.js ซึ่งมีฟังก์ชันการทำงานที่หลากหลาย แต่ในกรณีนี้ เมื่อสามารถรัน npm ด้วยสิทธิ์ root ได้ การใช้ประโยชน์จากฟังก์ชัน exec ของ npm เพื่อรันคำสั่งเชลล์โดยตรงจึงเป็นไปได้
ด้วยคำสั่งง่ายๆ อย่าง sudo npm exec /bin/bash ระบบจะทำการเปิดเชลล์ใหม่ให้ทันที แต่คราวนี้เป็นเชลล์ที่ทำงานด้วยสิทธิ์ของ root ทำให้สามารถเข้าถึงทุกส่วนของระบบ รวมถึงไฟล์ root.txt เพื่อเก็บ Root Flag ได้ในที่สุด
บทเรียนจาก DevHub: การป้องกันและมุมมองของนักเจาะระบบ
การเจาะระบบ DevHub สอนให้เห็นถึงความสำคัญของการตรวจสอบทุกรายละเอียด ไม่ว่าจะเป็นคอมเมนต์ในซอร์สโค้ด การทำความเข้าใจช่องโหว่ที่เกิดจากการเปิดเผยเครื่องมือพัฒนา และการตั้งค่าสิทธิ์ผู้ใช้งานที่อาจนำไปสู่การยกระดับสิทธิ์
การทำความสะอาดซอร์สโค้ดก่อนนำขึ้นโปรดักชัน การจำกัดการเข้าถึงเครื่องมือพัฒนา และการกำหนดสิทธิ์ sudo อย่างรอบคอบ เป็นสิ่งจำเป็นอย่างยิ่งในการสร้างความปลอดภัยให้กับระบบ การเข้าใจว่าผู้ไม่หวังดีคิดและลงมืออย่างไร จะช่วยให้เราสามารถสร้างเกราะป้องกันที่แข็งแกร่งขึ้นได้