近期披露的CSRF漏洞(跨站请求伪造)波及了PHPWIND和Discuz!两大主流论坛系统,影响的版本范围跨度较大,攻击思路尤为精巧,值得深入剖析。
影响版本
Discuz! 6.0.0、6.1.0、7.0.0
PHPWIND 6.0、6.3、7.0
漏洞描述
PHPWIND与Discuz!均存在CSRF漏洞,且可被利用引发CSRF蠕虫大规模传播。问题的核心在于后台通知机制——Discuz!后台设有“通知”功能,用于向站长推送补丁信息。该功能通过论坛后台的script标签加载了一个远程文件:https://custom.discuz.net/news.php。攻击者利用Discuz.net域名服务商的漏洞,成功劫持了custom.discuz.net域名,并将其解析到伪造的恶意站点上。
在伪造站点中,攻击者预先放置了恶意payload,核心文件为news.php。分析news.php可发现,其内部又嵌入了两个JavaScript文件:dz.js和dz.stats.js。dz.js通过Ajax模拟站长提交修改SEO设置的操作;dz.stats.js则使用iframe加载了dz_stats.php,用于记录受害论坛的地址。只要站长登录后台,这些恶意脚本便会自动触发。
攻击者篡改后的SEO设置中嵌入了一段恶意JS代码:。由于论坛前台页面会直接调用SEO设置内容,因此这段JS会在前台页面上被成功执行,造成跨站脚本攻击(XSS)效果。
测试方法
以下是在本地环境中复现该漏洞的详细步骤:操作系统为CentOS 5.1,搭配Apache 2.2、PHP 5.2、MySQL 5.0,以及Discuz! 6.0版本。
首先,伪造custom.discuz.net域名。在Apache中配置两个虚拟主机:
NameVirtualHost 192.168.25.100:80
ServerName custom.discuz.net
DocumentRoot /usr/local/apache/htdocs/worm
ServerName www.test.com
DocumentRoot /usr/local/apache/htdocs/discuz/upload
其中,/usr/local/apache/htdocs/discuz/upload为Discuz!程序目录,/usr/local/apache/htdocs/worm为攻击载荷存放目录。在本地hosts文件中,将custom.discuz.net和www.test.com均指向192.168.25.100。
访问www.test.com并登录后台,即可触发攻击,SEO设置随即被篡改。

该漏洞的利用条件虽有一定门槛(需要劫持域名),但攻击思路非常巧妙,其杀伤力与影响范围均不容小觑。在此向安全研究员ring致敬。
安全建议
对于Discuz!,可直接删除templates/default/header.htm中的$seohead变量,即可有效阻断此类注入攻击。对于PHPWIND,目前官方尚未发布补丁,建议持续关注官方更新动态。
本站提供的测试程序(方法)可能带有攻击性,仅供安全研究与教学使用,风险自负。测试代码可参考:https://hk.chinakernel.org/worm.tar.gz
