nday漏洞还原分析之dedecms后台getshell

前言

最近发现 dedecmsnday后台getshell ,于是打算还原一下。根据日志显示,攻击者访问了 dede/ad_add.php 文件后,转而访问 plus/ad_js.php 文件,提交的 payloadplus/ad_js.php?nocache=1&aid=1&_=whoami

前期准备

DedeCMS V5.7 SP2正式版下载:http://updatenew.dedecms.com/base-v57/package/DedeCMS-V5.7-UTF8-SP2.tar.gz

我们先来看一下 dede/ad_add.php 文件。可以看到这是一个增加广告的页面,如下图:

1

实际上,它在后台的位置对应如下:

2

接下来,笔者使用 TheFolderSpy 软件对网站文件进行监控,这样能让我们快速的发现发生修改的文件,从而提高审计效率。 TheFolderSpy 设置如下:

3

然后,在如下4个位置分别填入一些标识信息,以便后续判断到底是哪一处发生问题。填写信息如下:

4

点击确定添加广告后,发现 TheFolderSpy 软件并没有监测到有文件内容被修改。于是我们继续访问 plus/ad_js.php?nocache=1&aid=1&_=whoami ,发现生成了一个 data\cache\myad-1.htm 文件,并且我们在上图第三个框中填写的 phpinfo();3 被写入了该文件。如下图所示:

5

我们可以观察到该文件路径为 data\cache ,那么应该是个缓存文件,而且文件后缀为 htm 。由于攻击者通过访问 plus/ad_js.php 页面能 getshell ,那么很有可能是程序在某处将这个缓存文件给包含了。接下来我们对 plus/ad_js.php 文件进行详细分析。

漏洞分析

plus/ad_js.php 文件代码如下:

6

这里关注 第9行第15行 ,可以清晰的看到程序包含了我们之前监控到生成的 htm 文件,第12-14行 主要是对要写入 htm 文件的内容进行处理,具体代码如下:

7

仔细观察这段代码,程序将从数据库中 dede_myad 查询的结果存在 $row 变量中(上图第3行),然后将表 dede_myad 中的 normbodyexpbody 字段的值作为 $adbody 写入缓存文件 $cacheFile ,并在最后 include $cacheFile; 。而 第16-18行 只是对 $adbody 内容进行简单的处理。我们再从数据库中,查看 dede_myad 表的内容,如下图:

8

可以看到 normbodyexpbody 字段,对应的就是我们刚刚填写的第3个和第4个标识信息。我们现在再来看看 normbodyexpbody 字段的值是如何写入的。再次回到 dede/ad_add.php 文件,针对刚刚填写的广告内容发起提交,抓包如下:

9

然后我们再看 dede/ad_add.php 文件代码:

10

此时整个漏洞发生的流程便十分清晰了,程序将来自用户的数据 $normbody[‘htmlcode’] 仅仅只是用 addslashes 函数处理,并没有对代码进行分析,然后便直接存储在数据库 dede_myad 表的 normbody 字段,导致用户可以将PHP代码存储在数据库中。如果攻击者此时访问 plus/ad_js.php 文件,则调用 normbody 字段并写入缓存文件,最终利用文件包含该getshell。

漏洞利用

在明白了上述分析流程,想利用该漏洞便十分简单。我们在广告内容处插入 –><!–

11

然后访问如下链接( 这里的aid值为第几个广告 ):

1
http://localhost//img/dedecms/20180723/plus/ad_js.php?nocache=1&aid=3

12

总结

本文从代码审计的角度,对漏洞进行详细分析,借助文件监控软件迅速定位漏洞所在。或许大家可以利用这种方式,发现更多的后台 getshell 利用姿势,期待大家挖掘。最后,希望大家多多交流,共同进步。如果大家有什么好的代码审计技巧,还望不吝分享,感谢大家的阅读。

文章作者: Mochazz
文章链接: https://mochazz.github.io/2018/07/23/nday漏洞还原分析之dedecms后台getshell/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mochazz's blog