
ถอดรหัส Scheme Catcher: ปฏิบัติการเจาะระบบสี่ชั้น สู่การควบคุมขั้นสูงสุด
การเจาะระบบหรือ Pentesting กล่องทดสอบความปลอดภัยมักจะเต็มไปด้วยความท้าทายที่น่าสนใจ และในโลกของ TryHackMe กล่องที่ชื่อ “Scheme Catcher” ก็เป็นหนึ่งในนั้น ที่ไม่ได้แค่ให้เราหาช่องโหว่เดียวแล้วจบ แต่เป็นการต่อยอดช่องโหว่หลายชั้น เพื่อเข้าควบคุมระบบได้อย่างสมบูรณ์
บทความนี้จะพาคุณไปดูเส้นทาง ตั้งแต่การสำรวจพื้นฐาน ไปจนถึงการยกระดับสิทธิ์ เพื่อเข้าใจกระบวนการคิดและเทคนิคที่ใช้ในสถานการณ์จริง
การสำรวจเบื้องต้นและช่องทางเข้าสู่ระบบ
เริ่มต้นจากการสำรวจเครือข่ายด้วยเครื่องมืออย่าง Nmap เพื่อค้นหาพอร์ตที่เปิดอยู่ ทำให้พบพอร์ตสำคัญอย่าง SSH (พอร์ต 22) ที่ใช้สำหรับการเข้าถึงระยะไกล, HTTP (พอร์ต 80) ที่เป็นเว็บเซิร์ฟเวอร์ปกติ และ พอร์ต 5000 ซึ่งเป็นอีกหนึ่งเว็บแอปพลิเคชันที่รันอยู่
เมื่อเข้าชมเว็บเซิร์ฟเวอร์บนพอร์ต 80 พบว่าเป็นหน้าเว็บธรรมดา มีการเชื่อมโยงไปยังไฟล์ CSS และ JavaScript ส่วนพอร์ต 5000 ดูเหมือนจะเป็นแอปพลิเคชัน Flask ซึ่งเป็นเฟรมเวิร์กยอดนิยมในการพัฒนาเว็บ
การสำรวจในขั้นตอนนี้ยังเผยให้เห็นว่ามีไดเรกทอรีที่น่าสนใจชื่อ /admin บนเว็บเซิร์ฟเวอร์พอร์ต 80 ซึ่งเป็นเป้าหมายต่อไปที่ต้องพยายามเข้าถึง
เจาะลึกช่องโหว่ SSRF บน Flask
แอปพลิเคชัน Flask บนพอร์ต 5000 กลับกลายเป็นประตูสำคัญ ในการตรวจสอบเบื้องต้นพบว่ามันมี ช่องโหว่ Server-Side Request Forgery (SSRF) ช่องโหว่นี้อนุญาตให้ผู้โจมตีสามารถสั่งให้เซิร์ฟเวอร์ทำการร้องขอข้อมูลไปยัง URL ภายในหรือภายนอกตามที่ระบุได้
นี่คือจุดเปลี่ยนสำคัญ ที่ทำให้เราสามารถใช้ประโยชน์จากช่องโหว่ SSRF นี้ เพื่อสั่งให้เว็บแอปพลิเคชัน Flask ทำการร้องขอไปยังไดเรกทอรี /admin บน localhost:80 (ซึ่งเป็นเว็บเซิร์ฟเวอร์ตัวเดียวกัน) ผลลัพธ์คือ เราสามารถเข้าถึงหน้าแอดมินที่ปกติถูกจำกัดการเข้าถึงจากภายนอกได้สำเร็จ
เมื่อเข้าสู่หน้า /admin ผ่านช่องโหว่ SSRF ก็พบกับฟังก์ชัน อัปโหลดไฟล์ นี่คือหนทางต่อไปในการเจาะระบบให้ลึกขึ้น
การอัปโหลดไฟล์พิสดารด้วยไฟล์ลูกผสม (Polyglot File)
หน้าอัปโหลดไฟล์บน /admin มีการตรวจสอบประเภทของไฟล์ที่เข้มงวด มันจะบล็อกไฟล์นามสกุลที่ไม่ปลอดภัยอย่าง .php เพื่อป้องกันการอัปโหลดโค้ดอันตราย
แต่ในโลกของความปลอดภัย ก็มีเทคนิคที่เรียกว่า Polyglot File หรือ ไฟล์ลูกผสม ไฟล์ประเภทนี้คือไฟล์ที่สามารถเป็นได้ทั้งไฟล์ชนิดหนึ่ง (เช่น รูปภาพ .gif) และยังคงมีโค้ดของอีกชนิดหนึ่ง (เช่น โค้ด PHP) ฝังอยู่ภายในได้ในเวลาเดียวกัน
ด้วยเทคนิคนี้ ทำให้สามารถสร้างไฟล์ รูปภาพ .gif ที่ซ่อนโค้ด PHP Reverse Shell ไว้ภายใน เพื่อใช้ในการอัปโหลดบายพาสการตรวจสอบนามสกุลไฟล์ เมื่ออัปโหลดไฟล์สำเร็จ ก็สามารถเรียกใช้งานไฟล์ดังกล่าว ทำให้ได้รับ Shell หรือช่องทางควบคุมเครื่องจากระยะไกล ในสิทธิ์ของ www-data ซึ่งเป็นสิทธิ์ผู้ใช้งานของเว็บเซิร์ฟเวอร์
ยกระดับสิทธิ์สู่การควบคุมสูงสุด
แม้จะได้ Shell มาแล้ว แต่สิทธิ์ของผู้ใช้งาน www-data ยังจำกัด การเข้าควบคุมระบบทั้งหมด จำเป็นต้องยกระดับสิทธิ์สู่ root
จากการสำรวจภายในระบบอย่างละเอียด พบว่ามีไฟล์โปรแกรมพิเศษชื่อ /usr/bin/scheme ไฟล์นี้เป็น SUID Binary หมายความว่า มันจะทำงานด้วยสิทธิ์ของผู้สร้าง (ซึ่งในที่นี้คือ root) เสมอ แม้จะถูกเรียกใช้งานโดยผู้ใช้งานที่มีสิทธิ์ต่ำกว่าก็ตาม
สิ่งที่น่าสนใจยิ่งกว่านั้นคือ ไฟล์ /usr/local/bin/scheme.scm ซึ่งเป็นสคริปต์ที่โปรแกรม /usr/bin/scheme เรียกใช้งาน กลับมีสิทธิ์ในการเขียนโดยผู้ใช้งาน www-data! นี่คือช่องทางสำคัญในการยกระดับสิทธิ์
ด้วยการแก้ไขสคริปต์ /usr/local/bin/scheme.scm เพื่อแทรกคำสั่งในการเรียกใช้ Reverse Shell ที่ให้สิทธิ์ root เข้าไป และเมื่อเรียกใช้งาน /usr/bin/scheme อีกครั้ง ระบบจะรันสคริปต์ที่แก้ไขแล้วด้วยสิทธิ์ root ทำให้ได้รับ Root Shell และควบคุมระบบได้โดยสมบูรณ์ในที่สุด
การเจาะระบบ “Scheme Catcher” แสดงให้เห็นว่าการค้นหาและเชื่อมโยงช่องโหว่ที่ดูเหมือนเล็กน้อยหลายจุด สามารถนำไปสู่การเข้าควบคุมระบบได้อย่างไร้ขีดจำกัด บทเรียนที่ได้คือการสำรวจอย่างรอบคอบ การใช้ประโยชน์จากจุดอ่อนเล็ก ๆ น้อย ๆ และการคิดนอกกรอบ ถือเป็นหัวใจสำคัญของงานด้านความปลอดภัยไซเบอร์