转载

MongoDB注入:如何攻击MongoDB?

不管是商业项目还是个人项目,MongoDB都是一个非常好的数据库引擎,国内很多公司也开始用MongoDB。比起传统的数据库,这款数据库比较新,也有很多安全问题是大家还没有意识到的,而这些问题通常可以打得你措手不及。

本篇文章主要向大家介绍我在使用MongoDB的过程中遇到的问题,以及它是如何被用来修改数据库记录的。当然,利用过程很简单,不过其实各种方式的SQL注入技术说破了也就那么回事,但是依然有很多人容易犯这样的错误。

在我们开始前,我想先介绍下关于以下要用到的MongoDB的特性。MongoDB提供的更新机制是先定位到该文档,然后进行更新,如下例子:

{   name:"John",   info:{       age:65   } }

如上面的记录,你可以通过以下语句对它进行更新:

db.people.update({"name":"John"}, {"$set":{"info.age":66}})

是不是很酷炫,好吧,知道大家早就懂了 MongoDB注入:如何攻击MongoDB?

但是,如果子键不是硬编码的,又该如何呢?我们该如何通过变量将内容传进去呢?如下:

keyName = request.form|'keyName'| keyData = request.form|'value'| db.people.update({"name":"John"}, {"$set":{"info.{}".format(keyName):keyData}})

后台程序从前端请求中获取到key和value的值以后,通过参数传入MongoDB的更新函数中。那么问题来了,如果前端输入的是一个恶意的参数呢。

以下是我在处理一个未知用户输入时候产生的问题,为了说明,接下来我们写一段用来展示这个漏洞。代码如下:

from flask import * import pymongo import bson import uuid   db = pymongo.MongoClient("localhost", 27017).test   form = """
原文  http://www.freebuf.com/articles/network/101494.html
正文到此结束
Loading...