漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
# I! S' T% B! I如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:) p6 P/ d @# j3 O4 D
& H R5 i3 p( ^$ G$ `$ c) M- z. o- e; u; [1) o5 ~: f1 ?9 I
<img src=javascript/alert(1);>.png; D8 W; u: m0 X8 l
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)3 H0 G3 P7 |9 E8 w. F1 J: B
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。% B0 ~8 j' b8 Y c0 a! I
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
$ a+ n5 \9 `7 Z5 P修改xxx.png为
$ u4 t! t2 H6 E: V" f O1 g2 |( k i1 q
z1 t% V" s* u' j' D12 i/ p6 o2 M1 u [* Q% p! m
<img src=javascript:alert(1);>.png; S& g$ e. d" d: Y9 Y* g- N5 _
提交。
6 ^) o G6 |7 X9 d. pxss会被触发在第二个页面,也就是点击图片放大之后触发。
/ |* ]3 ]& S- X Fpwned!
# v' A: @/ @1 {; |6 F
6 \: N, l& M& R6 y+ u字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述) b0 i4 n. O! ~) ~4 l. N7 P
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
& E. D& G' Y) u9 i# g6 q虽然现在XSS很火,但我个人真的不是很喜欢这个东西。3 L8 |4 [7 x0 o8 ]+ h: o5 R3 o9 u( \
但基友居然都说不行就只好自己硬着头皮再试试了。
7 R' B2 I# G& p" l1 T( A在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。, M4 @% c' W3 u* m9 v
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
0 m) a' ~9 ?& s8 B6 u这貌似就是传说中的mission impossible了。/ ~+ `) Y, n. }! h* s
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
( V! i/ P# |2 `# i9 f ^1
) n, y/ w8 Y" n! z<img src=x onerror=alert(document.cookie)>.png
3 Y, {+ f& E) ?+ `- c原来的文件名被这个描述给覆盖掉了。
; C! d& @1 S" e: Ypwned!- {' d. h" e5 B4 u- W* D* r
4 d* L- U# U ]* V( }, w1 D
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)6 M3 h- d* J; j s
到这儿,我觉得应该已经没有任何的阻碍了。
; ^# |9 B" a7 ~0 V3 l可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。) U) b) P' H; t3 e. g) ?
whatever!' j, \# A7 w# i4 y+ T' u
我觉得这些已经不应该是该去研究的问题了。1 u8 Y4 _, {$ ~5 j
因为没有哪个网站和你有这么大的恨。
# c! q5 w( {6 j) r$ n解决方案:% k3 j W% q2 b5 W' R# `6 d$ I
全局-上传设置-论坛附件-帖子中显示图片附件-否% l/ m Q. d( q
这样,就搞定了。- E. ?$ _3 o, j' i" t. E
|