当黑客就入门 禅道7.3代码审计

这篇博客介绍了如何进行禅道7.3的代码审计,从安装环境到验证漏洞的过程。重点分析了一个未过滤参数导致的SQL注入问题,讲解了如何使用DocFetcher进行源码搜索,以及如何构造恶意请求来触发漏洞。文章还详细描述了请求处理的路径,包括URL重写规则和参数解码过程。
摘要由CSDN通过智能技术生成

第一步:安装环境
下载源码并解压至WWW下
访问www下的install.php进行安装
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二部:验证漏洞
php审计知识

->在php中是一个对象操作符
比如我有一个类db:
class db{
public $host;
public function printHost(){
echo KaTeX parse error: Expected 'EOF', got '}' at position 15: this -> host; }̲ } 使用这个类: 首先要实例…db = new db();
得到一个对象$db,那我要怎么使用db里面的属性和方法呢,这个时候就要用->了,比如:
$db -> host = ‘localhost’; //设置他的属性
$db -> printHost(); //使用方法

经审计,有漏洞的部分为

    public function limit($limit)
    {
        if(empty($limit)) return $this;
        stripos($limit, 'limit') !== false ? $this->sql .= " $limit " : $this->sql .= ' ' . DAO::LIMIT . " $limit ";
        return $this;
    }

函数fuction limit()未对传进的参数进行过滤,直接拼接成SQL语句进行查询。
学习反向审计的方式,在其他源码中追溯调用该危险函数及参数的位置
这里推荐一个软件 DocFetcher
使用方法
在这里插入图片描述
免安装,可对某个范围里的文件内容进行搜索,且文件格式支持非常齐全
DocFetcher中检索limit
module\task\model.php中limit被调用在 getUserasks
在这里插入图片描述

    public function getUserTasks($account, $type = 'assignedTo', $limit = 0, $pager = null, $orderBy="id_desc")
    {
        $tasks = $this->dao->select('t1.*, t2.id as projectID, t2.name as projectName, t3.id as storyID, t3.title as storyTitle, t3.status AS storyStatus, t3.version AS latestStoryVersion')
            ->from(TABLE_TASK)->alias('t1')
            ->leftjoin(TABLE_PROJECT)->alias('t2')
            ->on('t1.project = t2.id')
            ->leftjoin(TABLE_STORY)->alias('t3')
            ->on('t1.story = t3.id')
            ->where('t1.deleted')->eq(0)
            ->beginIF($type != 'all')->andWhere("t1.$type")->eq($account)->fi()
            ->orderBy($orderBy)
            ->beginIF($limit > 0)->limit($limit)->fi()
            ->page($pager)
            ->fetchAll();

        $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'task');

        if($tasks) return $this->processTasks($tasks);
        return array();
    }

同样地追踪 getUserTasks
在这里插入图片描述

module\block\control.php中

public function printTaskBlock()
    {
        $this->view->tasks = $this->loadModel('task')->getUserTasks($this->app->user->account, $this->params->type, $this->params->num, null, $this->params->orderBy);
        $this->display();
    }
</
禅道是第一款国产的开源项目管理软件。它集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款专业的研发项目管理软件,完整地覆盖了项目管理的核心流程。注重实效的管理思想,合理的软件架构,简洁高效的操作,优雅的代码实现,灵活的扩展机制,强大而易用的api调用机制,多语言支持,多风格支持,搜索功能,统计功能——这一切,您通过禅道,都可以拥有!禅道在手,项目无忧! 禅道的功能列表: 1、产品管理:包括产品、需求、计划、发布、路线图等功能。 2、项目管理:包括项目、任务、团队、build、燃尽图等功能。 3、质量管理:包括bug、测试用例、测试任务、测试结果等功能。 4、文档管理:包括产品文档库、项目文档库、自定义文档库等功能。 5、事务管理:包括todo管理,我的任务、我的Bug、我的需求、我的项目等个人事务管理功能。 6、组织管理:包括部门、用户、分组、权限等功能。 7、统计功能:丰富的统计表。 8、搜索功能:强大的搜索,帮助您找到相应的数据。 9、灵活的扩展机制,几乎可以对禅道的任何地方进行扩展。 10、强大的api机制,方便与其他系统集成。 更新日志: 禅道15.0stable版本 修复的Bug 产品视图项目列表页面列宽和排版 在产品下批量创建需求时打开了项目的页面,然后进入产品需求页面保存后二级导航错误 审计页面,处理一下换行和字段显示不完整问题 地盘日志中查看所有日志时,二级导航无选中态 地盘日志中查看所有日志时,日期控件icon不支持点击 内禅地盘项目列表,区块点击刷新后列表字段无法再进行排序 执行下打开需求详情,点击基本信息中的所属模块后二级导航左侧应用图标位置偏移 进入创建文档库动态后二级导航高亮不对 查看已删除的任务时没有标记已删除 Bug批量指派给用户显示不完整 全局搜索结果页面上移 用户需求关闭后没有置灰细分按钮 页面刷新后会显示为“Bad Request”es 点击项目库跳转到了创建项目页 Bug详情页新建Bug保存后返回页面二级导航菜单未高亮 用例详情页显示所属s 点击项目文档库提示没有创建项目权限 用例列表页去掉底部滚动条 二级导航缺失菜单分隔线 左侧导航多显示了一条分隔线 项目和执行测试中三级导航切换产品分支有问题 文档from参数全部删掉,检查逻辑 二级导航第一个菜单去掉权限后分割线还有 用例详情切换产品链接不对
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值