【重磅!】文件上传漏洞学习小结

作者: 黑客网 分类: 黑客知识 发布时间: 2022-05-26 14:35
《文件上传漏洞学习小结》

文件上传漏洞总结

image-20210915202850617

一、不安全的文件上传漏洞概述

在文件上传的功能处,若服务端脚本语言未对上传的文件进行严格验证和过滤,导致恶意用户上传恶意的脚本文件时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞。文件上传漏洞对Web应用来说是一种非常严重的漏洞。

一般情况下,Web应用都会允许用户上传一些文件,如头像、附件等信息,如果Web应该没有对用户上传的文件进行有效的检查过滤,那么恶意用户就会上传一句话木马等webshell,从而达到控制web网站的目的。

二、漏洞原理

由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件,并通过此脚本文件获得了执行服务端命令的能力。

高危出发点:

相册、头像上传视频、照片分享附件上传(论坛发帖、邮箱)文件管理器

三、漏洞危害

1、代码执行

上传文件是web脚本语言,服务器的web容器解释并执行了用户上传的脚本,导致代码执行,甚至导致网站甚至整个服务器被控制

2、域控制

上传文件是flash的策略文件crossdomiain.xml,黑客用以控制flash在该域下的行为;

3、网站挂马

上传文件是病毒、木马,黑客用以诱骗用户或者管理员下载执行;

4、钓鱼

上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。

三、上传漏洞满足条件

首先,上传的文件能够被web容器解释执行。所以文件上传后所在的目录要是web容器所覆盖到的路径。

其次,用户能够从web访问这个文件。如果文件上传了,但用户无法通过web访问,或者无法得到web容器解释这个脚本,那么也不能称之为漏洞。 最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。

四、防御

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

五、上传漏洞绕过

详情看图片,后面有一些场景的题目配合学习

upload-labs通关笔记

img

Pass-1 使用js对不合法图片进行检查

需要上传个webshell上去 但是限制了上传的文件类型

image-20210705114326369

F12查看javascrip内容

image-20210705115023630

代码审计

function checkFile() { var file = document.getElementsByName('upload_file')[0].value; if (file == null || file == "") { alert("请选择要上传的文件!"); return false; } //定义允许上传的文件类型 var allow_ext = ".jpg|.png|.gif";    //前端白名单,只允许这三个格式 //提取上传文件的类型 var ext_name = file.substring(file.lastIndexOf(".")); //判断上传文件类型是否允许上传 if (allow_ext.indexOf(ext_name) == -1) { var errMsg = "该文件不允许上传,请上传" + allow_ext + "类型的文件,当前文件类型为:" + ext_name; alert(errMsg);     //输出errMsg return false; } } 方法一 :本地删除js代码上传

F12点击查看器,将其中的js过滤代码(上面那段)删除掉,ctrl+s保存在本地桌面上,在桌面上右键文本方式打开,寻找action(目标),ctrl+f,没有找到,说明没有上传目标,手动添加,重新刷新网页正常上传正常图片,查看网络,可以看到一个post数据包,200ok,里面有一个地址

action=""

将这个代码添加在<from>标签

<div> <ol> <li> <h3>任务</h3> <p>上传一个<code>webshell</code>到服务器。</p> </li> <li> <h3>上传区</h3> <form action="http://127.0.0.1/upload/Pass-01/index.php" enctype="multipart/form-data" method="post" onsubmit="return checkFile()"> <p>请选择要上传的图片:</p><p> <input type="file"> <input type="submit" value="上传"> </p></form> <div> </div> <div> </div> </li> </ol> </div>

重新上传一个a.php文件,(<?php phpinfo(); ?>)

在网站根目录result可以查看到a.php文件,说明上传成功。

或者访问:

如果觉得《文件上传漏洞学习小结》您有用,请随意打赏。您的支持将鼓励我继续创作!

标签云