一、XSS 破绽简介
XSS(Cross Site Script)即跨站脚本,攻击者通过在指标网站上注入歹意脚本,使之在用户的浏览器上运行。利用这些歹意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等。总而言之,前端能做的事件它都能做到。XSS 可分为反射型,存储型和 DOM 型。
二、XSS 分类
反射型 XSS:反射型 XSS 也被称为非持久性 XSS,是当初最容易呈现的一种 XSS 破绽。当用户拜访一个带有 XSS 代码的 URL 申请时,服务器端接收数据后处理,而后把带有 XSS 代码的数据发送到浏览器,浏览器解析这段带有 XSS 代码的数据后,最终造成 XSS 破绽。
存储型 XSS:存储型 XSS 又被称为持久性 XSS,存储型 XSS 是最危险的一种跨站脚本。容许用户存储数据的 WEB 应用程序都可能会呈现存储型 XSS 破绽,当攻击者提交一段 XSS 代码后,被服务器端接管并存储,当再次拜访页面时,这段 XSS 代码被程序读取响应给浏览器,造成 XSS 跨站攻打,这就是存储型 XSS。
DOM 型 XSS:传统类型的 XSS 破绽(反射型或存储型)个别呈现在服务器端代码中,而 DOM XSS 是基于 DOM 文档对象模型的一种破绽,所以,受客户端浏览器的脚本代码所影响。
三、XSS 破绽利用
1.Cookie 劫持
常见的 XSS 破绽利用形式有 Cookie 劫持,个别 Cookie 中保留了用户的登录凭证。如果 Cookie 泄露,则能够间接登录进用户的账号。
具体的攻打步骤:
- 1. 用户登录
- 2. 攻击者坑骗用户拜访带 XSS payload 的 URL
- 3. 用户申请攻击者的 URL
- 4. 在用户浏览器执行近程 js,将 cookie 发送给攻击者
- 5. 攻击者利用 cookie 进入用户账号
通过 param 变量注入 xss payload,xss payload 加载近程脚本。
脚本中将 cookie 发送到近程服务器。后续也能够在近程服务器的 web 日志中查看到。
在不确定是否存在 XSS 注入点时,防止 Cookie 劫持的办法:
1. 给要害的 Cookie 植入 Httponly 标识;2.Cookie 与客户端 IP 绑定。
验证给 Cookie 植入 Httponly 标识的成果:
2. 结构 GET 与 POST 申请
通过 js,让浏览器发动 GET、POST 申请,实现各种操作。
结构 GET 申请:通过插入图片,图片的 src 为 GET 申请的 URL。
结构 POST 申请:1. 结构 form 表单,并提交;
2. 通过 XMLHttpRequest 发送 POST 申请。
3. 钓鱼
通过 param 变量注入 xss payload,xss payload 加载近程脚本。
脚本中结构一个登录框,表单提交时将账号密码发送到攻击者服务器上。
4. 辨认浏览器及插件
信息收集用户的浏览器版本信息,扩充攻击面。通过 js 读取浏览器的 userAgent 对象辨认浏览器版本,查问 navigator.plugins 对象获取插件信息。
因为破绽环境的限度,包含辨认用户装置软件、查看用户拜访网站、获取用户实在 IP、蠕虫等利用形式不做复现。XSS 结构和绕过的技巧也不做阐明。可自行查找做理解。
四、XSS 的进攻
进攻 XSS 攻打的计划,次要有两种,1. 输出查看;2. 输入查看。
输出查看:对传入参数进行格局校验,并对特殊字符进行过滤或本义。因为输出数据的应用场景不同,过滤或本义可能会影响理论的业务应用。同时 XSS 攻打产生的地位并不是参数传入的地位,可能存在脱漏。
输入查看:对返回给浏览器的输入后果进行 HTML 实体化编码。对 JavaScript 输入的用户可控数据进行本义。
此外还能够应用 Vue、Angular、React 等前端开发框架自带的 XSS 防御机制。
DOM 型 XSS 的进攻须要留神,触发点可能不止一个,须要对每个地位都做编码解决。
在 script 标签中产生 xss:
在 document.write 输入到 html 页面产生 xss:
五、Self XSS
Self XSS 指的是用户本人输出 XSS payload,且输入仅本人可见的 XSS 问题,通常独自的 Self XSS 是不可利用的,但通过 CSRF(跨站申请伪造)、点击劫持等组合攻打就可能把 Self XSS 利用起来。所以即便是 Self XSS 也倡议做好修复,防止被组合利用造成危害。
对代码感兴趣的,关注公众号“吴花果的吴花火”,输出”xss“获取 xss 实例代码的下载链接。