เจาะลึก Predictable: ถอดรหัสการยึดครองระบบใน DockerLabs

เจาะลึก Predictable: ถอดรหัสการยึดครองระบบใน DockerLabs

โลกของ ไซเบอร์ซีเคียวริตี้ เต็มไปด้วยความท้าทายที่น่าตื่นเต้น และหนึ่งในวิธีที่ดีที่สุดในการเรียนรู้ก็คือการลองลงมือปฏิบัติจริงกับสภาพแวดล้อมจำลอง DockerLabs มอบโอกาสให้ผู้ที่สนใจได้ฝึกฝนทักษะ การเจาะระบบ หรือ Penetration Testing อย่างปลอดภัย วันนี้จะพาไปสำรวจเส้นทางสู่การควบคุมเครื่องจักรจำลองที่มีชื่อว่า “Predictable” ตั้งแต่เริ่มต้นจนถึงการเข้าถึงสิทธิ์สูงสุด หรือ root

สำรวจเป้าหมาย: ค้นหาช่องโหว่

ทุกภารกิจเริ่มต้นด้วยการ สำรวจเบื้องต้น หรือ Reconnaissance ขั้นตอนนี้เหมือนกับการมองหาจุดอ่อนของป้อมปราการ การใช้เครื่องมืออย่าง Nmap ช่วยให้เห็นภาพรวมของบริการที่ทำงานอยู่บนเครื่อง Predictable พบว่ามีพอร์ตสำคัญหลายพอร์ตเปิดอยู่ เช่น พอร์ต 22 (SSH), พอร์ต 80 (เว็บเซิร์ฟเวอร์ HTTP) และพอร์ต 5000 (เว็บเซิร์ฟเวอร์ Flask)

จากนั้น การตรวจสอบเว็บไซต์และโครงสร้างไฟล์เพิ่มเติมด้วยเครื่องมืออย่าง Gobuster หรือ Dirb เผยให้เห็นเส้นทางน่าสนใจ เช่น /predictable-admin และ /predictable-shell.py ซึ่งเป็นเบาะแสสำคัญที่นำไปสู่การเจาะเข้าระบบในขั้นต่อไป

ก้าวแรกสู่ระบบ: การเจาะเข้าสู่ Command Injection

เมื่อเจาะลึกลงไปที่ /predictable-shell.py พบว่านี่คือจุดเริ่มต้นของการเข้าสู่ระบบ ตัวแอปพลิเคชันนี้รับค่า IP address เพื่อใช้ในการ ping ซึ่งเป็นฟังก์ชันที่มักถูกใช้ผิดพลาดและนำไปสู่ช่องโหว่ Command Injection

การลองป้อนค่า IP address ที่ผิดปกติ เช่น 127.0.0.1; whoami แสดงผลลัพธ์ของคำสั่ง whoami กลับมา นั่นยืนยันว่าช่องโหว่นี้มีอยู่จริง และระบบสามารถรันคำสั่งอื่น ๆ ที่ผู้โจมตีป้อนเข้าไปได้

จากจุดนี้ การสร้าง Reverse Shell เป็นสิ่งจำเป็น Reverse Shell คือการทำให้เครื่องเป้าหมายเชื่อมต่อกลับมายังเครื่องของผู้โจมตี ซึ่งช่วยให้ควบคุมเครื่องเป้าหมายได้ผ่านหน้าต่าง Terminal การใช้ payload ที่เหมาะสมเพื่อเปิด Reverse Shell ทำให้ได้ Initial Access หรือการเข้าถึงระบบเบื้องต้น ในฐานะผู้ใช้งาน www-data ซึ่งเป็นผู้ใช้งานที่มีสิทธิ์ค่อนข้างต่ำ

ยกระดับสิทธิ์สู่ Root: การหาช่องโหว่ใน Cron Job

การได้เข้ามาในระบบแล้วเป็นเพียงก้าวแรก เป้าหมายสูงสุดคือการเข้าถึงสิทธิ์ root ซึ่งเทียบเท่ากับการเป็นผู้ดูแลสูงสุดของระบบ การ ยกระดับสิทธิ์ (Privilege Escalation) จึงเป็นขั้นตอนต่อไป

ภายในระบบมีการตรวจสอบไฟล์ต่างๆ ที่สำคัญ พบว่ามีไฟล์ predictable-monitor.sh ที่ทำงานเป็น cron job โดยสิทธิ์ของ root Cron job คือการตั้งเวลาให้ระบบทำงานบางอย่างซ้ำๆ โดยอัตโนมัติ

ไฟล์ predictable-monitor.sh นี้ไม่ได้ทำหน้าที่เพียงแค่ตรวจสอบ แต่ยังเรียกสคริปต์ Python ที่ชื่อว่า cleanup.py อีกด้วย และที่สำคัญที่สุดคือ ผู้ใช้งาน www-data มีสิทธิ์ในการแก้ไขไฟล์ cleanup.py ได้!

นี่คือช่องโหว่สำคัญ การแก้ไขไฟล์ cleanup.py เพื่อเพิ่มคำสั่งที่ให้สิทธิ์ root หรือสร้าง root shell รอไว้ เมื่อ cron job ทำงานตามเวลาที่กำหนด สคริปต์ cleanup.py ที่ถูกแก้ไขก็จะรันด้วยสิทธิ์ของ root ทำให้สามารถยกระดับสิทธิ์เป็น root ได้สำเร็จ

บทเรียนจากการยึดครอง

การเดินทางสู่การควบคุมเครื่อง Predictable ตั้งแต่เริ่มต้นจนได้สิทธิ์ root เป็นตัวอย่างที่ชัดเจนของกระบวนการ การเจาะระบบ ในโลกจริง มันเน้นย้ำถึงความสำคัญของการเขียนโค้ดที่ปลอดภัย การตั้งค่าสิทธิ์ไฟล์ที่ถูกต้อง และการตรวจสอบ Cron Job อย่างละเอียดถี่ถ้วน เพราะช่องโหว่เล็กๆ เพียงจุดเดียวอาจนำไปสู่การควบคุมระบบทั้งหมดได้ การฝึกฝนในสภาพแวดล้อมจำลองเช่นนี้เป็นสิ่งล้ำค่า เพื่อทำความเข้าใจวิธีการทำงานของระบบและเสริมสร้างมาตรการป้องกันให้แข็งแกร่งยิ่งขึ้น