漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。9 R: X7 K( y* P" Z
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:' g& Z% {! P; ~8 H" v( x- n( ? i7 P
' T) `2 Y6 r' a% z- h1 ^7 U8 U
1
* x% d; ^, ~0 P" h<img src=javascript/alert(1);>.png7 K0 k, Y( Y2 E7 t ^8 u
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)$ f; {+ N) `4 ~- [1 U0 G4 H
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
4 }& }+ w1 C# D所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
: @3 W- N: s. C! f5 s修改xxx.png为
3 B1 {, k% l7 b! M* }& I( [ ' J$ e: r( g0 e2 {( i$ x. w3 }
1* [" l. B& ^1 ?1 {7 b2 O
<img src=javascript:alert(1);>.png/ x+ o7 h L' @& p8 ?
提交。) { D( E4 j0 t
xss会被触发在第二个页面,也就是点击图片放大之后触发。
) Q$ g- l$ e/ J" Kpwned!
# Z% Y! P! K. q) \ # z& P7 a+ | \4 ~' y& w$ K! t$ G
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
. p( H5 l& M$ j2 W因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
0 K2 G: g" t- p) \7 s虽然现在XSS很火,但我个人真的不是很喜欢这个东西。/ n# Y7 B; M( o0 Z7 y2 z
但基友居然都说不行就只好自己硬着头皮再试试了。
. K8 W1 g& h5 T& a; A3 e在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
/ s7 x3 C" r$ ?6 U2 _- G; F而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz... Q. J* F- C" D3 Q. K- V, U) w
这貌似就是传说中的mission impossible了。0 i, X$ g, ?5 S/ |3 @( M1 K
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:
( t ^ \' V/ Z) D+ h* j8 O1
! R) Z# R3 E; c: o' J* n; B4 g<img src=x onerror=alert(document.cookie)>.png
. J/ M+ y2 u4 O) w- ]原来的文件名被这个描述给覆盖掉了。
- v8 ^! F! r# \/ c a6 _pwned!, F$ @/ j- g6 y1 a2 ~
* c/ W7 i! T. W% A( s/ a" Q2 `而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)! ]/ a2 u! i6 f' A
到这儿,我觉得应该已经没有任何的阻碍了。
; z$ X! v2 h& z/ Q可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。# u6 P/ A3 T% C) n3 R
whatever!* z. F2 }/ j+ I/ |
我觉得这些已经不应该是该去研究的问题了。
( H0 P: H& Y0 G% p7 w& a因为没有哪个网站和你有这么大的恨。8 d- u) S/ u/ j) N
解决方案:; Q4 p% @2 O+ z" u U
全局-上传设置-论坛附件-帖子中显示图片附件-否' @0 m- E X6 y
这样,就搞定了。1 b& r/ N; d7 @- t {' J D
|