网络安全-文件包含漏洞原理、攻击及防御

2023-11-01

目录

简介

类型

原理

攻击

仅本地文件包含

防御


简介

文件包含,是一个功能。在各种开发语言中都提供了内置的文件包含函数,可以使开发人员在一个代码文件中直接包含(引入)另外一个代码文件。

类型

根据不同的配置环境,文件包含漏洞分为如下两种情况:
1.本地文件包含漏洞(LFI):仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击者更多的会包含一些固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
2.远程文件包含漏洞(RFI):能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况很严重。

原理

以PHP为例,在PHP中,提供了以下文件包含函数:

  • include:找不到文件产生警告,脚本继续运行。
  • include_once:相对于include,文件被包含后不会再次被包含。
  • require:找不到文件,产生致命错误,脚本停止。
  • require_once:相对于require,文件被包含后不会再次被包含。

这些函数在代码设计中被经常使用到。大多数情况下,文件包含函数中包含的代码文件是固定的,因此也不会出现安全问题。 但是,有些时候,文件包含的代码文件被写成了一个变量,且这个变量可以由前端用户传进来,这种情况下,如果没有做足够的安全考虑,则可能会引发文件包含漏洞。攻击者会指定一个“意想不到”的文件让包含函数去执行,从而造成恶意操作。

攻击

使用靶机:pikachu

FileInclusion(local)

我们选择一个NBA player,可以看到url,filename参数可以修改。

Windows敏感文件

Windows敏感文件
文件路径 文件作用
c:\boot.ini                                    查看系统版本
c:\Windows\system32\inetsrvMetaBase.xml IIS配置文件
c:\Windows\php.ini                                    php配置信息
c:\Windows\my.ini      mysql配置文件,记录管理员登陆过的MYSQL用户名和密码
c:\Windows\system.ini                               winnt的php配置信息
c:\Windows\win.ini                                      winnt的mysql配置文件
c:\mysql\data\mysql\user.MYD                mysql.user表中的数据库连接密码
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini 存储了虚拟主机网站路径和密码
c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虚拟主机配置
c:\windows\repair\sam WINDOWS系统初次安装的密码
c:\Program Files\ Serv-U\ServUAdmin.exe 6.0版本以前的serv-u管理员密码
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件  存储了pcAnywhere的登陆密码
c:\Program Files\Apache Group\Apache\conf\httpd.conf 或C:\apache\conf\httpd.conf 查看WINDOWS系统apache文件
c:/Resin-3.0.14/conf/resin.conf 查看jsp开发的网站resin文件配置信息.
c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系统配置的JSP虚拟主机
d:\APACHE\Apache2\conf\httpd.conf
C:\mysql\data\mysql\user.MYD 存在MYSQL系统中的用户密码
C:\Windows\System32\drivers\etc\hostswinserver 配置Telnet信息
测试

我测试了一下,发现不可以,因为它限制了include目录下,不过,我们可以使用../来到磁盘下的任意目录。

../切换目录

结合文件上传漏洞在../../unsafeupload/uploads/下的上传的文件,可以实现php代码的运行。

仅本地文件包含

仅本地文件包含时,

可以查看本地敏感文件,如/etc/passwd等

可以包含日志文件,通过其他手段写到日志文件,如WAF日志,ssh登录日志

防御

  1. 文件包含参数写死
  2. 文件包含参数不可由用户修改
  3. 禁用目录跳转字符"../"
  4. 使用文件验证白名单

由上至下,若无法做到上一条,就在下一条补足。

更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络安全-文件包含漏洞原理、攻击及防御 的相关文章

  • 在脚本中使用未定义常量

    我搜索了该网站并看到了对用户应该在变量周围加上单引号的问题的修复 但我仍然有点困惑 错误 全部参考第28行 注意 使用未定义的常量 log id 假定为 log id 注意 使用未定义的常量 log username 假定为 log use
  • MySQL LAST_INSERT_ID() 和 FOUND_ROWS()

    当 PHP 脚本每秒有数百个查询时会发生什么 它会影响这些函数吗 是否保证它们会返回当前脚本中最后一个插入语句中最后插入的 id 它会返回当前脚本中最后一次选择的行数吗 如果同时从另一个脚本进行新的插入或选择 在 FOUND ROWS 的情
  • 我可以在 php 中的 SESSION 数组上使用 array_push 吗?

    我有一个想要在多个页面上使用的数组 因此我将其设为 SESSION 数组 我想添加一系列名称 然后在另一个页面上 我希望能够使用 foreach 循环来回显该数组中的所有名称 这是会议 SESSION names 我想使用 array pu
  • 在 JAX-WS 中使用安全性的最佳实践是什么

    这是场景 我有一些需要保护的 Web 服务 JAX WS 目前 为了身份验证需求 我提供了额外的 SecurityWService 它为授权用户提供了一些需要在请求其他服务时描述的 userid 和 sessionid 使用一些java安全
  • RuntimeException - 会话存储未根据请求设置 - Laravel Socialite - Facebook

    我在用着Laravel 5 7 and Laravel Socialite 3 1 我想使用登录Facebook我刚刚为此项目配置了应用程序 这些是我为此配置的主要文件 env FACEBOOK CLIENT ID FACEBOOK CLI
  • 将 int 转换为 float/double [重复]

    这个问题在这里已经有答案了 当我想要转换时遇到了麻烦integer价值观float 带点的数字 a 7200 b a 3600 echo b 2 b floatval b echo b 2 但它应该回响2 0 or 2 00 我也尝试过se
  • 测试 CodeIgniter 会话变量的正确方法是什么?

    获取以下代码片段 测试确保会话变量不为空的最佳方法是什么 如果稍后在我的脚本中 我调用以下内容 第一个打印正确 但在第二个我收到消息 未定义的变量 已登录 我尝试过使用 empty and isset 但两者均未成功 我还尝试使用向后执行
  • 计算帖子中使用 WordPress 短代码的次数

    我有以下 WordPress 短代码功能 function wp shortcode static i 1 return i i return return add shortcode shortcode wp shortcode 这很好用
  • 多维数组中的数组排列保留键 PHP

    这两天我一直在疯狂地尝试完成这个任务 也许你可以启发我 这是针对赛马投注排列的 每次用户玩游戏时 我都会得到一个多维数组 2 个级别 第一级包含比赛 ID 第二级包含用户为该比赛选择的马匹 它看起来像这样 play array 4 gt a
  • Chart.js - 使用 mysql 和 php 从数据库获取数据

    我正在尝试将静态数据转换为使用数据库结果 我将使用MySQL and PHP 示例代码 var randomScalingFactor function return Math round Math random 100 var lineC
  • Php Curl HTTP POST REQUEST 使用嵌套键值对设置自定义标头

    如何使用 Curl 在 php 中设置此标头 CustomInfo 元素是数组 嵌套键值对 AuthenticationInfo 元素是数组 嵌套键值对
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • WordPress 子主题覆盖父主题包括

    我正在创建 WordPress 子主题 需要覆盖某些小部件模板 我正在尝试使用此方法来覆盖父主题调用 覆盖主题功能的正确方法 http www venutip com content right way override theme fun
  • 一次用 \r\n & \n & \r 分解字符串? [复制]

    这个问题在这里已经有答案了 我想按行分割字符串 但我希望它基于所有主要使用的换行符 n r n r 并返回一个包含每一行的数组 您可以使用正则表达式和preg split http php net preg split反而 lines pr
  • ElasticSearch 和 PHP 中的多个字段搜索

    我正在使用最新版本弹性搜索 PHP https github com elasticsearch elasticsearch php以及最新版本的 MongoDB 和 ElasticSearch 我需要对可以包含一个或多个值的多个字段进行搜
  • 验证 LDAPS 连接的自签名证书

    我想从 Linux Linux 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 客户端到 Windows 2012 服务器建立安全的 ldap 连接 ldaps 以更改活动中的用户密
  • 使用多个 WHERE 子句更新 Codeigniter 中的批次

    我查看了 CI 用户指南来了解如何处理update batch 并且它似乎只接受一个索引来匹配要更新的行 但在我的例子中 我需要指定两个索引 例如lang and id page我一起用作索引 这样的lang en id page 115是
  • Laravel 5 命名约定

    我对 Laravel 约定有点困惑 因为我是这个框架的新手 我正在关注 Jeffrey Way 他使用的 Laracasts 视频Plural对于控制器名称 E g 页面控制器 卡片控制器 帖子控制器 但如果我参考官方文档Laravel g
  • 无法访问 WordPress 中声明的全局变量

    我有以下代码 g value something print g value function get value global g value print g value print get value 当我在独立的 PHP 脚本中运行它
  • mysql_query 保留返回时在表中创建的数据类型?

    我在mysql中有一个表 CREATE TABLE user id INT name VARCHAR 250 我查询表 result mysql query SELECT id name FROM user 我收集结果 while row

随机推荐

  • 网络设备自动化运维工具——ansible入门笔记

    Ansible概述 Ansible是一款自动化运维工具 基于Python开发 集合了众多运维工具 Puppet CFengine Chef SaltStack 的优点 实现了批量系统配置 批量程序部署 批量运行命令等功能 Ansible是基
  • 管理者一定要戒掉这五个毛病,否则迟早被淘汰出局

    在职场中 很多人都想升职加薪 但是不是每个人都有能力当一个好的领导 有的人不断的为之努力 有的好不容易当上了领导 可以结果时间不长反而被辞退 并不是他们不够努力 而是当员工和领导有很大的差别 你的思维要及时调整 如果思维还停留在以前 那么只
  • rsyslog无法发送日志到server端问题定位

    问题描述 网络正常的情况下 代码端中使用openlog无法正常将日志发往syslog服务器 即使使用logger也无法正常发送 环境 ARM设备充当client端 pc虚拟机Ubuntu充当server端 验证方式 通过wireshark抓
  • 基于AF的HTTP

    搬搬砖头而已 iOS 基于AF的HTTP请求类 OKHTTPRequestManager h OKHTTPRequestManager h LL Created by Morris on 2020 9 22 Copyright 2020 L
  • 蓝桥杯训练——最小乘积(基本型)

    试题 算法训练 最小乘积 基本型 资源限制 时间限制 1 0s 内存限制 512 0MB 问题描述 给两组数 各n个 请调整每组数的排列顺序 使得两组数据相同下标元素对应相乘 然后相加的和最小 要求程序输出这个最小值 例如两组数分别为 1
  • Java设计模式——单例模式

    文章目录 为什么要用单例模式 单例模式 饿汉式 DCL 静态内部类 为什么要用单例模式 单例对象 Singleton 是一种常用的设计模式 在Java应用中 单例对象能保证在一个JVM中 该对象只有一个实例存在 这样的模式有几个好处 某些类
  • 大数相加和大数相乘

    1 大数相加 int或者long类型的数据往往满足不了数据容量的要求 这时需要用到数组或者字符串进行操作 考虑到数据的位数并不是一个确定的值 运用string来处理可以简化思维 在进行运算之前 需要明确下面几点要求 1 将两组数据中位数大的
  • vue单页面给页面添加锚点实现锚点跳转

    使用Element scrollIntoView 详情情查看 scrollIntoView 参数 alignToTop可选 一个Boolean值 如果为true 元素的顶端将和其所在滚动区的可视区域的顶端对齐 相应的 scrollIntoV
  • 虚拟专用网拨号出现错误提示:没有设置允许基本路由封装GRE协议数据包通过-原因解决方法

    今天给用户配置虚拟专用网拨号到单位的服务器 操作系统为win10 执行拨号后 提示上面的信息经过百度搜索 发现这个问题和网络运营商有关系 因为你使用的是移动或联通宽带 服务商阻止了虚拟专用网通道 只要换电信宽带就好了 恰巧就是使用了联通的移
  • C语言工资管理系统

    include
  • 03.前后端分离中台框架 zhontai 项目代码生成器的使用

    zhontai 项目 基于 Net7 x Vue 等技术的前后端分离后台权限管理系统 想你所想的开发理念 希望减少工作量 帮助大家实现快速开发 后端地址 https github com zhontai Admin Core 前端地址 ht
  • flutter实现APP版本更新(全局弹窗overlay实现)

    升级说明 Android 应用内更新下载 安装 iOS 跳转到appstore下载安装 注 可以通过热更新技术进行升级 我不会 引用插件 获取当前版本 package info 0 4 3 2 版本内更新 ota update 2 4 1
  • Mac下终端(Terminal)中打开某应用的技巧

    Mac下一般都是点击某一个应用的图标 或者在Alfred中键入应用名称打开该应用 但有时候在终端执行某些代码 此时想打开程序 以上操作都不流畅 所以琢磨能否在终端下直接打开某些程序 比如要 编辑路径下的shell脚本文件 但又不想使用vim
  • 基于Stable Diffusion的AIGC服饰穿搭实践

    本文主要介绍了基于Stable Diffusion技术的虚拟穿搭试衣的研究探索工作 文章展示了使用LoRA ControlNet Inpainting SAM等工具的方法和处理流程 并陈述了部分目前的实践结果 通过阅读这篇文章 读者可以了解
  • python爬虫学习笔记-requests高级

    简历模板下载拓展 import requests from lxml import etree import os headers User Agent Mozilla 5 0 Macintosh Intel Mac OS X 10 15
  • http与websocket

    http与websocket HTTP 是一个在计算机世界里专门在两点之间传输文字 图片 音频 视频等超文本数据的约定和规范 WebSocket是HTML5出的东西 协议 也就是说HTTP协议没有变化 或者说没关系 但HTTP是不支持持久连
  • 小程序中使用CANVAS实现手写签名并写入模板图片中

    实测 开发者工具中滚动条位置会影响书写 显示会有些问题 并且会卡顿 安卓 苹果手机上测试正常 index js const App getApp Page 页面的初始数据 data curScrollTop 0 生命周期函数 监听页面加载
  • python计时模块——timeit

    timeit模块 timeit 模块定义了接受两个参数的 Timer 类 两个参数都是字符串 第一个参数是你要计时的语句或者函数 传递给 Timer 的第二个参数是为第一个参数语句构建环境的导入语句 从内部讲 timeit 构建起一个独立的
  • PWM驱动MOS管H桥电路分析

    H桥是一个典型的直流电机控制电路 因为它的电路形状酷似字母H 故得名与 H桥 4个三极管组成H的4条垂直腿 而电机就是H中的横杠 注意 图中只是简略示意图 而不是完整的电路图 其中三极管的驱动电路没有画出来 01 H桥驱动原理 1 电机驱动
  • 网络安全-文件包含漏洞原理、攻击及防御

    目录 简介 类型 原理 攻击 仅本地文件包含 防御 简介 文件包含 是一个功能 在各种开发语言中都提供了内置的文件包含函数 可以使开发人员在一个代码文件中直接包含 引入 另外一个代码文件 类型 根据不同的配置环境 文件包含漏洞分为如下两种情