本帖最后由 xmidf 于 2018-9-29 09:28 编辑
前言
故事起源于一次校园网内扫描,扫到一台禅道的服务器,遂开始分析起了一些历史漏洞,但是由于版本原因在服务器上都没有成功
文本分析了下禅道中路由的设置,以及一些历史漏洞,若有疏漏,还望斧正。
路由分析
路由是分析和审计cms前一个很重要的点,能了解整个cms的基本框架和代码流程。
禅道各个版本中路由没有什么较大的变化,这里以9.1.2为例进行分析。
首先,禅道里有两种类型的路由,分别对应者两种不同的url访问方式
PATHINFO:user-login-L3plbnRhb3BtczEwLjMuMS93d3cv.html以伪静态形式在html名称中传参
GET:index.php?m=block&f=main&mode=getblockdata类似于其他常规cms在get参数中传参
index.php
an1.png (211.96 KB, 下载次数: 45)
2018-9-29 10:20 上传
贴代码太多了,就放张图片好了。
一开始是加载了一些框架的类,然后new了一个路由
$app = router::createApp('pms', dirname(dirname(__FILE__)), 'router');
然后做了一些简单的判断和是否安装,最主要的是最后的三行
$app->parseRequest();
$common->checkPriv();
$app->loadModule();
看方法名也大致能猜到是干嘛了,分别对应着参数解析、权限检测、模块加载
router.class.php路由的代码文件在frameworkbaserouter.class.php中
[AppleScript] 纯文本查看 复制代码public function parseRequest()
{
if(isGetUrl())
{
if($this->config->requestType == 'PATH_INFO2') define('FIX_PATH_INFO2', true);
$this->config->requestType = 'GET';
if($this->config->requestType == 'PATH_INFO' or $this->config->requestType == 'PATH_INFO2')
{
$this->parsePathInfo();
$this->setRouteByPathInfo();
}
elseif($this->config->requestType == 'GET')
{
$this->parseGET();
$this->setRouteByGET();
}
else
{
$this->triggerError("The request type {$this->config->requestType} not supported", __FILE__, __LINE__, $exit = true);
}
}
一开始的isGetUrl就会判断是那种类型的传参方式
[AppleScript] 纯文本查看 复制代码function isG