安全街
一步步,我们的信息安全时代

曾经在知乎上看过一个有关XSS的笑话,很生动形象的描述了XSS是怎么一回事。

妈妈:给我看着衣服
小孩:好的
小偷来

正常工作:
小孩:你是谁?
小偷:我叫张三
小孩:妈妈,有人偷衣服
妈妈:谁?
小孩:张三
小偷被捉

漏洞:
小孩:你是谁?
小偷:我叫逗你玩
小孩:妈妈,有人偷衣服
妈妈:谁?
小孩:逗你玩
妈妈:。。。

三类XSS的区别

网上很多文章都有提到反射型XSS、储存型XSS和DOM-Based XSS的区别,但讲的都不是很清楚。在这里我简单的说一下,若有错误还请批评指正。

  • 储存型XSS
    储存型XSS的特点是可以存入数据库中,通过在加载时从服务器端获取数据,将被构造好的恶意代码插入到客户端并执行来造成危害。最有代表性的例子就是留言板。
  • 反射型XSSDOM-Based XSS
    一直以来,很多人都对反射型XSS和DOM-Based XSS傻傻分不清楚。很多人解释DOM-Based XSS的时候都提到其是通过修改DOM来执行恶意代码,其实重点完全不对。

    • 反射型XSS是指从客户端输入数据传输到服务端,再从服务端获取处理后的数据来执行恶意代码。它的返回包里是可以看得到恶意代码的。虽然恶意代码一开始来源于客户端输入,但它经过了服务端处理,所以本质上是执行了来自服务端的恶意代码。就像是发出了一道恶意光线到服务镜子,服务镜子又将恶意光线反射回来炸开,因此得名反射型
    • DOM-Based XSS是指从客户端输入数据,直接在客户端DOM中插入并执行恶意代码。一个明显的特点就是它并没有服务器端参与,所以返回包中看不到恶意代码甚至根本就没有返回包。
    • 举个栗子。使用搜索框搜索时,一般搜索结果上方都会出现一行小字”搜索XXX的结果为:“。我们假定此处XXX存在XSS漏洞。假设XXX是通过搜索后返回的json获取并插入进来的,这就是一个反射型XSS。如果XXX是通过JS直接从搜索框获取值插入进来的,这就是一个DOM-Based XSS。

XSS的危害性

说起XSS的危害性,储存型XSS自然稳居第一,它有以下几点优势:

  • 持久性。只要不在数据库中被删除,它就可以一直造成危害。
  • 防不胜防。你以为数据库中的数据只会出现在一个页面中吗?太天真了,一个恶意代码可能会被多个页面的多个位置执行,即使修修补补也总有漏网之鱼。因此储存型XSS是较难修补的。
  • 无攻击成本。非持久型XSS的攻击或多或少都要带上一点儿社会工程学的影子,它们几乎都要靠诱骗受害者点击来完成。储存型XSS可以让受害者在不知不觉中被攻击,甚至于刚加载完页面,恶意代码就已经执行。
  • 无差别攻击。储存型XSS会对本网站的用户进行无差别攻击,攻击目标打击精准,范围大。而非持久型XSS需要通过各种方式诱骗用户点击,点击者极有可能不是来自于本网站的用户,受害范围较小。
  • 更容易获得高权限。一般我们不会满足于普通用户权限,而是把目标放在管理员身上。储存型XSS更容易被管理员看到,并不需要我们人工去骗管理员。比如留言需要审核的场景,管理员是一定会去看的,这样就会很容易中招了。

最近会写一篇XSS利用的文章,在里面探讨一些有实用价值的姿势。

*本文为原创,作者T1dDl3R,首发于本博客。转载请注明

这篇文章还没有人发言,快抢第一!

发表评论