漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。% l5 B! ^1 l& W- N
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
4 g' Y! n9 v) _* @
% |5 `/ [# w1 O- n$ `2 ?1
) `0 w4 S, a8 ]<img src=javascript/alert(1);>.png6 I0 X4 U: n3 Z w# Q
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
4 r, h5 y$ W( l* X& i如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
n; e3 _: p) U* [所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。9 K3 j) Y; }* |) W- I) U
修改xxx.png为
. N8 G4 ?; H: k4 z' n9 u
0 B( n5 _( {) H7 J! ]5 H6 A. ~) ]) n1
5 ]& p5 _: z6 K<img src=javascript:alert(1);>.png
$ q9 b3 M9 \6 v$ W q: U$ Z( E提交。
6 k4 X: o$ U5 W! v) L( cxss会被触发在第二个页面,也就是点击图片放大之后触发。+ H h7 s4 {! }2 C. @
pwned!
6 Z+ Z( v7 E, a2 T& v 2 j4 Y# m: |- m) X) f7 M4 ]
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
2 ]/ r# w' K" t# J$ v因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
2 A+ `% G& C6 w* Y; k/ o虽然现在XSS很火,但我个人真的不是很喜欢这个东西。, h; e% [1 ~8 T a4 ]& S
但基友居然都说不行就只好自己硬着头皮再试试了。7 ~8 f5 P- V2 k' Z+ [+ o* O! ]
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
! `! I* F. r: n# N) C而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
+ X" B6 l! J/ _+ ^% U$ J3 K$ J M这貌似就是传说中的mission impossible了。
. X Z) \1 E$ e. u/ ]我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
, `1 B' S6 j1 B2 |) Q8 t9 \1
, g! l, p! I4 F5 g2 r! A. I<img src=x onerror=alert(document.cookie)>.png
# [6 E& p" s8 s原来的文件名被这个描述给覆盖掉了。/ M% d- o4 y. a4 ^! Q' V
pwned! W8 V9 W$ f+ S1 `- G/ [1 }
* Y6 P3 y& l5 u$ b$ n' ?+ e( h+ i- q而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)/ f/ b6 s4 U8 |3 H; G* f" [
到这儿,我觉得应该已经没有任何的阻碍了。- Z9 I5 w; {8 d: g5 z
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。4 A* ]) D0 E* S" n! R
whatever!( @9 S/ I0 ^! J
我觉得这些已经不应该是该去研究的问题了。
) g# F. c; s3 A5 v# u$ `因为没有哪个网站和你有这么大的恨。4 b# k4 \1 r, k# g( U
解决方案:. \& a5 Z& j) \! f) M$ l
全局-上传设置-论坛附件-帖子中显示图片附件-否- c- f# Z( a0 C) ]. }( _: J) w
这样,就搞定了。( D' B2 N6 ]0 R
|