前言

本文审计出现的漏洞已提交CNVD,该CMS前后出现好几个漏洞,也有的至今仍未修复,果然,最新版仍然存在变量覆盖问题,本文由前台到getshell,前提也在于此。在审计过程中发现了多个问题,主要归结为文件操作、和变量覆盖所导致的getshell。变量覆盖前后也出现不止一处,若发现与之前有所雷同敬请忽略。本文主要对审计过程进行一个详述与学习。整个审计历程从一开始后台再到前台,getshell由组合利用前后台漏洞所至。

声明:由于CNVD漏洞公开时间上的延迟问题,关键位置将作打码,也请勿将本文出现的漏洞恶意利用。

后台

1. 任意文件删除

漏洞出现在后台备份恢复功能删除zip处,对应的文件为***fo/app/system/databack/admin/index.class.php的821~836行从代码中可以看到$file可控且未进行过滤可进行任意目录遍历

漏洞复现

2.文件上传

文件上传漏洞也是也是出现在数据库备份恢复时,追踪对应文件上传功能点处,具体为upfilety.php文件的269行开始处,上传type为sql时执行,而默认type为sql,上传的后缀限制为sql和zip,若为压缩包zip程序进行解压判断压缩包里的文件是否为sql文件,而漏洞正是发生在此处位置代码312~328行处,当zip里面的文件非sql文件时并未终止上传,继续判断然后输出压缩包里的文件非sql文件,上传完成后,输出提示信息再exit退出。整个上传逻辑判断存在问题,因此可通过zip上传任意文件。(在审计此处时看到代码的320行处后缀(houzhui)开发竟然写为houzui了,普通话~)


压缩包校验




3.跨目录解压

此漏洞原理与1,2类似不在进行详述。主要看如下代码,$file可控且未过滤../


通过组合2和3即可将php后门上传至服务器完成getshell.


4.变量覆盖

位置:admin/login/login_check.php,此处加载了 /admin/include/common.inc.php

图14
/admin/include/common.inc.php

此处变量可以实现变量覆盖。
因此可以覆盖$url_array变量,EXP为:
http://127.0.0.1/***info/admin/login/login_check.php?url_array[]=123&url_array[]=123&url_array[]=aa%22+autofocus+onfocus=alert(2)+a=%0a%0ba=&url_array[]=123

其中authcode 为其加解密算法。 管理员正常登录后,该值会被取出并解密
app/system/include/class/common.class.php

最终直接输出在
app/system/safe/admin/templates/index.php

最终,无需登录,访问上述链接可以在后台直接X。当管理登录后台时,切换到“安全与效率”界面,XSS可自动触发,通过此即可盗取管理员Cookie。

5.利用

综上对以上过程作一个回顾,由最后的变量覆盖即可通过盗取后台管理员cookie获得后台权限,再利用文件操作存在的逻辑与过滤不严问题即可任意文件删除、上传甚至getshell。

点击收藏 | 1 关注 | 2
登录 后跟帖