漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。" ^! ]5 c$ {; `' H0 o! s! E% l
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
7 X% H+ V/ M1 t' F4 L$ O
; l8 K) @9 }+ b' `) ?- E1
b1 r, z3 n4 X( N<img src=javascript/alert(1);>.png
/ T% }% m3 Z7 z(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
' Q5 A, I; _6 E/ P1 z如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。" z( h2 x9 {! R$ s9 W" t
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。2 Q0 q9 E2 b8 Q$ k
修改xxx.png为2 ~0 ^0 E# A4 n- P" o4 [" { T* z: T
& ]1 @ O7 \- e2 f j& |
1
7 w% |0 p3 j, F0 w: v" A+ a$ V<img src=javascript:alert(1);>.png# M& K5 a" I& P' b2 g
提交。; H) a1 K9 d% R6 e/ e
xss会被触发在第二个页面,也就是点击图片放大之后触发。
9 M# R* z# W4 S# U& o7 W4 jpwned!
' q3 Q6 c3 c' N 7 `, t; k+ w+ f
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
' I9 p7 Z- D, t* B. k因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
0 R& R; w. |0 D, g3 F9 T虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
- W( R; [2 M% v, g0 D# ?但基友居然都说不行就只好自己硬着头皮再试试了。, k G9 l9 E4 J5 B
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
1 L9 q0 d* d7 S而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..2 _/ E$ L- u d9 B) f, x u. s
这貌似就是传说中的mission impossible了。6 ]2 n: n0 M/ j ]
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
' C; q8 Y, V6 V- O& o+ H& V. M1) I" r2 P4 Y! h
<img src=x onerror=alert(document.cookie)>.png
$ h* t" J1 U8 [, O原来的文件名被这个描述给覆盖掉了。
6 Q' a* G$ i1 X$ I0 a* L" Wpwned!( Q' e; w, M3 M0 d7 P6 p/ M0 }
) @- U+ j6 O" S/ g1 a而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)5 {' D; z u" e6 }- e8 X
到这儿,我觉得应该已经没有任何的阻碍了。4 I( S! Y3 ^( x m+ _' ]
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。2 W# b; O2 o" a9 V9 U! K2 `8 }
whatever!
5 m: e$ y) _9 s5 H* X我觉得这些已经不应该是该去研究的问题了。 R7 n; _! J% n1 |9 v
因为没有哪个网站和你有这么大的恨。
5 S7 E/ I7 M8 l! k! t1 k) B解决方案:
6 b2 M" Z* a/ U! b8 }全局-上传设置-论坛附件-帖子中显示图片附件-否, x# V$ D, Y+ H
这样,就搞定了。
# F/ l9 t0 s- S: e/ e |