(一)跨站脚本XSS之基本反射型


什么是XSS?

 通常指黑客通过“HTML 注入”篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。在一开始,这种攻击的演示案例是跨域的,所以叫做“跨站脚本”。但是发展到今天,由于JavaScript的强大功能以及网站前端应用的复杂化,是否跨域已经不再重要。但是由于历史原因,XSS这个名字却一直保留下来。

XSS根据效果可分为以下几类:
  • 反射型:(Non-persistent xsS):反射型XSS只是简单地把用户输入的数据“反射”给浏览器。也就是说,黑客往往需要诱使用户“点击”一个恶意链接,才能攻击成功。反射型 XSS 也叫做“非持久型XSS。
  • 存储式XSS:黑客把恶意的脚本保存到服务器端,所以这种XSS攻击就叫做“存储型XSS”。
    • 比较常见的一个场景就是,黑客写下一篇包含有恶意JavaScript代码的博客文章,文章发存储型XSS会把用户输入的数据“存储”在服务器端。这种XSS具有很强的稳定性。表后,所有访问该博客文章的用户,都会在他们的浏览器中执行这段恶意的JavaScript代码。
    • 存储型XSS通常也叫做“持久型XSS”(Persistent XSS),因为从效果上来说,它存在的时间是比较长的。
  • 基于DOM的XSS:实际上,这种类型的XSS并非按照“数据是否保存在服务器端”来划分DOM Based xSS从效果上来说也是反射型XSS。单独划分出来,是因为DOM Based XSS的形成原因比较特别,发现它的安全专家专门提出了这种类型的XSS。出于历史原因,也就把它单独作为一个分类了。通过修改页面的DOM节点形成的XSS,称之为DOM Based XSS。
用一个例子说明下反射型

 我们需要用到一个靶场,靶场由知识盒子提供,这个靶场主要是localstorage的问题,因为现在很多网站的搜索栏为了方便我们,有了一个历史搜索记录保存我们之前搜索过的东西。而这个记录一般会保存到localstorage中,如果开发者没有做好过滤等保护措施,这个地方就可能会存在xss。靶场地址:https://tofu.exeye.run/local

  • 打开页面,只有一个输入框和搜索按钮

  • 随便输入123,刷新页面后发现会有历史搜索记录

  • 打开控制台,查看javascript代码

  • $('.search-ipt').on('input',function () {
            let val=localStorage.getItem('record')||''           //从localstorage中的record中取数据存到val
            if (val!=''){                                        //如果val不为空
                $('.history').css('display','block')             //定义类history的css
                $('.history').html('<a href="/?search='+val+'">'+val+'</a>')  //类history的将会增加这一对包含val的标签
             }else{
                $('.history').css('display','none')      //否则将不显示任何东西
            }
        })
        $('.search-btn').click(function () {       //用于存取数据到浏览器的localstorage
            let val = $('.search-ipt').val()       //将输入框的数据存到val中
            localStorage.setItem('record',val)     //将val的数据再存到localstorage中的record中
            }
        )
  • 分析代码,我们发现可以有两处可控制的val,造成反射型的XSS

  • 我们直接使用测试函数<script>alert('XSS')</script>

  • 点击搜索后刷新页面再输入任意值会出现XSS弹窗

  • 此时可以在控制台中看到record的值就为<script>alert("XSS")</script>

  • 如果想重新实验,可将<script>alert("XSS")</script>从record中删去

知识拓展
  • Local Storage

    • 一般在使用搜索框的时候,为了方便都会有历史记录这个功能。而历史记录一般存放在localstorage中


文章作者: wkai
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wkai !
 上一篇
解决新版Kali桥接和NAT无法共存的问题 解决新版Kali桥接和NAT无法共存的问题
最近在安装了配备XFCE桌面的新版KALI后,突然发现添加的一张桥接的网卡,不能和NAT网卡同时使用,两张网卡只允许一张获取IP地址 后来发现,可能是虚拟机添加了这张网卡,但是KALI本身没有办法启用它。 于是我找到了高级网络编辑器
2020-07-22
下一篇 
如何打造口袋里的渗透平台(一) 如何打造口袋里的渗透平台(一)
相信大家都玩过或者听过看门狗这款游戏,游戏里一位精通黑客技术的高手,于是他决定利用自己的特长来惩治全城的腐败分子,惩奸除恶。在游戏中他经常使用的作案工具就是一部手机,那么今天就教大家如何在安卓设备上安装KALI Linux渗透平台。 这里先
2020-06-02
  目录