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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一步:安装环境
下载源码并解压至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();
    }
</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值