词条信息

admin
admin
超级管理员
词条创建者 发短消息   

相关词条

热门词条

更多>>
什么是端口?到底是做什么的呢?
端口一般指两种,一种是硬件比如路由器或者交换机的插网线的端口,一种是软件的逻辑的概念,比如http的80端口!...
7种进阶方法让你快速测试端口连通性
Ping是Windows、Linux和Unix系统下的一个检查网络连通性的命令工具,对于大部分互联网用户来说很...
电脑开机,总需要按F1,是什么原因造成的?
一.主板掉电这个说法是行业内的叫法了,一般是主板的CMOS电池没电了导致的。也是最常见的一种提示你按F1的提示...
社保降费对个人有什么影响?
下调城镇职工基本养老保险单位缴费比例是政府给企业发的一个大红包,特别是对于企业来说是一个利好,但是对个人来说有...
车辆“出险”对下年保费的影响,到底有多大?
【出险对交强险的影响】【出险对商业险的影响】车辆“出险”对下年保费的影响,到底有多大?这里有必要先提下车险第三...
解决网 >>所属分类 >> 网站建设    网站安全   

对thinkphp通杀漏洞利用与修复建议

标签: thinkphp 漏洞

顶[0] 发表评论(0) 编辑词条

  thinkphp在国内来说,很多站长以及平台都在使用这套开源的系统来建站,为什么会这么深受大家的喜欢,第一开源,便捷,高效,生成静态化html,第二框架性的易于开发php架构,很多第三方的插件以及第三方的开发公司较多,模板可以自定义设计,在thinkphp的基础上可以开发很多大型的虚拟币平台,以及会员平台,商城系统,thinkPHP的官方在系统升级方面做的比较完善,及时更新与修复一些BUG。


  目前官方最新版本是ThinkPHP5.0.20版本,之前的ThinkPHP3.2,ThinkPHP3.1、ThinkPHP3.0都存在过网站漏洞,包括一些高危的远程代码执行漏洞,thinkphp sql注入漏洞,后台管理员XSS跨站漏洞,任意文件上传漏洞等等。目前我们SINE安全于2018年9月5号,在日常的thinkphp网站安全检测当中,发现某客户使用的thinkphp系统存在着网站sql注入漏洞,危害性较高,一开始以为客户使用的是较低版本:thinkphp 3.2.3,才会存在这种网站漏洞,但是在实际的安全检测当中发现不仅仅是这个版本,还包含了目前最新版本5.0.20,关于该网站漏洞的详情与poc利用,我们一步一步来分析。


  网站安全检测thinkphp漏洞产生原理


  产生网站漏洞的文件存在于library文件夹下的think文件,里面包含的db文件夹的driver.class.php代码中的第677行开始,在order处理分析的时候发现分析参数里可以插入非法的字符,在key赋值的时候并没有做严格的安全限制与过滤,导致攻击者可以使用SQL注入语句进行构造查询数据库里的内容,包括可以查选数据库里的管理员账号密码, 写入数据库等等的操作。

  thinkphp 3.2.3漏洞代码如下:

  /**

  * 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:'';

  }

  ThinkPHP 5.1.22漏洞代码存在于library文件夹下的think文件里的db/query.php

  代码里的第1514行,代码如下:

  /**

  * 指定排序 order('id','desc') 或者 order

  (['id'=>'desc','create_time'=>'desc'])

  * @access public

  * @param string|array $field 排序字段

  * @param string $order 排序

  * @return $this

  */

  public function order($field, $order = null)

  {

  if (empty($field)) {

  return $this;

  } elseif ($field instanceof Expression) {

  $this->options['order'][] = $field;

  return $this;

  }

  if (is_string($field)) {

  if (!empty($this->options['via'])) {

  $field = $this->options['via'] . '.' . $field;

  }

  if (strpos($field, ',')) {

  $field = array_map('trim', explode(',', $field));

  } else {

  $field = empty($order) ? $field : [$field => $order];

  }

  } elseif (!empty($this->options['via'])) {

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

  if (is_numeric($key)) {

  $field[$key] = $this->options['via'] . '.' . $val;

  } else {

  $field[$this->options['via'] . '.' . $key] = $val;

  unset($field[$key]);

  }

  }

  从以上thinkphp 3.2.3 、thinkphp 5.0的代码里可以分析出来,当order在分析关联函数的时候会赋值于key值中,可以掺入sql注入语句执行攻击网站,并可以拼接方式绕过sql安全过滤,导致可以执行sql语句,查询数据库,操作数据库。

  thinkphp漏洞利用详情:

  thinkphp漏洞修复建议:

  如果是低版本的thinkphp 3.*的系统,请尽快升级到thinkphp最高版本。

  如果是高版本的thinkphp 5.*的系统,请尽快升级到thinkphp最高版本。

  如果网站被攻击了,请尽快做好网站的安全备份,查找网站存在木马后门,对其代码里被篡改的代码进行修复,并做好网站安全加固,对一些缓存文件夹进行安全权限设置,如果对网站漏洞修复不是太懂的话可以找专业的网站安全公司去处理,国内SINE安全公司,绿盟安全,启明星辰都是比较专业的。如果网站使用的是单独服务器比如linux系统、windows系统,可以部署网站防火墙,来防止sql注入攻击。网站默认的管理员后台地址可以修改为比较繁琐的地址。

 

 

附件列表


按字母顺序浏览:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

→我们致力于为广大网民解决所遇到的各种电脑技术问题
 如果您认为本词条还有待完善,请 编辑词条

上一篇什么样的网站百度排名好?
下一篇WordPress4.9漏洞与修复

0
1. 本站部分内容来自互联网,如有任何版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
2. 本站内容仅供参考,如果您需要解决具体问题,建议您咨询相关领域专业人士。
3. 如果您没有找到需要的百科词条,您可以到百科问答提问或创建词条,等待高手解答。

关于本词条的提问

查看全部/我要提问>>