请选择 进入手机版 | 继续访问电脑版

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 4034|回复: 1

[转载] Discuz X3涂鸦板无法使用问题解决【转载】

[复制链接]

96

主题

6

回帖

108

积分

屌炸天

积分
108
发表于 2018-5-30 14:34:17 | 显示全部楼层 |阅读模式
原文地址:http://www.tsingfun.com/html/2016/debug_0612/1594.html


现象:


调查思路:
浏览器F12或右键查看Flash展示处的html源码:
[HTML] 纯文本查看 复制代码
<embed width="438" height="304" 
    src="static/image/common/doodle.swf?fid=a_magic_doodle&oid=comment_message&from=&config=http%3A%2F%2Fbbs.tsingfun.com%2Fhome.php%3Fmod%3Dmisc%26ac%3Dswfupload%26op%3Dconfig%26doodle%3D1"
    quality="high" wmode="transparent" allowscriptaccess="always" type="application/x-shockwave-flash">


config参数url解码后:http://www.tsingfun.com/?mod=misc&ac=swfupload&op=config&doodle=1


访问可以看到是一些配置项,包括上面按钮本应显示的文字。

由此可以初步判定,Flash没有正确加载url中的配置项。

将doodle.swf进行反编译,查看加载配置相关的代码,如下:

[Actionscript3] 纯文本查看 复制代码
internal function loadConfig():void
            {
                var loc1:*=new RegExp("^(https?|ftp|gopher|news|telnet|mms|rtsp):\/\/", "i");
                if (this.configURL.match(loc1) === null && this.configURL.indexOf("://") == -1)
                {
                    this.xmlRequest = new flash.net.URLRequest(this.configURL);
                    this.xmlLoader = new flash.net.URLLoader(this.xmlRequest);
                    this.xmlLoader.addEventListener(flash.events.Event.COMPLETE, parseConfig);
                }
                return;
            }


上面这个if逻辑是:url不以http开头且不包含“://”字符串才能解析,但是外面config传值又是以“http://”开头的,这里不得不吐槽一下Discuz团队,是否是两个小组的人员没有商量好接口,还是判断逻辑有误呢?

由于修改Flash代价稍高,因此笔者决定修改config传值,去掉前面的“http://”:
修改sourceclassmagicmagic_doodle.php
$config = urlencode(getsiteurl().'home.php?mod=misc&ac=swfupload&op=config&doodle=1');
改为:
$config = urlencode('/home.php?mod=misc&ac=swfupload&op=config&doodle=1');

现在运行,如图:

不过,此时保存按钮功能还是有些问题,下次再细调了。




今天继续研究点击“保存”按钮没有任何反应的问题。

分析思路:
没错,继续反汇编doodle.swf调试as源代码,别无他法了。这里搞个便民反编译源文件供大家参考
doodle反编译源文件.zip。
我们跟踪数据post后的响应数据:

[Actionscript3] 纯文本查看 复制代码
internal function makeComplete(arg1:flash.events.Event):void
            {
                            trace("makeComplete");
                var event:flash.events.Event;
                var result:XML;
                var msg:String;
                var loader:flash.net.URLLoader;
                var request:flash.net.URLRequest;
                var variables:flash.net.URLVariables;

                var loc1:*;
                result = null;
                msg = null;
                loader = null;
                request = null;
                variables = null;
                event = arg1;
                try
                {
                                    trace(event.currentTarget.data);
    ......


结果是一个html文件,效果如下:


继续查找错误原因,发现是由于post数据中没有带hash值,_xss_check()失败导致。
这里,再次吐槽Discuz团队,你们做了充分测试了吗?
还是之前那句话,修改Flash源码代价蛮高,笔者不想弄。
临时去掉xss检验解决问题。
home.php 顶部加上一个定义就ok了,代码如下:
[PHP] 纯文本查看 复制代码
if ($_GET['mod'] == 'misc' && $_GET['ac'] == 'swfupload' && $_GET['op'] == 'doodle') {
       define('DISABLEXSSCHECK', '1');
}

解决后截图如下:





本帖子中包含更多资源

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

×

0

主题

2

回帖

0

积分

禁止发言

积分
0
发表于 2022-4-12 12:06:32 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc. ( 粤ICP备15088888号-2 )

GMT+8, 2024-3-29 06:04 , Processed in 0.110169 second(s), 10 queries , File On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表