一、文件包含
1.File Inclusion(local)
我们先测试一下,选择kobe然后提交

发现url出现变化

可以猜测此功能为文件包含,包含的文件为 file1.php,所以我在此盘符的根目录下建立了一个flag文件,再测试。

发现可以读取根目录下的flag文件,存在本地文件包含漏洞。
2.File Inclusion(remote)
同上,选择kobe提交,发现url也发生变化

所以这次构造url去包含,我选择了我的博客园地址https://www.cnblogs.com/p201721410013
返回结果如下

所以远程文件包含成功。
二、文件下载
打开站点发现提示点击链接就可下载图片。

随便复制一个下载链接,发现

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 文件包含,上传,下载的更多相关文章

  1. 在Window的IIS中创建FTP的Site并用C#进行文件的上传下载

    文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服务器计算机上. 然后,远程计算机可以使用 FTP ...

  2. 创建FTP的Site并用C#进行文件的上传下载

    创建FTP的Site并用C#进行文件的上传下载 文件传输协议 (FTP) 是一个标准协议,可用来通过 Internet 将文件从一台计算机移到另一台计算机. 这些文件存储在运行 FTP 服务器软件的服 ...

  3. linux链接及文件互相上传下载

    若排版紊乱可查看我的个人博客原文地址 基本操作 本篇博客主要介绍如何去链接远程的linux主机及如何实现本地与远程主机之间文件的上传下载操作,下面的linux系统是CentOS6.6 链接远程linu ...

  4. Spring实现文件的上传下载

    背景:之前一直做的是数据库的增删改查工作,对于文件的上传下载比较排斥,今天研究了下具体的实现,发现其实是很简单.此处不仅要实现单文件的上传,还要实现多文件的上传. 单文件的下载知道了,多文件的下载呢? ...

  5. SocketIo+SpringMvc实现文件的上传下载

    SocketIo+SpringMvc实现文件的上传下载 socketIo不仅可以用来做聊天工具,也可以实现局域网(当然你如果有外网也可用外网)内实现文件的上传和下载,下面是代码的效果演示: GIT地址 ...

  6. JAVAWEB之文件的上传下载

    文件上传下载 文件上传: 本篇文章使用的文件上传的例子使用的都是原生技术,servelt+jdbc+fileupload插件,这也是笔者的习惯,当接触到某些从未接触过的东西时,总是喜欢用最原始的东西将 ...

  7. SSM框架之中如何进行文件的上传下载

    SSM框架的整合请看我之前的博客:http://www.cnblogs.com/1314wamm/p/6834266.html 现在我们先看如何编写文件的上传下载:你先看你的pom.xml中是否有文件 ...

  8. python使用ftplib模块实现FTP文件的上传下载

    python已经默认安装了ftplib模块,用其中的FTP类可以实现FTP文件的上传下载 FTP文件上传下载 # coding:utf8 from ftplib import FTP def uplo ...

  9. php文件夹上传下载控件分享

    用过浏览器的开发人员都对大文件上传与下载比较困扰,之前遇到了一个php文件夹上传下载的问题,无奈之下自己开发了一套文件上传控件,在这里分享一下.希望能对你有所帮助. 以下是实例的部分脚本文件 这里我先 ...

  10. 使用Fileupload完成文件的上传下载

    目录 使用Fileupload完成文件的上传下载 为什么需要进行文件上传下载? 引入jar包 文件上传 注意事项 编写一个简单的文件上传jsp页面 编写Servlet Student类用于封装数据,后 ...

随机推荐

  1. go 学习笔记之环境搭建

    千里之行始于足下,开始 Go 语言学习之旅前,首先要搭建好本地开发环境,然后就可以放心大胆瞎折腾了. Go 的环境安装和其他语言安装没什么特别注意之处,下载安装包下一步下一步直到完成,可能唯一需要注意 ...

  2. tcp 和UDP

      文章目录前言1. UDP2. TCP2.1 TCP 的三次握手2.2 TCP 四次挥手2.3 累计确认2.4 顺序问题和丢包问题2.5 流量控制的问题2.6 拥塞控制的问题总结及面试问题前言前端的 ...

  3. 简化wcf的service设置

    使用wcf作为c/s的通信桥梁,就免不了要写wcf service,更免不了写一些配置. 但是在把系统中所有的.net remoting service都转换成wcf service以后,发现居然有2 ...

  4. orchard 中文文档 中英对照版

    ORCHARD CMS a free, open source, community-focused Content Management System built on the ASP.NET MV ...

  5. ubuntu16.04跑通Mask R-CNN Demo

    1. 下载源码: git clone https://github.com/matterport/Mask_RCNN 2. 安装依赖项(其实就是程序的运行环境) 我是用conda新建的虚拟环境. (1 ...

  6. 一.OS运行机制

    运行机制: 1.中断(外部) =====一种通知行为(例如插入键盘) 2.系统调用(主动反应) ===一种请求行为 3.异常(内部) =====一种错误处理行为 系统调用和程序接口的关系,接口把系统调 ...

  7. Oracle数据库rownum用法集锦

    Oracle中rownum可以用来限制查询 具体用法: 1.返回查询集合中的第1行 select * from tableName where rownum = 1 2.返回查询集合中的第2行 错误示 ...

  8. Java代理类Proxy的用法

    代理(proxy) 利用代理可以在运行时创建一个实现了一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用. 何时使用代理 假设有一个表示接口的Class对象(有可能只包含一 ...

  9. python asyncio 协程调用task步骤

    import asyncio async def compute(x, y): print("Compute %s + %s ..." % (x, y)) await asynci ...

  10. K8S集群集成harbor(1.9.3)服务并配置HTTPS

    一.简介 简介请参考:https://www.cnblogs.com/panwenbin-logs/p/10218099.html 二.安装Harbor主机环境及安装要求 主机环境: OS: Cent ...