MongoDB注入:如何攻击MongoDB?

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

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

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

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

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

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

是不是很酷炫,好吧,知道大家早就懂了

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

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 = """

本文文字及图片出自 www.freebuf.com

你也许感兴趣的:

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注