挂马网站测试

 人参与 | 时间:2026-10-17 07:31:13

上周三凌晨两点,挂马我盯着浏览器里一个赌博站点的网站源码,发现页面底部藏着一行``。测试零宽零高的挂马隐藏框架,典型的网站挂马手法。这个IP归属地是测试荷兰,但域名注册信息用了隐私保护。挂马我顺手查了同IP下其他站点,网站一共47个,测试全是挂马赌博、色情和假药页面——典型的网站黑帽SEO批量站群。

挂马网站测试,测试核心就一件事:把恶意代码塞进目标页面,挂马看它能不能跑起来、网站能不能躲过检测、测试能不能在真实浏览器环境里落地。听起来简单,实操里全是坑。我试过直接往一个WordPress测试站的主题文件里插``,结果刚保存就被服务器上的ModSecurity规则拦了。日志显示触发了`Remote File Inclusion`规则。换个思路,把JS代码base64编码后塞进`eval()`,还是被拦——ModSecurity对`eval`和`document.write`这类关键词有正则匹配。

真正好用的路子是混淆。用JJEncode或者AAEncode把代码转成一堆颜文字和日文假名,ModSecurity的规则库根本认不出来。我拿一个测试站试了,``这种鬼东西,WAF直接放行。浏览器解析后还原成`alert(1)`。这招对大部分基于规则匹配的WAF都有效,因为规则库更新速度跟不上混淆算法的迭代。

但躲过WAF只是第一步。真实用户访问时,浏览器还有CSP、XSS Auditor(虽然现在Chrome已经移除了)、SameSite Cookie这些机制。我搭了个本地环境,用Python的`http.server`起一个挂马页面,再用Selenium驱动Chrome访问。第一次测试,CSP头设了`script-src 'self'`,外链JS直接被毙。第二次去掉CSP,但Chrome的XSS保护把反射型攻击拦了。第三次换成DOM型XSS,通过`location.hash`注入,终于弹出了计算器。

挂马网站测试最麻烦的不是技术,是环境。你不可能拿生产站点试,但本地环境又跟真实网络差太远。我试过用Docker起一个包含Nginx、PHP、MySQL的完整靶场,结果发现Docker默认的DNS解析跟宿主机不一样,挂马域名解析失败。后来改用`--network host`模式才通。还有一次,测试用的恶意域名被运营商DNS污染了,本地解析到127.0.0.1,折腾半天才发现是DNS的问题。

另一个观察:挂马测试里,时间窗口比技术手段更重要。我监控过一批被挂马的站点,恶意代码平均存活时间只有6到12小时。安全厂商的爬虫扫描频率越来越高,一个页面被挂马后,快的话两三个小时就会被标记。所以攻击者现在流行“闪现”策略——只在特定时间段(比如凌晨)加载恶意代码,其他时间返回正常内容。测试这种模式,你得用`time-based`的payload,比如`if (new Date().getHours() === 3) { eval(...) }`,否则根本复现不了。

最后说个真实案例。上个月帮朋友排查一个WordPress站,首页被插了``,看起来像正常的CDN引用。但那个`jquery.min.js`文件大小只有2KB,正常jQuery压缩后至少80KB。下载下来一看,里面是`document.write('')`。这种伪装成常用库的挂马,WAF和人工审查都容易漏掉。测试的时候,别只看`