跨站脚本攻击

发布时间 2023-03-23 20:15:25作者: 想见玺1面

跨站脚本攻击

XSS攻击原理

跨站脚本攻击(Cross Site Scripting),XSS是一种经常出现在web应用中的计算机安全漏洞

它允许恶意web用户将代码植入到提供给其它用户使用的页面中,其他用户在观看网页时,恶意脚本就会执行

这类攻击通常通过注入HTML或js等脚本发动攻击

攻击成功后,攻击者可以得到私密网页内容和cookie等

最近几年XSS攻击已经成为最流行的攻击方式

 XSS攻击危害

盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

控制数据,包括读取、篡改、添加、删除企业敏感数据的能力

盗窃企业重要的具有商业价值的资料

非法转账

强制发送网站挂马

控制受害者机器向其它网站发起攻击

XSS分类

针对XSS的攻击方式不同,我们可以把XSS分为如下三大类

1、反射式XSS

2、存储式XSS

3、基于DOM的XSS

放射式XSS

也称为非永久性XSS,是目前最流行的XSS攻击。

它出现在服务器直接使用客户端提交的数据,如url的数据、html表单中提交数据等,并且没有对数据进行无害化处理。

如果提交的数据中含有HTML控制字符而没有被正确处理,那么一个简单的XSS攻击就会发生。

反射式XSS

典型的反射式攻击可通过一个邮件或中间网站,诱饵是一个看起来可信任的站点的链接,其中包含XSS攻击脚本。

如果信任的网站没有正确处理这个脚本,用户点击后就会导致浏览器执行含有恶意攻击的脚本。

存储式XSS

也成为永久性XSS,危害更大。

攻击将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。

存储式XSS多发生在最终显示给其他用户的位置包含:

个人信息字段,如姓名、地址、电子邮件、电话等

文档、上传文件及其他数据的名称

提交给应用程序管理员的反馈或问题

向其他应用程序用户传送的消息、注释、问题等

在用户之间共享的上传文件内容

基于DOM的XSS攻击

反射式XSS攻击和存储式XSS攻击都是通过服务器端提取用户提交的数据

并且以不安全的方式将其返回给用户

基于DOM的攻击仅仅通过JavaScript的方式执行

也就是说这种攻击常发生在应用程序每次返回相同的静态html,而通过客户端JavaScript动态生成信息,并不会跟服务端交互获取的时候。

XSS攻击载荷

1、会话令牌

XSS攻击最普遍的方式

截取一名受害者的会话令牌,劫持他的会话,进而作为受害者的身份来使用应用程序,执行任意操作并占有该用户的账户。

2、虚拟置换

这种攻击需要在一个Web应用程序页面注入恶意数据,从而向应用程序的用户传送误导性信息。

包括简单的向站点注入html,或者使用脚本注入精心设计的内容

攻击者实际上没有修改保存在服务器上的内容,而是利用程序处理并显示用户提交的输入方面的缺陷实现置换。

3、注入木马

这种攻击造成的后果远比虚拟置换严重,它在易受攻击的应用程序中注入实际运行的功能,旨在欺骗终端用户执行某种有害操作(如输入敏感数据)。

随后将它们传送给攻击者

在一个明显的攻击中,攻击者注入的功能向用户显示一个木马登录表单,要求他们向攻击者控制的服务器提交他们自己的证书。

如果由技巧熟练的攻击者实施,这种攻击还允许用户无缝登录到真正的应用程序中,以便他们不会发觉访问过程中的任何反常情况。

然后,攻击者就可以自由使用受害者的证书实现自己的目的。

这种类型的有效载荷非常适宜于用在钓鱼攻击中,向用户传送一个经过专门设计、连接可信应用程序的URL,并要求他们正常登录以访问这个URL。

XSS防御措施

1、输入验证码

如果应用程序在某个位置收到的用户提交的数据将来有可能被复制到它的响应中,应用程序应根据这种情形对这些数据执行尽可能严格的确认。

数据不是太长

数据仅包含某组合法字符

数据与一个特殊的正规表达式相匹配

根据应用程序希望在每个字段中收到的数据类型,应尽可能限制性地对姓名、电子邮件地址、账号等应用不同的确认规则

2、输出编码
如果应用程序将某位用户或第三方提交的数据复制到它的响应中,那么应用程序应对这些数据进行HTML编码,以净化可能的恶意字符。

HTML编码指用对应的HTML实体替代字面量字符,这样做可确保浏览器安全处理可能为恶意的字符,把它们当作HTML文档的内容而非结构处理。

经常造成问题的字符的HTML编码如下:

 

 应用程序之所以结合使用输入确认与输出净化,原因在于这种方法能够提供两层防御:如果其中一层被攻破,另一层还能提供一些保护。

许多执行输入与输出确认的过滤都容易被攻破

结合这两种技巧,应用程序就能够获得额外的保护,即使攻击者发现,其中一种过滤存在缺陷,另一种过滤仍然能够阻止他实施攻击。

在这两种防御中,输出确认最为重要,必不可少。实施严格的输入确认应被视为一种次要故障恢复。