php 任意文件上传漏洞,一个任意文件上传漏洞的复现、分析、利用与防御建议...

*本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担

前言

CMS Made Simple(CMSMS)是一个简单、便捷且易用的内容管理系统。前面一篇文章,我们讲述了关于其中一个基于时间的SQL注入漏洞的复现、分析及利用过程。本文详细讨论CMSMS中的另一个漏洞,也是Web安全中较为常见的一种漏洞类型。ShowTime2是CMSMS中比较常用的模块,主要用于上传水印图片。该模块在3.6.2及之前的版本中,存在一个任意文件上传漏洞,无法确保用户上传的水印文件具有标准的图像文件扩展名(gif、jpg、jpeg或png),因此攻击者可以利用该漏洞上传任意文件并且远程执行任意代码。

一 实验环境1.渗透主机:kali-linux-2018.3-vm-i386

2.目标主机:Debian9.6 x64

3.软件版本:CMS Made Simple 2.2.8

4.插件版本:Showtime2-3.6.0

二 涉及工具1.BurpSuite v1.7.36

2.Metasploit v4.17.3

3.Mozilla Firefox 60.6.2

三 漏洞复现

1.在showtime2模块中上传一张名为Hacker.jpg的水印图片,显示上传成功,结果如下:

php 任意文件上传漏洞,一个任意文件上传漏洞的复现、分析、利用与防御建议..._第1张图片2.尝试上传一个名为test123.php文件,页面中有告警信息,显示服务器未成功获取到图片的尺寸信息,此时上传成功与否无法确定,告警信息如下图所示:

php 任意文件上传漏洞,一个任意文件上传漏洞的复现、分析、利用与防御建议..._第2张图片

3.通过如下url:

验证php文件是否上传成功,如果上传未成功,应当是如下图所示的内容:

php 任意文件上传漏洞,一个任意文件上传漏洞的复现、分析、利用与防御建议..._第3张图片4.从下图可以看出,虽然之前有告警信息,但是文件test123.php依旧上传成功(看来是我想多了,服务端获取图片尺寸的代码,仅仅用来获取图片尺寸了):

php 任意文件上传漏洞,一个任意文件上传漏洞的复现、分析、利用与防御建议..._第4张图片5.登录到目标服务器上查看,在如下路径中存在刚才上传的test123.php,如下图所示:

php 任意文件上传漏洞,一个任意文件上传漏洞的复现、分析、利用与防御建议..._第5张图片

由此我们可以确定,在showtime2模块中存在任意文件上传漏洞。

在有些Web应用中上传图片时,可能会通过获取图片尺寸的方式来防止任意文件的上传,这种方式可以被绕过。在渗透主机中使用如下命令:root@kali:~/Desktop#cat Hacker.jpg test123.php > Hacker123.php

将Hacker.jpg与test123.php拼接起来,然后再上传到showtime2模块,可以看到php文件上传成功,cmsms无告警,这样便成功绕过了图片尺寸检测,结果如下图所示:

php 任意文件上传漏洞,一个任意文件上传漏洞的复现、分析、利用与防御建议..._第6张图片

四 漏洞分析

通过分析源代码,我们找到了任意文件上传漏洞的产生点,有关的问题源码如下图所示:class showtime2_image{

protected function __construct() {}

public static function watermark_image($source_image, $dest_image, $create_bak=true){

$gCms = cmsms();

$config = $gCms->GetConfig();

$mod = cms_utils::get_module('Showtime2');

if ($mod->GetPreference('watermark_bak')=='1' && $create_bak){

/*

$fname = str_

你可能感兴趣的:(php,任意文件上传漏洞)