漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
- a% r* g6 {& o" k2 ?如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:) A. m( b. Q& T6 p ]8 S
+ A: R2 U% v$ S9 O8 N1! q% e. ^0 W, D: O& v7 ?
<img src=javascript/alert(1);>.png# x4 R' L( [" O$ a2 K5 A1 w
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
+ N1 p( g4 T) t如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
% O" X+ d! C5 x1 Y0 r所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。 S9 l* g9 d# \& `- f* z' W( B- O% y% Q/ G
修改xxx.png为
! k( ^% V; L5 L' R$ S7 }" W 6 e7 R$ I# k" {- T
1
K/ d3 L/ m& o. n) |& _7 }5 P% O<img src=javascript:alert(1);>.png* }: P$ Q0 l6 s7 K0 @
提交。& X# u0 W& c4 G" @* L" q/ r
xss会被触发在第二个页面,也就是点击图片放大之后触发。& m7 p% |$ c; ?
pwned!
, E/ v- x, M) K/ V. a ; S' I: b& I: _+ Z x5 F
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)! W1 t6 G. x' K8 j! b2 S! ~: _
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
; O {0 m2 G, ]0 V h: J$ K) Y虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
. c1 s9 w0 }$ ?$ D5 G7 `但基友居然都说不行就只好自己硬着头皮再试试了。( t8 i9 K" u& Z3 e/ H9 K) A
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。. ] `7 K9 f% }7 ^
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..$ X0 T7 e, U7 u* }3 k* C
这貌似就是传说中的mission impossible了。
2 Q8 r% U0 B e6 \- l% ^: _我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:& {& H8 t) V, ?0 k' q$ s' D
1
1 ^6 H2 u: W% u: L- i<img src=x onerror=alert(document.cookie)>.png8 E" `# _) U6 M/ o& @. |
原来的文件名被这个描述给覆盖掉了。
- S# P, t! o6 {# ^, D/ u3 Upwned!/ K6 U: d* c" J g
- ^3 z% o; W/ v, ]7 p4 b" C而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
/ Y& w9 A2 N; `7 m到这儿,我觉得应该已经没有任何的阻碍了。0 }0 j* T9 _# x! L9 S
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。0 T3 {( u8 U- V3 d5 T
whatever!5 w9 h: j9 s5 r- O! W* j2 u/ e
我觉得这些已经不应该是该去研究的问题了。1 o2 B9 w8 G6 B$ ]5 E8 U$ @
因为没有哪个网站和你有这么大的恨。, X4 f- L' H4 [4 H6 L1 Q) l
解决方案:4 ~- e2 x4 ^2 y+ K
全局-上传设置-论坛附件-帖子中显示图片附件-否9 y4 A9 ^( ]4 t' I S
这样,就搞定了。
( M2 N1 j4 o4 g: f |