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