XSS笔记
个人总结
参考:https://portswigger.net/web-security/cross-site-scripting
- name: 个人总结
desc: 参考:https://portswigger.net/web-security/cross-site-scripting
bgColor: '#F0DFB1'
textColor: 'green'
2
3
4
# XSS笔记
# 0XSS载荷备忘录(嘎嘎好用)
# 1基本知识
# 1、什么是跨站脚本(XSS)?
答案
跨站脚本(也称为 XSS)是一个 Web 安全漏洞,允许攻击者破坏用户与应用程序之间的交互,同时还能够绕过同源策略。
跨站脚本漏洞通常允许攻击者伪装成受害用户、执行用户能够执行的任何操作、以及访问用户的任何数据。如果受害用户在应用程序中拥有特权访问权限,则攻击者可能完全控制应用程序的所有功能和数据。
# 2、XSS的工作原理?
答案
跨站脚本的工作原理是:
- 操纵易受攻击的网站,以便将恶意 JavaScript 返回给用户。
- 当恶意代码在受害者的浏览器中执行时,攻击者可以完全破坏他们与应用程序的交互。
# 3、除了alert()以外,还可以使用哪个通用函数进行XSS概念验证?
答案
PortSwigger 建议使用print()
函数。如果你有兴趣,想了解更多关于此变化的信息,以及 PortSwigger 为什么喜欢print()
,请查看他们关于该主题的博客文章《alert()已死, print()万岁》。
# 4、XSS攻击有哪些类型?
# 5、XSS可以用来做什么?
答案
利用跨站脚本漏洞的攻击者通常能够:
- 冒充或伪装成受害用户。
- 执行用户能够执行的任何操作。
- 读取用户能够访问的任何数据。
- 捕获用户的登录凭据。
- 对网站进行虚拟污损。
- 将特洛伊木马功能程序注入网站。
(“虚拟污损” 又被称为 “内容欺骗” 或 “内容注入”,详细信息可参考OWASP文章 (opens new window))
# 6、XSS漏洞的影响?
答案
XSS 攻击的实际影响,通常取决于应用程序的性质、功能和数据 以及受影响用户的状态。例如:
- 在宣传类的软件应用程序中,所有用户都是匿名的,所有信息都是公开的,影响通常很小。
- 在保存敏感数据(如银行交易、电子邮件或医疗记录)的应用程序中,影响通常会很严重。
- 如果受影响的用户 在应用程序中具有更高的权限,则影响通常很严重,这允许攻击者完全控制易受攻击的应用程序,并危害所有用户及其数据。
# 7、如何查找和测试XSS漏洞
答案
- 手动:将一些简单的唯一输入(例如短的字母数字字符串)提交到应用程序中的每个入口点,识别 HTTP 响应中返回所提交输入的每个位置,并单独测试每个位置,以确定是否可以构造适当的输入,来执行任意 JavaScript。
- 自动:使用一些自动化的 Web 漏洞扫描工具。
# 2反射型XSS
# 1、什么是反射型XSS?
答案
当应用程序在 HTTP 请求中接收数据,并以不安全的方式 将该数据包含在即时响应中时,就会出现反射型跨站脚本(XSS)。
# 2、有关反射型跨站脚本的常见问题
- 反射型 XSS 和存储型 XSS 有什么区别?
- 反射型 XSS 和 Self-XSS 有什么区别?
答案
反射型 XSS 和存储型 XSS 有什么区别?当应用程序从 HTTP 请求中获取一些输入,并以不安全的方式将该输入嵌入到即时响应中时,就会出现反射型 XSS。对于存储型 XSS,应用程序会将输入进行存储,并以不安全的方式将其嵌入到稍后的响应中。
反射型 XSS 和 Self-XSS 有什么区别?Self-XSS 与常规反射型 XSS 拥有着类似的应用程序行为,但它不能以正常方式触发,例如构造 URL 或通过跨域请求触发。相反,只有当受害者从他自己的浏览器中提交 XSS 载荷时,才会触发该漏洞。想要利用 Self-XSS 攻击,通常需要对受害者进行社会工程,诱使受害者将攻击者提供的一些输入粘贴到他们的浏览器中。因此,它通常被认为是一个蹩脚的、低影响的问题。
# 3存储型XSS
# 1、什么是存储型XSS?
答案
当应用程序从不受信任的源接收数据,并以不安全的方式将这些数据包含在其之后的 HTTP 响应中时,就会出现存储型跨站点脚本(也称为二阶或持久性 XSS)。
# 4DOM型XSS
# 1、什么是DOM型XSS?
答案
当 JavaScript 从攻击者可控制的来源(如 URL)中获取数据,并将其传递给支持动态代码执行的接收器(如eval()
或innerHTML
)时,通常会出现 DOM型XSS 漏洞。这使得攻击者能够执行恶意 JavaScript,并允许他们劫持其他用户的帐户。
要想造成 DOM型XSS 攻击,你需要将数据放入源中,以便将其传播到接收器,并导致执行任意 JavaScript。
# 2、第三方依赖项中的源和接收器
# 3、结合型DOM XSS
# 4、哪些接收器会导致DOM-XSS漏洞?
以下是可能导致 DOM-XSS 漏洞的一些主要接收器:
document.write()
document.writeln()
document.domain
element.innerHTML
element.outerHTML
element.insertAdjacentHTML
element.onevent
2
3
4
5
6
7
以下 jQuery 函数也是可能导致 DOM-XSS 漏洞的接收器:
add()
after()
append()
animate()
insertAfter()
insertBefore()
before()
html()
prepend()
replaceAll()
replaceWith()
wrap()
wrapInner()
wrapAll()
has()
constructor()
init()
index()
jQuery.parseHTML()
$.parseHTML()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 5XSS上下文
# 1、位于HTML标签之间的XSS
当 XSS 上下文位于 HTML 标签之间的文本时,你需要引入一些新的 HTML 标签来触发 JavaScript 的执行。
# 2、位于HTML标签属性中的XSS
当 XSS 上下文进入 HTML 标签的属性值中时,可以尝试终止属性值、闭合原标签并引入新标签。
# 3、位于JavaScript中的XSS
当 XSS 上下文位于响应中的一些现有 JavaScript 中时,可能会出现各种各样的情况,若想成功执行漏洞利用,则需要使用不同的技术。
# 4、通过客户端模板注入实现XSS
一些网站使用客户端模板框架(如 AngularJS)来动态渲染网页。如果他们以不安全的方式,将用户输入嵌入到这些模板中,则攻击者也许能够注入自己的恶意模板表达式,从而发起 XSS 攻击。
学习更多
# 6利用XSS漏洞
一些利用 XSS 漏洞的方式:
# 7内容安全策略(CSP)
# 1、什么是CSP(内容安全策略)?
答案
CSP 是一种浏览器安全机制,旨在缓解 XSS 和其他一些攻击。它的工作原理是限制页面可以加载的资源(如脚本和图像),并限制当前页面 是否可以被其他页面载入。
若要启用 CSP,需要在响应中包含一个名为Content-Security-Policy
的 HTTP 响应标头,其值应包含策略。策略本身由一个或多个指令组成,用分号分隔。
# 2、使用CSP缓解XSS攻击
# 3、使用CSP缓解悬挂标记攻击
# 4、使用CSP防止点击劫持
# 5、通过策略注入绕过CSP
# 8悬挂标记注入
# 1、什么是悬挂标记注入?
# 2、如何防范悬挂标记攻击
# 9客户端模板注入
# 1、什么是客户端模板注入?
答案
当应用程序使用了客户端模板框架,并在网页中动态嵌入用户输入时,就会出现客户端模板注入漏洞。
当渲染一个页面时,框架会扫描页面内容,以查找模板表达式,并执行它遇到的任何表达式。攻击者可以提供恶意的模板表达式,从而发起跨站脚本(XSS)攻击。
# 2、什么是AngularJS沙箱?
答案
AngularJS 沙箱是一种机制,可以防止 AngularJS 模板表达式访问潜在的危险对象,例如window
或document
。它还可以防止 访问潜在的危险属性,例如__proto__
。
尽管 AngularJS 团队不认为它是一个安全隐患,但更广泛的开发者社区通常不这么认为。虽然 “沙箱绕过” 最初具有挑战性,但安全研究人员已经发现了许多绕过方法。因此,该特性最终在 AngularJS 1.6 版本中被删除。但是,许多遗留应用程序仍然使用旧版本的 AngularJS,因此可能容易受到攻击。
# 3、AngularJS沙箱的工作原理?
# 4、AngularJS沙箱逃逸
# 5、借助AngularJS绕过CSP
# 6、如何防范客户端模板注入漏洞?
答案
为防范客户端模板注入漏洞,请避免使用 不受信任的用户输入 来生成模板或表达式。如果这不可行,请考虑 在将模板表达式语法嵌入到客户端模板之前,从用户输入中过滤掉模板表达式语法。
请注意,HTML 编码不足以防范客户端模板注入攻击,因为框架在查找和执行模板表达式之前,会对相关内容执行 HTML 解码。
# 10如何防范XSS
注意
内容安全策略(CSP)是防范跨站脚本攻击的最后一道防线。
如果前面执行的 XSS 防护都失败了,则可以使用 CSP 限制攻击者的行为来缓解 XSS。
答案
- 对输出数据进行编码
- 在接收时验证输入
- 仅允许安全的 HTML 标签和属性(白名单)(不推荐,因为存在浏览器解析引擎的差异 和 变种 XSS 等怪异载荷)
- 使用模板引擎防范XSS
- 各类代码示例
- 使用内容安全策略(CSP)缓解XSS