一、概述

文件上传功能在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. ExtJs4学习(三)组件查找 ComponentQuery类

    Extjs3.x: ID:这就是所熟知的Ext.getCmp("组件ID"),缺点是id重复导致出错. ref:在EXTJS3中,所有的组件都会有一个ref属性,也就是refere ...

  2. 12 shell case in语句

    Shell也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了. if else 语句与ca ...

  3. django 使用jpype 报错:raise+OSError('JVM+cannot+be+restarted')

    #调用jar包 def getJar(arg1,arg2): jarpath = os.path.join(os.path.abspath('.'), 'tools/GetTest-1.0-SNAPS ...

  4. cordova自定义插件开发流程

    cordova自定义插件开发:1.cordova安装:npm install -g cordova2.plugman安装:npm install -g plugman3.cordova创建工程:cor ...

  5. 二进制方式搭建Kubernetes集群

    环境准备: 演练暂时用单节点一台master和一台node节点来进行部署搭建(kubernetes 1.19版本) 角色 IP 组件 master 10.129.246.114 kube-apiser ...

  6. 个人博客开发之blog-api 项目全局日志拦截记录

    前言 大型完善项目中肯定是需要一个全局日志拦截,记录每次接口访问相关信息,包括: 访问ip,访问设备,请求参数,响应结果,响应时间,开始请求时间,访问接口描述,访问的用户,接口地址,请求类型,便于项目 ...

  7. C语言:自增 自减

    一个整数类型的变量自身加 1 可以这样写: a = a + 1; 或者 a += 1; 不过,C语言还支持另外一种更加简洁的写法,就是: a++; 或者 ++a; 这种写法叫做自加或自增,意思很明确, ...

  8. cisco 交换机 IOS命令

    1 显示交换机的MAC地址表 user mode : show mac-address-table

  9. springMVC-11-验证码

    springMVC-11-验证码 导入依赖 <!--Kaptcha 验证码依赖 前面已导过servlet-api需排除--> <dependency> <groupId& ...

  10. 八大排序算法~冒泡排序【加变量flag的作用】

    八大算法~冒泡排序[加变量flag的作用] 1,冒泡排序思想:从第一个数开始找,要把大数"排除在外"~为大数找后座.(从小到大排序哈) 外层循环~需要放后的大数个数: 内循环~从第 ...