漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
( \" a+ ?6 Z8 o2 ~9 S8 u如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
+ q9 N& g$ r8 w: |3 I ' T1 F6 T: K3 h7 O" L1 x% o; k
1
3 K9 o. t% z* O<img src=javascript/alert(1);>.png* O" A0 n) ?6 F5 j
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
+ [7 Y" a; ?/ ^' |4 h4 c8 z, d$ M如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。; g& @' P. U8 u) @! s
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。, r% i6 m0 R. \& o8 g
修改xxx.png为
) P" ?& r0 N( d: w+ \/ D; W! ^
* I( I+ N7 V9 X r0 X1
6 P9 D0 O$ H" G# ?& ]: O: e<img src=javascript:alert(1);>.png
9 D& i: l* z j/ B提交。, w$ n! l2 N8 [# ? F4 P5 C& d$ u
xss会被触发在第二个页面,也就是点击图片放大之后触发。
4 [: U7 s7 @" e" L$ |4 q6 f7 fpwned!
! j# j* q, h* E
6 G8 E, m% d8 V- O9 ~5 O; g7 r字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
% j! O+ ^! S4 P ]/ w. n0 N因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
$ M& X) A, l. V. B. q虽然现在XSS很火,但我个人真的不是很喜欢这个东西。* ]* f3 B6 ~/ E$ v8 l0 ~
但基友居然都说不行就只好自己硬着头皮再试试了。, ]6 `6 U1 L' X1 c l8 w6 h
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。6 K# m, C F6 F. U% F# b6 J
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..6 c' t( |1 O* P
这貌似就是传说中的mission impossible了。$ E+ {5 x- U7 U7 p8 T
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
1 T! {' Z; z" u1
3 P! z! T2 K/ i2 N& J<img src=x onerror=alert(document.cookie)>.png* v9 e5 p; r: v. v# R
原来的文件名被这个描述给覆盖掉了。' o* o. ]' z2 i$ p/ j* r
pwned!/ R; O6 e$ p4 s( n
/ M& {9 ?8 B/ A" t2 o
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)% O! T) H" Z/ h4 W& b
到这儿,我觉得应该已经没有任何的阻碍了。+ U3 k7 p3 Y$ ^' `) w7 q
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。2 A# m) {7 b) ^7 U6 Y* n
whatever!
u0 p `+ U0 y1 I# V我觉得这些已经不应该是该去研究的问题了。
% m7 g5 A! y0 X: B" ~9 S" A: K因为没有哪个网站和你有这么大的恨。2 J% c; `! c4 g0 a& w
解决方案:- k" o+ M* l9 Y/ [3 H% V4 H- X" {
全局-上传设置-论坛附件-帖子中显示图片附件-否
0 m- K+ w2 t1 Q& @这样,就搞定了。' y3 i2 Z: N2 m" a! `
|