文件上传漏洞 概述

概述

文件上传危险系数极高,后台未对用户上传的文件进行验证或过滤不严谨,导致用户上传了可执行脚本文件,通过对脚本构造恶意的攻击代码,从而获取webshell,进一步对该网站服务器渗透、提权,最终导致服务器沦陷

一个简单的文件上传代码

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="uploadedFile">
    <input type="submit" value="上传">
</form>

在上述例子中,如果服务器端未正确验证上传的文件类型和内容,攻击者可以上传包含恶意代码的文件,如包含 PHP 代码的文件,从而导致远程代码执行。

验证方式及其绕过方法

前端

javascript验证文件后缀,可通过审计源代码看到

绕过方法:抓包修改提交文件后缀、禁用网页javascript

后端

以下验证及绕过全部来自于靶场——upload-labs

黑名单

只禁止上传的脚本格式:.asp/.php/.jsp/.aspx/.cgi/.war等等

绕过方法:

特殊解析后缀

上传其他格式的能够解析的后缀,例:.php3 .php5,前提是得在apache配置文件添加,使服务器能够解析

大小写转换

网站代码没有做大小写转换,.PHp就能绕过

去末尾空格

代码没写去空格,抓包在.php结尾加个空格就能上传,因为数据包格式审查严格,空格也会上传

高版本php不可用

去末尾.

代码没写去.,抓包在.php.结尾加个.即可,windows会自动删除,只用来绕过代码黑名单

::$DATA

代码没写去::$DATA抓包在.php结尾加::$DATA即可。
条件:
代码必须在windows中,windows特性,会把::$DATA后的数据当成文件流处理,不会检测后缀

过滤关键字为空

代码将检测到包含php等存在于黑名单中的后缀名替换为空,例a.php替换为a.

如果是一次循环的话,双写即可绕过,例a.pphphp,如果是循环过滤就不行了

白名单

只允许上传的脚本格式:.jpg/.png/.zip/.rar/.gif …

绕过方法:

文件类型验证:MIME类型

作用:描述内容类型标准,web通常用这个来确定如何处理URL,配置不正确会导致无法解析文件内容

出现在数据包的Content-Type位置

在这里插入图片描述

常见的 MIME 类型

  • 超文本标记语言文本 .htmltext/html
  • 普通文本 .txttext/plain
  • RTF 文本 .rtfapplication/rtf
  • GIF 图形 .gifimage/gif
  • JPEG 图形 .jpeg、.jpgimage/jpeg
  • au 声音文件 .auaudio/basic
  • MIDI 音乐文件 mid、.midiaudio/midi、audio/x-midi
  • RealAudio 音乐文件 .ra、.ramaudio/x-pn-realaudio
  • MPEG 文件 .mpg、.mpegvideo/mpeg
  • AVI 文件 .avivideo/x-msvideo
  • GZIP 文件 .gzapplication/x-gzip
  • TAR 文件 .tarapplication/x-tar
文件头验证

不同的后缀文件用记事本打开后,显示的内容不同

文件上传漏洞 概述_第1张图片

抓包后修改对应格式的请求体信息,让服务器认为这是一张图
文件上传漏洞 概述_第2张图片

%00截断

适用于5.3php以下版本,代码中有取GET请求做参数,可在GET参数后加1.php%00截断后面的代码

图片马

将图片以16进制打开,添加代码,添加完毕图片要能正常打开,制作完毕

上传后需要配合文件包含漏洞执行,上传的图片不能太大

其他

条件竞争

代码会先上传再进行二次渲染、判断格式,所以一直上传文件,一直刷新页面,把文件卡住,不让进行接下来的操作

以文件夹方式命名

文件上传漏洞 概述_第3张图片

当网站强制修改上传名字为:upload-19.jpg
绕过方法
upload-19.php%00.jpg		%00截断
upload-19.php/.			以文件夹方式命名

中间件解析漏洞

nginx

当该网站能上传图片,先准备一个.png结尾的文件,再选择记事本打开,添加webshell,上传成功后访问图片路径,路径后面随便加个文件名即可运行代码

例:127.0.0.1/var/www/1.png /1.php

只需要在图片路径后跟/.php即可测试当前网站存不存在这个漏洞

apache

.htaccess解析

必须是apache搭建的网站才能用

创建一个名为`.htaccess`的配置文件,上传后当前目录下的所有文件都将优先匹配这个文件
里面写入
		匹配文件名为abc
	Sethandler application/x-httpd-php		切换MIME类型,将文件解析为php文件


再创建abc.jpg,上传后访问abc即可

web编辑器类漏洞

ckeditor

fckeditor

kindeditor

xxxxeditor

修复

  • 后端验证

  • 后缀检测

  • MIME检测

  • 内容检测

    文件头、完整性

你可能感兴趣的:(web安全)