【XSS攻击介绍(一)】

打印 上一主题 下一主题

主题 874|帖子 874|积分 2632

目录
一、前言 
二、攻击条件和漏洞验证方法
三、XSS漏洞分类
四、利用方法
五、XSS payload变形
六、防护总结


一、前言 

      XSS:跨站脚本攻击,即CSS。利用网页开发时留下的漏洞(web应用程序对用户的输入过滤不足),巧妙的将恶意的代码注入到网页中,使用户浏览器加载并执行恶意制造的代码,以达到攻击的效果。这恶意的代码通常是JS代码,但实际上也可以是JAVA、VBS、ActiveX、Flash或者是普通的HTML。(浏览器不会判断,只要是符合解析,那么就会执行恶意的代码)。可能存在XSS的地方:微博、留言板、聊天室等收集用户输入的地方都可能遭受XSS攻击的风险。只要你对用户的输入没有严格过滤。

二、攻击条件和漏洞验证方法

攻击条件:1. 需要向WEB页面注入精心构造的恶意代码。
                   2. 对用户的输入没有做过滤或者过滤不严谨,恶意代码能够被浏览器成功执行。
验证XSS漏洞存在的一般方法:可以使用script标签来手动检测。
   如:   

  

 
反射型xss将数据插入到页面中:

XSS漏洞有如下的危害:盗取各种用户的账号、窃取用户的cookie然后冒充用户甚至是管理员进入网站、劫持用户会话,执行任意操作、刷流量,广告弹窗、网页挂马传播蠕虫病毒、记录用户键盘输入。


三、XSS漏洞分类

          
     反射性XSS :非持久型的XSS,没有长期被放在服务器中,是现在最容易出现的一种XSS 漏    洞。当用户在请求某一个URL得治的时候,会携带某一部分数据。当客户端进行访问某一条链接的时候,攻击者就可以将恶意的代码植入到URL中,如果服务器端未对URL的参数做判断或者是过滤,直接就返回相应页面,那么XSS攻击代码就会一起被传输到用户的浏览器,从而出发反射型XSS。可配合短链接实现钓鱼。反射型XSS的payload常常是构造在网站的某一个通过GET传递的参数中。(对应的数据流向是:浏览器---后端---浏览器)
      存储型XSS :存储型XSS又叫做持久型XSS。它是危害最大的XSS。这种类型的XSS可以将恶意的攻击代码持久化的保存在服务器上,然后被显示到HTML页面中。此类型的XSS漏洞经常出现 在用户评论的页面,将攻击者精心构造的恶意代码保存在数据库中。如果其他的用户访问到该页面时就会触发恶意的XSS代码执行,从而窃取用户的信息。(数据流向:浏览器---后端---数据库---后端---浏览器)
     DOM型XSS :DOM是由许多不同类型的节点共同组成,主要由元素节点、文本节点、属性节点。DOM型XSS漏洞是基于文档对象模型的一种漏洞。这种XSS和反射型XSS、存储型XSS的原理上由本质的区别,它的攻击代码不需要服务器解析响应,触发XSS依靠的是浏览器端的DOM解析。客户端上的JS脚本可以访问浏览器的DOM并修改页面的内容,不依赖服务器的数据,直接从浏览器端获得数据并执行。在客户端直接输出DOM内容的时候非常容易触发DOM型XSS漏洞,如doccment.getElementByld("x").innerHTML、doccument.write等。

四、利用方法

1.  XSS构造以及变形:
利用构造html标签和标签
  如:
   

 2. 利用HTML标签的属性值--伪协议
 如: hello
          
 3.  利用JS事件
  如:
       
  常见的事件:

 4. 古老的CSS利用方法
  利用CSS层叠样式表来触发XSS,基本上不能适合现在的主流浏览器。
  如:
  




五、XSS payload变形

    1. 大小写混编:

click me
2. 双写关键字:
  alert(/xss/)
3. /代替空格:

4. 反引号代替双引号:

 5. tab水平制表符和回车:在一些位置添加Tab和回车符号来绕过关键字检测
1.
2. click me!click me!
6. HTML实体编码和URL编码:






六、防护总结

    对于存储型和反射型:1. 修改为纯前端渲染,把代码和数据分开。浏览器先加载静态的HTML,此HTML中不包含任何跟业务相关的数据。然后浏览器执行HTML中的JavaScript。JavaScript通过Ajax加载业务数据,调用DOM API更新到页面上。但是纯前端的渲染还要避免DOM型XSS漏洞,如:onload和Javascript:xxx事件。2. 对HTML做充分的转义操作。非必要不使用HTML拼接,如果拼接HTML是必要的,就要采用市面上安全合适的转义库,对HTML模板进行充分的转义。常用的模板引擎有:doT.js、ejs、FreeMarker等。。
   对于DOM型XSS攻击,在使用.innerHTML   outerHTML document.write()时不要把不可信的数据插入到HTML页面中,应尽量使用.textContent .setAttribute()等。 如果使用到Vue/React技术栈,不使用v-html/dangerouslySetInnerHTML功能,就在前端render阶段避免innerHTML、outerHTML的XSS隐患。尽量避免使用DOM中的内联事件监听器,如:location onclick onerror   onload  onmouseover以及标签的href属性,javascript的eval()、setTimeout()、setInterval()等,都能将恶意的字符串作为代码运行。如果项目中有用到这些的话,一定要避免在字符中拼接不可信的数据。
      其他方法:输入内容长度控制,虽然无法完全避免xss,但是可以增加攻击难度。HTTP-only Cookie:禁止javascript读取某些敏感的cookie,就算攻击者完成攻击也无法读取cookie。加入验证码机制:防止脚本冒充用户提交危险操作。执行严格的CSP(Content Security Policy)策略。
               
    

  
 













    

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表