漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。3 d' ~) ^2 ^& r5 H, _1 Y
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:$ ]2 g* V6 `8 j3 @' t3 \" [
) f- E' d# \! V1) p( Y% M s# q$ N
<img src=javascript/alert(1);>.png
- i/ T: X2 t9 I* B _7 j2 d# u(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)" A7 m" S0 S) X" D& s
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
% C: g# U9 i7 ~+ c9 `9 D所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。% P' a& S, h2 X( r2 M s, A
修改xxx.png为) t) S0 W2 n* d. k, ~7 A, Q
( D; r6 D5 r9 r% W0 W( O. r, S( X9 @
1
, ~, n2 L6 p! A5 T# l% |3 g$ J" E<img src=javascript:alert(1);>.png' n: x8 N; A& B/ j6 ^% ]
提交。4 s$ Y. ~! `( d" Z/ N+ k5 d0 i
xss会被触发在第二个页面,也就是点击图片放大之后触发。! f2 P* w+ j# V4 Q7 q
pwned!5 y/ }" Y& o6 ]) z+ T
; B, Q$ B% Q: i# _, ^# ]字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
$ l0 Z, H% l( k* N5 H# o0 E因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。4 x7 d5 ?& A' X; B7 K
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。+ p8 \/ g6 k0 _0 G/ D2 }
但基友居然都说不行就只好自己硬着头皮再试试了。# ~; j1 [% R# c& _: L; i1 P( H
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
+ G) Q( L! }6 K9 m9 C2 i# c' d而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
# ` j7 s% z4 O, L# _) w: s* R这貌似就是传说中的mission impossible了。
5 L6 m% ~$ @, X) g" e0 X我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
0 N s; w' Y7 e' |" Y1
7 I" [0 k* n6 N5 ?7 S<img src=x onerror=alert(document.cookie)>.png
; t1 ~( Z! S1 s0 y" K8 V原来的文件名被这个描述给覆盖掉了。$ v" M5 h) m$ r
pwned!- \( w7 c9 f$ R% i7 U4 X2 M6 P
0 s5 }7 H9 ~9 g9 X t* v) f
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)' n. p8 p! w7 Y
到这儿,我觉得应该已经没有任何的阻碍了。
, p7 c. K" [* n$ u8 N可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
, D' f! n9 g2 ^whatever!* \* V6 \* k/ d& i& [# ]5 }$ I
我觉得这些已经不应该是该去研究的问题了。$ N9 ^+ k' T, j: p, R( z6 m
因为没有哪个网站和你有这么大的恨。. j6 j4 m! i/ ^* X
解决方案:4 W1 t! k* [0 _7 |0 o! M( x
全局-上传设置-论坛附件-帖子中显示图片附件-否
% U1 W: ~- ^9 L2 T0 z0 d& X这样,就搞定了。! u; s3 Y# s* `' ]' C. `
|