前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >handlebars动调

handlebars动调

原创
作者头像
c2k2o6
发布2022-01-30 15:52:03
3250
发布2022-01-30 15:52:03
举报
文章被收录于专栏:c2k2o6c2k2o6

原文链接 https://blog.p6.is/AST-Injection/

代码语言:javascript
复制
const Handlebars = require('handlebars');
Object.prototype.pendingContent = `<script>alert(origin)</script>`
const source = `Hello {{ msg }}`;
const template = Handlebars.compile(source);
console.log(template({"msg": "posix"})); // <script>alert(origin)</script>Hello posix

经过几轮动态调试 找到了如下几处关键位置

跑起来程序

从这里先f11 然后 shift + f11 再f11

最好不要直接f10?会跳过一些步骤

进入compile

前面是设置一些变量

我们直接 f5 到下一个断点

这里opcode 一共有8个

第一个为appendContent

这里可以看到 appendContent 就是?"<script>alert(origin)</script>

content就是?Hello

字符串相连

关键文件为?

nodet1/node_modules/handlebars/dist/cjs/handlebars/compiler/javascript-compiler.js

继续f10 回到opcodes 循环

走过几个opcode可以进入到

pushSource

f11 进入到?pushSource

主要是 让pendingContent?变成?developer/article/1940247/undefined??

继续?回到?

nodet1/node_modules/handlebars/dist/cjs/handlebars/compiler/compiler.js

代码语言:javascript
复制

  function compileInput() {
    var ast = env.parse(input, options),
        environment = new env.Compiler().compile(ast, options),
        templateSpec = new env.JavaScriptCompiler().compile(environment, options, ?developer/article/1940247/undefined, true);
    return env.template(templateSpec);
  }
  。。。
  console.log(template({"msg":"posix"}));

打印到控制台

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com