API攻防-接口安全
API攻防-接口安全
介绍
如今,越来越多的用户和应用都会调用其他应用的API来传输数据和完成业务。如果API在进行处理时,并没有对接受的数据、用户的身份等等进行验证和设防,那么就会造成各种各样的安全问题(SQL注入、未授权访问等等)。
常见接口
HTTP类接口(通常是json格式)
HTTP接口是基于HTTP协议提供的API接口,它使用HTTP请求方法(如GET、POST、PUT、DELETE等)来操作资源。客户端通过发送HTTP请求到服务器,并接收服务器的HTTP响应来进行数据交互。
例如:RESTful API就是典型的HTTP接口。
RPC类接口(什么格式都有可能)
远程过程调用(Remote Procedure Call,RPC)是一种计算机通信协议。它允许一个计算机程序在另一台计算机上执行代码,而不需要程序员显式编写网络代码。
例如:微服务场景下常用RPC类接口。
RPC可以分为两部分:用户调用接口 + 具体网络协议。前者为开发者需要关心的,后者由框架来实现。
例如,我们定义一个函数,我们希望函数如果输入为“Hello World”的话,输出给一个“OK”,那么这个函数是个本地调用。如果一个远程服务收到“Hello World”可以给我们返回一个“OK”,那么这是一个远程调用。我们会和服务约定好远程调用的函数名。因此,我们的用户接口就是:输入、输出、远程函数名。
具体网络协议,是框架来实现的,把开发者要发出和接收的内容以某种应用层协议打包进行网络收发。
例如,假设我们有一个RPC接口,其格式可能如下:
{
"jsonrpc": "2.0",
"method": "要调用的方法名称",
"params": "方法所需的参数",
"id": "请求的唯一标识符"
}
WebService类接口(通常是xml格式)
WebService是一种跨平台的、基于Web的分布式系统设计方法,它允许不同应用程序在不同平台、不同语言之间进行数据交互。WebService通常使用SOAP(Simple Object Access Protocol)协议通过HTTP进行通信。
使用WSDL(Web Services Description Language)描述服务接口。通常比HTTP接口更复杂,但提供了更强的类型安全和事务支持。
例如:WebService经常用于企业内部的系统集成,如ERP、CRM等系统之间的数据交换。
SOAP
SOAP(Simple Object Access Protocol)简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于 XML(标准通用标记语言下的一个子集)的协议,它被设计成在 WEB 上交换结构化的和固化的信息。SOAP 不是 WebService 的专有协议。
SOAP 使用 HTTP 来发送 XML 格式的数据,可以简单理解为:SOAP = HTTP + XML
WSDL
WSDL(Web Services Description Language)即网络服务描述语言,用于描述Web 服务的公共接口。这是一个基于 XML 的关于如何与 Web 服务通讯和使用的服务描述;也就是描述与目录中列出的 Web 服务进行交互时需要绑定的协议和信息格式。
RESTful API
RESTful API(表述性状态转移)是一种体系结构样式,它利用现有的和广泛采用的技术,特别是HTTP,并且不会创建任何新标准。REST可以将数据结构化为XML,YAML或任何其他机器可读格式,但通常,JSON是首选。
可能造成的安全问题
Method:请求方法
- 攻击方式:OPTIONS,PUT,MOVE,DELETE
- 效果:上传恶意文件,修改页面等
URL:唯一资源定位符
- 攻击方式:猜测,遍历,跳转
- 效果:未授权访问等
Params:请求参数
- 攻击方式:构造参数,修改参数,遍历,重发
- 效果:爆破,越权,未授权访问,突破业务逻辑等
Authorization:认证方式
- 攻击方式:身份伪造,身份篡改
- 效果:越权,未授权访问等
注:实际上WEB安全测试就是API测试,因此API测试中出现的安全漏洞跟WEB漏洞一致。
测试方法(如何寻找API?)
获得API后的通用测试思路
手工+工具结合的方式
- 手工:用户自己构造参数访问该接口,查看接口返回的内容。
- 工具:使用readyAPI、soapUI等进行批量化测试。
WebService
探针:可以在url后面加上?wsdl,这样的话就可以将所有的API以xml格式显示。
利用工具:SoapUI&ReadyAPI
Swagger
Swagger是一款测试API的工具,通常会通过Web页面进行测试。
探针:
- 通过浏览器抓包,查看加载的js资源,查看是否出现swagger关键字。
- 目录扫描,查看是否存在如下目录:
- /swagger
- /api/swagger
- /swagger/ui
- /api/swagger/ui
- /swagger-ui.html
- /api/swagger-ui.html
- /user/swagger-ui.html
- /libs/swaggerui
- /api/swaggerui
- /swagger-resources/configuration/ui
- /swagger-resources/configuration/security
如果探针到了服务器上存在Swagger,那么就可以获取到服务器上的所有API。
利用:exp和soapAPI
exp:
WebPack
WebPack是一个项目打包的工具,将整个项目及环境进行打包,使整个项目体积更小,方便进行项目的交付。
WebPack在打包项目时会将整站的API和API参数打包在一起供Web集中调用。
探针:插件判断&浏览器抓包查看是否存在关键字进行判断。
利用:
- 工具:PackerFuzzer
- https://github.com/rtcatc/Packer-Fuzzer
fofa搜索webpack语法:
js_name="/js/app.js"
dvws靶场
地址
https://github.com/snoopysecurity/dvws-node
鉴权/未授权访问
我们首先注册一个账户,登录之后发现Admin Area区域无法访问。我们可以通过抓包查看详细信息:
上述数据包在登录的时候会触发,我们发现:响应数据包中admin参数为false。那么就代表:如果我们随意注册一个用户,那么admin参数均为false,都访问不了Admin Area区域。
因此,我们可以考虑在注册的时候,将admin这个参数改为true,尝试注册一个管理员账号。
从返回的数据包可以看出,该用户是可以进行注册的。
注册之后,我们再次尝试访问该页面,此时就可以进行未授权访问。
查看该用户的JWT,我们也可以发现,该用户的身份发生了变化。
SOAP/XXE
我们进入到管理员页面后,我们可以对用户名称进行搜索,查看该用户是否存在。我们可以看一下数据包:
从这个数据包中,我们可以发现:数据都是xml/soap格式。
因此,我们可以得知:这个接口就是WebService类型的接口。
既然数据是XML,那么我们可以尝试XXE攻击,修改如下数据包,读取服务器的/etc/passwd文件。
证明存在XXE漏洞。
阿里云accessKey/数据泄露
介绍
阿里云accessKey是用户阿里云上的资源(云主机、OSS等等)的凭证。如果泄露,那么该用户上阿里云的所有资源都将被攻击者所掌控。
如果攻击者获得了某用户的accessKey,那么攻击者可以通过行云管家这样的云管理平台进行连接。
利用
阿里云AccessKey泄漏利用工具:https://github.com/mrknow001/aliyun-accesskey-Tools
致谢
https://www.bilibili.com/video/BV1pQ4y1s7kH/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click
免责声明
本博客中的内容仅供学习之用,不用于商业用途,也不可以用于任何非法用途,否则后果自负,本人不承担任何责任!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现