เจาะลึกเส้นทางสู่สิทธิ์ผู้ดูแลระบบ: ถอดรหัสระบบ Recruit

เจาะลึกเส้นทางสู่สิทธิ์ผู้ดูแลระบบ: ถอดรหัสระบบ Recruit

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

การสำรวจเบื้องต้น: กุญแจสู่การค้นพบ

การเริ่มต้นที่ดีคือการ สำรวจระบบ อย่างละเอียดถี่ถ้วน ใช้ Nmap เพื่อสแกนพอร์ต พบพอร์ต 22 (SSH) และ 80 (HTTP) ซึ่งบ่งชี้ว่ามีเว็บเซิร์ฟเวอร์ทำงานอยู่

ตรวจสอบพอร์ต 80 พบเป็นเว็บไซต์ Recruit Management System บน Apache/2.4.49 (Ubuntu) การค้นพบไฟล์ robots.txt บอกใบ้ถึงไดเรกทอรี /panel/ ซึ่งเป็นจุดเริ่มต้นที่ดี

จากนั้น Gobuster ช่วยค้นหาไดเรกทอรีและไฟล์ที่ซ่อนอยู่ นำไปสู่การค้นพบที่สำคัญคือไดเรกทอรี /simple-php-poll และ /server-status แม้ server-status ให้ข้อมูล Apache ที่น่าสนใจ แต่ simple-php-poll คือเป้าหมายหลักต่อไปสำหรับการเจาะระบบ

การเจาะช่องโหว่ Local File Inclusion (LFI)

เมื่อพบแอปพลิเคชัน simple-php-poll 1.0 ก็ถึงเวลาค้นหาช่องโหว่ที่รู้จัก การค้นคว้าข้อมูลเผยช่องโหว่ Local File Inclusion (LFI) ในพารามิเตอร์ page ของ index.php

ทดสอบด้วย index.php?page=/etc/passwd เพื่อยืนยันว่า LFI ทำงานจริง สามารถอ่านไฟล์สำคัญในระบบ Linux ได้

เมื่อยืนยันช่องโหว่ LFI ได้ ก็ถึงเวลาขยายผลด้วยเทคนิค Log Poisoning แนวคิดคือการฉีดโค้ด PHP ที่เป็นอันตรายเข้าไปในไฟล์ล็อกของเว็บเซิร์ฟเวอร์ เช่น /var/log/apache2/access.log

ทำได้โดยส่งคำขอ HTTP ที่มีโค้ด PHP ฝังในส่วน User-Agent เช่น User-Agent: <?php system($_GET['cmd']); ?> หลังจากโค้ดถูกบันทึกใน access log สามารถเรียกใช้ผ่าน LFI โดยเรียก index.php?page=/var/log/apache2/access.log&cmd=whoami คำสั่ง whoami จะถูกรันบนเซิร์ฟเวอร์ ได้สิทธิ์ผู้ใช้งานเป็น www-data

ขั้นต่อไปคือการสร้าง Reverse Shell เพื่อให้ได้เชลล์ที่โต้ตอบได้เต็มรูปแบบ ตั้ง Netcat listener และส่ง payload ของ Reverse Shell ผ่านช่องโหว่ LFI นี่คือการเข้าถึงระบบในฐานะผู้ใช้งานระดับแรก

ยกระดับสิทธิ์สู่ผู้ดูแลระบบสูงสุด

เมื่อเข้าสู่ระบบในฐานะ www-data สิ่งสำคัญคือการยกระดับสิทธิ์ ใช้คำสั่ง sudo -l เพื่อตรวจสอบสิทธิ์

พบว่าผู้ใช้ www-data มีสิทธิ์รัน /usr/bin/rec ในฐานะผู้ใช้ recruit โดยไม่ต้องใช้รหัสผ่าน การใช้สิทธิ์นี้ทำให้สามารถเข้าสู่ระบบในฐานะผู้ใช้ recruit ได้สำเร็จ

เมื่อเป็นผู้ใช้ recruit ตรวจสอบ sudo -l อีกครั้งเพื่อหาช่องทางยกระดับสิทธิ์เป็น root พบว่า recruit มีสิทธิ์รัน /usr/bin/chef ในฐานะ root โดยไม่ต้องใช้รหัสผ่าน

การตรวจสอบสคริปต์ /usr/bin/chef พบว่ามีการตั้งค่าตัวแปรสภาพแวดล้อม PATH ให้ /opt/chef/bin อยู่เป็นอันดับแรก นี่คือช่องโหว่ PATH Hijacking ที่สามารถนำมาใช้ได้

สามารถสร้างไฟล์ปฏิบัติการปลอมชื่อ chef ขึ้นมาในไดเรกทอรี /opt/chef/bin ภายในไฟล์ chef ปลอมนี้ใส่คำสั่งที่ต้องการรันในฐานะ root เช่น /bin/bash เพื่อรับเชลล์ root กำหนดสิทธิ์ให้ไฟล์ chef ปลอมสามารถทำงานได้

เมื่อเรียกใช้คำสั่ง sudo /usr/bin/chef ระบบจะค้นหา chef ใน PATH ที่ถูกแก้ไข และรันไฟล์ chef ปลอมที่สร้างไว้แทน ผลลัพธ์คือการได้เชลล์ในฐานะ root หรือผู้ดูแลระบบสูงสุด นี่คือเส้นทางที่ซับซ้อนแต่มีแบบแผน ตั้งแต่การสำรวจเบื้องต้นจนถึงการครอบครองสิทธิ์สูงสุดของระบบ