MySQL LOAD_FILE() และ INTO OUTFILE() Sql Injection

Jan 19 2023
ในบทความนี้ เราจะพูดถึงฟังก์ชัน MySQL LOAD_FILE() และฟังก์ชัน INTO OUTFILE() และ Sql Injection MySQL มีฟังก์ชัน LOAD_FILE() และ INTO OUTFILE() ที่สามารถใช้เพื่ออ่านหรือเขียนไฟล์บนระบบไฟล์ของเซิร์ฟเวอร์ที่ฐานข้อมูล MySQL ทำงานอยู่
ภาพถ่ายโดย Sara Bakhshi บน Unsplash

ในบทความนี้ เราจะพูดถึงฟังก์ชัน MySQL LOAD_FILE() และฟังก์ชัน INTO OUTFILE() และ Sql Injection MySQL มีฟังก์ชัน LOAD_FILE() และ INTO OUTFILE() ที่สามารถใช้เพื่ออ่านหรือเขียนไฟล์บนระบบไฟล์ของเซิร์ฟเวอร์ที่ฐานข้อมูล MySQL ทำงานอยู่ ฟังก์ชันเหล่านี้อาจเสี่ยงต่อการถูกโจมตีด้วยการแทรก SQL หากอินพุตของผู้ใช้ไม่ได้รับการดูแลอย่างเหมาะสม

ผู้โจมตีสามารถใช้ SQL Injection เพื่อแก้ไขเส้นทางไฟล์ที่ส่งไปยังฟังก์ชัน LOAD_FILE() หรือ INTO OUTFILE() เพื่อเข้าถึงหรือเขียนไปยังไฟล์ที่ไม่ได้รับอนุญาตบนเซิร์ฟเวอร์ ตัวอย่างเช่น ผู้โจมตีสามารถใช้การแทรก SQL เพื่ออ่านไฟล์ที่ละเอียดอ่อนบนเซิร์ฟเวอร์หรือเพื่อเขียนโค้ดที่เป็นอันตรายไปยังเซิร์ฟเวอร์ ซึ่งอาจนำไปสู่การบุกรุกเพิ่มเติมของระบบ

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

<?php
$file_path = $_GET['file'];
$sql = "SELECT * FROM users WHERE profile_picture = LOAD_FILE('" . $file_path . "')";
$result = mysqli_query($connection, $sql);
?>

ตัวอย่างของโค้ด PHP ที่มีช่องโหว่ซึ่งใช้ฟังก์ชัน MySQL INTO OUTFILE():

<?php
$file_path = $_POST['file'];
$content = $_POST['content'];
$sql = "SELECT '".$content."' INTO OUTFILE '" . $file_path . "'";
$result = mysqli_query($connection, $sql);
?>

มิต

ในโพสต์นี้เราได้พูดถึงฟังก์ชัน MySQL LOAD_FILE() และฟังก์ชัน INTO OUTFILE() และ Sql Injection แล้วเจอกันในโพสต์หน้า ดูแลตัวเองดีๆ