文件包含漏洞

什么是文件包含漏洞

首先得先理解什么是文件包含。文件包含的作用主要是为了减少开发的代码量。

举个例子比如下列main.php文件,其中包含footer.php文件。

image-20240801181058534

footer.php代码如下

image-20240801181136136

这就是文件包含所获得的内容。

image-20240801181212403

但是现在大部分开发,都是基于动态传参数来包含不同的文件。比如下图的include.php使用get文件包含参数。

image-20240801181316405

除了之前使用文件包含漏洞来执行图片马来控制web服务器,也可以获取服务器的敏感文件数据。

比如查看system.ini文件。

image-20240801181530707

一般除了让文件包含来包含服务器的本地文件,也可以包含其他服务器的外部文件,这样就可以包含其他的木马文件,来控制这个服务器。

修改php.ini配置文件为On,这样可以包含外部文件。

image-20240801181816622

在另一个apache服务器上分别有三个文件。我们使用这里的文件作为外部文件来包含到phpstudy环境下的web服务端。

image-20240801182212511

于是通过包含外部文件获得php版本信息。

image-20240801182800968

包含文件去执行恶意脚本。

image-20240801182845384

也可以在中国蚁剑进行连接,但是这里没有复现。感觉可能是版本问题。

image-20240801183042171

php函数和相关伪协议

关于读取文件的相关函数和伪协议

image-20240801183728370
image-20240801183748971
image-20240801184519779

dvwa靶场演示

low级别

分析low级别的源代码,发现只有文件包含,但是没有做任何过滤。

image-20240801192257023

于是让其包含其他服务器的文件,去执行一些恶意脚本。

image-20240801192610246

medium级别

分析源码会发现遇到关键字http://和目录的结构会被处理为空。

image-20240801192838569

但是一样有漏洞,采用双写法即可绕过。

image-20240801200641986

high级别

分析源码可以得知,fnmatch函数会去匹配传入的文件名参数,只要file参数不是以file开头则会报错。但这样依然有漏洞,如果有文件上传漏洞就可以结合本地包含来渗透。

image-20240801201013643

比如如果得知服务器的配置文件路径,则可以获取该文件的信息。

image-20240801201241403

impossible级别

分析源码得知,如果file传入的参数不是指定if分支中的这几个文件,则会提示报错信息,这从根源上解决了文件包含的问题。哪怕是利用文件上传漏洞,但是也不一定是当前路径,所以依然可以防范文件包含漏洞。

image-20240801201343902

CTF题目案例

在这个网站注册账号使用。

image-20240802005433546

在点击RCE

image-20240802005502742

点击文件包含,完成第一个靶场。

image-20240802005525867

打开环境后,点击链接进入靶场。

image-20240802005609108

案例1

由于是通过file进行传参。并且提示有shell.txt,所以输入shell.txt

image-20240802005837374

获得一句话木马的密码ctfhub,使用ctfhub来作为木马的接收参数

image-20240802005923453

首先包含这个shell.txt文件,所以会使用php解析这个一句话木马文件,通过post请求给这个木马文件传入ls命令,查看当前目录有哪些文件。

image-20240802010042608

于是利用find命令查找flag文件。

image-20240802010207780

查看flag文件的内容即可通关。

image-20240802010254937

获得flag文件内容,提交即可。

image-20240802010330411

案例2

image-20240802011413477

分析源代码,还是以file进行传参数。并且还做了过滤必须以php://开头。

image-20240802011504385

用bp抓包

image-20240802011633191

修改成post请求,并且携带post的请求参数。右键send to repeater

image-20240802011737999

点击发送,通过response确定该目录有两个文件。

image-20240802011928811

通过查找flag关键字,找到对应的文件。

image-20240802012044702

于是获得对应的内容。

image-20240802012144899

完成成功。

image-20240802012209382

案例3

image-20240802012524333

右键点击send to repeater

image-20240802012709166

点击send,获取需要的文件

与前两关一样,查看内容复制即可通关。

image-20240802012746212

文件包含漏洞挖掘与利用

image-20240802013210526

有的时候并不知道对应服务器的敏感文件路径是怎么样的,可以使用kali里面的wfuzz命令进行字典扫描,查看有哪些敏感文件可以查找到。

image-20240802020502608

其中有两个payload,说明有两个敏感文件被扫描出来。

image-20240802020937459

由于dirTravelsal-win.txt包含的都是window系统常见的敏感文件目录字典,可以拿来测试扫描

image-20240802021433359

从结果还是能扫描出很多敏感文件的。

image-20240802021519972

文件包含漏洞修复方案

image-20240802014730808

Last updated