前几天在漏洞挖掘中遇到个xss,感觉绕过过程蛮有意思的,写篇文章记录下。

  接下里是我对这个xss详细的分析和绕过

  存在问题站点http://******/index/appInfo?appId=784&url=xss

  当我查看源代码搜索xss:

  一处输出点:

  继续搜索第二处输出点:

     

两次输出,第一次输出是在input标签中,第二次是在js中,这里不考虑input中利用了。因为input的type为hidden,即使能够利用成功xss也非常的鸡肋:

 

所以不考虑input标签了,我们转战到js下构造代码让其弹窗。

  最简单的,我们先闭合引号,先输入:';alert(1);//

  

页面直接变成空白页。。是不是程序判断中过滤了 alert?

  我们尝试删除 alert:

  

还是 空白页,说明()被过滤了。

我们尝试删除()看看alert有没有被过滤:

  

页面显示依旧是空白,接着我尝试把alert替换成prompt和confirm等常用弹窗遇见 ,依旧是空白页,很明显这里对弹窗函数和过滤了(),我们再次尝试双引号("")有没有被过滤:

  

输入:http://******/index/appInfo?appId=784&url=xss';"xss";//

页面显示内容,然后再次查看源代码:

  

双引号没有被过滤。过滤了括号,一些弹窗函数。

  现在我们不抱着弹窗的目的看看能否执行一些简单的js操作,尝试用js代码跳转到百度:

  代码window.location.href="http://baidu.com"

  我们闭合然后构造:

  

发现还是显示空白页,说明过滤了,我猜测过滤window,我删除其他内容 保留window关键字:

  

只要有 window他就显示空白页面。说明对window做了过滤。

  window表示打开的当前窗口,表示当前的还有this关键字,这里过滤了window我们可以尝试使用this代替window:

  我们再次构造地址:http://******/index/appInfo?appId=784&url=xss';this.location.href="http://baidu.com";//

  这次他没有拦截,让我们跳转到了百度:

    

现在我们可以使用他进行url的跳转,现在我开始想着尝试弹窗,但是这貌似很难,因为他过滤的东西有点多。

  我尝试能不能使用dom节点写入:

  

又是空白页面,我保留document删除其他部分 :

  

我发现程序只要 有document他就会拦截你到空白页,对于dom来说,没有document是没有灵魂的。虽然过滤document但是我们还是有办法绕过的。

本地调试:

发现self['doc'+'ument']就是document

我们构造地址:http://******/index/appInfo?appId=784&url=xss';self['doc'%2b'ument'].body.innerHTML=111//

其实写到这里,我们回顾发现我们现在已经可以做很多我们想做的事情了,我们可以通过js修改一个 界面内容,通过js实现一个任意跳转等。

  但是我们本能的觉得xss必须得弹个框框,这是我们普遍对xss的认知,现在我就只想弹窗?我该怎么做?

  在过滤了括号,一些弹窗的函数后,我发现我已经很难让他弹窗了。。我思考了很久都无法做到弹窗。。后来请教大佬得到了一种弹窗的方法,为我xss学习又一次打开新的世界:

  思路1:通过函数劫持弹窗 :

  查看源码我们发现在下面一行调用了jq的attr属性操作函数,这里我们能否进行函数的劫持?对attr函数进行劫持,劫持他变成alert呢?

  这样不就能弹窗了?

  因为alert被过滤了,所以我们要用self['al'+'ert']替代绕过:

  我们尝试构造这样一个地址:http://******/index/appInfo?appId=784&url=xss';jQuery['attr']=this['al'%2b'ert']//

    

我们查看 源代码:

  

    

下面是我对函数劫持的分析:

  

  弹窗思路2:

  使用#xss payload的方法  

  使用window.location.hash然后外部定位就不会造成任何拦截了 :

  因为过滤很多关键字,我们构造如下地址:

  http://******/index/appInfo?appId=784&url=xss%27;location=this.location.hash.slice%601%60;//#javascript:alert('xss')

  

就可以造成弹窗,这里过滤了()我尝试%28%29一样是空白页,尝试把括号改成``还是空白页,当我编码``为%60的时候发现没有拦截,程序自动decode了。故导致xss:

先写到这里,这次xss的绕过让我收获了很多,为我以后xss研究打开了新的大门,总结 了一些宝贵的经验,从前辈师傅那里学到了更深层的东西

比如说想玩好xss,一定要学好javascript基础!马上要过年了,特此 写这篇文章 留念下。新的一年有更多的困难和挑战等着我,更多的基础知识需要掌握!加油!    

记录一次有意思的XSS过滤绕过2的更多相关文章

  1. 记录一次有意思的XSS过滤绕过

    我的朋友赵一天今晚给我发了一个站,跟我说他xss绕不过去,让我试试.我正好无事,就帮她看看咯. 通过赵一天发我的站点,说实话,我自己学到了很多东西,感谢大佬的教诲.今天分享出来: 站点:xxx.com ...

  2. WAF指纹识别和XSS过滤器绕过技巧

    [译文] -- “Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters” 0x1 前言 之前在乌云drop ...

  3. Bypass xss过滤的测试方法

    0x00 背景 本文来自于<Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters>其中的byp ...

  4. XSS插入绕过一些方式总结

    详见:http://blog.csdn.net/keepxp/article/details/52054388 1 常规插入及其绕过 1.1 Script 标签 绕过进行一次移除操作: <scr ...

  5. (转)Bypass xss过滤的测试方法

    from wooyun//五道口杀气 · 2014/01/02 19:16 0x00 背景 本文来自于<Modern Web Application Firewalls Fingerprinti ...

  6. xss原理绕过防御个人总结

    xss原理 xss产生的原因是将恶意的html脚本代码插入web页面,底层原理和sql注入一样,都是因为js和php等都是解释性语言,会将输入的当做命令执行,所以可以注入恶意代码执行我们想要的内容 x ...

  7. 风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧

    风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧 XSS绕过-过滤-编码 核心思想 后台过滤了特殊字符,比如说

  8. dedecms功能性函数封装(XSS过滤、编码、浏览器XSS hack、字符操作函数)

    dedecms虽然有诸多漏洞,但不可否认确实是一个很不错的内容管理系统(cms),其他也不乏很多功能实用性的函数,以下就部分列举,持续更新,不作过多说明.使用时需部分修改,你懂的 1.XSS过滤. f ...

  9. Asp.net Mvc中利用ValidationAttribute实现xss过滤

    在网站开发中,需要注意的一个问题就是防范XSS攻击,Asp.net mvc中已经自动为我们提供了这个功能.用户提交数据时时,在生成Action参数的过程中asp.net会对用户提交的数据进行验证,一旦 ...

随机推荐

  1. mysql-16进制、十进制互转

    先截取左边4位,再转换: conv(left(t1.DEVICEID, 4), 16, 10)      //转十进制 conv(left(t1.DEVICEID, 4), 10, 16)      ...

  2. C语言经典算法 - 多维矩阵转一维矩阵的代码

    下边内容内容是关于C语言经典算法 - 多维矩阵转一维矩阵的内容,应该能对码农也有好处. #include <stdio.h>#include <stdlib.h>int mai ...

  3. Netty 核心内容之 编解码器

    原文链接 Netty 核心内容之 编解码器 代码仓库地址 编解码器 我认为Netty 最棒的一点就是Netty 设计的编解码链,这一优秀的设计,可以很方便的实现二进制流->ByteBuf-> ...

  4. PM领导能力成熟度2级

    人生如戏,大幕拉开,他走上舞台,饰演PM一角. 从技术岗位迈向管理岗位的第一步,对大多数像他一样的新晋PM来说,并不轻松.技术知识与经验是他曾经的主要才能与成功基础,而从成熟度一级开始,身为管理者的他 ...

  5. 【Oracle教程资源大合集】Oracle数据库免费学习资源汇总

    Oracle的产品非常丰富,各类学习资源也五花八门,本文将介绍Oracle官方的免费教程与风哥整理的Oracle视频教程: 1.Oracle帮助中心 Oracle帮助中心也称为Oracle文档中心,这 ...

  6. python-重载

    重载概念 重载是对继承的父类方法进行重新定义.重载可以重新定义方法还可以重新定义运算符.因为通过继承的类不一定能满足当前类的需求.在当前类中只需要修改部分内容而达到自己的需求. 重载特点 减少代码量和 ...

  7. Spring+Spring MVC+Mybatis 框架整合开发(半注解半配置文件)

    项目结构: (代码里面都有注释) 一.在pom文件中依赖jar包 因为我这里分了模块,所以有父子级的共两个pom文件 父级: <?xml version="1.0" enco ...

  8. Redis中5种数据结构的使用场景

    一.redis 数据结构使用场景 原来看过 redisbook 这本书,对 redis 的基本功能都已经熟悉了,从上周开始看 redis 的源码.目前目标是吃透 redis 的数据结构.我们都知道,在 ...

  9. 虚拟机安装windows7 VMware12 安装window7

    闲来无事就来搞虚拟机装操作系统!期间出现很多错误,分享一下 一.安装虚拟机 二.准备安装的镜像文件 我下载的是windows7纯净版 深度技术里面下载的(http://www.xitongzhijia ...

  10. LeetCode算法题-Longest Word in Dictionary(Java实现)

    这是悦乐书的第303次更新,第322篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第171题(顺位题号是720).给出表示英语词典的字符串单词数组,找到单词中长度最长的单 ...