漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
4 N4 q: }3 ~. S) t. ~5 l! D如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
% F: k3 Q; D; ?/ Z7 S/ }, y' x S 5 \) Q7 L3 ~# E! s( v
1' p0 o# K! B* @$ D
<img src=javascript/alert(1);>.png
; L3 P* h! k% ^2 y(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
6 t; c# ^2 j" o" y5 F2 ?8 G如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
- K, }5 W& x& e) x9 q( } ^所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
& y3 p0 S9 B5 f2 I t5 ^修改xxx.png为
; u5 I r! m$ T: j( u- A4 j4 Y6 n
3 c* o" Y. a, N, W3 T1: W( }: H4 ~* p7 ?# j% p/ n
<img src=javascript:alert(1);>.png
# Q: v! ?! E$ P提交。3 a( |. x, A6 v: D2 D
xss会被触发在第二个页面,也就是点击图片放大之后触发。
; ^* g7 s; q& i4 [5 M" p8 P0 S2 Jpwned!2 J1 f w" i" K/ X5 H
1 I4 G* T$ \1 S" |5 W2 O: [字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
; d$ e" s3 B9 u, q, H t因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。2 X0 w; F' ^" q& _
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。) e5 u4 j8 I; @' w8 f& w- i
但基友居然都说不行就只好自己硬着头皮再试试了。
! q4 j9 u3 l _9 P6 [4 @6 ^在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
! C8 h, B. c X9 s* v. d而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..: f$ z4 f0 b. G6 a
这貌似就是传说中的mission impossible了。+ @6 G+ Q- w3 |) E& P1 S: E, v
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:5 m# D" v( Q# A( j4 h& h
16 D3 ^3 a: ]' @: @: {, u
<img src=x onerror=alert(document.cookie)>.png
5 N r$ W( e2 x( C- a& \' k5 R原来的文件名被这个描述给覆盖掉了。$ n: N z& [9 t ~4 D$ X5 ^5 g+ Z* q" e
pwned!
7 S: m2 u2 }5 P) Z , _, F1 C2 {6 @
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
0 k; L& [' A4 Y. B5 [6 r到这儿,我觉得应该已经没有任何的阻碍了。
$ S% c U* u9 g0 G# u可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。9 f l: L- M7 Q; j3 `, B
whatever!2 _- g$ f" n0 U! W2 A
我觉得这些已经不应该是该去研究的问题了。
& x2 y0 b* _2 S U因为没有哪个网站和你有这么大的恨。
' D, O0 i( k0 p0 Y! u' r解决方案:
! h& R9 G) M! W8 {0 W全局-上传设置-论坛附件-帖子中显示图片附件-否# _% M+ t8 [% K% {& i0 N
这样,就搞定了。/ }' O6 J: M% N" a, |
|