Pikachu靶场之文件包含漏洞详解

Pikachu靶场之文件包含漏洞详解

  • 前言
  • 文件包含漏洞简述
    • 1.漏洞描述
    • 2.漏洞原因
    • 3.漏洞危害
    • 4.如何防御
  • 第一关 File Inclusion(local)
    • 1.尝试读取"隐藏"文件
    • 2.读取不同文件夹文件
    • 3.读取系统文件
    • 4.结合文件上传getshell
  • 第二关 File Inclusion(remote)
    • 包含写木马的文件

前言

本篇文章用于巩固对自己文件包含漏洞的学习总结,其中部分内容借鉴了以下博客。
链接: pikachu File Inclusion 文件包含漏洞 (皮卡丘漏洞平台通关系列)

链接: 【文件包含】文件包含漏洞知识总结

文件包含漏洞简述

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版本升级,防止%00截断

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

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

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

第一关 File Inclusion(local)

进入关卡发现有一个下拉框,可以选NBA球星。Pikachu靶场之文件包含漏洞详解_第1张图片
我们随机选一个进行点击,比如这里我选取Kobe,页面是下图这样,url是

http://www.pikachu.com:90/vul/fileinclude/fi_local.phpfilename=file1.php&submit=%E6%8F%90%E4%BA%A4

可见其中包含了一个文件file1.php,很可能是文件包含,并且既然是通过URL参数从前端传到后端的,那就是用户可以控制的了,如果再没有严格的过滤,就很可能有文件包含漏洞。Pikachu靶场之文件包含漏洞详解_第2张图片

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

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

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

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

把burpsuite请出来爆破一下:

把下图这个请求报文send to intruder
Pikachu靶场之文件包含漏洞详解_第3张图片
然后像下面这样设置一下:

爆破位置设置为文件名中的数字,payload设置为Numbers,从6到100,步长为1,点start attack开始爆破
Pikachu靶场之文件包含漏洞详解_第4张图片

Pikachu靶场之文件包含漏洞详解_第5张图片
把爆破结果按照长度排个序,发现有如下四种长度,分别取代表file6.php、file7.php、file14.php、file100.php
Pikachu靶场之文件包含漏洞详解_第6张图片
在这里插入图片描述
盲猜应该file6.php有点东西。把上面4个文件名在浏览器地址栏试一下:

file6.php果然是个包含用户名和密码的隐藏文件
Pikachu靶场之文件包含漏洞详解_第7张图片
file7.php返回了报错,通过这个报错,可以知道fi_local.php中用来进行文件包含的函数是include(),并且包含的文件路径为与fi_local.php同文件夹下include文件夹中的文件。

file14.php和file100.php都是一样的报错信息,这里就不贴图了。
Pikachu靶场之文件包含漏洞详解_第8张图片

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=%E6%8F%90%E4%BA%A4

php代码被成功解析
Pikachu靶场之文件包含漏洞详解_第9张图片

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=%E6%8F%90%E4%BA%A4

成功读取系统文件
Pikachu靶场之文件包含漏洞详解_第10张图片

4.结合文件上传getshell

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

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

http://www.pikachu.com:90/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2022/04/02/7894046247af76131f8422881876.png&submit=%E6%8F%90%E4%BA%A4

用蚁剑连接:

Pikachu靶场之文件包含漏洞详解_第12张图片
连接成功
Pikachu靶场之文件包含漏洞详解_第13张图片

第二关 File Inclusion(remote)

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

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

Pikachu靶场之文件包含漏洞详解_第14张图片
所以这关其实除了远程文件包含,还可以本地文件包含使用绝对路径

Pikachu靶场之文件包含漏洞详解_第15张图片

包含写木马的文件

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

 ' ); ?>

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=%E6%8F%90%E4%BA%A4

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

虽然没有回显
Pikachu靶场之文件包含漏洞详解_第16张图片
进入目录查看发现shell.php已经写入
Pikachu靶场之文件包含漏洞详解_第17张图片
用蚁剑进行连接
Pikachu靶场之文件包含漏洞详解_第18张图片
连接成功
Pikachu靶场之文件包含漏洞详解_第19张图片

你可能感兴趣的:(网络安全,pikachu,安全,web安全,php)