漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。 x9 E; @& @* F: _8 u$ E3 t" R
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
; ]5 c' o. w' g. Y7 }. `0 q- k" O
" ~: g5 {: T* n5 P6 m1- m M5 l2 J* _9 \% C
<img src=javascript/alert(1);>.png5 n! l5 D2 ^5 E3 K6 C* B
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload). t! r$ Z* U0 x* d
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。4 r7 t# U3 Y0 l. O
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
9 o$ d: D3 r/ s# ?2 U0 ^修改xxx.png为9 K9 r% S, U' t. l& h* Z# E: }; k5 f
' ^3 ]& K% V# b9 R1# [8 {0 q- _8 A. n+ q
<img src=javascript:alert(1);>.png
8 b6 q' P# B# x7 W提交。
0 {$ N6 Q6 X0 u7 G) {' g) B* a3 ?, g0 nxss会被触发在第二个页面,也就是点击图片放大之后触发。/ ~: f' j6 ?9 k5 s
pwned!$ h, d, h2 c$ {: T# M% w( N$ [
; U+ e/ ^3 _3 `% A' k
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
: S L; J$ u" k$ p* @8 p因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
- `3 w6 F3 n6 E+ _# B2 d; T) }/ x' e虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
- @& ?. a7 G% i但基友居然都说不行就只好自己硬着头皮再试试了。% L/ i6 @( k: O+ C
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
1 ?! A& Z+ B! n) q! ?: q5 A而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..$ \3 M' U. }2 [, O
这貌似就是传说中的mission impossible了。3 C( q0 @0 e3 y0 N8 V
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:& K2 k* s' Q. g
1 j$ `8 G k1 v+ ]! q, ?+ c% U
<img src=x onerror=alert(document.cookie)>.png
7 }& f0 V2 r3 Z0 v- K- F原来的文件名被这个描述给覆盖掉了。
8 D% Y" b, d) U' w- j5 apwned!8 q! D% u) T# ]+ m' X( }" m a
5 @9 t1 O E3 P$ ?4 Y% t! I而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)6 m# ?7 c: i6 l8 \0 T* ?
到这儿,我觉得应该已经没有任何的阻碍了。
# n3 j. L+ ^2 q/ b可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。. {& G$ T1 K3 o
whatever!1 _" V3 }+ t7 J/ i1 A, a$ B
我觉得这些已经不应该是该去研究的问题了。: n' @$ m# Q+ v
因为没有哪个网站和你有这么大的恨。; f5 ? Y- H2 S3 P: M
解决方案:5 V; K% ^. p/ q v- I& T2 r+ k
全局-上传设置-论坛附件-帖子中显示图片附件-否
1 y Z; d1 ]# ?这样,就搞定了。& u& a2 O7 \5 b9 S' a4 }
|