漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。2 x3 l( C" v2 l' X4 [
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:8 Y; M% @9 r' }# {$ o+ m3 X
& ]" i% u& B5 o9 B/ r9 q. K1
& W, O5 n7 i+ `% R- \+ n! L3 w<img src=javascript/alert(1);>.png0 G1 m" H W2 r0 c9 B, P
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
4 q- w; [4 {9 `0 n) A" C- ] W如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
8 H1 ^: D/ K4 R4 `5 W+ _所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
3 j' N9 S {& e! `修改xxx.png为
; s1 r/ [5 N, S0 F0 ~1 N/ T / N& o, I( L" b! X5 U
18 ]3 \$ t- v% W$ r0 d
<img src=javascript:alert(1);>.png
3 y' {/ k2 Y- M8 ~ _8 ^提交。4 g4 R [/ e6 O1 w- E; S
xss会被触发在第二个页面,也就是点击图片放大之后触发。
" s) J9 h% d( @ P. l Ypwned!
4 {" A6 O1 w( e) C% a/ X # P2 s2 D& m- M9 [5 Y/ V% R
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
% H7 h* P& c; b* Q9 p, Z2 h0 h因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
f& f2 z8 `2 ?3 L+ p虽然现在XSS很火,但我个人真的不是很喜欢这个东西。1 Q) X4 B( A0 U3 G: p/ l( m4 s C
但基友居然都说不行就只好自己硬着头皮再试试了。
m/ b( c6 T/ D( O' m) G$ V+ F在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
: [! A, h8 N, F而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..
, E# G3 \- w! P0 w7 `这貌似就是传说中的mission impossible了。
) U' w9 r+ n* P0 o, I8 X我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:* u& w# Q# ?9 u& W
1' \% B# g" l3 ]! }) x
<img src=x onerror=alert(document.cookie)>.png* |/ m3 ?: x2 r+ |( t% Y
原来的文件名被这个描述给覆盖掉了。
7 O. A) }, p+ t& g' D# ?pwned!5 d/ R e# O0 d* a
6 Z6 D! D: B6 C) a/ A' z2 L
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)# D. W6 \2 n6 f( U/ o& {" D) q
到这儿,我觉得应该已经没有任何的阻碍了。
4 f% D2 F' l& [可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
0 l2 b5 u$ l) C" a1 [& u. z4 p: ewhatever!$ e" l( _ H0 }; s# x7 s
我觉得这些已经不应该是该去研究的问题了。. P3 j0 x" G" n2 s* I6 B; y
因为没有哪个网站和你有这么大的恨。# n( `: l+ T6 \1 o
解决方案:7 D3 M* F! F3 ] H! W+ A8 w. {
全局-上传设置-论坛附件-帖子中显示图片附件-否
! S) t; t+ ]& G( O1 S1 R) L这样,就搞定了。
( K1 s! X% T7 T1 }* E |