RESTful APInahamcon Fuzzies-write-up

news2025/7/21 2:24:03

RESTful API 路径详解

RESTful API(Representational State Transfer)是一种 基于 HTTP 协议的 API 设计风格,它通过 URL 路径HTTP 方法(GET、POST、PUT、DELETE 等)来定义资源的访问方式。它的核心思想是 将数据(资源)暴露为 URI(路径),并通过标准 HTTP 方法操作这些资源


1. RESTful API 路径是什么?

RESTful API 路径(Endpoint)是一个 URL,用于访问服务器上的特定资源。它的结构通常遵循以下模式:

http(s)://域名/api/资源名/{资源ID}/子资源/{子资源ID}?查询参数

例如:

https://example.com/api/users/1/posts?limit=10
  • /api:通常标识这是一个 API 接口。

  • /users:表示操作的是 用户资源

  • /1:表示操作的是 ID=1 的用户

  • /posts:表示操作的是该用户的 帖子(子资源)

  • ?limit=10:查询参数(可选),用于过滤、排序或分页。


2. RESTful API 路径的作用

(1) 标准化资源访问

  • 每个 URL 代表一种 资源(如用户、订单、商品)。

  • 使用 HTTP 方法(GET、POST、PUT、DELETE)来定义操作类型:

    HTTP 方法用途示例(用户管理)
    GET获取资源GET /api/users(获取所有用户)
    POST创建资源POST /api/users(新增用户)
    PUT更新整个资源PUT /api/users/1(更新用户1)
    PATCH部分更新资源PATCH /api/users/1(修改用户1的部分字段)
    DELETE删除资源DELETE /api/users/1(删除用户1)

(2) 可读性强

  • 路径清晰,例如:

    • GET /api/orders/100 → 获取订单 ID=100 的详情。

    • DELETE /api/products/5 → 删除商品 ID=5。

(3) 无状态(Stateless)

  • 每个请求包含所有必要信息,服务器不存储会话状态,适合分布式系统。

(4) 支持缓存、可扩展

  • 由于使用 HTTP 标准,可以方便地利用 CDN 缓存负载均衡 等技术。


3. 哪里会用到 RESTful API?

(1) 前后端分离开发

  • 前端(Web/App)通过 RESTful API 与后端(服务器)交互,获取或提交数据。

  • 例如:

    • Vue/React 前端fetch("/api/users") 获取用户列表。

    • 移动端(Android/iOS):调用 GET /api/products 获取商品数据。

(2) 微服务架构

  • 不同服务之间通过 RESTful API 通信,例如:

    • 订单服务调用支付服务:POST /api/payments

    • 用户服务调用通知服务:POST /api/notifications

(3) 第三方开放平台

  • 许多公司提供 RESTful API 供开发者使用,例如:

    • Twitter APIGET /2/tweets/{id} 获取推文。

    • GitHub APIGET /repos/{owner}/{repo} 获取仓库信息。

    • Stripe 支付 APIPOST /v1/payment_intents 创建支付订单。

(4) 企业内部系统

  • 企业内部不同系统(ERP、CRM)通过 RESTful API 交换数据。


4. RESTful API 路径设计最佳实践

(1) 资源命名使用名词(而非动词)

  • 正确/api/users(资源:用户)

  • 错误/api/getUsers(违反 REST 风格)

(2) 使用复数形式

  • 通常使用复数形式表示资源集合:

    • /api/users(而不是 /api/user

    • /api/products(而不是 /api/product

(3) 层级关系表示子资源

  • 例如:

    • GET /api/users/1/posts → 获取用户 1 的所有帖子。

    • POST /api/users/1/posts → 为用户 1 创建新帖子。

(4) 使用查询参数(?)进行过滤、分页

  • GET /api/orders?status=completed → 获取已完成的订单。

  • GET /api/products?page=2&limit=10 → 分页获取商品。

(5) 版本控制(可选)

  • 在 URL 或 Header 中加入版本号,例如:

    • GET /api/v1/users

    • GET /api/v2/users


5. 示例:一个完整的 RESTful API 设计

假设我们有一个 博客系统,API 设计如下:

功能HTTP 方法路径描述
获取所有文章GET/api/posts返回文章列表
创建新文章POST/api/posts新增一篇文章
获取单篇文章GET/api/posts/1返回 ID=1 的文章
更新文章PUT/api/posts/1修改 ID=1 的文章
删除文章DELETE/api/posts/1删除 ID=1 的文章
获取文章的所有评论GET/api/posts/1/comments获取文章 1 的评论
新增评论POST/api/posts/1/comments给文章 1 添加评论

6. 总结

  • RESTful API 路径 是基于 HTTP 的标准化资源访问方式。

  • 用途:前后端交互、微服务通信、开放平台 API。

  • 核心特点

    • 使用 名词 表示资源(如 /users)。

    • 通过 HTTP 方法 定义操作(GET/POST/PUT/DELETE)。

    • 路径清晰、可读性强、支持缓存和扩展。

  • 最佳实践:使用复数名词、层级表示关系、查询参数过滤数据。

NahamCon CTF 2025-Fuzzies

题目描述:

对一个似乎是玩具公司的网站进行fuzzing模糊测试,总共有5个flag,这个题讲述的故事还有点细思极恐,有点意思

Flag1

由于题目给出了两个爆破字典,我们可以先试试目录遍历看看有没有什么数据泄露或者后台管理员登录界面等

使用工具dirsearch并使用命令python dirsearch.py -u "url" -w "字典路径" -e *

成功找到以上路径,其中upload和images都无法正常访问

这个admin界面应该就是管理员的登录界面

 尝试sql注入无果,于是使用题目所给字典爆破

但失败了

应该是账号出错了,于是聪明的我注意到在memory界面有很多名字,结果我就把这些名字一个一个当成用户名去尝试了,结果浪费一大把时间。这里的关键点应该是api路径,利用方式也就是上面说的RESTful API路径

我们尝试访问/api/users,查看是否有用户信息,虽然没有访问到,但提示是401要求身份验证,那么也证明是有信息的,再随便访问一个别的,通过对比可以证明这一点

猜测后面路径跟上数字表示用户id,在输入数字时401报错,不是数字时出现endpoint not found报错,猜想确实是有用户id这一说并且就是使用数字表示id

既然知道了有大概有用户id这一说,那按照api的套路后面的路径就大概率还是功能模块,但我们不知道模块名字叫什么,于是继续使用他给出的字典爆破

发现存在一个功能模块叫log,并且回显的是user not found

那么应该是没有用户id为1的用户,那么再继续爆破用户id就好了

在用户id为87时发现有有用内容回显

访问api/users/87/log,发现第一个flag

Flag2

上面我们找到了第一个flag,其后面紧跟着一个username,叫做brian.1954,那么就尝试使用这个账号登录并且爆破这个账号的密码

在密码为dalls时返回数据长度不同并且状态码为302跳转,大概率就是密码

使用密码dallas登录,发现登录成功,以及第二个flag

Flag3

进入管理员界面后,我们先看Memory Management,从这里故事就有点细思极恐的感觉了

以及前面的memory里有说到一个人弄丢了fuzzy但是后面发现fuzzy自己坐在公园长椅上等她,当时就感觉这fuzzy不会有生命吧,或者说被恶灵附身了什么的,感觉有点意思,现在加上这两条未公开的回忆,更让人觉得这个玩具工厂没有那么简单了

说回正题,我尝试通过这两条未被接受的memory,并且抓包查看其中内容,但是似乎没有什么有效信息

于是将方向转向另一个模块Internal messages

这里有三篇文章,其中第三片文章说到产品问题,说到玩具绝对不能被淋湿,然而前面有一条memory就是他在洗澡时,玩具fuzzy掉入了水中,然后fuzzy不见了,最后他的房子都被毁了,可能是遇到水就会唤醒fuzzy心里沉睡的野兽?还是通过水这个生命源泉赋予了它生命?还是恶灵的召唤需要水元素???真实细思极恐啊,有点意思。
又扯远了

我们可以注意到这里访问每一个文章时url都有对应的类似文章id的部分

于是我就想试着使用爆破的方式看看有没有隐藏的文章

还真找到了两个,分别是id为98和842

其中98的是关于新工厂的地理位置

我勒个是在墓地上建造啊,这样恶灵附身的说法就更有可能了,当时做到这里真实冷汗直冒,但似乎这没有别的什么有用信息了,我们再看842

成功从842里找到了第3个flag

这篇文章表述这个工厂在研发一种活体毛绒玩具,又细思极恐了>_<

Flag4

前面给到了这个二维码的UUID,在开始时的界面Our collection里的界面源代码里有提到

这里的图片应该是从/api/fuzzies这个路径下获取的

我们试着访问这个路径

可以看到很多图片的信息包括名字和id等

那么我们可以根据RESTful API的格式来通过拼接参数来查询我们想要的内容

我们在后面跟上参数?id=666e8400-e29b-41d4-a716-446655440666来查看前面二维码的图片信息

这里发现第四个flag

Flag5

我们已经发现了这张隐藏的图片,那么就试着去看看这张图片,这里图片信息已经给出路径和名称了,为/images/fuzzies/the-evid-one.png(看到这名字时候感觉有点不对劲,难道终于要发现这个恶灵了吗)

我勒个去啊,当时做到这真给我吓一小跳,这跟前面画风差别太大了吧

看看着差别

最后一个flag就藏在那张鬼图里面,我们将the-evil-one.png下载后使用010 editor打开直接搜索flag,就找到最后一个flag了

或者使用exitfool工具查看也可以

总结

至此所有的flag都找到了,这里只要发现第一个flag后接下来的任务都不算太难,主要考了RESTful API的了解和利用,同时这个故事更是深得我心,在温暖温馨的画风中穿插了一条恐怖悬疑暗线,一个CTF题目设计成这样我觉得还是非常有意思的,在做的时候并不会感到累进而带替的是对了解故事真相的渴望

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2396710.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2025年机械化设计制造与计算机工程国际会议(MDMCE 2025)

2025年机械化设计制造与计算机工程国际会议&#xff08;MDMCE 2025&#xff09; 2025 International Conference on Mechanized Design, Manufacturing, and Computer Engineering 一、大会信息 会议简称&#xff1a;MDMCE 2025 大会地点&#xff1a;中国贵阳 审稿通知&#…

Jmeter逻辑控制器、定时器

目录 一、Jmeter逻辑控制器 ①IF(如果)控制器 作用&#xff1a; 位置&#xff1a; 参数介绍&#xff1a; 步骤&#xff1a; ②循环控制器 作用&#xff1a; 位置&#xff1a; 步骤&#xff1a; 线程组属性VS循环控制器 ③ForEach控制器 作用&#xff1a; 位置&am…

R3GAN利用配置好的Pytorch训练自己的数据集

简介 简介:这篇论文挑战了"GANs难以训练"的广泛观点,通过提出一个更稳定的损失函数和现代化的网络架构,构建了一个简洁而高效的GAN基线模型R3GAN。作者证明了通过合适的理论基础和架构设计,GANs可以稳定训练并达到优异性能。 论文题目:The GAN is dead; long l…

吴恩达机器学习笔记(1)—引言

目录 一、欢迎 二、机器学习是什么 三、监督学习 四、无监督学习 一、欢迎 机器学习是当前信息技术领域中最令人兴奋的方向之一。在这门课程中&#xff0c;你不仅会学习机器学习的前沿知识&#xff0c;还将亲手实现相关算法&#xff0c;从而深入理解其内部机理。 事实上&…

【笔记】Windows 部署 Suna 开源项目完整流程记录

#工作记录 因篇幅有限&#xff0c;所有涉及处理步骤的详细处理办法请参考文末资料。 Microsoft Windows [Version 10.0.27868.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗…

【Elasticsearch】Elasticsearch 核心技术(一):索引

Elasticsearch 核心技术&#xff08;一&#xff09;&#xff1a;索引 1.索引的定义2.索引的命名规范3.索引的增、删、改、查3.1 创建索引3.1.1 创建空索引 3.2 删除索引3.3 文档操作3.3.1 添加/更新文档&#xff08;指定ID&#xff09;3.3.2 添加文档&#xff08;自动生成ID&am…

Fullstack 面试复习笔记:操作系统 / 网络 / HTTP / 设计模式梳理

Fullstack 面试复习笔记&#xff1a;操作系统 / 网络 / HTTP / 设计模式梳理 面试周期就是要根据JD调整准备内容&#xff08;挠头&#xff09;&#xff0c;最近会混合复习针对全栈这块的内容&#xff0c;目前是根据受伤的JD&#xff0c;优先选择一些基础的操作系统、Java、Nod…

中科院报道铁电液晶:从实验室突破到多场景应用展望

2020年的时候&#xff0c;相信很多关注科技前沿的朋友都注意到&#xff0c;中国科学院一篇报道聚焦一项有望改写显示产业格局的新技术 —— 铁电液晶&#xff08;FeLC&#xff09;。这项被业内称为 "下一代显示核心材料" 的研究&#xff0c;究竟取得了哪些实质性进展…

智慧政务标准规范介绍:构建高效、协同的政务信息体系

在当今信息化快速发展的时代&#xff0c;智慧政务作为政府数字化转型的重要方向&#xff0c;正逐步改变着政府管理和服务的方式。为了确保智慧政务系统的建设能够有序、高效地进行&#xff0c;国家制定了一系列标准规范&#xff0c;其中GB∕T 21062系列标准《政务信息资源交换体…

手机照片太多了存哪里?

手机相册里塞满了旅行照片、生活碎片&#xff0c;每次清理都舍不得删&#xff1f;NAS——一款超实用的存储方案&#xff0c;让你的回忆安全又有序&#xff5e; 1️⃣自动备份解放双手 手机 / 电脑 / 相机照片全自动同步到 NAS&#xff0c;再也不用手动传文件 2️⃣远程访问像…

OpenRouter使用指南

OpenRouter 是一个专注于大模型&#xff08;LLM&#xff09;API 聚合和路由的服务平台&#xff0c;旨在帮助开发者便捷地访问多种主流大语言模型&#xff08;如 GPT-4、Claude、Llama 等&#xff09;&#xff0c;并提供统一的接口、成本优化和智能路由功能。以下是它的核心功能…

【优选算法 | 队列 BFS】构建搜索流程的核心思维

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;双指针滑动窗口二分查找前缀和位运算模拟链表哈希表字符串模拟栈模拟(非单调栈)优先级队列 很多人学 BFS 的时候都知道“用队列”&#xff0c;但为什么一定是队列&#xff1f;它到底在整个搜索流程中起了什么作…

设计模式(行为型)-中介者模式

目录 定义 类图结构展示 角色职责详解 模式的优缺点分析 优点 缺点 适用场景 应用实例 与其他模式的结合与拓展 总结 定义 中介者模式的核心思想可以概括为&#xff1a;用一个中介对象来封装一系列的对象交互。这个中介者就像一个通信枢纽&#xff0c;使各对象不需要…

【Java学习笔记】异常

异常&#xff08;Exception&#xff09; 一、基本介绍 在 Java 程序中&#xff0c;将运行中发生的不正常情况称为 “异常”&#xff0c;开发过程中的语法错误和运行时发生的异常情况是不一样的。 二、异常的分类 1. Error&#xff08;错误&#xff09;&#xff1a;Java 虚拟…

MySQL:视图+用户管理+访问+连接池原理

一、视图 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff08;相当于是把查询的内容当成一个临时表来使用&#xff09;&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会影响到视图。 1.1 为…

neo4j 5.19.0安装、apoc csv导入导出 及相关问题处理

前言 突然有需求需要用apoc 导入 低版本的图谱数据&#xff0c;网上资料又比较少&#xff0c;所以就看官网资料并处理了apoc 导入的一些问题。 相关地址 apoc 官方安装网址 apoc 官方导出csv 教程地址 apoc 官方 导入 csv 地址 docker 安装 执行如下命令启动镜像 doc…

无人机桥梁3D建模的拍摄频率

无人机桥梁3D建模的拍摄频率 无人机桥梁3D建模的拍摄频率&#xff08;每秒拍摄照片数&#xff09;需根据建模精度、飞行速度、相机性能等因素综合确定。以下是专业级作业的详细参数分析&#xff1a; 1. 核心计算公式 拍摄频率&#xff08;fps&#xff09; \frac{飞行速度&…

ESP32-idf学习(三)esp32C3连接iot

一、前言 上一篇用蓝牙作为通信方式&#xff0c;虽然勉强完成了控制&#xff0c;但结果显然不是那么符合我们的预期&#xff0c;既然用蓝牙还需要研究一段时间&#xff0c;那我们就先整一些现成的&#xff0c;不需要研究的&#xff01;iot云平台&#xff01;这里当然也是通过w…

详解鸿蒙仓颉开发语言中的计时器

今天又到了大家喜闻乐见的科普环节&#xff0c;也可以说是踩坑环节&#xff0c;哈哈哈。今天聊一聊仓颉开发语言中的计时器&#xff0c;这部分可老有意思了。 为什么这么说呢&#xff0c;因为关于仓颉的计时器你几乎搜不到任何的文档&#xff0c;也没有相关的代码提示&#xf…

【计算机网络】第3章:传输层—拥塞控制原理

目录 一、PPT 二、总结 &#xff08;一&#xff09;拥塞的定义 &#xff08;二&#xff09;拥塞产生的原因 &#xff08;三&#xff09;拥塞控制的目标 &#xff08;四&#xff09;拥塞控制方法分类 1. 端到端拥塞控制 2. 网络辅助拥塞控制 &#xff08;五&#xff09;…