漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
1 ?: B/ Q4 J. p( }, q% a如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
2 e: K+ {1 v5 m / J7 z/ A+ [( e, D/ W7 u4 _9 a
1
4 i' t" V+ o' A# h<img src=javascript/alert(1);>.png
[0 R' Q7 z( f2 A+ A' g; \(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
( h; N C3 b' g如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
# Q; A, _. |: b3 C所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
/ @7 ~+ a6 ^1 _+ s修改xxx.png为$ M, M$ Q, ~5 Q+ m; F5 M6 R
. n* g, ]8 g# n k
1( o2 W2 C0 q$ P' A Y. w
<img src=javascript:alert(1);>.png
7 Q7 m/ }7 S* o5 V. j( X提交。
& `( T' @$ O+ J2 R1 g3 W* Wxss会被触发在第二个页面,也就是点击图片放大之后触发。
* J! u4 ]) S) @8 vpwned!9 m ?2 f# L, y9 W1 Y* S
( k) G) j8 O8 P: t字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)) d& N# Y5 L: u. H
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。) k% O% m/ W. j& j& @8 s( n
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
- @0 G. n9 k3 A/ {+ [但基友居然都说不行就只好自己硬着头皮再试试了。, e+ x! V9 h" \4 {2 w1 \: ]2 D H& m
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。# D; F2 ^1 C& {8 v( ?4 S
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
. o# I$ f' K7 |1 Y: h- j( W这貌似就是传说中的mission impossible了。
9 U! R! P* K- e3 L# n' k我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:) C/ H! T V+ ^4 o9 v, M' a
1
1 Y+ ?1 D5 e: q<img src=x onerror=alert(document.cookie)>.png
9 [& O' [2 c& s原来的文件名被这个描述给覆盖掉了。# k2 Z* q- d6 D' E0 R
pwned!3 R5 r# p, c, S2 q) j4 H
, F$ u2 u. a) E2 E3 T l# g! `4 j而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
- p$ d) ~9 m! }% t: X7 f/ W7 B到这儿,我觉得应该已经没有任何的阻碍了。; l( r* B% ]/ y: x! C: q+ ]# C
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
' c, ^9 r, f O: Ewhatever!/ A6 d# W8 o5 X2 A2 o
我觉得这些已经不应该是该去研究的问题了。% K; v+ R6 b+ j. k% A6 _% g
因为没有哪个网站和你有这么大的恨。+ U r, |7 Y+ p: V0 a
解决方案:
, |% y! Y- `/ c* m' s/ A) s, D全局-上传设置-论坛附件-帖子中显示图片附件-否
% X4 R1 d$ v8 [/ ^* b4 J- K# c8 M这样,就搞定了。
4 j" J% L" s" t1 p7 l, Z |