內聯:php
select * from (select 1 as id)a;python
select * from T1,T3 where T1 userid=T3 userid (找T1和T3 userid相同的數據)mongodb
堆疊:兩個SQL語句中間有個分號隔開shell
NOSQL注入數據庫
mongoDB介紹和使用編程
分佈式文件存儲數據庫,使用C++開發的,能夠存儲任意數據(文件),容許在服務器端執行腳本,使用JSON形式存儲數據{key:value}數組
支持的編程語言:PHP ruby python C++ C# JAVA 等等ruby
安裝: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去獲取系統中的數據,具體如何操做?