NoSQL注入实验室 - 探索MongoDB安全漏洞实战

本文详细介绍如何搭建基于MongoDB的NoSQL注入实验环境,包含数据库重置、漏洞场景构建(包括类SQL注入和NoSQL特有的脚本注入攻击),适用于安全研究人员进行NoSQL注入技术研究。

NoSQLi Lab

随着NoSQL的流行,我决定建立一个实验室来研究针对NoSQL数据库的各种攻击技术。这就是最终的成果…

由于之前已使用Redis进行过开发工作,本次实验我选择MongoDB作为研究对象。实验室构建了两种漏洞场景:一种是类似SQL注入中"or 1=1"的经典漏洞,另一种是NoSQL特有的脚本注入攻击。未来可能会添加更多场景,但当前这两个已足够开展基础研究。

环境搭建

安装过程非常简单,关键是要确保Linux发行版包含PHP的最新MongoDB驱动。正确的驱动是:

1
php-mongodb - MongoDB driver for PHP

而错误的旧版驱动是:

1
php5-mongo - MongoDB database driver

实验代码托管在Github:https://github.com/digininja/nosqlilab。以下是在Debian Stretch系统上的部署步骤(注意Jessie系统使用旧版驱动无法运行):

1
2
3
4
5
6
apt-get update && apt-get dist-upgrade
apt-get install php-mongodb apache2 vim mongodb git php

cd /var/www/html/
rm index.html 
git clone https://github.com/digininja/nosqlilab

访问服务器IP后应看到实验室首页:

数据库初始化

首先需要通过"Reset Database"链接初始化测试数据。成功时会显示"Database Reset Successfully"消息:

若出现PHP代码说明PHP未正确安装或启用;若页面渲染不完整则可能是MongoDB库缺失,可检查Apache错误日志或通过phpinfo()页面验证驱动是否加载正确。

漏洞场景

实验包含两个存在漏洞的页面:

  1. “Guess The Key” - 经典注入漏洞
  2. “User Lookup” - NoSQL特有攻击场景

具体攻击方法可参考OWASP的《NoSQL注入测试指南》,实验代码中也提供了隐藏的解决方案示例。

问题反馈

提示:所有实验内容由Robin Wood创建,除非另有说明。项目采用非商业性质,可通过affiliate链接支持作者。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计