由于之前在公司做了一个官网,当时用wordpress进行的二次开发。虽然之前也做过wordpress类的二次开发,不过也已经是很久以前的事情了,这种开源cms产品两天一小更三天一大更,很多东西不能慢慢的去了解,不过也可以快速开发,好在是比较傻瓜式的开发。近期发现之前windows的服务器性能不是很好,很不稳定,是因为他们自己买了个windows然后就作为服务器了,然后还经常停电,还得人手动重启,真是一群废柴!因此后来决定要迁移到阿里云上,我本来觉得这事儿so easy,但是我还是太年轻了,为了用公司统一的环境,竟然浪费了我那么多时间。
centos 7开始部署环境,正常的部署就是wget一个远程的包,解压之后进去运行一键话的部署脚本,然而这个也是,并没有什么不一样的,狗血的是之后PHP的7.2环境,因为wordpress4.9的版本用的是mysql_connect驱动进行数据库连接,bug PHP7.0以上废弃了这种方式的连接,改用mysqli方式的连接驱动,痛苦的事情来了,wordpress4.9并没有封装的mysqli连接的类,但PHP7.2又不能用mysql了,怎么办,总不至于我自己写个mysqli的类吧。最难过的永远都是最纠结的事情,就这样一直纠结着并解决着错误,但并不能找到php7.0以上的php-mysql扩展,然后决定还是用我之前的环境吧,我一直都在使用 oneinstack 部署服务器环境,这个很多人都在用,社区也比较活跃,环境也比较完善,而且经常更新,果然一次搞定。
当我最后把数据库密码修改之后,我看到了 A TimThumb error has occured 这个错误,费解,上网看了几篇文章才知道原来是我之前用了缓存,但是迁移到新服务器上之后没有权限,网上给出的答案是让重新把插件卸载了重装一次,但是这么久了,谁还记得当时安装的什么插件,所以直接给 wp-content 目录 777 权限就可以解决。
接着部署在服务器上的代码被阿里云检测出来了漏洞,具体信息是 “wordpress <= 4.9.6 任意文件删除漏洞” ,看了看网上的说法,大多是直接升级到 4.9.7 这个版本就可以了,但是升级还是比较麻烦的,不如直接修复他的漏洞,漏洞主要是post.php的上传漏洞,当普通用户在上传文件之后,点击进行编辑,这时候黑客获取到 _wpnonce 的值后模拟 post 向服务器发送请求,然后进入一个删除确认页面,点击删除按钮,即可删除,关键是没有对文件过滤,那么当我传入一个相对路径下的地址也是可以的,这样的话黑客就可以删除任意文件。
临时修复方法 :
1、文件/wp-admin/post.php中
将 $newmeta['thumb'] = $_POST['thumb'];
改为
$newmeta['thumb'] = basename($_POST['thumb']);
2、在/wp-include/post.php 中顶部添加 :
add_filter( 'wp_update_attachment_metadata', 'rips_unlink_tempfix' );
function rips_unlink_tempfix( $data ) {
if( isset($data['thumb']) ) {
$data['thumb'] = basename($data['thumb']);
}
return $data;
}
所提供的Hotfix所做的就是挂钩 wp_update_attachement_metadata()
调用并确保为元值提供的数据thumb
不包含任何可以进行路径遍历的部分。因此,不能删除任何安全相关文件。 到最后提交漏洞并且通过验证,这个方法可以修复漏洞,但如果你是还没有开发的话,那还是应该去官网下载最新的版本。