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
你也许感兴趣的:
- 从 MongoDB “赎金事件” 看安全问题
- 四种 MongoDB 数据库客户端管理工具对比
- JSON 的正确用法:Python、MongoDB、JavaScript与Ajax
- 浅谈 Java 中 MongoDB NoSQL数据库使用指南
- 具有魔法的 H.264
- 多用户环境中的 rootless Docker
- 【外评】微软的人工智能聊天机器人将 “回忆 “您在其新 PC 上所做的一切
- 【外评】苹果需要解释重新出现已删除照片的错误
- 你需要知道的现代 CSS 技巧(2024 年春季版)
- 使用 :has() 作为 CSS 父选择器及其他更多内容
你对本文的反应是: