声明
该系列共三篇,30个专题(截止2024.8.14),其中有26个专题的全部内容已于2023年8月在Freebuf发布,至此,这26个专题的安全客版本及相关专题的更新内容已全部重新编写并发布,旧版本文章可以不用看了,该专题为Freebuf首发。
本系列介绍
PortSwigger是信息安全从业者必备工具burpsuite的发行商,作为网络空间安全的领导者,他们为信息安全初学者提供了一个在线的网络安全学院(也称练兵场),在讲解相关漏洞的同时还配套了相关的在线靶场供初学者练习,本系列旨在以梨子这个初学者视角出发对学习该学院内容及靶场练习进行全程记录并为其他初学者提供学习参考,希望能对初学者们有所帮助。
梨子有话说
梨子也算是Web安全初学者,所以本系列文章中难免出现各种各样的低级错误,还请各位见谅,梨子创作本系列文章的初衷是觉得现在大部分的材料对漏洞原理的讲解都是模棱两可的,很多初学者看了很久依然是一知半解的,故希望本系列能够帮助初学者快速地掌握漏洞原理。
服务器端漏洞篇介绍
burp官方说他们建议初学者先看服务器漏洞篇,因为初学者只需要了解服务器端发生了什么就可以了
服务器端漏洞篇 - API测试专题
API,全称是Application Programming Interfaces,翻译过来就是应用程序编程接口,它使软件系统和应用程序能够通信和共享数据,API测试很重要,因为API中的漏洞可能会破坏网站的机密性、完整性和可用性的核心方面。所有动态网站都是由API组成的,所以像SQL注入这样的经典Web漏洞也可以归类为API测试。这个专题主要是介绍RESTful和JSON API。
API信息收集
我们在进行API测试之前肯定是需要尽可能地收集API的信息才能发现攻击面。第一步,我们要先确定有哪些API端点,假如有这样的API:
GET /api/books HTTP/1.1
Host: example.com
这个API一看就是用来请求书籍资源的,另一个可能存在的端点为/api/books/mystery
,会展示隐藏的图书资源,确定API端点以后,我们要确定与其交互的方式,这样我们才能构造正确的测试请求,我们大概可以从以下三个方面去了解:
API处理的输入数据,包括必选参数和可选参数。
API接受的请求类型,包括支持的HTTP方法和媒体格式。
速率限制和身份验证机制。
API文档
开发人员一般会编写API文档以记录各端点的基本信息,文档可以采用人类可读和机器可读的形式。人类可读的文档旨在帮助开发人员了解如何使用API。它可能包括详细的解释、示例和使用场景。机器可读文档旨在由软件处理,以实现API集成和验证等任务的自动化。多以JSON或XML等结构化格式编写。API文档一般是公开的,特别是当API供外部开发人员使用时,这种情况我们可以直接通过查看文档来开始信息收集。
发现API文档
即使某些API文档并没有开放访问入口,但是我们还是可以尝试访问一些常见的API文档路径来碰碰运气,例如:
/api
/swagger/index.html
/openapi.json
然后我们还可以由此对尝试访问的路径进行延伸:
/api/swagger/v1
/api/swagger
/api
配套靶场:使用文档利用API端点
这道靶场的目标是找到删除用户的API端点并删除carlos,我们先尝试登录测试用户wiener,然后尝试修改邮箱,会触发一个API请求:
PATCH /api/user/wiener
{"email":"wienerr@normal-user.net"}
我们从这里知道API端点的大概规则,然后我们尝试删除wiener发现会报错
然后我们继续删,把user也删了,还是报这个错,继续删,看到了一共有三个API端点的信息
然后根据API文档里写的构造请求包:
DELETE /api/user/carlos