漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。: C' m0 f) S; s1 l7 E
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:4 v' |# U0 _, Z8 J
4 H2 h3 t$ @# {4 ]1
1 i$ M3 E. u8 Q: }8 {<img src=javascript/alert(1);>.png
5 p0 I, }1 A# v# K: I) p2 g(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
9 s2 w5 h; {+ L1 {! h; p8 f如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。4 v0 g( Z+ s2 k+ `" n1 l
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。% a. P# W! G6 @5 u& v4 o+ i" c
修改xxx.png为, F5 I$ L) I0 U: b' r2 F# H
: ^* R+ a$ ]1 N1 r: u" e
1
5 Y+ z g" b; i: G5 }" g" k<img src=javascript:alert(1);>.png
0 \4 g8 Q) b; M7 {提交。9 k! M3 t* J8 w4 g
xss会被触发在第二个页面,也就是点击图片放大之后触发。
5 [$ d# a+ H! O; Q6 b8 k# G! Rpwned!
* W3 K6 b0 o+ M 8 o- }1 y# i! z; N8 j9 g, U" a5 {2 T
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述): u7 }* q$ P2 R4 u1 @
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。& ]8 X$ V) L5 I) h% A
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
# y b( ]# S2 i0 {但基友居然都说不行就只好自己硬着头皮再试试了。
$ F; f# s6 w" U' W在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。 W. P" P% D# V0 b% R
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
# |9 e B6 O. f/ i3 X9 N x这貌似就是传说中的mission impossible了。
: q+ A" m6 q6 r$ p; T: u& a% J" P+ _我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
6 c5 ~# A J" S" f2 s3 h1- X) l2 \& K) V
<img src=x onerror=alert(document.cookie)>.png
; o N6 ~0 [4 V8 t原来的文件名被这个描述给覆盖掉了。
6 {8 d3 @) v" l- |' b7 r, vpwned!
$ m! q( A/ m5 D8 x2 n $ i) t( W+ c1 K7 z
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
$ h' N; P# ~4 z9 j' n4 k到这儿,我觉得应该已经没有任何的阻碍了。
D' F9 G) d% R O可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
1 _0 g7 g* V4 i, U; g2 c( cwhatever!1 ~; V W. S: P l
我觉得这些已经不应该是该去研究的问题了。5 |4 p/ _+ R* I% ]$ A" ]
因为没有哪个网站和你有这么大的恨。1 C5 @0 n0 ]$ x W4 i3 S+ X
解决方案:
: v" ]' f; B1 L6 [) [# M全局-上传设置-论坛附件-帖子中显示图片附件-否+ ]5 W. p+ q8 r3 L) _' W
这样,就搞定了。
7 V- }! `3 E) z |