我们都知道Flash的ExternalInterface.call()可以调用外部的JS函数,一般如果在flash代码中看到这个函数,而且里面的参数可以是用户可以控制的话,就会有XSS的风险,flash安全扫描工具的扫描原理也是如此,碰到这个函数还有geturl,如果里面的参数来自外部的话就认为是漏洞。 一般情况下我们ExternalInterface.call(param1,param2),我们只要在param1中设为eval,param2中附加我们的js语句就可以了,param2为param1的参数,真正执行的时候类似于这样: param1 = eval; param2 = alert(/XSS/); 那么结果就是eval(“alert(/XSS/)”) 悲剧的是如果param1我们不可以控制,我们只能控制param2,那还有办法XSS吗。就像到sql注入一样,这里可以联想到注入”)来闭合前面的引号后再次插入JS来X,但是这里adobe做了jsencode,我们插入的”会变成\”,所以我们又X不了了 喜剧的是老外在测试的过程中发现了一个BUG: 当插入\”这样的符号时,flash会在经过jsencode后既然只赚了前面的\,所以最后变成了\\”,这样我们的“又能闭合了,悲了剧啊,这种漏洞也有,想测试的搞80vul吧,黑锅正愁没流量呢 当然,这是针对param1不可控的情况下的办法,反过来,如果只有param1可控,param2不可能控的话,我们可以用function方法来执行,如下: http://www.80vul.com/xss.swf?a=function(){alert(/xss/);alert(1)} 文/ben |