zoukankan      html  css  js  c++  java
  • xss挖掘常见误区 [转]

    xss挖掘常见误区 
    1. 误区1: XSS,不是专门去“绕过”限制。 
    XSS是很好防御的,不就是过滤一下么,所以我们不要太多寄希望与程序员错误的过滤逻辑,而应该把希望寄托于程序员的“忘记过滤”上。 
    在实际测试过程中,这样的例子会有很多。下面是一个比较典型的例子。 
    腾讯微博: 

    正门: 正文内容。 你认为你能突破吗?程序员在这里是重兵把守,早就过滤的严严实实。想突破限制,几乎是不可能的任务。 如果大家意识到这点,就不会问“过滤了< , >” 怎么办啊! 

    小门: 其它参数。 比如微博发布音乐时的 musicLocation 等参数。 
    可以注意到,这里程序员就没有那么重视了,漏洞出了一次又一次。具体见: 


    A) http://www.wooyun.org/whitehats/心伤的胖子 的 腾讯微博系列 
    B) http://www.wooyun.org/whitehats/gainover 的  腾讯微博相关 

    2. 误区2: XSS,不仅仅存在于你所看得见的位置。 

    大部分新手,在寻找XSS时,都会在一些评论框去输入XSS代码,然后看页面有没有弹窗。当然不是说这个方法没有用,而是这种方法,几乎很难“碰”到一个XSS。所以很多新手会觉得XSS怎么这么难找到。原因有几点:A):像评论框,个人资料这种,你所能想到的位置。稍微有一点安全意识的程序员也能想到,所以经常是被过滤掉的。 B):你所填入的资料,并不总是以HTML标签的形式,输出到页面上。所以有时候并不是不能X,只是因为你填入的东西不对。 

    看不见有两个层面: 

    A) 输入看不见。 
    建议大家在提交请求的时候,使用抓包软件,然后对请求的参数逐个测试。 

    B)  输出看不见。 
    建议大家对返回的数据,也可以使用抓包软件抓取数据,然后对抓回的数据进行搜索,搜索你输入的数据,来定位看不见的输出。还有一种方式,在chrome中,可以搜索浏览器调试工具中的[resource]。 


    3. 误区3: XSS,绕过限制不是让你乱用字符去绕过,切忌盲目。 

    某人在看到代码是 <a href="xxxx\u0022"> 的时候,问大家:“为什么\u0022”不行啊? 这种绕过是盲目的。 

    在测试初期,我们如果不愿意去看对方的代码逻辑,可以采用“盲目”的方式去测试(用各种特殊字符去试探),这样可以节省很多时间。但是,当我们已经能够确定,数据输出位于哪个点时,比如上面这个 xxxx ,我们已经知道是输出到了 href="之间"  的时候。我们就不能盲目的去"绕过”,一定要有针对性。这个针对性主要是以下几点。 

    A) 输出点,是直接输出,还是经过了DOM。 

      简单通俗点的说法是: 
      前者可以通过右键查看源代码,搜索到。 
      后者通过右键查看源代码是搜索不到的。 

    B) 直接输出点,是位于HTML标签里,还是位于Script脚本里,或者是Style里 

      HTML标签又分为: 
        是在HTML标签之间: <div> 内容在这里 </div> 
        还是在HTML属性之间: <img alt="内容在这里"> 
        还是在HTML事件之间:  <img onload="内容在这里"> 
      Script/style标签: 
        根据输出自己去构造闭合,保证语法正确即可。 

    C)  DOM输出点,这个需要一定的JS基础。 
      C.1) 定位输出内容的JS代码段。 
      C.2) 查看此代码段,是否存在过滤问题。 
      C.3) 如果存在,制定绕过规则。 

    D) 输出点,采用的什么过滤规则 
      D.1)了解以上B)中, 
        每个点该过滤什么字符, 
        如果没过滤什么字符,该怎么去利用。 
      D.2)逐个测试法,看看目标输出点,到底过滤了哪些字符 
      D.3)测试服务器端的一些转换逻辑,比如有些服务器会先将&quot;转换为" 
      D.4)确定是否可绕过,不能绕过的尽早放弃 

    总之,首先要了解如何防御,你才能了解,如何绕过,不能盲目。其中,B+D的规则基本是死的,偶尔碰上些服务器端过滤逻辑有问题的,是可以绕过的,尤其是服务器端采用黑名单的方式时。C则较为灵活,所谓的“绕过”往往是针对这种。

  • 相关阅读:
    javascript循环
    MySQL 1130错误,无法远程连接
    理解jquery的$.extend()、$.fn.extend()【jQuery插件机制】
    2019年Java Web最流行的开发框架总结
    Java Web项目启动执行顺序
    sql 为什么要用where 1=1?
    Hadoop(六)之HDFS的存储原理(运行原理)
    Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群
    Hadoop(四)HDFS集群详解
    Hadoop(三)手把手教你搭建Hadoop全分布式集群
  • 原文地址:https://www.cnblogs.com/13ck/p/4460391.html
Copyright © 2011-2022 走看看