漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
! O7 [0 t c3 O9 v( o6 ?! G如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:2 ?; m$ y- t9 c- W6 q
6 u* h' `( Z5 |# a# {1, \! c% Z4 E( D: u1 E1 Z7 k
<img src=javascript/alert(1);>.png L {- r% j7 g9 ^- H, `/ N# x
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)+ ]% Y, Q4 r8 }4 r' ^. W
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。' `1 `- x8 v# g# n) K; {
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。8 E. M1 n- t: }6 U" ]) D- F
修改xxx.png为
3 G) d1 O2 d6 a. C5 h8 R/ o+ m) }
$ L/ y) @' K( f, K, w1
; h1 } r- o9 K+ K/ T<img src=javascript:alert(1);>.png
- S* V# ^ F3 H提交。
' i; Z# V- \+ O8 |$ ixss会被触发在第二个页面,也就是点击图片放大之后触发。
% P" I4 \+ Y, W0 H6 K; ?6 c* Wpwned!
5 @: u& q% s1 T+ y/ J 9 f, `. m0 ^3 r; X
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
9 d9 M3 ^) ^+ g5 s6 X) b因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
7 u* W2 y$ U) u3 j0 [, B虽然现在XSS很火,但我个人真的不是很喜欢这个东西。! h& ~' v) z* o) v1 x% d; H* M
但基友居然都说不行就只好自己硬着头皮再试试了。: ]0 E0 O0 t! r6 f5 V
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。1 s3 R" I* ]% N
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
7 D* E* r7 E4 q T h这貌似就是传说中的mission impossible了。' L& o6 {; O( @5 d
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:) t6 ?5 ~9 L* l
1) P9 i. s0 S! |; T7 |
<img src=x onerror=alert(document.cookie)>.png6 g2 g5 X( w$ ?9 H! m
原来的文件名被这个描述给覆盖掉了。3 G% W0 F- ]& |2 p# j7 h
pwned!% ^: N7 C* z6 |$ W2 P# }: a7 _
' @( l; q/ F/ {- b2 a0 M而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
# k% X* {. W8 d. h3 m. D' G到这儿,我觉得应该已经没有任何的阻碍了。" e- E2 ?/ z: X( P9 C T* `
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
4 \' d4 `8 y) K+ t, m5 Gwhatever!0 p& ?0 ]: M5 G& x, @& W- ~7 v h
我觉得这些已经不应该是该去研究的问题了。
( Y. p) k; }* Q! a$ G- X因为没有哪个网站和你有这么大的恨。: Q7 J0 p. O8 h( P: v+ R+ `1 T0 f
解决方案:
! L: I7 E3 f2 d7 D9 x+ r3 n全局-上传设置-论坛附件-帖子中显示图片附件-否
Y3 M8 a3 l) @7 M/ _/ v这样,就搞定了。
* m: F. }3 Y" b* F# T+ x |