然之OA协同系统SQL注入漏洞

2018-03-1213:40:00 发表评论

然之OA系统简介

然之是一款面向中小企业的协同办公系统,它包括了客户管理系统 crm系统、OA系统、企业记账软件、文档管理系统、工作流系统、免费考勤系统、免费审批系统、免费报销系统。

然之OA协同系统SQL注入漏洞

SQL注入漏洞分析

问题出现在/lib/base/dao/dao.class.php文件中的orderBy函数中

public function orderBy($order)
{
    if($this->inCondition and !$this->conditionIsTrue) return $this;

    $order = str_replace(array('|', '', '_'), ' ', $order);

    /* Add "`" in order string. */
    /* When order has limit string. */
    $pos    = stripos($order, 'limit');
    $orders = $pos ? substr($order, 0, $pos) : $order;
    $limit  = $pos ? substr($order, $pos) : '';//截limit
    $orders = trim($orders);
    …………
    $order = join(',', $orders) . ' ' . $limit; //直接拼接

    $this->sql .= ' ' . DAO::ORDERBY . " $order";
    return $this;
}

 

简单分析一下orderBy函数,首先是把输入的$order变量过滤掉|SOH_字符,然后查看输入变量中是否存在limit字符,如果存在的话,对其进行截断,字符limit前形成$orders变量,limit字符后的内容变成$limit变量,问题就出在这里,之后并没有对$limit变量进行过滤,拼接到$orders变量之后,然后直接带入查询,并且然之协同框架支持多语句查询,因此可以构造多语句进行基于时间的SQL盲注注入。
但是这里如果跑数据库内容会出现一个问题,由于输入变量过滤掉了_字符,并且这个字符是数据库中表必有的。不过这里可以利用mysql的存储过程进行绕过。

存储过程的利用形式如下:

set @query=0x…;   (注入语句的ASCII值)
prepare stmt from @query;
execute stmt;

CE安全网
CE安全网广告位招租

发表评论

您必须登录才能发表评论!