漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
( p4 R/ P" [& l) ?& a: F如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:% H4 T% y# ~/ @" o
" m7 }1 S+ i! m7 Z% y1
8 r5 ]' }* K, Q! X+ g7 L7 l<img src=javascript/alert(1);>.png
1 q+ F$ U, t& _(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
9 C, a6 R6 a+ C. C6 ^( l9 U6 C7 Z* b如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
7 {; ~2 k8 p2 B1 I2 ` }. u所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。! _1 e+ t+ l" _: P
修改xxx.png为
7 p4 [8 y' I: N3 J2 W F$ x . M0 U J7 r, s7 r
1$ |; D0 R ]5 K* @2 k2 N
<img src=javascript:alert(1);>.png
9 Y, ] u3 y' W7 U提交。
& K) r7 K) G9 U7 Z9 f! n, I, txss会被触发在第二个页面,也就是点击图片放大之后触发。
" c& l- E# d7 Q {& @2 `pwned!, m y$ q0 ]- D( K. v# s
# V$ {& ]4 d. O: i. t
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
0 k- j1 t& T3 `: g5 P因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。6 W8 s0 x4 Y u ~8 `% q ~8 N- C
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
) K, r% Z0 ] ?0 d0 M5 g; ?* k; l+ V但基友居然都说不行就只好自己硬着头皮再试试了。( F& M Z( s! Q1 T
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
3 U8 d# K1 `( [而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..' U }, v# l. B5 I1 b0 g7 }
这貌似就是传说中的mission impossible了。
$ B* L# _5 T/ N/ w我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
- M" M) q% e1 F$ {6 a+ \1- y0 B7 }, v+ {0 h, A! L
<img src=x onerror=alert(document.cookie)>.png
, k* Q: t3 d' J1 |* q w; A* ~原来的文件名被这个描述给覆盖掉了。
_( T: }0 t' R/ A+ bpwned!
. o3 p: B) y" [: R- O( x
3 h v9 s1 x3 h: I" v* P* l5 N7 c而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了): x* [; Q" y7 G) a
到这儿,我觉得应该已经没有任何的阻碍了。
6 C, \- T2 c/ A- j( s, A( C( ^可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。) u) U( m; F: `% i5 j
whatever!
* Q) U; h w' i3 {6 Q" }1 [我觉得这些已经不应该是该去研究的问题了。( {7 e( o6 G8 D# v7 i
因为没有哪个网站和你有这么大的恨。, E/ U/ I9 g1 ]' [5 z5 a* i8 w
解决方案:0 ?. I( w# W+ c$ P! p4 J! Y
全局-上传设置-论坛附件-帖子中显示图片附件-否9 I) Q% e% d- c: l7 \( j
这样,就搞定了。
8 X$ \. M8 U0 O2 R4 i2 `7 i4 E |