zoukankan      html  css  js  c++  java
  • XSS跨站脚本攻击

    XSS跨站脚本攻击


    一、什么是 XSS

            XSS全称(Cross Site Scripting)跨站脚本攻击,是最常见的Web应用程序安全漏洞之一,位于OWASP top 10 2013/2017年度分别为第三名和第七名,XSS是指攻击者在网页中嵌入客户端脚本,通常是JavaScript编写的危险代码,当用户使用浏览器浏览网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的。

    从上面中的一段话,可以得知,XSS属于客户端攻击,受害者最终是用户,但特别要注意的是网站管理人员也属于用户之一。这就意味着XSS可以进行“服务端”攻击,因为管理员要比普通用户的权限大得多,一般管理员都可以对网站进行文件管理,数据管理等操作,而攻击者一般也是靠管理员身份作为“跳板”进行实施攻击。

    XSS攻击最终目的是在网页中嵌入客户端恶意脚本代码,最常用的攻击代码是javascript语言,但也会使用其它的脚本语言,例如:ActionScript、VBscript。而如今的互联网客户端脚本基本是基于Javascript,所以如果想要深入研究XSS,必须要精通Javascript。

    XSS换句话说,JavaScript能做到什么效果,XSS的胃口就有多大。这完全不是危言耸听。javascript可以用来获取用户的cookie,弹出窗口,那么存在XSS漏洞的网站,XSS就可以用来盗取用户Cookie,废掉页面,导航到恶意网站!更高端的XSS代码完全可以进行监控你的键盘操作,模仿Windows注销界面,诱导你输入开机密码!而攻击者需要做的仅仅是向你的代码中注入Javascript代码!


    二、XSS漏洞出现的原因

           程序对输入和输出的控制不够严格,导致"精心构造“的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害.

    三、XSS的危害

    1、首先对于那些半年没有更新的小企业网站来说,发生XSS漏洞几乎没有什么用。一般在各类的社交平台,邮件系统,开源流行的Web应用,BBS(网络论坛是一个和网络技术有关的网上交流场所。一般就是大家口中常提的BBS的英文全称是Bulletin Board System),微博等场景中,造成的杀伤力却十分强大。

    2、劫持用户cookie是最常见的跨站攻击形式,通过在网页中写入并执行脚本执行文件(多数情况下是JavaScript脚本代码),劫持用户浏览器,将用户当前使用的sessionID信息发送至攻击者控制的网站或服务器中。

    3、"框架钓鱼"。利用JS脚本的基本功能之一:操作网页中的DOM树结构和内容,在网页中通过JS脚本,生成虚假的页面,欺骗用户执行操作,而用户所有的输入内容都会被发送到攻击者的服务器上。

    4、挂马(水坑攻击)

    5、有局限性的键盘记录

    四、 XSS分类

    1、反射型XSS或不持久型XSS

    交互的数据一般不会被存在在数据库里面,只是简单的把用户输入的数据反射给浏览器,一次性,所见即所得。


    2、储存型XSS 或持久型 XSS
    交互的数据会被存在在数据库里面,永久性存储,具有很强的稳定性。

    3、DOM XSS
    不与后台服务器产生数据交互,通过前端的dom节点形成的XSS漏洞。

    什么是DOM:DOM全称是Document Object Model,也就是文档对象模型。我们可以将DOM理解为,一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态地访问和修改文档内容、结构和样式。当创建好一个页面并加载到浏览器时,DOM就悄然而生,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。故可以使用 Javascript 语言来操作DOM以达到网页的目的。

    五、XSS测试方法

    1、工具扫描:APPscan、AWVS

    2、手工测试:Burpsuite、firefox(hackbar)、XSSER XSSF
    使用手工检测Web应用程序是否存在XSS漏洞时,最重要的是考虑那里有输入,输入的数据在什么地方输出。在进行手工检测XSS时,人毕竟不像软件那样不知疲惫,所以一定要选择有特殊意义的字符,这样可以快速测试是否存在XSS。

    (1)在目标站点上找到输入点,比如查询接口,留言板等;
    (2)输入一组"特殊字符+唯一识别字符",点击提交后,查看返回的源码,是否有做对应的处理;
    (3)通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件(构造闭合);提交构造的脚本代码,看是否可以成功执行,如果成功执行则说明存在XSS漏洞;

    六、XSS常用payload

    <script>alert(1)</script> 

    <img src="javascript.:alert('XSS')">

    <script>alert('XSS')</script>

    <table background='javascript.:alert(([code])'></table>

    <object type=text/html data='javascript.:alert(([code]);'></object>

    "+alert('XSS')+"

    '><script>alert(document.cookie)</script>

    ='><script>alert(document.cookie)</script>

    <script>alert(document.cookie)</script>

    <script>alert(vulnerable)</script>

    <s&#99;ript>alert('XSS')</script>

    <img src="javas&#99;ript:alert('XSS')">

    就先写这么几个吧,遇到可能存在XSS的情况,自己根据实际情况构造。

    七、XSS如何进行防护

    XSS防御的总体思路是:

    1、对输入(和URL参数)进行过滤,对输出进行编码。

    也就是对提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。虽然对输入过滤可以被绕过,但是也还是会拦截很大一部分的XSS攻击。

    建议过滤的关键字为:
    [1] ' 单引号
    [2] " 双引号
    [3] / 斜杠
    [4] 反斜杠
    [5] ) 括号
    [6] ; 分号
    [7] [ 中括号
    [8] < 尖括号
    [9] > 尖括号
    比如把<编码为&lt;
    2、在cookie中加入httponly属性可以在一定程度上保护用户的cookie,减少出现XSS时损失。

    cookie加上httponly属性<script>alert(document.cookie)</script>这类的代码就不能弹出cookie了,但是最好还是对输入输出过滤,因为xss不只是盗取这么简单的危害。

    八、XSS平台

    这里只推荐几个在线XSS平台:

    https://xsshs.cn/

    https://xss8.cc/xss.php?do=login

    http://xss.fbisb.com/xss.php?do=login

    百度一大堆,我就不列了,用的时候也很简单,注册登录后,创建项目勾上自己想做的事,他会自己生成payload。

  • 相关阅读:
    JS在线编辑器
    meta标签
    webstorm快捷键
    微信JS-SDK调用
    iOS -- UIApplication
    Xcode -- apple llvm 6.0 error错误如何解决
    C -- 字符串数组与字符串指针
    MAC -- 小技巧
    C语言 -- 折半查找小程序
    C -- 小程序
  • 原文地址:https://www.cnblogs.com/xyz315/p/12980839.html
Copyright © 2011-2022 走看看