XSS基础与进阶
发布日期:2021-06-30 17:41:14 浏览次数:2 分类:技术文章

本文共 1979 字,大约阅读时间需要 6 分钟。

XSS漏洞介绍:

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

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

XSS漏洞原理:

1.反射型XSS

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

2.存储型XSS

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

)

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

3.DOM型XSS

DOM全称Document Object Model,使用DOM可以使程序和脚本动态访问和更新文档的内容、结构及样式。
DOM型XSS其实是一种特殊的反射型XSS,它是基于DOM文档对象模型的一种漏洞。
HTML的标签都是节点,而这些节点组成了DOM的整体结构——节点树。通过HTML DOM,树中的所有结点均可通过JavaScript进行访问。多有HTML元素(节点)均可被修改,也可以创建或删除节点。HTML DOM树结构如图所示:
在这里插入图片描述

在网页中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象。可以通过JS脚本对文档对象进行编辑,从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM动态修改页面内容,从客户端获取DOM中的数据并在本地执行。由于DOM是在客户端修改的节点的,所以基于DOM型的DOM型的XSS漏洞不需要与服务器交互,它只发生在客户端处理数据的阶段(此操作也就是平时的F12查看页面源代码修改本地页面内容)

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

XSS进阶

XSS常用语句及编码绕过

XSS常用的测试语句有:

常用的XSS的绕过编码有JS编码、HTML实体编码和URL编码

  1. JS编码

    JS提供了四种字符编码的策略

    三个八进制数字,如果个数不够,就在前面补0,例如"e"的编码为"\145"两个十六进制数字,如果个数不够,就在前面补0,例如"e"的编码为"\x65"四个十六进制数字,如果个数不够,就在前面补0,例如"e"的编码为"\u0065"对于一些控制字符,使用特殊的C类型的转义分隔(例如\n和\r)

(注意,字母转换为数字,要先通过ASCII转码,再进行进制转换)

  1. HTML实体编码

    命名实体:以&开头,以分号结尾的,例如"<"的编码是" < ;"(t与;没有空格) 字符编码:十进制、十六进制ASCII码或Unicode字符编码,样式为“&#数值”,例如"<"可以编码为"< ;"和"< ;"(" ; "前面没有空格)
  2. URL编码

这里的URL编码,也是两次URL全编码的结果。如果alert被过滤 ,结果为%25%36%31%25%36%63%25%36%35%25%37%32%25%37%34

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

XSS漏洞修复建议

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

过滤输入的数据,包括“ ' ” 	“ " ”	“<”	“>”	“on*”	等非法字符对输出到页面的数据进行相应的编码转换,包括HTML实体编码,JavaScript编码等

转载地址:https://leo-max.blog.csdn.net/article/details/104820983 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:SQLMAP进阶:参数讲解
下一篇:sqlmap入门实践

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月15日 02时49分38秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章