漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
: L) G5 r9 `& A: w9 h如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
% b3 p$ p$ }! O 3 T2 m# ?0 z5 Y4 m& S4 U
1
x: ^, i) i* a9 I* k<img src=javascript/alert(1);>.png/ P+ {) m% q8 n' ~, S/ B1 p
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
7 ^, C5 ~, u. S$ \- S: b) `' ~如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。; |) H8 I$ } k; t9 x3 @' H; f9 ?
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
& t, r3 I. [4 f n9 w o修改xxx.png为
6 f; D* U( o- p" [" \# d- s) I . O8 r0 p: A8 q( e
1
) L2 R" u; m1 D0 ~$ `<img src=javascript:alert(1);>.png
4 K5 R: T) i0 D$ w( \/ P2 n/ k提交。+ |5 \& D W/ n. u( r/ B9 z
xss会被触发在第二个页面,也就是点击图片放大之后触发。
% [. Y% w' W/ g1 upwned!- g+ L8 x" j' E4 b4 i
: p0 ] \5 ` g- d4 K字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)- _8 F/ q- V) |& Z' G" N- p
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
. u; u! m. C' u. z8 [8 W9 c7 d0 l8 d; ]7 O虽然现在XSS很火,但我个人真的不是很喜欢这个东西。" J2 ^. O+ m' u
但基友居然都说不行就只好自己硬着头皮再试试了。+ T8 S& ^% I. w4 j* l4 w
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
* z4 [1 r( `2 b T1 a而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..3 e s# o- G. H, }- S
这貌似就是传说中的mission impossible了。
" F* ?) Y7 g4 \2 n' Y我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:9 L8 M9 E$ H3 ~: y) A! z K
1
- g% ~) C4 b' l9 U<img src=x onerror=alert(document.cookie)>.png
; ~1 @) |+ d. J4 ~6 ~5 E' }6 z* [原来的文件名被这个描述给覆盖掉了。5 _( `. K2 ?* L
pwned!
\$ X) I& Z9 l) u: U, i & j1 x! p5 [" [! i
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
3 m- |5 o* ~2 y/ X; C/ q到这儿,我觉得应该已经没有任何的阻碍了。
3 a: C8 U( Q: E8 I可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
: t$ q, r- ?$ d: b: J z6 n; ]/ }whatever!9 g& z+ }# }# c& k) F3 X
我觉得这些已经不应该是该去研究的问题了。
& w9 B# g4 U) Q( @" r, S因为没有哪个网站和你有这么大的恨。
! l3 T! j6 C- U( n: o4 O3 _解决方案:1 c3 L7 K M G. j; y, m
全局-上传设置-论坛附件-帖子中显示图片附件-否( G( t+ T: T/ r
这样,就搞定了。
; _; H+ R5 A- i! t, w+ r( ? |