ThinkPHP5.1漏洞被挂马事件
ThinkPHP5.1.x远程代码执行漏洞 已经存在很久的漏洞了,能升级5.1.42 就升。
5.1.42 改进多语言判断机制看这里 :https://github.com/top-think/framework/releases/tag/v5.1.42
如果像我一样 牵扯兼容的话那只能上手。
上手第一步
thinkphp/library/think/Request.php 文件找到:
public function method($method = false)
{
if (true === $method) {
// 获取原始请求类型
return $this->server('REQUEST_METHOD') ?: 'GET';
} elseif (!$this->method) {
if (isset($_POST[Config::get('var_method')])) {
$this->method = strtoupper($_POST[Config::get('var_method')]);
$this->{$this->method}($_POST);
} elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
$this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
} else {
$this->method = $this->server('REQUEST_METHOD') ?: 'GET';
}
}
return $this->method;
}
替换为: (注意看原版的 第8 第9行)
public function method($method = false)
{
if (true === $method) {
// 获取原始请求类型
return $this->isCli() ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
} elseif (!$this->method) {
if (isset($_POST[$this->config->get('var_method')])) {
$method = strtoupper($_POST[Config::get('var_method')]);
if (in_array($method, ['GET', 'POST', 'DELETE', 'PUT', 'PATCH'])) {
$this->method = $method;
$this->{$this->method}($_POST);
} else {
$this->method = 'POST';
}
unset($_POST[Config::get('var_method')]);
} elseif (isset($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'])) {
$this->method = strtoupper($_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE']);
} else {
$this->method = $this->isCli() ? 'GET' : (isset($this->server['REQUEST_METHOD']) ? $this->server['REQUEST_METHOD'] : $_SERVER['REQUEST_METHOD']);
}
}
return $this->method;
}
//远程漏洞修复部分 结束
上手第二步:
5.1版本在 /thinkphp/library/think/route/dispatch/Url.php 文件,解析控制器 后面加上:
if ($controller && !preg_match('/^[A-Za-z](\w|\.)*$/',$controller)) {
throw new HttpException(404,'controller not exists:' . $controller);
}
参考来源:https://blog.thinkphp.cn/869075
后续 笔记 只涉及到查询 看内容,不发文章不执行的查询网站,可以把发现木马的目录。在宝塔中 所有者 www 权限设成555 只读+执行 不给写入(默认是755),以后管理的时候用宝塔不用ftp就行。因为宝塔属于最高的root 不受www所有者影响 可以随便写入。
这样即使是以后有新漏洞也不容易被利用。
小结
1. 清理木马 方法 源码可以下载到本地,用护卫神+D盾查杀,然后修改服务器对应文件,
2. 用面板 宝塔的 服务器安全扫描 插件,扫描是否有多余mysql用户 或者其它异常权限。
通常会在mysql 总数据库 user数据表中多出外部访问的用户,一般我们都是本地localhost 或者 127.0.0.1 一旦出现不属于这两的就特别观察。