[NoSql注入] MongoDB学习

0x00 安装

下载:http://dl.mongodb.org/dl/win32/x86_64

安装:http://www.runoob.com/mongodb/mongodb-window-install.html

0x01 MongoDB语法

我们先学习下MongoDB的使用,知己知彼,方能百战百胜,只有了解了对方,才能找寻弱点,一击击破

下面都是以PHP为例

数据库操作基本是增删改查,MongoDB的增删改查怎么个不是SQL呢,下面我们来看一下

<?php
 
$mongo = new mongoclient();// 连接默认主机和端口为:mongodb://localhost:27017
 
$db = $mongo->security; //选择数据库
 
$coll = $db->users; //选择集合(表)
 
$coll->save({'id':1,'name':'admin','passwd':'admin'});    //增,新增id=1,name=admin,passwd=admin的数据

$coll->insert({'id':1,'name':'admin','passwd':'admin'});//增,这个也是增
$coll->find({'id':1}); //查,查询id=1的数据 

$coll->remove({'id':1}); //减,删除id=1的数据

$coll->update({'id':1},{'name':'superadmin'}); //改,将id=1的name改为supername

?>

 大家通过上面应该可以察觉到数据传输是通过json承载的

说明:JSON 是一种轻量级的数据交换格式。它基于 ECMAScript 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言,它易于人阅读和编写,同时也易于机器解析和生成,并能有效地提升网络传输效率。如:{\"firstName\": \"Brett\", \"lastName\": \"McLaughlin\"}

还有一种执行的方法,是直接执行字符串的

<?php
 
$mongo = new mongoclient();// 连接默认主机和端口为:mongodb://localhost:27017
 
$db = $mongo->security; //选择数据库(表)
 
$query = "db.users.save({'id':1})";    //增
$query = "db.users.insert({'id':1})"; //增
$query = "db.users.find({'id':1})"; //查 

$query = "db.users.remove({'id':1})"; //减

$query = "db.users.update({'id':1},{'name','superadmin'})"; 改

$result = $db->execute($query);

?>

 上面都是连接users表进行操作的。,最后通过execute($sql)执行sql操作

针对上面两种执行方式,有不同的注入攻击方式。

0x02 注入攻击

针对上面两种执行方式,分类两种攻击方式:操作符注入、字符串注入 ,详细介绍下注入原理前,先补充知识

比较条件操作符

"$lt", "$lte", "$gt", "$gte", "$ne"
对应于:"<","<=",">",">=","!="

 实际运用

db.items.find({"name" :"admin", "password" : {$ne : "1"}})
#查询name=admin及password不等以1的数据
相当于SQL语句:select * from item where name='admin' and password != 1;

操作符注入

测试代码

<?php
 
$mongo = new mongoclient();// 连接默认主机和端口为:mongodb://localhost:27017
 
$db = $mongo->security; //选择数据库
 
$coll = $db->users; //选择集合(表)

$username = $_GET['username'];
$password = $_GET['password'];

$data = array(
    'username' => $username,
    'password' => $password
    );
echo 'data_array->'$data.PHP_EOL; $coll->find($data); //查,查询id=1的数据 $count = $coll->count(); if($count > 0){ forrach($data as $user){ echo 'username->'.$user['username'].PHP_EOL; echo 'password->'.$user['password'].PHP_EOL; } }else{ echo 'NOT FIND.'; } ?>

 传入数据?username=test&password=test

输出

【未完待续】

猜你喜欢

转载自www.cnblogs.com/alummox/p/9665592.html
今日推荐