漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
5 J9 ]6 D" `& G. _: H+ Z8 f/ }如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:& t4 h! z- Z! i9 R
+ n/ O2 e# Z S3 H, B8 a17 u! c; u0 @+ G- K7 K
<img src=javascript/alert(1);>.png
3 w m) F; k2 x0 r4 B(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
% i5 E ?4 q8 r9 H4 u如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。4 B6 A2 s, i$ K
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
+ V* Z( l- v8 a& q修改xxx.png为
' F& |! q4 L% J1 t2 F/ L: F$ ~8 l
. f2 ?' V0 \- U' c ]8 I! G# W1
, W) P% X% P: z7 ~6 m2 Y" N, ?+ Q<img src=javascript:alert(1);>.png
" @2 }& x f# ]/ X提交。: n2 R K. _4 J$ H- [
xss会被触发在第二个页面,也就是点击图片放大之后触发。, S7 U3 n( X+ y; i0 ^3 \
pwned!
: X4 ~0 Z7 n2 n - @( p: t$ ]) u# t- N
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)6 q: e7 I+ O9 }7 ^! m
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。% L& w2 ` w' ?& x+ E& S
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
2 W; _2 @$ n: e6 y, i但基友居然都说不行就只好自己硬着头皮再试试了。
' q2 X0 c& l$ N4 o在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。3 y; ^6 T. O. o/ E0 C
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..' J( y0 R! L j& J# a5 `! f& G
这貌似就是传说中的mission impossible了。$ T: I0 j+ q- k0 |: D
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
1 J1 s3 J/ [) |: J/ k) v3 `: J16 D9 A. `7 p" b. ]
<img src=x onerror=alert(document.cookie)>.png1 y7 e! |. w* U$ a5 _" Y+ |& ?' N
原来的文件名被这个描述给覆盖掉了。
0 v- w, O$ e8 a) e0 ypwned!
2 |, u; L4 n# r/ {
$ D6 A: o2 D( M' [/ i" B5 ]' [% j. O `而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
% S& H4 ~$ \5 u, V到这儿,我觉得应该已经没有任何的阻碍了。9 v# X% ~+ [) {8 E p
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。% L& p3 x! ^: o8 K# ?/ `6 |7 q
whatever!
/ e8 u( ^& K. p! u! l我觉得这些已经不应该是该去研究的问题了。 W. u. P" ~0 ]7 E
因为没有哪个网站和你有这么大的恨。
9 }% ]6 ^* V$ N6 r# x2 t解决方案:& m5 B, o" S. U, V; U
全局-上传设置-论坛附件-帖子中显示图片附件-否' q, K0 |8 x0 ?' v" l8 t! K7 o
这样,就搞定了。
1 l7 n4 ^/ @. F; ?0 y5 K |