漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
4 s& C( ?, |- B' b如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
6 l% O( ^' R6 o1 _5 U$ P* [ , K! }2 w& `5 a% D+ _$ a1 q# N8 q
1
9 z+ J, a4 J( p0 Q9 `" a<img src=javascript/alert(1);>.png+ H9 g7 [% H/ E+ p+ Q9 Y
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
% E0 B# ?3 S& F7 N0 K! m7 ?如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
: y' e# f0 b+ e, B" u# ^所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。2 I. t6 R( H7 {; I; X ?/ v1 S
修改xxx.png为. T/ |1 u+ d; R: j/ q0 P
$ m# l/ c$ s+ N! s: d- U1
4 _% n% `: j' }6 e* Z: G4 C<img src=javascript:alert(1);>.png8 \2 r& `$ F' @- O
提交。
" y' S; B# {0 l- i lxss会被触发在第二个页面,也就是点击图片放大之后触发。
2 k1 D o7 `! M X# spwned!
% o8 z( M) ?: p8 A @ - N( ?6 \% t% m4 G2 ~% B
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
b2 Q" l+ F; }' a6 Q3 ?9 X4 t因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
# Q# R/ h) D& E: K% ]1 K/ l% f虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
6 T% p4 X3 a+ ?3 z. J$ e但基友居然都说不行就只好自己硬着头皮再试试了。
' Q8 p+ z7 r' |: E在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。& R) u9 `9 q9 Q2 i& I: |
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
9 U/ |0 I6 @2 k这貌似就是传说中的mission impossible了。! T$ H) ]' c! L3 ?6 Y1 ]
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:- `- k* r- O7 }6 t, l+ u2 X
1
9 x6 F2 T. N) c, s0 G2 R F<img src=x onerror=alert(document.cookie)>.png
, z% M0 a$ q9 k+ \原来的文件名被这个描述给覆盖掉了。2 H) P' U' g3 f0 Y
pwned!
" W* e: Q- }' K' c0 |6 u - b1 W2 B3 W# P) F; m& q6 j
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)- e7 J$ G+ J9 s! _0 _
到这儿,我觉得应该已经没有任何的阻碍了。
o, {5 n& _5 _3 |7 o8 V/ h可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
- g K/ G8 W# b$ s3 b( Awhatever!, p: W" h$ Y) P$ |) K
我觉得这些已经不应该是该去研究的问题了。# L9 _# ^3 h6 p) ]& M+ r: k! |$ G
因为没有哪个网站和你有这么大的恨。
4 H3 S" u% b4 h) `解决方案:( Q# ^! ^& u' W) B) d. n
全局-上传设置-论坛附件-帖子中显示图片附件-否5 n: q; s) _9 U. C. [' Q3 `4 f5 f8 C! L
这样,就搞定了。$ ^8 }# S8 o8 ~& \0 P! n
|