漏洞发生在插附件的地方。说到插附件各位看官也应该都想到了肯定是文件名。因为文件名是按照本地上传的文件名来显示的。0 J+ x; h" G9 ?2 G
如果你的操作系统是linux你可以直接修改一个图片文件的文件名,像这样:& B; t q: x0 x6 m4 c
2 p/ O% Y1 p% H5 O- w/ Q5 i
1; D, |0 l4 [4 m0 h# }* z
<img src=javascript/alert(1);>.png
6 w- z b/ Z8 A# ^(这里的/在linux下会被转换成: 这个payload只有在IE6下才能弹起来,我知道你们都是高手 可以根据需要 插点高级的payload); ~1 [) Z0 ]) _! i4 Z* k. j
如果你的操作系统是windows,你可以上你喜欢的抓包工具(我个人喜欢用Tamper data)。第一次上传应该是抓不到文件名的,至少我没有抓到。
3 T0 Y4 s9 V! p1 V) j所以你需要在上传,插入,发帖完成之后重新编辑你的帖子来更新你的图片,这个时候抓包是可以抓到这个可爱的filename的。
2 E) h$ b* y" t修改xxx.png为
" D' D) A" K* k$ W+ b N
6 y7 A' A; \3 {! m8 R1( Y, g- [) G( b8 X( M/ e6 r3 z
<img src=javascript:alert(1);>.png4 i1 S3 S+ p: a3 j$ x/ K6 a3 m, t
提交。
6 b3 `7 z: V V# h( N: xxss会被触发在第二个页面,也就是点击图片放大之后触发。
$ Y% W& @1 F1 `; e9 Qpwned!8 C y2 l. b( R7 d+ f* |
" k0 k- R4 c8 z4 O9 h字符长度限制在80左右,过滤了” ’ / etc..(斜杠的问题我会在后面继续叙述)
* u" [ h1 T$ w/ d1 d" i. g9 h因为不懂XSS,就拿给自己玩的好的几位基友去构造payload都说斜杠过滤了,字符限制云云 基本上都失败了。9 }/ b/ F7 y" l `7 i2 v
虽然现在XSS很火,但我个人真的不是很喜欢这个东西。9 k/ N0 Z) ` ^" X0 V
但基友居然都说不行就只好自己硬着头皮再试试了。
4 f- a, ^& e( c( P" d; \/ Z$ U; _在尝试中发现反斜杠也被过滤时,我才发现这不是一个xss filter的问题。
% |, I: H# G$ F. T而是上传过程中,我们可爱的/和反斜杠在这里应该起到分割filename和filepath的作用 所以被杀也是应该的。 Orz..* N5 O7 t8 z8 c- W' x- E4 q
这貌似就是传说中的mission impossible了。
, O- [- u- ]9 \' e4 [/ i" g我们需要解决这个斜杠的问题。经过各种尝试最后迂回到了附件描述的地方。很没有把握地插了一个XSS payload.像这样:& e! Q# T* v6 {3 u$ Q/ S" S) @
1+ U; T( Q, B0 @4 I1 g
<img src=x onerror=alert(document.cookie)>.png
' i$ C* t. h. [原来的文件名被这个描述给覆盖掉了。6 p4 }0 v; e" p" y6 _) _- [8 p0 @
pwned!
" ?, \, ?# p+ F) R+ W* p* S4 h
3 W# ]9 ~; V C- k1 g. q1 m |而且已经可以带上我们的斜杠了(因为它已经不再是前面的那种情况了)
|/ ?: |; v) ]& T, x" I4 z$ }到这儿,我觉得应该已经没有任何的阻碍了。$ b0 }, j: ?2 J# O. i
可能经过测试,会有人说payload会在主页面测漏,有HTTPonly cookie,属于被动触发云云。
4 { ~2 v' |4 w, ^' ywhatever!' [ x0 M- R, P
我觉得这些已经不应该是该去研究的问题了。: o" d1 ~9 g5 ^* k E
因为没有哪个网站和你有这么大的恨。
8 S0 X& [; Y/ ^解决方案:/ e6 K) b0 \" _9 E
全局-上传设置-论坛附件-帖子中显示图片附件-否
% p$ _. n, T% A" C) a, H2 l) U这样,就搞定了。
3 X) {0 u, s0 L! ?" W5 C2 A4 a" i |