MongoDB注入:如何攻击MongoDB?
Man59R
9年前
<p>不管是商业项目还是个人项目,MongoDB都是一个非常好的数据库引擎,国内很多公司也开始用MongoDB。比起传统的数据库,这款数据库比较新,也有很多安全问题是大家还没有意识到的,而这些问题通常可以打得你措手不及。</p> <p>本篇文章主要向大家介绍我在使用MongoDB的过程中遇到的问题,以及它是如何被用来修改数据库记录的。当然,利用过程很简单,不过其实各种方式的SQL注入技术说破了也就那么回事,但是依然有很多人容易犯这样的错误。</p> <p>在我们开始前,我想先介绍下关于以下要用到的MongoDB的特性。MongoDB提供的更新机制是先定位到该文档,然后进行更新,如下例子:</p> <pre> { name:"John", info:{ age:65 } }</pre> <p>如上面的记录,你可以通过以下语句对它进行更新:</p> <pre> db.people.update({"name":"John"}, {"$set":{"info.age":66}})</pre> <p>是不是很酷炫,好吧,知道大家早就懂了 <img src="https://simg.open-open.com/show/b02b858b2016182f9cd9e779e547de5e.jpg"></p> <p>但是,如果子键不是硬编码的,又该如何呢?我们该如何通过变量将内容传进去呢?如下:</p> <pre> keyName = request.form|'keyName'| keyData = request.form|'value'| db.people.update({"name":"John"}, {"$set":{"info.{}".format(keyName):keyData}})</pre> <p>后台程序从前端请求中获取到key和value的值以后,通过参数传入MongoDB的更新函数中。那么问题来了,如果前端输入的是一个恶意的参数呢。</p> <p>以下是我在处理一个未知用户输入时候产生的问题,为了说明,接下来我们写一段用来展示这个漏洞。代码如下:</p> <pre> from flask import * import pymongo import bson import uuid db = pymongo.MongoClient("localhost", 27017).test form = """</pre> <p>来自: <a href="/misc/goto?guid=4959670732232937890" rel="nofollow">http://www.freebuf.com/articles/network/101494.html</a></p>