上篇文章讲解了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及其之后的特点值都被过滤了,这个也在预料之中,咱们能够简略的猜想一下原因,也许是:
href就被过滤了(这个主意后来想想根本不或许,href要被过滤了正常链接怎样发?当然markdown能够) 代码里边去判别了href里边的值,发现里边有这样的东西然后把这个href后边一切东西都过滤了,这个或许性无疑是最大的。
好吧,已然要过滤,那我找一些不必的语法不就完了。持续试试,这回不必:
<button onclick="alert(1);">xss</button>
成果咱们惊喜的发现,button竟然没有做任何过滤的展现了:
可是点击并没有任何反响,看了一下dom:
有点丢失,发现onclick以及后边的特点值都被过滤了。这时候我忽然想到之前我测验的<img/src=@ onerror=alert(1) /> 这个payload的onerror也被过滤了,几乎是相同的景象。所以咱们又得到了一个头绪,能够估测过滤代码有这样一段逻辑,判别提交的谈论里有没有on开端的特点,如果有的话,会把它过滤了。
整理一下上面屡次测验得到的头绪:
富文本标签答应直接提交. script被过滤了。 on开端的特点被过滤了,比方onerror,onclick,onmouseover等等,这个过滤规矩直接废了许多payload。 被过滤了,这个也让许多payload失去了或许。
持续测验payload吗,仍是考虑一下上面的头绪能给咱们带来什么?发现头绪3过滤on仍是比较丧命的,如同并没有方法绕开这个过滤。可是头绪4好像有时机啊!
这儿先说一个简略的小常识,是咱们后边成功xss重要的一步:
在html标签特点的值里字符实体是会被转换成相对的字符的。这意味着下面这两个是等价的: <button onclick="javascipt:alert(1);">xss</button> <button onclick="javascipt:alert(1);">xss</button>
[1] [2] [3] 黑客接单网