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

API 接口渗透测试

1 API 接口介绍

1.1 RPC(远程过程调用)

远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用,例:Java RMI。

RPC 一般直接使用 TCP 协议进行通信,通常不涉及到 HTTP。HTTP 下面有2种技术:

  • XML-RPC(https://zh.wikipedia.org/wiki/XML-RPC)
  • JSON-RPC(https://zh.wikipedia.org/wiki/JSON-RPC)

Web service 和 RESTful API 都可算作远程过程调用的子集。

1.2 Web Service

Web Service 是一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作。

根据 W3C 的定义,Web 服务(Web service)应当是一个软件系统,用以支持网络间不同机器的互动操作。网络服务通常是许多应用程序接口(API)所组成的,它们透过网络,例如国际互联网(Internet)的远程服务器端,执行客户所提交服务的请求。

尽管W3C的定义涵盖诸多相异且无法介分的系统,不过通常我们指有关于主从式架构(Client-server)之间根据 SOAP 协议进行传递 XML 格式消息。无论定义还是实现,Web 服务过程中会由服务器提供一个机器可读的描述(通常基于WSDL)以辨识服务器所提供的 Web 服务。另外,虽然 WSDL 不是 SOAP 服务端点的必要条件,但目前基于Java 的主流 Web 服务开发框架往往需要 WSDL 实现客户端的源代码生成。一些工业标准化组织,比如 WS-I,就在 Web 服务定义中强制包含 SOAP 和 WSDL。

Web Service 是一种比较“重”和“老”的 Web 接口技术,目前大部分应用于金融机构的历史应用和比较老的应用中。

1.3 RESTful API

REST,全称是 Resource Representational State Transfer,通俗来讲就是,资源在网络中以某种表现形式进行状态转移。分解开来:

  • Resource:资源,即数据(前面说过网络的核心)。比如 newsfeed,friends等;
  • Representational:某种表现形式,比如用JSON,XML,JPEG等;
  • State Transfer:状态变化。通过HTTP动词实现。

RESTful API 就是符合 REST 风格的 API,传递数据也是2种形式:

  • XML,少见
  • json,常见,现在 Web 应用基本使用这种形式的 API。

1.4 MVC、MVP、MVVM

Web 应用程序和 APP 应用程序的 API 跟目前的流行框架和模式相关,主要有3种模式:MVC、MVP、MVVM。

MVC 将整个应用分成 Model、View 和 Controller 三个部分,而这些组成部分其实也有着几乎相同的职责。

  • 视图:管理作为位图展示到屏幕上的图形和文字输出;
  • 控制器:翻译用户的输入并依照用户的输入操作模型和视图;
  • 模型:管理应用的行为和数据,响应数据请求(经常来自视图)和更新状态的指令(经常来自控制器);

此类模式和架构的应用越来越多导致 API 接口的应用也越来越流行。想了解更多可以在网上查找相关资料。

2 API 测试环境和测试工具

2.1 Web Service 测试

2.1.1 找 Webservice 接口

  • Google hacking
    • inurl:jws?wsdl
    • inurl:asmx?wsdl
    • inurl:aspx?wsdl
    • inurl:ascx?wsdl
    • inurl:ashx?wsdl
    • inurl:dll?wsdl
    • inurl:exe?wsdl
    • inurl:php?wsdl
    • inurl:pl?wsdl
    • inurl:?wsdl
    • filetype:jws
    • filetype:asmx
    • filetype:ascx
    • filetype:aspx
    • filetype:ashx
    • filetype:dll
    • filetype:exe
    • filetype:php
    • filetype:pl
    • filetype:wsdl wsdl
  • fuzzing
  • 爬虫

2.1.2 测试工具

涉及主要工具:

  • Soap UI PRO,渗透测试流程的发起,通信报文的解析、集合payload之后通信报文的重新组装等,14天试用,可以做自动化测试。
  • SoapUI Free,手工测试
  • SOAPSonar,SOAP UI 的替代。
  • Burp Suite,代理拦截,跟踪通信过程和结果,对通信进行重放和二次处理等。
  • WSSAT
  • WS-Attacker

### 2.1.3 测试项目

  • Fuzzing
  • XSS /SQLi/ Malformed XML
  • File Upload
  • Xpath Injection
  • XML Bomb (DoS)
  • Authentication based attacks
  • Replay attacks
  • Session fixation
  • XML Signature wrapping
  • Session timeout
  • Host Cipher Support/ Valid Certificate/ Protocol Support
  • Hashing Algorithm Support

2.1.4 手工测试方法

主要使用 Soap UI Open Source,有安全测试Case,需要配置 SOAP 代理到 Burp,数据流,现在的版本是5.4.0。

代理配置

可以用 Burp 重放 SOAP 的探测 Payload。

使用 Soap UI Open Source,测试步骤:

  1. 创建工作空间
  2. 新建 SOAP 项目
  3. 增加 WSDL,配置名称和 WSDL 链接
  4. 选择要测试的 TestSuite,增加一个安全测试

  1. 选择测试的类型,运行测试

2.1.5 自动化测试

SOAP 配置,2步,“File”-“Preference”-“Proxy”,设置 Burp 代理

直接在 Soup UI 主菜单上选择运行一个测试。

在弹出窗口中输入 WSDL 地址。

SUAP UI 会自动探测接口。然后在项目-测试Case的右键菜单中选择安全测试

运行安全测试。

Burp 代理会捕获所有的测试请求

其他工具介绍

WSSAT,选择加载存在 WSDL 列表的文件,运行。

WS-Attacker

AWVS 的扫描也能直接测试 Web Service

2.2 RESTful API 测试

2.2.1 测试工具

  • 常见的浏览器插件
    • Chrome Restlet Client

- Firefox RESTClient

  • 客户端工具
    • Postman

- Swagger

通常使用 Postman 的情况多些,有机会的话问下开发如何配置测试环境,直接配置一套一样的。

Postman 的代理配置:

3 常见 API 相关漏洞和测试方法

还是主要以 Restful API 说明。

3.1 逻辑越权类

本质上可以说是不安全的直接对象引用,可以通过修改可猜测的参数获取不同参数下的响应结果。参数可以是用户名、用户 ID,连续的数字,变形的连续数字(各种编码或哈希),通过直接修改参数值完成越权的操作。

示例:

  • https://wooyun.shuimugan.com/bug/view?bug_no=189225
  • https://wooyun.shuimugan.com/bug/view?bug_no=150462
  • https://wooyun.shuimugan.com/bug/view?bug_no=140374
  • https://wooyun.shuimugan.com/bug/view?bug_no=106709

3.2 输入控制类

XXE,Restful API 的注入漏洞,XSS,溢出,特殊字符的处理。

示例:

  • https://wooyun.shuimugan.com/bug/view?bug_no=211103
  • https://wooyun.shuimugan.com/bug/view?bug_no=132270
  • https://wooyun.shuimugan.com/bug/view?bug_no=8714

3.3 接口滥用

没有请求频率限制导致的各种爆破和遍历,如短信验证码爆破、登录爆破、手机号遍历、身份证遍历等。

示例:

  • https://wooyun.shuimugan.com/bug/view?bug_no=141419
  • https://wooyun.shuimugan.com/bug/view?bug_no=66571
  • https://wooyun.shuimugan.com/bug/view?bug_no=36058
  • https://wooyun.shuimugan.com/bug/view?bug_no=147334

3.4 信息泄露

包括越权导致的信息泄露、畸形请求导致的报错响应。

示例:

  • https://wooyun.shuimugan.com/bug/view?bug_no=171313
  • https://wooyun.shuimugan.com/bug/view?bug_no=160095
  • https://wooyun.shuimugan.com/bug/view?bug_no=127457

3.5 HTTP 响应头控制

关于响应头:

  • 发送 X-Content-Type-Options: nosniff 头。
  • 发送 X-Frame-Options: deny 头。
  • 发送 Content-Security-Policy: default-src 'none' 头。
  • 删除指纹头 - X-Powered-By, Server, X-AspNet-Version 等等。
  • 在响应中强制使用 content-type。

3.6 服务端配置漏洞

如服务端版本信息泄露,或服务端程序本身存在漏洞等。

4 API 安全加固

根据上面讲的测试方法,一般需要做好:

  1. 认证和授权控制
  2. 用户输入控制
  3. 接口请求频率的限制
  4. 输出控制
  5. 添加安全响应头参数

参考 API-Security-Checklist 和历史上的渗透测试结果设计适合自己组织的 API 安全开发规范。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

相关文章:

API 接口渗透测试

1 API 接口介绍 1.1 RPC(远程过程调用) 远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无…...

oracle 19c单机版本补丁升级

文章目录 一、补丁包概述二、备份opatch三、替换高版本opatch四、打DB补丁1、关闭数据库2、关闭监听3、解压补丁4、冲突检测5、补丁空间检查6、执行补丁升级7、将更新内容加载到数据库8、最后查看数据库版本9、卸载补丁包 一、补丁包概述 补丁升级包 链接:https://…...

推荐系统的未来:大模型驱动的个性化推荐技术与挑战

推荐系统的未来:大模型驱动的个性化推荐技术与挑战 1. 背景介绍 推荐系统是现代互联网服务中不可或缺的一部分,它通过分析用户的历史行为和偏好,为用户提供个性化的内容推荐,从而提高用户体验和满意度。随着大数据、机器学习和人…...

Allegro许可管理工具

在数字化时代,软件许可管理成为企业面临的挑战之一。如何确保软件的合规使用、优化资源配置并降低运营成本是企业关注的焦点。Allegro许可管理工具作为一款强大的管理工具,为企业提供了全面、高效的解决方案。本文将深入探讨Allegro许可管理工具的卓越实…...

React函数组件Hook

问题: 相对于类组件, 函数组件的编码更简单, 效率也更高, 但函数组件不能有state (旧版) 解决: React 16.8版本设计了一套新的语法来让函数组件也可以有state Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 Hook也叫钩子…...

【FinalShell】远程连接 Linux 工具 FinalShell 的使用:查看 AI 语言大模型对话实时日志

一、查看 APP 实时 AI 问答消息的 websocket 类型日志 (1)Linux 模板命令配置 Linux 命令:查看 AI 语言大模型结合向量数据库的实时问答消息日志 ① 测试环境 FinalShell 命令模板 【Linux 命令标题】[Test_APP] today tail:webs…...

ARM Coresight 系列文章 11.1 -- CoreSight Cortex-M33 CTI 详细介绍】

请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】 文章目录 CTI 的工作原理CTI 主要特点CTI的使用场景CTI 的工作原理 CTI 允许不同的调试和追踪组件之间基于特定事件进行交互。例如,当一个断点被命中时,CTI 可以用来触发内存的追踪捕捉或者外部仪器的行为,反之亦然。这种…...

Linux常用操作命令(清单快查版)

Linux常用操作命令,今日先给出快查清单,后续出带命令参数及不同OS的区别语法的相关示例 1. 文件与目录操作 命令描述ls列出目录内容cd切换目录pwd显示当前工作目录mkdir创建目录rmdir删除空目录cp复制文件或目录mv移动或重命名文件或目录rm删除文件或目…...

[C语言]结构体、位段、枚举常量、联合体

目录 结构体 结构体的使用方法 结构体所占用的大小 位段 位段的使用方法 位段所占用的大小 枚举常量 枚举常量的使用方法 枚举常量的优势 联合体 联合体的使用方法 结构体 结构体的使用方法 结构体是一些值的集合,我们可以定义一个结构体,里…...

LangChain核心模块 Retrieval——文档加载器

Retrieval ​ 许多LLM申请需要用户的特定数据,这些数据不属于模型训练集的一部分,实现这一目标的主要方法是RAG(检索增强生成),在这个过程中,将检索外部数据,然后在执行生成步骤时将其传递给LLM。 ​ LangChain 提供…...

力扣爆刷第104天之CodeTop100五连刷6-10

力扣爆刷第104天之CodeTop100五连刷6-10 文章目录 力扣爆刷第104天之CodeTop100五连刷6-10一、15. 三数之和二、53. 最大子数组和三、912. 排序数组四、21. 合并两个有序链表五、1. 两数之和 一、15. 三数之和 题目链接:https://leetcode.cn/problems/3sum/descrip…...

Docker操作基础命令

注意:以下命令在特权模式下进行会更有效! 进入特权模式 sudo -ssudo su拉取镜像 sudo docker pull [镜像名] # sudo docker pull baiduxlab/sgx-rust:2004-1.1.3进入容器 端口开启服务: sudo docker start 3df9bf5dbd0c进入容器&#xf…...

穿越地心:3D可视化技术带你领略地球内部奇观

在广袤无垠的宇宙中,地球是一颗充满生机与奥秘的蓝色星球。我们每天都生活在这颗星球上,感受着它的温暖与恩赐,却往往忽略了它深邃的内部世界。 想象一下,你能够穿越时空,深入地球的核心,亲眼目睹那些亿万年…...

蓝桥杯刷题_day1_回文数_水仙花数_进制转换

文章目录 特殊的回文数回文数水仙花数十六进制转八进制_n次 特殊的回文数 问题描述   123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 解题…...

jmeter接口导入方式

curl直接导入 1、操作页面后,F12查看接口,右击接口-copy-copy as cURL 2、jmeter 工具-import from cURL,粘贴上面复制的curl 根据接口文档导入 1、接口文档示例如下: Path: /api/jobs/xps/exec Method&#xf…...

设计模式(行为型设计模式——状态模式)

设计模式(行为型设计模式——状态模式) 状态模式 基本定义 对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 模式结构 Context(环境类)&…...

【Flutter学习笔记】10.3 组合实例:TurnBox

参考资料:《Flutter实战第二版》 10.3 组合实例:TurnBox 这里尝试实现一个更为复杂的例子,其能够旋转子组件。Flutter中的RotatedBox可以旋转子组件,但是它有两个缺点: 一是只能将其子节点以90度的倍数旋转二是当旋转…...

性能测试入门 —— 什么是性能测试PTS?

性能测试PTS(Performance Testing Service)是一款简单易用,具备强大的分布式压测能力的SaaS压测平台。 PTS可以模拟复杂的业务场景,并快速精准地调度不同规模的流量,同时提供压测过程中多维度的监控指标和日志记录。您…...

【机器学习】基于变色龙算法优化的BP神经网络分类预测(SSA-BP)

目录 1.原理与思路2.设计与实现3.结果预测4.代码获取 1.原理与思路 【智能算法应用】智能算法优化BP神经网络思路【智能算法】变色龙优化算法(CSA)原理及实现 2.设计与实现 数据集: 数据集样本总数2000 多输入多输出:样本特征24&#xff…...

pytorch中tensor类型转换的几个函数

目录 IntTensor转FloatTensor FloatTensor转IntTensor Tensor类型变为python的常规类型 IntTensor转FloatTensor .float函数: FloatTensor转IntTensor .int函数 Tensor类型变为python的常规类型 item函数...

温度场与锂枝晶生长的相场电势场及浓度场耦合仿真研究

comsol 锂枝晶仿真——耦合温度场 在相场,电势场和浓度场的基础上耦合了温度场,可以看不同温度对锂枝晶的影响指尖的金属晶体在电解液中野蛮生长,就像寒冬玻璃上的冰花。当我们盯着显微镜观察锂枝晶时,常忽略了一个重要变量——温…...

OpenClaw效率对比:人工vsQwen2.5-VL-7B处理100张图片耗时测试

OpenClaw效率对比:人工vsQwen2.5-VL-7B处理100张图片耗时测试 1. 测试背景与动机 最近在整理个人摄影作品集时,我遇到了一个典型问题:需要将100张混合了风景、人像、静物的照片按主题分类归档。手动操作不仅耗时,还容易因视觉疲…...

终极性能调优指南:如何配置dnstwist实现超高速域名扫描

终极性能调优指南:如何配置dnstwist实现超高速域名扫描 【免费下载链接】dnstwist Domain name permutation engine for detecting homograph phishing attacks, typo squatting, and brand impersonation 项目地址: https://gitcode.com/gh_mirrors/dn/dnstwist …...

cv_unet_image-colorization多分辨率适配实测:手机扫描件/胶片扫描图效果对比

cv_unet_image-colorization多分辨率适配实测:手机扫描件/胶片扫描图效果对比 1. 项目背景与技术原理 基于UNet架构深度学习模型开发的本地化图像上色工具,采用了阿里魔搭开源的图像上色算法。这个工具能够智能识别黑白图像中的物体特征、自然场景和人…...

用STC32G的HSPWM做个数控电源:从BUCK电路到PID调参,我的DIY踩坑全记录

从零打造STC32G数控电源:我的BUCK电路实战与PID调参血泪史 作为一个常年泡在电子实验室的硬件爱好者,开关电源一直是我又爱又恨的领域。去年冬天,当我第N次烧毁某宝买的降压模块后,终于下定决心自己打造一台高精度数控电源。这次…...

别再手动查日志了!用Skywalking 9.x快速定位Spring Boot微服务性能瓶颈

别再手动查日志了!用Skywalking 9.x快速定位Spring Boot微服务性能瓶颈 微服务架构下最令人头疼的场景莫过于:凌晨三点收到告警,某个核心接口响应时间从200ms飙升到5秒,而你面对几十个相互调用的服务和海量日志,完全不…...

告别官方解锁后,我们还能怎么玩?深挖华为荣耀解BL的三种野路子与工具链

华为荣耀设备解锁技术深度解析:原理、工具与风险规避 在移动设备定制化需求日益增长的今天,安卓系统的Bootloader解锁成为技术爱好者绕不开的话题。特别是对于华为和荣耀设备用户而言,自2018年官方关闭解锁服务后,这一过程变得更…...

多语言双轨直销系统开发要点

系统架构设计 采用微服务架构确保模块化与扩展性,支持高并发场景。数据库设计需考虑多语言数据存储,推荐使用NoSQL(如MongoDB)处理非结构化翻译内容。负载均衡技术保障全球用户访问速度。核心功能模块 会员管理模块实现双轨层级计…...

黑客用ChatGPT生成病毒:安全测试员的噩梦

当攻击进入“自动化”时代对于软件测试从业者而言,每一次技术革新都意味着测试对象、方法和工具的深刻变革。过去,我们面对的是由人类程序员编写的、逻辑相对固定的代码。然而,大语言模型(LLM)的兴起,特别是…...

SecGPT-14B模型压力测试:验证OpenClaw高并发安全任务的稳定性

SecGPT-14B模型压力测试:验证OpenClaw高并发安全任务的稳定性 1. 测试背景与目标 最近在探索如何将OpenClaw与安全大模型结合,构建一个自动化安全分析助手。SecGPT-14B作为一款专注于网络安全的大模型,理论上可以处理端口扫描、日志分析等任…...