[网络安全] 五.XSS跨站脚本攻击详解及分类-1

  • A+
所属分类:安全闲碎

最近开始学习网络安全和系统安全,接触到了很多新术语、新方法和新工具,作为一名初学者,感觉安全领域涉及的知识好广、好杂,但同时也非常有意思。所以我希望通过这100多篇网络安全文章,将Web渗透的相关工作、知识体系、学习路径和探索过程分享给大家,我们一起去躺过那些坑、跨过那些洞、守住那些站。未知攻,焉知防,且看且珍惜。

第五篇文章将介绍XSS跨站脚本攻击,从原理、示例、危害到三种常见类型(反射型、存储型、DOM型),并结合代码示例进行详细讲解,希望对您有所帮助。娜璋AI安全之家将专注于Python和安全技术,主要分享Web渗透、系统安全、人工智能、大数据分析、图像识别、恶意代码检测、CVE复现、威胁情报分析等文章。真心想把自己近十年的所学所做所感分享出来,与大家一起进步。

声明:本人坚决反对利用教学方法进行恶意攻击的行为,一切错误的行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解技术背后的原理,更好地进行安全防护。虽然作者是一名安全小白,但会保证每一篇文章都会很用心地撰写,希望这些基础性文章对你有所帮助,在安全路上一起前行。

文章目录:

  • 一.什么是XSS

  • 二.XSS分类 

    1.反射型

    2.存储型

    3.DOM型

  • 三.总结



一.什么是XSS

1.XSS原理

跨网站脚本(Cross-site scripting,简称XSS) 又称为跨站脚本攻击,它是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。XSS允许恶意用户将代码注入网页,其他用户在浏览网页时就会执行其中的恶意代码。恶意用户利用XSS代码攻击成功后,可能得到很高的权限(执行操作)、私密网页内容、会话和Cookie等各种内容。与XSS相关的攻击类型包括Cookie窃取、会话劫持、钓鱼欺骗等,这类攻击通常包含了HTML以及用户端脚本语言。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

XSS攻击通常利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript(或Java、VBScript、ActiveX、 Flash,甚至是普通的HTML)。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

漏洞成因

如下图所示,在URL中将搜索关键字设置为JS代码,执行了alert()函数。该图中,上面有一个URL,下面是一个页面返回的HTML代码,我们可以看到白色部分HTML是我们事先定义好的,黑色部分参数是用户想搜索的关键词。当我们搜索了test+Div最后等于123,后台反馈页面的搜索引擎会告诉用户搜索了什么关键词,结果如何等等。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

但这个地方如果没有做好转移,可能会造成XSS攻击,我们可以看到蓝色部分是我们事先定义好的结构,被攻击者利用之后它先把这个DIV结束了,最后加上一个script标签,它也有可能不跟你谈标签,直接发送到它的服务器上。参数未经过安全过滤,然后恶意脚本被放到网页中执行,用户浏览的时候就会执行这个脚本。

该漏洞存在的主要原因为:

  • 参数输入未经过安全过滤

  • 恶意脚本被输出到网页

  • 用户的浏览器执行了恶意脚本


2.XSS示例

作者接下来使用WAMP(Windows+Apache+MySQL+PHP)搭建PHP网站平台,简单讲解两个常见案例。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

示例1:GET提交

下面是一个简单的XSS漏洞代码(xss-01.php

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

当输入正确的值时,网页能正常显示。

  • http://localhost/xss/xss-01.php?x=122

输出结果如下图所示:

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

而当我们输入JS脚本代码时,它会弹出相应的窗口,这就是一个XSS注入点。

http://localhost/xss/xss-01.php?x=<script>alert(1)</script>

[网络安全] 五.XSS跨站脚本攻击详解及分类-1


示例2:POST提交

另一种常见的XSS上传漏洞代码如下所示:

index.html

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

xss.php

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

输入正确的用户名如“eastmount”,仍然能正确显示。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

而输入脚本代码 < script>alert(1)< /script> 时,它弹出了对应的脚本窗口,存在XSS注入漏洞。注意,这里采用的是POST方法提交数据,而前面采用的GET方法,其明显的区别是GET方式的网址可以看到参数,而POST方式URL始终不变。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

页面直接弹出了“1”的窗口,可以看到,我们插入的语句已经被页面给执行了。这就是最基本的反射型的XSS漏洞,这种漏洞数据流向是:

  • 前端-->后端-->前端


3.XSS危害

XSS跨脚本攻击主要的危害如下:

  • 网络钓鱼,包括盗取各类用户账号

  • 窃取用户Cookies资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作

  • 劫持用户浏览器会话,从而执行任意 操作,例如进行非法转账、强制发表日志、发送电子邮件等

  • 强制弹出广告页面、恶意刷流量等

  • 网站挂马进行恶意操作,例如任意篡改页面信息、非法获取网站信息、删除文件等

  • 进行大量的客户端攻击,例如DDOS攻击、传播跨站脚本蠕虫等

  • 获取用户端信息 ,如用户的浏览记录、真实IP地址、开放的端口等

  • 结合其他漏洞,如CSRF漏洞,实施进一步作恶


[网络安全] 五.XSS跨站脚本攻击详解及分类-1

PS:上面涉及的很多内容,希望您能好好理解每个漏洞的原理。加油![网络安全] 五.XSS跨站脚本攻击详解及分类-1



二.XSS分类

部分书籍将XSS划分为两类——反射型和持久型。

  • 反射型:又称为非持久型、参数型跨站脚本。这种类型的跨站脚本是最常见,也是使用最广泛的一种,主要用于恶意脚本附加到URL地址的参数中。一般出现在输入框、URL参数处。

  • 持久型:跨站脚本也可以说是存储型跨站脚本,比反射型XSS更具威胁性,并且可能影响到Web服务器自身安全。一般出现在网站的留言、评论、博客日志等用户交互处。

而另一部分书籍将XSS分为三种类型——反射型、存储型以及DOM型,这也是本篇文章重点讲解的分类方式。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

1.反射型

反射型又称为非持久型、参数型跨站脚本,这种攻击方式往往具有一次性。这种类型的跨站脚本是最常见,也是使用最广泛的一种,主要用于恶意脚本附加到URL地址的参数中。它需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面、输入框、URL参数处。反射型XSS大多数是用来盗取用户的Cookie信息。其攻击流程如下图所示:(该图片源自谢公子大佬的博客)

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

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

下图是专门训练一些WEB漏洞的练习页面,我们可以输入自己的名字,输入之后会把我们的名字显示出来。例如我们输入了一个“张三”,这个时候弹出来了一个“123”,在下边显示了一个张三,但是script标签没有出来,因为这个标签被执行了。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

示例:这就是最基本的反射型的XSS漏洞,这种漏洞数据流向如下。

  • 前端-->后端-->前端

其代码案例如前面所述:

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

当用户提交数据,输入 < script>alert('hack')< /script> 代码会提交给后台,并弹出hack页面,这就表示我们的恶意语句被页面执行了。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

[网络安全] 五.XSS跨站脚本攻击详解及分类-1


2.存储型

存储型XSS又称为持久型跨站脚本,比反射型XSS更具威胁性,并且可能影响到Web服务器自身安全,因为攻击脚本可以被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性。

存储型XSS的代码是存储在服务器中的,如在个人信息或发表文章等地方,插入代码,如果没有过滤或过滤不严,那么这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。存储型XSS一般出现在、评论、博客日志等用户交互处,这种XSS比较危险,容易造成蠕虫、盗窃cookie等。其攻击流程如下图所示:

常见攻击方法:该攻击多见于论坛、博客和留言板,攻击者在发帖的过程中,将恶意脚本连同正常信息一起注入帖子的内容中。随着帖子被服务器存储下来,恶意脚本也永久地被存放在服务器的后端存储器中。当其他用户浏览这个被注入了恶意脚本的帖子时,恶意脚本就会在他们的浏览器中执行相关操作。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

在存储型XSS中,可以看到这个URL上面并没有代码,但是依然弹出了一个“1”。它是发现个人资料页的时候有一个XSS漏洞,在个性签名的位置填入了一个XSS标签,弹出了一个“1”,把这个地址发给别人,别人看到这个地址并没有什么代码以为这个页面是安全的,结果一打开就插入了这个XSS代码。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

存储型XSS的攻击危害比较大,因为它的页面当中是看不到这个Script的代码,别人防不胜防。只要管理员没有发现,下一个用户可以直接发送它,而反射型需要用户主动点击的。

示例:假设现在存在一个 index2.html 代码,用户提交ID和用户名并存储至数据库中。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

后台的 xss2.php 将执行数据库存储操作,本地MySQL数据库创建一个名为 XSSDB的数据库,并插入一张XSS表,如下图所示。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1[网络安全] 五.XSS跨站脚本攻击详解及分类-1

xss2.php代码如下所示:

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

此时另一个页面 select.php 负责提供给其他用户访问,则可以看到我们的信息。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

当我们输入正确的值,如下图所示:

  • id:1

  • name:yangxiuzhang

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

此时数据库中可以看到我们插入的值。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

通过本地网址(localhost:8088/xss/select.php?id=1)我们能获取id为1对应的name值。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

当我们输入JS代码时,该程序又将如何运行呢?接着我们插入如下数据:

  • id:2

  • name:< script>alert('hack')< /script>

注意,这里的hack的单引号要进行转义,因为sql语句中的$name是单引号的,所以这里不转义的话就会闭合sql语句中的单引号,不然注入不进去。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

原理:用户提交数据到后端,后端存储至数据库中,然后当其他用户访问查询页面时,后端调出数据库中的数据,显示给另一个用户,此时的XSS代码就被执行了。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

此时数据库插入的内容如下所示,可以看到JS代码已经成功插入我们的后台。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

最后,我们调用 select.php (localhost:8088/xss/select.php?id=2)页面,可以看到成功执行了该脚本文件。存储型XSS的数据流向为:

  • 前端-->后端-->数据库-->后端-->前端

[网络安全] 五.XSS跨站脚本攻击详解及分类-1


3.DOM型

首先,什么是DOM呢?

DOM是指文档对象模型,是一个平台中立和语言中立的接口,有的程序和脚本可以动态访问和更新文档的内容、结构和样式。在web开发领域的技术浪潮中,DOM是开发者能用来提升用户体验的最重要的技术之一,而且几乎所有的现在浏览器都支持DOM。

DOM本身是一个表达XML文档的标准,HTML文档从浏览器角度来说就是XML文档,有了这些技术后,就可以通过javascript轻松访问它们。下图是一个HTML源代码的DOM树结构。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

其次,什么优势DOM-XSS呢?

DOM-XSS漏洞是基于文档对象模型(Document Objeet Model,DOM)的一种漏洞,不经过后端,DOM-XSS是通过url传入参数去控制触发的,其实也属于反射型XSS。

DOM型的XSS是一些有安全意识的开发者弄出来的,比如说接受参数会做一些过滤,把一些字符转义一下,但是转义之后依然会存在着XSS的情况。常见可能触发DOM-XSS的属性包括:document.referer、window.name、location、innerHTML、documen.write等。

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

如下图所示,我们上面输入的可以看到这行代码规律,把这个大括号、小括号以及双页号进行转移,按理说转移之后它应该不会再作为它的标签存在,不会存在XSS的代码。下面Script通过ID获得的这个值,复制到了这个DIV上,经过DOM操作之后,之前转义的字符就变为它的标签,所以经过DOM操作的XSS我们称之为DOM-XSS。它有可能通过URL传播,也有可能通过服务器传播。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

最后,DOM型跨站脚本的攻击是如何实现呢?

下面简单讲解一个DOM-XSS代码,假设前端是一个index3.html页面

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

接着设置后台页面,xss3.php用于获取提交的值并显示其在页面中。注意,代码是获取username中的值,然后显示在print内,这也是导致XSS的原因。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

此时,当我们输入正常的参数,它显示的结果如下图所示,是正常显示的。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1[网络安全] 五.XSS跨站脚本攻击详解及分类-1

而当我们输入恶意代码的时候,比如提交< img src=1 onerror=alert('hack') /> 给后台,它会执行我们的JS代码,弹出hack的窗体。从而证明了DOM-XSS是存在的。DOM型跨站脚本漏洞的数据流向是:

  • 前端->浏览器

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

[网络安全] 五.XSS跨站脚本攻击详解及分类-1


三.总结

写到这里,网络安全系列第五篇文章就介绍完毕,希望您喜欢,如果文章存在错误或不足之处,还请海涵。真心感觉自己要学习的知识好多,也有好多大神卧虎藏龙,开源分享。作为初学者,我们可能有差距,不论你之前是什么方向,是什么工作,是什么学历,是大学大专中专,亦或是高中初中,只要你喜欢安全,喜欢渗透,就朝着这个目标去努力吧!有差距不可怕,我们需要的是去缩小差距,去战斗,况且这个学习的历程真的很美,安全真的有意思。但切勿去做坏事,我们需要的是白帽子,是维护我们的网络,安全路上不忘初心,继续加油。

前文分享(下面的超链接可以点击喔):

最后,真诚地感谢您关注“娜璋之家”公众号,也希望我的文章能陪伴你成长,希望在技术路上不断前行。文章如果对你有帮助、有感悟,就是对我最好的回报,且看且珍惜!再次感谢您的关注,也请帮忙宣传下“娜璋之家”,哈哈~初来乍到,还请多多指教。

明月千里两相思,清风缕缕寄离愁。燕归珞珈花已谢,情满景逸映深秋。

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

(By:娜璋之家公众号 Eastmount 2020-09-07 夜于武汉)

为方便接收粉丝建议,贴出了运营小哥哥的微信,可扫码加[网络安全] 五.XSS跨站脚本攻击详解及分类-1[网络安全] 五.XSS跨站脚本攻击详解及分类-1[网络安全] 五.XSS跨站脚本攻击详解及分类-1[网络安全] 五.XSS跨站脚本攻击详解及分类-1

[网络安全] 五.XSS跨站脚本攻击详解及分类-1

限时加,晚7点后会暂时关闭二维码加好友


本文始发于微信公众号(LemonSec):[网络安全] 五.XSS跨站脚本攻击详解及分类-1

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: