Loading

4.3 XSS

简介

主要参考部分概念参考

什么是 XSS

XSS ,全称 Cross-site scripting ,为了与 css (Cascading Style Sheets) 区分。xss 攻击也称为跨站脚本攻击。

当用户可控输入可以嵌入到页面 html、js 中,没有经过严格过滤,最终可能执行恶意 js 代码。

成功攻击的影响

在他人的浏览器中执行 JavaScript 代码,而通过 js 代码达到以下效果:

  1. 可以执行社会工程学攻击,例如盗取 cookie、点击劫持、钓鱼等。
  2. 扫描访问者的网段,端口等。

或结合其它漏洞,例如 csrf。

如何攻击

  1. 检测是否存在反射、存储、DOM 入口。

  2. 绕过代码过滤 与 WAF 。

  3. 进行利用。

工具

如何防御

输入严格过滤。

CSP 策略

配置 cookie 为 httponly,以防止通过 js 获取 cookie

补充概念

web 三大组件

web 组成三剑客:

  1. HTML 定义了网页的内容
  2. CSS 描述了网页的布局
  3. JavaScript 实现网页的行为

服务端通常将用户的某些可控输入最终写入到页面响应中。

如果用户的可控输入含有恶意的 js 时,并且没有进行严格过滤。就会造成 xss攻击。

JavaScript 也可以用于服务端编程、如 Node.js 。

如果涉及 js 模板引擎,则可能产生(客户端 / 服务端)模板注入

三类 XSS

大体上经典的 xss 有三类:

  1. 反射型 xss:当服务端收到客户恶意输入时,直接将其写到响应中。

    常见场景:网站的搜索栏、用户登录入口、输入表单等地方,常用来窃取客户端cookies或钓鱼欺骗。

    利用方式:攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接受该目标用户的请求并进行处理,然后服务器把带有XSS的代码发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。

  2. 存储型 xss:服务端会将用户的恶意输入存储起来,当访问时将其写到响应中。

    常见场景:论坛、博客、留言板、网站的留言、评论、日志等交互处。

    利用方式:攻击者在发帖或留言的过程中,将恶意脚本连同正常信息一起注入到发布内容中。随着发布内容被服务器存储下来,恶意脚本也将永久的存放到服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本就会在用户的浏览器中得到执行。

  3. DOM 型 xss:主要由浏览器进行过滤未严谨。

    原理:通过 js 脚本对文档对象进行编辑,从而修改页面的元素。客户端的脚本程序可以通过 DOM 动态修改页面的内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的,所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段。

    攻击方式:攻击者提供一个经过专门设计的 URL 诱使用户点击,而其中包含 XSS 代码。服务器的响应不会以任何形式包含攻击者的脚本,当用户的浏览器处理这个响应时,DOM对象就会处理XSS代码,导致存在XSS漏洞。

    与反射型不同的是,反射型是服务器直接将写到响应中,而dom型是由客户端 js 处理的,要浏览器运行 js 后才能得知结果。

    DOM 是 Document Object Model ,是一种层次型结构,是现代浏览器识别、处理页面的方式。

    DOM 型安全问题通常存在两个层次:

    • sources 、接受用户可控输入的 JavaScript 属性。例如 location.search document.referrer document.cookie

    • sinks,危险的 JavaScript 函数或 DOM 对象,例如 eval()document.body.innerHTML

    当可控输入从 sources 转到 sinks 时,没经过严格过滤就有可能出现问题。

攻击思路

发现思路

主要对此文章做个概念摘抄,详细技术细节请 查阅原文

首先检查是否有可控输入(参数、cookie、user-agent 等)被反射到 HTML 、js 中。

根据反射位置:

  1. 在一对闭合的标签内,或在任何标签外。简而言之,就是不属于下面两种的情况。

    尝试攻击:引入恶意标签、点击劫持、模板注入、悬浮标签注入。

  2. 标签的属性中。

    • 闭合已存在的标签、引入新标签。

    • 闭合属性、引入新属性

      • 可以考虑 accesskey 属性绑定快捷键
    • 看标签的属性是否能够直接利用,例如 onclick 属性、href 属性

      • javascript: 协议

        javascript: 中的属性值在执行前会自动解码。

      • URL、HTML编码、进制编码、Unicode 编码

        标签属性中的 HTML 编码,将会在运行时解码。所以传入 HTML 编码字符,或许绕过代码防御。

  3. js 代码内。

    • 在 <script> 标签中。尝试闭合。即使目标是在字符串内,因为浏览器先解析标签,其次解析 js 代码。
    • 在 js 代码字符串中,尝试闭合字符串。
    • 如果在模板字面量内,则模板注入。${}

绕过思路

fuzz、利用 html 、js 语法不严格的特性。

等链接到其它章节。

先放一些资源~

js 代码混淆

2021 年 xss 绕过 payload

WAF bypass

附一张 fuzz 图

图像

CSP

CSP 是浏览器内置的一种安全机制,用来防御 xss 攻击,通过限制资源加载(img、script)起作用。

实现原理

服务器通过在响应中添加 Content-Security-Policy 来指明加载规则。

Content-Security-Policy: default-src 'self' 'unsafe-inline' 'unsafe-eval';

# 其分为两部分:
# default-src  指定了资源名,指定后面的规则应用到哪些资源
# 后面三个用 '' 包裹起来的即为加载规则, none 除外

绕过

要考虑好轻重缓急,即发现目标存在 xss 攻击,但由于 csp 的存在影响到了利用,则此时考虑绕过 csp 。

因为通常卡在发现 xss 的这一步,所以初学阶段就先不涉及绕过,仅了解有这么一个概念。

CSP概念及绕过

根据 csp 策略生成绕过 payload

其它类型 xss

参考这篇博文

mxss 突变型 xss。当一个页面对恶意输入进行正确转义,而当把这个页面分享给其它应用,其它应用如果有类似预览的功能时,没注意xss。

uxss 浏览器存在漏洞。

undo

盗取 cookie httponly 逃逸

xss 反射到响应头部,即使是 302,也可以尝试注入 ws

不一定非要把 shell 写入到网站之中,也可采用将 xss 写入到web管理界面,从而实现一直钓鱼。xss + cookie 权限维持

为什么接码平台能获取到cookie ,不是说浏览器只携带目标网站的cookie 码 。 cookie 的 samesite 设置。

19506176-0f3e256e10049c7b

posted @ 2021-03-25 20:34  沉云  阅读(168)  评论(0编辑  收藏  举报