xss学习经历

xss的学习历程 1

由于最近对渗透测试的相关学习,了解了一些xss payload的一些方法,在这里总结一下,

xss分类

首先,简单介绍一些xss攻击的类别,xss分为存储型,反射性,DOM型,
XSS,全称Cross Site Scripting,即跨站脚本攻击,某种意义上也是一种注入攻击,是指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行,需要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本语言。根据恶意代码是否存储在服务器中,XSS可以分为存储型的XSS与反射型的XSS。

DOM型的XSS由于其特殊性,常常被分为第三种,这是一种基于DOM树的XSS。例如服务器端经常使用document.boby.innerHtml等函数动态生成html页面,如果这些函数在引用某些变量时没有进行过滤或检查,就会产生DOM型的XSS。DOM型XSS可能是存储型,也有可能是反射型。

XSS攻击是Web攻击中最常见的攻击方法之一,它是通过对网页注入可执行代码且成功地被浏览器执行,达到攻击的目的,形成了一次有效XSS攻击,一旦攻击成功,它可以获取用户的联系人列表,然后向联系人发送虚假诈骗信息,可以删除用户的日志等等,有时候还和其他攻击方式同时实施比如SQL注入攻击服务器和数据库、Click劫持、相对链接劫持等实施钓鱼,它带来的危害是巨大的,是web安全的头号大敌。

xss可以利用的标签

在XSS的世界里,有很多标签,事件,属性都是可以拿来执行js的。但是又都有哪一些可以执行js的标签:

。聪明的人又会说了还整base64老子直接写也能弹。如果目标站点对来测试XSS脆弱性。但是太过于规范的姿势往往会死在半路上(因为有filter的嘛)。所以我们需要更多的姿势,来判断真正的过滤规则到底是什么。相信我,程序员的安全水平都是参差不起的,过滤alert()的程序员我也碰到过。(此处省略3W字的吐槽)


想玩这个,可以在这里转换你的编码 链接

<script firefox>alert(1)</script>  //其实我们并不需要一个规范的script标签 
<script>~'\u0061' ;  \u0074\u0068\u0072\u006F\u0077 ~ \u0074\u0068\u0069\u0073.  \u0061\u006C\u0065\u0072\u0074(~'\u0061')</script> // 
<script/src=data&colon;text/j\u0061v\u0061&#115&#99&#114&#105&#112&#116,\u0061%6C%65%72%74(/XSS/)></script>//在这里我们依然可以使用那些编码 
<script>prompt(-[])</script> //不只是alert。prompt和confirm也可以弹窗 
<script>alert(/3/)</script> //可以用"/"来代替单引号和双引号 
<script>alert(String.fromCharCode(49))</script> //我们还可以用char 
<script>alert(/7/.source)</script> // ".source"不会影响alert(7)的执行 
<script>setTimeout('alert(1)',0)</script> //如果输出是在setTimeout里,我们依然可以直接执行alert(1)

【button标签】

应该有一部分人对于button标签的js调用还停留在通过event事件来实现。像下面的例子.


那么如果所有的on*(event)被过滤了,我们就没有办法了么?其实html5已经给我们带来了新的姿势

也许看到这里就有人会吐槽,这种需要用户交互的啊 bla,bla,bla…(几个小时过去了)如果使用onfocus事件,再加上autofocus我们就可以达到自动弹窗,无须交互了。

【p标签】

如果你发现变量输出在了p标签里,先不要急着从标签跳出去,因为只要你能跳出" "就已经足够了。

M

【img标签】

img标签没有什么好讲的了。不过值得注意的是,有些姿势是因浏览器不同而不能成功的执行的。所以在空闲时间对payload进行分类,做上可执行浏览器的注释,来提高你挖掘XSS的效率。

 
  //只在chrome下有效 
 
  //只在chrome下有效 

【body标签】

没有什么特别之处,都是通过event来调用js

 








































【var标签】

KCF

【div标签】

X

【iframe标签】

iframe这个例子当中值得一提的是,有时候我们可以通过实体编码 &Tab(换行和tab字符)来bypass一些filter。我们还可以通过事先在swf文件中插入我们的xss code,然后通过src属性来调用。不过关于flash值得一提的是,只有在crossdomain.xml文件中,allow-access-from domain=“*"允许从外部调用swf时,我们才可以通过flash来实现xss attack.

   
 
 
 

【meta标签】

很多时候,在做xss测试时,你会发现你的昵称,文章标题跑到meta标签里。那么你只需要跳出当前属性再添加http-equiv="refresh",就可以构造一个有效的xss payload了。当然一些猥琐流的玩法,会通过给http-equiv设置set-cookie来,进一步重新设置cookie来干一些猥琐的事情

? 

【object标签】

和a标签的href属性玩法是一样的,不过优点是无须交互。


【marquee标签】


【isindex标签】

第二个例子,值得我们注意一的是在一些只针对属性做了过滤的webapp当中,action很可能就是漏网之鱼。

 

【input标签】

没有什么特别之处,通过event来调用js。和之前的button的例子一样通过 autofocus来达到无须交互即可弹窗的效果。在这里使用到了onblur是希望大家学会举一反三。

 

【select标签】