XSS
原理
XSS 即跨站脚本攻击(Cross Site Script),通过构造代码(JS)注入网页中,并由浏览器解释运行这段JS代码,以达到恶意攻击的效果。当用户访问被XSS脚本注入的网页,XSS脚本就会被提取出来。用户浏览器就会解析这段浏览器代码,也就是用户被攻击了
微博、留言板、聊天室、订单等等收集用户输入的地方,都有可能被注入XSS 代码,都存在遭受XSS 攻击的风险,只要没有对用户的输入进行严格的过滤,就会被XSS 攻击
危害
- 盗取各种用户账户
- 盗取用户Cookie资料,冒充用户身份进入网站
- 劫持用户会话,执行任意操作
- 刷流量、执行弹窗广告传播蠕虫病毒
- 网站挂马
- 跳转钓鱼网站
类型
反射型
反射型XSS 是非持久性、参数型的跨站脚本。反射型XSS 的JS代码在Web 应用的参数中,如搜索框的反射型XSS。
如,在搜索框中,提交<script>alert(/XSS/)</script>
,触发反射型XSS
存储型
将代码通过评论等方式存入网站数据库中,当其他用户查看时,代码从数据库中取出,脚本代码被浏览器解析执行。并且,每次查询该数据都会执行一次代码
发包脚本代码 → test.php → 数据库 → test.php → 浏览器解析 → 代码被执行
DOM型
通过提交的数据修改HTML文档的DOM数据,实现静态页面修改
手法
构造XSS
<script>标签
<script>alert(/XSS/)</script>
伪协议
使用JavaScript:(伪协议)构造xss
如,<a href="javascript:alert(/XSS/)">click me!</a>
事件
利用发生的事件触发xss,特别是会自动发生的事件
如,<img src='./test.jpg' οnmοuseοver='alert(/XSS/)'>
<input type="text" onekeydown="alert(/XSS/)">
<input type="text" onekeyup="alert(/XSS/)">
<input type="button" οnclick="alert(/XSS/)">
<img scr='./test.jpg' οnmοuseοver='alert(/XSS/)'>
<img scr='#' οnerrοr='alert(/XSS/)'>
HTML标签
<svg οnlοad="alert(/XSS/)">
<input οnfοcus=alert(/XSS/) autofocus>
平台/工具
-
蓝莲花XSS平台
-
BEEF-XSS
-
Attack API 精通JavaScript攻击框架:AttackAPI
-
XSS-Proxy
-
XSStricke
绕过
Http-Only
大部分XSS攻击的目的都是获取cookie,但如果HTTP响应头中包含HttpOnly标志,只要浏览器支持HttpOnly标志,客户端脚本就无法访问cookie。因此,即使存在跨站点脚本(XSS)缺陷,且用户意外访问利用此漏洞的链接,浏览器也不会向第三方透露cookie。如果浏览器不支持HttpOnly并且网站尝试设置HttpOnly cookie,浏览器会忽略HttpOnly标志,从而创建一个传统的,脚本可访问的cookie
获取浏览器记住的明文密码
当浏览器判断页面加载后,发现表单中有密码项,就自动填充最近一次记录的用户名与密码,就像(或者说就 是)一次DOM操作,动态填充。因为是DOM操作,所以可以通过JS进行一次DOM操作,创建一个包含一模一样的用户名与密码表单项的表单,等浏览器自动填充后,将用户名、密码的value值读出
假设存在一个表单,域名http://example.com/xss_pwd
<form method="post" action=".">
<label