漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。6 o( l" Y2 f+ G! F# ?! V2 I Q" E( ~
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:1 {) g$ [; m) E3 N" {9 ]2 a' e
1 P+ v; b2 n1 j1
/ m8 E% N1 {. ?$ P<img src=javascript/alert(1);>.png( ^' S7 w2 n0 n/ S k
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)1 h J3 z" w% `/ W1 I% R0 Z
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。& U7 U, h1 H4 X. p+ |* `+ G& _
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
8 q4 M& F8 x& Q+ T- \修改xxx.png为, V+ ^! g9 [+ P: e
# J* y1 X4 M4 ^) \
1
: C& e: w( W: C* A<img src=javascript:alert(1);>.png
' `- P+ G. ?7 D) P4 w# F提交。( ^8 x, X7 q0 G) g5 h* L) ?
xss会被触发在第二个页面,也就是点击图片放大之后触发。! y1 [# y4 Y0 Z
pwned!7 @5 @, z) C8 [# Y; |" r( j
- t: t( `+ M; `7 Y7 W5 T9 x4 M3 b
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
+ E0 u6 Y$ B+ N l6 U因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
4 ~4 D }1 \8 p* F! Q虽然现在XSS很火,但我个人真的不是很喜欢这个东西。 }7 M9 ~* F h+ F7 P
但基友居然都说不行就只好自己硬着头皮再试试了。
) Q5 F6 Q' r* H4 b" X% |8 h在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。2 s7 l. h) b, u, L
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..1 @: t6 n% p. E+ |. }
这貌似就是传说中的mission impossible了。
; m% ]) a k- h) m' ?. `; T我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
8 R8 ^0 A+ b0 h# Z! t10 N# X8 _, A" [) I3 _0 i; b2 v
<img src=x onerror=alert(document.cookie)>.png' P9 Q) M1 v+ H5 f
原来的文件名被这个描述给覆盖掉了。( R" w0 I8 [' H% |! V
pwned!8 p8 ^. ^7 h6 B0 [( l
3 ~" ?8 v% D; @% O" l+ L0 T- s9 b
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)' h: \0 h7 x" V5 ~
到这儿,我觉得应该已经没有任何的阻碍了。
- y9 q' s4 w3 z% p8 B* a: m可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。, @2 i4 P( }0 A* D* Q
whatever!& d# E, Q2 d9 s3 c% z
我觉得这些已经不应该是该去研究的问题了。
! u. g9 k& Y; ?- q% W8 K! }, @$ N因为没有哪个网站和你有这么大的恨。
- C7 t/ R. X" ]3 R" ? b: n6 J7 o% ]解决方案:
6 `" M C& b$ P全局-上传设置-论坛附件-帖子中显示图片附件-否
0 t4 w$ P3 X' Q4 @& o: D( G这样,就搞定了。
$ n& }- i. @* i' i# V3 f# Q |