魔趣吧www.moqu8.com的优势!
魔趣吧站长

[discuz建站技术] discuz论坛CVE-2018-10297/CVE-2018-10298 漏洞修复方案

[复制链接]
查看: 180|回复: 0
发表于 2019-1-2 11:20:55 | 显示全部楼层 |阅读模式

立即注册登陆魔趣吧,免费下载价值数十万RMB的海量模板、源码、建站资源!!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
discuz论坛CVE-2018-10297/CVE-2018-10298 漏洞修复方案
我在测试修复的时候发现Discuz! X的门户编辑器和论坛编辑器体制不一样,系统会直接提交html代码上去,所以无法通过简单的转义方式进行XSS的修复(POC提到通过转义修复,实际上不行,如果那么修复了那门户页面上都是html代码......)
该漏洞触发点有两个,一个是在dz开启门户功能的前提下,可通过发布文章实现一个存储型xss(在生成过程中也包含反射型型xss的生成…),在只开启论坛功能的情况下,可触发反射型型xss。已测试影响版本,discuz X2.5和discuz X3.4。(据此合理猜测影响全版本2333)) }9 P  E" |4 F0 |, _2 K2 I(ww w.m oq u8.c om)
由于对于反射型 xss生成原理不了解,因此在本文中只给出反射型 xss的利用方法,具体漏洞触发逻辑不做分析。(有兴趣的大佬可自行分析)仅对门户功能导致的存储型xss进行分析。
* e1 s% n0 L# s- }4 |8 b- x; P# Z. R
该漏洞的生成点在于dz(discuz X在下文中简称为dz,我懒23333)自带的编辑器。该编辑器在门户发布文章或者修改文章,论坛回复帖子或发布帖子中均有使用。从而导致该漏洞影响范围广。
discuz论坛CVE-2018-10297/CVE-2018-10298 漏洞修复方案
直接看编辑器部分。在编辑器中存在一个插入图片功能。该功能包含两个部分,一个是本地图片的上传,另一个是远程图片文件的插入。问题就出在远程图片插入这个部分。在该文本框中未对输入的内容进行过滤,导致双引号的传入,从而引发反射型 xss。
discuz论坛CVE-2018-10297/CVE-2018-10298 漏洞修复方案
插入图片中的payload,点击提交会发现成功弹框
discuz论坛CVE-2018-10297/CVE-2018-10298 漏洞修复方案
在火狐中查看元素可以看到,以下代码:
discuz论坛CVE-2018-10297/CVE-2018-10298 漏洞修复方案
会发现我们插入的payload被页面成功解析为img标签的事件。
以上步骤在dz的门户功能和论坛功能中均可实现。在论坛中发帖即可看到相同的编辑器。同样在插入图片处输入payload即可复现。
( j1 F1 w5 h1 a' X(w w w.m oq u8.c om)
考虑到存储型XSS漏洞安全隐患还是较大,我本来考虑通过过滤的形式进行修复,但是考虑到门户还是支持直接输入html的,这样修复会影响发布部分含有特殊代码的html。
在此我也抛砖引玉,给出过滤方式的修复方案。当然也希望各位大佬给出更好的,适合提交到主线的修复方案。
source\function\function_home.php
  1. function getstr($string, $length = 0, $in_slashes=0, $out_slashes=0, $bbcode=0, $html=0) {
  2.         global $_G;
  3.         $string = trim($string);
  4.         $sppos = strpos($string, chr(0).chr(0).chr(0));
  5.         if($sppos !== false) {
  6.                 $string = substr($string, 0, $sppos);
  7.         }
  8.         if($in_slashes) {
  9.                 $string = dstripslashes($string);
  10.         }
  11.         $string = preg_replace("/\[hide=?\d*\](.*?)\[\/hide\]/is", '', $string);
  12.         if($html < 0) {
  13.                 $string = preg_replace("/(\<[^\<]*\>|\r|\n|\s|\[.+?\])/is", ' ', $string);
  14.                 $string = getstr_remove_xss($string);//添加的代码,调用以下函数
  15.         } elseif ($html == 0) {
  16.                 $string = dhtmlspecialchars($string);
  17.         }
  18.         if($length) {
  19.                 $string = cutstr($string, $length);
  20.         }
  21.         if($bbcode) {
  22.                 require_once DISCUZ_ROOT.'./source/class/class_bbcode.php';
  23.                 $bb = & bbcode::instance();
  24.                 $string = $bb->bbcode2html($string, $bbcode);
  25.         }
  26.         if($out_slashes) {
  27.                 $string = daddslashes($string);
  28.         }
  29.         return trim($string);
  30. }
  31. function getstr_remove_xss($string) {//添加的过滤函数,过滤了html标签的onxx属性
  32.     $parm = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
  33.     for ($i = 0; $i < sizeof($parm); $i++) {
  34.         $pattern = '/';
  35.         for ($j = 0; $j < strlen($parm[$i]); $j++) {
  36.             if ($j > 0) {
  37.                 $pattern .= '(';
  38.                 $pattern .= '(&#[x|X]0([9][a][b]);?)?';
  39.                 $pattern .= '|(�([9][10][13]);?)?';
  40.                 $pattern .= ')?';
  41.             }
  42.             $pattern .= $parm[$i][$j];
  43.         }
  44.         $pattern .= '/i';
  45.         $string = preg_replace($pattern, ' ', $string);
  46.     }
  47.     return $string;
  48. }
复制代码

: N% {! ?: V/ d7 I8 [; s

魔趣吧版权声明1,本文内容及相关资源来源于网络,版权归版权方所有!本站原创内容版权归本站所有,请勿转载!
2,本文内容仅代表作者本人观点,不代表本网站立场,作者文责自负,本站资源仅供学习研究,请勿非法使用,否则后果自负!请下载后24小时内删除!
3,本文内容,包括但不限于源码、文字、图片等,仅供参考使用,本站不对其安全性,正确性等作出保证。但本站会尽量审核会员发表的内容
4,如您认为本文内容侵犯了您的权益,请与我们联系!我们将在5个工作日内做出处理!本站保留全部修改、解释、更新本声明的权利魔趣吧

魔趣吧,全网领先的建站资源下载基地!Discuz模板、Discuz插件、素材、特效,源码,建站,就上魔趣吧!! 【通告】近期发现部分竞争网站和小人诋毁抹黑魔趣吧,对此,我们只有一句话,事实胜于雄辩!!用心为站长服务,魔趣吧不怕任何邪门歪道!【魔趣吧唯一官方网站https://www.moqu8.com,请谨防假冒网站!】
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

魔趣吧在线客服
关闭
欢迎来到魔趣吧
如果你有建站技术问题、仿站需求、模板插件修改需求,请联系我们的技术支持!高效率,低价格的帮你搞定!
请认准魔趣吧唯一官网:www.moqu8.com,谨防假冒网站!
建站技术支持(收费)
资源互换/合作
魔趣吧在线客服
普惠站长,魔趣吧VIP限时大降价!X

普惠站长,魔趣吧VIP限时大降价!

一直以来,部分垃圾站长搭建的各种资源站,用各种恶心的手段和可怜的一点资源不断的敲诈新站长...

立即抢福利!
快速回复 返回列表
魔趣吧

关于魔趣吧|魔趣建站

魔趣吧,志在打造全国最大的建站资源共享平台。 本站提供海量免费的建站资源,包括WordPress模板、Discuz精仿模板、PHPWind模板、phpcms模板、Discuz精仿插件、帝国cms模板、织梦模板等上万精品模板!同时,提供各种建站素材、JS特效、整站程序源码!
服务中文站长,传播分享精神!建站,就来魔趣吧!!
2015-2019  技术支持:魔趣吧 ( 豫ICP备15026783号-4 )  
HTTPS安全认证
|网站地图 安全运行天