目录

介绍

分类

上传-javascript检测

简介

原理

攻击

防御

上传-MIME检测

简介

攻击

防御

上传-后端文件格式检测

简介

原理

攻击

防御

上传-文件截断

简介

攻击

解析-Apache文件解析

解析-IIS文件解析

解析-PHP CGI路径解析

绕过

防御


介绍

文件上传漏洞是指用户上传了一个可执行的脚本文件(php、jsp、xml、cer等文件),而WEB系统没有进行检测或逻辑做的不够安全。文件上传功能本身没有问题,问题在于上传后如何处理及解释文件。

分类

根据简介,主要分为上传(客户端)、解析(服务端)两大类。

上传-javascript检测

简介

通过js代码,对文件后缀进行判断。

原理

一般使用白名单或黑名单的方式,判断文件后缀,根据后缀决定用户是否上传。

攻击

Firebug插件删除判断函数

使用靶机pikachu做例子,直接通过F12修改。

tupian.php

<?php
    echo phpinfo();
?>

js检测到不符合要求

F12查看代码

checkFileExt

客户端通过onchange实践的checkFileExt函数进行检测,我们删除掉调用这个函数的部分。

删除后

我们再次上传tupian.php

文件上传成功

可以看路径,我们修改上方的url,进行访问。

代码已运行

可以看到代码已经运行。

中间人攻击-burpsuite拦截

文件名符合规则,使用burpsuite拦截后,修改文件后缀即可。方法类似下方MIME攻击

防御

上传无法防御,可以进行文件重命名。

上传-MIME检测

简介

js的检测基本没有了,开始使用后端代码进行检测,虽然进行MIME检测是使用的后端代码,但是,依然是从客户端获取的,可以从客户端修改,我还是归于上传这一类了。

简单来说,在请求头中Content-Type:type/subtype来表明类型,常见的有

text/plain
text/html
image/jpeg
image/jpg
image/png
audio/mpeg
audio/ogg
audio/*
video/mp4
application/*
application/json
application/javascript
application/ecmascript
application/octet-stream

攻击

中间人攻击-burpsuite拦截

burpsuite拦截

修改Content-Type

Forward

可以看到发送过去了,后序验证同上,不再重复截图。

防御

上传无法防御,可以进行文件重命名。

上传-后端文件格式检测

简介

一些后端代码含有一些函数,能够判断文件类型,获取文件的一些信息。以php为例,php的getimagesize函数可以获取图像的一些信息,如果不是图像,那么无法获取信息,就会报错。

有的站点使用文件头来检测文件类型,这种检查可以在Shell前加入对应的字节以绕过检查。几种常见的文件类型的头字节如下表所示

类型 二进制值
JPG FF D8 FF E0 00 10 4A 46 49 46
GIF 47 49 46 38 39 61
PNG 89 50 4E 47
TIF 49 49 2A 00
BMP 42 4D

原理

如果你学过图像相关的课程,比如信息隐藏这门课,会使用Matlab读取图像,进行信息隐藏,你就会知道图像的一些格式,符合格式的话就是那个类型的文件,一般是头部的一些字节。我们通过将恶意代码前面添加其他类型文件的头部就可以伪造成另一个类型,进而绕过检测。

攻击

我们修改tupian.php为tupian.php.jpg,进行上传。

图片格式检测

可以看到,图片没有办法上传,虽然后缀对,但是内部是不正确的。

我们使用Linux中的xxd或od命令来查看.PNG或.png图片的信息(博主虽然是在Windows中,但是使用的是cygwin)。

2.PNG

ca.png

可以看到文件前面是一样的。

使用cmd命令 copy /b CA.png + tupian.php tupian.png

生成新图片

目录下会生成新图片tupian.png,而且符合png格式,但是在图片后面是php代码。

上传成功

打开

图片上传成功,但是打开后还是图片。

我们再使用之前的文件包含漏洞就可以了,注意url。

php代码运行成功

php由于历史原因,部分解释器可能支持符合正则 /ph(p[2-7]?|t(ml)?)/ 的后缀,如 php / php5 / pht / phtml / shtml / pwml / phtm 等 可在禁止上传php文件时测试该类型。

jsp引擎则可能会解析 jspx / jspf / jspa / jsw / jsv / jtml 等后缀

asp支持 asa / asax / cer / cdx / aspx / ascx / ashx / asmx / asp{80-90} 等后缀。

除了这些绕过,其他的后缀同样可能带来问题,如 vbs / asis / sh / reg / cgi / exe / dll / com / bat / pl / cfc / cfm / ini 等。

防御

若没有文件包含漏洞,问题不大,否则无法防御。

上传-文件截断

简介

php %00截断,由于00代表结束符,00后面的所有字符都会删除掉,发生在php5.3.4之前版本,php的magic_quotes_gpc为OFF状态。

攻击

php版本调整为5.3.29

参数设置

正好被水印挡住了,挡住的部分就是参数magic_quotes_gpc。

解析-Apache文件解析

一个文件可以有多个后缀,如:lady_killer.txt.png.mp3,在Windows中自然是认为这是mp3文件,也就是说最后的后缀生效。但是,Apache却是从右向左读后缀,不认识的跳过继续读,前面的文件就认为是图片,如果没有配置mp3后缀的话。因此,对于

tupian.php.xxx就会认为这是php文件。类型的定义在Apache/conf/mime.types中

解析-IIS文件解析

IIS 6也出现截断攻击,截断字符为";"。由于phpStudy没有这个版本,太老了,不想去实现了,知道下就行了。

解析-PHP CGI路径解析

没找到了2010年的cve,可能是提交的bug吧,就是路径为evil.jpg/1.php时,Nginx会把evil.jpg当做php文件交给php运行。

Nginx + PHP CGI的一个可能的安全漏洞 - 风雪之隅

绕过

前端绕过

通过抓包提交,绕过前端js检测,删除对js验证脚本的调用,使其不能对上传的文件类型做检测,从而达到绕过

黑名单绕过

使用更多后缀

jsp jspx jspf

asp asa cer aspx

php php3 php4 pht phtml

后缀大小写绕过

由于windows不区分大小写,后端校验未使用strtolower等函数将文件后缀大小写统一处理,导致黑名单不完整而绕过

1.pHP

后缀双写绕过

后端过滤时,使用了preg_replace等替换函数将php关键字替换为空,但是却没有循环替换,导致前面的ph和后面的p重新组合成php,从而导致绕过

1.phphpp

空格绕过

由于Windows处理文件时,会自动删除文件后缀带有的空格和点,从而导致绕过。

1.php

后面有空格

::$DATA绕过

Windows的一种流文件格式,上传这种格式流文件格式的同时会在相同目录下生成一个含有相同内容宿主文件

MIME绕过

修改Content-Type中为允许的类型,以下为常见MIME类型

  • GIF image/gif
  • JPG image/pjpeg image/jpeg
  • ZIP application/x-compressed application/octet-stream
  • JSP text/html
  • EXE application/octet-stream

%00截断绕过

PHP<5.3.29,且GPC关闭时,%00在URL中充当结束符,当解析到%00时,解析器就会认为字符串已经读取完毕

1.php%00a.jpg

十六进制的0x00也可

文件头检查绕过

例如,仅允许上传图片,通过文件头来判断,这时可以将恶意代码拼接到图片后面

条件竞争绕过

有的文件上传功能是先将文件下载到服务器,如果是有问题的就删除,我们可以利用这一逻辑漏洞,不断上传文件,即可访问。

可查看文章CTF-【NSCTF 2015】WEB11 条件竞争

解析绕过

解析漏洞
服务 举例 原理

IIS6.0

test.asp/1.jpg

test.asp;1.jpg

*.asp目录下的所有文件都会当做asp脚本执行

文件被截断,被解析为test.asp

IIS7.0和IIS7.5

a.jpg/a.php

php配置问题:一个文件路径后面加上/xx.php会将原来的文件解析为php文件

Apache(1.x、2.x)

1.php.xx1.xx2

apache是从右往左解析,遇到不认识的扩展名则跳过,直到遇到认识的php为止

Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7

test.jpg/1.php

fastcgi在处理’.php’文件时发现文件并不存在,这时php.ini配置文件中cgi.fix_pathinfo=1 发挥作用,这项配置用于修复路径,如果当前路径不存在则采用上层路径。为此这里交由fastcgi处理的文件就变成了’/test.jpg’。

最重要的一点是php-fpm.conf中的security.limit_extensions配置项限制了fastcgi解析文件的类型(即指定什么类型的文件当做代码解析),此项设置为空的时候才允许fastcgi将’.jpg’等文件当做代码解析。

防御

1.文件类型判断

后缀白名单,MIME类型判断结合

2.文件重命名

3.文件上传目录设置为不可执行

更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

网络安全-文件上传漏洞的原理、攻击与防御相关推荐

  1. (20)文件上传漏洞:原理、原因、常见触发点分析,vulhub、upload、公开cms上传漏洞多种方法测试

    目录 理解文件上传漏洞: 文件上传漏洞: 文件上传漏洞: WebShell: 一句话木马: 产生上传漏洞原因: 原因: 常见的问题: 危害: 触发点,并判断是否存在文件上传漏洞: 触发点: 查找方法: ...

  2. 文件上传漏洞总结(含原因+防御措施)+白名单+黑名单+内容、头+解析漏洞/修补方案

    文件上传漏洞简单总结+白名单+黑名单+内容.头+解析漏洞/修补方案 问题 什么是文件上传漏洞? 危害? 防御措施? 文件上传(验证/绕过)措施? 前端 js类绕过? 后端 黑名单绕过 特殊解析后缀 . ...

  3. 网安基础学习之“文件上传漏洞原理与实现”

    网安基础学习之"文件上传漏洞原理与实现" 近期新闻头条上报出了"长沙市场监管局网站被上传了黄色页面",经过长沙市公安局网技支队的排查,该门户网站后台编辑器存在* ...

  4. 网络安全课第七节 文件上传漏洞的检测与防御

    13 文件上传漏洞:种植服务器木马的捷径 上一讲介绍过反序列化漏洞,利用漏洞常可以造成执行代码的严重后果. 从本讲开始将介绍文件上传漏洞,它比反序列化漏洞原理与利用更加简单,但同样可以达到控制服务器的 ...

  5. 文件上传漏洞——DVWA练习

    前言:文件上传漏洞是很常见的漏洞,也非常有趣,接下来就在DVWA靶场中边学边练. 文件上传漏洞: 文件上传漏洞是指由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致的用户可以越过其本身权限向 ...

  6. weblogic系列漏洞整理————8、WebLogic 两处任意文件上传漏洞动态分析(CVE-2018-2894)

    0x01 前言 CNCERT前几天发公告称发现Oracle公司出品的基于JavaEE结构的中间件WebLogic产品存在一个远程上传漏洞,并得到了厂商的确认,危害程度评分高达9.8分.鉴于厂商已进行了 ...

  7. 文件上传漏洞个人笔记

    什么是文件上传漏洞及原理? 顾名思义,文件上传漏洞就是有可以上传文件的地方就 可能 会存在上传漏洞,可以说有文件上传的地方就可以测试是否存在文件上传漏洞,攻击者找到上传文件或者上传图片一个地方,在上传 ...

  8. 【文件上传漏洞绕过方式】

    目录 前言 正文 总结 前言 目前,文件上传往往在业务中不可避免,也是极其容易出现上传漏洞.根据owasptop10中的排名,文件上传漏洞(属于攻击检测和防范不足)高居其中.今天和大家分享常见的文件上 ...

  9. WEBshell与文件上传漏洞

    目录 一.文件上传漏洞的原理 二.文件上传的原理 三.文件上传攻击 1.文件上传漏洞--绕过前端js检测 2.文件上传-绕过MIME类型检测 3.文件绕过-过滤不严格绕过 4.文件绕过-绕过黑名单检测 ...

最新文章

  1. 初识vue 2.0(2):路由与组件
  2. python画三维几何图-Python常见几何图形绘制
  3. 8 9区别 endnote7_SAT和ACT的区别,你知道吗?
  4. [转][3DSMAX][贴图]如何检查遗失贴图
  5. SQL Server2005 ROW_NUMBER() OVER 使用
  6. google+stackoverflow_哪些开发问题最让程序员“头秃”?我们分析了Stack Overflow的11000个问题...
  7. python格式化读取文件_python文本读写与格式化
  8. Linux如何查找软件的安装位置
  9. Unity3D使用经验总结 编辑器扩展篇
  10. 解决微信二次分享失败
  11. 视频格式转换器之视频格式在线转换详细教程
  12. 一个理解同步异步阻塞非阻塞非常好的解释
  13. 如何取SQL结果集的第一条记录
  14. java计算机毕业设计ssm奥博羽毛球俱乐部管理系统
  15. PHP操作redis详细讲解(转)
  16. CRMEB商城直播功能-微信小程序直播
  17. IDEA 如何 buil dpath
  18. <转>OSPF OE2和OE1外部路由详解(主要解释了下OE2为什么没默认负载均衡)
  19. <intrins.h>库函数
  20. u8链接提示计算机拒绝,用友u8软件error错误拒绝访问

热门文章

  1. 三阶魔方与四阶魔方总结
  2. 微信小程序---快速上手云开发
  3. iOS字体大小适配机型的几种方法
  4. 查看java进程占用内存_如何查看java进程大批占用内存
  5. 浅尝springboot
  6. XSS 防御方法总结
  7. 苹果apple账号授权登录第三方APP
  8. 中国大学moocpython答案查询_中国大学MOOC(慕课)_Python编程基础_mooc题库答案查询...
  9. spring--bean后置处理器(BeanPostProcessor)原理解析
  10. Mybatis(二)映射文件