XSS-Labs/第十五关

第十五关,AngularJS 客户端文件/模板包含(ng-include)

在正式开始之前,需要了解一下内容:

①、Angular的ng-include

②、Angular的核心机制

③、Angular的底层逻辑、同源策略

(1)AngularJS的ng-include

用于在不刷新页面的情况下,把一个外部的HTML片断异步下载并挂载插入当前页面的DOM节点中。

语法格式:

属性方式:<div ng-include=”‘template.html'”></div>

类名方式:<span class=”ng-include: ‘template.html'”></span>

(2)AngualarJS的核心机制

ng-include接收的是一个Angular表达式,不是一个普通的字符串

①、如果不带单引号:ng-include: level1.php

AngularJS会将level1.php当作当前作用域中(在这里可以想象学习Java/Python/C的作用域的场景,就是局部变量和全局变量)的一个变量名去查找。

由于我们写的是一个文件名,显然这个作用域中不存在该变量名,就会导致解析结果为undefined,Angular就不会发起任何网络请求。

②、如果带上单引号:ng-include: ‘level1.php’

用单引号包裹后,Angular就会把它识别为常量字符串(在Angular中就是URL),此时会触发底层的HTTP请求去获取对应资源。

(3)AngularJS底层逻辑和同源策略

①、AngularJS底层逻辑

当AugularJS识别到URL字符后,会调用内部的服务,用于异步拉取(即,浏览器在后台发送一个AJAX (XMLHttpRequest/Fetch)GET请求去获取目标文件内容,举例:‘level1.php’,浏览器就回去获取同目录下的level1.php的内容,为什么是同目录,因为我们这里举例的路径就是在同一个目录下。)

②、同源策略

简单来说就是防止网站A.com获取网站B.com的内容,即跨域访问而产生的策略。

AJAX受同源策略严格约束,如果传入第三方域名,浏览器就会因为跨域(CORS)报错直接拦截响应,导致请求失败。

由于受到同源策略的影响,所以我们要使用同目录下的URL。

查看level15.php源码

头部区域调用了angular.js文件

接收前端传递过来的src后,用HTTP实体转以后,再拼接到ng-include:”的单引号中。

此时AngularJS识别到ng-include:”里面的URL,就会进行异步拉取,去获取该URL的内容。

解题方法:

由于是直接去获取URL的内容,所以我们可以选择一个关卡比较好绕过的。

level15.php?src=’level1.php?name=<script>alert()</script>’

可以看到通过AngularJS的异步拉取,我们获得了level1.php的内容

按F12检查还可以看到AngularJS生成的DOM结构

但是奇怪的是,明明成功动态插入了<script>标签,但是浏览器并没有执行。

经过查询,HTML5限制了通过异步加载、动态插入DOM的<script>标签自动执行。

所以我们要换一种自带触发器的HTML标签,例如<img>、<input>等。

payload:

tips:img里面的src属性可以是1也可是2或者在当前目录下不存在的图片,请勿写#,否则浏览器就不会返回执行onerroe属性。

http://靶场地址/level15.php?src=’level1.php?name=<img src=1 onerror=alert()>’

回车即可

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇