xss-labs level 15

管理员 2020-03-12 PM 277℃ 3条

1.这里引用了angular.min.js javascript框架。关于这个框架

然后我在网上找到了这个框架的包含模块资料,也就是ng-include,类似于文件包含这么一个功能

ng-include可以包含一个html文件(但不限于html文件), 但只是加载一个静态页面显示在前端,不会加载里面的js, 使用时要在文件名要用单引号包起来,下面是一个实例

2.查看后台源码,发现src被ng-include引用了,根据ng-inculde的资料介绍,我们包含一个文件试试,因为默认情况下不允许包含其他域名的文件,那我们就包含一下这关的主页level15.php,注意单引号包起来

发现没有,出现了一个网页出现了两个主界面。

尝试包含第一关也包含成功,

3.那既然能够包含外部文件,如果我又对外部文件进行参数提交会怎样呢?

那我们在当前界面尝试对level1.php进行操作插入一个<p>标签,发现当前页面显示出来了,也就是说,ng-include不仅能引进其他文件显示在当前界面,对其的参数提交操作也能显示。

4.然后我尝试直接使用弹窗,发现代码插入了但是没有执行,因该是ng-include限制了不能加载自带的js,需要载入后二次触发才可以触发,那我们可以像前面的关卡一样,构造一个按钮或超链接,然后点击触发

5.我这里直接构造一个a标签,提交后发现连level1.php也没法显示,因该是使用了单引号破坏了闭合,致使代码不完整无法执行包含

那我们就使用 / 代替单引号,

提交后可以看到有反应了,显示出了我们的超链接

点击超链接后执行了href后面的javascript代码。

这样就完成了一次xss攻击,

6.分析:

原本的后端代码:

echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';

当我们提交src的值 'level1.php?name=<a href=javascript:alert(/xss/)>click here</a>'的时候,后端处理的实际操作时这样的:

echo '<body><span class="ng-include:'level1.php?name=<a href=javascript:alert(/1/)>click here!</a>'"></span></body>';

就会达到一种像sql注入时因闭合符号,而导致的语句发生改变的情况。实际上程序会认为这是一句ng-include命令,把ng-include:后面单引号包起的语句给进行包含显示在前端。

实例:

标签: 外部引用包含

非特殊说明,本博所有文章均为博主原创。

上一篇 xss-labs level 14
下一篇 xss-labs level 16

评论啦~



已有 3 条评论


  1. XSS-labs练习笔记 – 0verflow's blog

    […] xss-labs level 15 […]

    回复 2020-03-12 19:50
  2. 1
    1

    1

    回复 2024-02-16 22:27
  3. 1
    1

    1

    回复 2024-02-16 22:52