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:后面单引号包起的语句给进行包含显示在前端。

实例:

由于这题是跳转到外链地址做题,但是网站上不去,所以我也没做,以下具体解题方法是搬来的。

查看源码通过iframe标签引入了一个http://exofvoewer.org, 结合乌云爆出的


漏洞,上传一个含有xss代码的图片触发xss。

exif xss

原文链接:先知社区

1.隐藏表单内没有看见http协议的头部特征

查看源码后发现读取了我们的cookie的user值,并且进行传递给了一个input标签

2.那很明显还是http头部插入,但是这次利用的是cookie

burpsuite抓包查看cookie

修改成插入恶意属性,然后放行

返回浏览器看到出现了我们插入的按钮

点击后触发了我们插入的javascript代码

也是隐藏表单,有个t_ua的值是一个user-agent,很明显是可以进行user-agent插入恶意代码,进行xss攻击。

直接抓下包,原先的user-agent

修改后放行

可以看到网页出现了我们植入的按钮

点击后:

1.由于主界面跟上关差不多,果断查看前端源码,果然发现隐藏表单

查看前端源码,t_sort 和h2标签处被转义了,但是我们的目标在这:

$str11=$_SERVER['HTTP_REFERER'];

这句代码可以获取http请求头中的Referer字段,就是我们上一级网页的url,只过滤了尖括号,使用javascript伪协议可以绕过

从之前的sql注入学习中,我们知道Referer是可以更改的,那我们这里也可以通过修改Referer值进行xss插入

2.直接启动我们的burpsuite,启动拦截然后刷新下网页

红框中的就是我们原本的Referer值,也就是我们的上一级网页url地址

修改Referer头,插入恶意代码使input标签添加进去属性,然后放行

然后回浏览器可以看到我们插入的代码有了效果

点击按钮之后