Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍

一、XSS简介

  • 跨站脚本( Cross-Site Scripting,简称为XSS或跨站脚本或跨站脚本攻击)是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种
  • 主要依靠网页的输入进行攻击,它允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响
  • 本质:数据被当成代码执行
  • 恶意用户利用XSS代码攻击成功后,可能得到很高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容

二、XSS漏洞的分类

XSS攻击可以分为四种:反射型、存储型、DOM型、UXSS型

①反射型

  • 反射型XSS又称非持久型XSS,这种攻击方式往往具有一次性
  • 攻击方式:攻击者通过电子邮件等方式将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞

②存储型

  • 存储型XSS又称持久型XSS,攻击脚本将被永久地存放在目标服务器数据库或文件中,这样,每一个访问网页的用户都会被攻击,具有很高的隐蔽性。
  • 攻击方式:这种攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中,当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本会在他们的浏览器中得到执行

例如,恶意攻击者在留言板中加入以下代码:

  • 当其他用户访问留言板时,就会看到一个弹窗。可以看到,存储型XSS的攻击方式能够将恶意代码永久地嵌入一个页面中,所有访问这个页面的用户都将成为受害者。如果我们能够谨慎对待不明链接,那么反射型XSS攻击将没有多大作为,而存储型XSS则不同,由于它注入在一些我们信任的页面,因此无论我们多么小心,都难免会受到攻击

③DOM型

  • DOM全称Document Object Model ,使用DOM可以使程序和脚本能够动态访问和更新文档的内容、结构及样式
  • DOM型XSS其实是一种特殊类型的反射型XSS,它是基于DOM文档对象模型的一种漏洞,服务器不参与,仅仅涉及到浏览器的XSS

HTML的标签都是节点,而这些节点组成了DOM的整体结构一一节点树。通过HTML DOM ,树中的所有节点均可通过JavaScript进行访问所有HTML元素(节点) 均可被修改,也可以创建或删除节点。HTML DOM树结构如图所示:

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第1张图片

  • 在网站页面中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑, 从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改节点的, 所以基于DOM型的XSS漏洞不需要与服务器端交互,它只发生在客户端处理数据的阶段
  • 攻击方式:用户请求一个经过专门设计的URL ,它由攻击者提交,而且其中包含XSS代码。服务器的响应不会以任何形式包含攻击者的脚本。当用户的浏览器处理这个响应时, DOM对象就会处理XSS代码,导致存在XSS漏洞

④UXSS型

  • 通过跨站漏洞。存在于浏览器本身,或者浏览器插件及扩展里面的跨站漏洞

三、XSS挖掘技巧

①寻找输入点

  • 网页链接
  • 表单
  • 返回内容
  • UserAgent、Cookies等

②寻找输出点

  • 输出点可见

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第2张图片

  • 输出点不可见

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第3张图片

③过滤规则

  • 可以根据下面4个步骤来逐步寻找出可以渗透攻击的位置

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第4张图片

  • 例如我们将想要执行的漏洞代码变为base64编码,然后发送给浏览器

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第5张图片

  • 我们将javascript:alert()漏洞代码转换为HTML编码,然后发送给浏览器进行攻击

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第6张图片

  • 网站为了防止漏洞代码,使用str_replace函数将script关键字过滤掉,我们就使用scrscriptipt进行攻击

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第7张图片

四、XSS高级利用技术

①窃取登录凭证

窃取登录凭证有两种方法

  • 获取Cookies和制作钓鱼网站获取登录密码

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第8张图片

②信息获取

可以获取目标相关信息

  • 基础信息:

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第9张图片

  • 指纹信息:

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第10张图片

  • 扩展信息:

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第11张图片

三、XSS常用的测试语句

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第12张图片

  • onerror:错误处理事件,如果前面的src不存在,就产生onerror事件

四、XSS常用的编码绕过

  • 在使用xss编码测试时,需要考虑HTML渲染的顺序,特别是针对多种编码组合时,要选择合适的编码方式进行测试

①JS编码

  • JS提供了四种字符编码的策略,如下所示

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第13张图片

②HTML实体编码

常用的转义如下:

  • - ==>转义后-;
  • & ==>转义后&
  • < ==>转义后<;
  •  " ==>转义后"
  • ' ==>转义后'
  • / ==>转义后/

③URL编码

五、XSS漏洞修复建议

因为xss漏洞涉及输入和输出两部分,所以其修复也分为两种:

  • 过滤输入的数据,包括“ ’ ”、" " "、"<"、">"、"on*"等非法字符
  • 对输出到页面的数据进行相应的编码转换,包括HTML实体编码、 JavaScript 编码等
  • HTML转义在跳转链接等输入点是不行的,在跳转链接的点需要使用白名单的方式限制(禁止以javascript:开头  或者其他非法的scheme)

六、反射性攻击案例

xss1.php代码的主要功能:

  • 下面是xss1.php的源代码,目的就是在输入框输入一个值,然后点击提交查询内容之后,在输出框输出内容


	
	XSS利用输出的环境来构造代码


	
把我们输入的字符串 输出到input里的value属性里
请输入你想显现的字符串


'; }else{ echo ''; } ?>

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第14张图片

开始进行XSS漏洞攻击:

  • 在输入框输入后面的内容(“xss_input_value=">”),然后点击提交查询内容按钮,就会产生弹窗
  • 备注:谷歌浏览器会检测到有风险,并拦截,此次使用IE浏览器

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第15张图片

原理解析:

  • 在xss1.php中,通过GET获取参数“xss_input_value”的值,然后通过echo输出一个input的标签,并将“xss_input_value”的值放入input标签的value值中
  • 当我们在输入框中输入“xss_input_value=">”时,输出到页面的HTML代码变为了(">),如下图所示。此段HTML代码有两个标签,标签和标签。而标签的作用就是让浏览器弹窗

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第16张图片

七、存储型攻击案例

xss2.php代码的主要功能

  • 下面源代码的功能就是在标题栏和内容栏输入内容,然后插入数据库,并将数据库的浏览信息输出到页面中
  • 备注:代码中连接的是本人的数据库,所以密码隐藏了,用xxx表示


	
	留言板


	
输入留言内容
标题:
内容:

标题内容"; while($row = mysqli_fetch_array($result2)) { echo "".$row['title'] . "" . $row['content'].""; } echo ""; ?>
  • MySQL数据库库名为test,表名为xss,表的字段如下
create table xss(
id int primary key auto_increment,
title varchar(255),
content varchar(255)
);
  • 例如输入1和2,数据库中被插入了数据

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第17张图片 Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第18张图片

开始进行XSS漏洞攻击:

  • 在标题栏内输入(),然后将标题输出到页面时,页面执行了,于是就产生弹窗

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第19张图片

原理解析:

  • 该PHP代码,获取POST参数title和content,然后将参数插入数据库表XSS,接下来通过select查询将表XSS中的数据查询出来,并显示到页面
  • 当用户在标题处输入(),数据库的数据如下图所示

  • 当将title输出到页面时,页面执行了,导致弹窗

八、DOM型攻击案例

xss3.php代码的主要功能



	
	Test
	


	
这里会显示输入的内容


  • 源码中有一个JS函数tihuan(),该函数通过DOM操作将元素id1(输出位置)的内容修改为元素dom_input(输入位置)的内容
  • 该代码的功能就是在输入框输入内容,然后点击替换,页面中的“这里会显示输入的内容”会被替换我输入的内容

开始进行XSS漏洞攻击:

  • 在输入框输入()时,会产生弹窗

Web安全攻防:02---XSS(跨站脚本攻击)漏洞介绍_第20张图片

原理解析:

  • 该代码只有HTML代码,没有与服务器进行交互
  • 单击“替换”按钮时会执行JavaScript的tihuan()函数,而tihuan()函数是一个DOM 操作,通过docurnent.getElementByld获取ID为id1的节点,然后将节点idl 的内容修改成id为dom_input中的值,即用户输入的值。
  • 当输入 时,单击“替换”按钮,页面弹出消息框,但由于是隐式输出的,所以在查看源代码时,看不到输出的xss代码

九、一次完整的XSS漏洞挖掘案例

  • 见文章:https://blog.csdn.net/qq_41453285/article/details/100585428

你可能感兴趣的:(Web安全攻防,XSS(跨站脚本攻击)漏洞简介)