漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。& p% T6 |$ G/ n9 m3 f
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:% d; S1 \2 I$ d" J
8 j% O# J% @$ Y; N3 d1
. X0 G7 h( }, ^8 u4 E<img src=javascript/alert(1);>.png7 M: c' q7 ~5 s7 o2 n3 {! r
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
F5 w) _6 N" p9 l0 H. t9 H如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
2 C. `; ~$ T# R; v8 J' Y所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。. ^; x' f6 d/ V* c5 a, x x, H8 U
修改xxx.png为
/ ]; X% ~. P/ t# D- c% |4 f6 @
& G; I2 N; z4 a$ `2 Y1
6 w& I" t0 T$ t% ]2 j6 L<img src=javascript:alert(1);>.png
+ L% y7 O- {* G6 _* n9 S提交。
( ]6 e7 E* k, Y6 Fxss会被触发在第二个页面,也就是点击图片放大之后触发。
8 z3 N' u% ?4 i0 @1 D& S7 vpwned!
4 N; b# M: F' e, } a m m1 @7 C& A4 f3 G. K
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)) D, C2 c: B1 q& z0 f6 g
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。8 H+ k3 N, E3 ?
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
4 G7 I2 e4 o$ ^/ a& S但基友居然都说不行就只好自己硬着头皮再试试了。, g* }0 W& x& Z2 B6 D
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
: C) N! a9 y( b. G而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
- J- |: e f: x3 I; t7 b6 t这貌似就是传说中的mission impossible了。
& Z& p' ]+ W1 |- A( f我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
' k M* R/ f; e! b! H1" H( \1 _0 l, r8 N
<img src=x onerror=alert(document.cookie)>.png- N W9 t ~$ p) U9 Y' v& S
原来的文件名被这个描述给覆盖掉了。. n, u( V1 ]. e. o' z
pwned! Y3 H* [$ X: }' G5 l
" x$ w' g; t9 V- \6 s而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)( @1 _2 q6 Q) R7 P% r/ I! I. u q
到这儿,我觉得应该已经没有任何的阻碍了。
0 L" P' g+ }$ S可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。/ [8 \, k8 S4 H3 j' p# N5 u5 E
whatever!
( O; {2 u* d+ k( _; I" G+ ]% }7 d我觉得这些已经不应该是该去研究的问题了。; C2 {* R. \4 D$ w, l3 [# n
因为没有哪个网站和你有这么大的恨。
8 N7 r2 E% w X! L解决方案:
, Y0 l0 ~+ a) S& {全局-上传设置-论坛附件-帖子中显示图片附件-否
/ f& b+ G5 M C: M" x这样,就搞定了。
7 C4 G( r r( H6 v V4 T |