我的博客网站被克隆了!但是我只用了14行代码完成反击

2026 年 7 月 25 日,周六,早上 9:30。 我像往常一样打开搜索引擎,输入 lcrworld.xyz 自搜一下——看看收录有没有变化、排名涨了没。这是站长的日常,一种 职业病 好习惯😊。 结果这一搜,搜出事了。 搜索结果里除了我的 lcrworld.xyz,还赫然躺着一个 arvcbv.com。标题一样、描述一样、点进去一看——页面也一模一样。我新发的文章,他那边同步更新了。我换了个头图,他那边也跟着换了。 当时我的表情大概是这样的:◐⩊◑ 一、恐慌:9:30 — 10:00 第一反应:服务器被黑了。 冷静分析一下,如果对方只是扒站(wget 下载前端页面),那文章内容应该是静态的、有延迟的。但 arvcbv.com 上的文章是实时的,我刚发的他就有。这意味着两种可能: 他入侵了我的服务器,直接读了我的数据库。 他在做某种实时代理。 不管是哪种,都得先确认服务器有没有被入侵。于是开始了全面取证。 先看 SSH 登录日志。这一看,血压直接上来了: $ grep 'Failed password' /var/log/auth.log | wc -l 2847 $ grep 'Failed password' /var/log/auth.log | awk '{for(i=1;i<=NF;i++) if($i=="from") print $(i+1)}' | sort | uniq -c | sort -rn | head -5 596 91.92.40.50 # 保加利亚 503 27.71.230.31 # 越南 377 8.219.137.42 # 阿里云新加坡 146 1.255.171.167 # 韩国 96 39.97.229.27 # 阿里云杭州 来自 20 多个 IP 的 2800+ 次暴力破解,日夜不停地轰炸我的 22 端口。保加利亚的这位大哥尤其执着,596 次,平均一天 20 多次,比我打卡还规律。 然后检查了一下服务器的防护配置: fail2ban?没装。 UFW 防火墙?没开。 root 密码登录?开着。 SSH 默认端口?22。 好家伙,这配置简直就是在门口挂了个牌子写着"欢迎光临,门没锁,钥匙在垫子下面"。2800 多次爆破没有一次被自动拦截,全靠密码本身扛着。(这段是AI骂我的时候写的wwww) 但密码能扛多久?迟早有一天被人撞开。想到这里后背一阵发凉。 但是——成功入侵了吗? 查完所有成功登录记录,松了一口气: 检查项 结果 成功登录 IP全部中国境内,和我的活动范围一致 后门 / 恶意进程没有 异常 crontab没有 SUID 提权文件全是系统默认的 LD_PRELOAD 注入没有 .bash_history干干净净,就几条正常命令 系统文件被篡改查了 apt 历史,是 Ubuntu 自动安全更新 服务器没有被入侵。 好,排除了一种可能。但困惑反而更深了—— 没入侵我的服务器,他是如何通过别的方式克隆我整个网站的? 我的源代码没泄露过,Git 仓库是私有的,数据库密码也没给任何人。一个完整的网站克隆——前端页面 + 后端 API + 实时数据同步——这总不能是简单的扒站工具干的吧? 带着这个疑问,开始对比两个网站的技术细节。 二、真相:10:00 — 10:30 真相大白的过程,比我想象的快得多,也简单得多。简单到让人想笑。 第一步:对比前端文件 arvcbv.com: assets/index-1K0S1bxy.js lcrworld.xyz: assets/index-1K0S1bxy.js Bundle hash 一模一样。 arvcbv.com 上这个文件的 last-modified 是 7 月 23 日——两天前。那天,对方只是跑了一行命令: wget -r -k -p https://lcrworld.xyz/ 把我的网站所有公开文件下载到了他的服务器上。HTML、JS、CSS、字体——这些东西本来就对全网公开,浏览器要渲染页面就必须能下载。任何人打开开发者工具的 Network 面板,都能把这些文件一个个保存下来。 他不需要我的源代码。编译后的产物就是公开的。SPA 网站编译后的前端代码本身就是完全公开的,和源代码等价(尤其是对有耐心的人来说)。 第二步:对比 API 响应头 前端文件能下载,但文章数据呢?arvcbv.com 上显示的是我数据库里的实时文章,这是怎么做到的? 对比两个网站的 API 响应头: # arvcbv.com 的 API 响应头 Server: cloudflare ETag: W/"3660-..." ← Cloudflare 生成的 # lcrworld.xyz 的 API 响应头 Server: nginx
(以上为文章预览,完整内容请访问本页面)