漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。& W# G6 V$ Q9 Z3 f
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:# c/ l b- j* f0 Z+ M" N
# P* y3 |2 i+ C+ w, j" O1
2 B4 V L; n7 D<img src=javascript/alert(1);>.png
: o3 U8 W- d) j) N(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
8 r4 w6 t) f6 N' F- s0 R2 f如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。) Z! i( N4 j: m( h* E
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
" ~% l) H9 `0 K3 J( Q" }修改xxx.png为* ~% S- B* V/ |! l- k- w
{. s- A# w" {* Y4 M1
' A, y; O' ? S" F9 A<img src=javascript:alert(1);>.png
# I% `8 D* D [! T提交。
% Q l0 v+ ?% ^( |. exss会被触发在第二个页面,也就是点击图片放大之后触发。
9 ] H. H1 J5 j% A B4 e& q& k. `$ \% Lpwned!) v" n- v5 |. o, U: g& l
7 n4 J+ @+ R4 }# O字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)3 I8 l) B i& H# ?7 B
因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。- d/ k( e' J5 C' w( s$ z" P
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。" `# T4 ?4 s+ B9 q
但基友居然都说不行就只好自己硬着头皮再试试了。
* Y6 k' h: E( c: l1 [: n. B6 g9 B/ `在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
3 U: X" [6 S4 W而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz../ d- N/ B% y! ]; l* @4 C7 }) V% f5 O
这貌似就是传说中的mission impossible了。
( h; R, c4 J$ }我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:8 n+ b' D3 O4 i; n0 y
1
( w* w4 O' S6 Y% w: t: ]<img src=x onerror=alert(document.cookie)>.png
5 n* H3 B8 T- Q' M/ h原来的文件名被这个描述给覆盖掉了。( K- p/ p- q9 \' L
pwned!% A' k6 S2 h; T3 h
8 X" B6 L O' `, ^, J9 J" B$ e
而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
3 ?) ~2 ]: r* P( x到这儿,我觉得应该已经没有任何的阻碍了。5 O% x7 X; O. k; m9 j$ P2 |
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
, I0 J$ {& L. owhatever!4 e Z! i: Q1 f/ h
我觉得这些已经不应该是该去研究的问题了。
0 ~, Y5 u1 B7 w% P# |( u$ {因为没有哪个网站和你有这么大的恨。8 z& Q- V+ x% h7 _9 N( U" y4 g
解决方案:: O8 O- X+ |" U# `2 x
全局-上传设置-论坛附件-帖子中显示图片附件-否1 S% P, v2 R( ~6 e0 m5 L
这样,就搞定了。9 `) l6 c/ x% m0 U
|