zl程序教程

您现在的位置是:首页 >  其他

当前栏目

WEB漏洞攻防 - 文件上传漏洞 - 文件上传漏洞必知必会

漏洞文件上传Web 必会 攻防 必知
2023-09-14 09:14:27 时间

关于文件上传漏洞

写在文章之前-避免大家踩坑


关于文件上传漏洞相关篇章用到的 upload-lads 靶场为Docker - 20关类型的,目前最新的版本为21关。且文中某些绕过方法仅适用于低于 PHP 5.2.4 以下的版本,Docker安装的环境为 5.2.17 版本,建议大家如果想通关的话,可以在WIN环境利用 PHP study 搭建 绿色版 upload-lads 可以通过降低 PHP 版本,进行一些关卡的绕过!


什么是文件上传漏洞?

当文件上传点没有对上传的文件进行严格的验证和过滤时,就容易造成任意文件上传,包括上传动态文件(asp,php,jsp)等
如果上传的目标目录没有限制执行权限,导致所上传的动态文件可以正常执行,就导致了文件上传漏洞。

场景:顾名思义就是上传文件的地方。

WEB

APP

软件

任何涉及到上传的操作

注意:有些上传的走的协议不一样,如走网站协议的上传点就可以利用
	 上传操作测试上传漏洞;像WEB、APP甚至有些软件的上传功能点走的就是网站协议就可以利用,
	 但是有的上传点走的是类似字节流协议的情况,这样基本上就不用测试了。

原理:利用文件上传功能,上传带有后门的文件[图片、文本、文件、脚本等]以达到控制网站的目的。

存在上传漏洞的必要条件

(1)存在上传点
(2)可以上传动态文件
(3)上传目录有执行权限,并且上传的文件可执行
(4)可访问到上传的动态文件或脚本

文件上传漏洞高危触发点

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

存在文件上传功能的地方都有可能存在文件上传漏洞,比如相册、头像上传,视频、照片分享。
论坛发帖和邮箱等可以上传附件的地方也是上传漏洞的高危地带。
另外像文件管理器这样的功能也有可能被攻击者所利用。

值得注意的是,如果移动端也存在类似的操作的话,那么相同的原理,也存在文件上传漏洞的风险。

通过简单的代码案例去理解文件上传

思考:文件上传会接收哪些信息?从安全的角度思考接收的这些信息该如何过滤何利用?

以下是一个简单的文件上传功能

<html>
<head>
<meta charset="utf-8">
<title>UP_TEST</title>
</head>
<body>

<form action="" method="post" enctype="multipart/form-data">
    <label for="file">文件名:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="提交">
</form>

</body>
</html>


<?php
$name=$_FILES["file"]["name"];
echo "上传文件名: " . $name . "<br>";

$type=$_FILES["file"]["type"];
echo "文件类型: " . $type . "<br>";

$size=$_FILES["file"]["size"];
echo "文件大小: " . $size . " kB<br>";
//echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";

$up_error_info=$_FILES["file"]["error"];
echo "错误:: " . $up_error_info . "<br>";

$temp_name=$_FILES["file"]["tmp_name"];
echo "文件临时存储的位置: " . $temp_name . "<br>";

?>

从代码中我们可以看到"$_FILE"包含有大小,名字,类型,临时名,错误信息。

现在我们看一个真实上传操作的数据包


在这里插入图片描述


现在我们思考一下,存在安全问题可以实现文件上传突破的时候哪些地方是我们可以利用的?或者说哪些地方是可以验证出是非法类型攻击的?

数据包

Content-Type: image/jpeg		# 此处验证文件类型[如PHP的文件类型 "application/octet-stream"]

文件头信息:JPG/PNG/GIF/zip...

文件名后缀类型:jpg/png/gif/zip...

通过上面代码的演示我们分析到常规性的代码,过滤的上传内容点是很多的。一个比较安全的文件上传的要验证是验证多方面的,单纯的验证一反面可能会被伪造去突破,当把所有验证的点都验证一遍,那么说明这样的上传点是安全的,一般没有安全漏洞。

我们所要了解的文件上传漏洞其实就是去测试文件上传功能点验证了哪些东西?哪些点我们修改之后可以绕过验证,从而让我们钻了空子进行了突破。

文件上传大部分都会在数据包上做文章,用Burp工具就是把数据包拦截下来在数据包上进行测试。[抓包工具有很多种,都可以实现拦截,但Burp相对来说更简单方便快捷一些。]

后门必须要和网站语言的格式相关