Nosql注入
Nosql注入
NoSQL
NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。
NoSQL 是指非关系型数据库,用于超大规模的数据管理,这类数据不需要存储不需要固定的格式,无需多与操作就能横向扩展
MongoDB
介绍
MongoDB 属于 NoSQL 数据库的一种,是C++编写的基于分布式文件存储的开源数据库系统
类型 | 部分代表 | 特点 |
---|---|---|
列存储 | Hbase | |
Cassandra | ||
Hypertable | 顾名思义,是按列存储数据的。最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。 | |
文档存储 | MongoDB | |
CouchDB | 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。 | |
key-value存储 | Tokyo Cabinet / Tyrant | |
Berkeley DB | ||
MemcacheDB | ||
Redis | 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能) | |
图存储 | Neo4J | |
FlockDB | 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。 | |
对象存储 | db4o | |
Versant | 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。 | |
xml数据库 | Berkeley DB XML | |
BaseX | 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。 |
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value),组成,MongoDB 文档类似于 JSON 对象,字段值可以包含其他文档、数组、文档数组
主要
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
对比一下:
MongoDB安装
kali上安装运行出现 段错误 未解决
ubuntu上一次性成功
mongodb-linux-x86_64-3.0.6.tgz
tar -xvzf mongodb-linux-x86_64-3.0.6.tgz //解压
mv mongodb-linux-x86_64-3.0.6 /usr/local/mongodb //将解压后的文件移动到指定目录并改名
cd /usr/local/mongodb/ //切换到mongodb
在mongodb目录下创建目录data/db ,以及/log目录
mkdir data //创建data目录
mkdir log //创建log日志目录
cd data //切换到data目录
mkdir db //创建db 目录
系统profile配置,配置环境,这是每装一个软件的必备步骤,在profile文件最后面添加环境变量
vi /etc/profile
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
保存后,重启系统配置
source /etc/profile
在mongodb目录下创建conf目录,并创建mongodb.conf配置文件
cd /usr/local/mongodb/ //切换到mongodb
mkdir conf //创建conf目录
cd conf //切换到conf
touch mongodb.conf //创建mongodb.conf配置文件
配置一些信息在mongodb.conf 中:
dbpath = /usr/local/mongodb/data/db #数据文件存放目录
logpath = /usr/local/mongodb/log/mongodb.log #日志文件存放目录
port = 27017 #端口
fork = true #以守护程序的方式启用,即在后台运行
一些准备好,启动服务
cd /usr/local/mongodb/ //切换到mongodb
./bin/mongod --config ./conf/mongodb.conf //启动服务
连接mongodb
cd /usr/local/mongodb/bin
./mongo
停止服务
cd /usr/local/mongodb/bin
./mongod -shutdown -dbpath=/usr/local/mongodb/data/db //停止mongodb
参考:
https://www.jianshu.com/p/d8f471bdfa3b
基础命令
创建数据库:use database_name,如果有直接拿来用,没有会自动创建 use yichen
删除数据库:db.dropDatabase()
先 use 再删除
创建集合(相当于 mysql 中的表):db.createCollection('hack')
删除集合:db.hack.drop()
查看集合用的是:show tables
或者 show collections
插入数据:db.yichen.insert({'name':'yichen'})
插入数据用逗号隔开:
db.writeup.insert({name:'yichen',
date:'2020-3-11',
tags:'web',
flag:'flag{dhcbuyebcadwe}',
blog:'https://www.yuque.com/hxfqg9'})
也可以先把数据定义为一个变量再插入到文档里
更新:
db.writeup.update({name:'yiyichen'},{$set:{name:'y1chen'}})
会把 name 为 yiyichen 的 name 改为 y1chen
pretty() 可以更加美观的显示结果
移除文档:db.writeup.remove({'name':'y1chen'})
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
操作 | 范例 | RDBMS中的类似语句 |
---|---|---|
等于 | db.col.find({"by":"菜鸟教程"}).pretty() |
where by = '菜鸟教程' |
小于 | db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小于或等于 | db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大于 | db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大于或等于 | db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等于 | db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
and 条件(多个条件用逗号隔开):
db.writeup.find({key1:value1, key2:value2}).pretty()
or 条件:
db.writeup.find({$or:[{"name":"yichen"},{"name": "yiyichen"}]}).pretty()