漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
# X! K- s2 x0 J& `: }如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
- W( W0 i7 |9 z) j- x4 E) c' d ( D H7 r+ j. [" G7 t. |+ K
1
2 p, q5 |3 N) @, J3 R0 L<img src=javascript/alert(1);>.png) u( r3 [* Z" F. [2 F! q; J# H, k1 B
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
& G$ p, Z' i' P- p1 m! T, f如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
! b$ m* m9 Y* Z+ j7 T. K! y所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。( a7 r# E6 X! `% c
修改xxx.png为
( e, p8 x) w V1 \9 P
4 p4 T0 ]* e. C. G6 X1
7 _$ G- _8 J0 ?% d s<img src=javascript:alert(1);>.png6 D! C4 b0 C$ \0 z" |, y
提交。
8 E& R3 u G3 a" ?. C6 ~1 Bxss会被触发在第二个页面,也就是点击图片放大之后触发。
: L, O Z1 \0 w; {+ k2 j# q/ Qpwned!1 w4 {7 h) f: }/ G( k
9 c' [# h! j: F" z, }. R% k- [
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
) r" V" Z4 m$ C& j) y5 Y3 B因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
, O/ K' i- N/ A# s7 {虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
' b# ] f' i, y但基友居然都说不行就只好自己硬着头皮再试试了。
* M7 [) H- ^- V. ^' e在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。! M9 q( a* d; K. w& e# o4 z, A0 [
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..1 f9 ^1 a' {' G
这貌似就是传说中的mission impossible了。 \+ `5 M4 h2 s- O& K7 y! b
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:7 D7 P- s3 k% t
1
. q/ U) Z0 q1 ~<img src=x onerror=alert(document.cookie)>.png
0 @5 X8 ?9 T# q0 l0 u+ ^" T原来的文件名被这个描述给覆盖掉了。; W x8 t# v! D; L8 j- D
pwned! k/ c O. n+ n9 `
/ A. B$ N4 E- P9 m
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
) t& h/ Z% f5 j. R3 J6 k到这儿,我觉得应该已经没有任何的阻碍了。
' o, s. H' W. _/ c- y可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
0 |* l( m/ \4 z; f7 D! \whatever!3 @5 q ?/ e' \% @5 m. j, D4 \' K
我觉得这些已经不应该是该去研究的问题了。1 o8 J$ K u' Y) H1 [& W8 y; t3 b& Q5 D
因为没有哪个网站和你有这么大的恨。
$ n3 H7 T; {# o, k解决方案:
& h. x+ X3 t( \7 ?全局-上传设置-论坛附件-帖子中显示图片附件-否' c0 L; @. E, O4 I# x
这样,就搞定了。$ v0 g8 W! j. b+ N$ v
|