有段时间没写东西了, 最近看到zone里出现了很多“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怎么这么难找到。原因有几点:

像评论框,个人资料这种,你所能想到的位置。稍微有一点安全意识的程序员也能想到,所以经常是被过滤掉的。

你所填入的资料,并不总是以HTML标签的形式,输出到页面上。所以有时候并不是不能X,只是因为你填入的东西不对。

看不见有两个层面:

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

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

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

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

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

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

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

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

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

C)  DOM输出点,这个需要一定的JS基础。

定位输出内容的JS代码段。

查看此代码段,是否存在过滤问题。

如果存在,制定绕过规则。

D) 输出点,采用的什么过滤规则

了解以上B)中,   每个点该过滤什么字符,   如果没过滤什么字符,该怎么去利用。

逐个测试法,看看目标输出点,到底过滤了哪些字符

测试服务器端的一些转换逻辑,比如有些服务器会先将&quot;转换为”

确定是否可绕过,不能绕过的尽早放弃

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

4. 其它:     
    
XSS,代码里明明看到插入了 <script>,怎么不执行啊?

这种问题,zone里貌似有几个帖子了,这里强调下,打开调试工具看代码的时候,请注意颜色。 以chrome为例,只有<script>..</script>标记以彩色显示时,才说明是插入了,而以黑色显示时,实际上的代码是:&lt;script&gt;…. &lt;/script&gt; ,其它标签同理。

<xxx xxxx=”xxx”> 这个放进去怎么不行啊?

首先确定你这个是XSS代码,此外,一些新手会在网上找到一些旧的资料,而有些XSS代码是IE6时代的产物,或者是浏览器特异的代码,所以一定要注意代码来源,适用于什么浏览器。

5. 总结;     
    
希望以后少出现一些类似下面的帖子:     
    
http://zone.wooyun.org/content/1436http://zone.wooyun.org/content/1424http://zone.wooyun.org/content/1543http://zone.wooyun.org/content/1438http://zone.wooyun.org/content/1169     
    
阅读此文时,可参见我之前做的一个PPT:

http://vdisk.weibo.com/s/9Cvwn

XSS之学习误区分析的更多相关文章

  1. web前端的学习误区

    web前端的学习误区  网页制作是计算机专业同学在大学期间都会接触到的一门课程,而学习网页制作所用的第一个集成开发环境(IDE)想必大多是Dreamweaver,这种所见即所得的“吊炸天”IDE为我们 ...

  2. Web前端开发学习误区,你掉进去了没?

    从接触网站开发以来到现在,已经有五个年头了吧,今天偶然整理电脑资料看到当时为参加系里面一个比赛而做的第一个网站时,勾起了在这网站开发道路上的一串串回忆,成功与喜悦.烦恼与纠结都历历在目,感慨颇多. 先 ...

  3. XSS基础学习

    XSS基础学习 By:Mirror王宇阳 什么是XSS XSS攻击是指在网页中嵌入一段恶意的客户端Js脚本代码片段,JS脚本恶意代码可以获取用户的Cookie.URL跳转.内容篡改.会话劫持--等. ...

  4. IT人学习方法论(二):学习误区

    之前我们讨论了“学什么”的问题,今天我们来谈一谈“怎么学”的问题.磨刀不误砍柴工,我们要提高学习效率,首先需要找到自己学习方法上的误区. 一些常见的学习方法误区 1)资料导向型 现在就停止阅读这篇文章 ...

  5. XSS漏洞学习笔记

    XSS漏洞学习 简介 xss漏洞,英文名为cross site scripting. xss最大的特点就是能注入恶意的代码到用户浏览器的网页上,从而达到劫持用户会话的目的. 说白了就是想尽办法让你加载 ...

  6. Linux内核分析第五周学习总结——分析system_call中断处理过程

    Linux内核分析第五周学习总结--分析system_call中断处理过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  7. Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程

    Linux内核分析第六周学习笔记--分析Linux内核创建一个新进程的过程 zl + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

  8. XSS平台-学习

    单点登录 - Telnet 404https://sso.telnet404.com/cas/login?service=https%3A%2F%2Fwww.seebug.org%2Faccounts ...

  9. DVWA(xss部分源码分析)

    前言 DVWA靶场都不陌生,最新学习xss,从新又搞了一遍xss部分,从源码方面康康xss的原因,参考了很多大佬的博客表示感谢,网上也有很多DVWA靶场教程,就水一篇吧. 更多web安全知识欢迎访问: ...

随机推荐

  1. 最小生成树------Kruskal算法

    Kruskal最小生成树算法的概略描述:1 T=Φ:2 while(T的边少于n-1条) {3 从E中选取一条最小成本的边(v,w):4 从E中删去(v,w):5 if((v,w)在T中不生成环) { ...

  2. 项目中 mysql中的内容关于上架时间和下架时间

    隐藏左边导航 在mysql中,是存放的10位的时间截,在后台添加时,时间的格式是:'Y-m-d H:i',没有秒的 字段 字段名称 字段类型 是否为空 默认值 备注 publish_up int(11 ...

  3. jquery扩展 $.fn

    $.fn是指jquery的命名空间,加上fn上的方法及属性,会对jquery实例每一个有效. 如扩展$.fn.abc(),即$.fn.abc()是对jquery扩展了一个abc方法,那么后面你的每一个 ...

  4. 过滤textarea

    Function UBBFilter(ByVal reString) Dim Str:Str=reString If Not IsNull(Str) Then Str = Replace(Str, & ...

  5. 【转】Open Live Writer 插件更新

    一.更新内容 cnblog 页签中增加 Lua 和 Matlab 语法高亮:(SyntaxHighlight 页签中尚未添加) 增加折叠区域插件,见效果展示: 增加 bat 执行文件,直接拷贝插件所需 ...

  6. Centos搭建PHP5.3.8+Nginx1.0.9+Mysql5.5.17

    操作环境 操作系统:Mac Os Lion 虚拟主机:VMware Fusion 虚拟系统:Centos 5.5+ 操作用户:Root 实现目的:搭建LNMP环境. 安装依赖库和开发环境 #依赖库和开 ...

  7. makefile文件制作入门

    一.首先,看一下最简单的C文件 //hello.c文件 #include <stdio.h> void main() { printf("hello world\n") ...

  8. iOS调试程序时,启动应用失败的解决办法

    最近在iOS项目中调试程序,项目中用到第三方应用来启动我的应用程序,调试阶段在实体机上用第三方应用启动我的应用时,出现如下错误,程序停止运行: 同时,在AppDelegate对象的如下方法中设置断点: ...

  9. 19_高级映射:一对多查询(使用resultMap)

    [需求] 查询订单以及订单明细的信息. 确定主查询表:订单表orders 确定关联查询表:订单明细表 orderdetail 在一对一查询的基础上添加订单明细表关联即可. [分析] 使用resultM ...

  10. php 二维转一维

    Array(    [0] => Array        (            [salesorderid] => 10001            [createdtime] =& ...