看图说话:文件上传(File Upload)漏洞示例

作为测试人员,我们常常听到“安全测试”这个词,但鲜有人真正做过安全测试。从我们的职责“保障质量”角度来说,说是一种“失职”也不为过。那么安全测试是什么,究竟怎么进行安全测试?希望本文能起到抛砖引玉的作用。

文件上传漏洞是什么?

一个未经严格验证的系统中会存在各种各样的漏洞,同理,也对应有各种各样的漏洞监测手段。今天我们说一说最常见的一种:文件上传漏洞的检测。

在今天的web应用程序中,支持文件的上传是一种常见的要求,因为这有助于提升业务效率。但随之也带来很多风险。如果文件上传的接口存在漏洞,那么攻击者就可以借助这个漏洞上传一个可执行的文件到服务器并执行,然后获取一个特定的权限,或进行一项危及服务器的行为。

这里上传的文件可以是木马、病毒、恶意脚本或者WebShell等。

为什么会产生文件上传漏洞?

File Upload(文件上传)漏洞,是由于程序员在对用户文件上传部分的控制不足或者处理缺陷,而导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件。打个比方来说,如果使用 windows 服务器并且以 asp 作为服务器端的动态网站环境,那么网站的上传功能就不能允许用户上传 asp 类型的文件,否则用户上传一个 webshell,服务器上的文件就可以被他任意更改了。因此文件上传漏洞带来的危害常常是毁灭性的,Apache、Tomcat、Nginx等都曝出过文件上传漏洞。

示例

1、准备开源工具:DVWA

2、准备PHP脚本文件FI_GET_INI.php,内含一行脚本<?php echo phpinfo(); ?>;

3、准备jpeg文件,Desert.jpeg原为windows自带图片,执行CMD命令copy Desert.jpeg+FI_GET_INI.php Desert.jpeg,将<?php echo phpinfo(), ?>追加在图片Desert.jpeg最后;

4、以下为实际场景实验,打开靶机页面:

5、上传FI_GET_INI.php,成功,说明系统没有对文件类型进行检查,接受PHP脚本文件上传:

6、上传Desert.jpeg,成功,使用文本编辑器打开服务器接收上传文件目录中Desert.jpeg,发现<?php echo phpinfo() ?>在图片文件中,说明系统没有检查文件内容,接受含有恶意脚本文件上传:

7、第5步、第6步上传的文件,配合文件包含漏洞(File Inclusion),可以轻易在服务器上执行(可参考本文作者在简书上发表的《看图说话:文件包含(File Inclusion)漏洞示例》);

8、文件上传(File Upload)漏洞的主要防范措施:

(1)限制上传文件的类型(针对第5步中上传的PHP文件)、

(2)限制上传文件的大小、

(3)隐藏文件路径(上面截图中可以轻易获取上传文件在服务器端保存的位置,为文件包含攻击提供便利)、

(4)检查上传文件中是否含有恶意信息(如检查图片文件是否正常编码开头结尾,避免第6步中上传的图片文件含有恶意脚本)。

原文发布于微信公众号 - 软件测试经验与教训(udatest)

原文发表时间:2018-11-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏渠道合作伙伴技术圈

Windows server环境下混合云部署DFS文件服务

很多传统企业在设计身份验证和文件服务时,都会使用微软的活动目录和windows server自带的文件共享来实现以上的需求, 公有云的出现给这个场...

78916
来自专栏自由而无用的灵魂的碎碎念

Windows Server 2008 R2 到Windows 7的改造之路

与windows 7相比,windows server 2008 r2功能更为全面,开发人员也更喜欢使用win server 2008 r2进行开发。

1513
来自专栏码匠的流水账

聊聊flink的checkpoint配置

2642
来自专栏云计算教程系列

在Ubuntu 16.04上安装OpenVAS 8

OpenVAS(开放式漏洞评估系统)是一个客户端/服务器架构,它常用来评估目标主机上的漏洞。OpenVAS是Nessus项目的一个分支,它提供的产品是完全地免费...

2092
来自专栏决胜机器学习

消息队列(一) MySQL实现消息队列

消息队列(一)MySQL实现消息队列 (原创内容,转载请注明来源,谢谢) 一、概述 消息队列(MessageQueue,通常简称MQ)是一种进程间通信或同一进...

8183
来自专栏LanceToBigData

IDEA将项目上传至码云/GitHub托管

前言   好久都没有写博客了,由于博主之前一直都在上班处于加班的阶段,所以根本就没有时间去学习。现在请假回到学校写论文,有时间来学习了。   所以会不断的进行博...

4757

如何在Linux上搭建Terraria 游戏服务器?

Terraria是一款二维沙盒游戏,类似于Minecraft(我的世界),允许玩家在开放的世界中探索,构建和战斗。2015年,Terraria开发者宣布支持Li...

6513
来自专栏云计算教程系列

如何使用CentOS 7上的TICK堆栈监控系统指标

TICK堆栈是来自时间序列数据库InfluxDB的开发人员的产品集合。它由以下组件组成:

2925
来自专栏埋名

专门为Github党打造的超级无敌Chrome插件

作为GitHub党,分享一些好用的Chrome插件,帮助增强Github功能。标题名称在Chrome插件商场搜索,即可安装对应的插件。

3643
来自专栏纯洁的微笑

如何使用 Spring Boot 开发邮件系统?

互联网发展到现在,邮件服务已经成为互联网企业中必备功能之一,应用场景非常广泛,比较常见的有:用户注册、忘记密码、监控提醒、企业营销等。

3102

扫码关注云+社区

领取腾讯云代金券