2018 年 12 月 9 日, 国内某安全组织, 对 Discuz! X3.2 X3.4 版本的漏洞进行了公开, 这次漏洞影响范围较大, 具体漏洞是 Discuz! 的用户前段 SQL 注入与请求伪造漏洞, 也俗称 ***F 漏洞, 漏洞产生的原因首先: PHP 环境的版本大约 PHP5.2,dizcuzX3.2 X3.4 版本, 服务器环境是 Windows 2008 2003 2012 系统, Linux CentOS 不受此漏洞的影响.
漏洞的详情与利用
该漏洞产生的原因是由于 source 目录下的 module 文件里的 misc 模块代码, 具体的是 misc_imgcropper.PHP 文件第 54 行到 56 行之间的函数变量赋值问题导致可以插入恶意非法参数, 导致可以进行变量, 我们跟进这个函数传递到了那里.
跟踪这个函数查到调用到了 class 目录下的 class_images.PHP, 代码如下图:
从上述代码中可以看出传递过来的 url 函数, 被正常解析到 curl 请求当中去, 通过这里的代码功能我们可以知道, 我们可以调用 cur 的请求, 去请求一些其他网站, curL:www.***.com. 那么我们可以伪造自己构造的 XSS 获取代码, 把代码放到自己的网站当中, 让访问者自动访问我们精心制作的地址即可. 但是利用这个请求伪造 *** 的漏洞需要一定的条件就是需要网址的跳转才能更好的利用.
在 Discuz! 漏洞的利用过程中我们发现有些 PHP 版本也存在问题, 必须是大约 PHP5.2 版本的, 有些 curl 网址的请求才能有效果. 我们提交的方式是 get 方式的数据提交, 使用 referer 进行判断跳转. Discuz! 官方对于来路的判断跳转进行了严格的过滤, 导致你能使用任何地址进行跳转, 我们来看下官方是如何写的代码. 如下图:
从代码里可以看到限制了只要是本地的网址 https://127.0.0.1/discuz 才能跳转, 我们测试了很多方式发现可以绕过 Discuz! 的限制, https://127.0.0.1#@www. 安全测试. com&quickforward=2 即可进行绕过, 我们本地来测试下该漏洞:
Discuz! 漏洞修复
关于 Discuz! 3.4 漏洞修复, 建议使用者尽快升级 Discuz! 到最新版本, 针对于 curl 的请求, PHP 版本降级于 5.2 版本一下, 或者是限制 curl 的功能使用. 对 Discuz! 上的漏洞进行修复, 或者是对网站安全防护参数进行重新设置, 使他符合当时的网站环境. 如果不懂如何修复 discuzx3.4 版本 discuzx3.0 版本以及 discuzx3.2 版本漏洞, 也可以找专业的网站安全公司来处理, 国内也就 Sinesafe 和绿盟, 启明星辰等安全公司比较专业.
来源: http://www.bubuko.com/infodetail-2879582.html