xss简介

XSS全称为Cross Site Scripting,为了和CSS分开简写为XSS,中文名为跨站脚本。该漏洞发生在用户端,是指在渲染过程中发生了不在预期过程中的JavaScript代码执行。XSS通常被用于获取Cookie、以受攻击者的身份进行操作等行为。

xss分类

参考文章:https://zhuanlan.zhihu.com/p/397940947

反射型xss

反射型xss的攻击流程:

img

反射型是比较常见的,他通常需要用户点击攻击者制作的链接才会触发,比如一个网站有这样的代码:

<?php echo "<p>hello, $_GET['user']</p>";?>

那么我们可以制作一个url带上js代码给用户点击

/?user=</p><script>alert("hack")</script><p>

这样用户点击该链接后就会运行js代码

该方法收到Auditor、NoScript等防御手段影响较大

  • XSS Auditor:XSS Auditor 是一些现代浏览器内置的安全特性,它能够检测并阻止某些类型的XSS攻击。当浏览器识别到某些模式或行为与XSS攻击相符时,XSS Auditor 可以自动修改或阻止页面的加载,从而保护用户免受攻击。例如,如果一个网站将用户输入的数据直接回显到页面中,而没有进行适当的处理,XSS Auditor 可能会介入并防止恶意脚本的执行。

  • NoScript

    NoScript 是一个浏览器扩展,它允许用户对网页上的脚本执行进行更细粒度的控制。通过NoScript,用户可以设置规则来禁止或允许特定网站或脚本的运行。在默认情况下,NoScript 可以阻止所有未经信任的网站运行JavaScript、Java以及其他可执行的代码。这可以有效地防御XSS 攻击,因为许多XSS 攻击依赖于恶意脚本的执行。

存储型xss

存储型xss的攻击流程:

img

存储型就是黑客改变了对象,直接把对象变为服务器了,将恶意的xss语句存入服务器,这样每次用户访问该正常服务器,服务器都会将带有恶意语句的页面一起返回,这样就可以造成持久化攻击。

在一些用户留言的功能就很容易发生这类xss。

DOM型xss

DOM型XSS不同之处在于DOM型XSS一般和服务器的解析响应没有直接关系,而是在JavaScript脚本动态执行的过程中产生的。

例如:

<html>
<head>
<title>DOM Based XSS Demo</title>
<script>
function xsstest()
{
var str = document.getElementById("input").value;
document.getElementById("output").innerHTML = "<img src='"+str+"'></img>";
}
</script>
</head>
<body>
<div id="output"></div>
<input type="text" id="input" size=50 value="" />
<input type="button" value="submit" onclick="xsstest()" />
</body>
</html>

输入 x' onerror='javascript:alert(/xss/) 即可触发。

DOM指的是文档对象模型(Document Object Model),这是一种编程接口,用于处理可扩展标记语言(XML)和超文本标记语言(HTML)文档。通过DOM,程序员可以动态地访问和更新文档的内容、结构和样式。

在Web开发中,DOM用于Web浏览器和服务器端的脚本语言(如JavaScript)来操作Web页面。

比如上文的document.getElementById就是利用DOM来进行web页面的修改。

Blind XSS

Blind XSS是储存型XSS的一种,它保存在某些存储中,当一个“受害者”访问这个页面时执行,并且在文档对象模型(DOM)中呈现payload。

但Blind XSS不同的是,该xss类似盲打,即攻击者不知道这些payload会在何时何地执行,不一定能及时得到回显。

XSS危害

XSS可以导致下列的情况:

  1. 用户的Cookie被获取,其中可能存在Session ID等敏感信息。若服务器端没有做相应防护,攻击者可用对应Cookie登陆服务器。

  2. 攻击者能够在一定限度内记录用户的键盘输入,比如创建键盘监听器然后捕获信息之后利用XMLHttpRequestfetch等API发送HTTP请求将数据发送给攻击者。

  3. 攻击者通过CSRF等方式以用户身份执行危险操作。

  4. XSS蠕虫,例如Samy蠕虫

    XSS蠕虫不需要用户下载或执行任何文件,而是通过用户与网页的交互来传播,通常是在用户不知不觉中进行的。

    其工作原理通常如下:

    1. 寻找漏洞:攻击者寻找存在XSS漏洞的网站,这些漏洞可能允许攻击者注入恶意脚本。
    2. 注入脚本:攻击者在网站上注入恶意脚本,该脚本可以是自我复制的,即能够自动寻找新的受害者并传播自身。
    3. 传播机制:恶意脚本会在其他用户访问受感染的页面时执行,利用XSS漏洞将自身的副本注入到用户的会话中,或者诱使用户点击一个恶意链接,从而在用户的浏览器中执行。
    4. 自动化攻击:XSS蠕虫可以自动执行各种攻击,如发送垃圾邮件、窃取用户信息、会话劫持等。
    5. 隐藏性:由于XSS蠕虫不需要用户的直接交互,因此具有很高的隐蔽性,用户可能在不知情的情况下就成为了攻击的一部分。
  5. 获取用户浏览器信息。

  6. 利用XSS漏洞扫描用户内网。

同源策略

同源策略限制了不同源之间如何进行资源交互,是用于隔离潜在恶意文件的重要安全机制。 是否同源由URL决定,URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口相同,则表示他们同源。

这里给出一个与http://store.company.com/dir/page.html 的源进行对比的示例:

URL 结果 原因
http://store.company.com/dir2/other.html 同源 只有路径不同
http://store.company.com/dir/inner/another.html 同源 只有路径不同
https://store.company.com/secure.html 失败 协议不同
http://store.company.com:81/dir/etc.html 失败 端口不同(http:// 默认端口是 80)
http://news.company.com/dir/other.html 失败 主机不同

更详细的去看这篇文章就行:https://websec.readthedocs.io/zh/latest/vuln/xss/sop.html

XSS常见标签

参考文章:XSS总结 - 先知社区 (aliyun.com)

这里就copy一下常用标签,见到新的就补充进来