【理论详解】
00×00 什么是XSS攻击?

XSS攻击误区详解




00×01 详解误区
误区1:XSS,不是专门去“绕过”限制.
打个简单的比方,一个已经被层层把守的大门,面前荆棘无数
而你又单枪匹马的,怎么闯的进去? 这个时候你要意识到,走大门是不可能的
其实我们要突破的城防,有很多小门可以进去的,甚至不需要任何手段就可以直接走进去.我们为什么不走呢?
XSS是很好防御的,不就是过滤一下么,所以我们不要太多寄希望与程序员错误的过滤逻辑,而应该把希望寄托于程序员的“忘记过滤”上
误区2:XSS,不仅仅存在于你所看得见的位置
大部分新手,在寻找XSS时,都会在一些评论框去输入XSS代码
然后看页面有没有弹窗.当然不是说这个方法没有用,而是这种方法
几乎很难“碰”到一个XSS.所以很多新手会觉得XSS怎么这么难找到
原因有几点:
A):像评论框,个人资料这种,你所能想到的位置.稍微有一点安全意识的程序员也能想到,所以经常是被过滤掉的
B):你所填入的资料,并不总是以HTML标签的形式,输出到页面上.所以有时候并不是不能X,只是因为你填入的东西不对
看不见有两个层面:
A) 输入看不见.
建议童鞋在提交请求的时候,使用抓包软件,然后对请求的参数逐个测试
B)  输出看不见.
建议童鞋对返回的数据,也可以使用抓包软件抓取数据,然后对抓回的数据进行搜索搜索你输入的数据,来定位看不见的输出.还有一种方式,在chrome中,可以搜索浏览器调试工具中的[resource]
误区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)确定是否可绕过,不能绕过的尽早放弃
00×03 总结
总之,首先要了解如何防御,你才能了解,如何绕过,不能盲目
其中,B+D的规则基本是死的,偶尔碰上些服务器端过滤逻辑有问题的,是可以绕过的
尤其是服务器端采用黑名单的方式时.C则较为灵活,所谓的“绕过”往往是针对这种