漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。/ I* x' [; r, ?1 C' ^
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
+ D# y- }8 I) K9 ^9 @: D, ]5 N 5 A0 j0 p; `2 R* r; ?6 Q
1
5 L* z" {# R d8 t) K<img src=javascript/alert(1);>.png; T7 z3 x8 i9 O5 h. ^1 z+ I3 u
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)3 s* u/ t7 u( g: h( C' q9 D" P# B
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。( L8 U, j! x! N w
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
6 I6 S& l" x: g( y p. \2 E- p修改xxx.png为
. g' O8 e! X! z' D& F( O2 E1 C - @7 x+ ?- U7 A1 C( N; X" t/ G
1
; Y5 l% {$ M# q/ t<img src=javascript:alert(1);>.png
! m* |7 j# c4 ]7 {+ Q提交。3 o' |$ J/ w1 G7 {0 M- W% Y ^
xss会被触发在第二个页面,也就是点击图片放大之后触发。2 M6 \1 [2 I. G3 `
pwned!
1 q$ G' j3 Q. f% ]. m
; f8 {9 c) z' h3 k字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)5 X0 M! ]& E0 J: h( V5 Y2 r
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
5 N- S6 [& l& `5 B. a0 c虽然现在XSS很火,但我个人真的不是很喜欢这个东西。. T0 H/ {8 B5 a, I7 ]
但基友居然都说不行就只好自己硬着头皮再试试了。
' ]' e K l+ r1 D9 |6 W% F6 e/ \. A在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
3 L' w8 J' o% y而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz... j% C# U- S, ?
这貌似就是传说中的mission impossible了。
9 H9 e0 ?% D' Q' N/ y3 n我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
1 i4 C1 h# |5 L1 I* {2 ~# D3 W/ V1 a8 o# O
<img src=x onerror=alert(document.cookie)>.png$ D- d% P, f, Q
原来的文件名被这个描述给覆盖掉了。; @' L% I3 s3 G! X
pwned!
, D9 a; l- j/ u" ]$ a( R$ ?* G8 ^ 2 e# Q/ V1 @& l, F; Y3 t2 V) s
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
* F8 y1 }6 n5 ~/ o! |到这儿,我觉得应该已经没有任何的阻碍了。' x7 m6 L. ^+ Q; r
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
; n, V0 e8 j" E6 T& N! W2 Gwhatever!
$ I( _- k9 y2 s! t4 z我觉得这些已经不应该是该去研究的问题了。. O, g8 o. Y+ f; B/ _+ o5 o8 Z
因为没有哪个网站和你有这么大的恨。% Z7 r) T q0 G0 ^
解决方案:
, T! P6 e- M6 E$ k5 q, ]全局-上传设置-论坛附件-帖子中显示图片附件-否7 {# r$ l( V% |1 y8 _ ^
这样,就搞定了。) d9 ?7 }2 C! D6 A1 y# T
|