漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
8 x& V n4 ]& ^如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
Y' q: D7 [- D$ B: k
& h2 U/ h+ H& y* t$ u7 D P4 J1
, ~9 S$ w+ U4 p& D<img src=javascript/alert(1);>.png
: i& I9 n6 o( ]+ t(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
% j3 b* k. ]0 N0 ~如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
4 }+ ]6 J. s7 W( N/ [! [所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
* c: A7 I- ]2 ]# s修改xxx.png为
! c) ]% K* g3 T- {7 U1 S! S 2 L% k. p% T6 c: O8 K9 w
1) o) Q$ W6 o: m! d2 ~+ H4 J W( v
<img src=javascript:alert(1);>.png
( ]! ?5 T% D3 A5 |- p- c i& v! f% b7 d提交。$ t6 u! c# J; M2 x% I8 n; _3 }
xss会被触发在第二个页面,也就是点击图片放大之后触发。+ N7 _3 E5 F& c4 F7 j W
pwned!
0 H4 |3 ?" Z# g
6 u- [! F8 f+ A, a, |6 z字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)) p1 ?& d8 u9 q$ O) I
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。/ U& V1 ?8 E Y; J: x* ^
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
( w" `+ b) E) i6 X; F9 b8 U. Q但基友居然都说不行就只好自己硬着头皮再试试了。
, R# O$ q! d, Q1 m9 T) k在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。 U2 e& H; y% V: a5 C# M
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
G% S- A2 y! H& L: Y这貌似就是传说中的mission impossible了。
0 M: Y m6 x: q我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
7 Q4 ?) A5 A5 \. K) E9 o! Y- z- M1
1 T; B# O! O6 i# B) H9 N' t/ d<img src=x onerror=alert(document.cookie)>.png
+ k. E/ i/ j7 I2 X3 L0 |原来的文件名被这个描述给覆盖掉了。( H7 p$ O" H* q& b! \
pwned!
( z) U3 F8 Z8 ^
- H9 ?4 b( j' _2 |5 ~1 t, e: Q+ T而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)$ I9 f9 p0 V1 @" d( d; p' |" u) x
到这儿,我觉得应该已经没有任何的阻碍了。
4 t+ u) R S& d- |$ X: n可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。- q/ q( G' l8 A' I
whatever!
# D5 N% i% e2 _7 \+ g T我觉得这些已经不应该是该去研究的问题了。+ `# @0 X1 k; H) ]( E- s
因为没有哪个网站和你有这么大的恨。- U: F) G" @1 H: j* E
解决方案:2 `2 V8 }" J' C( e5 U* q
全局-上传设置-论坛附件-帖子中显示图片附件-否
' @2 M* Q' Y7 r5 o8 G; N: n这样,就搞定了。
* _6 V. w6 _: S6 N" Y" p {6 { |