MongoDB注入:如何攻擊MongoDB?

Man59R 8年前發布 | 22K 次閱讀 MongoDB NoSQL數據庫

不管是商業項目還是個人項目,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 = """

來自: http://www.freebuf.com/articles/network/101494.html

 本文由用戶 Man59R 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!