漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
" S* n$ c) `6 V7 } {3 y( g如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
8 U( Y- c. t" H+ d3 `1 `
# {* f5 m; Q1 F2 z) `' h1
3 B$ e: g0 |& t \& z+ {<img src=javascript/alert(1);>.png
4 c* c" n( j1 b5 q3 O- N! @(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)( M/ L5 r4 o% R5 P! f3 y+ t
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。6 N# V0 E0 x& F/ \( l
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。; f" J: m& R4 g3 W7 ]* _
修改xxx.png为+ o! ] O6 d+ d( G' t& b5 y
; v9 J( i: m+ ]% Y1 `% z( q$ ^
1: H/ o& | p4 H
<img src=javascript:alert(1);>.png
W- C% C0 }& z4 L: `- f/ p+ V5 h提交。, g, @9 D, W& K# Y/ v
xss会被触发在第二个页面,也就是点击图片放大之后触发。 R7 G' G5 B0 @9 E
pwned!! v& U, d, j& k# j7 L% u" @) {# ^, Z* R
% W* S! \9 f( r3 r字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述), G w0 t5 D' g# z
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
% N$ u8 ^$ {5 [$ x+ v虽然现在XSS很火,但我个人真的不是很喜欢这个东西。: D. M' P& I7 l! u! J
但基友居然都说不行就只好自己硬着头皮再试试了。9 @! w, u' P# m# R& I, y
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。( p& W+ _! h9 N% H# B& C) h
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..; ?6 @: s0 k# s
这貌似就是传说中的mission impossible了。) S6 ~7 a5 ]& t; M( S! N
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
0 l9 R4 D' E+ K2 k8 P1 J6 N16 D) l& {8 m% r. _+ X
<img src=x onerror=alert(document.cookie)>.png9 B$ z: V2 m4 A! a u4 v/ v
原来的文件名被这个描述给覆盖掉了。
1 h9 o- y& {+ V* y& |6 E. r/ Q" `pwned!6 F" z( y1 N# J* K, Y
6 M& E2 x- P" L8 ~而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
1 w, X9 t: k# `. U `到这儿,我觉得应该已经没有任何的阻碍了。! B. c: A5 U0 i4 Z
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。! F5 M& r) ~' x$ J+ @) h" }+ O
whatever!
: ~! W4 K; M1 {' e4 q5 m, c( P我觉得这些已经不应该是该去研究的问题了。4 k' L, O5 o2 ^, P2 e# b$ a$ F
因为没有哪个网站和你有这么大的恨。
# j) N+ Q' o2 t解决方案:
H) D8 q+ U# e1 F2 c8 T全局-上传设置-论坛附件-帖子中显示图片附件-否
: w1 X6 E$ Z) k这样,就搞定了。5 s- G0 p9 k. }. ^" c4 S
|