当前位置: 首页 > news >正文

picoCTF 2024: [[NoSQL]] Injection - Writeup

#wp #web

【[[WEB]]】提高题 - [[PICOCTF]]

创建时间:2025-07-19 15:03
题目链接:picoCTF - picoGym Challenges

解题过程

picoCTF 2024: [[NoSQL]] Injection - Writeup

hints:


漏洞分析

这道题涉及 NoSQL 注入,这种漏洞发生在非关系型数据库(例如 MongoDB)中,攻击者可以通过特殊的查询条件影响数据库的行为。

我们从题目附件中(server.js)获得的信息是:后端使用 MongoDB 作为数据库,并且登录功能存在漏洞。代码如下所示:

const user = await User.findOne({email: email.startsWith("{") && email.endsWith("}") ? JSON.parse(email) : email,password: password.startsWith("{") && password.endsWith("}") ? JSON.parse(password) : password,
});

这段代码的功能是检查 emailpassword 是否被包裹在 {} 中。如果是,它们将被当作 JSON 字符串进行解析,然后应用于 MongoDB 的查询。

例如,如果输入的 email 字段是 {"$ne": null},MongoDB 会执行一个查询,表示 email 不等于 null,并且根据这一条件查找用户。

关键漏洞:

  • 该系统使用了 JSON.parse() 来解析用户输入。如果攻击者构造了一个特殊的 JSON 字符串,它将被当做查询条件传递给 MongoDB。

  • MongoDB 查询语言允许使用特殊操作符,如 "$ne": null,这使得任何值都能通过验证。攻击者可以利用这一点绕过身份验证。


漏洞利用

构造恶意请求

我们可以通过注入 MongoDB 查询条件来绕过认证。有效的注入内容通常是通过将 emailpassword 字段设置为以下形式:

{"email": "{\"$ne\": null}","password": "{\"$ne\": null}"
}

这里:

  • {"$ne": null} 是 MongoDB 查询的语法,表示 emailpassword 不等于 null。这将匹配所有非 null 的值,绕过了对 emailpassword 字段的实际验证。

  • 由于 MongoDB 查询语言的灵活性,任何不为 null 的值都会通过验证。

通过 curl 发送请求

我们可以使用 curl 发送 POST 请求来测试这个注入。以下是发送请求的命令:

curl -X POST http://atlas.picoctf.net:54037/ \-H "Content-Type: application/json" \-d '{"email": "{\"$ne\": null}", "password": "{\"$ne\": null}"}'

这条命令向服务器发送了带有恶意查询条件的 emailpassword 字段,目的是绕过身份验证。

使用 Burp Suite 测试注入

通过 Burp Suite 也可以进行同样的操作:

  1. 启动 Burp Suite 并将浏览器代理设置为 Burp 代理。

  2. 访问登录页面并捕获 POST 请求。

  3. 将请求发送到 Repeater,并在 emailpassword 字段中注入 {"$ne": null}

  4. 发送修改后的请求,查看响应结果。


获取 Flag

登录后,服务器会返回一个包含 token 字段的 JSON 响应。这个 token 字段通常是 Base64 编码的,包含了题目的 Flag。

http://www.xdnf.cn/news/1148995.html

相关文章:

  • 【MATLAB例程】Taylor算法用于TOA(到达时间)的三维标签位置解算,可自适应基站数量。附下载链接
  • 一个基于阿里云的C端Java服务的整体项目架构
  • 后缀树:字符串处理的利器
  • 模型轻量化全指南:从剪枝量化到低配置设备部署实战
  • 【Linux】基本指令详解(三) 指令本质、三个查找指令、打包压缩、重要热键、linux体系结构、命令行解释器
  • Go-Redis × 向量检索实战用 HNSW 在 Redis 中索引与查询文本 Embedding(Hash JSON 双版本)
  • 智能光电检测:YOLO+OpenCV联合算法工程实践
  • 【运维】flash attention安装出现错误及编译慢
  • 思维链(CoT)技术全景:原理、实现与前沿应用深度解析
  • windows wsl2-06-docker hello world
  • 1.初始化
  • Windows原生环境配置Claude Code MCP(通过JSON)
  • 【MySQL笔记】视图
  • Spring AI 项目实战(十九):Spring Boot + AI + Vue3 + OSS + DashScope 构建多模态视觉理解平台(附完整源码)
  • mac 配置svn
  • 医疗AI与融合数据库的整合:挑战、架构与未来展望(上)
  • xss-labs1-8题
  • 浏览器渲染原理——计算属性和布局过程常考内容
  • 基于单片机病床呼叫系统/床位呼叫系统
  • ChatGPT Agent深度解析:告别单纯问答,一个指令搞定复杂任务?
  • 目标检测中的标签分配算法总结
  • 2021 RoboCom 世界机器人开发者大赛-本科组(初赛)解题报告 | 珂学家
  • RS485转Profibus网关助力涡街液体流量计与300PLC高效通讯
  • Python高级数据类型:字典(Dictionary)
  • 模型的评估与选择
  • 基于springboot的考研互助小程序
  • 408数据结构强化(自用)
  • Java中缓存的使用浅讲
  • 【Linux驱动-快速回顾】简单了解一下PinCtrl子系统:设备树如何被接解析与匹配
  • 标准文件和系统文件I/O