Pikachu-文件上传漏洞通关详解
Pikachu-文件上传漏洞通关详解
一、client check
方法:禁用JS
先进行功能测试,分别上传jpg和php文件
jpg文件上传成功并通过burp抓到数据包
php文件上传失败且burp没有抓到包
说明为前端验证,所以我们直接禁用JS,刷新页面后上传php文件
上传成功
再验证一下
成功显示phpinfo页面
在获取phpinfo页面后要关注的点:
DOCUMENT_ROOT:web目录的绝对路径(对后续渗透测试很有帮助)
二、MIME type
下图为上传jpg文件的数据包内容:
下图为上传php文件的数据包内容:
我们可以看到两个包的Content-Type不同,那么服务器有可能通过Content-Type来判断用户上传的是什么文件【Content-Type是由浏览器告知服务器】,所以我们可以尝试使用burp修改Content-Type的内容来绕过检测
打开burp的拦截模式,上传php文件,修改Content-Type,然后再发包
成功上传
补充:burp历史记录相关内容
点击数据包后可查看的内容
三、getimagesize
从名字就可以看出此题验证图片尺寸,那么我们可以上传图片码进行绕过
访问图片地址
然后再看文件包含
我们可以利用filename这个参数来控制后端的php代码包含哪个文件
知道了图片路径后,我们就要利用文件包含修改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即可
但是,我们可以看到出现了报错
将包含的内容与我们输入的内容做一个对比
包含的内容多了一个子目录include
我们可以推测出其include语句是这样写的,include('include' . $_GET['files']),也就是说,被包含文件,在一个子目录下
从而推测出其目录整体结构:
文件包含页面在include下,其访问到图片码的流程为:
总共跳两个目录才转到vul下
在之前的payload上在添加一个../即可成功包含
查看本地文件可以看到我们推测的结构是正确的