漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
: M( _6 Z/ d# Q7 x5 Y如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
! S+ z+ \" j- o7 G* u" D : ^5 i# |" U! |1 g, u9 B% c4 j, `& r4 d
1
' [) i0 o: O- V" s/ A' {/ \<img src=javascript/alert(1);>.png5 d) c/ O1 a$ A4 W$ I+ p
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
/ p d# C! {2 T( {0 N如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
% K o2 X/ t9 ?+ t- f所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。* [/ f7 R0 x- w
修改xxx.png为
& Z5 I2 P' d" z# R; s$ L
; n: L/ Z; ?* Z f% ]1
6 s2 A. o8 k( ]+ |<img src=javascript:alert(1);>.png8 _! K1 ]% v& w
提交。; g- K; F. L3 K3 |1 n2 X& e
xss会被触发在第二个页面,也就是点击图片放大之后触发。
2 W- G, o2 b1 y) b; Apwned!: q, K1 L2 D @5 Y' R/ Q
- q; @. F P! y2 j9 u$ \- |. o
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)8 E# G# C* {6 X8 ~
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
: S2 |, y; V; K6 `7 j虽然现在XSS很火,但我个人真的不是很喜欢这个东西。$ M3 Z0 v1 z) l( u
但基友居然都说不行就只好自己硬着头皮再试试了。
6 S' z* k; t( `: o Y在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
: X" ]/ p& I1 |. S3 H4 E, \: b/ x) F而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
8 R4 E& z1 b/ ]5 B; Q- \9 |- E8 S* K这貌似就是传说中的mission impossible了。" h: I' ]8 \' F% A; ]
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
$ @- G" ^. `. j5 s2 f- E1
* X* [! V) N7 D$ @* n, a8 ]% o<img src=x onerror=alert(document.cookie)>.png. O1 `9 S2 r( ~
原来的文件名被这个描述给覆盖掉了。* [$ \9 w, R6 C: G/ f, z2 p, q9 v% W
pwned!
5 i0 C& B5 f6 R6 A
: l$ }- q( t/ q. k7 P而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
# n$ C" b, U# C- A8 v* ^+ z到这儿,我觉得应该已经没有任何的阻碍了。7 ]* k$ |) L: I
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。0 x k4 Z1 ] z, ~: N
whatever!3 y- A1 S \/ O; Q7 y3 R# ]; p/ |
我觉得这些已经不应该是该去研究的问题了。! M) q& Y9 z' Z7 {; \; A9 L" e
因为没有哪个网站和你有这么大的恨。& a' d0 l- M$ Q% g E. A9 K$ Q7 P1 V8 V
解决方案:
" Z4 L* x' p: l全局-上传设置-论坛附件-帖子中显示图片附件-否1 [7 H2 v) A% _9 p
这样,就搞定了。
* Q- g) L9 O" X |