漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
6 L7 P6 Z/ n9 C3 ~如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
- ]/ L1 x: T0 p! n* ]' w, q G3 ]' t! E# N+ _1 N" p P; m" ]
1" l- k; S& Y- J6 B" O; t% ^
<img src=javascript/alert(1);>.png
. I3 B) ~$ I& J, X, Q0 ~$ i(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)5 W3 t) `8 I( {8 t3 d# J8 U$ i" q! Y
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
, X$ q" K k5 J所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
, t$ }/ @9 N2 e. o修改xxx.png为
! v# R. k# d: a! G
( @6 k1 @& D% j1
; _7 O, B0 D1 g8 R, ~9 A<img src=javascript:alert(1);>.png
) e" C6 S/ \+ @$ Y( e. X- W5 t# B7 ^提交。
( k( q- k8 c. R1 i, F8 Bxss会被触发在第二个页面,也就是点击图片放大之后触发。
4 k, ^5 i8 Q* C0 p1 `# Apwned!5 A5 n* [" k( C1 V7 C( n
. b, E1 S( R- c8 y/ b
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述): z2 V' A) d* J- u; ~) s
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。1 s, S& G3 d- R! U3 I- g {. }$ O
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
( O5 i& J0 M. s0 p但基友居然都说不行就只好自己硬着头皮再试试了。
$ \3 g/ T4 L5 \3 i% f在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。5 C. K- g. l% I. l0 _
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
2 t# k# D; n* ^4 g# \: T: y这貌似就是传说中的mission impossible了。
: i: {. g4 l4 V6 A: X2 F我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
# h4 y, m7 c: O. V7 }1 J1- o, r0 K- c' w& ]% i
<img src=x onerror=alert(document.cookie)>.png( h5 s* {7 i# s# @1 w8 B8 m
原来的文件名被这个描述给覆盖掉了。
, B. w, X: @% H T; Q. c) {9 Opwned!& | }$ P5 Y7 ^* ?+ E' ~- ?1 |0 D
) d4 v& n5 I9 l) h+ ]' _
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了) g' r+ K/ a* e
到这儿,我觉得应该已经没有任何的阻碍了。
7 j& l0 y) J/ ?可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
% q" l4 ]/ g5 C$ K. jwhatever!" s+ W( E/ b0 @
我觉得这些已经不应该是该去研究的问题了。
' H' p' e; `, ^# i因为没有哪个网站和你有这么大的恨。2 V+ W& N* o5 q' s) _/ I! \6 X
解决方案:
) J& }1 T( A0 F/ S' j全局-上传设置-论坛附件-帖子中显示图片附件-否0 }' A- d3 Q% E: A7 C1 r3 S
这样,就搞定了。
+ A, Z$ {3 a# }$ l" p |