漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。3 O+ p- z; ~. k- F. g8 w
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:& ^; q J- o; X' Y' F
2 @3 p/ f: Y' s- `& N8 r' H17 z4 E9 ^+ s# L# q( m, G) f+ l) K
<img src=javascript/alert(1);>.png
/ n: K1 W& P# R( w5 K(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)/ F: H* r' C0 i4 e4 T
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
( ^* `/ j' p9 H/ M a+ x7 W所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
, `6 s0 Y4 Z9 o7 L5 f. {修改xxx.png为# |6 g3 a* O( B0 l8 U f
5 f$ j! a& s6 r* E% w8 ^0 Y' i) T1' d! r, k% y# I8 M& V+ e2 b% O
<img src=javascript:alert(1);>.png0 h/ t& F2 Y" n* B& I
提交。4 {/ l/ P* C9 T0 ^, k! Z: z3 I
xss会被触发在第二个页面,也就是点击图片放大之后触发。; N! h2 R, _/ J9 ]" H9 `" `
pwned!* W+ q( @2 `: d6 H! w
; D9 ^ {! m% X; O" E
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
7 m% a9 {7 t* `& h: M0 P因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。# ~- X$ M9 @ L6 X# `0 S* z
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。( Q' q1 T! w. v1 J1 q
但基友居然都说不行就只好自己硬着头皮再试试了。
, W, w3 p4 y, M在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
7 F* b! m1 b+ M; k而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..& ^$ I: r6 @4 z
这貌似就是传说中的mission impossible了。
: x0 ]+ ^8 b' n我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
" d2 f& X4 z, H0 n- m- |1
2 x: a5 p& P: N- U<img src=x onerror=alert(document.cookie)>.png% A# ]2 E8 f+ ~, \- m/ i
原来的文件名被这个描述给覆盖掉了。
+ a. _, |" I9 m# w+ D, Gpwned!- g% G' {& e6 a
5 O- }$ s6 r! D5 Z3 r/ e
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了) e2 S9 t, Q; a& s( U* e. s
到这儿,我觉得应该已经没有任何的阻碍了。
2 G3 e9 ~( m- s: t$ M1 N可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。. Z: I+ Q+ s$ R
whatever!
8 d* \3 g& l. G N2 K我觉得这些已经不应该是该去研究的问题了。
3 Q* D7 t# Y% ^+ S1 c因为没有哪个网站和你有这么大的恨。6 z3 z! q" H( q8 d
解决方案:
2 d9 [: g. ~0 b3 Q) i' {全局-上传设置-论坛附件-帖子中显示图片附件-否, [, ^8 o9 ^# }# V2 n9 q
这样,就搞定了。8 q" n& X) R2 q: X
|