Skip to the content.

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

เป้าหมาย: ไฟล์ rlfi.php ในระบบ bWAPP ระดับความยาก: ปานกลาง (Medium)

This is an alt text.

===

1. ฟังก์ชันการทำงานเดิม (Business Function)

หน้านี้มีไว้ทำอะไร?

หน้านี้มีฟังก์ชันสำหรับ เลือกภาษา (Language Selection) เพื่อเปลี่ยนข้อความต้อนรับบนหน้าเว็บ


2. ช่องโหว่และการทดสอบ (Vulnerability & Payload)

ปัญหาอยู่ที่บรรทัดไหน?

จากการสแกนด้วยเครื่องมือ RIPS พบว่าโค้ดมีการเขียนที่ไม่ปลอดภัย โดย RIPS แจ้งเตือนดังนี้ This is an alt text.

ผลการสแกน (RIPS Output)

Userinput reaches sensitive sink

  • 94: include($language); (จุดระเบิด/Sink)
  • 29: $language = $_GET[“language”]; (จุดรับเชื้อ/Source) requires
    • 80: if(isset($_GET[‘language’]))
    • 91: if(in_array($language, $allowed_files))

คำอธิบายปัญหา (Root Cause Analysis)

เราสามารถหลอกระบบให้ “เดินถอยหลัง” ออกจากโฟลเดอร์ปัจจุบันไปจนถึงรากของระบบ (Root) เพื่อขโมยไฟล์ความลับได้


3. การพิสูจน์ช่องโหว่ (Exploitation)

เจาะระบบได้อย่างไร?

เนื่องจากบรรทัดที่ 94 ยอมเปิดไฟล์ตามที่สั่ง เราจึงใช้เทคนิค Directory Traversal เพื่อถอยหลังออกจากโฟลเดอร์ปัจจุบันไปขโมยไฟล์ความลับ


4.แนวทางการแก้ไข (Remediation)

แก้ยังไงให้หายขาด?

เรายกเลิกวิธีการตรวจสอบแบบเดิม (บรรทัด 91) และเปลี่ยนมาใช้ระบบ Whitelist ผ่านคำสั่ง switch…case ซึ่งเป็นการระบุชื่อไฟล์ที่อนุญาตแบบ ตายตัว (Hardcoded)

switch($_GET["language"]) {
    // ✅ อนุญาตเฉพาะไฟล์ที่เรารู้จักเท่านั้น
    case "lang_en.php":
        include("lang_en.php");
        break;
    case "lang_fr.php":
        include("lang_fr.php");
        break;
    case "lang_nl.php":
        include("lang_nl.php");
        break;
    
    // ❌ กรณีอื่นๆ (รวมถึง Payload ของแฮกเกอร์) จะถูกดีดมาที่นี่
    default:
        echo "<font color='red'>Access Denied</font>";
        break;
}

โค้ดที่ยังไม่แก้ไข

This is an alt text.

โค้ดที่แก้ไขแล้ว

This is an alt text.

5. การตรวจสอบหลังแก้ไข (Verification)

แก้แล้วดีจริงไหม?

5.1 ตรวจสอบความปลอดภัย (Security Check)

ทดสอบยิง Payload เดิม ../../../../etc/passwd อีกครั้ง

5.2 ตรวจสอบคุณภาพโค้ด (RIPS Re-scan)

สแกนไฟล์ที่แก้แล้วด้วย RIPS อีกครั้ง

5.3 ตรวจสอบการใช้งาน (Usability Check)

ทดสอบเลือกภาษา “English” จากหน้าเว็บปกติ

===

สรุป :

การดำเนินการแก้ไขช่องโหว่ Local File Inclusion (LFI) บนระบบ bWAPP เสร็จสิ้นสมบูรณ์ การปรับปรุงโค้ดด้วยวิธี Strict Whitelisting สามารถขจัดความเสี่ยงจากการเข้าถึงไฟล์ระบบโดยไม่ได้รับอนุญาตได้ 100% โดยผ่านการตรวจพิสูจน์ทั้งในเชิงรุก (Exploitation) และเชิงรับ (Source Code Analysis) เรียบร้อยแล้ว ระบบมีความมั่นคงปลอดภัยพร้อมใช้งานตามปกติ