漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
$ \+ u) X, r9 ~0 w r: O# }如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
9 |5 j5 ]! a. _+ V) y5 N
4 ]% k2 i4 B# u+ Q. H/ v17 P. K! \2 s" O1 q. q& V
<img src=javascript/alert(1);>.png: X7 w0 B% z2 ]* p' L! J. c
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload). `8 z' y) u6 a7 ?& g x& S
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
+ N+ N4 j& ]7 S. w所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。8 g# _ ^9 U, c4 T, C' @! b) R
修改xxx.png为' B" ~1 T$ `# j3 R3 c3 P
; _7 N+ E. G8 H* t1: n$ v# p; m; `' g( Y1 P
<img src=javascript:alert(1);>.png
1 X# i8 Z. w: h2 @ Z提交。# Y7 K5 n( R1 w+ L h6 h
xss会被触发在第二个页面,也就是点击图片放大之后触发。/ |) d; q6 x. d; K% D8 p3 J. z
pwned!
) ]2 w/ `* I& y1 I
* L- E( K" M) i. y* M$ f字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
2 w3 S0 @6 M) E7 f. l因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
! p4 O# r5 q8 v- Z虽然现在XSS很火,但我个人真的不是很喜欢这个东西。/ O7 s$ n' v. G+ ~6 f. W2 c
但基友居然都说不行就只好自己硬着头皮再试试了。* T" K! s' ~' O
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。% F1 u, I; [: ~7 g9 E/ }# ^
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..% L$ \# r% i5 f% ~
这貌似就是传说中的mission impossible了。
; M8 F) A5 w1 Q4 X* u我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样: P$ I. _2 O, i3 ? G2 D
1
/ L% C+ Y$ A( J<img src=x onerror=alert(document.cookie)>.png
" j" c' R! `7 `) s0 B- A1 P原来的文件名被这个描述给覆盖掉了。 V6 ]! w' I7 C0 I
pwned!
1 M+ S: l- p5 r a2 ?$ Y : v7 v1 J: Z9 f: ~- s7 u
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
$ |; @" _7 q7 S) K2 m, F3 A. ~4 T到这儿,我觉得应该已经没有任何的阻碍了。
# X6 N P3 x( P7 U; h9 N可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
) w1 ?4 K( N' I8 Lwhatever!. i+ i; c; R t+ K0 U. @. ^
我觉得这些已经不应该是该去研究的问题了。& V( k$ N, G8 q
因为没有哪个网站和你有这么大的恨。
2 T5 H( s' ?. _# s$ ?5 L+ i解决方案:. e' b$ o' O# V- m! N# m1 E
全局-上传设置-论坛附件-帖子中显示图片附件-否& G- @3 V# C; s3 s) w
这样,就搞定了。
8 m* |' _" t9 W, |( d3 I( i) G |