MongoDB+php7搭建

0x00前言:

今天一位非计算机专业的朋友问我怎么打开.bson文件,我第一反应.bson文件是什么,网上查了下是mongodb的传输文件。也就是类似于mysql的.sql文件一样

之前看过mongodb的注入,但是没有亲自实践,这次一并从环境搭建开始学习了波mongodb

0x01 mongodb是什么:

mongodb和mysql等数据库管理软件作用一样,就是用来存放数据的

mongodb与mysql,mssql等数据库不同在于,它不是关系数据库,而是一种集合中包含键值对形式存放数据的管理软件

关系数据库结构一般是:库,表,字段,每一行数据是个组元

非关系数据库以这里的mongodb为例结构是:库,集合,键值对

0x02 搭建mongodb+php:

我搭建的环境是ubuntu 16.04,事先已经装好了php+apache2+mysql

那么要搭建mongodb和php之间通信,可以简单来概括为两步:安装mongodb,配置php的mongodb模块

安装mongodb

apt-get install mongodb

安装好可以直接在本地连接

这里简单说下基础操作语句

查询数据库

show dbs;

进入数据库(如果目标不存在,就是创建个新的数据库,但是要写入才能show得出来)

use sijidou;            //创建库db.createCollection(‘siji‘);  //创建集合

查看集合

show collections;

给某个集合内添加数据,插入的语句类似于json的格式

db.siji.insert({id:1,name:‘sijidou‘,age:‘18‘})

查看某个集合的内容

db.siji.find()

安装php-mongodb模块

apt-get install php-mongodb

重启apache,在phpinfo中就可以看到mongodb模块的信息了(刚装好可能下面的信息不一样,但是有这一个大栏就行)

php7与php其他版本运行mongodb的方式不同,php5的格式可以参照

http://www.runoob.com/mongodb/mongodb-php.html

但是安装的步骤可能和我上面讲的不同

php7的格式为,这里以最简单的查询语句为例

<?php
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
//设置过滤规则,有点类似mysql的where
$filter = [];//设置操作
$options = [];
//生成查询对象$query = new MongoDB\Driver\Query($filter, $options);//对相应的 sijidou库 的siji集合 进行查询
$cursor = $manager->executeQuery(‘sijidou.siji‘, $query);

foreach($cursor as $result){  print_r($result);      echo "<br>";}
?>

但是运行的时候可能会出现以下问题

php7 erver at localhost:27017 reports wire version 2, but this version of libmongoc requires at least 3 (MongoDB 3.0)

这个原因是mongodb的版本是2,但是php要求至少要3以上的

遇到这个问题升级mongodb数据库,步骤如下

导入包管理系统所需要的key

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

为mongodb创建个apt-get的列表

echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

更新本地包

sudo apt-get update

升级安装

sudo apt-get install -y mongodb-org

但是在这种情况下又会遇到,服务启动不了的情况

Failed to start mongodb.service: Unit mongodb.service is masked.

依次执行以下步骤

sudo rm /var/lib/mongodb/mongod.lock
sudo mongod --repair --dbpath /var/lib/mongodb
sudo mongod --fork --logpath /var/lib/mongodb/mongodb.log --dbpath /var/lib/mongodb
sudo service mongodb start

环境差不多就搭建完成了,接下来添加几组数据并测试一下

如果要导入.bson文件的话

mongorestore -d 库名 文件路径mongorestore -d csh ./articles.bson

0x03 MongoDB注入?

首先修改下源码,并模拟添加个flag集合

<?php
$name = $_GET[‘name‘];
$manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");

$filter = [‘name‘ => $name];
$options = [];

$query = new MongoDB\Driver\Query($filter, $options);
$result = $manager->executeQuery(‘sijidou.siji‘ ,$query);

foreach($result as $ans){
    print_r($ans);
}

?>

这里的filter的内容表示 name =$name的值,效果如下

然后我们可以用name[$ne]=sijidou显示不是sijidou的值

其他的方法:

$gt   -- ‘>‘
$lt    -- ‘<‘
$ne   -- ‘!=‘
$eq   -- ‘=‘
$gte  -- ‘>=‘
$lte   -- ‘<=‘

但是看了网上的mongodb注入方式,发现没有php7的,都是php5

php5的查询语句可以是这样的

$query = "var data = db.sijidou.findOne({name:‘$username‘});return data;";//调用$mongo = new mongoclient();$db = $mongo->sijidou;$data = $db->execute($query);

$query的内容是整个js代码字符串,那么就可以操作了

比如 username的内容为

sijidou‘}); return version();var data2 = db.sijidou.findOne({name:‘sijidou

拼接后,执行了3条语句,其中version()就是目标值

var data = db.sijidou.findOne({name:‘sijidou‘}); return version();var data2 = db.sijidou.findOne({name:‘sijidou‘});return data;

防御方法:addslashes()转义

但是但是但是!!!

这个在php5中查询MongoDB和mysql一样是整句语句,而php7是用filter和options,所以没法这么注入,我也没找到啥好的方法

至于php7中的,name[$ne]=sijidou,这种返回其他的值的情况,可以使用下面方法避免

name[$ne]=sijidou,不会返回结果了

因此这个小测试也拿不到flag

0xFF 结语

总得来说,php7比php5使用MongoDB更加麻烦一点,但是更加安全

参考链接

https://blog.csdn.net/jws2011520/article/details/78157778

https://www.centos.bz/2017/11/mongodb%E4%B8%A4%E4%B8%AA%E6%8A%A5%E9%94%99%E5%A4%84%E7%90%86%E6%96%B9%E6%B3%95/

https://www.cnblogs.com/mrchang/p/6255226.html

https://cl0und.github.io/2018/01/12/MONGODB%E6%B3%A8%E5%85%A5%E5%AD%A6%E4%B9%A0/

原文地址:https://www.cnblogs.com/sijidou/p/10600840.html

时间: 2024-09-30 12:15:44

MongoDB+php7搭建的相关文章

mongodb 副本搭建(一主两备)

主:192.168.0.237 备1:192.168.0.122 备2:192.168.0.123 三台机器同样操作 tar zxf mongodb-linux-i686-1.8.1.tgz mv mongodb-linux-i686-1.8.1 /usr/local/mongodb cd /usr/local/mongodb/ mkdir etc mkdir logs cd logs/ touch mongodb.log cd .. cd etc/ vi mongodb.cnf 加入 dbpa

基于 Node.js + Express + mongoDB + Bootstrap 搭建的电影网站

电影网站 ?? GitHub: https://github.com/bxm0927/movie-website 此项目是基于 Node.js + Express + mongoDB + Bootstrap 搭建的电影网站. 主要功能模块: 一期:前台电影展示页.电影详情页.后台电影管理中心(电影录入.电影修改) 二期:用户登录注册注销功能.用户识别和持久化.后台用户管理中心(用户录入.用户修改).电影评论 <!-- more --> 图片预览 技术栈 [前端] HTML/CSS/JS:亘古不

NoSql数据库初探-mongoDB环境搭建

NoSQL数据库一改关系型数据库的缺点,更容易的集成.分布式.无模式.故障恢复等特点,正在一步步餐食关系型数据库的市场,作为一个与时俱进的码农了解一下新技术是必须的,尤其是在读了<NoSql精粹>之后,更是想体验一下NoSql数据库的威力. MongoDB是一种文档数据库,也就是说对于领域模型中的每一个聚合来讲,都会作为一个文档来存储. MongoDB有如下优点: 面向文档存储.全索引支持.同步机制和高访问性.自动分片.查询.灵活的聚集和数据处理.映射化简.文件存储.   第一步:安装 从版本

mongodb学习(搭建开发环境+简单入门)

接下来这段时间,我将会学习mongodb,由浅入深,并且将学习的过程会详细记录下来.mongodb是什么?我想这一点不需要我过多的解释.好了,废话不多说,我们直奔主题,看看mongodb开发环境的搭建.说明一点,在学习mongodb期间,我的所有 操作都是在windows下完成的.下面我带大家一步一步学习windows下mongodb开发环境的搭建 下载mongodb 首先我们需要到mongodb的官网下载mongodb. http://www.mongodb.org/downloads 新建一

mongodb数据库服务搭建

搭建mongodb服务器 1.下载mongodb的安装文件,本例子按照mongod版本为2.6.5为标准 mongodb-linux-x86_64-2.6.5,在2.6版本后mongodb的权限强化了. 这个是我百度云的mongodb2.6.5的linux64位的资源文件,可以根据这个地址下载 http://pan.baidu.com/s/1sjxHmsl 1.解压mongodb-linux-x86_64-2.6.5.tgz资源文件 tar -zxf mongodb-linux-x86_64-2

【MongoDB】MongoDB服务器搭建(Unix/Linux)

1.安装MongboDB安装包(开源免费的哟) 在Mac 下 brew install mongoDB 就可以啦 安装要等一会儿,大概200M 2. cd到MongboDB文件夹 - 如果是用homebrew安装的话是在 /usr/local/Cellar/mongodb/(版本号) 3.创建文件夹 mkdir data mkdir log mkdir conf 4.编写启动文件 cd conf vim mongod.conf port = 54321 dbpath = data logpath

MongoDB 分片搭建

MongoDB 已经到了第三篇,同时也是搭建的最后一篇文章了. MongoDB 的分片搭建. 为什么使用分片? 我们为什么要使用分片呢? 因为现在的数据量越来越大了,为了扩大DB 的性能 以及吞吐量. MongoDB 分片构架 A MongoDB sharded cluster consists of the following components: shard: Each shard contains a subset of the sharded data. Each shard can

mongodb本地搭建过程

1.解压安装包后安装 安装时注意:1.选择customs    2.路径选择C盘以外的盘符 安装完成后: 2.在bin的同级目录下新建data.log文件夹 3.在data文件夹下新建db文件夹,在log文件下新建mongo.log文件 4.再次在bin的同级目录下新建mongo.config文件 在mongo.config中写: dbpath=D:\mongodb\data #数据库路径 logpath=D:\mongodb\log\mongo.log #日志输出文件路径mongo.log的路

Node.js + Express + Mongodb 开发搭建个人网站(一)

一.Node + Express环境搭建 0.去Node官网下载安装node,如果安装了 npm 和 node的话 那么就 安装 全局的 express,-g全局安装 npm install express –g 1.然后使用 express 创建项目,命令:   express 项目名 初始化一个node项目 注意 这里 默认的页面模版 是jade 大部分小项目使用的是 ejs模版,所以 利用express创建ejs模版的node项目,命令为express -e 项目名 express -e