跳转至

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 对象,字段值可以包含其他文档、数组、文档数组

1583828357084-acacfd6f-0dfd-4134-9fe8-3d755e63a1ea.png

主要 

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins   表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

对比一下:

1583831710280-f534af95-40c8-49a7-8145-36e980424a20.png

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'})

image.png

插入数据用逗号隔开:

db.writeup.insert({name:'yichen',
    date:'2020-3-11',
    tags:'web',
    flag:'flag{dhcbuyebcadwe}',
    blog:'https://www.yuque.com/hxfqg9'})

image.png

也可以先把数据定义为一个变量再插入到文档里

image.png

更新:
db.writeup.update({name:'yiyichen'},{$set:{name:'y1chen'}})

会把 name 为 yiyichen 的 name 改为 y1chen

pretty() 可以更加美观的显示结果

image.png

移除文档:db.writeup.remove({'name':'y1chen'})

image.png

如果你熟悉常规的 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()

NoSQL注入

原文: https://www.yuque.com/hxfqg9/web/ub1ewz