Pikachu靶场之文件上传漏洞详解

  • 前言
  • 文件上传漏洞简述
    • 什么是文件上传漏洞?
    • 文件上传的原理
    • 文件上传漏洞有哪些危害
    • 文件上传漏洞如何查找及判断
    • 文件上传如何防御
    • 文件上传漏洞绕过的方式有哪些
  • 第一关 client check
    • 绕过方法
    • 问题分析
  • 第二关 MIME type
    • 绕过方法
    • 问题分析
  • 第三关 getimagesize
    • 绕过方法
    • 问题分析

前言

本篇文章用于巩固对自己文件上传漏洞的学习总结,其中部分内容借鉴了以下博客。
链接: pikachu Unsafe Fileupload 不安全的文件上传(皮卡丘漏洞平台通关系列))

文件上传漏洞简述

什么是文件上传漏洞?

 ​ 凡是存在文件上传的地方均有可能存在文件上传漏洞,关于上传文件操作的时候对方代码写的是否完整、是否安全,一旦疏忽了某个地方可能会造成文件上传漏洞。

文件上传的原理

  网站Web应用都有一些文件上传功能,比如文档、图片、头像、视频上传,当上传功能的实现代码没有严格校验上传文件的后缀和文件类型,此时攻击者就可以上传一个webshell到一个Web可访问的目录上,并将恶意文件传递给如PHP解释器去执行,之后就可以在服务器上执行恶意代码,进行数据库执行、服务器文件管理,服务器命令执行等恶意操作。还有一部分是攻击者通过Web服务器的解析漏洞来突破Web应用程序的防护

文件上传漏洞有哪些危害

 文件可以自定义,可以成为Webshell,通过文件上传来上传后门,直接获取网站权限,属于高危漏洞。上传漏洞与SQL注入或者XSS相比,其风险更大。可以获取数据库信息,可以对服务器提权,获取内网权限。

文件上传漏洞如何查找及判断

1.黑盒查找

文件后台

  ​ 进入网站后台不一定能获得网站权限,可以从后台获取网站权限

会员中心

  ​ 通过图片上传

​ 文件扫描

​    使用工具扫描出后台路径

2.白盒查找

​ 通过代码分析到上传漏洞

​ 查找文件上传功能

文件上传如何防御

  • 将上传文件与web服务隔离
  • 使用白名单过滤、限制上传文件类型
  • 文件上传路径设置为不可执行权限
  • 检查文件上传路径
  • 自带函数检测,自定义函数检测
  • 图片渲染 对上传文件重命名
  • 对文件内容压缩,重新生成文件内容 检查文件内容

文件上传漏洞绕过的方式有哪些

  • 文件包含绕过
  • 前端限制绕过
  • 文件扩展名绕过
  • ashx上传绕过
  • 特殊文件名绕过
  • 00截断绕过上传
  • htaccess解析漏洞
  • 突破MIME限制上传
  • 解析漏洞绕过
  • 条件竞争绕过
  • CONTENT-LENGTH绕过

第一关 client check

进入第一关有一个文件上传的按钮

先看一下直接上传php文件是个什么效果

如下图所示,刚选好文件,还没有点 “开始上传” 的时候,就弹出了提示 上传的文件不符合要求

绕过方法

客户端验证一般两种绕过方法

(1)浏览器禁用javascript

(2)burpsuite抓包改后缀

方法一、浏览器禁用javascript
firefox有个插件叫JS Switch可以很方便的控制启用和禁用JS(有时候好像有点迟钝,可以多试几次)


先禁用JS,然后上传文件muma.php,内容如下

禁用JS之后可以上传成功,回显了保存路径

方法二、burpsuite抓包改后缀
把muma.php文件名改muma.png,上传过程中burpsuite抓包

抓到上图所示的报文,右键 send to repeater

把文件名改成muma.php,点send,上传成功

问题分析

网页上 右键 查看网页源代码 可以在比较靠后的地方看到下图所示的代码

虽然是白名单过滤,但是放在前端就。。pi用没有。。

第二关 MIME type

进入第二关,发现和上一关一样,也是一个上传界面

点击上传muma.php查看一下现象,发现没有弹窗,点“开始上传”之后会提示“上传的图片只能是jpg,jpeg,png格式的!”

绕过方法

关卡名字都透题了就直接来吧

说起来是两个思路,不过严格来说不能算两个思路,稍微有点殊途,很快同归

(1)上传muma.php,burpsuite抓包修改MIME type (好处是服务器上不会多一个没用的文件)

(2)上传muma.png,burpsuite抓包修改文件后缀 (好处是只要这个文件上传成功了,MIME type肯定是对的)

这里就不两个都演示了,反正最后请求报文都是一样的,用第二个方法来演示一下。

上传muma.png,burpsuite抓包

把filename改成muma.php,点forward,文件上传成功

问题分析

关于MIME类型的介绍可以看这个网页链接: MIME类型,在HTTP request报文中MIME类型在Content-Type字段体现。

本关的防护代码如下图所示

$mime是一个包含合法MIME类型的数组,也就是MIME类型白名单;然后将这个白名单作为参数传入了upload_sick()函数进行服务器端的检测。

upload_sick()函数的定义如下,该函数不安全之处在于两点:

(1)仅检查了MIME类型,可以通过抓包修改绕过。

(2)保存文件的时候没有重命名文件,这样即使网页不回显文件保存路径,也有很大概率可以被攻击者猜测到。

整个关卡还有一处不安全,就是回显了文件保存路径。

成功上传webshell,并且知道文件保存路径后,攻击者就可以连接shell了。

第三关 getimagesize

和之前一样传一个muma.php,上传失败,提示和上一关有区别,多了个上传文件后缀名不能为空,由于上传的文件是有后缀名的,也许后端代码会删掉原本的后缀名并根据一些规则替换新的后缀名?或者这里只是迷惑操作?

传一个名为muma.png,实际内容是第一关中一句话木马的文件,发现服务器可以识别出这是个假图片:

上传名为“小白-正常图片.jpeg”的真的jpeg文件,回显如下,可见后端代码修改了文件名,但是把文件保存路径回显出来实在是个大胆的决定。。接下来就看看到底是不是艺高人胆大吧

绕过方法

这关的名字看起来是个函数,先用搜索引擎搜索一下试试:

getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。
getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。

上传一张图片马(图片中间插入一句话木马),返回了文件保存路径

查看上述路径的图片,发现图片中仍保留着一句话木马,也就是说没有对图片内容进行检查和修改。

由于这关对文件后缀的检查是基于白名单的,所以这关后缀名绕过也行不通(这里偷了点懒,直接看代码了,黑盒状态下可以通过burpsuite爆破文件名后缀尝试绕过。

而从burpsuite截获的本关的request报文来看,本关也并不满足00截断的条件。

目前以我的知识面知道的本关的解法就是上传图片马并结合文件包含漏洞了。。如果哪位大神有其他思路,万望告知。(其实还可以利用Nginx解析漏洞,但是我这windows系统+phpstudy 8.1.1.2的环境似乎造不出这个漏洞来。相关知识点可搜索“Nginx解析漏洞”,以及这个链接: phpStudy nginx 解析漏洞通告)

图片马可以是基于真实图片的,也可以只是加个文件头。只加magic number就可以绕过的时候,直接加文件头的方式固然是更方便;但是普遍来说,还是在真实图片基础上制作图片马更保险。比如本关,直接加magic number是难以成功的,推测可能是因为getimagesize()函数检测的东西比较多,不仅仅是magic number。

问题分析

这关是三关里面最安全的了,不能上传php文件,需要结合文件包含漏洞(或者中间件解析漏洞),但是还不够安全。

不够安全的最主要原因是上传的文件中还是可以包含php代码。

先来看一下本关的代码:

本关首先指定了两个白名单,$ _type是文件名后缀白名单,$_mime是MIME type白名单,然后将两个白名单伙同一些其他参数一起送入upload()函数

upload()函数定义如下,主要的过滤动作有:

(1)123~127行,用文件名后缀白名单$type过滤后缀名不在白名单中的文件

(2)130~134行,用MIME type白名单$mime过滤MIME type不在白名单中的文件

(3)136~140行,用getimagesize()函数来判断是否是真实图片(可以通过图片马绕过)

(4)157~161行,修改文件名为随机值(本来是防止攻击者猜测文件路径的,但是由于网页上回显了文件保存路径,所以这个重命名的步骤显得没有什么卵用了。)

Pikachu靶场之文件上传漏洞详解相关推荐

  1. 文件上传漏洞详解(CTF篇)

    需要了解的前置知识: 1.什么是文件上传: 文件上传就是通过流的方式将文件写到服务器上 文件上传必须以POST提交表单 表单中需要 <input type="file" na ...

  2. 【网络安全】文件上传漏洞 详解

    文件上传漏洞 1.什么是文件上传 将客户端数据以文件形式封装,通过网络协议发送到服务器端.在服务器端解析数据,最终在服务端硬盘上作为真实的文件保存. 通常一个文件以HTTP协议进行上传时,将POST请 ...

  3. java formfile_基于Struts文件上传(FormFile)详解

    Struts中FormFile用于文件进行上传 1.在jsp文件中进行定义 名字: 头像: 2.在Form表单中定义FormFile /* * Generated by MyEclipse Strut ...

  4. php文件上传详解,PHP文件上传实例详解!!!

    这篇文章主要介绍了PHP文件上传实例代码,需要的朋友可以参考下 首先来看下上传部分的表单代码: 文件:  这里有几个要注意的地方,首先看这句 ,这里我们采用POST方法,个别浏览器还支持PUT方法,当 ...

  5. FastDFS的配置、部署与API使用解读(8)FastDFS多种文件上传接口详解(转)

    1.StorageClient与StorageClient1的区别 相信使用happy_fish的FastDFS的童鞋们,一定都熟悉StorageClient了,或者你熟悉的是StorageClien ...

  6. jquery组件WebUploader文件上传用法详解

    这篇文章主要为大家详细介绍了jquery组件WebUploader文件上传用法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  7. java web文件上传详解_java web图片上传和文件上传实例详解

    java web图片上传和文件上传 图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定 ...

  8. struts2框架单文件、多文件上传实例详解

    版权声明:本文为博主原创文章,如需转载,请标明出处. https://blog.csdn.net/alan_liuyue/article/details/79390681 简介 1.上一篇博客讲解了J ...

  9. 百度云盘API文件上传参数详解

    某药检管理所管理员因为懒,远程3389设置了弱密码,然后被黑了,服务器卡的不行了才发现被黑,竟然有了奇操作,重新改了个密码就完事了,之后没过4天,整个服务器被勒索加密了,我去看的时候发现服务器内容已经 ...

最新文章

  1. 提高网站页面收录的几个方法 返回列表 发新帖回复
  2. 在 Visual Studio 中使用 Q# 进行量子编程
  3. 学生管理系统java mysql_学生信息管理系统 基于Java+mysql开发的学生管理系统 - 下载 - 搜珍网...
  4. 日志级别_SpringBoot实战(十三):Admin动态修改日志级别
  5. 1,windows java环境搭建,eclipse安装、tomcat配置,快速创建jsp页面
  6. 图片加载框架---UniversalImageLoader使用(一)
  7. leetcode689:Maximum Sum of 3 Non-Overlapping Subarrays
  8. Python 基金会 —— 模块和包简介
  9. 2021年最优秀的新闻APP或许是这两个(国内没上架)
  10. 《赖氏经典英语语法》第一集
  11. 从消费互联网到产业互联网:平台思维始终是主导
  12. 小程序map组件一——使用腾讯地图个性化地图组件、腾讯云可视化大屏展示
  13. 支付宝商家二维码收款、订单状态查询、退款API试用笔记
  14. Android 编译优化探索
  15. 用CSS实现HTML图文混排
  16. 802.11无线局域网的安全机制
  17. shl and shr
  18. 想要完美蜕变就来广州传智播客平面UI设计培训机构
  19. 牛客网暑期ACM多校训练营(第六场)J-Heritage of skywalkert
  20. Hadoop(二)——HDFS的 I/O 流操作

热门文章

  1. 龙山区计算机学校,龙山县城区中小学招生报名系统操作指南
  2. 二样本感知器的matlab程序设计
  3. 基于几何学习图像的三维重建发展_基于深度学习的三维重建算法:MVSNet、RMVSNet、PointMVSNet、Cascade系列...
  4. 什么是wxs脚本(小程序)
  5. 淘宝店铺运营经验分享,有哪些因素会影响到宝贝的转换率,怎么做才能提高转化
  6. Swift Moya
  7. C++算法(高精度算法)
  8. selenium 代理
  9. 员工讨厌行为管理软件_我讨厌软件工程师
  10. cuda生成汉宁窗代码