相关推荐recommended
【XSS漏洞-01】XSS漏洞原理和危害及验证与分类
作者:mmseoamin日期:2023-11-30

XSS漏洞

跨站脚本攻击——XSS(Cross Site Scripting),本应该缩写为CSS,但是该缩写已被层叠样式脚本Cascading Style Sheets所用,所以改简称为XSS。也称跨站脚本或跨站脚本攻击。指攻击者通过在web页面中写入恶意脚本,进而在用户浏览页面时,控制用户浏览器进行操作的攻击方式。假设在一个服务器上,有一处功能使用了这段代码,它的功能是将用户输入的内容输出到页面上,这就是其常见的表现。

XSS漏洞原理

跨站脚本攻击XSS通过将恶意的JS代码注入到Web页面中,当用户浏览该网页时,嵌入其中Web里面的JS代码会被执行,从而达到恶意攻击用户的目的。(JS可以非常灵活的操作HTML、CSS和浏览器,这使得XSS攻击的“想象”空间特别大)

本质:在前端JS中插入恶意的JS代码

XSS漏洞执行步骤:

通过将精心构造的代码(JS)代码注入到网页中,并由浏览器解释运行这段JS代码,以达到恶意攻击的效果。

当用户访问被XSS脚本注入的网页,XSS脚本就会被提取出来。用户浏览器就会解析这段XSS代码,也就是说用户被攻击了。用户最简单的动作就是使用浏览器上网,并且浏览器中有javascript解释器,可以解析javascript,然而浏览器不会判断代码是否恶意。也就是说,XSS的攻击对象是用户的浏览器。

微博、留言板、聊天室等等收集用户输入的地方,都有可能被注入XSS代码,都存在遭受XSS的风险,只要没有对用户的输入进行严格过滤,就会被XSS 。只要攻击者可以将恶意代码注入到服务器中,我们就认为其存在xss漏洞。

【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第1张

XSS漏洞危害

XSS(Cross Site Scripting)跨站脚本攻击,它自1996年诞生以来,常被OWASP评为十大安全漏洞之一。

XSS最大的特点:

能注入恶意代码到用户浏览器的页面上,从而达到劫持用户会话的目的。

例如,2011年6月,国内信息发布平台爆发XXS蠕虫攻击,该蠕虫漏洞仅持续16分钟,但感染用户近33000,后果十分严重。

XSS利用JS代码实现攻击,有很多种攻击方法,以下简单列出几种

  • 盗取各种用户账号

    • 窃取用户Cookie资料,冒充用户身份进入网站

      • 劫持用户会话,执行任意操作(浏览器劫持)

        • 刷流量,执行弹窗广告

          • 传播蠕虫病毒

            • 等等

              XSS漏洞的验证

              我们可以用一段简单的代码,验证和检测漏洞的存在,这样的代码叫做poC(proof of Concept)。

              POC(Proof of Concept ):概念验证,漏洞的验证和检测
              EXP(Exploit):漏洞的完整利用工具
              shellcode(shell代码):利用漏洞时,所执行的代码(工具执行代码)
              payload():攻击载荷
                         sqlmap      攻击代码的模板
                         msf         shellcode类似,功能是建立与目标的连接

              验证XSS漏洞存在的poC如下

              弹窗: //经典语句(既简单又效果明显)
              弹出确认框:
              弹出输入框:

              我们可以在测试页面中提交代码【

              点击提交按钮,就能看到弹窗操作;以靶场pikachu-master为例

              【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第2张

              我们发现,提交的代码【】,被当做字符串输出在HTML页面中,浏览器会根据【】既简单又有明显效果

              如果出现以下页面,可以将输入框的长度20改成100就可以继续执行了

              【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第3张 【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第4张 【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第5张

              当我们输入的内容会原样输出到网页中来,我们就认为可能存在XSS漏洞

              XSS漏洞分类

              XSS漏洞分类大致可分为三个类型:反射型XSS、存储型XSS、DOM型XSS

              反射型XSS

              反射性XSS是非持久型、参数型的跨站脚本。反射型XSS的JS代码在Web应用的参数(变量)中,如搜索框的反射型XSS。

              靶场环境:cms

              【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第6张

              当我们在搜索框中输入aaa(随便输入什么)点击搜索时,网页便会原样显示

              【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第7张 【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第8张

              当我们输入,此时页面进行弹窗操作,即可触发反射型XSS

              【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第12张

              注意到,我们提交的poc会出现在search.php页面的keywords参数中。

              存储型XSS

              存储型XSS是持久型跨站脚本。持久型体现在XSS代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质(这里的介质指的是数据库等存储数据的地方)中。

              存储型XSS通常发生在留言板、反馈投诉、论坛评论等平台将恶意代码和正文都存入服务器的数据库。每次访问都会触发恶意代码。

              靶场环境:cms

              【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第13张
              • 我们直接点击留言板,进行留言提交

                【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第14张
                • 留言成功后,需要管理员审核。此时我们需要登录后台管理

                  【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第15张
                  • 点击留言管理,这时页面发生弹窗

                    【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第16张 【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第17张
                    • 当我们把未验证改成已验证时,在后台XSS使用的JS代码就会跑到前端,当我们每访问留言板这个页面时,页面就会进行弹窗

                      【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第18张

                      DOM型XSS

                      DOM型是特殊的反射型XSS。DOM即文档对象模型,OWASP关于DOM型号XSS的定义是基本DOM的XSS是一种XSS攻击,其中攻击的payload由于修改被攻击者浏览器页面的DOM树而执行的。其特殊的地方就是payload在浏览器本地修改DOM树而执行,并不会传到服务器上,这也就是使得DOMXSS比较难以检测。

                      查看当前页面的源代码及提交参数后的HTML页面(DOM树),会形成鲜明对比

                      【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第19张
                      
                      
                          DOM-XSS
                          
                      
                      
                      
                      
                      

                      当我们输入?message=hello时,页面显示hello

                      【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第20张

                      我们继续输入?message=,页面出现弹窗

                      【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第21张

                      此时我们右键查看源代码,发现代码与之前一致,没有出现弹窗的内容

                      【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第22张

                      当我们审查网页元素时,则看到DOM树多出了弹窗内容

                      【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第23张

                      当我们输入#message=时,页面也出现弹窗。#后面内容为锚点,锚点内容不会提交到服务器

                      【XSS漏洞-01】XSS漏洞原理和危害及验证与分类,第24张

                      网页源代码及审查元素的区别:

                      • 网页源代码:内容是服务器发送到浏览器原封不动的源代码,不包括网页动态的渲染的内容,即源代码

                        • 审查元素:包括源代码+JS动态渲染的内容,即最终展示的HTML内容

                          总结:

                          XSS漏洞三种分类区别:

                          • 反射型XSS不与数据库进行交互,直接由前端进行反馈;

                            • 存储型XSS会将恶意代码写进服务器的数据库中;

                              • 反射型和存储型xss都先将数据发送到了服务器,再从服务器读取数据显示到页面中,burp能抓取到数据;

                                • DOM型XSS主要是在浏览器本地修改DOM树而执行,并不会经过服务器,所以burp抓取不到包。

                                  常用的XSS语句