4.3 XSS
简介
主要参考, 部分概念参考
是什么?
XSS ,全称 Cross-site scripting ,为了与 css (Cascading Style Sheets) 区分。xss 攻击也称为跨站脚本攻击。
成功攻击的影响是?
在他人的浏览器中执行 JavaScript 代码。通过 js 代码可以盗取用户 cookie、点击劫持、钓鱼等等。
获取cookie、端口扫描、利用自动填充盗取密码。
xss 危害相较于 sql 注入、命令注入而言不是很大。主要结合其它攻击,例如社会工程学攻击、csrf 等。
原理是?
web 组成三剑客:
- HTML 定义了网页的内容
- CSS 描述了网页的布局
- JavaScript 实现网页的行为
服务端通常将用户的某些可控输入最终写入到页面响应中。
如果用户的可控输入含有恶意的 js 时,并且没有进行严格过滤。就会造成 xss攻击。
JavaScript 也可以用于服务端编程、如 Node.js 。
如果涉及 js 模板引擎,则可能产生(客户端 / 服务端)模板注入
实际中的限制
通常有严格的 代码机制 或 WAF 检查用户输入。此外,还有浏览器内置机制 CSP 控制资源加载。
关于 csp 详见后文。
如何攻击?
检测是否存在反射、存储、DOM 入口。
绕过代码过滤 与 WAF 。
进行利用。
工具
综合利用工具 beef,覆盖很多方面,能通过 xss 达到的利用方式。
漏洞寻找工具 dalfox xsstrike xsser
可自行搭建接受平台 用来检测盲注。或搜索在线 xss 利用平台
xss 标签、属性爆破 payload
如何防御?
输入严格过滤。CSP 策略
补充内容
三类 xss
大体上经典的 xss 有三类:
-
反射型 xss:当服务端收到客户恶意输入时,直接将其写到响应中。
常见场景:网站的搜索栏、用户登录入口、输入表单等地方,常用来窃取客户端cookies或钓鱼欺骗。
利用方式:攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接受该目标用户的请求并进行处理,然后服务器把带有XSS的代码发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。
-
存储型 xss:服务端会将用户的恶意输入存储起来,当访问时将其写到响应中。
常见场景:论坛、博客、留言板、网站的留言、评论、日志等交互处。
利用方式:攻击者在发帖或留言的过程中,将恶意脚本连同正常信息一起注入到发布内容中。随着发布内容被服务器存储下来,恶意脚本也将永久的存放到服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本就会在用户的浏览器中得到执行。
-
DOM 型 xss:主要由浏览器进行过滤未严谨。
原理:通过 js 脚本对文档对象进行编辑,从而修改页面的元素。客户端的脚本程序可以通过 DOM 动态修改页面的内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。
攻击方式:攻击者提供一个经过专门设计的 URL 诱使用户点击,而其中包含 XSS 代码。服务器的响应不会以任何形式包含攻击者的脚本,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。
与反射型不同的是,反射型是服务器直接将写到响应中,而dom型是由客户端 js 处理的,要浏览器运行 js 后才能得知结果。
发现思路
主要对此文章做个概念摘抄,详细技术细节请 查阅原文。
首先检查是否有可控输入(参数、cookie、user-agent 等)被反射到 HTML 、js 中。
根据反射位置:
-
在一对闭合的标签内,或在任何标签外。简而言之,就是不属于下面两种的情况。
尝试攻击:引入恶意标签、点击劫持、模板注入、悬浮标签注入。
-
标签的属性中。
-
闭合已存在的标签、引入新标签。
-
闭合属性、引入新属性
- 可以考虑 accesskey 属性绑定快捷键
-
看标签的属性是否能够直接利用,例如 onclick 属性、href 属性
-
javascript: 协议
javascript: 中的属性值在执行前会自动解码。
-
URL、HTML编码、进制编码、Unicode 编码
标签属性中的 HTML 编码,将会在运行时解码。所以传入 HTML 编码字符,或许绕过代码防御。
-
-
-
js 代码内。
- 在