漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
8 u9 G, C, s% a+ J+ j% w如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:' z2 M t0 F* D
, y* w7 t. x) k; n$ L" @; ~13 j5 T* O9 |, T3 w
<img src=javascript/alert(1);>.png8 p5 W/ c9 }) ~- y
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
3 n8 Z% j8 C8 I$ B/ I7 G如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。- ]' C% U6 r) c0 ?# b2 \ v( Y
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。2 _5 f6 z3 ]" ^* v; V2 Y1 N4 ?$ u
修改xxx.png为
* d8 ]$ d7 b/ }; B 8 d0 s5 x4 Y1 R. m4 d j: k9 `3 @
1! N) ^6 P6 n6 H# W6 K& k$ [% s
<img src=javascript:alert(1);>.png4 a8 @) P* k7 y# H. L6 n: Y+ x9 b
提交。. O. m) Y1 b" j
xss会被触发在第二个页面,也就是点击图片放大之后触发。 }) z" N5 ]9 [
pwned!3 U- a3 `4 W) C3 H+ J
/ ^7 @& l8 M0 {/ F5 h- o4 S
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)" h4 ]' e# W1 {+ u
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。& v+ |* A* K$ w( B; L1 ^9 Z5 N
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
0 b6 Y; B* E. z, K `! y7 x但基友居然都说不行就只好自己硬着头皮再试试了。
: w4 F1 Q0 J9 z( V- t; r/ T在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
! C' Y3 `0 `: v( K# Q而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..6 N9 p" G" @' i' V6 |
这貌似就是传说中的mission impossible了。" S8 p# T) x. G7 H$ ]/ o
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:' L8 g( u: S! c
1
: ^' J, R0 Y( }<img src=x onerror=alert(document.cookie)>.png
/ a% q" Y8 |, s原来的文件名被这个描述给覆盖掉了。7 l: k: C4 ?9 D- @; p: x* ?
pwned! ?1 h$ h+ `' W& G! `
7 n8 I/ q2 }& S7 M f# B而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
$ T- i3 B+ h3 i: m% B3 v2 p+ N. D到这儿,我觉得应该已经没有任何的阻碍了。. B3 \0 n6 ~9 C% a5 p
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。6 R/ Q N# Z, J3 k# _7 w
whatever!
' M/ ~3 A4 \ Z4 E7 m% J我觉得这些已经不应该是该去研究的问题了。$ M( k& Q( Z6 f9 r: V/ a* ?
因为没有哪个网站和你有这么大的恨。
2 C) ?; m/ z" y6 @ T" \! P解决方案:
# z) W& F% z% i& U全局-上传设置-论坛附件-帖子中显示图片附件-否
1 P, ?0 K8 m) x! W. x5 \这样,就搞定了。0 J& w3 f. D: u2 m6 n! ~
|