漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。5 p. c- a$ e5 ~1 s- O7 \
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
3 _3 V# u* Q/ m& v' A+ {' d( T
3 l9 N+ S6 s+ O# A1
: C4 f- P: }! i$ y' e/ H<img src=javascript/alert(1);>.png
0 F7 R* H R0 t5 n* d# y(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
, G' w# x/ ]% }8 Y如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。% ]5 Y A; e4 W/ |- Q( i# s
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。; v1 d% ?. u- R. N+ f# g" [
修改xxx.png为
6 K2 V* a4 n$ a1 o I
$ d2 c- z' `$ g% m1# t+ \. F5 C6 \% C& K8 Q
<img src=javascript:alert(1);>.png0 ]; J+ i( \' g2 T* @0 ?
提交。
7 V: p+ c4 L) O$ h* l4 T" O" }" axss会被触发在第二个页面,也就是点击图片放大之后触发。7 O& O8 s. I! M4 C4 l) L
pwned!7 o% k l2 V ?
6 X: r( {% {0 ?6 [, j
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)2 d' I; B' l# B# a' i8 g% y
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
+ u' }& j' S# ^( C虽然现在XSS很火,但我个人真的不是很喜欢这个东西。' q" c0 e2 J% h
但基友居然都说不行就只好自己硬着头皮再试试了。. C* m8 z$ w( g( X! n
在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
8 M/ [7 J: H6 q4 @$ Y而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..- c+ h5 \) X2 c0 v7 v* }
这貌似就是传说中的mission impossible了。
5 Z% A3 _. C. E# n; r5 a我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:3 ^* h& ?& e) m! ]5 J8 k# a# [
1
! x ]+ M; U& |: B" k/ P( i2 n<img src=x onerror=alert(document.cookie)>.png
* A* J- Z3 q2 C原来的文件名被这个描述给覆盖掉了。. U# z0 S; Y: ]& X# G H
pwned!4 z7 @3 j" k; e. _* L
2 y+ Q" h4 y% b# s' `
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
9 d: i3 j' f% i1 S8 o$ G到这儿,我觉得应该已经没有任何的阻碍了。
1 q) A7 ^6 r0 T& g! i可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。1 x/ _* z7 b2 s" K, E# i1 ^, w
whatever!
. ~# @2 B M2 a# \' q+ T我觉得这些已经不应该是该去研究的问题了。% }& L' M8 P5 h( N# ?% ]. _0 L
因为没有哪个网站和你有这么大的恨。
1 `% E; N" w# J1 n' w C8 Q, ^解决方案:
& s& X5 v! g# F& X全局-上传设置-论坛附件-帖子中显示图片附件-否
8 G! N' q" }0 k0 m这样,就搞定了。
$ a$ c5 V4 E0 P J B9 L6 K |