XSS-lab

知识前置

Javasciprt HTML DOM 事件对象:它被允许在 JavaScript 在 HTML 的元素中处理不同事件。

PHP htmlspecialchars(str,quotestyle,character-set) 函数:把预定义的字符转换为 HTML 实体。

图片.png

quotestyle 参数:规定要如何编码单引号和双引号。

character-set 参数:规定使用的字符集。

解题过程

1、第一关,没有任何过滤,就是 name 参数,会回显到 h2 标签上没有任何处理.

所以输入简单的<script>alert(1)</script>.

图片.png

2、第二关,先使用第一关的 key 没有作用,看一下源代码,发现我们所输入的参数是被闭合在了双引号里面,但是没有任何的过滤。所以,我们先闭合前面的双引号和标签。输入我们的 key:"><script>alert(1)</sciprt>

图片.png

图片.png

3、第三关,输入第二关的 key 看一看,没反应。看后台代码,发现我们的双引号和 > 是进行了 HTML 编码,但是单引号没有被编码,这里是因为后端的 htmlspecialchars 函数没有规定单引号也要进行编码,所以,我们考虑使用 JavaScript 的 DOM 对象。我们先将前面的 value 闭合,因为有很多事件都可以达到效果,这里我们就是用 onclick 事件,输入我们的 key:'>onclick='alert(1).

图片.png

图片.png

4、第四关,没有特别的地方,就是改成了双引号闭合。将我们第三关的 key 改为:"onclick="alert(1)即可。

图片.png

5、第五关,我们输入第四关的 key,发现他将我们的 onclick 事件替换为了 on_click, 经过测试,发现是将 on 替换为 on_。但是又没有进行 HTML 编码,想使用 script 标签,也被替换为了 scr_ipt.

后端只对两个进行了替换,但是又可以闭合前面的 input 标签,所以我们绕过,另起一个新的标签 a,通过它的 href 属性来执行我们插入的代码。输入我们的 key:"><a href="javascript:alert(1)">aaaa</a>, 再点击 aaaa 即可。

图片.png

图片.png

图片.png