当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2012-04482

漏洞标题:分享曾经破解的一个web应用Flex小插件

相关厂商:盘特

漏洞作者: shine

提交时间:2012-02-13 22:04

修复时间:2012-02-13 22:04

公开时间:2012-02-13 22:04

漏洞类型:破解

危害等级:低

自评Rank:5

漏洞状态:未联系到厂商或者厂商积极忽略

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-02-13: 积极联系厂商并且等待厂商认领中,细节不对外公开
2012-02-13: 厂商已经主动忽略漏洞,细节向公众公开

简要描述:


今天在乌云微薄上看到这样一句话:“自由共享曾是这个行业最伟大的精神 现在封闭狭隘已经成为这个行业的最普遍的陋习”
突然想到了自由软件精神(虽然这方面的理论知识我还未去查看过!),同时也想到了自己一年前破解的一个小插件。开始急需这个Flex插件,破解后,由于种种原因又不需要了。今天找了很久才把它翻出来,给大家分享一下,或许有人用得着,免得浪费了!

详细说明:

PanTe Painter在线图像编辑器(官网:www.21441.com), 是一款不错的增进用户交互体验的编辑器工具插件。
当时,向官方咨询收费情况:
1、一个域名授权 RMB 3K
2、提供源代码 RMB 8K
太贵了!用不起啊!只能这样做了!

漏洞证明:

所以尝试去破解它,由于破解方面是我的盲区,更不懂ActionScript语法(幸好跟
Java差不多),没有方向,所以开始弄起来比较吃力。
后来发现,这个软件的授权是根据本地验证,判断该软件是根据浏览器的url地址对比保
留在插件中的某个常量值来进行验证的。
于是,先反编译.swf文件再说,得到源代码后,重构原工程太麻烦了(尝试过),便开始
找那个负责验证的as类文件。
在com\pante\managers这个包下的LicenseManager.as文件就是授权验证as类文件
源代码如下:

package com.pante.managers {
import mx.core.*;
import mx.managers.*;
import flash.display.*;
import flash.events.*;
import com.pante.components.*;
public class LicenseManager extends EventDispatcher {
private static var availableURLS:String = "localhost:8080";
private static var fullUrlValidate:Boolean = false;
private static var alertWindows:AlertWindows;
public function LicenseManager(_arg1:IEventDispatcher=null){
super(_arg1);
}
public static function urlValidating(_arg1:String=null):Boolean{
if (_arg1 == null){
_arg1 = availableURLS;
};
var _local2:String = FlexGlobals.topLevelApplication.url.toLowerCase();
_local2 = _local2.toLocaleLowerCase();
_local2 = _local2.replace("http://", "");
_local2 = _local2.replace("file://", "");
if (_local2.indexOf("/") != -1){
_local2 = _local2.substring(0, _local2.indexOf("/"));
if ((((fullUrlValidate == false)) && ((_local2.split(".").length > 2)))){
_local2 = _local2.substring((_local2.indexOf(".") + 1));
};
};
var _local3:Array = _arg1.toLowerCase().split(",");
var _local4:Number = 0;
while (_local4 < _local3.length) {
if (_local3[_local4].toString() == _local2){
return (true);
};
_local4++;
};
return (false);
}
public static function openBadLicenseWindows():void{
if (alertWindows == null){
alertWindows = new AlertWindows();
};
alertWindows.alertLabel.text = "非授权应用,请联系盘特在线图像编辑器官方客服!";
alertWindows.width = 320;
PopUpManager.addPopUp(alertWindows, (FlexGlobals.topLevelApplication as DisplayObject), true);
PopUpManager.centerPopUp(alertWindows);
}
}
}


仔细查看验证算法是有缺陷的,某些特定的字符串是可以绕过的,在查看两个版本中的验证程序是不一样的,说明该程序员是有这方面的安全意识的。如果使用特殊字符串去构造
url地址,那插件就没什么实用性了。
后来,我发现我太关注代码结构了,忽视了availableURLS这个常量,只要修改这个常量值不就ok了吗!
经过多方寻找软件,最终找了ASV(Action Script Viewer),它能修改swf的常量
值,辛苦了两天终于搞定了,太累了,所以后来再也不敢搞这方面的尝试了!
上图:


那位想靠它挣钱的兄弟别怪我啊!在乌云帮你打个免费广告,或许能卖得更好!
第一次尝试软件破解,所以软件破解方面的大牛们别嘲讽啊!

修复方案:

或许采用远程授权验证更不错!

版权声明:转载请注明来源 shine@乌云


漏洞回应

厂商回应:

未能联系到厂商或者厂商积极拒绝

漏洞Rank:8 (WooYun评价)


漏洞评价:

评论

  1. 2012-02-14 11:49 | livers ( 实习白帽子 | Rank:94 漏洞数:6 | mov esp,0jmp espcrash.....)

    你这个只是类似爆破,真正累的是逆向,写注册机,游戏外挂

  2. 2012-02-14 12:43 | shine 认证白帽子 ( 普通白帽子 | Rank:831 漏洞数:77 | coder)

    @livers 恩!乌云需要点高端点的case ,那些看代码挖洞的大牛们,多放点危害小点的0day啊!也好普及普及~!