漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
- C4 i- z t7 G- o4 k如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:- \8 C, x. X) f3 z
, y+ o6 X/ p/ S$ X& @$ a% y: b
1+ e( g1 D# S9 E! f- y# Y
<img src=javascript/alert(1);>.png
( h/ V$ R$ `& i(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
+ \+ p2 y9 Y* c7 c2 `3 u& T如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。' x; C! v" N- a6 t i" r
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。) Q# O3 d+ F* f" ]9 S; d
修改xxx.png为1 \4 L7 N% M% }. M! o6 j- X
. a# o' J Q$ M9 Y
1: \ E1 {0 }3 a+ X
<img src=javascript:alert(1);>.png
( m: f6 P5 b0 A [ X) }8 [提交。
" [1 |5 D9 h! {* v. {xss会被触发在第二个页面,也就是点击图片放大之后触发。
, J2 H/ |1 q% q: R5 epwned!
7 Y- O' j7 G" ?4 l# q5 ~# q( ?
: m4 G- x3 g# @" S字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
) w3 S* u9 E. G' p v& B因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。8 } O5 s- Q7 r+ z
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。 E4 l# E( p8 k6 K; [
但基友居然都说不行就只好自己硬着头皮再试试了。
, q, }1 d" g7 ~8 U/ l) A& {在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。! o5 l v* M5 D% \1 w8 @
而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..2 y B3 I! h/ c! v
这貌似就是传说中的mission impossible了。6 A+ ~0 m k3 u3 d/ }/ U- s7 y/ J
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:# {+ H! u- ?: d4 F( M' z
15 Q* g4 T/ @$ v. t' z: I
<img src=x onerror=alert(document.cookie)>.png
8 N0 n4 z( R l; d+ h原来的文件名被这个描述给覆盖掉了。 L/ `. d- u) Y. R+ b* D" c
pwned!6 t/ L. N' ^4 c* P# e) q
' g# E' n+ d L0 O
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
+ Z) D O+ U8 Q: F到这儿,我觉得应该已经没有任何的阻碍了。6 d. O1 |- N' Q$ F( Z/ V/ J
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。+ g# ^0 v# u0 I9 @0 o6 }2 ^
whatever!
4 n& W3 g5 E' n- k0 {我觉得这些已经不应该是该去研究的问题了。
: e5 u( d. ?# k$ k因为没有哪个网站和你有这么大的恨。2 H; c! W( A* \" `( h2 y
解决方案:) H$ `; N0 h- m1 s
全局-上传设置-论坛附件-帖子中显示图片附件-否
9 f( O2 z7 W1 [9 y, P% y8 x这样,就搞定了。
1 `) }4 m0 \# E. J4 x: ]5 R0 ^- H3 S |