文章总结: 本文详述服务器被黑产植入搜索劫持挂马的完整处置过程:攻击者通过root权限篡改nginx配置实现隐蔽流量劫持,作者通过ctime取证、反扫定位1090台同团伙机器并批量举报。核心教训是杜绝凭据明文存储、关闭公网高危端口、启用双重验证及定期审计,建议立即执行12项加固措施并考虑重装系统以彻底清除潜在rootkit风险。 综合评分: 92 文章分类: 应急响应,实战经验,漏洞分析,安全建设,WEB安全
服务器沦陷三个月:取证、处置、反制,我揪出了1090台黑产机器
原创
野生码农 野生码农
野生码农 AI 实战
2026年8月23日 04:24 浙江
在小说阅读器读本章
去阅读
服务器沦陷三个月:取证、处置、反制,我揪出了1090台黑产机器
8 月 16 日,我发现自己的服务器被博彩黑产挂马,root 沦陷了近三个月而我毫不知情。8 月 22 日,我用一个 404 指纹在 fofa 上揪出了这个团伙的 1090 台机器。这两篇发出去之后,流量不错,也收到一条扎心的留言:这该不会是 AI 编的故事吧。
这篇不讲故事,上完整处置报告。时间戳、命令、证据链全部摆出来,同行可以当处置参考,被挂马的站长可以照着做。每个数字都有出处,欢迎挑错。
先交代身份:我是野生码农,39 岁,白天在高速公路项目部干征迁,晚上折腾自己的服务器和 AI 系统。服务器是我的玩具,也是我的实验田,这次被黑产犁了一遍。
一、事件概述(30 秒看懂)
我的服务器(154.217..,Debian 11,宝塔面板 9.0.0,跑 www.w***.cn 等 3 个站点)被植入搜索劫持挂马。攻击者持有 root 近三个月,篡改宝塔 nginx 全局配置,对全站所有 PHP 页面做流量劫持:手机端、从百度搜狗 360 搜过来的访客,会被静默跳转到博彩站。PC 端和直接访问一切正常,所以我三个月没发现。
8 月 16 日当天我完成清除和加固,之后两天反制:反扫攻击方 11 个 IP,提炼指纹上 fofa 全网狩猎,揪出 1090 个同团伙节点,向注册商和机房发出 5 封滥用举报。
二、发现与应急确认
起因是一个静态页面被报有异常跳转。我自查时 PC 浏览器怎么看都正常,这是搜索劫持挂马的典型特征:它只对”手机端 + 搜索引擎来源”的访客发作,站长自己浏览永远看不到。
确认方法:用手机 UA 加一个百度搜索的 referrer 头去请求自己的站,响应体里多出了一段不属于我的 script。确认中招,当晚启动应急响应,先做取证备份,再动手清理。顺序不能反,先清就什么证据都没了。
三、恶意代码链分析
注入点不在网页文件里,在 nginx 配置层。/www/server/nginx/conf/ 下全部 16 个 enable-php-*.conf(每个 PHP 版本一个)头部被插入了恶意 sub_filter 指令:
sub_filter '</script>' '</script><script>eval(atob("..."))</script>'; sub_filter_once off;
效果:nginx 在吐出每一个页面时,往每个 </script> 后面追加一段混淆 JS。被注入的静态文件本身一个字节没动,注入发生在响应处理层,所以查网页文件查不到任何东西。
这段 JS 分三段干活:
- base64 解码后先判断环境,
maxTouchPoints>=5且不是 Win/Mac/Linux 桌面平台,也就是只在真手机上继续; - 从
cdn.511a.co/lib/jquery/3.7.1/jquery.min.js拉第二阶段,路径伪装成 jQuery 官方库,内容是恶意代码,eval 执行; - 第二阶段再筛一遍:手机端、中国时区、搜索引擎来源(百度/搜狗/360),三条全中,100% 跳转
https://pucdpqit.top:7878/ypshbz.html,博彩引流。同时调api.511a.co/blacklist.php做黑名单检查,被标记的 IP 不跳,研究者很难抓到现场。
隐蔽性做到这个程度还不够,攻击者改完配置还用 touch -t 把 16 个文件的修改时间伪装回旧值。他漏了一点:mtime 能改,ctime(inode 变更时间)改不了。后面取证就是靠 ctime 定的案。
四、入侵时间线取证
取证素材:/etc/shadow、/etc/passwd、wtmp、lastlog、auth.log、nginx worker 进程启动时间。还原出来的时间线(UTC):
| 时间 | 事件 | 证据 |
| — | — | — |
| 2026-05-22 12:38 | 攻击者已持 root,创建 UID 0 后门账号 linuxsafe | shadow、group、subuid 等文件 ctime |
| 2026-05-25/26 | 从 103.68.175.58 以 root 密码 SSH 登录,并切用 linuxsafe | wtmp、lastlog:两个账号最后登录同一 IP、同一秒 |
| 2026-06-06 04:16 | 把 linuxsafe 的密码哈希直接写进 /etc/passwd,强化后门 | /etc/passwd mtime |
| 2026-06-17 03:24 | 服务器重启 | wtmp |
| 2026-08-14 13:48-13:52 | 从 154.89.151.143 以 root 密码 SSH 登录 4 次 | auth.log Accepted 记录 |
| 2026-08-15 06:25:02 | 批量篡改 16 个 enable-php 配置植入 sub_filter,伪装 mtime,reload nginx | 文件 ctime、nginx worker 启动时间 |
| 2026-08-16 | 我发现异常,启动应急响应 | |
两个细节给同行:其一,linuxsafe 这种名字起得就像系统自带账号,肉眼过 /etc/passwd 容易滑过去,正确的查法是 awk -F: '$3==0' /etc/passwd,正常情况下只该返回 root 一行,多出任何一个 UID 0 账号都是后门。其二,配置文件 ctime 新于 mtime,是 touch -t 反取证的特征,正常编辑不会这样。
五、入侵途径推断:最可能是我自己的凭据漏了
先说确认的事实。SSH 22 端口对公网开放、允许 root 密码登录、没装 fail2ban,lastb 里满是全球 IP 的持续爆破记录,这是 7×24 小时的背景噪声。root 密码已被攻击者掌握,5 月和 8 月两个独立来源 IP 都是密码登录成功。另外 MySQL 存在 root@'%',任意来源可连,弱密码,3306 此前对公网开放;宝塔面板 9.0.0 版本陈旧,也暴露在公网。
途径按可能性排三条:
- 凭据泄露,最可能。我的 root 密码强度不低,纯爆破命中的概率极低。但我的服务器凭据曾经明文存在云端笔记里,常用弱密码还在多个平台复用。撞库或泄露库命中之后,攻击者拿着密码直接登录,根本不需要漏洞。
- MySQL
root@'%'弱密码被公网直连爆破,得手后读全库、尝试提权。 - 宝塔老旧版本公网暴露,不排除历史面板漏洞被打穿,面板本身以 root 运行。
5 月首次得手的具体通道,因为 auth 日志已经轮转,无法最终定论,我不编。
第二条我要展开说一句,因为教训是我的。凭据明文存云端笔记,等于把钥匙存在别人家里。这次只改服务器密码是不够的,那叫换锁不换贼:云端笔记账号改密、删掉里面的密码、开二次验证、本地明文文件清除、换密码管理器之后,再把全部凭据重新轮换一遍,这个链条少一环都白干。
六、处置清单(12 条,全部执行完毕)
| # | 措施 |
| — | — |
| 1 | 清除 16 个 enable-php-*.conf 里的恶意 sub_filter,nginx -t 通过后 reload |
| 2 | 本机加外网双重验证,全站响应已无注入 |
| 3 | 删除 UID 0 后门账号 linuxsafe(passwd/shadow/group/gshadow 加 home 目录) |
| 4 | 修改 root 密码,旧密码作废 |
| 5 | ufw 删除 3306 的外网放行规则,本地业务不受影响 |
| 6 | 安装启用 fail2ban,sshd jail 生效,当天已自动封禁多个爆破 IP |
| 7 | MySQL root 换成强随机密码,宝塔存储和各应用配置同步更新 |
| 8 | 业务数据库账号换密码,原配置里居然有 root/root 弱口令 |
| 9 | node 应用重启,恢复监听 127.0.0.1:3000 |
| 10 | 宝塔面板换强随机密码,升级到 9.0.0-lts |
| 11 | 取证备份留存 |
| 12 | 应用数据库连接从公网 IP 改为 127.0.0.1,业务验证正常 |
处置完我还不放心,又做了一轮审计:后台管理员账号只有 2 个既有账号,没有攻击者新增的;全站近 90 天没有新增可疑 PHP 文件,webshell 特征扫描无命中;数据库没有明显拖库痕迹。但攻击者持 root 近三个月,所有数据都只能视为可能已经泄露。残留风险我也认:进程、内核模块、常见持久化位置都查过,没见异常,但没法 100% 排除更深的 rootkit,最稳妥的方案仍然是重装系统迁移数据,这事排在日程上。
七、反制:从 11 个 IP 反扫,到 fofa 揪出 1090 台机器
清理完是我的止损线,不是终点。手里有画像报告整理的 11 个攻击方 IP,8 月 17 日晚 21:29 到 22:24,我用 rustscan 2.4.1 做全端口发现、nmap 7.99 带 -Pn -sV 做服务识别,把这 11 个 IP 全部反扫了一遍。8 个活跃,3 个无开放端口。三个增量发现:
发现一,跳板是孪生机。 103.68.175.58 和 .59 是同一机房相邻地址,端口布局一模一样(nginx、rsync、Elasticsearch、Kibana 全套),标准化镜像主备部署。.58 是 5 月入侵我的跳板,.59 就是 C2(cdn.511a.co / api.511a.co 都解析到它)。跳板和 C2 同段,同一控制者,实锤。
发现二,他们自己也不设防。 活跃跳板 154.89.151.143 的 3306 端口上,MySQL 5.7.44-log 直接对公网暴露,8088 还跑着一个 Python SimpleHTTPServer,临时文件服务,手工操作痕迹。用同样的姿势打别人的人,自己的门也敞着。
发现三,也是最有价值的:跳转层和落地层的 21002/21003 端口上,跑着一个同版本 Golang 自研 HTTP 服务。 任何路径都返回逐字节相同的 24 字节响应:{"message":"Not Found"}。自研服务加固定响应,这就是指纹。捷克段的备用落地节点更有意思:80/443 回 429 限流,有反扫描意识;22 端口是个伪装 SSH,连上只回一句 “Not allowed at this time”;179 端口(BGP 用)的特征指向防弹主机商。
8 月 18 日,我拿这个指纹上 fofa 做全网 hunting:
body="{\"message\":\"Not Found\"}" && header="Vary: Origin" && (port="21002" || port="21003")
原始返回 1252 条,去重后 1090 个独立 IP,全部不在我已知的 IOC 表里。这个团伙的基础设施,比我原来认知的大约两个数量级。然后 curl 逐个 GET 根路径,校验是不是那 24 字节固定响应,64 并发跑完,112 个确认存活。超时的大多是机房对扫描出口做了过滤,不代表下线。
凭什么说这 1090 个是同一团伙,三条证据链:
- 软件指纹一致,同版本 Golang 服务,404 响应逐字节相同;
- 域名命名算法一致,140 个绑定域名几乎全是随机 10 字母的 .top(ajiplvkjgc.top 这种),和已知的 pucdpqit.top、uasxjts.top 同一个模子;
- 采购渠道一致,CNSERVERS 493 台、OWGELS 296 台、CTG Server 202 台,三家合计约 91%,都是面向中文用户的廉价海外 VPS。
部署模式更说明问题:162.209.181.0/24 一个 C 段里 25 个节点,104.255.229.0/24 有 20 个,23.224.250.0/24 有 10 个,按整段批量开机的标准化集群。地域分布 US 659、CN 419,CN 段是商家的 CN2 回国线路。
整条链路长这样,已实测打通全链:
被挂马站点 └─[控制层] cdn.511a.co / api.511a.co → 103.68.175.59(香港 Dimension Network) └─[跳转层] pucdpqit.top:7878 → 178.107.234.44(洛杉矶 CNSERVERS) └─[落地层] www.uasxjts.top:2549 → CNAME ts.domenecentosl.xyz → 202.79.175.57(香港 CTG Server) 最终博彩站 ssa17.com;备用链路走捷克 Gransy 防弹段 └─[客服层] kee96.com → 52kf.bqtz301.com(共享客服 SaaS)
控制、跳转、落地、客服四级分离,域名高频轮换,落地层域名全是动手前十天内新注册的(uasxjts.top 8 月 1 日注册,domenecentosl.xyz 8 月 5 日注册)。urlscan 上能关联到 2400 多次扫描记录,假冒 bet365 中文站、假冒 7-Zip 中文站、盗版影视站都有,运营至少两年半。这是一家有产品、有官网、有客服的正规化黑产公司,入侵你的站不是目的,你的搜索流量才是它的商品。
八、滥用举报:5 封邮件,全部发出
8 月 16 日,我依据上面的证据链向各责任方发了 5 封滥用举报邮件:
| # | 收件方 | 举报对象 | 诉求 | | — | — | — | — | | 1 | [email protected] | 域名 pucdpqit.top、uasxjts.top | 封停域名 | | 2 | [email protected] | 域名 domenecentosl.xyz | 封停域名 | | 3 | [email protected] | 域名 511a.co(C2) | 封停域名 | | 4 | [email protected](Dimension Network,香港) | IP 103.68.175.58/59 | 调查并关停 | | 5 | [email protected](CTG Server,香港) | IP 202.79.175.57 | 调查并关停 |
每封都附了时间线证据和可复验的链路口径,NameSilo 已升级施压,其余待回执。154.89.151.143 所在网段没有注册 abuse 联系人,178.107.234.44 那家没有公开 abuse 邮箱,这两个暂时搁置。
一句实话:单 IP 举报没意义,封号速度赶不上他们开机的速度。有效打法是按机房批量投诉,CNSERVERS、OWGELS、CTG Server 三家覆盖约 91%,112 个存活节点的格式化证据(IP、端口、指纹、机房、验证时间)我已整理成 CSV,随举报附送。防弹段(AS60592)跳过,举报过去也是石沉大海。
九、经验教训(给同行的清单)
- 凭据永远不要明文存云端笔记、桌面文本、浏览器,密码管理器是底线。这条是我用三个月沦陷换来的。
- 弱密码复用等于一处泄露处处沦陷,基础设施凭据必须独立强随机。
- 数据库端口绝不对公网开放,更不该有
root@'%'。 - SSH 禁 root 密码直连,fail2ban 必装,爆破是永不停歇的背景噪声。
- “PC 正常、手机跳转、搜索引擎来源才触发”是搜索劫持的典型特征。自查自己的站,模拟移动端加搜索引擎 referrer,肉眼浏览没用。
- nginx 配置目录里搜 sub_filter,正常配置不该有这个词;/etc/passwd 里 UID 0 只该有 root;配置文件 ctime 新于 mtime 要警觉。这三条命令级自查,十分钟跑完。
- 宝塔面板保持更新,面板端口限制来源 IP,最好加白名单加 BasicAuth 双保险。
- 发现中招先取证备份再清理,最稳妥的收尾是重装系统。
十、FAQ
问:我怀疑自己的站也中了同款,怎么最快确认?
模拟手机 UA 加百度 referrer 访问自己的站,看响应里有没有陌生 script;再 ssh 上去做三件事:nginx 配置目录搜 sub_filter、awk -F: '$3==0' /etc/passwd 查多余 UID 0 账号、看关键配置 ctime 是不是新于 mtime。全阴性好说,中任何一条,按第六节清单走。
问:发现中招,第一步做什么?
不是改密码,是取证备份,把 shadow、passwd、日志、被篡改的配置原样留一份。然后想清楚凭据从哪漏的再改密码,不然换锁不换贼。持 root 时间长的,别纠结,重装。
问:fofa 指纹狩猎普通人能复现吗?
思路可以照抄:拿恶意服务的固定响应体加端口号组指纹,body 加 header 加 port 三个条件一起卡,再用 curl 逐 IP 校验响应体去噪。实话说门槛在 fofa 的 F 点,我自己跑到一半 F 点都不够。指纹怎么选、结果怎么交叉验证,评论区聊,我知道的都会说。
结尾
被挂马这件事我不光彩,凭据明文存云端这种事,说出来都臊得慌。但这份报告里的每个时间戳、每个 IP、每个数字,我都敢负责。
也有人问过我:一个白天在工地跟村民磨嘴皮子的,怎么把应急响应干得这么专业?老实说,这次取证、反扫、fofa hunting、5 封举报信,全是我的 AI 出的手,我负责拍板和点确认。它背后是我攒的一套黑客 AI 系统,797 个网络安全技能配置。关注+点赞+评论区留言,三者合计过 100,下一篇我公开这套黑客 AI 的配置架构。
野生码农,AI 实战派。自研 AI 本地知识库系统、AI 数字员工团队、软考 AI 备考系统、量化交易系统,全程公开复盘。这是服务器入侵实录第 3 篇,前两篇是沦陷现场和 fofa 狩猎,都在主页。关注我,看真的。
野生码农 · 全网同名 · AI 数字员工实战复盘,数据只报实测
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:野生码农 AI 实战 野生码农 野生码农《服务器沦陷三个月:取证、处置、反制,我揪出了1090台黑产机器》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论