漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
# r+ I3 N, H' W& Y& V! o# u3 m* l如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:/ g8 }' r2 z2 v- u
8 M( v* I0 e$ C1; ]0 R- h3 Y+ S
<img src=javascript/alert(1);>.png
. j: N. c: l) a. S! m/ Z1 F(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
# c' c: K$ s* C4 ^1 }如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
g" t( [# o) k1 M) h& |所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。' }- e$ G# v8 ]
修改xxx.png为, ^2 l! z+ x$ s) ~6 H( p5 L% u, i
. L1 z8 @4 C) W16 |4 q; r% `# P6 P( R1 Z
<img src=javascript:alert(1);>.png5 g% J4 c, r( y7 i: o
提交。- }8 F9 I+ m' v5 c9 q; {: P5 i
xss会被触发在第二个页面,也就是点击图片放大之后触发。
+ [3 z, e, N" `# U; t0 Tpwned!+ a4 a# I, z) d8 t8 Y
( E: B' j Z8 W3 a字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)" R5 P- N2 m% M& t
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
: M q4 O- o+ u0 q- Z+ @+ k虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
5 T0 h! T+ T/ i+ g, e0 X5 u8 [. I+ J- e但基友居然都说不行就只好自己硬着头皮再试试了。" t* h; h9 k6 _9 K1 h: O0 J+ ~
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
5 w+ s0 v" j& f6 b而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
; F5 g: x- V+ n- u% ^; a9 \2 x这貌似就是传说中的mission impossible了。
1 b1 P: ~0 e6 H' ]我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:/ m0 P4 v f6 t% Z r
1 A- F, I3 e, i) J+ H
<img src=x onerror=alert(document.cookie)>.png
" e' i+ m: t& h* W: V. D% n5 {+ D原来的文件名被这个描述给覆盖掉了。: v2 o1 U9 f: U7 n3 S6 k$ ?" j$ ?- w
pwned!
( J/ h& j+ y0 W" }) ]9 a
0 y2 b( d' P- L' P而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)# A# D0 C4 p1 a7 q% \
到这儿,我觉得应该已经没有任何的阻碍了。
/ c; z8 W. |+ b: U! ^( a0 Y可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。% S# {: Q! z& ]
whatever!
0 U2 f2 u9 U5 F6 ~ U我觉得这些已经不应该是该去研究的问题了。
6 E, B' D- u4 W" k4 _0 T$ l0 H+ s因为没有哪个网站和你有这么大的恨。9 N+ \- v; s# w# p# n1 \2 x* V. G0 {# i
解决方案:; t3 e2 m9 T' |/ e* h( U
全局-上传设置-论坛附件-帖子中显示图片附件-否$ b" B# u; m5 ^
这样,就搞定了。2 R" q$ K7 w8 t- ^
|