一、文件下载漏洞

1.1 概述

    很多网站都会提供文件下载的功能,即用户可以通过点击下载链接,下载到链接所对应的文件。但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他的敏感的文件。(又称:任意文件下载)

1.2 演示

1、我们打开pikachu平台上的对应的模块;

2、看到下载提示页面

3、我们为了演示,在名字上我们右击选择在新建标签页中打开。

4、那我们是否可以更改filename的值来获取到后台其他的文件?我们来试一下

5、下面我们来看一下代码。

二、不安全的文件上传及客户端绕过

2.1 概述

因为业务功能的需要,很多web站点都有文件上传的接口,例如:

  1. 注册时上传头像文件(比如jpg,png,gif)
  2. 上传文件附件(doc,xls)

但是,如果在后台开发时,并没有对上传的文件功能进行安全考虑或者采用了有缺陷的措施,导致攻击者可以通过一些手段绕过安全措施从而上传一些恶意的文件(例如:一句话木马),从而通过对该恶意文件的访问来控制整个web后台。

文件上传漏洞测试流程如下:

2.2 客户端验证绕过

1、我们来到对应的模块下。

2、我们查看一下页面源代码。

3、我们可以打开页面控制台选择器,选择对应的组件,取消对checkFileExt()函数的调用。

4、上传我们的system.php文件,文件内容是:<?php system($_GET[x]);?>

5、访问我们的一句话木马文件,获取主机IP地址。

2.3 服务端验证绕过

2.3.1 MIME

1、MIME简介

2、$_FILES()函数简介

3、来到对应额mime模块。我们先看一下源代码。

接着我们看upload函数

4、回到我们的实验平台。打开burp suite。分别上传一次允许被上传的图片文件和不允许上传的其它类型文件(这里我们上传一句话木马文件system.php)

5、通过对比我们发现了不同,我们利用burp suite的重放模块,修改Content-Type的值,达到绕过的目的。

6、通过访问我们上传的文件,就可以进行系统的控制。

2.3.2 getimagesize

    getimagesize()会读取图片16进制文件的头几位,从而加以判断,返回的结果中包含了文件的大小和类型,如果用这个函数来获取类型,从而判断是否是图片,会存在问题。

1、我们可以制作一张木马图片,首先我们准备一张图片和一个php文件,在文件里写入:<?php phpinfo();?> 用来获取数据库信息。

2、在命令窗口执行:copy /b kb.png + system.php result.png

3、我们将刚刚生成的图片木马上传至我们的站点。

4、现在我们有一个问题,虽然我们绕过了后台的防护机制,由于我们上传的是一个图片,我们访问这个文件也只会显示一张图片,并不会执行我们嵌入到里边的PHP代码,那么我们该如何利用呢?我们可以结合文件包含漏洞进行测试。

回车后我们可能看不到结果,这说明我们的文件定位还不完全,那么我们累加../直到有结果输出为止。

2.4 防范措施

pikachu-不安全的文件下载和上传的更多相关文章

  1. Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)

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

  2. idtcp实现文件下载和上传

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  3. day58:Linux:BashShell&linux文件管理&linux文件下载上传

    目录 1.BashShell 2.Linux文件管理 3.Linux文件下载和上传 BashShell 1.什么是BeshShell? 命令的解释,用来翻译用户输入的指令 2.BashShell能做什 ...

  4. [实战]MVC5+EF6+MySql企业网盘实战(12)——新建文件夹和上传文件

    写在前面 之前的上传文件的功能,只能上传到根目录,前两篇文章实现了新建文件夹的功能,则这里对上传文件的功能进行适配. 系列文章 [EF]vs15+ef6+mysql code first方式 [实战] ...

  5. web开发实战--图片裁剪和上传

    前言: 最近的开发中, 有一个上传头像的任务. 由于头像本身的特殊性, 其一般流程为选择图片, 编辑裁剪区域, 再继而上传图片操作. 看似简单的东西, 实则是挺麻烦的一件事. 借助这次开发机会, 来具 ...

  6. 基于uploadify.js实现多文件上传和上传进度条的显示

    uploadify是JQuery的一个插件,主要实现文件的异步上传功能,可以自定义文件大小限制.文件类型.是否自动上传等属性,可以显示上传的进度条.官网地址是http://www.uploadify. ...

  7. 重新想象 Windows 8 Store Apps (66) - 后台任务: 下载和上传

    [源码下载] 重新想象 Windows 8 Store Apps (66) - 后台任务: 下载和上传 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台任务 后台 ...

  8. 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性

    [源码下载] 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性 作者:webabcd 介 ...

  9. div+css网页本地上和上传到服务器后在IE11上看到的效果不一样?

    div+css网页本地上和上传到服务器后在IE11上看到的效果不一样? 解决办法在html的head里加上一段:<meta http-equiv="X-UA-Compatible&qu ...

随机推荐

  1. SpingMvc复杂参数传收总结

    上一篇文章[javaWeb传收参数方式总结]总结了简单传收参数,这一篇讲如何传收复杂参数,比如Long[] .User(bean里面包含List).User[].List.List<Map< ...

  2. IO系统-文件与目录操作

    1.文件内核数据结构 一个打开的文件在内核中使用三种数据结构表示: (1)文件描述符表 文件描述符标志 文件表项指针 (2)文件表项: 文件状态标志:读.写.追加.同步和非阻塞等状态标志 当前文件偏移 ...

  3. 解决浮点运算精度不准确,BigDecimal 加减乘除

    package com.kflh.boxApi.utils.util; import java.math.BigDecimal; /** * @program: BoxApi * @descripti ...

  4. 推荐一个学java的网站

    最近在接触Java发现一个可以用来学习的 很不错的网站  直接扔链接 http://how2j.cn?p=77451

  5. python3.6的安装及cx_oracle安装

    一.创建所需目录mkdir -p /home/用户名/software/python3.6.1mkdir -p /home/用户名/priv/bydmkdir -p /home/用户名/priv/by ...

  6. 每日一技|巧用 Telnet 调试 Dubbo 服务

    个人博客地址 studyidea.cn,点击查看更多原创文章 0x00. 前言 想象这样一个场景,线上某个服务突发异常,导致上游服务调用异常,数据处于中间状态.服务恢复之后,我们需要修复这笔数据至正常 ...

  7. 本地Linux虚拟机内网穿透,服务器文件下载到本地磁盘

    本地Linux虚拟内网穿透 把服务器文件下载到本地磁盘 https://natapp.cn/ 1.注册账户点击免费隧道  

  8. 释放innodb空间

    记一次MySQL运维 [root@b2btest ~]# free -h total used free shared buffers cached Mem: 125G 124G 780M 13M 2 ...

  9. systemctl中添加mysql服务

    由于mysql的版本更新,许多术语有了新含义,所以需要特别指出,mysqld.service 等价于mysqld vim /usr/lib/systemd/system/mysqld.service ...

  10. Dwz/Jquery--使用Ajax提交表单时调用表单设置的校验

    案例 今天有一个需求就是点击按钮时,使用ajax方式提交表单,而且不是直接用form表单下的submit按钮提交,表单中用的校验是dwz 自带的校验方式,表单模板如下: <li><d ...