代码审计之dedecms最新后台两处getshell

一、payload如下:

第一处getshell

http://localhost/dede/sys_verifies.php?action=getfiles&refiles[]=\";phpinfo();//

第二处getshell

http://localhost/dede/stepselect_main.php?action=addenum_save&ename=233&issign=1&egroup=;phpinfo();$

二、效果图:

第一处getshell

41

第二处getshell

42

三、具体分析:

第一处getshell

漏洞发生在 /dede/sys_verifies.php 文件中,当 $actiongetfiles 时,程序会将数组 $refiles 的所有内容,写到 /dede/modifytmp.inc 文件中。

33

35

在该 else if 语句的尾巴处包含了/dede/templets/sys_verifies_getfiles.htm 文件(这里要注意一下 $doneStr 的内容)

34

可以看到程序又请求了 /dede/sys_verifies.php 文件,且 $actiondown 。跟进 down

36

会发现程序直接将 /data/modifytmp 文件包含进来,导致我们刚刚注入的代码被执行了。(我们注入的是refiles[]=\";phpinfo();

37

第二处getshell

这一处漏洞入口在 stepselect_main.php 文件中。我们进入到 $action=’addenum_save’ 添加枚举类的处理语句中,$ename$egroup 都是我们可以控制的,而且程序在运行时,会先判断 dede_sys_enum 表中是否存在 egroup= $egroup 的记录,如果不存在,则用 INSERT 语句将我们传入的$ename$egroup 插入数据库,然后执行 WriteEnumsCache 函数。

38

WriteEnumsCache 函数存在于 enums.func.php 文件中,它的作用是更新所有枚举缓存。我们跟进该函数,发现该函数会将所有的 egroup=$egroup 记录写入 /data/enums/$egroup.php 文件中,这也最终导致了getshell。

39

40

四、参考文章:

Dedecms V5.7后台的两处getshell

文章作者: Mochazz
文章链接: https://mochazz.github.io/2018/04/03/dedecms最新后台两处getshell/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mochazz's blog