漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。
b! J9 l4 g2 u& {: x2 D z( p% t如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:
8 u4 }8 D: {* A7 I6 Z 2 q1 w! }8 `8 S' b
1, K0 ~- V" [: B1 z+ a, O2 c- U# o
<img src=javascript/alert(1);>.png, q, P9 f% {# ~# X
(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload)
, g- d, b5 u. D/ t如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。* H6 i5 k$ [9 ~' }8 K8 Y
所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。( J- _$ P+ }( K8 Q
修改xxx.png为
( T/ e4 l; [; M0 P+ m/ f ' { l* p1 H) u
1
' c6 T8 T# o: O<img src=javascript:alert(1);>.png% g7 M# ?- a. Y4 T% r/ _% Z) U( H
提交。
3 z6 L+ Q" J& \( Fxss会被触发在第二个页面,也就是点击图片放大之后触发。" ~ v: C k1 @2 R9 Z, V0 Y; k. j! Y w
pwned!
, T, ~) f1 z& B# i% ` ! r+ D8 s2 L3 b8 @$ P! ?, \
字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
* N: _. a9 M' Q+ ^因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。
7 ?5 i; r4 O* I9 y! h! {4 o1 f虽然现在XSS很火,但我个人真的不是很喜欢这个东西。
, f9 x4 S, p7 K但基友居然都说不行就只好自己硬着头皮再试试了。
f; d3 _! r: v( p/ ?/ |在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
8 X8 L1 h- Q; ?( W" \2 Y而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..- {4 \, z- [0 H' c
这貌似就是传说中的mission impossible了。- e6 u4 U P0 \; l/ t
我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:5 X, `6 }' F0 R* A X8 m5 s+ \% r9 F9 U
1# ] ?: k/ O2 \+ l) C( V( i3 D& F: ]8 u/ e
<img src=x onerror=alert(document.cookie)>.png
0 u( G3 w+ m) X' E3 ]! k原来的文件名被这个描述给覆盖掉了。. |0 R: ?6 X" u7 @, a! q
pwned!3 ~, b5 K! `( ?8 W7 R) {) X
: f& s! w3 X* T/ k8 B, n) d而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
# C9 J+ }* E- C# L到这儿,我觉得应该已经没有任何的阻碍了。' e4 Q2 n' Q4 |# [0 Q9 Q! j1 ?( b
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
. [& e" q& H( |# q; V) K Gwhatever!- Y3 _0 [% b. E
我觉得这些已经不应该是该去研究的问题了。
4 D2 @+ T: c& I4 G: U! _; e4 Y因为没有哪个网站和你有这么大的恨。! R4 r: J% S( e, [: ^& t4 |
解决方案:
+ n. ?; s* _9 Y% d; l; r全局-上传设置-论坛附件-帖子中显示图片附件-否
3 g. x; q3 G% b S# J# ]这样,就搞定了。
3 z2 p% p: v4 ^ |