漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。0 F% P% Q& P% g: L: K
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
_. o' k; m. z2 ] , ~: D6 d8 X, h" F+ L8 m
1
% _9 M1 y9 g4 N1 ^- u: k<img src=javascript/alert(1);>.png
0 q& }, Q. _' y: ^8 N+ t* s& g0 w(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
' Z: i7 i. ~. d' o6 V" |如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
+ `; o; [/ r3 i- W7 q所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。3 j9 q0 s c3 b) _& d) K/ Z1 w
修改xxx.png为1 C; `( h8 A& f6 z: F: S
5 e' B, A% Q1 U) {8 r! U) M M2 A1$ p# n2 G$ F: ~6 _
<img src=javascript:alert(1);>.png
( W; K: c# f- ?6 [提交。. H& B* `0 q* S3 X% }* ~
xss会被触发在第二个页面,也就是点击图片放大之后触发。
4 p. w3 P1 N* W3 Xpwned!" e, W, x/ L3 X/ [
( D! H1 h& p' d! J+ V2 A @6 c% N
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)+ i8 n+ S) v% l! @' j9 S& B
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。6 ?8 Q/ q4 A ~7 f/ ^# G9 E
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。! ?# h- A$ R/ A( B8 ^
但基友居然都说不行就只好自己硬着头皮再试试了。, T' P, t$ m1 [- ~8 V+ t5 w
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。+ t, k1 C7 y2 x, x0 U
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..! P D/ L! O# C. X
这貌似就是传说中的mission impossible了。
5 f- b `3 j& p6 r4 C我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样: ~. C0 @# `* e! t# v& w
1
4 N- x2 X/ ^- Y% m' a( X% ?<img src=x onerror=alert(document.cookie)>.png+ T7 O. v* R0 Q+ v2 J
原来的文件名被这个描述给覆盖掉了。
/ P, Y$ C; i3 i# cpwned!9 X% A3 B1 C- j
* m) g$ y4 E2 q. V& W
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)1 n4 k3 h* m5 m' E1 @! ]
到这儿,我觉得应该已经没有任何的阻碍了。
/ ]1 A) |9 Y- @9 v" ^可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。% }( A3 v c4 {7 r$ A
whatever!
1 l: b8 Z! f! n) F9 h4 ^+ B# Z我觉得这些已经不应该是该去研究的问题了。, `6 I: C/ |/ [4 p; I9 Z
因为没有哪个网站和你有这么大的恨。) f4 D# D) D+ k/ w+ _
解决方案:
/ g- R$ d2 P% h* S全局-上传设置-论坛附件-帖子中显示图片附件-否
* u/ c0 k& w2 {. @3 m6 H% p这样,就搞定了。
~; l2 w% f A1 j3 b+ i3 x& m |