Web API接口安适了解

时间:2021-12-14 07:29:53

2017版OWASP top 10 将API安适纳入此中,足以说明API被广泛使用且安适问题严重。本身测验考试整理一下,但限于本人搬砖经验还不敷、程度有限,本文只能算是抛砖引玉,但愿大伙不吝见教。

了解Web Service(API) Web Service是一种跨编程语言和跨操纵系统平台的长途挪用技术。目前被广泛运用于移动端APP、物联网IoT、WEB应用等场景。 主流Web Service实现方法 SOAP/XML 简单东西访谒协议(SOAP)接口,通过HTTP进动作静传输。它是基于xml语言开发,使用Web处事描述语言(WSDL)来进行接口描述。是一种很成熟的Web Service实现方法,整体上有被REST代替的趋势。 REST/JSON 表示层状态转移(REST),素质上讲的是一种ROA(Resource Oriented Architecture)架构气势派头。切合这种架构气势派头的API接口,我们称之为RESTful API。 PS: REST气势派头的接口既可以使用JSON,也可以使用XML,但由于JSON越发轻,故而根基不用XML。

XML示例:

1

2

3

4

5

6

7

8

9

10

11

 

<?xml version="1.0" encoding="UTF-8" ?>

<person>

<name>Jason</name>

<age>99</age>

<sex>male</sex>

<contact>

<mobile>13888888888</mobile>

<email>[email protected]</email>

<wechat>bingo</wechat>

</contact>

</person>

 

JSON示例:

1

2

3

4

5

6

7

8

9

10

11

12

 

{

"person": {

"name": "Jason",

"age": "99",

"sex": "male",

"contact": {

"mobile": "13888888888",

"email": "[email protected]",

"wechat": "bingo"

}

}

}

 
API安适 API的安适要素

认证和鉴权 - 认证用户身份 & 确定用户权限

凡是情况下,,webAPI是基于HTTP协议的,也是无状态传输的。故而认证任务就需要我们本身实现,所以原则上每一次API请求都需要带上身份认证信息,凡是使用的是API key。

加密和签名 - 保证信息的保密性和完整性

凡是使用SSL/TLS来加密通信动静,由API客户端发送和接收。签名用于确保API请求和响应在传输过程中未被篡改。

缝隙 - 注入打击 & 敏感数据泄露 & 越权访谒

打击面检测

尽可能多的了解API端点、动静、参数、行为。

发明API中可能存在问题的元数据。

记录流量进一步学习API

爆破 - 暴力破解路径或资源

打击方法

1.模糊测试

使用自动化工具并行的将大量的随机内容(各类可能的值或可能的打击向量)作为输入参数进行永劫间的测验考试,并自动验证响应信息,确认是否获取到不测收获(系统或代码相关的信息)。

2.注入打击

使用SQL,XML,Xpath,JSON,JavaScript等的常见打击向量测验考试进行代码注入,并验证不测响应。

3.无效/越界内容

测验考试各类无效或者超范畴的内容,并验证响应信息。

4.恶意内容

在上传成果点测验考试上传可执行文件或脚本等,使处事器测验考试进行解析。

5.XSS

上传常见打击向量进行XSS(反射型,存储型等)测试。

6.CSRF

测试API是否含有token,token是否能复用,是否可被伪造。

7.不安适的直接东西引用

测验考试对挨次化的id号进行越权访谒,测验考试访谒无权限的要领或操纵。

8.其它考虑

会话认证(token是否正确使用) 安适配置(前述打击照成系统/应用等信息泄露) 打击演示 1. DVWS | WSDL Enumeration

前端页面

源码中袒露wsdl文件

wsdl文件中可以检察到四种要领

使用READY!API(SOAPUI升级版)可以直不雅观的看到4种要领并进行接口测试

测验考试使用check_user_information要领,测验考试填入username(实际测试中可能需要结合爆破方法),接口返回了相关数据,从而导致数据泄露。

2. DVWS | XML External Entity Processing

提交正常请求:

1

 

<name>Mr.Bingo</name>

 


提交payload:

1

 

<?xml version="1.0"?> <!DOCTYPE bingo [ <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><name>&xxe;</name>

 

特别测试: