一、概述

文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。

所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:

1.验证文件类型、后缀名、大小;

2.验证文件的上传方式;

3.对文件进行一定复杂的重命名;

4.不要暴露文件上传后的路径等

二、文件上传(基于前端防护的绕过)

查看源代码:发现唯一做的防护就是调用了js的一个方法

漏洞利用:

第一步:可以在控制台上直接取消使用这个方法

第二步:上传准备的一句话木马文件

然后就可以进行菜刀连接(post)或者构造url(get)

第三步:验证

http://192.168.0.105/pikachu/vul/unsafeupload/uploads/onemm.php/?x=ipconfig

三、文件上传(MIME类型)

观察源码:在后端进行了文件类型的比对,content type可以抓包之后再改包

漏洞利用:

第一步:上传图片也就是正确格式的数据包

第二步:上传一句话木马的数据包

第三步:在content type改包成功上传:

第四步:验证

四、文件上传漏洞之getimagesize类型

这种类型后台会根据上传的图片的16进制格式的前几位进行对比 符合才是真的图片

Png的前几位是:8950 4e47

漏洞利用:

第一步:制作图片马

就是在上传的图片中加入可以利用的一句话木马

图片马的制作方式:

第一种方式就是之前提到过的右键txt文本打开直接添加的方式(万物皆可txt)

另外一种就是可以使用cmd命令:

copy /b kb.png+one.php 123.png

第二步:图片马制作好之后就可以成功的上传返回路径

注意:如果上传报错记得在文件中插入时区函数:

date_default_timezone_set("PRC");

第三步:上传之后我们可以看到已经有了,但是直接访问并不会执行,这时就用到之前的本地文件包含漏洞可以来一个组合拳:

http://192.168.0.105/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2020/02/15/2056745e4804498992c883726652.png&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

这样就可以拿到敏感信息。

五、文件上传漏洞的防范措施

1. 不要在前端使用js实施上传策略。

2. 通过服务端对上传文件进行限制:

A)进行多条件组合检查:比如文件的大小,路径,扩展名,文件类型,文件完整性。

B)对上传的文件在服务器上存储时进行重命名(制定合理的命令规则)。

C)对服务器端上传文件的目录进行权限控制(比如只读),限制执行权限带来的危害。

Pikachu-Unsafe Fileupload模块的更多相关文章

  1. pikachu Unsafe Fileupload

    不安全的文件上传漏洞概述文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像.上传附件等等.当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型.后缀名.大小等等, ...

  2. Unsafe Fileupload - Pikachu

    概述: 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像.上传附件等等.当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型.后缀名.大小等等,然后将其按照设计 ...

  3. pikachu Unsafe Filedownload 不安全的文件下载

    不安全的文件下载概述文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件 ...

  4. linux内核模块相关命令:lsmod,depmod,modprobe,modinfo,insmod,rmmod 使用说明

    加载内核驱动的通常流程: 1.先将.ko文件拷贝到/lib/module/`uname -r`(内核版本号)/kernel/driver/...目录下, 根据具体用途的区别分为net.ide.scsi ...

  5. gnome/KDE安装,gnome出现问题,重新安装nvdia驱动

    重新安装显示gtx745驱动NVIDIA-Linux-x86_64-346.59.run, yum groupremove kde-desktop yum groupinstall "Des ...

  6. angular2 文件上传

    ng2-file-upload文件上传 1.安装ng2-file-upload模块 npm install ng2-file-upload --save 2.如果使用systemjs打包,需要在配置s ...

  7. gnome/KDE安装,gnome出现问题,重新安装nvdia驱动, Linux(CentOS7) NVIDIA GeForece GTX 745 显卡驱动

    新安装显示gtx745驱动NVIDIA-Linux-x86_64-346.59.run, yum groupremove kde-desktop yum groupinstall "Desk ...

  8. pikachu-跨站脚本漏洞(XSS)

    一.跨站脚本漏洞概述 1.1 什么是XSS漏洞?     XSS是一种发生在Web前端的漏洞,其危害的对象也主要是前端用户. 1.2 XSS如何攻击? 二.跨站脚本漏洞类型及测试流程 2.1 跨站脚本 ...

  9. pikachu-SQL注入漏洞

    一.SQL Inject 漏洞原理概述 1.1 什么是数据库注入漏洞     数据库注入漏洞,主要是开发人员在构建代码的时候,没有对用户输入的值的边界进行安全的考虑,导致攻击者可以通过合法的输入点提交 ...

随机推荐

  1. 1.3.2、通过Cookie匹配

    server: port: 8080 spring: application: name: gateway cloud: gateway: routes: - id: guo-system4 uri: ...

  2. python编程训练

    1. 反转字符串: 1 #encoding=utf-8 2 #import string 3 from collections import deque 4 5 def reverse1(string ...

  3. netcore3.1 + vue (前后端分离)生成PDF(多pdf合并)返回前端打印

    1.使用Adobe Acrobat XI Pro编辑pdf模板 2.公共类代码 3.service层调用 4.Controller层 5.前端(Vue) 因为print.js不支持宋体,所以打算用后台 ...

  4. LOJ528 「LibreOJ β Round #4」求和

    LOJ528 「LibreOJ β Round #4」求和 先按照最常规的思路推一波: \[\begin{aligned} &\sum_{i=1}^n\sum_{j=1}^m\mu^2(\gc ...

  5. java集合(4)-Set集合

    Set集合,类似于一个罐子,程序可以把多个对象"丢进"Set集合,而Set集合通常不能记住每个元素的添加顺序.Set集合与Collection基本相同,没有提供任何额外的方法.实际 ...

  6. JProfiler监控java应用使用情况,故障情况分析

    1.软件部署(java环境已提前准备) 服务器:centos7.4 https://download-gcdn.ej-technologies.com/jprofiler/jprofiler_linu ...

  7. 微信小程序云开发-云函数-初始化云函数环境

    一.新建云函数文件夹 新建的云函数文件夹,命名为cloud,该文件夹一定要与pages文件夹同级.此时该文件夹的前面没有云朵的标识.  二.配置project.config.json文件 在proje ...

  8. [NOIp2012]疫情控制 题解

    好久没更,强迫自己写一篇. 神 tm 大预言家出的题 注意到如果 \(x\) 小时可以控制住疫情,则 \(\forall x'>x\) 必然也可以控制住疫情,显然答案具有单调性,可以二分答案. ...

  9. C++第四十七篇 -- VS2017带参数启动调试程序

    参考链接:https://www.cnblogs.com/kileyi/p/10163269.html 举例:Test_Bluetooth.exe -help Test_Bluetooth.cpp # ...

  10. oracle Group by 分组查询后,分页

    ------------恢复内容开始------------ 1.分页查询 select count(*) times,title from menulog group by title order ...