网站安全检测 漏洞检测 对thinkphp通杀漏洞利用与修复建议
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注入攻击。网站默认的管理员后台地址可以修改为比较繁琐的地址。
网站安全检测 漏洞检测 对thinkphp通杀漏洞利用与修复建议的更多相关文章
- 【渗透实战】那些奇葩的WAF_第二期_无意发现通杀漏洞,空字节突破上传!
/文章作者:Kali_MG1937 CSDN博客号:ALDYS4 QQ:3496925334 未经许可,禁止转载/ 该博文为本人18年左右的渗透记录,文法粗糙,技术含量极低,流水账文章,且今日不知为何 ...
- CVE-2017-11882:Microsoft office 公式编辑器 font name 字段栈溢出通杀漏洞调试分析
\x01 漏洞简介 在 2017 年 11 月微软的例行系统补丁发布中,修复了一个 Office 远程代码执行漏洞(缓冲区溢出),编号为 CVE-2017-11882,又称为 "噩梦公式&q ...
- SSRF漏洞(原理、漏洞利用、修复建议)
介绍SSRF漏洞 SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞.一般情况下,SSRF攻击的目标是外网无法访问 ...
- wps 2012-2013 通杀漏洞(CVE-2013-3934)
测试方法: 本站提供程序(方法)可能带有攻击性,仅供安全研究与教学之用,风险自负! #!/usr/bin/python # Exploit Title: Kingsoft Office Writer ...
- Jenkins-CVE-2016-0792漏洞利用及修复建议
漏洞概述: 国外网站 Contrast Security 于2016年2月24日在公开了Jenkins近日修复的一个可通过低权限用户调用 API 服务致使的命令执行漏洞详情.通过低权限用户构造一个恶意 ...
- Web安全常见漏洞修复建议
转载地址:https://security.pingan.com/blog/17.html SQL注入 在服务器端要对所有的输入数据验证有效性. 在处理输入之前,验证所有客户端提供的数据,包括所有的参 ...
- 网站漏洞检测之WordPress 5.0.0 系统修复方案
2019年正月刚开始,WordPress最新版本存在远程代码注入获取SHELL漏洞,该网站漏洞影响的版本是wordpress5.0.0,漏洞的产生是因为image模块导致的,因为代码里可以进行获取目录 ...
- Metasploit是一款开源的安全漏洞检测工具,
Metasploit是一款开源的安全漏洞检测工具,可以帮助安全和IT专业人士识别安全性问题,验证漏洞的缓解措施,并管理专家驱动的安全性进行评估,适合于需要核实漏洞的安全专家,同时也适合于强大进攻能力的 ...
- 文件包含漏洞检测工具fimap
文件包含漏洞检测工具fimap 在Web应用中,文件包含漏洞(FI)是常见的漏洞.根据包含的文件不同,它分为本地文件包含漏洞(LFI)和远程文件包含漏洞(RFL).利用该漏洞,安全人员可以获取服务 ...
随机推荐
- C# linq to sql
参考文章地址:http://www.cnblogs.com/yubaolee/p/BestLinqQuery.html 以下是我自己的总结: 表结构: 本文全部代码基于:UserInfo与Clas ...
- 设计模式之简单工厂模式(Simple Factory)
原文地址:http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/06/2579100.html 今天呢,要学习的设计模式是“简单工厂模式”,这是一个 ...
- C++学习之【使用位操作符求素数分析】
先放普通代码: #include <iostream> using namespace std; void getPrime_1() { const int MAXN = 100; boo ...
- Android 回调的理解,觉得写得好就转过来。。。收藏一下
转自:一个经典例子让你彻彻底底理解java回调机制 以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所 ...
- UESTC-1259 昊昊爱运动 II
昊昊爱运动 II Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 昊昊喜 ...
- Uva 10534 波浪子序列
题目链接:https://vjudge.net/contest/160916#problem/C 题意: 求一个奇数长的子序列,前一半严格递增,后一半严格递减:O(nlogn) 分析: 再次复习一下L ...
- CSP
CSP(Content-Security-Policy): 内容安全策略 作用: .限制资源获取 .报告资源获取越权 限制方式: .default-src限制全局 跟链接请求有关的东西,限制他 ...
- luogu P1768 天路
嘟嘟嘟 01分数规划之最优比率环. 主要是发一下基于dfs的spfa.跑的贼快,原来总用时2000多ms还TLE了两个点,改成dfs后总用时直降43ms! #include<cstdio> ...
- 八、IntelliJ IDEA 缓存和索引的介绍及清理方法
这样一句话“ 对于首次创建或打开的新项目,IntelliJ IDEA 都会创建项目索引,大型项目在创建索引的过程中可能会出现卡顿的现象,因此强烈建议在 IntelliJ IDEA 创建索引的过程中不要 ...
- P1800 software_NOI导刊2010提高(06)
P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术 ...