分析某CMS上传GetShell原理-Window

admin 2023年2月21日13:26:17评论8 views字数 2843阅读9分28秒阅读模式

分析某CMS上传GetShell原理-Window

免责声明
由于传播、利用本公众号听风安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号听风安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!


0x00 前言

  笔者在看一篇代码审计的文章时,对其中作者提及的一处地方感到迷惑,思考无果遂便自己展开了一次粗浅的分析,最终弄明白了自己的困惑并在Window环境下实现了两种思路去达到GetShell目的。

0x01 安装

官网:http://www.sem-cms.com/xiazai.html

下载地址:http://www.sem-cms.com/TradeCmsdown/php/SEMCMS_PHP_3.9.zip

Linux:

分析某CMS上传GetShell原理-Window

安装完成后会给出后台登陆信息:

网站后台地址为:你的域名+N8D3ch_Admin/ 请牢记,后台默认帐户:Admin 密码:1 登陆后进行修改

Window:

网站后台地址为:你的域名+rhDOEr_Admin/ 请牢记,后台默认帐户:Admin 密码:1 登陆后进行修改

0x02 失败复现

访问:http://localhost:8887/semcms/N8D3ch_Admin/SEMCMS_Upload.php

分析某CMS上传GetShell原理-Window

上传抓包

分析某CMS上传GetShell原理-Window

按照某新版本商贸系统的代码审计文章所说的上传步骤进行操作

分析某CMS上传GetShell原理-Window

1)第一步

分析某CMS上传GetShell原理-Window

传入这个参数之后,会进入代码的拼接过程

分析某CMS上传GetShell原理-Window

最终执行的$newname , 是将文件的内容写入到111.jpg.php:.jpg,$Imageurl可以控制向上目录穿越,这里不设置,默认则为空。

分析某CMS上传GetShell原理-Window

move_uploaded_file($_FILES["file"]["tmp_name"],$Imageurl.$newname); //文件写入文件夹

最终由于:从而写入ADS流文件,会导致生成一个111.jpg.php的空文件和一个111.jpg.php:.jpg的实际内容为<?php phpinfo();?>的隐藏文件。

分析某CMS上传GetShell原理-Window

2)第二步

分析某CMS上传GetShell原理-Window

代码处理:

分析某CMS上传GetShell原理-Window

最终走向生成文件名字为111.jpg.php:.jpg<<<,可惜访问111.jpg.php,并没有发现有内容写入,所以在这里我对原文中作者的描述,产生了质疑。

分析某CMS上传GetShell原理-Window

0x03 问题探索

首先这个问题,对环境有要求,只能在Window环境下进行测试。

正常来说,利用:冒号和<追加符号结合的方式,一般用于绕过黑名单的限制。为了理解这种方式,我们需要了解并学习下Window的特性

0x3.1 Window特性

通过一段存在上传漏洞的代码来进行说明。

<?php/** * Created by PhpStorm. * User: xq17 * Date: 4/17/22 * Time: 7:07 PM */header("Content-Type: text/html; charset=UTF-8");
$filename = $_FILES["file"]["name"];if($filename){ # 获取后缀名 $uptype = strtolower(end(explode(".", $filename))); print_r("suffix:".$uptype."n"); # 判断是否在黑名单里面 if(in_array($uptype, array('php', 'phtml'))){ print_r("不允许上传php文件!"); die(0); }else{ // 通过黑名单检验 move_uploaded_file($_FILES["file"]["tmp_name"], $filename); print_r("上传成功!"); }}

正常上传php文件的话,会被拦截。

分析某CMS上传GetShell原理-Window

这种情况在linux环境可以通过FUZZ各种后缀来尝试绕过,不过在Window环境,却可以通过一些巧妙的方式来进行绕过。


绕过方式1:

通过在文件名后面添加一个或多个.来绕过黑名单。

分析某CMS上传GetShell原理-Window

生成文件的时候会自动删除.

绕过方式2:

通过在文件名后面添加一个::$data这一默认流类型来绕过黑名单。

分析某CMS上传GetShell原理-Window

写入的时候会忽略::$data,而是作为默认流类型,保留了3.php这一原文件名达到绕过目的。

绕过方式3:

这种方式是PHP调用WindowAPI的特性导致的:

window的特性

Windows下的"你画我猜" -- 告别效率低下的目录扫描方法、

PHP源码调试之Windows文件通配符分析

< :匹配0个以上的字符

>:匹配一个字符

":匹配点号

(1)先利用冒号截断生成一个空白文件7.php

分析某CMS上传GetShell原理-Window

修改文件名:7.php:jpg,即可上传成功一个空文件

分析某CMS上传GetShell原理-Window

(2)然后利用<"或者>号进行覆盖写入

使用<可以匹配多个字符,即7.p< 能够匹配到7.php

分析某CMS上传GetShell原理-Window

使用>只能匹配单个字符,故用7.p>>能够匹配到7.php

分析某CMS上传GetShell原理-Window

使用"来匹配点号。

分析某CMS上传GetShell原理-Window

0x3.2 追溯失败原因

在0x02节提到的方式,若按原作者所说,通过构造111.jpg.php:.jpg<<<文件名结合0x3.1的Window特性来看并没有很大意义。

因为111.jpg.php:.jpg<<<匹配的就是111.jpg.php:.jpg+后面任意字符的文件名,根本匹配不到111.jpg.php这个我们想要覆盖的文件。

0x04 巧妙ByPass

既然知道了失败的原因,那么我们需要去找找,看看有没有可以突破的地方。

在这里,我们需要清晰地认识到场景的两处特殊之处:

1)后缀内容部分可控

分析某CMS上传GetShell原理-Window

2)文件名可控制

分析某CMS上传GetShell原理-Window

0x4.1 Bypass 1

根据代码的逻辑,我们是没有办法构造出php后缀的,来直接上传的。

因为我们可控的仅仅是文件名,还需要拼接后缀,而后缀的话必须是形如xxxjpgxxx的字符串,不能插入.,要不然会被分割,所以后缀我们是没办法构造出php的。

既然直接的办法行不通,那么可以尝试利用window特性来进行覆盖写入。

尝试1

首先通过冒号截断来写入一个ttt.jpg.php的空文件,只需要如图构造参数即可。

分析某CMS上传GetShell原理-Window

拼接之后,传入move_uploaded_file的值为ttt.jpg.php:.jpg

分析某CMS上传GetShell原理-Window

那么接下来,我只需要控制,wname的值为ttt,后缀控制为1.jpg<,那么拼接之后的值便是ttt.jpg<,按道理来说是应该能匹配到ttt.jpg.php,因为<其实等价于*的作用。

分析某CMS上传GetShell原理-Window


不过在实际中发现,一个<并没有匹配成功,使用两个以上<即可匹配成功。

分析某CMS上传GetShell原理-Window

0x4.2 Bypass 2

那就是如果<被过滤的时候,我们可以通过构造jpg"php来匹配上jpg.php这个格式。

分析某CMS上传GetShell原理-Window

查看下文件是否被修改成功, success!

分析某CMS上传GetShell原理-Window

0x05 总结

   本文内容记录了笔者从初始化环境,因复现失败,再去学习window特性,然后结合特性实现在window环境绕过CMS伪白名单限制(因为他只是通过正则部分限定了后缀,不是严格的白名单)并最终完成GetShell的过程。值得一提的是,虽然这些trick比较老了,但是源远流长,在一些场景依然有着不可忽视的作用。




欢迎关注听风安全,分享更多安全技术~

原文始发于微信公众号(听风安全):分析某CMS上传GetShell原理-Window

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年2月21日13:26:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   分析某CMS上传GetShell原理-Windowhttps://cn-sec.com/archives/1268272.html

发表评论

匿名网友 填写信息