漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
" r: M7 I1 ?% K/ i) j, x* f如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
' p' d0 ? S, {! r # z$ t4 T* g( c0 j" ~
18 l: ^3 G, c8 k. o" g
<img src=javascript/alert(1);>.png
6 z+ ` h0 A- g [(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
; o K/ h! N* r0 R4 @如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
# [* k ~9 r+ M0 U所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。2 Q& u3 U4 {9 R; x, v Q
修改xxx.png为
4 Y# D! I4 k' i, U; u5 e3 i9 b
5 d( u# L; N9 c6 [13 S" o) J" v' L3 b% {
<img src=javascript:alert(1);>.png
# j( P4 e+ A3 m. O. Z* [提交。
2 v" [: b+ H0 J5 ?0 w0 uxss会被触发在第二个页面,也就是点击图片放大之后触发。; {, V5 s# O% w
pwned!* ?1 f! y- c8 G8 i3 D7 o
' U: O2 ]( H- h* ~" `9 t字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
8 f& {# x% K5 f/ w因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
* [( ]6 [* R" R8 D0 s( p虽然现在XSS很火,但我个人真的不是很喜欢这个东西。4 ?6 C! f* E2 j- a% _$ f% d# ?
但基友居然都说不行就只好自己硬着头皮再试试了。
% w! O: L' V: F5 B4 Z6 p2 x" E在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
* o1 {% |% A9 k; j7 S3 f而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
7 g6 U1 G9 g5 h/ ^- O( V这貌似就是传说中的mission impossible了。9 Y0 }7 K6 S4 J) M! S( ?
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
" k* _' E- F; J2 U) T- w/ b: y1
% a3 b- f. Y) d# [% u! O5 x) {. r<img src=x onerror=alert(document.cookie)>.png' s2 G& ? W1 l& y+ O4 K m5 d# ~
原来的文件名被这个描述给覆盖掉了。/ {: f% p/ I* q$ S, ?; w
pwned!
, Z8 ?( h3 e: F* w3 Z
- h+ @% L6 h4 ^ K! }而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
$ _2 O0 i- G' }; a到这儿,我觉得应该已经没有任何的阻碍了。
! _) H; h _6 Y1 j# K* U可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。# I, }) ]. H: N' `- q' }
whatever!
' ^# Z* T$ _4 Q7 |4 m我觉得这些已经不应该是该去研究的问题了。
, e) |5 Y0 {7 y& M% f) j; F% y因为没有哪个网站和你有这么大的恨。
7 g. X' t' L. n: ?解决方案:& {; r, e9 z' `( d% _, K& V1 c( O! Y
全局-上传设置-论坛附件-帖子中显示图片附件-否
' O X) Z. ~; u2 b8 K; w7 @这样,就搞定了。
6 P) V" m9 Q3 R. o |