漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
5 N0 ?+ {, K4 [如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:4 }) w: j9 G e7 Z( y
' x7 P% L6 |. K6 Y& w& K" Q1
! |' A! a+ C" [& c/ E3 t' ~; k<img src=javascript/alert(1);>.png
/ \9 R$ G- y" f0 P6 u4 ]! z(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
: d& Q9 r! A/ u/ y! V& d3 u8 B& c& [5 Q如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
5 D9 G" M2 @& J2 d所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。9 ~( r6 S7 A. S4 w
修改xxx.png为
7 w7 N# s/ k7 R4 r/ o2 m7 [5 g
" l& N' l+ V+ g- x$ P' V; l( O15 G6 c( d5 q4 f& e
<img src=javascript:alert(1);>.png4 t: y1 ], D1 S
提交。
! u) S* p4 L9 l0 L3 exss会被触发在第二个页面,也就是点击图片放大之后触发。! d: T- y+ V# j3 m; N( @
pwned!2 F# G( H7 Y! G8 R: Z
; {; j7 L' I6 G' B! V字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
. p$ q! j/ `' o: J2 N& K3 Y" ~. x因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
! J/ F& G3 D# N# |虽然现在XSS很火,但我个人真的不是很喜欢这个东西。4 j# r# p' B! ^+ D8 Y6 e
但基友居然都说不行就只好自己硬着头皮再试试了。
. R4 U; E/ F! _在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。, y7 b5 E. N5 ~: p- Y
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..! b; p5 q6 c+ r% _
这貌似就是传说中的mission impossible了。1 e9 X& G: n- I1 n! ?6 x
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
( }- H0 `' _6 x; P1
! \* y, A3 w; Q$ F" D<img src=x onerror=alert(document.cookie)>.png
! S. |$ o9 y6 l; h原来的文件名被这个描述给覆盖掉了。
9 d7 b( ~+ _6 z4 Q5 D2 c9 qpwned!
) O8 S: Z* K2 h6 L7 e D 0 K f! y& g1 A% b
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
; E' |, r: L3 w到这儿,我觉得应该已经没有任何的阻碍了。
3 _, m8 f/ N1 D可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。5 _* X1 u/ e5 ^9 |5 Z
whatever!2 ~) ^( }/ W( Z, A# U) r/ u
我觉得这些已经不应该是该去研究的问题了。9 W7 @. R( Z! |; Z3 }9 p! u3 o
因为没有哪个网站和你有这么大的恨。0 j, s. I7 B) g& ]# P
解决方案:
; }, ?) x' G. k) L- E全局-上传设置-论坛附件-帖子中显示图片附件-否2 m7 H2 {% H' X1 k$ A0 X
这样,就搞定了。
1 p: [7 Z+ M) ^0 |9 w( v$ B |