漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。! l* k9 P$ T& ?
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:+ Z! h$ _9 C+ ^9 M3 b7 e
6 Y; L! {% g2 I& e) J5 ^- B* Y17 \7 [3 z# f$ y* s$ N: v
<img src=javascript/alert(1);>.png
/ P+ |1 v8 y- X0 T6 u(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)7 r! q! R6 u5 u6 e/ R
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
: ^2 T6 o: x- ~9 R- n$ J所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。7 G/ @ m8 `4 V& s0 ^
修改xxx.png为
' y! d4 U2 P1 d3 R1 B" J# J ; v5 A$ [# L9 p1 R7 Z6 E% v
1
" A! o) t" H& \$ m<img src=javascript:alert(1);>.png
' U4 R* E# F8 B提交。8 U! Y2 g% N( x$ W1 T8 e
xss会被触发在第二个页面,也就是点击图片放大之后触发。1 ]; V) ~$ O4 W1 C- r5 c
pwned!: T& @: k) x U {3 v. S
& ~) g% |1 X/ Q0 i D
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)0 z( S/ J6 u- E7 n
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。8 i3 ]( B7 ?2 I3 V
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。- k) G5 J4 X$ z. K4 b" S# W2 P
但基友居然都说不行就只好自己硬着头皮再试试了。
! I/ T2 b0 \3 O1 v6 u5 q在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
+ [2 I& S- w+ Q* H% H; s* e3 m而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..' J0 T$ y* \ U8 _9 F7 \
这貌似就是传说中的mission impossible了。9 t4 x7 G. m' e
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:( Y9 v' ^$ m1 r- N) g6 S: X
17 g. K% H1 K2 q* Q
<img src=x onerror=alert(document.cookie)>.png
" _( m0 W! p9 x, D0 D8 |, G原来的文件名被这个描述给覆盖掉了。9 x) b' E* T6 H: |: F" W
pwned!
; I. P* `1 O7 N ) V% M* I6 r, ~5 {& I" p" Z
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)7 q5 D& q' ^1 l& M- S2 B
到这儿,我觉得应该已经没有任何的阻碍了。& w ~& m! y @" A9 C/ r
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。8 d3 L$ [3 Z/ B& I; r4 {
whatever!/ w; J8 H' U& `4 I
我觉得这些已经不应该是该去研究的问题了。
5 F9 r$ q* q- c8 ?因为没有哪个网站和你有这么大的恨。( K9 ]& S0 ]5 E
解决方案:& @6 j, S! O- C+ a9 G \ f8 Q+ T
全局-上传设置-论坛附件-帖子中显示图片附件-否8 h& {5 n% R! ?: p2 S0 f8 W: ?8 ?
这样,就搞定了。7 c! u, R% Q% v- y. ~- [7 K3 _6 r
|