描述
文件上传漏洞是指由于程序员未对上传的文件进行严格的验证与过滤,而导致的用户可以越过其本身权限向服务器上传可执行的动态脚本文件。
危害
非法用户可以上传恶意文件(webshell)控制网站、服务器,上传webshell后门方便查看服务器信息、查看目录、执行系统命令。
文件上传的知识
文件上传的过程
客户端 发送文件-> 服务器接收-> 网站程序判断-> 临时文件->移动到指定的路径
服务器 接收的资源程序
服务器接收资源代码
<?php
if($_FILES["file"]["erro"]>0)
{
echo "Error:".$_FILES["file"]["erro"]."<br/>";
}
else
{
echo "Upload:". $_FILES["file"]["name"]."<br/>";
echo "Type:". $_FILES["file"]["type"]."<br/>";
echo "Size:". ($_FILES["file"]["size"]/1024)."<br/>";
echo "Stored in:". $_FILES["file"]["tmp_name"];
}
?>
服务器返回客户端提供的文件信息
客户端文件上传代码
<html>
<head></head>
<body>
//地址 方法post 编码方法
<form action="upload.php"method="post"enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file"name="file"id="file"/>
<br/>
<input type="submit"name="submit"value="Sumbmit"/>//Sumbmit提交
</form>
</body>
</html>
客户端上传文件到服务端
文件上传代码(SIZE)
值 :0;没有错误发生,文件上传成功。
值:1;上传文件超过php.ini中upload_max_filesize选项限制的值
值:2;上传文件的大小超过HTML表单中MAX_FILE_SIZE选项指定的值
值:3;文件只有部分上传
值:4;没有文件上传
文件上传漏洞
直接文件上传:
直接getshell,无任何限制,攻击者较容易通过上传点,获取网站控制权限
有条件的上传:
①、开发者经验不足,对文件上传简单限制(简单前端验证,文件头文件检测),这种检测行为一班可以绕过。
②、权限认证未处理,没有对文件上传页面进行权限认证,匿名者就能访问上传文件,上传网页后门到网站目录控制网站
③、上传逻辑有问题,上传文件可以被绕过上传后门到网站上
有的文件上传漏洞是通过中间者或者系统特性上传可以被服务器解析脚本文件,从而控制网站
文件上传漏洞的修复方案
- 需要存在上传模板,做好权限认证,匿名者不可访问
- 文件上传目录设置禁止脚本文件执行
- .设置上传白名单,只允许图片上传
- 上传的后缀名,一定要设置图片格式.jpg/.png/.gif
版权归原作者 Krismile☜ 所有, 如有侵权,请联系我们删除。