Pikachu-文件上传漏洞通关详解

Pikachu-文件上传漏洞通关详解

一、client check

方法:禁用JS

先进行功能测试,分别上传jpg和php文件

jpg文件上传成功并通过burp抓到数据包

1

2

3

php文件上传失败且burp没有抓到包

4

5

说明为前端验证,所以我们直接禁用JS,刷新页面后上传php文件

上传成功

6

再验证一下

7

成功显示phpinfo页面

在获取phpinfo页面后要关注的点:

DOCUMENT_ROOT:web目录的绝对路径(对后续渗透测试很有帮助)

二、MIME type

下图为上传jpg文件的数据包内容:

8

下图为上传php文件的数据包内容:

9

我们可以看到两个包的Content-Type不同,那么服务器有可能通过Content-Type来判断用户上传的是什么文件【Content-Type是由浏览器告知服务器】,所以我们可以尝试使用burp修改Content-Type的内容来绕过检测

打开burp的拦截模式,上传php文件,修改Content-Type,然后再发包

10

成功上传

11

补充:burp历史记录相关内容

12

点击数据包后可查看的内容

13

三、getimagesize

从名字就可以看出此题验证图片尺寸,那么我们可以上传图片码进行绕过

14

访问图片地址

15

然后再看文件包含

我们可以利用filename这个参数来控制后端的php代码包含哪个文件

16

知道了图片路径后,我们就要利用文件包含修改file.php来执行木马

这是文件包含漏洞页面的目录:/vul/fileinclude/fi_local.php

这是图片的路目录:vul/unsafeupload/uploads/2023/01/13

那么此时文件包含漏洞页面在/vul/fileinclude,若要访问上级目录下的unsafeupload,只需要加上../(返回上级目录-vul),如:http://127.0.0.1:8083/vul/fileinclude/../xxxx

所以,将file.php修改为../uploads/2023/01/13/10018863c1577f5ad43511788765.jpg即可

17

但是,我们可以看到出现了报错

将包含的内容与我们输入的内容做一个对比

18

包含的内容多了一个子目录include

我们可以推测出其include语句是这样写的,include('include' . $_GET['files']),也就是说,被包含文件,在一个子目录下

从而推测出其目录整体结构:

19

文件包含页面在include下,其访问到图片码的流程为:

20

21

22

总共跳两个目录才转到vul下

在之前的payload上在添加一个../即可成功包含

23

查看本地文件可以看到我们推测的结构是正确的

24

posted @ 2023-01-14 21:39  佐迦  阅读(1000)  评论(0编辑  收藏  举报