两道有趣的JS代码审计题目

两道有趣的JS代码审计题目

💡 原文中文,约4400字,阅读约需11分钟。
📝

内容提要

本文讨论了网页源代码中的三种编码方式,提出了绕过限制的可能方法。还介绍了一个JS代码审计的例子,利用沙箱逃逸获取注释信息。作者认为JS特性可用于出题,但目前较少见。

🎯

关键要点

  • 文章讨论了网页源代码中的三种编码方式和绕过限制的方法。
  • 源码中有三个 converter,分别代表三种不同的编码方式,flagConverter 包含 flag。
  • 限制了 request.body.converter 不能包含 FLAG 字符串。
  • 通过分析发现可以控制 converters 的属性名,但不能包含 FLAG。
  • 使用 __defineSetter__ 属性可以创建代理,重写对象的属性。
  • 利用沙箱逃逸的方式获取注释信息,展示了 JS 特性的巧妙应用。
  • 在 vm.runInNewContext 中执行输入的代码,创建了一个没有原型链的干净对象。
  • 通过将函数体转换为字符串,可以获取函数体中的 flag 注释信息。
  • 利用数组和弱类型转换绕过检测,成功获取 flag 信息。
  • 作者认为 JS 特性可以用于出题,但目前较少见,计划尝试出更多结合 JS 特性的审计题。
➡️

继续阅读