XSS基础与进阶

XSS漏洞介绍:

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

XSS漏洞原理:

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

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

<script>alert(LEO will hack you)</script>)

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

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

在网页中有许多元素,当页面到达浏览器时,浏览器会为页面创建一个顶级的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编码等

你可能感兴趣的:(XSS基础与进阶)