欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

从零开始学web安全(2)

来源:imweb社区 作者:刘志龙 时间:2016-02-10 TAG: 我要投稿

 上篇文章讲解了xss的一些基础知识,这篇文章继续研究学习。上篇文章提到了一些理论性的东西,看完估计感觉很快也忘了。简单回顾一下,讲了xss分类:存储型XSS,反射型XSS,DOM XSS。讲了几个简单的payload,也只是理论性的东西。这篇先不继续看理论了,先来尝试尝试如何使用payload~ 玩起~~

实战

理论的东西看了也很快就忘记了,于是我决定找个东西实际玩一玩~ 就从身边的东西,imweb博客入手好了。

仔细看了一下博客,最容易xss的似乎是文章里面的评论框,这个评论框是支持富文本的,当富文本一进来就意味着风险也一并进来了。

评论框的过滤规则一般有两类,第1类我们称为白名单,即:只允许使用白名单内的合法HTML标签,例如IMG。其它均剔除。 第2类我们称为黑名单,即:厂商会构建一个有危害的HTML标签、属性列表,然后通过分析用户提交的HTML代码,剔除其中有害的部分。

我们博客的评论框我测试了一下,应该是黑名单过滤的。

初探

对评论框还完全不了解,看看代码也是压缩了的,懒得去看压缩后的代码= = 直接用富文本试探好了~~

首先我提交了非常简单的一个payload

<img/src=@ onerror=alert(1) />

查看DOM如图所示:

有好消息有坏消息,坏消息是我们发现onerror以及它的属性值都被过滤了,但是也有好消息,我们发现直接提交html代码是不会被过滤的,这就为我们之后的xss提供了可能。Ok,继续试试一些常用的:

<script>alert(1)</script>
<a href="javascirpt: alert(1)”></a>

script毫无疑问是会被过滤的,这个我也只是随便试试。a标签当然不会被过滤,但是问题在于我们发现结果是这样的:

整个href及其之后的属性值都被过滤了,这个也在预料之中,我们可以简单的猜测一下原因,也许是:

  1. href就被过滤了(这个想法后来想想基本不可能,href要被过滤了正常链接怎么发?当然markdown可以)
  2. 代码里面去判断了href里面的值,发现里面有这样的东西然后把这个href后面所有东西都过滤了,这个可能性无疑是最大的。

好吧,既然要过滤,那我找一些不用的语法不就完了。继续试试,这回不用:

<button onclick="alert(1);">xss</button>

结果我们惊喜的发现,button居然没有做任何过滤的展示了:

然而点击并没有任何反应,看了一下dom:

有点失落,发现onclick以及后面的属性值都被过滤了。这时候我突然想到之前我测试的<img/src=@ onerror=alert(1) /> 这个payload的onerror也被过滤了,几乎是一样的情形。于是我们又得到了一个线索,可以推测过滤代码有这样一段逻辑,判断提交的评论里有没有on起始的属性,如果有的话,会把它过滤了。

梳理一下上面多次测试得到的线索:

  1. 富文本标签允许直接提交.
  2. script被过滤了。
  3. on开始的属性被过滤了,比如onerror,onclick,onmouseover等等,这个过滤规则直接废了很多payload。
  4. 被过滤了,这个也让很多payload失去了可能。

字符实体问题

继续尝试payload吗,还是思考一下上面的线索能给我们带来什么?发现线索3过滤on还是比较致命的,好像并没有办法绕开这个过滤。但是线索4似乎有机会啊!

这里先说一个简单的小知识,是我们后面成功xss重要的一步:

 在html标签属性的值里字符实体是会被转换成相对的字符的。这意味着下面这两个是等价的:
<button onclick="javascipt:alert(1);">xss</button>
<button onclick="javascipt:alert(1);">xss</button>

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载