当前位置: 首页 > news >正文

渗透实战PortSwigger Labs AngularJS DOM XSS利用详解

本Lab学习到关于AngularJS的 xss 漏洞利用
直接输入回显页面,但是把<>进了 html 编码了

当我们输入{{1+1}},没有当作字符处理,而是执行了

{{}} 是多种前端框架(如 Vue、Angular、Django 模板等)中常见的模板插值语法,主要用于将数据动态绑定到视图,双花括号 {{1+1}} 包裹的表达式会执行运算。
测试{{alert()}},因为存在沙箱机制过滤了危险字符

这里用到新的绕过方法{{ $eval.constructor('alert()')() }}

下面分析为什么这样可以执行alert()

创建 AngularJS 代码

<!DOCTYPE html>
<html><head><title>AngularJS</title><!-- 引入AngularJS库(1.6.9版本) --><script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script></head><!-- 定义Angular应用(模块名为myApp)和控制器(myCtrl)的作用域 --><body ng-app="myApp" ng-controller="myCtrl"><!-- 双向数据绑定:显示$scope.firstName的值 -->{{ firstName }}<!-- 表达式计算:直接输出1+1的结果2 -->{{ 1+1 }}            </body><script>// 创建AngularJS模块(名为myApp),空数组表示无依赖模块var app = angular.module("myApp", []);// 定义控制器myCtrl,注入$scope服务app.controller("myCtrl", function($scope) {// 在$scope上定义firstName属性,初始值为"John"$scope.firstName = "John";});</script>
</html>

当我们在代码中加入{{ $eval.constructor('alert()')() }},通过构造函数执行alert()


创建一个<p id="test"></p>
angular.element(document.getElementById('test')).scope();获取的作用域对象
$id=2是子作用域

任何时候我们创建 javascript 对象,都会从原型Prototype继承一些默认属性,例如$eval$on

在这里插入图片描述
$id=1是根作用域,来自Prototype
在这里插入图片描述

我们可以定义一个函数function test(),最后通过test()调用这个函数执行打印输出Hello world!

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/Function手册中查看关于Function() Constructor

虽然这是创建函数的方式,但不推荐这样做

根据上面的方法重新写一个函数

若不将函数赋给某个变量,将不会执行

记住前面说的

我们直接在后面加()即可调用函数

所以此时再看本次Lab解题 payload最后这个()就是在调用前面通过构造函数创建的函数

这次我们直接看下test()函数的构造函数,就是Function()构造函数,因为它可以创建Function对象

在AngularJS中,$onScope对象的方法,用于监听事件。作为函数,它本身是Function的实例,因此其constructor属性指向Function构造函数

$on.constructor('alert()') 等价于 Function('alert()'),生成一个匿名函数,再通过 () 调用该函数,于是就形成了最终的 payload

为什么不能直接{{Function('alert()')()}},因为有防护机制,所以要用scope对象的方法的构造函数传入 payload 执行

PortSwigger 靶场实战持续更新中

echo "Quermeinhumike+8mmh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92aWRlby9CVjE4cDdyejhFaDgv
P3ZkX3NvdXJjZT0zMGU4ODFmYzYxYjJkYWFjMDVmYWFkN2RmZjAyMjMxZgo="|base64 -d
http://www.xdnf.cn/news/765865.html

相关文章:

  • 【MySQL】视图与用户管理
  • linux——文件系统
  • 使用API网关Kong配置反向代理和负载均衡
  • IoTGateway项目生成Api并通过swagger和Postman调用
  • Fisher准则例题——给定类内散度矩阵和类样本均值
  • 数据库系统概论(十六)数据库安全性(安全标准,控制,视图机制,审计与数据加密)
  • 好用的C/C++/嵌入式 IDE: CLion的下载安装教程(保姆级教程)
  • 专注成就技术传奇:一路向前的力量
  • 设备驱动与文件系统:03 生磁盘的使用
  • Android高级开发第三篇 - JNI异常处理与线程安全编程
  • HarmonyOS鸿蒙Taro跨端框架
  • STM32CubeDAC及DMA配置
  • 高效微调方法简述
  • 网络地址转换
  • Python趣学篇:用Pygame打造绚烂流星雨动画
  • Nacos 2.4.3 登录配置
  • 云计算数据治理
  • 大模型的开发应用(六):使用 Xtuner QLoRA 微调模型
  • 使用 PHP 和 Guzzle 对接印度股票数据源API
  • Java 2D 图形类总结与分类
  • Node.js 中使用 Express 框架系统详细讲解
  • 3516cv610在sample_aiisp上多创一路编码流,方法
  • 移动AI神器GPT Mobile:多模型自由切换
  • 2018ToG | 可逆的灰度图像
  • [蓝桥杯]最优包含
  • Linux --TCP协议实现简单的网络通信(中英翻译)
  • Linux 脚本文件编辑(vim)
  • dvwa4——File Inclusion
  • 面向对象进阶 | 深入探究 Java 静态成员与继承体系
  • 常见算法题目5 -常见的排序算法