漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。( C0 {: a) u n3 | D
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
5 A4 f3 J$ b( b 5 U9 R! Q: _. `4 c& t
1/ I# ?3 s# i! d* s3 A
<img src=javascript/alert(1);>.png, D" d& U8 R, {+ f& `' {4 `' r& {
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)1 G9 {6 W( l" b
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
- D( v3 p% b- r2 g& x- f所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
4 `, d% j- I, J, q修改xxx.png为
; x# R+ K: e) \3 K/ S4 K $ G% e3 m9 Y1 j; U1 b
1
# m5 u" a0 l$ x* z9 _& Q0 l4 }9 \<img src=javascript:alert(1);>.png" ?2 c% M! u$ z' g& c
提交。2 \: _7 z: D( C0 I- ^" N
xss会被触发在第二个页面,也就是点击图片放大之后触发。
5 _4 b2 `+ m; g. U: V, B. X Z& Spwned!8 l6 R: j( ?* Y" O9 f/ G
) }- W1 W- R* e. Z; M字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)4 E+ X, v9 d7 |0 j6 D5 `
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
7 }( n" y1 j4 m9 \9 g; ?7 x) b* z4 Q虽然现在XSS很火,但我个人真的不是很喜欢这个东西。 s' V9 N- B' O
但基友居然都说不行就只好自己硬着头皮再试试了。
& J0 G. H% ^' J# K' R4 B在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。' f* ~0 c. p2 f3 q8 y0 R
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..$ r7 P3 }2 i* Y5 b; ~( K# h
这貌似就是传说中的mission impossible了。. N" g: w% i$ L' V* B$ `
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
. o1 \/ o& j. o- i$ P+ Q1+ D' k5 C* S) Q: ]& E
<img src=x onerror=alert(document.cookie)>.png+ b5 e1 S) A2 [/ w/ d: @0 C$ P M
原来的文件名被这个描述给覆盖掉了。
4 i8 ~' i! ?* f9 H5 B. N. X, upwned!
0 @% `1 J( @; Q9 P+ H0 v
% ~' H4 o) M- t$ w; e而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
) i) g9 |, S3 B' `$ _# }( ~到这儿,我觉得应该已经没有任何的阻碍了。1 e. [& f% ~8 ]# i; i/ r U ^3 B; d
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。' p- T- K8 P: \$ ^; @3 j
whatever!
+ {) r& M8 U1 ?( a& d3 I我觉得这些已经不应该是该去研究的问题了。
; {% z3 i( q3 T; Y! [9 L: K因为没有哪个网站和你有这么大的恨。/ o; X( L, v3 X$ @) E' G
解决方案:
* V% J" E8 R) X% Z0 N5 I0 w3 Q8 ~全局-上传设置-论坛附件-帖子中显示图片附件-否
V3 E- \4 a5 r$ B: s+ D+ I6 N: L' U这样,就搞定了。+ e! ]* k5 h: G5 i0 \6 d/ B
|