内联注入和堆叠注入(10.30 第三十天)
内联:
select * from (select 1 as id)a;
select * from T1,T3 where T1 userid=T3 userid (找T1和T3 userid相同的数据)
堆叠:两个SQL语句中间有个分号隔开
NOSQL注入
mongoDB介绍和使用
分布式文件存储数据库,使用C++开发的,可以存储任意数据(文件),允许在服务器端执行脚本,使用JSON形式存储数据{key:value}
支持的编程语言:PHP ruby python C++ C# JAVA 等等
安装:sudo apt-get install mongodb
MongoDB启用端口:27017
管理工具:Navicat
MongoDB中的一些概念
数据库--》集合--》文档--》域
MongoDB中可以有多数据库,不同的数据库可以放置在不同的文件中
show dbs 查看所有数据库
use admin 切换数据库
db 当前数据库
系统数据库:
admin:相当于root数据库,该数据库是一个高权限的数据库,在该数据库中可以执行全部的命令
local:存储本地服务器的集合
config:与数据库的分片有关 分片(数据过大分开存储,在config里面进行说明)
常用的命令:
SQL:select * from users;
Mongo:db.users.find().pretty() 查看集合users集合中所有的数据,转换成杰森格式
创建数据库:use 数据库名
删除数据库:db.dropDatabase() 删除当前使用的数据库
查看当前数据库:db
创建集合:db.createCollection(集合名)
删除集合:db.集合名.drop() 返回值是true(布尔)
查看集合:show collections
db.集合名.insert({k1:v1,k2:v2}) k1、k2是域
v1、v2是域对应的值,其类型如下:
布尔
数字
字符
浮点数
数组
内嵌文档
null
删除文档:db.集合.remove({name:"icq"})
查看文档:db.集合.find()
更新文档:db.集合.update({被更新的对象},{$set{被更新的内容}}) 默认只更新第一条发现的文档
全部更新需要:db.集合.update({被更新的对象},{$set{被更新的内容}},{muti:true})
查询文档:db.集合.find() db.集合.find().pretty() 可读性高
查询数据-条件:
$lt => < $lte => <= $gt => > $gte => >=
$ne => != $regex 正则 : => =
等于:{k:v} 小于:{k:{$lt:v}} db.liu.find({age:{$lt:50}}).pretty
大于:{k:{$gt:v}} 小于等于:{k:{$let:v}} 大于等于:{k:{$gte:v}}
正则匹配:db.liu.find({name:{$regex:'h'}})
多条件用,隔开 db.liu.find({k1:v1,k2:v2}) 注意:多条件是与的关系
或条件:db.liu.find({$or:[{k1:v1},{k2:v2}]}) k1:v1和k2:v2是或的关系
限制查询:db.liu.find({$or:[{k1:v1},{k2:v2}]}).limit(数字)
跳过前几个来显示查询:db.liu.find({$or:[{k1:v1},{k2:v2}]}).skip(1) 跳过第一列
排序:db.liu.find({$or:[{k1:v1},{k2:v2}]}).sort({k:1}) 按照k来进行升序排序
db.liu.find({$or:[{k1:v1},{k2:v2}]}).sort({k:-1}) 按照k来进行降序排序
^a 表示以a开头 a$ 表示以a结尾 * 表示任意长度的任意字符 ? 表示一位任意字符
PHP连接MongoDB
<?php
$m=new MongoClient('mongodb://192.168.121.147:27017');
$db=$m->test; //选择数据库
$tb=$db->liu; //选择集合
$re=$tb->find();
注入
1、使用JS注入MongoDB(在MongoDB中$where操作符是可以执行JS语句的。通过使用‘ “ 等闭合查询语句,就可以执行任意的JS代码。)
username=1';return true;var b='
password=1
2、使用重言式注入MongoDB(结合PHP的特性和MongoDB的查询语法)
3、shell拼接注入MongoDB(通过使用 ’ “ 等闭合查询语句,插入攻击者需要执行的语句,最后达到攻击的效果,弊端:需要知道数据库中集合的名字。)
db.messages.find({"author":""});db.messages.insert({"name":"hacker"});db.messages.find({"author":"1 "}).sort({"addtime":-1});
"});db.messages.insert({"name":"hacker"});db.messages.find({"author":"1
4、使用BP进行注入攻击获取数据
需要使用$regex去获取系统中的数据,具体如何操作?