Bootstrap

【XSS跨站脚本攻击】


前言

本篇文章仅作为本人学习笔记


一、XSS是什么?

XSS是跨站脚本攻击(Cross-Site Scripting)的缩写。它是一种常见的Web安全漏洞,黑客利用这种漏洞向网页注入恶意脚本代码。一旦用户访问被注入脚本的网页,黑客就可以利用该脚本进行各种恶意操作,例如盗取用户的登录信息、篡改网页内容等。

二、危害

存在 XSS 漏洞时,可能会导致以下几种情况:

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

  2. 攻击者能够在一定限度内记录用户的键盘输入。

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

  4. XSS 蠕虫。

  5. 获取用户浏览器信息。

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

三、XSS分类

XSS攻击可以分为:反射型存储型DOM型三种类型。

  1. 反射型攻击(非持久XSS):恶意代码并没有保存在目标网站,通过引诱用户点击一个链接到目标网站的恶意链接来实施攻击。

  2. 存储型攻击(持久XSS):存储型攻击是指攻击者将恶意代码或恶意数据存储在受害者的服务器或数据库中。当用户访问受感染的网站或服务时,恶意代码会被执行或恶意数据会被读取,从而导致用户的信息被盗取或遭受其他损害。

  3. DOM型攻击:DOM型攻击是指攻击者通过修改网页的DOM结构来实施攻击。DOM(文档对象模型)是网页的表示方法,攻击者可以通过修改DOM元素或属性来窃取用户信息、执行恶意代码或进行其他形式的攻击。这种攻击通常需要用户与恶意网页进行交互,例如点击链接或输入表单数据。

四、js代码可控

  • XSS 通过将精心构造的代码(JS)注入到网页中,并由浏览器解释运行这段JS 代码,以达到恶意攻击的效果。当用户访问被XSS 脚本注入的网页,XSS 脚本就会被提取出来。用户浏览器就会解析这段XSS 代码,也就是说用户被攻击了。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascript解释器,可以解析javascript,然而浏览器不会判断代码是否恶意。

  • JS 运行的环境是浏览器,具体点说,主流浏览器都有JS 引擎。

五、验证存在XSS漏洞

要验证XSS漏洞的存在,您可以采取以下步骤:

  1. 找到目标网站的输入点:查找网页源代码或查看网页上的表单、输入框、评论框等用户可输入的地方。

  2. 尝试输入可能的恶意代码:在输入点处输入一些常见的XSS攻击向量,如:,并提交表单或评论。如果网站未对用户输入进行过滤或转义,该恶意代码将在页面上执行。

  3. 检查页面结果:查看页面上是否出现弹窗、恶意脚本执行或其他异常行为。如果出现了这些情况,说明XSS漏洞存在。

  4. 尝试对不同输入点进行测试:在不同的输入点尝试输入恶意代码,并验证是否可以成功执行。这些输入点可能包括URL参数、Cookie、HTTP头部等。

  5. 使用XSS扫描工具:使用专门的XSS扫描工具,如XSStrike、Burp Suite等,对目标网站进行扫描。这些工具可以自动发现潜在的XSS漏洞,提供更全面的测试结果。

六、XSS简单测试

通过DVWA靶场测试本次实验:

  1. 反射型XSS
  • 数据流向:前端——后端——前端
    不保留在网站数据库

通过DVWA靶场的反射型XSS输入窗口,插入一段恶意代码,实现恶意弹窗

<script>alert(666)</script> 

在这里插入图片描述

触发弹窗

在这里插入图片描述

  1. 存储型XSS
    数据流向是:前端–>后端–>数据库–>后端–>前端
    保留在网站数据库

以DVWA靶场模拟客户端发送邮件(所有能够向web server输入内容的地方)到服务端,内容被存储到数据库中;

攻击者A发送插入恶意代码的邮件
在这里插入图片描述

退出,模拟B用户登录查看到了该邮件,跳出弹窗

在这里插入图片描述

  1. DOM型XSS

通过URL插入恶意代码,实现弹窗

数据流向是: 前端–>浏览器
在这里插入图片描述

七、XSS钓鱼管理员cookie

使用BlueLotus_XSSReceiver-master作为演示:
模拟场景攻击者A创建了一个playload,通过发送邮件,使后台管理员看到,获取管理员cookie

在这里插入图片描述

在这里插入图片描述

攻击者将生成的playload通过邮件发送给管理员

在这里插入图片描述

管理员登录查看到攻击者的留言

在这里插入图片描述

攻击者通过后台提示,钓鱼成功

在这里插入图片描述

八、XSS漏洞防御

  1. 将HTML元素内容、属性以及URL请求参数、CSS值进行编码;

  2. 如果编码影响到正常业务,可使用白名单进行检测过滤;

  3. 使用W3C提出的CSP(Content Security Policy,内容安全策略)定义域名白名单;

  4. 设置Cookie的HttpOnly属性;

更新ing…

;