禅道826版本SQL注入,登录绕过以及禅道826后台GetShell的小技巧

本文介绍了禅道826版本存在的SQL注入问题,源于limit()函数未过滤输入,允许构造特定payload实现写文件。同时揭示了如何利用HTTP Referer字段绕过登录限制进行注入。在Windows环境下,利用FindFirstFile()函数的特性,讨论了文件删除和文件名爆破的可能。此外,提到了文件上传后的文件名规律。
摘要由CSDN通过智能技术生成

SQL注入由 orderBy($order) 函数过滤不严格导致。但是,这个函数对传进的参数进行了一系列过滤,导致 getshell 的条件比较苛刻。不甘心,于是乎找了一个比较好利用的地方。我只是以这个模块的一个函数为例,其它未提到的地方仍然很有可能存在注入。

  一、问题的根源

  问题出现在 limit($limit) 函数,它对传进的参数没有经过任何过滤就直接拼接成SQL语句进行查询。

// D:\wamp\www\zentao826\lib\base\dao\dao.class.php

public function limit($limit)

{

if($this->inConditionand !$this->conditionIsTrue) return $this;

if(empty($limit)) return $this;

stripos($limit, 'limit') !== false ? $this->sql .= " $limit " : $this->sql .= ' ' . DAO::LIMIT . " $limit ";

return $this;

}

  二、利用点

  把这个函数在控制器文件中搜索了一下, ->limit($ 只出现在了 module\block\control.php 中,。这个模块中只有 main() 函数是最重要的函数,其它函数都是通过传参进行回调的。直接切入重点吧

// 288行

public function main($module = '', $id = 0)

{

// 代码省略

$mode = strtolower($this->get->mode);

if($mode == 'getblocklist')

{

// 代码省略

}

elseif($mode == 'getblockdata')

{  // 需要base64编码

$code = strtolower($this->get->blockid);

$params = $this->get->param;

$params = json_decode(base64_decode($params));      // 这里需要编码

// 代码省略

$this->viewType  = (isset($params->viewType) and $params->viewType == 'json') ? 'json' : 'html';

$this->params    = $params;

$this->view->code = $this->get->blockid;

$func = 'print' . ucfirst($code) . 'Block';

if(method_exists('block', $func))

{

$this->$func($module);      // 在这里进行了动态调用

}

else

{

$this->view->data = $this->block->$func($mo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值